#ifndef DRV_IAP_H #define DRV_IAP_H #include "stm32f1xx.h" #include "stdint.h" #include "stdbool.h" #define COMP_ID "RTK_G_IAP" #define COMP_VER "0.0.1" //MSG : | MSG_T 6 | PACK 1k | CRC 2 | #define IAP_PACK_SIZE 256 + 8 + 2 typedef struct _mavlink_system { uint8_t stx; //起始标志 uint8_t headbytes; //头部字节数 uint8_t checkbytes; //校验字节数 uint8_t sysid; //系统ID uint8_t compid; //组件ID uint8_t tx_seq; //发送序号 uint8_t rx_seq; //接收序号 } mavlink_system_t; extern mavlink_system_t mavlink_system; typedef struct _mavlink_msg { uint8_t stx; uint8_t payload; uint8_t seq; uint8_t sysid; uint8_t compid; uint8_t msgid; } mavlink_msg_t; extern mavlink_msg_t mavlink_msg; extern bool recv_aid_flag, //急救模式标志,收到特殊恢复指令时置位 recv_init_flag, //初始化标志,收到升级初始化指令时置位 recv_erasure_flag, //FLASH擦除完成标志 recv_finish_flag, //固件传输完成标志 recv_onepack_flag; //数据包接收完成标志 typedef enum { DEFAULT = 0, //默认状态 INIT, //初始化状态 TRANSMIT, //传输状态 FINISH, //升级完成状态 FAIL //升级失败状态 } IAP_STATUS; //升级状态 extern IAP_STATUS recv_iap_flag; extern int iap_bin_Size; //固件文件大小 extern short iap_bin_num, pre_iap_bin_num; extern unsigned char one_pack_size; //数据包大小 extern bool pack_send_flag; #define MAVLINK_ACK_ID 21 #define MAVLINK_BOOTLOADER_STATUS 199 #define MAVLINK_IAP_HEART 200 #define BOOTLOADER_STATUS_OK 0 // 正常 #define BOOTLOADER_STATUS_NEEDTRANSMIT 1 // 没有程序,需要升级 #define BOOTLOADER_STATUS_FLASH_ERASOR_ERROR 2 // Flash 擦除失败 #define BOOTLOADER_STATUS_FLASH_WRITE_ERROR 3 // Flash 写入失败 extern unsigned char send_what; extern uint8_t ack_id; extern short id_cont; extern uint32_t usb_tx_index; extern uint8_t usb_tx_buf[IAP_PACK_SIZE]; extern uint32_t usb_rx_index; extern uint8_t usb_rx_buf[IAP_PACK_SIZE + 2]; extern bool IAP_STATUS_FLAG; void send_mavlink_ack(void); void send_mavlink_bootloader_status(uint8_t bootloader_status); void recv_iap_station_data_hookfunction(unsigned char rec_data); #endif