Link Kit C-SDK
4.1.0
|
COAP模块头文件, 提供设备通过COAP连云的能力 更多...
#include <stdint.h>
类 | |
struct | aiot_coap_recv_t |
struct | aiot_coap_event_t |
struct | aiot_coap_request_t |
aiot_coap_send 函数的aiot_coap_request_t参数 更多... | |
宏定义 | |
#define | STATE_COAP_BASE (-0x0800) |
-0x0800~-0x08FF表达SDK在COAP模块内的状态码 更多... | |
#define | STATE_COAP_LOG_HEXDUMP (-0x0801) |
COAP收发消息时, SDK反馈COAP消息内容的状态码 更多... | |
#define | STATE_COAP_HEADER_TYPE_ERROR (-0x0802) |
COAP收发消息时, 消息header中type字段非法 更多... | |
#define | STATE_COAP_HEADER_CODE_ERROR (-0x0802) |
COAP收发消息时, 消息header中code字段中的前三个bit所对应的数字是0/2/4/5之外的数字 更多... | |
#define | STATE_COAP_MSG_LEN_ERROR (-0x0803) |
接收COAP消息时, 收到的报文长度还不够header的长度(4个字节) 更多... | |
#define | STATE_COAP_MSG_TOKEN_LEN_TOO_SHORT (-0x0804) |
接收COAP消息时, 收到的token的长度小于header中的tkl字段 更多... | |
#define | STATE_COAP_RX_OPTION_CNT_EXCEED_LIMIT (-0x0805) |
接收COAP消息时, 收到的option的数据超过COAP_DEFAULT_OPTION_CNT_MAX(15)限制 更多... | |
#define | STATE_COAP_OPT_DELTA_THIRTEEN_OPT_LEN_ERROR (-0x0806) |
收到的报文中的option的opt_delta的第一个字段为13, 但报文的长度不足, 不足以完整地解出option字段 更多... | |
#define | STATE_COAP_OPTION_END_NOT_FOUND (-0x0807) |
option结束的地方, 没有0XFF这个标记位 更多... | |
#define | STATE_COAP_TX_URI_OPTION_CNT_EXCEED_LIMIT (-0x0808) |
发送报文的时候, uri按照"/"拆分成分段后, 分段总数超出COAP_DEFAULT_OPTION_CNT_MAX-2,即13个的限制 更多... | |
#define | STATE_COAP_MALLOC_MSG_FAILED (-0x0809) |
创建待发送的COAP报文的时候, 为COAP报文分配内存失败 更多... | |
#define | STATE_COAP_MALLOC_MSG_BUFFER_FAILED (-0x080A) |
创建待发送的COAP报文时, 为COAP报文中的payload字段分配内存失败 更多... | |
#define | STATE_COAP_REQUEST_IS_NULL (-0x080B) |
创建待发送的COAP报文时, 出参的指针request为空 更多... | |
#define | STATE_COAP_OPT_DELTA_FOURTEEN_OPT_LEN_ERROR (-0x080C) |
创建coap报文时, 当opt_delta第一个字段为14时, option内容太多,超出了总共发送buffer的大小 更多... | |
#define | STATE_COAP_EMPTY_MSG_PARAM_ERROR (-0x080D) |
创建COAP空报文时, coap句柄为空, 出参的指针为空, 或者type字段为NON类型 更多... | |
#define | STATE_COAP_EMPTY_MSG_MALLOC_FAILED (-0x080E) |
创建COAP空报文时, 分配内存错误 更多... | |
#define | STATE_COAP_OPTION_NOT_IN_ORDER (-0x080F) |
创建COAP消息时, option并没有按照顺序排列 更多... | |
#define | STATE_COAP_HEADER_FORMAT_ERROR (-0x0810) |
解析收到的COAP消息时, 版本号不对, 或则token长度超过8 更多... | |
#define | STATE_COAP_OPTION_BUFFER_TOO_SHORT (-0x081A) |
创建coap报文时, option太多, 以至于塞满了发送的buffer 更多... | |
#define | STATE_COAP_SEND_MESSAGE_IS_NULL (-0x081B) |
发送coap报文时, 报文为空 更多... | |
#define | STATE_COAP_HEADER_BUFFER_IS_TOO_SHORT (-0x081C) |
创建coap报文时, 为头部预留的空间小于4个字节, 无法存下头部 更多... | |
#define | STATE_COAP_OPT_LEN_THIRTEEN_OPT_LEN_ERROR (-0x081D) |
创建coap报文时, 当opt_len第一个字段为13时, option内容太多,超出了总共发送buffer的大小 更多... | |
#define | STATE_COAP_CREATE_PSK_FAILED (-0x081E) |
auth过程中, 创建psk的id失败 更多... | |
#define | STATE_COAP_SET_NWK_PARMS_FAILED (-0x081F) |
coap实例设置网络参数失败 更多... | |
#define | STATE_COAP_SEND_HANDLE_IS_NULL (-0x0820) |
发送网络报文时, coap实例还没经过初始化 更多... | |
#define | STATE_COAP_SEND_TOPIC_IS_NULL (-0x0821) |
发送网络报文时, topic字段为空 更多... | |
#define | STATE_COAP_SEND_REQUEST_IS_NULL (-0x0822) |
发送网络报文时, 所填入的request参数是一个空指针 更多... | |
#define | STATE_COAP_SEND_PAYLOAD_IS_NULL (-0x0823) |
发送网络报文时, request参数中的payload字段是一个空指针 更多... | |
#define | STATE_COAP_SET_PSK_FAILED (-0x0824) |
coap实例设置PSK参数失败 更多... | |
#define | STATE_COAP_NWK_ESTABLISH_FAILED (-0x0825) |
与coap服务器进行dtls-psk握手失败 更多... | |
#define | STATE_COAP_RECV_HANDLE_IS_NULL (-0x0826) |
调用 aiot_coap_recv 进行收包时, coap句柄还没经过初始化 更多... | |
#define | STATE_COAP_AUTH_HANDLE_IS_NULL (-0x0827) |
调用 aiot_coap_auth 获取auth token时, coap句柄还没经过初始化 更多... | |
#define | STATE_COAP_AUTH_DEVICE_INFO_MISSING (-0x0828) |
调用 aiot_coap_auth 获取auth token时, 设备的三元组为空 更多... | |
#define | STATE_COAP_SIGN_SRC_MALLOC_FAILED (-0x0829) |
调用 aiot_coap_auth 获取auth token时, 为计算签名分配内存失败 更多... | |
#define | STATE_COAP_TX_TOTAL_OPTION_CNT_EXCEED_LIMIT (-0x082A) |
发送报文的时候, 所有option(包括uri拆散后得到的option和其他option)的总和超出COAP_DEFAULT_OPTION_CNT_MAX(15)的限制 更多... | |
#define | STATE_COAP_RECV_WITHOUT_AUTHORIZATION (-0x082B) |
在未得到auth token的情况下调用 aiot_coap_recv 进行收包, 导致收包失败 更多... | |
#define | STATE_COAP_AUTH_TIMEOUT (-0x082C) |
发出获取auth token的请求后, 并未在 AIOT_COAPOPT_AUTH_TIMEOUT 设置的超时到达前获取到auth token 更多... | |
#define | STATE_COAP_AUTH_RSP_TOKEN_IS_NULL (-0x082D) |
设备端发出获取auth token的请求后, 云端下行的报文中auth token字段为空 更多... | |
#define | STATE_COAP_AUTH_DEBUG (-0x082E) |
SDK反馈auth token内容的状态码 更多... | |
#define | STATE_COAP_AUTH_TOKEN_MALLOC_FAILED (-0x082F) |
coap句柄为云端下行报文中的auth token分配内存进行存储时, 分配内存失败 更多... | |
#define | STATE_COAP_SEND_INVALID_MSG_TYPE (-0x0830) |
用户要发送的消息既不是CON类型, 又不是NON类型 更多... | |
#define | STATE_COAP_NWK_HANDLE_IS_NULL (-0x0831) |
coap句柄中的network句柄初始化失败 更多... | |
#define | AIOT_COAP_OPT_PARAMS_INVALID (-0x0832) |
调用 aiot_coap_setopt 设置coap句柄参数时, coap句柄没有经过初始化, 或者传入的参数为空 更多... | |
#define | STATE_COAP_INVALID_OPTION (-0x0833) |
调用 aiot_coap_setopt 设置coap句柄参数时, option字段非法 更多... | |
#define | STATE_COAP_UNSUPPORTED_CONTENT_FORMAT (-0x0834) |
调用 aiot_coap_send 发送消息时,消息的content format字段错误, 不在支持范围内 更多... | |
#define | STATE_COAP_SEND_WITHOUT_AUTHORIZATION (-0x0835) |
在未得到auth token的情况下调用 aiot_coap_send 进行发包, 导致发包失败 更多... | |
#define | STATE_COAP_OPT_LEN_FOURTEEN_OPT_LEN_ERROR (-0x0836) |
创建coap报文时, 当opt_len第一个字段为14时, option内容太多,超出了总共发送buffer的大小 更多... | |
#define | STATE_COAP_PAYLOAD_BUFFER_IS_TOO_SHORT (-0x0837) |
创建coap报文时, 为头部预留的空间小于4个字节, 无法存下头部 更多... | |
#define | STATE_COAP_OPTION_LEN_ERROR (-0x0838) |
收到的coap报文中, 声明的option的长度比实际长度要大 更多... | |
#define | STATE_COAP_LOG_AUTH_TOKEN (-0x0839) |
收到auth token时, SDK反馈auth token消息内容的状态码 更多... | |
#define | STATE_COAP_LOG_CONTENT (-0x083A) |
收到auth token以外的其他内容时, SDK反馈消息内容的状态码 更多... | |
#define | STATE_COAP_INPUT_OUT_RANGE (-0x083B) |
请求消息长度不在范围内 更多... | |
#define | STATE_COAP_DYNREG_SECRET_TOO_LONG (-0x0840) |
动态注册,接收的密钥长度超过内存长度,需要加大内存 更多... | |
#define | STATE_COAP_DYNREG_HANDLE_IS_NULL (-0x0841) |
动态注册,coap handle为空 更多... | |
#define | STATE_COAP_DYNREG_DEVICE_INFO_MISSING (-0x0842) |
动态注册,设备参数缺失 更多... | |
#define | STATE_COAP_DYNREG_TIMEOUT (-0x0843) |
动态注册,云端返回消息超时 更多... | |
#define | STATE_COAP_AUTH_FAILED (-0x0844) |
设备认证/动态注册,云端返回校验失败 更多... | |
类型定义 | |
typedef void(* | aiot_coap_recv_handler_t) (void *handle, aiot_coap_recv_t *packet, void *userdata) |
COAP报文接收回调函数原型 更多... | |
typedef void(* | aiot_coap_event_handler_t) (void *handle, aiot_coap_event_t *event, void *userdata) |
COAP事件回调函数 更多... | |
函数 | |
void * | aiot_coap_init (void) |
初始化coap实例并设置默认参数 更多... | |
int32_t | aiot_coap_setopt (void *handle, aiot_coap_option_t option, void *data) |
设置coap参数 更多... | |
int32_t | aiot_coap_send (void *handle, const char *topic, aiot_coap_request_t *message) |
发送COAP报文 更多... | |
int32_t | aiot_coap_recv (void *handle) |
从网络收取COAP报文 更多... | |
int32_t | aiot_coap_deinit (void **handle) |
释放COAP实例句柄的资源 更多... | |
int32_t | aiot_coap_auth (void *handle) |
让coap模块与服务器通信, 并且获取auth token 更多... | |
int32_t | aiot_coap_dynreg (void *handle, const char *product_secret, char *out_secret, uint32_t out_secret_maxlen) |
设备动态注册,返回设备密钥 更多... | |
int32_t | aiot_coap_request_message (void *handle, int32_t counter) |
设备主动请求下拉消息 更多... | |
COAP模块头文件, 提供设备通过COAP连云的能力
COAP模块用于建立与阿里云物联网平台的连接, API使用流程如下:
#define STATE_COAP_BASE (-0x0800) |
-0x0800~-0x08FF表达SDK在COAP模块内的状态码
#define STATE_COAP_LOG_HEXDUMP (-0x0801) |
COAP收发消息时, SDK反馈COAP消息内容的状态码
#define STATE_COAP_HEADER_TYPE_ERROR (-0x0802) |
COAP收发消息时, 消息header中type字段非法
#define STATE_COAP_HEADER_CODE_ERROR (-0x0802) |
COAP收发消息时, 消息header中code字段中的前三个bit所对应的数字是0/2/4/5之外的数字
#define STATE_COAP_MSG_LEN_ERROR (-0x0803) |
接收COAP消息时, 收到的报文长度还不够header的长度(4个字节)
#define STATE_COAP_MSG_TOKEN_LEN_TOO_SHORT (-0x0804) |
接收COAP消息时, 收到的token的长度小于header中的tkl字段
#define STATE_COAP_RX_OPTION_CNT_EXCEED_LIMIT (-0x0805) |
接收COAP消息时, 收到的option的数据超过COAP_DEFAULT_OPTION_CNT_MAX(15)限制
#define STATE_COAP_OPT_DELTA_THIRTEEN_OPT_LEN_ERROR (-0x0806) |
收到的报文中的option的opt_delta的第一个字段为13, 但报文的长度不足, 不足以完整地解出option字段
#define STATE_COAP_OPTION_END_NOT_FOUND (-0x0807) |
option结束的地方, 没有0XFF这个标记位
#define STATE_COAP_TX_URI_OPTION_CNT_EXCEED_LIMIT (-0x0808) |
发送报文的时候, uri按照"/"拆分成分段后, 分段总数超出COAP_DEFAULT_OPTION_CNT_MAX-2,即13个的限制
#define STATE_COAP_MALLOC_MSG_FAILED (-0x0809) |
创建待发送的COAP报文的时候, 为COAP报文分配内存失败
#define STATE_COAP_MALLOC_MSG_BUFFER_FAILED (-0x080A) |
创建待发送的COAP报文时, 为COAP报文中的payload字段分配内存失败
#define STATE_COAP_REQUEST_IS_NULL (-0x080B) |
创建待发送的COAP报文时, 出参的指针request为空
#define STATE_COAP_OPT_DELTA_FOURTEEN_OPT_LEN_ERROR (-0x080C) |
创建coap报文时, 当opt_delta第一个字段为14时, option内容太多,超出了总共发送buffer的大小
#define STATE_COAP_EMPTY_MSG_PARAM_ERROR (-0x080D) |
创建COAP空报文时, coap句柄为空, 出参的指针为空, 或者type字段为NON类型
#define STATE_COAP_EMPTY_MSG_MALLOC_FAILED (-0x080E) |
创建COAP空报文时, 分配内存错误
#define STATE_COAP_OPTION_NOT_IN_ORDER (-0x080F) |
创建COAP消息时, option并没有按照顺序排列
#define STATE_COAP_HEADER_FORMAT_ERROR (-0x0810) |
解析收到的COAP消息时, 版本号不对, 或则token长度超过8
#define STATE_COAP_OPTION_BUFFER_TOO_SHORT (-0x081A) |
创建coap报文时, option太多, 以至于塞满了发送的buffer
#define STATE_COAP_SEND_MESSAGE_IS_NULL (-0x081B) |
发送coap报文时, 报文为空
#define STATE_COAP_HEADER_BUFFER_IS_TOO_SHORT (-0x081C) |
创建coap报文时, 为头部预留的空间小于4个字节, 无法存下头部
#define STATE_COAP_OPT_LEN_THIRTEEN_OPT_LEN_ERROR (-0x081D) |
创建coap报文时, 当opt_len第一个字段为13时, option内容太多,超出了总共发送buffer的大小
#define STATE_COAP_CREATE_PSK_FAILED (-0x081E) |
auth过程中, 创建psk的id失败
#define STATE_COAP_SET_NWK_PARMS_FAILED (-0x081F) |
coap实例设置网络参数失败
这里的参数包括host/port/cred/协议类型这4个字段
#define STATE_COAP_SEND_HANDLE_IS_NULL (-0x0820) |
发送网络报文时, coap实例还没经过初始化
#define STATE_COAP_SEND_TOPIC_IS_NULL (-0x0821) |
发送网络报文时, topic字段为空
#define STATE_COAP_SEND_REQUEST_IS_NULL (-0x0822) |
发送网络报文时, 所填入的request参数是一个空指针
#define STATE_COAP_SEND_PAYLOAD_IS_NULL (-0x0823) |
发送网络报文时, request参数中的payload字段是一个空指针
#define STATE_COAP_SET_PSK_FAILED (-0x0824) |
coap实例设置PSK参数失败
#define STATE_COAP_NWK_ESTABLISH_FAILED (-0x0825) |
与coap服务器进行dtls-psk握手失败
#define STATE_COAP_RECV_HANDLE_IS_NULL (-0x0826) |
调用 aiot_coap_recv 进行收包时, coap句柄还没经过初始化
#define STATE_COAP_AUTH_HANDLE_IS_NULL (-0x0827) |
调用 aiot_coap_auth 获取auth token时, coap句柄还没经过初始化
#define STATE_COAP_AUTH_DEVICE_INFO_MISSING (-0x0828) |
调用 aiot_coap_auth 获取auth token时, 设备的三元组为空
#define STATE_COAP_SIGN_SRC_MALLOC_FAILED (-0x0829) |
调用 aiot_coap_auth 获取auth token时, 为计算签名分配内存失败
#define STATE_COAP_TX_TOTAL_OPTION_CNT_EXCEED_LIMIT (-0x082A) |
发送报文的时候, 所有option(包括uri拆散后得到的option和其他option)的总和超出COAP_DEFAULT_OPTION_CNT_MAX(15)的限制
#define STATE_COAP_RECV_WITHOUT_AUTHORIZATION (-0x082B) |
在未得到auth token的情况下调用 aiot_coap_recv 进行收包, 导致收包失败
#define STATE_COAP_AUTH_TIMEOUT (-0x082C) |
发出获取auth token的请求后, 并未在 AIOT_COAPOPT_AUTH_TIMEOUT 设置的超时到达前获取到auth token
#define STATE_COAP_AUTH_RSP_TOKEN_IS_NULL (-0x082D) |
设备端发出获取auth token的请求后, 云端下行的报文中auth token字段为空
#define STATE_COAP_AUTH_DEBUG (-0x082E) |
SDK反馈auth token内容的状态码
#define STATE_COAP_AUTH_TOKEN_MALLOC_FAILED (-0x082F) |
coap句柄为云端下行报文中的auth token分配内存进行存储时, 分配内存失败
#define STATE_COAP_SEND_INVALID_MSG_TYPE (-0x0830) |
用户要发送的消息既不是CON类型, 又不是NON类型
当前coap模块会默认为下行的CON消息回复ack报文, 因此用户无需再回复. 当前用户能够发送的消息类型, 要么是CON类型, 要么是NON类型, 用户无法发送此外的其他类型
#define STATE_COAP_NWK_HANDLE_IS_NULL (-0x0831) |
coap句柄中的network句柄初始化失败
#define AIOT_COAP_OPT_PARAMS_INVALID (-0x0832) |
调用 aiot_coap_setopt 设置coap句柄参数时, coap句柄没有经过初始化, 或者传入的参数为空
#define STATE_COAP_INVALID_OPTION (-0x0833) |
调用 aiot_coap_setopt 设置coap句柄参数时, option字段非法
#define STATE_COAP_UNSUPPORTED_CONTENT_FORMAT (-0x0834) |
调用 aiot_coap_send 发送消息时,消息的content format字段错误, 不在支持范围内
#define STATE_COAP_SEND_WITHOUT_AUTHORIZATION (-0x0835) |
在未得到auth token的情况下调用 aiot_coap_send 进行发包, 导致发包失败
#define STATE_COAP_OPT_LEN_FOURTEEN_OPT_LEN_ERROR (-0x0836) |
创建coap报文时, 当opt_len第一个字段为14时, option内容太多,超出了总共发送buffer的大小
#define STATE_COAP_PAYLOAD_BUFFER_IS_TOO_SHORT (-0x0837) |
创建coap报文时, 为头部预留的空间小于4个字节, 无法存下头部
#define STATE_COAP_OPTION_LEN_ERROR (-0x0838) |
收到的coap报文中, 声明的option的长度比实际长度要大
#define STATE_COAP_LOG_AUTH_TOKEN (-0x0839) |
收到auth token时, SDK反馈auth token消息内容的状态码
#define STATE_COAP_LOG_CONTENT (-0x083A) |
收到auth token以外的其他内容时, SDK反馈消息内容的状态码
#define STATE_COAP_INPUT_OUT_RANGE (-0x083B) |
请求消息长度不在范围内
#define STATE_COAP_DYNREG_SECRET_TOO_LONG (-0x0840) |
动态注册,接收的密钥长度超过内存长度,需要加大内存
#define STATE_COAP_DYNREG_HANDLE_IS_NULL (-0x0841) |
动态注册,coap handle为空
#define STATE_COAP_DYNREG_DEVICE_INFO_MISSING (-0x0842) |
动态注册,设备参数缺失
#define STATE_COAP_DYNREG_TIMEOUT (-0x0843) |
动态注册,云端返回消息超时
#define STATE_COAP_AUTH_FAILED (-0x0844) |
设备认证/动态注册,云端返回校验失败
typedef void(* aiot_coap_recv_handler_t) (void *handle, aiot_coap_recv_t *packet, void *userdata) |
COAP报文接收回调函数原型
[in] | handle | COAP实例句柄 |
[in] | packet | COAP报文结构体指针, 指向所收到的COAP报文的内存地址 |
[in] | userdata | 用户上下文 |
typedef void(* aiot_coap_event_handler_t) (void *handle, aiot_coap_event_t *event, void *userdata) |
COAP事件回调函数
当COAP内部事件被触发时, 调用此函数. 如获取到auth_token的时候
enum aiot_coap_option_t |
aiot_coap_setopt 函数的option参数. 对于下文每一个选项中的数据类型, 指的是aiot_coap_setopt 中的data参数的数据类型
data的数据类型是char *时, 以配置AIOT_COAPOPT_HOST 为例:
char *host = "xxx";
aiot_coap_setopt(coap_handle, AIOT_COAPOPT_HOST, host);
data的数据类型是其他数据类型时, 以配置AIOT_COAPOPT_PORT 为例:
uint16_t port = 5684;
aiot_coap_setopt(coap_handle, AIOT_COAPOPT_PORT, (void *)&port);
枚举值 | |||||||
---|---|---|---|---|---|---|---|
AIOT_COAPOPT_HOST |
COAP 服务器的域名地址或者ip地址 阿里云物联网平台域名地址列表(必须使用自己的product key替换${pk}): 使用dtls-psk证书方式建联:
数据类型: (char *) | ||||||
AIOT_COAPOPT_PORT |
COAP 服务器的端口号 连接阿里云物联网平台时: 目前采用的是dtls-psk方式, 端口号为5684 数据类型: (uint16_t *) | ||||||
AIOT_COAPOPT_PRODUCT_KEY |
设备的product key, 可从阿里云物联网平台控制台获取 数据类型: (char *) | ||||||
AIOT_COAPOPT_DEVICE_NAME |
设备的device name, 可从阿里云物联网平台控制台获取 数据类型: (char *) | ||||||
AIOT_COAPOPT_DEVICE_SECRET |
设备的device secret, 可从阿里云物联网平台控制台获取 数据类型: (char *) | ||||||
AIOT_COAPOPT_CRED |
COAP建联时, 网络使用的安全凭据 该配置项用于为底层网络配置aiot_sysdep_network_cred_t 安全凭据数据 由于当前只支持以dtls-psk方式建联, 因此需要将 aiot_sysdep_network_cred_t 中option 配置为AIOT_SYSDEP_NETWORK_CRED_SVRCERT_PSK 数据类型: (aiot_sysdep_network_cred_t *) | ||||||
AIOT_COAPOPT_AUTH_TIMEOUT |
COAP连云时, 获取auth_token的超时时间 数据类型: (uint32_t *) 默认值: (2 *1000) ms | ||||||
AIOT_COAPOPT_RECV_TIMEOUT |
COAP接收数据时, 在协议栈花费的最长时间 数据类型: (uint32_t *) 默认值: (2 * 1000) ms | ||||||
AIOT_COAPOPT_SEND_TIMEOUT |
COAP发送数据时, 在协议栈花费的最长时间 数据类型: (uint32_t *) 默认值: (2 * 1000) ms | ||||||
AIOT_COAPOPT_RECV_HANDLER |
从COAP服务器收取的数据从此回调函数通知用户
数据类型: ( aiot_coap_recv_handler_t ) | ||||||
AIOT_COAPOPT_EVENT_HANDLER |
COAP客户端内部发生的事件会从此回调函数进行通知, 如获取到token等 数据类型: ( aiot_coap_event_handler_t ) | ||||||
AIOT_COAPOPT_USERDATA |
用户需要SDK暂存的上下文 上下文会在 AIOT_COAPOPT_RECV_HANDLER 和 AIOT_COAPOPT_EVENT_HANDLER 中传回给用户 数据类型: (void *) | ||||||
AIOT_COAPOPT_PAYLOAD_ENCRYPTION |
应用层数据PAYLOAD使用AES加密啊 数据类型: (uint8_t *) 取值范围: 0(关闭AES对称加密), 1(开启AES对称加密) 默认值: 0; | ||||||
AIOT_COAPOPT_MAX |
aiot_coap_send 函数的aiot_coap_request_t参数中的content_format字段.
阿里云常用的字段格式为AIOT_COAP_CT_APP_JSON, 即json格式, 以此为例:
aiot_coap_request_t req = { ... .content_format = AIOT_COAP_CT_APP_JSON, };
enum aiot_coap_msg_type_t |
aiot_coap_send 函数的aiot_coap_request_t参数中的msg_type字段.
ACK和RST消息都是coap句柄自动发送的, 用户无需关心. 用户能够自定义发送COAP的消息类型分为CON/NON两种. 以发送AIOT_COAP_MSG_TYPE_CON消息为例:
aiot_coap_request_t req = { ... .msg_type = AIOT_COAP_MSG_TYPE_CON, };
void* aiot_coap_init | ( | void | ) |
初始化coap实例并设置默认参数
非NULL | COAP实例句柄 |
NULL | 初始化失败, 一般是内存分配失败导致 |
int32_t aiot_coap_setopt | ( | void * | handle, |
aiot_coap_option_t | option, | ||
void * | data | ||
) |
设置coap参数
下面列出常用的配置选项, 至少需要配置以下选项才可使用COAP的基本功能
其余配置选项均设有默认值, 可按业务需要进行调整
AIOT_COAPOPT_HOST
: 配置连接的阿里云COAP站点地址AIOT_COAPOPT_PORT
: 配置连接的阿里云COAP站点端口号AIOT_COAPOPT_PRODUCT_KEY
: 配置设备的 productKeyAIOT_COAPOPT_DEVICE_NAME
: 配置设备的 deviceNameAIOT_COAPOPT_DEVICE_SECRET
: 配置设备的 deviceSecretAIOT_COAPOPT_NETWORK_CRED
: 配置建立COAP连接时的安全凭据AIOT_COAPOPT_RECV_HANDLER
: 配置默认的数据接收回调函数AIOT_COAPOPT_EVENT_HANDLER
: 配置COAP事件通知回调函数[in] | handle | COAP句柄 |
[in] | option | 配置选项, 更多信息请参考aiot_coap_option_t |
[in] | data | 配置选项数据, 更多信息请参考aiot_coap_option_t |
<STATE_SUCCESS | 参数设置失败, 更多信息请本文件后面关于错误码的定义 |
=STATE_SUCCESS | 参数设置成功 |
int32_t aiot_coap_send | ( | void * | handle, |
const char * | topic, | ||
aiot_coap_request_t * | message | ||
) |
发送COAP报文
[in] | handle | COAP句柄 |
[in] | topic | 目标topic |
[in] | message | 指向要发送报文的内容的指针 |
STATE_COAP_SEND_HANDLE_IS_NULL | 发送的报文时, coap_handle为空 |
STATE_COAP_SEND_TOPIC_IS_NULL | 发送的报文时, topic为空 |
STATE_COAP_SEND_REQUEST_IS_NULL | 发送的报文时, request为空 |
STATE_COAP_SEND_PAYLOAD_IS_NULL | 发送的报文时, payload为空 |
STATE_COAP_SEND_WITHOUT_AUTHORIZATION | 发送消息时auth_token还没有获取到 |
STATE_COAP_SEND_INVALID_MSG_TYPE | 发送消息时, 消息的类型既不是CON, 也不是NON |
<STATE_SUCCESS的其他错误 | 主要是网络有关的, 具体见本文件下面的错误码定义 |
STATE_SUCCESS | 发送coap报文成功 |
int32_t aiot_coap_recv | ( | void * | handle | ) |
从网络收取COAP报文
[in] | handle | COAP句柄 |
STATE_COAP_RECV_HANDLE_IS_NULL | 收取网络报文时, coap handle为空 |
STATE_COAP_RECV_WITHOUT_AUTHORIZATION | 收取网络报文时, auth token还没有获取到 |
<STATE_SUCCESS的其他错误 | 主要是网络有关的, 具体见本文件下面的错误码定义 |
STATE_SUCCESS | 收取COAP报文成功 |
int32_t aiot_coap_deinit | ( | void ** | handle | ) |
释放COAP实例句柄的资源
[in] | handle | 指向mqtt实例句柄的指针 |
STATE_SUCCESS | 执行成功 |
int32_t aiot_coap_auth | ( | void * | handle | ) |
让coap模块与服务器通信, 并且获取auth token
[in] | handle | COAP句柄 |
STATE_COAP_AUTH_HANDLE_IS_NULL | 获取auth token时coap handle为空 |
STATE_COAP_AUTH_DEVICE_INFO_MISSING | 获取auth token时设备的三元组为空 |
STATE_COAP_SIGN_SRC_MALLOC_FAILED | 获取auth token时为计算签名分配内存失败 |
STATE_COAP_AUTH_TIMEOUT | 获取auth token发生超时, 超过了 AIOT_COAPOPT_AUTH_TIMEOUT 所定义的超时时间 |
<STATE_SUCCESS的其他其他错误 | 主要是网络有关的, 具体见本文件下面的错误码定义 |
=STATE_SUCCESS | 获取auth token成功 |
int32_t aiot_coap_dynreg | ( | void * | handle, |
const char * | product_secret, | ||
char * | out_secret, | ||
uint32_t | out_secret_maxlen | ||
) |
设备动态注册,返回设备密钥
[in] | handle | COAP句柄 |
[in] | product_secret | 产品密钥 |
[out] | out_secret | 输出的设备密钥 |
[in] | out_secret_maxlen | 保存设备密钥的内存大小 |
STATE_COAP_AUTH_HANDLE_IS_NULL | 获取device_secret时coap handle为空 |
STATE_COAP_AUTH_DEVICE_INFO_MISSING | 获取device_secret时设备的三元组为空 |
STATE_COAP_SIGN_SRC_MALLOC_FAILED | 获取device_secret时为计算签名分配内存失败 |
STATE_COAP_AUTH_TIMEOUT | 获取device_secret发生超时, 超过了 AIOT_COAPOPT_AUTH_TIMEOUT 所定义的超时时间 |
<STATE_SUCCESS的其他其他错误 | 主要是网络有关的, 具体见本文件下面的错误码定义 |
=STATE_SUCCESS | 获取device_secret成功 |
int32_t aiot_coap_request_message | ( | void * | handle, |
int32_t | counter | ||
) |
设备主动请求下拉消息
[in] | handle | COAP句柄 |
[in] | counter | 下拉的最大消息数 |
<STATE_SUCCESS的其他其他错误 | 主要是网络有关的, 具体见本文件下面的错误码定义 |
>=STATE_SUCCESS | 返回coap协议的消息id |