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 等网络命令;