/* * @text: 测试 */ #ifndef prot_uc_h__ #define prot_uc_h__ #include "signal.h" #include "bytearray.h" #include "list.h" #include "board.h" #include "rtthread.h" struct _protu_def; typedef array_def *(*codec_fun_def)(struct _protu_def *p,array_def *data); typedef struct{ const char *name; codec_fun_def decode; codec_fun_def encode; }codec_item; struct _protu_def{ uart_def *uart; uint8_t *buff; int buff_index; int num_to_recv; void *sem; int sem_num; uint32_t recv_tick; int run; char *str_err; uint16_t cmd_no; uint8_t cmd; int is_big_data; codec_item *codec; int silent;// 此项为1则是广播命令 int rank;// 本机在广播命令中的排行,从0开始 int num;// 本次广播命令包含的从机数量 timer_def *timer; }; typedef struct _protu_def protu_def; protu_def *protu_creat(uart_def *uart); signal protu_recv_signal(void *obj,const char *codec_name,uint8_t cmd,array_def *data,char *err_str); void protu_reply_call(protu_def *p,array_def *data); void protu_send_call(protu_def *p,uint8_t cmd,array_def *data); #define protuc_codec_export(name_,decode_,encode_) \ const static char __codec_##name_##_name[] SECTION(".rodata.codecstr") = #name_; \ RT_USED static codec_item _codec_##name_ SECTION("codecstruct")= \ {\ .name=__codec_##name_##_name,\ .decode=decode_,\ .encode=encode_,\ }; // 查找指定解码器 codec_item *protu_find_codec(const char *name); // 返回正在使用的解码器 codec_item *protu_codec_inuse(protu_def *p); void protu_codec_set(protu_def *p,codec_item *c); #endif