#pragma once #include "device.h" #include "../led_strip/led_strip.h" #include "key.h" #include "protocol/p_protocol.h" #include "protocol/resend_protl.h" #include "protocol/stmisp.h" #include "ota_u.h" #include "tool.h" #include "ring_buffer.h" #include "../../config/app_config.h" #define FC_ADDRESS "0x08000000" #define DATA_HANDLE_BUFFER_SIZE 4096 #define RF_OFF_COLOR RGB_COLOR_NONE //关闭射频灯的颜色指示 #define WIFI_AP_COLOR RGB_COLOR_WHITE //连接WIFI AP模式指示 #define WIFI_STA_COLOR RGB_COLOR_PURPLE //连接WIFI STA模式指示 #define BLE_COLOR RGB_COLOR_GREEN //连接BLE模式指示 #define NO_CONNECT_COLOR_BLE_AP RGB_COLOR_GREEN_WHITE //未连接模式指示BLE+AP #define NO_CONNECT_COLOR_BLE_STA RGB_COLOR_GREEN_PURPLE //未连接模式指示BLE+STA typedef enum { DATA_HANDLE_IDLE = 0, DATA_HANDLE_OTA_DATA, DATA_HANDLE_OTA_DATA_END, DATA_HANDLE_ISP_DATA, DATA_HANDLE_ISP_DATA_END }data_handle_e; typedef enum { SERTRF_ERROR_NONE = 0, SERTRF_ERROR_OTA_INIT = 10, // ota初始化失败 SERTRF_ERROR_OTA_DATA, // ota数据传输异常 SERTRF_ERROR_OTA_END, // ota 结束异常 SERTRF_ERROR_FC_ISP_UART_TYPE = 30, // 飞控ISP 无法识别其协议 SERTRF_ERROR_FC_ISP_UART_DATA, // 飞控ISP 无法收到其数据 SERTRF_ERROR_FC_ISP_SYNC, // 飞控ISP 无法与ISP建立连接,需判断BOOT键是否有效 }sertrf_error_code_e; typedef struct __attribute__((packed)) { data_handle_e task_state; uint16_t sertrf_error_code; }sertrf_mode_status_t; typedef struct { device_t device; // 任务 os_thread_t embedded_thread; //处理飞控接收 os_thread_t pc_thread; //处理app接收 os_thread_t task_thread; //处理其他任务 os_thread_t app_thread; //处理app任务 os_thread_t data_handle_thread; //数据处理任务 sertrf_mode_status_t mode_status; // ota ota_u_t otau; //自定义协议 resend_device_t resend_device; SemaphoreHandle_t resend_read_mutex; //STMISP协议 stmisp_device_t stmisp_device; // 环形buff RingBuffer data_handle_buffer; uint32_t fc_address; // efuse MAC 地址 uint8_t efuse_mac[6]; uint8_t efuse_mac_encrypt[6]; // 记录错误信息 protocol_status_e fc_protocol_status; //飞控连接端的协议状态 }sertrf_t; typedef struct __attribute__((packed)) { char ble_name[32]; char wifi_ap_ssid[32]; char wifi_ap_password[32]; char wifi_sta_ssid[32]; char wifi_sta_password[32]; uint8_t efuse_mac_encrypt[6]; }sertrf_stauct_t; /** * @brief 模块初始化 */ void sertrf_init(void); /** * @brief 模块启动 */ void sertrf_start(void); /** * @brief 模块停止 */ void sertrf_stop(void); /** * @brief 射频模块开关 */ void sertrf_rf_switch(uint8_t on); /** * @brief 模块数据查看 */ void sertrf_status(void); /** * @brief embedded thread */ void embedded_thread(void* arg); /** * @brief pc thread */ void pc_thread(void* arg); /** * @brief app thread */ void app_thread(void* arg); /** * @brief task thread */ void task_thread(void* arg); /** * @brief data handle thread */ void data_handle_thread(void* arg); /** * @brief 根据连接状态显示不同的颜色 * * @param connect 连接状态 */ void pc_link_rgb_color(device_t* device); int app_send_error_code(uint8_t error_code);