/*** * @Author: shenghao.xu * @Date: 2023-04-04 08:38:48 * @LastEditors: shenghao.xu * @LastEditTime: 2023-04-04 08:47:04 * @Description: 处理传输层的数据 * @email:545403892@qq.com * @Copyright (c) 2023 by shenghao.xu, All Rights Reserved. */ #ifndef COMPONENTS_COMMON_INCLUDE_DATA_ANALYSIS_H_ #define COMPONENTS_COMMON_INCLUDE_DATA_ANALYSIS_H_ #include #include "data_type_def.h" typedef enum { DATA_1, DATA_2, DATA_MAX, } DataId_t; // 处理数据模块的个数,请根据实际情况修改 #define DATA_NUM (DATA_MAX) #define DATA_BUF_RECV_SQQ_LEN 650u #define DATA_BUF_SEND_SQQ_LEN 0u #define DATA_SD_LEN_MAX 2 #define DATA_LD_LEN_MAX 2 #define DATA_ED_LEN_MAX 1 typedef struct _data_reg_t_ { struct { uint8_t len; uint8_t pos; uint8_t data[DATA_SD_LEN_MAX]; bool valid; } sd; // start delimiter struct { uint8_t len; uint8_t pos; // 偏移量,在wait_end_state中根据帧长去掉固定长度来判断是否是结束符 uint8_t little_endian; bool valid; } ld; // length describe struct { uint16_t len_max; uint16_t len_min; } argu; struct { uint8_t len; uint8_t data[DATA_ED_LEN_MAX]; bool valid; } ed; bool echo_en; void (*func_ptr)(void); } data_reg_t; typedef void (*data_interupt_cb_t)(uint8_t id, uint8_t ch); // 中断回调函数,数据从这里写入 extern uint8_t data_read(uint8_t id, void *buffer, uint16_t len); extern void data_write(uint8_t id, uint8_t *const string, uint16_t len); extern void lock_data(uint8_t data_id); extern void unlock_data(uint8_t data_id); extern data_interupt_cb_t data_fsm_init(uint8_t data_id); extern bool data_reg(uint8_t id, data_reg_t reg); extern void data_unreg(uint8_t id); #endif /* COMPONENTS_COMMON_INCLUDE_DATA_ANALYSIS_H_ */