123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- #include <stdio.h>
- #include "register.h"
- #include "gateway_defs.h"
- #include "esp_log.h"
- #include "../system/miscellaneous_interface.h"
- #include "../system/net_http.h"
- #include <cJSON.h>
- #include <esp_app_desc.h>
- #include "freertos/FreeRTOS.h"
- #include "freertos/task.h"
- #include "login.h"
- static const char *TAG = "REGISTER";
- #define RETRY_TIMES 15 // 注册重试次数
- esp_err_t call_result;
- void http_register_callback(char *response, void *user_data)
- {
- call_result = ESP_FAIL;
- if (response != NULL)
- {
- // parse response
- /**
- * {"code":0,"message":"","data":{"device_id":1033,"device_secret":"Ppmr7KXyotOZCdI6oRIN9n8uxacNXUnv","device_key":"69617ac8eb0024e8d1062400f0c8e2d34bc5700ba626b96a2107f18d55951f7d9a4c8cd2259f7df389075c74067ffd70","device_identifier":"08D1F9E77840"}}
- */
- cJSON *root = cJSON_Parse(response);
- cJSON *code = cJSON_GetObjectItemCaseSensitive(root, "code");
- if (code != NULL)
- {
- // if code is 0, main register success
- if (cJSON_IsNumber(code) && code->valueint == 0)
- {
- // parse register data
- cJSON *data = cJSON_GetObjectItem(root, "data");
- cJSON *deviceId = cJSON_GetObjectItemCaseSensitive(data, "device_id");
- cJSON *deviceKey = cJSON_GetObjectItemCaseSensitive(data, "device_key");
- cJSON *deviceSecret = cJSON_GetObjectItemCaseSensitive(data, "device_secret");
- ESP_LOGI(TAG, "device register success: id is %d, key is %s, secret is :%s", deviceId->valueint, deviceKey->valuestring, deviceSecret->valuestring);
- char device_id[10] = {0};
- sprintf(device_id, "%d", deviceId->valueint);
- yx_data_set(DATANAME_DEVICE_ID, device_id);
- yx_data_set(DATANAME_DEVICE_KEY, deviceKey->valuestring);
- yx_data_set(DATANAME_DEVICE_SECRET, deviceSecret->valuestring);
- ESP_LOGI(TAG, "save device info done...");
- call_result = ESP_OK;
- }
- }
- cJSON_Delete(root);
- }
- xTaskNotifyGive((TaskHandle_t)user_data);
- }
- void device_register_task(void *pv)
- {
- uint8_t count = 0;
- for (;;)
- {
- if(count++ > RETRY_TIMES) {
- ESP_LOGE(TAG, "register failed, retry %d times", count);
- esp_restart();
- }
- ESP_LOGI(TAG, "start device register...");
- if(!net_connect_check()) {
- break;
- }
- // // check is register
- // char *deviceId = yx_data_get(DATANAME_DEVICE_ID);
- // if (deviceId != NULL)
- // {
- // ESP_LOGI(TAG, "gateway is register, device_id is :%s, now start login", deviceId);
- // xTaskCreate(&device_login_task, "login task", 1024 * 4, NULL, 1, NULL);
- // break;
- // }
- char str_device_serial[16];
- get_device_serial(str_device_serial);
- cJSON *req = cJSON_CreateObject();
- cJSON *productKey = cJSON_CreateString(YXLJ_PRODUCT_KEY);
- cJSON *deviceCode = cJSON_CreateString(str_device_serial);
- cJSON *deviceModule = cJSON_CreateString(YXLJ_DEVICE_MODULE);
- esp_app_desc_t * desc = esp_app_get_description();
- cJSON *version = cJSON_CreateString(desc->version);
- cJSON *deviceType = cJSON_CreateNumber(1);
- cJSON_AddItemToObject(req, "product_key", productKey);
- cJSON_AddItemToObject(req, "device_code", deviceCode);
- cJSON_AddItemToObject(req, "device_module", deviceModule);
- cJSON_AddItemToObject(req, "device_type", deviceType);
- cJSON_AddItemToObject(req, "version", version);
- char url[128] = "";
- sprintf(url, "%s/v1/devices/registration", SPARROW_SERVER_URL);
- net_http_config_t config = {
- .callback = http_register_callback,
- .url = url,
- .user_data = xTaskGetCurrentTaskHandle(), // 传递当前任务 handle,方便在回调中获取
- };
- net_http_post(cJSON_Print(req), config);
- cJSON_Delete(req);
- //free(deviceId);
- // 等待信号
- ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
- if (call_result == ESP_OK)
- {
- ESP_LOGI(TAG, "device register success,now start login...");
- BaseType_t result = xTaskCreate(&device_login_task, "login task", 1024 * 4, NULL, 1, NULL);
- if(result != pdPASS){
- ESP_LOGE(TAG, "device register fault....");
- esp_restart();
- }
- break;
- }
- else
- {
- ESP_LOGI(TAG, "device register failed, after 3 sec retry...");
- vTaskDelay(3000 / portTICK_PERIOD_MS);
- }
- }
- vTaskDelete(NULL);
- }
|