Чтение записей журнала данных с устройства BLE

Я реализую устройство BLE, которое хранит некоторые данные журнала на основе данных датчиков, и приложение для iOS, которое действует как центральный для доступа к данным.

Я знаю, как читать данные характеристик GATT, но мне интересно, как читать кучу с устройства. Есть ли стандартизированный способ сделать это?

Мой наивный подход был бы следующим:

  • Создайте пользовательскую характеристику только для чтения (A), которая содержит количество записей журнала.
  • Создайте пользовательскую характеристику записи (B), которая содержит индекс записи
  • Создайте пользовательскую характеристику только для чтения (C), которая содержит данные записи журнала с индексом (B).
  • Создайте пользовательскую характеристику записи (D), чтобы удалить все сохраненные записи.

Чтобы получить данные журнала, мне нужно прочитать количество записей (A), затем выполнить цикл, записать индекс в (B) и прочитать данные (C).

Это путь или есть лучший подход?

Мои записи данных журнала будут содержать метку времени и 8-битное значение с данными датчика.

1 ответ

Решение

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

  • Пользовательская характеристика, которая подлежит уведомлению.

И это все, это все, что вам нужно. Если вы хотите прочитать данные журнала, вы можете использовать следующую последовательность:-

  1. Центральное устройство позволяет получать уведомления на периферийных устройствах.
  2. Периферийное устройство отправляет уведомление центральному устройству с первым набором журналов.
  3. Периферийное устройство отправляет уведомление центральному устройству со вторым набором журналов.
  4. Периферийное устройство будет продолжать отправлять уведомления на центральное устройство, пока список журналов не будет заполнен.
  5. Периферийное устройство может отправить специальное уведомление (например, все 0), указывающее, что все журналы были отправлены полностью. В качестве альтернативы, периферийное устройство может полностью прекратить отправку уведомлений, и неактивность будет указывать центральному, что больше нет данных для отправки.
  6. Центральный может затем отключить уведомления на периферийном устройстве, чтобы новые данные не отправлялись. Центральный сервер может фактически остановить передачу журналов в любой момент, отключив уведомление.

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

Надеюсь, это поможет.

Другие вопросы по тегам