1 /** 2 * @file aiot_sysdep_api.h 3 * @brief SDK Core系统依赖头文件, 所有Core中的系统依赖均在此文件中列出 4 * @date 2019-12-27 5 * 6 * @copyright Copyright (C) 2015-2018 Alibaba Group Holding Limited 7 * 8 */ 9 10 #ifndef _AIOT_SYSDEP_API_H_ 11 #define _AIOT_SYSDEP_API_H_ 12 13 #if defined(__cplusplus) 14 extern "C" { 15 #endif 16 17 #include <stdint.h> 18 19 typedef enum { 20 AIOT_SYSDEP_NETWORK_CRED_NONE, 21 AIOT_SYSDEP_NETWORK_CRED_SVRCERT_CA, 22 AIOT_SYSDEP_NETWORK_CRED_SVRCERT_PSK, 23 AIOT_SYSDEP_NETWORK_CRED_MAX 24 } aiot_sysdep_network_cred_option_t; 25 26 typedef struct { 27 aiot_sysdep_network_cred_option_t option; /* 安全策略 */ 28 uint32_t max_tls_fragment; 29 uint8_t sni_enabled; 30 const char *x509_server_cert; /* 必须位于静态存储区, SDK内部不做拷贝 */ 31 uint32_t x509_server_cert_len; 32 const char *x509_client_cert; /* 必须位于静态存储区, SDK内部不做拷贝 */ 33 uint32_t x509_client_cert_len; 34 const char *x509_client_privkey; /* 必须位于静态存储区, SDK内部不做拷贝 */ 35 uint32_t x509_client_privkey_len; 36 char *tls_extend_info; 37 } aiot_sysdep_network_cred_t; 38 39 typedef enum { 40 CORE_SYSDEP_SOCKET_TCP_CLIENT, 41 CORE_SYSDEP_SOCKET_TCP_SERVER, 42 CORE_SYSDEP_SOCKET_UDP_CLIENT, 43 CORE_SYSDEP_SOCKET_UDP_SERVER 44 } core_sysdep_socket_type_t; 45 46 typedef struct { 47 char *psk_id; 48 char *psk; 49 } core_sysdep_psk_t; 50 51 typedef enum { 52 CORE_SYSDEP_NETWORK_SOCKET_TYPE, /* 需要建立的socket类型 数据类型: (core_sysdep_socket_type_t *) */ 53 CORE_SYSDEP_NETWORK_HOST, /* 用于建立网络连接的域名地址或ip地址, 内存与上层模块共用 数据类型: (char *) */ 54 CORE_SYSDEP_NETWORK_BACKUP_IP, /* 当建联DNS解析失败时, 使用此备用ip重试 */ 55 CORE_SYSDEP_NETWORK_PORT, /* 用于建立网络连接的端口号 数据类型: (uint16_t *) */ 56 CORE_SYSDEP_NETWORK_CONNECT_TIMEOUT_MS, /* 建立网络连接的超时时间 数据类型: (uint32_t *) */ 57 CORE_SYSDEP_NETWORK_CRED, /* 用于设置网络层安全参数 数据类型: (aiot_sysdep_network_cred_t *) */ 58 CORE_SYSDEP_NETWORK_PSK, /* 用于配合PSK模式下的psk-id和psk 数据类型: (core_sysdep_psk_t *) */ 59 CORE_SYSDEP_NETWORK_MAX 60 } core_sysdep_network_option_t; 61 62 typedef struct { 63 char addr[16]; /* ipv4地址点分十进制字符串, 最大长度15字节. */ 64 uint16_t port; /* 端口号 */ 65 } core_sysdep_addr_t; 66 67 /* 这不是一个面向用户的编译配置开关, 多数情况下, 不必用户关心 */ 68 69 /** 70 * @brief 用以向SDK描述其运行硬件平台的资源如何使用的方法结构体 71 */ 72 typedef struct { 73 /** 74 * @brief 申请内存 75 */ 76 void *(*core_sysdep_malloc)(uint32_t size, char *name); 77 /** 78 * @brief 释放内存 79 */ 80 void (*core_sysdep_free)(void *ptr); 81 /** 82 * @brief 获取当前的时间戳,SDK用于差值计算 83 */ 84 uint64_t (*core_sysdep_time)(void); 85 /** 86 * @brief 睡眠指定的毫秒数 87 */ 88 void (*core_sysdep_sleep)(uint64_t time_ms); 89 /** 90 * @brief 创建1个网络会话(L3层) 91 */ 92 void *(*core_sysdep_network_init)(void); 93 94 /** 95 * @brief 配置1个网络会话的连接参数 96 */ 97 int32_t (*core_sysdep_network_setopt)(void *handle, core_sysdep_network_option_t option, void *data); 98 /** 99 * @brief 建立1个网络会话, 作为MQTT/HTTP等协议的底层承载 100 */ 101 int32_t (*core_sysdep_network_establish)(void *handle); 102 /** 103 * @brief 从指定的网络会话上读取 104 */ 105 int32_t (*core_sysdep_network_recv)(void *handle, uint8_t *buffer, uint32_t len, uint32_t timeout_ms, 106 core_sysdep_addr_t *addr); 107 /** 108 * @brief 在指定的网络会话上发送 109 */ 110 int32_t (*core_sysdep_network_send)(void *handle, uint8_t *buffer, uint32_t len, uint32_t timeout_ms, 111 core_sysdep_addr_t *addr); 112 /** 113 * @brief 销毁1个网络会话 114 */ 115 int32_t (*core_sysdep_network_deinit)(void **handle); 116 /** 117 * @brief 随机数生成方法 118 */ 119 void (*core_sysdep_rand)(uint8_t *output, uint32_t output_len); 120 /** 121 * @brief 创建互斥锁 122 */ 123 void *(*core_sysdep_mutex_init)(void); 124 /** 125 * @brief 申请互斥锁 126 */ 127 void (*core_sysdep_mutex_lock)(void *mutex); 128 /** 129 * @brief 释放互斥锁 130 */ 131 void (*core_sysdep_mutex_unlock)(void *mutex); 132 /** 133 * @brief 销毁互斥锁 134 */ 135 void (*core_sysdep_mutex_deinit)(void **mutex); 136 } aiot_sysdep_portfile_t; 137 138 void aiot_sysdep_set_portfile(aiot_sysdep_portfile_t *portfile); 139 aiot_sysdep_portfile_t *aiot_sysdep_get_portfile(void); 140 141 #if defined(__cplusplus) 142 } 143 #endif 144 145 #endif 146 147