串口通讯中数据的接收和处理问题
目前在做一个手柄的测试程序,用的串口通讯,遇到了两个问题,搞了一天,头大了,没有好的思路!!!
通讯的指令格式是这样的:
1-4字节:CommandClass_t (固定的:69 74 61 7A)
5字节:Command_t (也是固定的:02)
6字节:Packet Length
后面是Data
最后一字节是Check Sum (公式:Check Sum=~(Data之和&0xFF)+0x01)
一、第一个问题是不同长度数据的接收和处理:
需要测试手柄的按键功能,测试时按键的顺序不固定。一共有10多个按键,有些按键通过串口返回的字节长度不固定,但是都会遵守相同的指令格式,
比如:
UP键: 69 74 61 7A 02 0B A1 07 00 00 00 80 80 80 80 00 00 58
DOWN键: 69 74 61 7A 02 0B A1 07 00 00 04 80 80 80 80 00 00 54
LEFT键: 69 74 61 7A 02 0B A1 07 00 00 06 80 80 80 80 00 00 52
RIGHT键: 69 74 61 7A 02 0B A1 07 00 00 02 80 80 80 80 00 00 56
S3键: 69 74 61 7A 02 0A A1 01 00 00 29 00 00 00 00 00 35
S4键: 69 74 61 7A 02 04 A1 0A 40 00 15
上面的情况应该如何接收数据并判断是哪个按键呢?
二、第二个问题是固定长度下数据的接收和处理:
要测试Trigger按键的功能,数据长度是固定的,格式如下:
69 74 61 7A 02 0B A1 01 00 01 0F 80 80 80 80 00 XX CS (其中XX表示一个字节,大小为由0x00 到 0xFF,CS为check Sum)
按键只要稍微按动一点,就会丢出如下的数据出来:
69 74 61 7A 02 0B A1 01 00 01 0F 80 80 80 80 00 00 47 69 74 61 7A 02 0B A1 01 00 01 0F 80 80 80 80 00 01 46 69 74 61 7A 02 0B A1 01 00 01 0F 80 80 80 80 00 02 45 69 74 61 7A 02 0B A1 01 00 01 0F 80 80 80 80 00 03 44 69 74 61 7A 02 0B A1 01 00 01 0F 80 80 80 80 00 04 43 69 74 61 7A 02 0B A1 01 00 01 0F 80 80 80 80 00 07 40 69 74 61 7A 02 0B A1 01 00 01 0F 80 80 80 80 00 0F 38...........后面省略
我该如何接收这一堆数据并从里面把XX的值取出来呢?