78 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			78 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | #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 run; | ||
|  |   char *str_err; | ||
|  |   uint16_t cmd_no; | ||
|  |   uint8_t cmd; | ||
|  |   int is_big_data; | ||
|  |   codec_item *codec; | ||
|  | }; | ||
|  | 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
 | ||
|  | 
 |