LiteOS之Lwm2m对接华为云流程分析(下)

举报
星辰27 发表于 2021/02/07 09:35:31 2021/02/07
【摘要】 本文主要对LwM2M对接华为云的流程做了一个简单的介绍,希望对你有所帮助

3.1 NB模组对接华为云

        第一种采用boudica150对接华为云,其主要指内部包含lwM2M协议栈的模组之类。这里主要就是在boudica150.c中实现了oc_lwm2m_imp_init()函数,其调用的注册功能是参数中存在结构体oc_lwm2m_opt_t,该函数中对应实现了OC类的接口实现部分,即config,report,deconfig函数,其中config的实现会调用对应的boudica150_boot()设置NB模组的一些基本参数,该函数内部调用at_oobregister注册函数报告上报函数中主要是通过AT指令进行实现,包括字节转换为ASCII码等以及at_command函数等。


3.png



3.2 Agent流程对接

        第二种就是使用agent_lwm2m.c中的oc_lwm2m_imp_init()函数,长长的调用注册函数,调用对应的OC类的接口实现部分,

const oc_lwm2m_opt_t  s_oc_lwm2m_agent_opt = \
{
    .config = __agent_config,
    .deconfig = __agent_deconfig,
    .report = __agent_report,
};
int oc_lwm2m_imp_init()
{
    int ret = -1;
    ret = oc_lwm2m_register("oc_lwm2m_agent", &s_oc_lwm2m_agent_opt);
    return ret;
}
 接下来分别看下这三个函数的内部实现情况。
        _agent_config()其内部包括各个参数的设置,如设备类型,厂商,绑定方式,生命周期,缓存数据报文数,引导模式,等待实验,服务器地址,端口号psk信息等等。调用了4个函数,首先,atiny_check_parameter()函数检测设备信息以及句柄是否合法,内部调用函数分别检测引导程序和psk内部参数的合法性。
        首先,调用函数,其调用lwm2m_agent_receive()接收函数,将其oc_lwm2m_imp_agent_t句柄的变量函数进行赋值。
        接下来,调用agent_add_objects()添加对象,包括安全对象,服务器对象,控制对象,设备对象,连接对象,固件升级对象,位置对象,以及19号对象等,分别对象下面1-7,以及agent_lwm2m.c文件中116行。调用了uri_list_add()将对象添加到链表中。
typedef enum
{
    OBJ_SECURITY_ID = 0,
    OBJ_SERVER_ID,
    OBJ_ACCESS_CONTROL_ID,
    OBJ_DEVICE_ID,
    OBJ_CONNECTIVITY_MONITORING_ID,
    OBJ_FIRMWARE_UPDATE_ID,
    OBJ_LOCATION_ID,
    OBJ_CONNECTIVITY_STATISTICS_ID,
    OBJ_APP_DATA_ID = 19
} lwm2m_object_id_e;

          后面都调用lwm2m AL层中的lwm2m_al_add_object()函数,去添加对象,其内部操作接口如下。可见上图中的后面的函数内部也是调用了该结构体的相应函数。


typedef struct
{
/* lwm2m config, prepare endpoint name and message deal callback */
int (*config)(void **handle, lwm2m_al_init_param_t *init_param);
/* lwm2m deinit */
int (*deconfig)(void *handle);
/* lwm2m add object */
int (*add_object)(void *handle, int object_id, int object_instance_id, int resource_id, void *param);
/* lwm2m delete object */
int (*delete_object)(void *handle, int object_id);
/* lwm2m connect */
int (*connect)(void *handle);
/* lwm2m disconnect */
int (*disconnect)(void *handle);
/* lwm2m send */
int (*send)(void *handle, lwm2m_al_send_param_t *send_param);
} lwm2m_al_op_t;

4.png

            当然,上述过程其内部实现细节深层调用的是lwm2m协议栈,因为如果想使用agent进行流程对接,需要同时使能开关CONFIG_LWM2M_AL_ENABLE,则在link_main()初始化的时候,同时会调用lwm2m_imp_init(),其内部有结构体lwm2m_al_opt_t,其中封装了包括注册,退出,添加对象,删除对象,连接,交换连接,以及发送数据等接口,则实现与上图中表示的lwm2m_al层中的deconfig,connect,send等进行这对8个函数内部细节不做一一介绍,具体实现在文件iot_link-> network-> lwm2m-> wakaama_lwm2m-> port-> lwm2m_port.c文件中。


5.png


4应用开发

        对于应用开发者而言,其做的工作流程包括以下几点:

(1)使用oc_lwm2m_config函数进行配置;主要包括服务器IP,端口以及加密方式等,调用该函数成功,则表示成功和服务器握手

(2)调用oc_lwm2m_report进行数据上报(按需调用)

(3)如果需要,调用oc_lwm2m_deconfig替换服务器
        当然具体细节还包括后续关联配置文件定义的相应数据结构体属性和命令,定义ID等。
接下来以路灯案例介绍用户这边的函数调用关系,前文已经介绍到link_main()函数中的一些初始化工作,在函数最后通过使能CONFIG_LINKDEMO_ENABLE开关调用了函数standard_app_demo_main(),在其内部用户创建了多个任务,包括收集数据任务,数据上报任务,命令处理任务。在收集数据任务中app_collect_task_entry()主要进行传感器数据的显示,直接显示传感器数据对应的结构体参数即可。)上包含任务的app_report_task_entry()中包含的工作比较多,包括各种参数的设置,包括服务器IP,步骤号,工作模式等等,以及其他函数app_msg_deal()命令处理函数,就是当收到是aaaa时打印oc接收到响应消息。然后调用oc_lwm2m_report()函数实现了相应的上报数据api的调用。 app_cmd_task_entry(),以智慧路灯demo为例,当收到来自平台的“ ON”命令的时候,打开路灯等。

6.png


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。