2017-01-23 16 views
0

Я довольно новичок в программировании на объекте C, поэтому, пожалуйста, извините, если это очень простой вопрос.ObjectiveC: Чтение характеристик в определенном порядке

Я подключаюсь к периферийному устройству по Bluetooth и хочу иметь возможность читать характеристики устройств в определенном порядке. Значение (значения), возвращаемое с одного признака, определит, какую характеристику следует читать далее.

В настоящее время, если я открываю новую характеристику, используя код

[peripheral discoverCharacteristics:@[[CBUUID UUIDWithString:MyUUID_1]] forService:service]; 

можно обнаружить характеристику правильно и может считывать значение. Моя проблема связана с тем, что после обнаружения первого символа я попытаюсь обнаружить вторую характеристику, используя тот же код, что и выше, но с MyUUID_2.

Когда метод didDiscoverCharacteristicsForService называется услуга имеет как MyUUID_1 и MyUUID_2 характеристики. Поэтому при переходе через мои циклы if внутри метода первый признак снова используется.

Есть ли способ, чтобы очистить обнаруженные характеристики от службы, так что единственная характеристика петельных через внутри didDiscoverCharacteristicsForService характеристический называется желательно по зову discoverCharacteristics

ответ

0

Идея заключается в следующем: чтобы иметь возможность читать/писать характеристики, необходимо иметь действительный экземпляров CBService и CBCharacteristic.

Когда вы позвоните discoverServices и discoverCharacteristics методам, вы получите обратные экземпляры CBService и CBCharacteristics. Вы сможете полагаться на эти экземпляры (также считая их действительными), пока периферийное устройство не отключится. Таким образом, как только признак обнаружен, вы можете сохранить ссылку на него и прочитать/записать его значение за пределами обратного вызова. didDiscoverCharacteristicsForService:

Если вы хотите, чтобы читать характеристику в предопределенном порядке, вам сначала нужно работать в два этапа:

  1. Узнайте все характеристики, которые вас интересуют для этих услуг.
  2. Как только вы обнаружите все эти характеристики, прочитайте первый и дождитесь ответа.
  3. Затем прочитайте второй и дождитесь ответа.

Один из способов сделать это было бы, чтобы обернуть эти шаги внутри NSOperations, вы можете создать новый протокол делегата, чтобы помочь вам или использовать

@protocol MyBLEProtocol <NSObject> 
- (void) didFinishReadFirstCharacteristic; 
- (void) didFinishReadSecondCharacteristic; 
@end 
+0

Большое спасибо «NSNotificationCenter» за ваш ответ, и для скорость при этом. Вы имеете в виду, что я должен обнаружить службы, а затем открыть все характеристики, которые могут потребоваться с помощью вызова DiscoverCharacteristics. Затем внутри обратного вызова didDiscoverCharacteristicsForService просто прочитал их в том порядке, который мне бы хотелось? Затем –

+0

Вам необязательно читать характеристики внутри 'didDiscoverCharacteristicsForService'. Вы можете обернуть все, используя делегирование или NSOperations. Я попытаюсь обновить свой первый пост. – yageek

+0

Итак, моя проблема в том, что вызов может быть FFF1 -> FFF2 -> FFF3, а второй раз может быть FFF5 -> FFF3 -> FFF2 –