1 回答
TA贡献1864条经验 获得超2个赞
你的代码有一些很好的元素,但是你只发送常量值BluetoothGattCharacteristic.FORMAT_UINT32而没有实际数据。你不需要BluetoothGattCharacteristic.FORMAT_UINT32。
所以让我们用一个简单的类来保存数据:
class Payload {
int time1;
int time2;
int time3;
int time4;
int time5;
int time6;
byte speed1;
byte speed2;
byte speed3;
}
然后使用以下方法从中创建一个字节数组ByteBuffer:
byte[] createBytes(Payload payload) {
ByteByffer buffer = ByteBuffer.allocate(28).order(ByteOrder.LITTLE_ENDIAN);
buffer.putInt(payload.time1);
buffer.putInt(payload.time2);
buffer.putInt(payload.time3);
buffer.putInt(payload.time4);
buffer.putInt(payload.time5);
buffer.putInt(payload.time6);
buffer.putByte(payload.speed1);
buffer.putByte(payload.speed2);
buffer.putByte(payload.speed3);
buffer.putByte(0);
return buffer.array();
}
额外的 0 是将数据长度填充为 4 的倍数,即 28。最有可能的是,C 结构体的长度为 28 个字节。
最后,您传输数据:
byte[] data = createBytes(payload);
gattCharacteristic.setValue(data);
请注意,Java 整数类型是有符号的(例如byte的 -128 到 127 ),而您的 C 类型是无符号的(例如uint8_t的 0 到 255 )。这可能需要在 Java 中进行一些额外的处理。
添加回答
举报