Частота с устройства BLE

#ios #swift #bluetooth-lowenergy #ibeacon #cadence

#iOS #быстрый #bluetooth -низкое энергопотребление #ibeacon #частота #swift

Вопрос:

 -(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:amp;array];
         self.cadence.text = [NSString stringWithFormat:@"%d", cadenceValue];
         });
}
  

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

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

Комментарии:

1. Как выглядит пример кода Swift 3?

2. Получаю ошибку в bindMemory и указателе в swift 2 // в didUpdateValueForCharacteristic пусть data = characteristic.value var array = UnsafeMutablePointer<UInt8>(изменение: (данных! как NSData). bytes.bindMemory (для: UInt8.self, емкость: данные! .count)) self.cadenceValue = NORCharacteristicReader.readUInt8Value(ptr: amp;array) // Метод. статическая функция считывает значение 8(ptr-указатель: без небезопасного изменения<UInt8>) -> UInt8 { пусть значение = aPointer.указываемый указатель = aPointer.successor() возвращает значение } @davidgyoung

3. @davidgyoung столкнулся с проблемой преобразования приведенного выше кода в swift 2, проблема связана с aPointer.pointee и bindMemory

Ответ №1:

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

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

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