nRF5 SDK 12 BSP: как добавить свой обработчик кнопки |
![]() |
Добавил(а) microsin |
Здесь показан процесс добавления своего обработчика кнопки с помощью функций BSP (Board Support Package, или Button Support Package, как кому больше нравится) на плате разработчика PCA10040 и примера устройства Central BLE Heart Rate Service (или клиента BLE; этот пример находится в папке examples\ble_central\ble_app_hrs_c архива SDK nRF5_SDK_12.3.0_d7731ad [2]). Процесс по шагам: 1. Добавьте новый идентификатор события в конец перечисления bsp_event_t (оно находится в bsp.h). На примере добавления идентификатора события BSP_EVENT_MY_SEND: typedef enum { BSP_EVENT_NOTHING = 0, /**< Назначьте это событие на действие, чтобы предотвратить генерацию события в ответ на действие (эквивалентно запрету действия). */ BSP_EVENT_DEFAULT, /**< Назначьте это событие на действие, которое должно быть привязано к событию по умолчанию для этого действия. */ BSP_EVENT_CLEAR_BONDING_DATA, /**< Постоянные данные привязки (persistent bonding data) должны быть очищены. */ BSP_EVENT_CLEAR_ALERT, /**< Предупреждение должно быть очищено. */ ... BSP_EVENT_KEY_7, /**< Событие по умолчанию для действия по нажатию (push action) кнопки BSP_BUTTON_7 (только в том случае, если эта кнопка присутствует). */ BSP_EVENT_MY_SEND, // Это новое добавленное событие BSP_EVENT_KEY_LAST = BSP_EVENT_MY_SEND, // Идентификатор последнего события } bsp_event_t; Примечание: по умолчанию библиотека BSP присваивает кнопкам BSP_BUTTON_0 .. BSP_BUTTON_7 события BSP_EVENT_KEY_0 .. BSP_EVENT_KEY_7 и событие на все действия BSP_EVENT_NOTHING. Это делается только для тех кнопок, которые присутствуют в системе (на отладочной плате PCA10040 только 4 кнопки BSP_BUTTON_0 .. BSP_BUTTON_3). Под действием понимается нажатие, отпускание, длинное нажатие (#define константы BSP_BUTTON_ACTION_PUSH, BSP_BUTTON_ACTION_RELEASE, BSP_BUTTON_ACTION_LONG_PUSH, которые определены в том же заголовке bsp.h). Новый идентификатор нужно добавить в перечисление bsp_event_t перед идентификатором BSP_EVENT_KEY_LAST, и соответствующим образом подкорректировать его значение. 2. Добавьте перед входом в бесконечный цикл функции main вызов bsp_event_to_button_action_assign, что будет назначать нужной кнопке генерацию нужного события на нужное действие: bsp_event_to_button_action_assign(bsp_board_pin_to_button_idx(BSP_BUTTON_2), BSP_BUTTON_ACTION_PUSH, BSP_EVENT_MY_SEND); В этом вызове назначается генерация события BSP_EVENT_MY_SEND в ответ на нажатие (BSP_BUTTON_ACTION_PUSH) кнопки BSP_BUTTON_2. Функция bsp_board_pin_to_button_idx переводит номер ножки входа, соответствующий кнопке BSP_BUTTON_2, в соответствующий индекс кнопки (кнопке BSP_BUTTON_2 соответствует индекс 2). 3. В функцию обработки события bsp_event_handler (эта функция находится в main.c) добавьте ветку для события BSP_EVENT_MY_SEND: void bsp_event_handler(bsp_event_t event) { uint32_t err_code; switch (event) { case BSP_EVENT_SLEEP: ... case BSP_EVENT_MY_SEND: umsg("Мое новое событие сработало!\n"); break; default: break; } } [Ссылки] 1. SDK 12 Board Support Package (BSP) site:nordicsemi.com. |