Программирование ARM SD132: функции запуска и остановки оповещений BLE Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


SD132: функции запуска и остановки оповещений BLE Печать
Добавил(а) microsin   

Обзор функций запуска и остановки широковещательных оповещений (advertising) BLE в пакете библиотек SoftDevice S132 v3.0.0 [1].

[Запуск оповещений]

uint32_t sd_ble_gap_adv_start (ble_gap_adv_params_t const * p_adv_params);

Запускает процесс глобального оповещения о себе в радиосети BLE в качестве подчиненного устройства (advertising, подчиненное устройство оповещает о своей готовности работать в сети как сервер BLE). GAP становится общедоступным (Discoverable), работают режимы соединения для главного устройства, выполняется широковещание по радиоканалу (Broadcast Procedure). Подробнее про GAP см. [4].

Примечание: неизвестные термины и сокращения см. в Словарике [2].

Приложение может запустить процедуру advertising в целях широковещания, когда уже существует активное соединение. Таким образом, после получения события BLE_GAP_EVT_CONNECTED, эта функция может быть вызвана для запуска процедуры broadcast advertising. Однако при этом advertising не работает в обычном режиме для соединения с главным устройством (клиентом BLE), т. е. тип оповещения должен быть BLE_GAP_ADV_TYPE_ADV_SCAN_IND или BLE_GAP_ADV_TYPE_ADV_NONCONN_IND (эти advertising-типы не дают возможности установки соединения для двусторонней передачи данных, см. врезку "GAP Advertising types").

В любой момент времени может быть активным только один advertiser.

Макросы SoftDevice 132 v3.0.0, задающие тип широковещательного оповещения о профиле подчиненного устройства (GAP Advertising):

#define BLE_GAP_ADV_TYPE_ADV_IND          0x00
#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND   0x01
#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND     0x02
#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND  0x03

BLE_GAP_ADV_TYPE_ADV_IND задает ненаправленное соединение с клиентом (connectable undirected), к устройству может подключиться любой клиент.

BLE_GAP_ADV_TYPE_ADV_DIRECT_IND задает направленное соединение с определенным клиентом (connectable directed).

BLE_GAP_ADV_TYPE_ADV_SCAN_IND ненаправленное широковещание с возможностью проведения операции сканирования со стороны любых клиентских устройств (scannable undirected).

BLE_GAP_ADV_TYPE_ADV_NONCONN_IND ненаправленное широковещание с запретом установки соединения со стороны побочных клиентских устройств (non connectable undirected).

Генерируемые события

BLE_GAP_EVT_CONNECTED генерируется после того, как было установлено соединение через (connectable advertising, тип оповещений BLE_GAP_ADV_TYPE_ADV_IND или BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, см. врезку "GAP Advertising types").

BLE_GAP_EVT_TIMEOUT таймаут оповещения.

Соответствующие диаграммы последовательности сообщений

Диаграмма организации оповещения BLE.

nRF S132 Advertising chart

Установка соединения сервера (подчиненного устройства BLE) с приватным клиентом (главное устройство).

nRF S132 Peripheral Connection Establishment with Private Peer chart

Организация направленного оповещения.

nRF S132 Directed Advertising chart

Совместное использование "белого списка".

nRF S132 Whitelist Sharing chart

Параметры

[in] p_adv_params указатель на структуру типа ble_gap_adv_params_t, где находятся параметры оповещения (advertising parameters structure).

/**@brief Параметры GAP advertising. */
typedef struct
{
  uint8_t               type;                 /**< См. @ref BLE_GAP_ADV_TYPES. */
  ble_gap_addr_t const *p_peer_addr;          /**< Адрес известного клиента BLE (пира, peer).
        - Когда разрешена приватность соединения, и локальное устройство использует
          адреса @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE, осуществляется
          просмотр списка доверенных для подключения устройств (identity list)
          в поиске совпадения с клиентом, который осуществляет попытку подключения.
          Если локальный ключ (IRK) для этого идентификатора устройства установлен,
          то локальный IRK для этого устройства будет использоваться для генерации
          поля адреса advertiser в пакете оповещения (advertise packet).
        - Если установлен тип оповещения @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND
          (см. выше врезку "GAP Advertising types"), то должен быть установлен
          определенный подключающийся клиент, инициирующий соединения (targeted
          initiator). Если инициатор соединения присутствует в списке доверенных
          устройств (device identity list), то для этого устройства будет использоваться
          peer IRK для генерации поля адреса инициатора в пакете ADV_DIRECT_IND. */
  uint8_t               fp;                   /**< Filter Policy, см. @ref BLE_GAP_ADV_FILTER_POLICIES. */
  uint16_t              interval;             /**< Интервал оповещения (advertising interval)
          в диапазоне от 0x0020 до 0x4000, задаваемый в единицах 0.625 мс (от 20 мс до 10.24 с),
          см. @ref BLE_GAP_ADV_INTERVALS.
        - Если тип оповещения установлен @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND (см. выше
          врезку "GAP Advertising types"), то этот параметр должен быть установлен в 0,
          чтобы обеспечить направленное оповещение с высокой плотностью сообщений
          (high duty cycle directed advertising).
        - Также, если тип оповещения установлен @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND (см.
          выше врезку "GAP Advertising types"), то для оповещения с низкой плотностью
          сообщений (low duty cycle advertising) установите interval в диапазоне
          от @ref BLE_GAP_ADV_INTERVAL_MIN до @ref BLE_GAP_ADV_INTERVAL_MAX включительно.*/
  uint16_t              timeout;              /**< Таймаут оповещения (advertising timeout)
          в диапазоне от 0x0001 до 0x3FFF секунд, значение 0x0000 запрещает таймаут.
          См. также @ref BLE_GAP_ADV_TIMEOUT_VALUES. Если тип оповещения равен
          @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND (см. выше врезку "GAP Advertising types"),
          то этот параметр должен быть установлен в 0 для обеспечения оповещения с высокой
          плотностью сообщений (High duty cycle directed advertising). */
  ble_gap_adv_ch_mask_t channel_mask;         /**< Маска каналов для advertising.
                                                   См. @ref ble_gap_adv_ch_mask_t. */
} ble_gap_adv_params_t;

Возвращаемые значения

NRF_SUCCESS стек BLE запустил advertising.

NRF_ERROR_INVALID_ADDR предоставлен недопустимый указатель.

NRF_ERROR_INVALID_STATE недопустимое состояние для выполнения операции.

NRF_ERROR_CONN_COUNT достигнут предел доступных соединений; не может быть запущен оповещатель с возможностью соединения (connectable advertiser).

NRF_ERROR_NO_MEM сконфигурированные пулы памяти (см. ble_conn_bw_counts_t) недостаточно велики для выбранной полосы в этом соединении.

NRF_ERROR_INVALID_PARAM предоставлен недопустимый параметр (параметры), проверьте для параметров допустимые диапазоны и ограничения.

BLE_ERROR_GAP_INVALID_BLE_ADDR предоставлен недопустимый адрес Bluetooth.

BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST режим Discoverable и whitelist не совместимы друг с другом.

NRF_ERROR_BUSY стек занят, обработайте ожидающие обработки события и попробуйте еще раз.

NRF_ERROR_RESOURCES недостаточно слотов ролей (BLE role slots). Остановите одну или большее количество активных ролей (Central, Peripheral или Observer) и попробуйте еще раз.

[Остановка оповещений]

uint32_t sd_ble_gap_adv_stop (void);

Останавливает advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). См. выше врезки Advertising и Whitelist Sharing в разделе "Соответствующие диаграммы последовательности сообщений".

Возвращаемые значения

NRF_SUCCESS стек BLE остановил оповещения.

NRF_ERROR_INVALID_STATE недопустимое состояние для выполнения операции (возможно, устройство не в состоянии advertising).

[Ссылки]

1. S132 SoftDevice v3.0.0 API site:infocenter.nordicsemi.com.
2Bluetooth: аббревиатуры и термины.
3. BLE: что такое connecting, pairing, bonding, whitelist?
4. Bluetooth Low Energy GAP.

 

Добавить комментарий


Защитный код
Обновить

Top of Page