1 /*
2 * Copyright (C) 2015-2019 Alibaba Group Holding Limited
3 */
4
5 #include "amp_platform.h"
6 #include "aos_system.h"
7 #include "amp_defines.h"
8 #include "aos_network.h"
9 #include "aos/kv.h"
10 #include "aiot_state_api.h"
11 #include "aiot_sysdep_api.h"
12 #include "aiot_mqtt_api.h"
13 #include "aiot_devinfo_api.h"
14 #include "module_aiot.h"
15
16 #define MOD_STR "AIOT_ACTINFO"
17
amp_app_devinfo_report(void * mqtt_handle)18 int32_t amp_app_devinfo_report(void *mqtt_handle)
19 {
20 int32_t res = STATE_SUCCESS;
21 void *devinfo_handle = NULL;
22 aiot_devinfo_msg_t *devinfo = NULL;
23 char *msg = NULL;
24 int32_t msg_len = 0;
25 char product_key[IOTX_PRODUCT_KEY_LEN] = {0};
26 char device_name[IOTX_DEVICE_NAME_LEN] = {0};
27 int productkey_len = IOTX_PRODUCT_KEY_LEN;
28 int devicename_len = IOTX_DEVICE_NAME_LEN;
29
30 devinfo_handle = aiot_devinfo_init();
31 if (devinfo_handle == NULL) {
32 amp_debug(MOD_STR, "ntp service init failed");
33 return -1;
34 }
35
36 res = aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_MQTT_HANDLE, (void *)mqtt_handle);
37 if (res < STATE_SUCCESS) {
38 amp_debug(MOD_STR, "devinfo set mqtt handle failed");
39 aiot_devinfo_deinit(&devinfo_handle);
40 return -1;
41 }
42
43 aos_kv_get(AMP_CUSTOMER_PRODUCTKEY, product_key, &productkey_len);
44 aos_kv_get(AMP_CUSTOMER_DEVICENAME, device_name, &devicename_len);
45
46 msg_len = strlen(DEVICE_INFO_UPDATE_FMT) + 32;
47 msg = (char *)aos_malloc(msg_len);
48 if (msg == NULL) {
49 amp_debug(MOD_STR, "malloc msg err");
50 return -1;
51 }
52 memset(msg, 0, msg_len);
53
54 /* devinfo update message */
55 res = snprintf(msg,
56 msg_len,
57 DEVICE_INFO_UPDATE_FMT,
58 APPLICATION,
59 MODULE_NAME
60 );
61 if (res <= 0) {
62 amp_debug(MOD_STR, "topic msg generate err");
63 aos_free(msg);
64 return -1;
65 }
66
67 devinfo = aos_malloc(sizeof(aiot_devinfo_msg_t));
68 if (devinfo == NULL) {
69 amp_debug(MOD_STR, "device update info malloc failed");
70 aos_free(msg);
71 return -1;
72 }
73 memset(devinfo, 0, sizeof(aiot_devinfo_msg_t));
74
75 devinfo->product_key = aos_malloc(IOTX_PRODUCT_KEY_LEN);
76 if (devinfo->product_key == NULL) {
77 amp_debug(MOD_STR, "device update info malloc failed");
78 aos_free(msg);
79 aos_free(devinfo);
80 return -1;
81 }
82 memset(devinfo->product_key, 0, IOTX_PRODUCT_KEY_LEN);
83
84 devinfo->device_name = aos_malloc(IOTX_DEVICE_NAME_LEN);
85 if (devinfo->device_name == NULL) {
86 amp_debug(MOD_STR, "device update info malloc failed");
87 aos_free(msg);
88 aos_free(devinfo);
89 return -1;
90 }
91 memset(devinfo->device_name, 0, IOTX_DEVICE_NAME_LEN);
92
93 devinfo->data.update.params = aos_malloc(msg_len);
94 if (devinfo == NULL) {
95 amp_debug(MOD_STR, "device update info malloc failed");
96 aos_free(msg);
97 aos_free(devinfo);
98 return -1;
99 }
100 memset(devinfo->data.update.params, 0, msg_len);
101
102 devinfo->type = AIOT_DEVINFO_MSG_UPDATE;
103 memcpy(devinfo->product_key, product_key, strlen(product_key));
104 memcpy(devinfo->device_name, device_name, strlen(device_name));
105 memcpy(devinfo->data.update.params, msg, msg_len);
106
107 res = aiot_devinfo_send(devinfo_handle, devinfo);
108 if (res < STATE_SUCCESS) {
109 amp_debug(MOD_STR, "das stepping failed");
110 aos_free(msg);
111 aos_free(devinfo->product_key);
112 aos_free(devinfo->device_name);
113 aos_free(devinfo->data.update.params);
114 aos_free(devinfo);
115 aiot_devinfo_deinit(&devinfo_handle);
116 return -1;
117 }
118
119 aos_free(msg);
120 aos_free(devinfo->product_key);
121 aos_free(devinfo->device_name);
122 aos_free(devinfo->data.update.params);
123 aos_free(devinfo);
124
125 return res;
126 }