AT Device 软件包:针对不同设备的 AT Socket 移植和示例文件,以软件包的形式给出;
AT Socket 数据结构:
3.3.2.1 AT Socket API介绍
1int at_socket(int domain, int type, int protocol)
通过协议族AF_AT获取第一个指定协议簇类型的网卡对象
通过网卡对象的名字获得AT设备的对象
通过AT设备的对象分配并初始化一个新的AT套接字
1int at_bind(int socket, const struct sockaddr *name, socklen_t namelen)
获取当前设备ip地址
从sockaddr结构中选择ip地址和端口
如果输入的ip地址不同于设备的ip地址,则根据输入的ip分配新的套接字,否则返回。
1int at_connect(int socket, const struct sockaddr *name, socklen_t namelen)
socketaddr结构获取IP地址和端口
调用对应AT网卡驱动的_socket_connect()链接服务器
设置套接字接收数据回调函数
1int at_sendto(int socket, const void *data, size_t size, int flags, const struct sockaddr *to, socklen_t tolen)
调用对应AT网卡驱动的_socket_send()发送数据
其他API
1int at_closesocket(int socket)
2
1int at_recvfrom(int socket, void *mem, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen)
2
1int at_getsockopt(int socket, int level, int optname, void *optval, socklen_t *optlen)
2
1int at_setsockopt(int socket, int level, int optname, const void *optval, socklen_t optlen)
2
1int at_shutdown(int socket, int how)
2
4、应用实例
4.1 使用at_device软件包的ESP8266模组
使用AT Socket 功能的框架:
启动流程:
4.1.1 注册ESP8266设备驱动
1static int esp8266_device_class_register(void)
2
创建并初始化ESP8266 device class对象
在at_device_class_list列表注册AT_DEVICE_CLASS_ESP8266客户端ID
注册esp8266设备操作函数:
1static const struct at_device_ops esp8266_device_ops =
2{
3 esp8266_init,
4 esp8266_deinit,
5 esp8266_control,
6};
7class-》device_ops = &esp8266_device_ops
8
注册esp8266_at_socket操作接口:
1static const struct at_socket_ops esp8266_socket_ops =
2{
3 esp8266_socket_connect,
4 esp8266_socket_close,
5 esp8266_socket_send,
6 esp8266_domain_resolve,
7 esp8266_socket_set_event_cb,
8};
4.1.2 初始化ESP8266设备,链接上无线网络