框图:

通信媒介:UART,USB。
1.如何发送?
答:使用libusb。同步:libusb_interrupt_transfer(中断)libusb_bulk_transfer(批量) 异步:分配传输 (transfer = libusb_alloc_transfer(0);)填充传输(libusb_fill_interrupt_transfer,包括有回调)提交(libusb_submit_transfer),在循环中检测是否有事件发送,如果有,就执行,然后退出,或者超时退出。再取消传输。
2.发送的数据,由CMD,然后protocol,组包,完成组包,{ 1. 发送指令,2.等待回收 3.返回结构},一发一收单线程模式。
通信模块之以USB为例:
typedef struct __attribute__((packed)) MsgHeader { uint8_t head[4]; uint8_t addr[16]; uint8_t password[16]; uint8_t cmd; uint8_t size; } MsgHeader; while { usb_event_handler(); //处理收发 protocol_handler(); //协议处理 app_evnet(); } //如何解析数据包,先CRC校验一下 switch(Flag) { case(1): //解析指令 cmd = (Msg*)rec_buf)-->cmd; size = (Msg*)rec_buf)-->size; flag = 2; break; case(2): memset(data,0,sizeof(data)); memcpy(data, rec_buf + sizeof(MsgHeader),size); }