LiteOS之CoAP对接华为云流程简介

星辰27 发表于 2021/01/14 16:30:02 2021/01/14
【摘要】 前文介绍过LiteOS的整体执行流程,本文以COAP对接华为云为例,简单描述对接的流程细节。希望对你有所帮助

前文介绍过Lite OS函数的调用关系,如何启动到main函数的执行以及具体使能的demo执行,以CoAP协议对接华为云为例,下图可见main函数执行到link_test回调link_main,在link_main中包含了一些组件以及协议的初始化,最后调用了stardard_app_demo_main函数来执行我们的对接云的demo,在coap对接过程中一定需要初始化的两个重要函数,oc_coap_init以及coap_al_init函数,下面我们来介绍这两个函数的初始化如何将OC层与network层的协议栈连接到一起。

1.png同时在该demo中主要调用了三个函数实现对接华为云的全流程,包括采集数据的collect函数,以及命令处理的cmd函数,以及最重要的任务上报函数app_report_task_entry()函数,在函数中包括oc_coap_config()实现对包括ip地址、端口对接模式等一系列参数的配置,该函数的具体细节会在后文中讲解,最后调用oc_coap_report函数进行上报数据。

要了解其中的细节我们首先要知道该SDK的架构中两个重要的文件夹,network网络层、OC对接层,二者都包括了al层,分别是对协议栈的封装抽象层以及对OC的封装抽象。

5.png

首先来看结构体oc_coap_t,该结构体中包含两个参数,一个为名字name,另一个为结构体oc_coap_opt_t类型的指针 *opt。

typedef struct
{
    const char          *name;    

    const oc_coap_opt_t  *opt;    
}oc_coap_t;

static oc_coap_t  s_oc_coap_ops;

结构体oc_coap_opt_t中有三个指针函数config、report、deconfig,分别负责连接参数配置、上报数据、以及断开连接。

typedef struct

{
    fn_oc_coap_config   config;   

    fn_oc_coap_report   report;   

    fn_oc_coap_deconfig deconfig; 

}oc_coap_opt_t;

接下来看OC层对coap协议的初始化,从oc_coap_init()函数调用oc_coap_imp_init()函数,在该函数调用了register函数,其中register函数的参数为结构体oc_coap_opt_t类型,该结构体中包括三个指针函数config、report、deconfig,该参数s_oc_coap_agent_opt中实现了对三个指针函数的赋值,分别将其赋值为__agent_config,__anget_report,__agent_deconfig函数。

再看图中最下面的coap协议栈端的初始化,从coap_al_init()函数调用到coap_imp_init()实现函数,其中调用了install函数,其参数为coa_al_op_t(结构体)类型的litecoap_op,与前文类似,这其中包含了对于init等一系列指针函数的初始化,实现了与coap协议栈的对接。

2.png


看图中红色箭头部分,前文我们调用了oc_coap_config(&oc_param)进行参数配置,在该函数中调用了config函数,可见s_oc_coap_ops.opt即为oc_coap_opt_t类型,其中定义了指针函数,config、deconfig、report,而这3个指针函数在OC层初始化过程中已经进行了初始化赋值,__agent_config、__agent_report、__agent_config等,在这三个函数的内部实现细节中调用了coap_al.c中的函数,而被调用的这些函数是协议栈的封装而成,实现了OC层和协议栈的对接。

如果采用WIFI模组对接华为云,还需要对TCPIP的抽象层进行初始化,该初始层指的是network/tcpip/sal中的文件,sal层与osal层的作用类似,如下图从link_tcpip_init到link_tcpip_imp_init函数,在该函数中调用了tcpip_init函数以及link_sal_install(&s_tcpip_socket),该参数中初始化了关于socket的一系列函数的赋值,实现对接。当然该协议在coap中的TCP也会用到,如果是NB模组其内部是具有一些协议栈的,因此不需要使用该处。

4.png

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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