刚刚进来实现,就接到一个关于蓝牙设备和仪器数据交互来读取XXXX的任务,其实简称就是XXXX阅读器。
当时一个刚刚出来实习的我···感觉压力山大啊··可是有没有办法不做,就自己一个研究了很几天才写出来。
所以,我把我走过的路和大家一起分享一下。
下面是一个数据协议···其实只要看懂了这个其他的都很esay了
握手的数据协议包:
同步码 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55
包头 0x04,
长度 0x06, 0x00,
加密 0x00,
模块号 0x00,
功能号 0x01,
数据 'W' (假设数据为W)
crc16 0x02,0x51
java代码:
//设置数据内容
ByteArrayBuffer arrayBuffer=new ByteArrayBuffer(1024*5);
for (int i = 0; i < 8; i++) {
arrayBuffer.append(0x55);
}
arrayBuffer.append(0x04);//包头
byte[] lengthBs=toLH(6);//长度
arrayBuffer.append(lengthBs[0]);//固定长度,低端位在前
arrayBuffer.append(lengthBs[1]);//数据长度
arrayBuffer.append(0X00);//加密
arrayBuffer.append(0X00);//模块号
arrayBuffer.append(0X01);//功能号
arrayBuffer.append('W');//数据
byte[] bstem={lengthBs[0],lengthBs[1],0X00,0X00,0X01,'W'};
// byte[] bsCrc= toLH(CodecUtil.crc16Short(bstem));
// byte[] bs2=CodecUtil.crc16Bytes(bstem);
CRC16 c=new CRC16();
int bcrc=c.crcUtil(bstem);
Log.w("Tag bcrc: ", Integer.toHexString(bcrc) + "");
arrayBuffer.append(bcrc&0xff);//校验
arrayBuffer.append((byte)((bcrc>>8)&0xff));//校验
arrayBuffer.append(0x06);//包尾
-------------------------------------------------------------------------------------------------------------------------------------------------握手成功之后就是 功能数据包的交互了
功能数据包
数据包分析看上面···
java的代码:
ByteArrayBuffer arrayBuffer=new ByteArrayBuffer(100);
byte[] lengthBs=toLH(5);//长度
arrayBuffer.append(lengthBs[0]);//固定长度,低端位在前
arrayBuffer.append(lengthBs[1]);//数据长度
//lengthBs[0],lengthBs[1] 长度---低端在前、高端在后
byte[] bstem={lengthBs[0],lengthBs[1],0X00,0X0A,0X04};
CRC16 c=new CRC16();
int bcrc=c.crcUtil(bstem);
byte[] rbytes = new byte[]{0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x04, 0x05, 0x00, 0x00, 0x0A, 0x04,(byte) (bcrc&0xff), (byte)((bcrc>>8)&0xff), 0x06};
outputStream.write(rbytes);