学习AT框架有感

这周状态不太佳,联赛逐渐恢复,精力多数放在其上面,加之宝宝逐渐长大,育儿似乎已经迫在眉睫,下周尽量精力集中点。

在找寻Mbedtls学习视频上又看了一会MQTT,有一篇文章是TencentOs tiny的现在找不到是哪篇了,里面介绍的如何使用tencentOS连接腾讯的IOT HUB,且教你移植相关模块。

经过再一次搜索,转载这篇文章:腾讯IOT HUB开发

里面介绍,作为终端你需要MQTT与腾讯云进行通讯,而使用TencentOs tiny的以下几个模块既可以:

1.tos_at 就是我一直在学习的AT框框

2.tos_hal_uart.c硬件接口层

3.MQTT协议

上层MQTT的操作最终都会转为为对底层通信设备的socket操作, OS集成了sal_module_wrapper层, 但是由于各个开发板硬件不同, 因此需要对sal_module_wrapper进行适配. 适配过程的核心数据结构为sal_module_t,

typedef struct sal_module_st{
    int (*init)(void);
    int (*get_local_mac)(char *mac);
    int (*get_local_ip)(char *ip, char *gw, char *mask);
    int (*parse_domain)(const char *host_name, char *host_ip, size_t host_ip_len);
    int (*connect)(const char *ip, const char *port, sal_proto_t proto);
    int (*send)(int sock, const void *buf, size_t len);
    int (*recv_timeout)(int sock, void *buf, size_t len, uint32_t timeout);
    int (*recv)(int sock, void *buf, size_t len);
    int (*sendto)(int sock, char *ip, char *port, const void *buf, size_t len);
    int (*recvfrom)(int sock, char *ip, char *port, void *buf, size_t len);
    int (*recvfrom_timeout)(int sock, char *ip, char *port, void *buf, size_t len, uint32_t timeout);
    int (*close)(int sock);
}sal_module_t;
在使用的时候, 并不需要全部实现, 只需实现下列几个核心的接口即可:

sal_module_t sal_module_esp8266 = {
    .init               = esp8266_init,
    .connect            = esp8266_connect,
    .send               = esp8266_send,
    .recv_timeout       = esp8266_recv_timeout,
    .recv               = esp8266_recv,
    .sendto             = esp8266_sendto,
    .recvfrom           = esp8266_recvfrom,
    .recvfrom_timeout   = esp8266_recvfrom_timeout,
    .close              = esp8266_close,
    .parse_domain       = esp8266_parse_domain,
};

我们自己去实现esp8266,比如你换成移远BG95,应用层还是操作SAL层的INIt,而底下你实现的是ESP8266_INIT还是BG95INIT都无关紧要。

    这里回归我之前学习的TLS,我当时总去纠结tls_connet后到底是如何跑的,其实无需关心,到最后均是类似这种框架,移植tTLS代码后,你只需去实现你的socket模组操作而无需每个socket函数去修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值