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 таймаут оповещения. Соответствующие диаграммы последовательности сообщений Параметры [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. |