В настоящее время я создаю мобильное приложение для обнаружения маяков Bluetooth Eddystone.Я могу обнаружить маяки, используя ответ-родной-менеджер.Тем не менее, я не могу разобрать данные, так как я знаком с форматом, в котором они находятся (может быть буфер / байт).Мне нужно в основном получить пространство имен, а также данные TLM (телеметрии) от маяков.Это текущая реализация моего кода Bluetooth и данных, которые я получил с помощью response-native-ble-manager.
Я попытался проанализировать библиотеку Buffer, но не могу заставить их работать.
Часть моего текущего кода Bluetooth
// BLE Manager
const BleManagerModule = NativeModules.BleManager;
const bleManagerEmitter = new NativeEventEmitter(BleManagerModule);
// Bind bluetooth discover method
this.handleDiscoverPeripheral = this.handleDiscoverPeripheral.bind(this);
// Add Listener
NativeAppEventEmitter.addListener('BleManagerDiscoverPeripheral', this.handleDiscoverPeripheral);
BleManager.start({ showAlert: false })
.then(() => {
// Success code
console.log('Module initialized');
});
handleDiscoverПериферийная функция
handleDiscoverPeripheral(peripheral) {
console.log('Got ble peripheral', peripheral.id);
let nearbyArr = this.state.sectionData[0].data
let othersArr = this.state.sectionData[1].data
if (this.state.participantMap[peripheral.id] !== undefined) {
let duplicateCheck = nearbyArr.findIndex(function (item) {
return item.beacon === peripheral.id;
})
// console.log('DUP CHECK: ' + duplicateCheck)
// Check if peripheral has not been added into nearbyArr
if (duplicateCheck === -1) {
console.log('Found matching id: ' + peripheral.id)
let dataBytes = (peripheral.advertising.manufacturerData.bytes)
console.log(dataBytes)
let data = String(peripheral.advertising.manufacturerData.data)
console.log(data)
let participant = this.state.participantMap[peripheral.id]
this.setState(state => {
const sectionData = state.sectionData
const nearbyArr = sectionData[0].data
const othersArr = sectionData[1].data
nearbyArr.push(participant)
othersArr.splice(othersArr.findIndex(function (item) {
return item.beacon === peripheral.id;
}), 1);
return sectionData
})
}
}
}
Консольжурнал всего периферийного устройства
{ advertising:
{ txPowerLevel: -2147483648,
serviceUUIDs: [ 'feaa' ],
isConnectable: true,
manufacturerData:
{ bytes:
[ 2,
1,
6,
3,
3,
170,
254,
21,
22,
170,
254,
0,
232,
0,
17,
34,
51,
68,
85,
102,
119,
136,
153,
171,
205,
239,
231,
3,
15,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0 ],
data: 'AgEGAwOq/hUWqv4A6AARIjNEVWZ3iJmrze/nAw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=',
CDVType: 'ArrayBuffer' } },
rssi: -27,
id: 'AC:23:3F:27:1F:E2',
name: null }
Я полагаю, что должен проанализировать байты данных производителя и данные в соответствии со спецификациями протокола Eddystone, чтобы получить его, но я действительно застрял в том, как мне поступитьДелать это.Любая помощь будет отличной!Спасибо:)