Как вы обрабатываете байты и ArrayBuffer, полученные из маяков Eddystone? (Данные TLM конкретно) - PullRequest
0 голосов
/ 05 июля 2019

В настоящее время я создаю мобильное приложение для обнаружения маяков 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, чтобы получить его, но я действительно застрял в том, как мне поступитьДелать это.Любая помощь будет отличной!Спасибо:)

...