framework.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /**
  2. * @Author: 李建
  3. * @Date: 2023/12/20 12:43:30
  4. * @LastEditors: 李建
  5. * @LastEditTime: 2023/12/20 12:43:30
  6. * Description: 云平台接入框架
  7. * Copyright: Copyright (©)}) 2023 YXLJ@2024. All rights reserved.
  8. */
  9. #include "framework.h"
  10. #include "esp_log.h"
  11. #include "esp_system.h"
  12. #include "channel.h"
  13. #include "sub_device/command.h"
  14. #include <cJSON.h>
  15. #include "freertos/FreeRTOS.h"
  16. #include "freertos/task.h"
  17. #include <freertos/event_groups.h>
  18. #include "gateway/gateway.h"
  19. static const char *TAG = "FRAMEWORK";
  20. TaskHandle_t access_task_handle;
  21. bool is_framework_init = false;
  22. /**
  23. * 处理云端状态消息
  24. */
  25. static void status_message_process(char *payload) {
  26. }
  27. // 处理云端事件消息
  28. static void event_message_process(char *payload) {
  29. }
  30. // 处理云端指令消息
  31. static void command_message_process(char *payload) {
  32. cJSON *root = cJSON_Parse(payload);
  33. cJSON *cmd = cJSON_GetObjectItemCaseSensitive(root, "cmd");
  34. cJSON *params = cJSON_GetObjectItem(root, "params");
  35. if (!root || !cmd || !params)
  36. return;
  37. sparrow_command *spCmd = find_sparrow_command(cmd->valuestring);
  38. if (NULL != spCmd) {
  39. spCmd->unpack(cJSON_PrintUnformatted(params));
  40. } else {
  41. ESP_LOGI(TAG, "%s is not found!", cmd->valuestring);
  42. }
  43. cJSON_Delete(root);
  44. }
  45. // 处理收到的云平台的消息包
  46. void sub_device_recv_callback(char *payload, sparrow_topic_type topicType) {
  47. if (NULL == payload) {
  48. return;
  49. }
  50. switch (topicType) {
  51. case SPARROW_TOPIC_STATUS:
  52. status_message_process(payload);
  53. break;
  54. case SPARROW_TOPIC_COMMAND:
  55. command_message_process(payload);
  56. break;
  57. case SPARROW_TOPIC_EVENT:
  58. event_message_process(payload);
  59. break;
  60. default:
  61. break;
  62. }
  63. }
  64. void yxlj_framework_deinit() {
  65. //vEventGroupDelete(frame_work_event_group);
  66. }
  67. void yxlj_framework_init() {
  68. ESP_LOGI(TAG, "Init...");
  69. ESP_LOGI(TAG, "Free memory: %"PRIu32" bytes", esp_get_free_heap_size());
  70. ESP_LOGI(TAG, "IDF version: %s", esp_get_idf_version());
  71. vTaskDelay(3000 / portTICK_PERIOD_MS); // 增加延迟注册 防止初始化过快
  72. yxlj_gateway_init();
  73. if (!is_framework_init) {
  74. register_sub_device_channel_recv(SPARROW_CHANNEL_PORT_1, sub_device_recv_callback);
  75. is_framework_init = true;
  76. }
  77. }