LiteOS之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.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;
}
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;
当然,上述过程其内部实现细节深层调用的是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文件中。
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”命令的时候,打开路灯等。
- 点赞
- 收藏
- 关注作者
评论(0)