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