| | |
| | | #include "freertos/task.h" |
| | | #include "mqtt_client.h" |
| | | #include "system.h" |
| | | #include "app_task.h" |
| | | |
| | | #define BOARD_MQTT_KEEPALIVE_SEC 120 |
| | | #define BOARD_MQTT_STATE_REPORT_INTERVAL_MS 5000 |
| | |
| | | } |
| | | |
| | | esp_err_t err = DS2312_Set_Alarm_Id_Saved(id->valuestring, hour, minute, second, repeat_mask); |
| | | return err == ESP_OK ? BoardMqtt_ResultOk("alarm updated") : |
| | | BoardMqtt_ResultFail(BOARD_MQTT_ERR_EXEC_FAILED, esp_err_to_name(err)); |
| | | if (err != ESP_OK) { |
| | | return BoardMqtt_ResultFail(BOARD_MQTT_ERR_EXEC_FAILED, esp_err_to_name(err)); |
| | | } |
| | | |
| | | cJSON *app_id = cJSON_GetObjectItem(payload, "app_id"); |
| | | cJSON *task_id = cJSON_GetObjectItem(payload, "task_id"); |
| | | if (cJSON_IsString(app_id) && app_id->valuestring && app_id->valuestring[0]) { |
| | | const char *tid = (cJSON_IsString(task_id) && task_id->valuestring) ? task_id->valuestring : ""; |
| | | cJSON *params = cJSON_GetObjectItem(payload, "params"); |
| | | char *params_json = params ? cJSON_PrintUnformatted(params) : NULL; |
| | | Board_SavePendingTask(app_id->valuestring, tid, params_json, "schedule", id->valuestring); |
| | | free(params_json); |
| | | } |
| | | return BoardMqtt_ResultOk("alarm updated"); |
| | | } |
| | | |
| | | static board_mqtt_action_result_t BoardMqtt_HandleUnsetAlarm(cJSON *payload) |
| | |
| | | return BoardMqtt_ResultOk("manifest accepted"); |
| | | } |
| | | |
| | | static board_mqtt_action_result_t BoardMqtt_HandleStartAppTask(cJSON *payload) |
| | | { |
| | | if (!payload) { |
| | | return BoardMqtt_ResultFail(BOARD_MQTT_ERR_INVALID_PARAM, "missing payload"); |
| | | } |
| | | cJSON *app_id = cJSON_GetObjectItem(payload, "app_id"); |
| | | cJSON *task_id = cJSON_GetObjectItem(payload, "task_id"); |
| | | cJSON *source = cJSON_GetObjectItem(payload, "source"); |
| | | cJSON *params = cJSON_GetObjectItem(payload, "params"); |
| | | if (!cJSON_IsString(app_id) || !app_id->valuestring || app_id->valuestring[0] == '\0') { |
| | | return BoardMqtt_ResultFail(BOARD_MQTT_ERR_INVALID_PARAM, "missing app_id"); |
| | | } |
| | | const char *tid = (cJSON_IsString(task_id) && task_id->valuestring) ? task_id->valuestring : ""; |
| | | const char *src = (cJSON_IsString(source) && source->valuestring) ? source->valuestring : "mqtt_immediate"; |
| | | char *params_json = params ? cJSON_PrintUnformatted(params) : NULL; |
| | | esp_err_t err = Board_StartAppTask(app_id->valuestring, tid, params_json, src); |
| | | free(params_json); |
| | | if (err == ESP_ERR_NOT_FOUND) { |
| | | return BoardMqtt_ResultFail(BOARD_MQTT_ERR_NOT_FOUND, "unknown app or task"); |
| | | } |
| | | if (err == ESP_ERR_INVALID_STATE) { |
| | | return BoardMqtt_ResultFail(BOARD_MQTT_ERR_BUSY, "preempted by higher priority task"); |
| | | } |
| | | if (err != ESP_OK) { |
| | | return BoardMqtt_ResultFail(BOARD_MQTT_ERR_EXEC_FAILED, esp_err_to_name(err)); |
| | | } |
| | | return BoardMqtt_ResultOk("app task started"); |
| | | } |
| | | |
| | | static board_mqtt_action_result_t BoardMqtt_DispatchAction(const char *req_id, const char *action, cJSON *payload) |
| | | { |
| | | if (strcmp(action, "SET_VOLUME") == 0) return BoardMqtt_HandleSetVolume(payload); |
| | |
| | | if (strcmp(action, "UPDATE_MANIFEST") == 0 || strcmp(action, "SYNC_COURSE_TASK") == 0) return BoardMqtt_HandleUpdateManifest(req_id, payload); |
| | | if (strcmp(action, "DOWNLOAD") == 0) return BoardMqtt_HandleDownload(req_id, payload); |
| | | if (strcmp(action, "OTA_UPDATE") == 0) return BoardMqtt_HandleOtaUpdate(req_id, payload); |
| | | if (strcmp(action, "START_APP_TASK") == 0) return BoardMqtt_HandleStartAppTask(payload); |
| | | return BoardMqtt_ResultFail(BOARD_MQTT_ERR_UNSUPPORTED, "unsupported action"); |
| | | } |
| | | |