1 /* 2 * Copyright (C) 2015-2018 Alibaba Group Holding Limited 3 */ 4 5 #ifndef _IOT_EXPORT_DM_H_ 6 #define _IOT_EXPORT_DM_H_ 7 8 #ifndef _IN_ 9 #define _IN_ 10 #endif 11 12 #ifndef _OU_ 13 #define _OU_ 14 #endif 15 16 #ifdef DEVICE_MODEL_GATEWAY 17 #define IOTX_DM_DEVICE_TYPE IOTX_DM_DEVICE_GATEWAY 18 #else 19 #define IOTX_DM_DEVICE_TYPE IOTX_DM_DEVICE_SINGLE 20 #endif 21 22 #define IOTX_DM_LOCAL_NODE_DEVID (0) 23 24 #define IOTX_DM_DEVICE_SINGLE (0x01) 25 #define IOTX_DM_DEVICE_SUBDEV (0x02) 26 #define IOTX_DM_DEVICE_GATEWAY (0x04) 27 #define IOTX_DM_DEVICE_MAIN (IOTX_DM_DEVICE_SINGLE | IOTX_DM_DEVICE_GATEWAY) 28 #define IOTX_DM_DEVICE_ALL \ 29 (IOTX_DM_DEVICE_SINGLE | IOTX_DM_DEVICE_SUBDEV | IOTX_DM_DEVICE_GATEWAY) 30 31 /* Service Type 0~7bit: type, 8~15bit: extended*/ 32 #define IOTX_DM_SERVICE_CLOUD (0x0001) 33 #define IOTX_DM_SERVICE_LOCAL (0x0002) 34 #define IOTX_DM_SERVICE_LOCAL_NO_AUTH (0x0000) 35 #define IOTX_DM_SERVICE_LOCAL_AUTH (0x0100) 36 37 #define IOTX_DM_LOCAL_AUTH (IOTX_DM_SERVICE_LOCAL | IOTX_DM_SERVICE_LOCAL_AUTH) 38 #define IOTX_DM_LOCAL_NO_AUTH \ 39 (IOTX_DM_SERVICE_LOCAL | IOTX_DM_SERVICE_LOCAL_NO_AUTH) 40 41 #define IOTX_DM_SERVICE_ALL (IOTX_DM_SERVICE_CLOUD | IOTX_DM_LOCAL_AUTH) 42 43 typedef enum { 44 IOTX_DM_ERR_CODE_SUCCESS = 200, 45 IOTX_DM_ERR_CODE_REQUEST_ERROR = 400, 46 IOTX_DM_ERR_CODE_REQUEST_PARAMS_ERROR = 460, 47 IOTX_DM_ERR_CODE_REQUEST_TOO_MANY = 429, 48 IOTX_DM_ERR_CODE_NO_ACTIVE_SESSION = 520, 49 IOTX_DM_ERR_CODE_TIMEOUT = 100000 50 } iotx_dm_error_code_t; 51 52 typedef enum { 53 IOTX_DM_EVENT_CLOUD_CONNECTED = 0, 54 IOTX_DM_EVENT_CLOUD_DISCONNECT, 55 IOTX_DM_EVENT_CLOUD_RECONNECT, 56 IOTX_DM_EVENT_LOCAL_CONNECTED, 57 IOTX_DM_EVENT_LOCAL_DISCONNECT, 58 IOTX_DM_EVENT_LOCAL_RECONNECT, 59 IOTX_DM_EVENT_FOUND_DEVICE, 60 IOTX_DM_EVENT_REMOVE_DEVICE, 61 IOTX_DM_EVENT_REGISTER_RESULT, 62 IOTX_DM_EVENT_UNREGISTER_RESULT, 63 IOTX_DM_EVENT_INITIALIZED, 64 IOTX_DM_EVENT_SEND_RESULT, 65 IOTX_DM_EVENT_ADD_SERVICE_RESULT, 66 IOTX_DM_EVENT_REMOVE_SERVICE_RESULT, 67 IOTX_DM_EVENT_NEW_DATA_RECEIVED, 68 IOTX_DM_EVENT_PROPERTY_SET, 69 IOTX_DM_EVENT_PROPERTY_GET, 70 IOTX_DM_EVENT_PROPERTY_DESIRED_GET_REPLY, 71 IOTX_DM_EVENT_PROPERTY_DESIRED_DELETE_REPLY, 72 IOTX_DM_EVENT_TOPO_ADD_NOTIFY, 73 IOTX_DM_EVENT_THING_SERVICE_REQUEST, 74 IOTX_DM_EVENT_THING_DISABLE, 75 IOTX_DM_EVENT_THING_ENABLE, 76 IOTX_DM_EVENT_THING_DELETE, 77 IOTX_DM_EVENT_MODEL_DOWN_RAW, 78 IOTX_DM_EVENT_GATEWAY_PERMIT, 79 IOTX_DM_EVENT_SUBDEV_REGISTER_REPLY, 80 IOTX_DM_EVENT_PROXY_PRODUCT_REGISTER_REPLY, 81 IOTX_DM_EVENT_SUBDEV_UNREGISTER_REPLY, 82 IOTX_DM_EVENT_TOPO_ADD_REPLY, 83 IOTX_DM_EVENT_TOPO_DELETE_REPLY, 84 IOTX_DM_EVENT_TOPO_GET_REPLY, 85 IOTX_DM_EVENT_TOPO_ADD_NOTIFY_REPLY, 86 IOTX_DM_EVENT_EVENT_PROPERTY_POST_REPLY, 87 IOTX_DM_EVENT_EVENT_SPECIFIC_POST_REPLY, 88 IOTX_DM_EVENT_DEVICEINFO_UPDATE_REPLY, 89 IOTX_DM_EVENT_DEVICEINFO_DELETE_REPLY, 90 IOTX_DM_EVENT_DSLTEMPLATE_GET_REPLY, 91 IOTX_DM_EVENT_COMBINE_LOGIN_REPLY, 92 IOTX_DM_EVENT_COMBINE_LOGOUT_REPLY, 93 IOTX_DM_EVENT_MODEL_UP_RAW_REPLY, 94 IOTX_DM_EVENT_LEGACY_THING_CREATED, 95 IOTX_DM_EVENT_COTA_NEW_CONFIG, 96 IOTX_DM_EVENT_FOTA_NEW_FIRMWARE, 97 IOTX_DM_EVENT_NTP_RESPONSE, 98 IOTX_DM_EVENT_RRPC_REQUEST, 99 IOTX_DM_EVENT_CLOUD_ERROR, 100 IOTX_DM_EVENT_THING_EVENT_NOTIFY, 101 IOTX_DM_EVENT_THING_EVENT_NOTIFY_REPLY, 102 IOTX_DM_EVENT_MAX 103 } iotx_dm_event_types_t; 104 105 typedef void (*iotx_dm_event_callback)(iotx_dm_event_types_t type, 106 char *payload); 107 108 typedef enum { 109 IOTX_DM_DEVICE_SECRET_PRODUCT, 110 IOTX_DM_DEVICE_SECRET_DEVICE, 111 IOTX_DM_DEVICE_SECRET_TYPES_MAX 112 } iotx_dm_device_secret_types_t; 113 114 typedef enum { 115 IOTX_DM_CLOUD_DOMAIN_SHANGHAI, 116 IOTX_DM_CLOUD_DOMAIN_SINGAPORE, 117 IOTX_DM_CLOUD_DOMAIN_JAPAN, 118 IOTX_DM_CLOUD_DOMAIN_AMERICA, 119 IOTX_DM_CLOUD_DOMAIN_GERMANY, 120 IOTX_DM_CLOUD_DOMAIN_MAX 121 } iotx_dm_cloud_domain_types_t; 122 123 typedef enum { 124 IOTX_DM_MESSAGE_NO_AUTH, 125 IOTX_DM_MESSAGE_AUTH, 126 IOTX_DM_MESSAGE_AUTH_MAX 127 } iotx_dm_message_auth_types_t; 128 129 typedef enum { 130 IOTX_DM_TSL_SOURCE_LOCAL, 131 IOTX_DM_TSL_SOURCE_CLOUD 132 } iotx_dm_tsl_source_t; 133 134 typedef enum { 135 IOTX_DM_TSL_TYPE_ALINK, 136 IOTX_DM_TSL_TYPE_TLV 137 } iotx_dm_tsl_type_t; 138 139 typedef struct { 140 iotx_dm_device_secret_types_t secret_type; 141 iotx_dm_cloud_domain_types_t domain_type; 142 iotx_dm_event_callback event_callback; 143 } iotx_dm_init_params_t; 144 145 typedef enum { 146 IOTX_DM_DEV_AVAIL_ENABLE, 147 IOTX_DM_DEV_AVAIL_DISABLE 148 } iotx_dm_dev_avail_t; 149 150 typedef enum { 151 IOTX_DM_DEV_STATUS_UNAUTHORIZED, /* Subdev Created */ 152 IOTX_DM_DEV_STATUS_AUTHORIZED, /* Receive Topo Add Notify */ 153 IOTX_DM_DEV_STATUS_REGISTERED, /* Receive Subdev Registered */ 154 IOTX_DM_DEV_STATUS_ATTACHED, /* Receive Subdev Topo Add Reply */ 155 IOTX_DM_DEV_STATUS_LOGINED, /* Receive Subdev Login Reply */ 156 IOTX_DM_DEV_STATUS_ONLINE /* After All Topic Subscribed */ 157 } iotx_dm_dev_status_t; 158 159 typedef enum { 160 DM_TSL_SERVICE_GET_FAILED = -13, 161 DM_TSL_SERVICE_SET_FAILED = -12, 162 DM_TSL_EVENT_GET_FAILED = -11, 163 DM_TSL_EVENT_SET_FAILED = -10, 164 DM_TSL_PROPERTY_GET_FAILED = -9, 165 DM_TSL_PROPERTY_SET_FAILED = -8, 166 DM_TSL_EVENT_NOT_EXIST = -7, 167 DM_TSL_PROPERTY_NOT_EXIST = -6, 168 DM_TSL_SERVICE_NOT_EXIST = -5, 169 DM_JSON_PARSE_FAILED = -4, 170 DM_MEMORY_NOT_ENOUGH = -3, 171 DM_INVALID_PARAMETER = -2 172 } dm_error_code_t; 173 174 #define IOTX_DM_POST_PROPERTY_ALL (NULL) 175 176 int iotx_dm_open(void); 177 int iotx_dm_connect(_IN_ iotx_dm_init_params_t *init_params); 178 int iotx_dm_subscribe(_IN_ int devid); 179 int iotx_dm_close(void); 180 int iotx_dm_yield(int timeout_ms); 181 void iotx_dm_dispatch(void); 182 183 int iotx_dm_post_rawdata(_IN_ int devid, _IN_ char *payload, 184 _IN_ int payload_len); 185 186 int iotx_dm_set_opt(int opt, void *data); 187 int iotx_dm_get_opt(int opt, void *data); 188 int iotx_dm_subscribe_user_topic(char *topic, void *user_callback); 189 190 #if !defined(DEVICE_MODEL_RAWDATA_SOLO) 191 #ifdef LOG_REPORT_TO_CLOUD 192 int iotx_dm_log_post(_IN_ int devid, _IN_ char *payload, _IN_ int payload_len); 193 #endif 194 int iotx_dm_post_property(_IN_ int devid, _IN_ char *payload, 195 _IN_ int payload_len); 196 int iotx_dm_property_desired_get(_IN_ int devid, _IN_ char *payload, 197 _IN_ int payload_len); 198 int iotx_dm_property_desired_delete(_IN_ int devid, _IN_ char *payload, 199 _IN_ int payload_len); 200 int iotx_dm_post_event(_IN_ int devid, _IN_ char *identifier, 201 _IN_ int identifier_len, _IN_ char *payload, 202 _IN_ int payload_len); 203 204 int iotx_dm_send_service_response(_IN_ int devid, _IN_ char *msgid, 205 _IN_ int msgid_len, 206 _IN_ iotx_dm_error_code_t code, 207 _IN_ char *identifier, 208 _IN_ int identifier_len, _IN_ char *payload, 209 _IN_ int payload_len, void *ctx); 210 int iotx_dm_send_property_get_response(_IN_ int devid, _IN_ char *msgid, 211 _IN_ int msgid_len, 212 _IN_ iotx_dm_error_code_t code, 213 _IN_ char *payload, _IN_ int payload_len, 214 _IN_ void *ctx); 215 int iotx_dm_send_rrpc_response(_IN_ int devid, _IN_ char *msgid, 216 _IN_ int msgid_len, 217 _IN_ iotx_dm_error_code_t code, 218 _IN_ char *rrpcid, _IN_ int rrpcid_len, 219 _IN_ char *payload, _IN_ int payload_len); 220 int iotx_dm_deviceinfo_update(_IN_ int devid, _IN_ char *payload, 221 _IN_ int payload_len); 222 int iotx_dm_deviceinfo_delete(_IN_ int devid, _IN_ char *payload, 223 _IN_ int payload_len); 224 int iotx_dm_qurey_ntp(void); 225 #endif 226 227 int iotx_dm_cota_perform_sync(_OU_ char *buffer, _IN_ int buffer_len); 228 int iotx_dm_cota_get_config(_IN_ const char *config_scope, const char *get_type, 229 const char *attribute_keys); 230 int iotx_dm_fota_perform_sync(_OU_ char *buffer, _IN_ int buffer_len); 231 int iotx_dm_fota_request_image(_IN_ const char *version, _IN_ int buffer_len); 232 233 #ifdef DEVICE_MODEL_GATEWAY 234 int iotx_dm_query_topo_list(void); 235 int iotx_dm_subdev_query(_IN_ char product_key[IOTX_PRODUCT_KEY_LEN + 1], 236 _IN_ char device_name[IOTX_DEVICE_NAME_LEN + 1], 237 _OU_ int *devid); 238 int iotx_dm_subdev_create(_IN_ char product_key[IOTX_PRODUCT_KEY_LEN + 1], 239 _IN_ char product_secret[IOTX_PRODUCT_SECRET_LEN + 1], 240 _IN_ char device_name[IOTX_DEVICE_NAME_LEN + 1], 241 _IN_ char device_secret[IOTX_DEVICE_SECRET_LEN + 1], 242 _OU_ int *devid); 243 int iotx_dm_subdev_destroy(_IN_ int devid); 244 int iotx_dm_subdev_number(void); 245 int iotx_dm_subdev_register(_IN_ int devid); 246 int iotx_dm_subdev_proxy_register(_IN_ int devid); 247 int iotx_dm_subdev_unregister(_IN_ int devid); 248 int iotx_dm_subdev_topo_add(_IN_ int devid); 249 int iotx_dm_subdev_topo_del(_IN_ int devid); 250 int iotx_dm_subdev_login(_IN_ int devid); 251 int iotx_dm_subdev_logout(_IN_ int devid); 252 int iotx_dm_get_device_type(_IN_ int devid, _OU_ int *type); 253 int iotx_dm_get_device_avail_status(_IN_ int devid, 254 _OU_ iotx_dm_dev_avail_t *status); 255 int iotx_dm_get_device_status(_IN_ int devid, 256 _OU_ iotx_dm_dev_status_t *status); 257 #ifdef DEVICE_MODEL_SUBDEV_OTA 258 int iotx_dm_send_firmware_version(int devid, const char *firmware_version); 259 int iotx_dm_ota_switch_device(_IN_ int devid); 260 #endif 261 #endif 262 263 #ifdef DEPRECATED_LINKKIT 264 int iotx_dm_deprecated_subdev_register( 265 _IN_ int devid, _IN_ char device_secret[IOTX_DEVICE_SECRET_LEN + 1]); 266 int iotx_dm_deprecated_set_tsl(_IN_ int devid, _IN_ iotx_dm_tsl_source_t source, 267 _IN_ const char *tsl, _IN_ int tsl_len); 268 int iotx_dm_deprecated_set_property_value(_IN_ int devid, _IN_ char *key, 269 _IN_ int key_len, _IN_ void *value, 270 _IN_ int value_len); 271 int iotx_dm_deprecated_get_property_value(_IN_ int devid, _IN_ char *key, 272 _IN_ int key_len, _IN_ void *value); 273 int iotx_dm_deprecated_set_event_output_value(_IN_ int devid, _IN_ char *key, 274 _IN_ int key_len, 275 _IN_ void *value, 276 _IN_ int value_len); 277 int iotx_dm_deprecated_get_event_output_value(_IN_ int devid, _IN_ char *key, 278 _IN_ int key_len, 279 _IN_ void *value); 280 int iotx_dm_deprecated_get_service_input_value(_IN_ int devid, _IN_ char *key, 281 _IN_ int key_len, 282 _IN_ void *value); 283 int iotx_dm_deprecated_set_service_output_value(_IN_ int devid, _IN_ char *key, 284 _IN_ int key_len, 285 _IN_ void *value, 286 _IN_ int value_len); 287 int iotx_dm_deprecated_get_service_output_value(_IN_ int devid, _IN_ char *key, 288 _IN_ int key_len, 289 _IN_ void *value); 290 291 int iotx_dm_deprecated_post_property_start(_IN_ int devid, _OU_ void **handle); 292 int iotx_dm_deprecated_post_property_add(_IN_ void *handle, 293 _IN_ char *identifier, 294 _IN_ int identifier_len); 295 int iotx_dm_deprecated_post_property_end(_IN_ void **handle); 296 int iotx_dm_deprecated_post_event(_IN_ int devid, _IN_ char *identifier, 297 _IN_ int identifier_len); 298 int iotx_dm_deprecated_send_service_response(_IN_ int devid, _IN_ int msgid, 299 _IN_ iotx_dm_error_code_t code, 300 _IN_ char *identifier, 301 _IN_ int identifier_len); 302 303 int iotx_dm_deprecated_legacy_set_property_value(_IN_ int devid, _IN_ char *key, 304 _IN_ int key_len, 305 _IN_ void *value, 306 _IN_ char *value_str); 307 int iotx_dm_deprecated_legacy_get_property_value(_IN_ int devid, _IN_ char *key, 308 _IN_ int key_len, 309 _IN_ void *value, 310 _IN_ char **value_str); 311 int iotx_dm_deprecated_legacy_set_event_output_value(_IN_ int devid, 312 _IN_ char *key, 313 _IN_ int key_len, 314 _IN_ void *value, 315 _IN_ char *value_str); 316 int iotx_dm_deprecated_legacy_get_event_output_value(_IN_ int devid, 317 _IN_ char *key, 318 _IN_ int key_len, 319 _IN_ void *value, 320 _IN_ char **value_str); 321 int iotx_dm_deprecated_legacy_get_service_input_value(_IN_ int devid, 322 _IN_ char *key, 323 _IN_ int key_len, 324 _IN_ void *value, 325 _IN_ char **value_str); 326 int iotx_dm_deprecated_legacy_set_service_output_value(_IN_ int devid, 327 _IN_ char *key, 328 _IN_ int key_len, 329 _IN_ void *value, 330 _IN_ char *value_str); 331 int iotx_dm_deprecated_legacy_get_service_output_value(_IN_ int devid, 332 _IN_ char *key, 333 _IN_ int key_len, 334 _IN_ void *value, 335 _IN_ char **value_str); 336 337 int iotx_dm_deprecated_legacy_get_pkdn_by_devid( 338 _IN_ int devid, _OU_ char product_key[IOTX_PRODUCT_KEY_LEN + 1], 339 _OU_ char device_name[IOTX_DEVICE_NAME_LEN + 1]); 340 int iotx_dm_deprecated_legacy_get_devid_by_pkdn( 341 _IN_ char product_key[IOTX_PRODUCT_KEY_LEN + 1], 342 _IN_ char device_name[IOTX_DEVICE_NAME_LEN + 1], _OU_ int *devid); 343 int iotx_dm_deprecated_legacy_get_thingid_by_devid(_IN_ int devid, 344 _OU_ void **thing_id); 345 int iotx_dm_deprecated_legacy_get_devid_by_thingid(_IN_ void *thing_id, 346 _OU_ int *devid); 347 int iotx_dm_deprecated_legacy_get_pkdn_ptr_by_devid(_IN_ int devid, 348 _OU_ char **product_key, 349 _OU_ char **device_name); 350 int iotx_dm_deprecated_legacy_send_service_response( 351 _IN_ int devid, _IN_ int msgid, _IN_ iotx_dm_error_code_t code, 352 _IN_ char *identifier, _IN_ int identifier_len, _IN_ char *payload, 353 _IN_ int payload_len); 354 #ifdef DEVICE_MODEL_GATEWAY 355 int iotx_dm_deprecated_subdev_register( 356 _IN_ int devid, _IN_ char device_secret[IOTX_DEVICE_SECRET_LEN + 1]); 357 #endif 358 #endif 359 #endif 360