30}
3.2.5 AT Client其他接口
发送指定长度数据:
1rt_size_t at_client_send(const char *buf, rt_size_t size);
接收指定长度数据:
1rt_size_t at_client_recv(char *buf, rt_size_t size,rt_int32_t timeout);
设置接收数据的行结束符:
1void at_set_end_sign(char ch);
等待模块初始化完成:
1int at_client_wait_connect(rt_uint32_t timeout);
3.3 AT 协议簇
3.3.1 AT 设备框架
网卡的初始化和注册建立在协议簇类型上,所以每种网卡对应唯一的协议簇类型。每种协议栈对应一种协议簇类型(family),AT协议簇对应的协议栈是AT Socket 协议栈,每种AT设备都对应唯一的AT Socket 协议栈。
AT 设备列表:
1/* The global list of at device */
2static rt_slist_t at_device_list = RT_SLIST_OBJECT_INIT(at_device_list);
3/* The global list of at device class */
4static rt_slist_t at_device_class_list = RT_SLIST_OBJECT_INIT(at_device_class_list);
at设备的具体网卡对象,例如(esp8266网卡、esp32网卡等)注册到at_device_class_list 列表,对at_device_class_list 创建的网卡对象进行填充。网卡注册在驱动层进行。
at设备对象注册到at_device_list列表,对at设备的具体网卡对象进行统一管理。AT设备注册在应用层进行。
AT设备数据结构:
AT设备注册接口:
1int at_device_register(struct at_device *device, const char *device_name,
2 const char *at_client_name, uint16_t class_id, void *user_data)
应用层运行AT设备注册接口之前,需要先在外设驱动相关的自动初始化机制INIT_DEVICE_EXPORT(fn) 申明注册AT类的网卡设备,然后应用层注册AT设备的时候才能在at_device_class_list 列表里通过AT设备ID找到具体的网卡驱动。
3.3.2 AT Socket
AT Socket 是AT Client 功能的延伸,使用 AT 命令收发作为基础功能,提供 ping 或者 ifconfig等命令用于测试设备网络连接环境,ping 命令原理是通过 AT 命令发送请求到服务器,服务器响应数据,客户端解析 ping 数据并显示。ifocnfig 命令可以查看当前设备网络状态和 AT 设备生成的网卡基本信息。
AT Socket 功能的使用依赖于如下几个组件:
AT 组件:AT Socket 功能基于 AT Client 功能的实现;
SAL 组件:SAL 组件主要是 AT Socket 接口的抽象,实现标准 BSD Socket API;
netdev 组件:用于抽象和管理 AT 设备生成的网卡设备相关信息,提供 ping、ifconfig、netstat 等网络命令;