1 回答

TA貢獻1864條經(jīng)驗 獲得超2個贊
你的代碼有一些很好的元素,但是你只發(fā)送常量值BluetoothGattCharacteristic.FORMAT_UINT32而沒有實際數(shù)據(jù)。你不需要BluetoothGattCharacteristic.FORMAT_UINT32。
所以讓我們用一個簡單的類來保存數(shù)據(jù):
class Payload {
int time1;
int time2;
int time3;
int time4;
int time5;
int time6;
byte speed1;
byte speed2;
byte speed3;
}
然后使用以下方法從中創(chuàng)建一個字節(jié)數(shù)組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 是將數(shù)據(jù)長度填充為 4 的倍數(shù),即 28。最有可能的是,C 結(jié)構(gòu)體的長度為 28 個字節(jié)。
最后,您傳輸數(shù)據(jù):
byte[] data = createBytes(payload);
gattCharacteristic.setValue(data);
請注意,Java 整數(shù)類型是有符號的(例如byte的 -128 到 127 ),而您的 C 類型是無符號的(例如uint8_t的 0 到 255 )。這可能需要在 Java 中進行一些額外的處理。
添加回答
舉報