Каденция с устройства BLE

-(void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
     dispatch_async(dispatch_get_main_queue(), ^{

         NSData *data = characteristic.value;
         uint8_t *array = (uint8_t*) data.bytes;

         cadenceValue = [CharacteristicReader readUInt8Value:&array];
         self.cadence.text = [NSString stringWithFormat:@"%d", cadenceValue];
         });
}

Как получить частоту кадров с устройства bLE (Bluetooth с низким энергопотреблением) в swift 2. Я не могу найти точный код для этого. Для этого вызывается метод делегата didUpdateValueForCharacteristic.

У меня есть код nRF Toolbox, но он находится в objective c или swift 3, но мой проект находится в swift 2. Я пытался вызвать метод target c, используя заголовок моста, но он всегда возвращал 0 такт.


person Ved Rauniyar    schedule 21.10.2016    source источник
comment
Как выглядит пример кода Swift 3?   -  person davidgyoung    schedule 21.10.2016
comment
Получение ошибки в bindMemory и указателе в swift 2 // в didUpdateValueForCharacteristic let data = character.value var array = UnsafeMutablePointer‹UInt8›(mutating: (data! as NSData).bytes.bindMemory(to: UInt8.self, capacity: data! .count)) self.cadenceValue = NORCharacteristicReader.readUInt8Value(ptr: &array) // Метод. статическая функция readUInt8Value (ptr aPointer : inout UnsafeMutablePointer‹UInt8›) -> UInt8 { let val = aPointer.pointee aPointer = aPointer.successor() return val } @davidgyoung   -  person Ved Rauniyar    schedule 21.10.2016
comment
@davidgyoung столкнулся с проблемой преобразования приведенного выше кода в swift 2. Проблема связана с aPointer.pointee и bindMemory.   -  person Ved Rauniyar    schedule 21.10.2016


Ответы (1)


Я не уверен в определении CharacteristicReader, но вы можете попробовать:

[CharacteristicReader readUInt8Value:&array];
cadenceValue = Int(array[0])
self.cadence.text = [NSString stringWithFormat:@"%d", cadenceValue];

Вышеприведенное предполагает, что результат вызова readUInt8Value помещается в массив объектов UInt8, а значение частоты находится в первом байте массива. Вы также можете проверить, находится ли правильное значение в других байтах, попробовав cadenceValue = Int(array[1]) или cadenceValue = Int(array[2]) и т. д.

person davidgyoung    schedule 21.10.2016