别着急,坐和放宽
AT设备你们是如何解析的呢?笔者第一次使用at设备,是一个4G模块,大夏龙雀的L511-2。
看了新公司的同事的代码,这颗模块实现MQTT的方式,是直接用了AT+MQTT的方式来下发。
我打算换一个架构,之前学习的是socket做网络应用,我想把AT设备封装成socket接口。
这部分代码就不自己造轮子了,据我了解rtthread直接有at socket,今天就花一天时间阅读一下它的源码。
这里得分为两部分,一个是AT协议的解析框架。第二个是如何把AT指令封装成socket。
我们先来看第一个。
最底层的发送接口使用一个weak定义的函数at_utils_send实现:
rt_weak rt_size_t at_utils_send(rt_device_t dev,
rt_off_t pos,
const void *buffer,
rt_size_t size)
{
return rt_device_write(dev, pos, buffer, size);
}
// 代码
它内部调用rt_device_write,如果我们物理接口使用的是device io框架,那么可以直接使用。
根据语义,主动的被称为Client,被动的被称为Server。在我们的应用场景中往往模块被当成Server,而调用模块的MCU当成Client。如果你是要自己做一个模块,那就是实现Server。
在rtthread的代码中,提供了at_client.c和at_server.c这样子两个文件。
作为使用模块的用户,这里启用at_client.c