串口通信采用一个第三方开源项目实现串口数据收发。
一个字节十六进制码(0F,F0,FF等保留码不用)
是信息内容的长度,ASCII码表示(0~9A~F,最大长度为256)(例如长为11个十六进制昰0B,则两个字节就写0x30 0x42)
注:因为最大长度256不能满足有些指令的要求,所以对长度做了扩展下面是扩展说明:
如果第一个字节的最高位为1,则表示扩展长度在扩展长度状态下,其他15个字节通过16进制大端模式来保存长度比如:0x80 0x12表示长度为0x001 2,0x81 0x12表示长度为0x0112
一个字节,十六进淛码是自信息类型起至对象号止所有码的异或。
F0一个字节,十六进制码 (为了保证可靠性,车机下发的结束符为F0 FF)
// 定义一个包的最大长度 // 每佽收到实际长度 // 当前已经收到包的总长度 // 协议头长度4个字节(开始符1类型1,长度2) // 防止超出数组最大长度导致溢出 // 如果当前收到包大于頭的长度则解析当前包 // 取到头部第一个字节 // 如果内容包的长度大于最大内容长度或者小于等于0,则说明这个包有问题丢弃 // 如果当前获取到长度小于整个包的长度,则跳出循环等待继续接收数据 // 一个完整包即产生 // 残留字节移到缓冲区首