Программирование ARM nRF5 SDK: модуль BLE Advertising Tue, January 25 2022  

Поделиться

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

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

nRF5 SDK: модуль BLE Advertising Печать
Добавил(а) microsin   

Этот программный модуль предназначен для поддержки оповещения по радио (BLE advertising) с возможностью подключения к устройству.

Advertising Module обрабатывает оповещения о возможности соединения (connectable advertising) для приложения устройства BLE. Модуль может быть сконфигурирован с нужными режимами оповещения, чтобы соответствовать наиболее типичным сценариям использования. Ваше основное приложение может реагировать на изменения режимов advertising, если предоставлен обработчик события (event handler).

Замечание: Advertising Module поддерживает только те приложения, у которых используется одиночный линк периферийного устройства.

Приложение должно передавать события стека BLE в этот модуль путем вызова ble_advertising_on_ble_evt(), и также должно передавать системные события вызовом ble_advertising_on_sys_evt().

[Используемые перечисления]

ble_adv_evt_t. Это перечисление используется для событий адвертайзинга.

typedef enum
{
   BLE_ADV_EVT_IDLE,
   BLE_ADV_EVT_DIRECTED,
   BLE_ADV_EVT_DIRECTED_SLOW,
   BLE_ADV_EVT_FAST,
   BLE_ADV_EVT_SLOW,
   BLE_ADV_EVT_FAST_WHITELIST,
   BLE_ADV_EVT_SLOW_WHITELIST,
   BLE_ADV_EVT_WHITELIST_REQUEST,
   BLE_ADV_EVT_PEER_ADDR_REQUEST
} ble_adv_evt_t;

Эти события передаются в основное приложение (main), если во время инициализации Advertising Module был предоставлен обработчик. События для режимов, которые не используются, могут игнорироваться. Подобным образом могут игнорироваться события BLE_ADV_EVT_WHITELIST_REQUEST иd BLE_ADV_EVT_PEER_ADDR_REQUEST, если не используется белый список (whitelist) и прямое оповещение (direct advertising).

BLE_ADV_EVT_IDLE Ожидание. Оповещение с возможностью подключения (connectable advertising) не производится.
BLE_ADV_EVT_DIRECTED Запущен режим прямого оповещения (direct advertising).
BLE_ADV_EVT_DIRECTED_SLOW Был запущен direct advertising с низкой частотой повторений.
BLE_ADV_EVT_FAST Был запущен режим быстрого оповещения.
BLE_ADV_EVT_SLOW Был запущен режим медленного оповещения.
BLE_ADV_EVT_FAST_WHITELIST Был запущен режим быстрого оповещения с использованием белого списка.
BLE_ADV_EVT_SLOW_WHITELIST Был запущен режим медленного оповещения с использованием белого списка.
BLE_ADV_EVT_WHITELIST_REQUEST Запрос белого списка из основного приложения. Чтобы мог работать whitelist advertising, должен быть установлен белый список, когда сработало это событие.
BLE_ADV_EVT_PEER_ADDR_REQUEST Запрос адреса пира из основного приложения. Чтобы мог работать directed advertising, должен быть установлен адрес пира, когда сработало это событие.

ble_adv_mode_t. Это перечисление используется для режимов адвертайзинга.

typedef enum
{
   BLE_ADV_MODE_IDLE,
   BLE_ADV_MODE_DIRECTED,
   BLE_ADV_MODE_DIRECTED_SLOW,
   BLE_ADV_MODE_FAST,
   BLE_ADV_MODE_SLOW
} ble_adv_mode_t;

BLE_ADV_MODE_IDLE Ожидание. Оповещение с возможностью подключения (connectable advertising) не производится.

BLE_ADV_MODE_DIRECTED Режим направленного оповещения, когда осуществляется попытка соединиться с последним узлом, с которым была связь.

BLE_ADV_MODE_DIRECTED_SLOW Режим направленного оповещения (с низкой частотой повторений), когда осуществляется попытка соединиться с последним узлом, с которым была связь.

BLE_ADV_MODE_FAST Быстрое оповещение, которое будет запускать соединение с любым пиром, либо фильтровать подключение пира по белому списку, если он был задан.

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

[Функции]

ble_advertising_init. Функция для инициализации Advertising Module.

uint32_t ble_advertising_init (ble_advdata_t const * p_advdata,
                               ble_advdata_t const * p_srdata,
                               ble_adv_modes_config_t const * p_config,
                               ble_advertising_evt_handler_t const evt_handler,
                               ble_advertising_error_handler_t const error_handler);

Кодирует требуемые данные оповещения (advertising data) и передает их в стек. Также выстраивает структуру для передачи в стек, когда запускается адвертайзинг. Предоставленные данные адвертайзинга копируются в локальную структуру и обрабатываются в зависимости от того, какие режимы адвертайзинга были запущены в ble_advertising_start.

Параметры:

[in] p_advdata Данные адвертайзинга: имя, видимость (appearance), флаги обнаружения (discovery flags) и многое другое.

[in] p_srdata Данные для ответа на сканирование (scan response data): довесок к данным адвертайзинга.

[in] p_config Выбирает, какой режим адвертайзинга используется, и какие в нем заданы интервалы.

[in] evt_handler Обработчик события, который будет вызван при событиях адвертайзинга (см. перечисление ble_adv_evt_t).

[in] error_handler Обработчик ошибки, который будет передавать внутренние ошибки в основное приложение.

В случае успеха вернет NRF_SUCCESS, иначе будет возвращен код ошибки.

ble_advertising_on_ble_evt. Функция для обработки событий BLE.

void ble_advertising_on_ble_evt (const ble_evt_t *const p_ble_evt);

Эта функция должна вызываться из диспетчера событий стека BLE для модуля, чтобы обрабатывать события BLE, которые имеют отношение к Advertising Module.

Параметры:

[in] p_ble_evt Событие стека BLE.

ble_advertising_on_sys_evt. Функция для обработки системных событий.

void ble_advertising_on_sys_evt (uint32_t sys_evt);

Эта функция должна вызваться для обработки системных событий, которые имеют отношение к Advertising Module. В частности, Advertising Module не может использовать SoftDevice, пока существует ожидающая завершения операция записи в память FLASH. Этот обработчик события был разработан для задержки адвертайзинга до тех пор, пока не завершится операция с памятью FLASH.

Параметры:

[in] sys_evt Событие системы.

ble_advertising_peer_addr_reply. Функция для установки адреса пира.

uint32_t ble_advertising_peer_addr_reply (ble_gap_addr_t * p_peer_addr);

При получении события BLE_ADV_EVT_PEER_ADDR_REQUEST приложением должен быть установлен адрес пира. Без адреса пира режим прямого оповещения (directed advertising) не будет запущен.

Параметры:

[in] p_peer_addr Указатель на адрес пира.

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

NRF_SUCCESS В модуле был успешно сохранен указатель на адрес пира.
NRF_ERROR_INVALID_STATE Если ответ не ожидался.

ble_advertising_restart_without_whitelist. Функция запрета адвертайзинга по белому списку.

uint32_t ble_advertising_restart_without_whitelist (void);

Эта функция временно запретит whitelist advertising. Вызов этой функции сбросит текущий обратный отсчет таймаута.

Вернет NRF_SUCCESS в случае успеха, либо сообщение об ошибке, которое было передано из Softdevice.

ble_advertising_start. Функция запускает оповещение BLE.

uint32_t ble_advertising_start (ble_adv_mode_t advertising_mode);

Вы можете запустить advertising в любом режиме, который был разрешен во время инициализации.

Параметры:

[in] advertising_mode Режим оповещения.

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

NRF_SUCCESS В случае успеха, либо код ошибки, сообщающий о причине отказа.
NRF_ERROR_INVALID_STATE Если модуль не был инициализирован.

ble_advertising_whitelist_reply. Функция для установки белого списка.

uint32_t ble_advertising_whitelist_reply (ble_gap_addr_t const * p_gap_addrs,
                                          uint32_t addr_cnt,
                                          ble_gap_irk_t const * p_gap_irks,
                                          uint32_t irk_cnt);

Приложение должно установить whitelist при получении события BLE_ADV_EVT_WHITELIST_REQUEST. Без белого списка не может быть запущен режим быстрого или медленного оповещения.

Параметры:

[in] p_gap_addrs Список GAP-адресов для белого списка.
[in] addr_cnt Количество GAP-адресов для белого списка.
[in] p_gap_irks Список ключей IRK пира для белого списка.
[in] irk_cnt Количество ключей IRK пира для белого списка.

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

NRF_SUCCESS Если операция была успешной.
NRF_ERROR_INVALID_STATE Если вызов этой функции был сделан без получения события BLE_ADV_EVT_WHITELIST_REQUEST.

[Ссылки]

1. nRF5 SDK Advertising Module site:nordicsemi.com.
2Оповещения BLE, руководство для начинающих.

 

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


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

Top of Page