Сообщение о выходе за пределы допустимого диапазона и автоматическое переподключение - Устройство BLE - IOS

В настоящее время я работаю над приложением, которое получает данные с устройства BLE - аналогично сердечному монитору. Приложение считывает данные с устройства, а затем, когда получает определенный объем данных, создает файл .csv и загружает его на сервер. Все работает нормально, кроме случаев, когда устройство выходит за пределы диапазона. Приложение просто перестает получать данные и не распознает потерю связи. Я не получаю сообщения об ошибке. Приложение просто останавливается в середине цикла «получение данных» и продолжает ждать данные, которые никогда не поступают. Когда устройство снова в зоне действия, ничего не происходит.

Я хочу показать предупреждение о том, что устройство BLE находится вне диапазона. Когда устройство снова окажется в зоне действия, приложение должно автоматически повторно подключиться к нему, а затем продолжить считывание данных с устройства. Как я могу это реализовать? Я попытался получить состояние CM - используя функцию ниже - но это не сработало.

- (void)centralManagerDidUpdateState:(CBCentralManager *)central 
{
printf("Status of CoreBluetooth central manager changed %d (%s)\r\n",central.state,[self centralManagerStateToString:central.state]);
}

Я даже пытался добавить предложение if внутри цикла, чтобы проверить состояние устройства, но это тоже не сработало.

Я использую микросхему CC2540 Texas Instruments.


person vjunior    schedule 24.03.2015    source источник
comment
Вы реализовали didDisconnectPeriphal метод делегата?   -  person Paulw11    schedule 24.03.2015
comment
Согласен с @ Paulw11 здесь. Реализация обработчика событий отключения будет «шагом 1». Я сделал нечто подобное, и вы можете справиться с этим еще одним способом - постоянно отслеживать RSSI и смотреть, уменьшается ли он со временем (например, теоретически устройство удаляется все дальше). Повторное подключение, которое может потребоваться с периферийной стороны - если вы не хотите, чтобы ваше приложение постоянно сканировало и отслеживало близлежащие устройства BLE.   -  person SJoshi    schedule 27.03.2015
comment
Спасибо, что проблема решена. Идеально !   -  person vjunior    schedule 03.09.2015


Ответы (1)


Как было предложено Paulw11 и SJoshi (спасибо, ребята), мне пришлось реализовать метод didDisconnectPeripheral. Итак, вот как я это сделал:

.h файл:

// will be invoked once disconnected

-(void)centralManager:(CBCentralManager *)central
  didDisconnectPeripheral:(CBPeripheral *)peripheral 
                         error:(NSError *)error;

.m файл:

    -(void) centralManager:(CBCentralManager *)central 
       didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error {

        [central connectPeripheral:peripheral options:nil];

        // you can add whatever you want here. 
        // will execute when the peripheral loose its connection.
    }
person vjunior    schedule 03.09.2015