这周状态不太佳,联赛逐渐恢复,精力多数放在其上面,加之宝宝逐渐长大,育儿似乎已经迫在眉睫,下周尽量精力集中点。
在找寻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函数去修改。