2017-02-11 10 views
0

Периферийное устройство настроено для рекламы с одной услугой, к которой добавлены две характеристики. Одна характеристика имеет свойство уведомлять и разрешение читается. Другая характеристика имеет свойство write и разрешение для записи. Вторая упомянутая характеристика используется для связи от центральной к периферии, и именно там проблема.Данные из центра принимаются только каждые 10 секунд, почему?

Кажется, что есть 10-секундный цикл. Не более чем один из ожидаемых пакетов может приниматься более одного раза в промежутке времени в 10 секунд. Также, если центральный отправляет данные через 10 секунд после отправки данных до того, как периферийное устройство получит ожидаемый пакет мгновенно, менее секунды.

Вы можете видеть, что я имею в виду с выходом отладчика.

Every 4 seconds data is trying to be sent to peripheral.

Отредактировано 15 февраля 2017 * Чтобы прояснить этот вопрос немного лучше я буду давать больше информации о выходе из отладчика. То, что вы видите здесь, является центральным отлаживанием. Формулировка «writeValue» указывает, что данные были отправлены, и формулировка «didWriteValueFor» указывает на подтверждение того, что данные достигли периферии успешно. Это подтверждение вызывается в методе делегата:

func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) 

*

Это как если бы сообщение в описанном направлении блокируется в течение 10 секунд после последнего приема данных, а затем снова открыт. Можно ли предотвратить эту блокировку? Периферийные (-и) потребности (ы) должны быть проинформированы мгновенно и не только каждые 10 секунд. Я уверен, что настраиваю что-то неправильно или забыл что-то важное.

Помощь очень ценится.

+0

Непонятно, если вы подключены к периферийному устройству или просто полагаетесь на рекламные мероприятия. Рекламные мероприятия - это низкий рабочий цикл, а 10,25 секунды - максимальное время цикла. Большинство периферийных устройств рекламируют по ставкам, приближающимся к этому максимуму для экономии энергии. – CuriousRabbit

+0

Они подключены.Я не упоминал, что периферийные и центральные связаны, потому что мне неизвестно, что центральный может передавать данные на периферию, если он не подключен. Благодарим вас за информацию о 10-секундном низком цикле рекламы. – BCI

+0

Какой интервал подключения вашего устройства? Это позволит определить, как часто вы можете общаться с устройством. (Я не знаю, как это получить через CoreBluetooth, вы, как правило, получаете его, зная, как вы настроили прошивку на периферии. Это может быть доступно через IOBluetooth, но я никогда не пробовал это на iOS.) –

ответ

0

Наконец, передача данных с центрального процессора iOS на периферию iOS достигает приличной скорости. Чтобы достичь этого, я должен был сделать два изменения, они напрямую связаны друг с другом. На периферийной стороне iOS, как и на центральной стороне iOS, были сделаны изменения. Часть решения - это конфигурация объекта CBMutableCharacteristic на периферийной стороне iOS. Я установил его свойства для Writable With Response, хотя для того, чтобы сделать связь так быстро, как мне это нужно, теперь я установил ее в Writable Without Response. Таким образом, конкретизация объекта CBMutableCharacteristic выглядит следующим образом:

let characteristicWritableWithoutResponseCBMutableCharacteristic.init(type: CBUUID.init(string: TRANSFER_CHARACTERISTIC_UUID), properties: CBCharacteristicProperties.writeWithoutResponse, value: nil, permissions: CBAttributePermissions.writeable) 

Другая часть раствора находится на стороне централи. Поскольку объект CBMutableCharacteristic создается с помощью «writeWithoutResponse», мне пришлось изменить тип параметра для метода writeValue из CBCharacteristicWriteType.withResponse на CBCharacteristicWriteType.withoutResponse. Это выглядит так:

currentPeripheral.writeValue(newPayload, for: writableCharacteristic, type: CBCharacteristicWriteType.withoutResponse) 

Время передачи данных от центрального к периферийному оборудованию теперь составляет менее одной секунды. Хотя я должен упомянуть, что центральный посылает очень мало данных (первоначально значение двойного типа данных). Надеюсь, это тоже поможет другим.