Bt特征码
private static final UUID SERVICE_UUID = UUID.fromString("0000a601-0000-1000-8000-00805f9b34fb");
private static final UUID WRITE_UUID = UUID.fromString("0000a611-0000-1000-8000-00805f9b34fb");
private static final UUID READ_UUID = UUID.fromString("0000a621-0000-1000-8000-00805f9b34fb");
消息协议
通信协议消息格式分为起始标志位、消息头、消息体、校验位、结束标志位五部分。
header 1 | header 2 | header3 |
---|---|---|
row 1 col 1 | row 1 col 2 | |
row 2 col 1 | row 2 col 2 |
1) 起始标志位:标志整个协议数据的开始。本协议规定使用0xFD作为协议起始标志位;
2) 消息头:消息头固定4个字节,包括应答码、消息类型、消息体长度;
3) 消息体:实际传输的有效消息内容;
4) 校验位:为了校验数据完整性和有效性,校验单元不包括起始标志位,仅校验消息头和消息体,本协议规定校验单元使用CRC16;(代码见附录)
5) 结束标志位:标志整个协议数据的结束。本协议规定使用0xFD作为协议结束标志位。
6) 控制数据包中除了起始标志位和结束标志位外,凡是出现0xFD必须进行转义,0xFD转义为0x5DF7,0x5D转义为0x5DE7。
备注:使用起始标志位和结束标志位的原因。
网络传输过程中,可能因为某些因素的影响,协议数据间可能会出现,连包,分包。为了方便处理连包或者分包数据,本协议使用起始标志和结束标志来处理这些异常现象,确保每一帧(每一包)数据均能正常发送到服务器并且被正确解析,同时保证数据的完整性。
转义:从起始标志位到结束标识位之间的所有数据均需要做转义处理,以保证任何有效数据包仅起始标志位和结束标识位为0XFD。具体转义方法:
所有0XFD -> 0x5D 0XF7;
所有0X5D -> 0x5D 0XE7;
转义顺序:发送:先校验后转义。(向外发)
接收:先转义后校验。(接收数据)