Программирование ARM nRF51 HID Keyboard Application Mon, September 27 2021  

Поделиться

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

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

nRF51 HID Keyboard Application Печать
Добавил(а) microsin   

Этот пример приложения требует использования одного из следующих пакетов SoftDevice: S112, S113, S132, S140. Важное замечание: перед тем, как запустить пример, необходимо запрограммировать в память Flash чипа nRF51x HEX-файл SoftDevice [5]. Новые термины и сокращения см. в Словарике [8].

Все приведенные примеры HID удовлетворяют таблицам использования устройств [2].

Приложение HID-клавиатуры (HID Keyboard Application) это пример, в котором реализован профиль HID over GATT [6] для клавиатуры. Пример работает на железе китов разработчика (nRF5 Development Kit [7]).

В приложение добавлены 3 обязательные службы, необходимые для профиля HID over GATT:

• Human Interface Device Service
• Device Information Service
• Battery Service

Примечание: пример не оптимизирован для минимального энергопотребления. Приложение остановит advertising и перейдет в режим System OFF после 3 минут и 30 секунд (если не был произведен advertising по белому списку), или после 4 минут (если advertising по белому списку был произведен). Нажмите Button 1 для перезапуска advertising.

[Установка]

Пример называется ble_app_hids_keyboard_sXXX_pca10028, где XXX это номер SoftDevice, который Вы используете, а pca10028 это название платы разработчика [7]. Если Вы не используете Keil Pack Installer, то можете найти исходный код и файл проекта примера в папке каталога установки пакетов Nordic Semiconductor: examples\ ble_peripheral\ ble_app_hids_keyboard. Обычно пакеты по умолчанию устанавливаются в папку профиля пользователя, на Windows 10 это может быть папка наподобие C:\ Users\ имя пользователя\ AppData\ Local\ Arm\ Packs\ NordicSemiconductor\ nRF_Examples\ 11.0.0-2.alpha\ ble_peripheral\ ble_app_hids_keyboard\ pca10028\ s130\ arm5\.

Назначение кнопок во время соединения - в дополнение к BSP BLE Button Assignments (см. врезку "Назначение кнопок BSP BLE"):

Button 1: отправляет пример текста на компьютер или устройство Android (BLE Central).
Button 2: симуляция нажатия клавиши Shift.

[Модуль кнопок BSP BLE]

Примечание: предоставленная здесь информация применима для следующих библиотек SoftDevice: S110, S120, S130, S310.

Модуль кнопок BLE (BLE Button Module) предоставляет динамическую конфигурацию по функциям кнопок отладочной платы разработчика [7]. Модуль используется в большинстве примеров BLE из SDK.

Приложение должно распространить события BLE на модуль кнопок BLE. На основе этих событий модуль кнопок конфигурирует пакет поддержки платы (Board Support Package, BSP) для генерации событий BSP, соответствующим определенной активности на кнопках. Эти события BSP затем должны быть обработаны в приложении, в коде подпрограмм реакции на события (BSP event handler).

Например, когда приложение соединено, долгое нажатие на кнопку Button 1 генерирует событие BSP_EVENT_DISCONNECT. Обработчик приложения (BSP event handler) должен среагировать на это событие и выполнить отключение.

Пакет поддержки платы BSP, сконфигурированный модулем кнопок BLE, генерирует следующие события в ответ на определенные виды нажатий кнопок:

Текущее состояние Кнопка Действие Событие
Sleep (режим сна) 1 Нажатие (push) BSP_EVENT_WAKEUP
2 BSP_EVENT_CLEAR_BONDING_DATA
Awake (рабочий режим) 2 Долгое нажатие (long push) BSP_EVENT_WHITELIST_OFF
Connected (состояние соединения) 1 BSP_EVENT_DISCONNECT
Not connected (состояние без соединения) 1 Отпускание (release) BSP_EVENT_SLEEP

Приложение отвечает за интерпретацию и реализацию действий, соответствующих событиям. Однако первые 2 события выведут устройство из режима сна. Таким образом, эти действия не должны быть обработаны в event handler приложения. Вместо этого они индицируются для приложения через функцию bsp_btn_ble_init.

Примечание: функция bsp_btn_ble_init должна быть вызвана как можно раньше во время инициализации устройства (до входа в основной цикл функции main), чтобы перехватывать кнопочные нажатия пробуждения.

Когда устройство находится не в состоянии соединения, модуль кнопок BLE обеспечивает полный контроль над всеми действиями кнопки Button 1 в дополнение к действию длительного нажатия на всех кнопках. Когда устройство подключено, модуль кнопок BLE Button Module управляет всеми длинными нажатиями, и назначает события по умолчанию для действий по нажатию и отпусканию Button 1, чтобы они могли использоваться приложением.

[Назначение кнопок BSP BLE]

Большинство примеров BLE используют следующие стандартные назначения для кнопок, как это сконфигурировано модулем кнопок BSP BLE:

Во время advertising или scanning:

Button 1: Sleep (если не в состоянии соединения).
Button 2, долгое нажатие: выключение белого списка whitelist.

Во время сна:

Button 1: пробуждение.
Button 2: пробуждение и удаление информации о привязке (bond).

Во время соединения:

Button 1, долгое нажатие: отключение.

Нажатия и отпускания всех кнопок обрабатывается по специфике работы приложения.

[Проверка функциональности кнопок BSP BLE]

Эта процедура позволит проверить функциональность кнопок в проекте примера.

1. Скомпилируйте, прошейте в память Flash и запустите пример приложения BLE (например [1]).
2. Нажмите и отпустите кнопку Button 1. Индикация состояния BSP_INDICATE_IDLE покажет, что чип находится в состоянии System OFF.
3. Нажмите Button 1. Наблюдайте пробуждение устройства.
4. Установите BLE-соединение с устройством.
5. Нажмите и удерживайте Button 1. Наблюдайте отключение устройства.
6. Установите BLE-соединение с устройством, установите привязку (bond), затем выполните отключение.
7. Если устройство использует белый список (whitelist), нажмите и удерживайте Button 2. Наблюдайте отключение белого списка.
8. Нажмите дважды Button 1, чтобы устройство сначала перешло в сон, а потом было разбужено. Наблюдайте постоянное сохранение привязки (bond).
9. Нажмите и отпустите кнопку Button 1 (устройство сейчас находится в режиме сна). Нажмите Button 2, наблюдайте очистку привязки.

[Тестирование]

Как проверить работу HID Keyboard Application на компьютере с операционной системой Microsoft Windows 8:

1. Скомпилируйте и запрограммируйте приложение в память чипа nRF51. На плате разработчика должна наблюдаться индикация состояния BSP_INDICATE_ADVERTISING (см. врезку "Индикация состояний BSP BLE").

2. На компьютере с Windows 8 выполните поиск устройств Bluetooth, и подключитесь к устройству с именем Nordic_Keyboard. На плате должна наблюдаться индикация состояния BSP_INDICATE_CONNECTED.

3. Откройте текстовый редактор (например Notepad).

4. Нажмите кнопку Button 1 на плате. Это действие отправит на компьютер тестовое сообщение 'hello' (с возвратом каретки в конце строки), и этот текст будет виден в окне приложения редактора.

5. Нажмите кнопку Button 1, удерживая при этом нажатой кнопку Button 2. Обратите внимание, что теперь текст 'hello' будет вводиться большими буквами. Это следствие работы кнопки Button 2, которая эмулирует поведение клавиши Shift.

6. Нажмите на клавиатуре компьютера Caps Lock. На плате должна наблюдаться индикация состояния BSP_INDICATE_ALERT_3. В окне текстового редактора на компьютере должен появиться текст 'CAPSON'. Это позволяет проверить, что характеристика выходного отчета (output report characteristic) была успешно записана в устройство HID.

7. Выключите Caps Lock на компьютере. В результате плата должна показать состояние BSP_INDICATE_ALERT_OFF, и в окне текстового редактора должен появиться текст 'capsof'.

8. Отключите компьютер от устройства путем его удаления из списка  устройств компьютера. Обратите внимание на появление на плате последовательности индикации состояний: сначала BSP_INDICATE_ADVERTISING_DIRECTED, затем состояние должно переключиться на BSP_INDICATE_ADVERTISING_WHITELIST, затем на BSP_INDICATE_ADVERTISING, затем на BSP_INDICATE_ADVERTISING_SLOW, после чего все должно выключиться.

9. Сбросьте устройство нажатием кнопки Button 2, чтобы стереть информацию о соединении. Повторите тест, начиная с шага 2, устройство все так же должно отправлять сообщения на компьютер.

10. Отключите устройство от Windows 8, удалив тем самым информацию о соединении с компьютера. Запустите поиск устройств Bluetooth и наблюдайте, что когда устройство находится в состоянии BSP_INDICATE_ADVERTISING_WHITELIST (оповещение о себе по белому списку, Windows 8 не может обнаружить устройство.

11. Устройство должно снова обнаружиться после переключения в режим advertising.

Для абстракции от реального оборудования, которое используется для запуска примера кода, некоторые из примеров используют пакет библиотек поддержки оборудования Board Support Package (BSP). Этот модуль предоставляет определения состояний индикации BSP, что на разных платах разработчика может быть реализовано по-разному. В комбинации с BSP BLE Button Module, пакет поддержки оборудования поддерживает динамический функционал кнопок.

[Индикация состояний BSP]

В следующей таблице перечислены состояния BSP, индицируемые на платах разработчика PCA10028 [7] и PCA10031:

Состояние BSP PCA10028 PCA10031
BSP_INDICATE_IDLE Все LED погашены
BSP_INDICATE_SCANNING LED1 мигает (период 2  сек, скважность 10%) Красный LED мигает (период 2 сек, скважность 10%)
BSP_INDICATE_ADVERTISING
BSP_INDICATE_ADVERTISING_WHITELIST LED1 быстро мигает (период 1 сек, скважность 20%) Красный LED быстро мигает (период 1 сек, скважность 20%)
BSP_INDICATE_ADVERTISING_SLOW LED1 медленно мигает (период 4.4 сек, скважность 10%) Красный LED медленно мигает (период 4.4 сек, скважность 10%)
BSP_INDICATE_ADVERTISING_DIRECTED LED1 очень быстро мигает (период 0.6 сек, скважность 50%) Красный LED очень быстро мигает (период 0.6 сек, скважность 50%)
BSP_INDICATE_BONDING LED1 мерцает (период 0.2 сек, скважность 50%) Красный LED мерцает (период 0.2 сек, скважность 50%)
BSP_INDICATE_CONNECTED LED1 горит постоянно Красный LED горит постоянно
BSP_INDICATE_SENT_OK LED2 инвертирует состояние на 100 мс Зеленый LED инвертирует состояние на 100 мс
BSP_INDICATE_SEND_ERROR LED2 инвертирует состояние на 500 мс Зеленый LED инвертирует состояние на 500 мс
BSP_INDICATE_RCV_OK LED2 инвертирует состояние на 100 мс Зеленый LED инвертирует состояние на 100 мс
BSP_INDICATE_RCV_ERROR LED2 инвертирует состояние на 500 мс Зеленый LED инвертирует состояние на 500 мс
BSP_INDICATE_FATAL_ERROR Все LED горят
BSP_INDICATE_USER_STATE_OFF Все LED погашены
BSP_INDICATE_USER_STATE_0 LED2, LED3, LED4 погашены, LED1 горит Зеленый и синий LED погашены, красный горит
BSP_INDICATE_USER_STATE_1 LED1, LED3, LED4 погашены, LED2 горит Красный и синий LED погашены, зеленый горит
BSP_INDICATE_USER_STATE_2 LED3, LED4 погашены, LED1, LED2 горят Синий LED погашен, красный и зеленый горят
BSP_INDICATE_USER_STATE_3 Все LED горят
BSP_INDICATE_USER_STATE_ON

[Тестирование с помощью nRF Connect]

Можно также провести тест с помощью Master Control Panel, выполнив следующие шаги.

Примечание: эти действия можно провести в приложении nRF Connect for Desktop [4]. Аналогичное по функционалу приложение доступно для устройств на платформе Android.

1. Скомпилируйте и запрограммируйте приложение в память чипа nRF51. На плате разработчика должна наблюдаться индикация состояния BSP_INDICATE_ADVERTISING (см. врезку "Индикация состояний BSP BLE").

2. Подключитесь к устройству из Master Control Panel (advertising, устройство будет сообщать о себе как 'Nordic_Keyboard'), затем выполните соединение (bond) и выполните распознавание службы (service discovery). Наблюдайте на плате индикацию BSP_INDICATE_CONNECTED.

3. Кликните на кнопку 'Enable services' в Master Control Panel, и наблюдайте оповещения об уровне заряда батареи (Battery Level), которые будут отображаться каждые 2 секунды.

4. Нажмите кнопку 1 на плате. После этого должны наблюдаться 2 принятых уведомления по одной из характеристик HID Report. Это по два уведомления о нажатии и отпускании (press и release) для каждого символа тестового сообщения. У первого значение '00000B0000000000', у второго '0000000000000000', что соответствует нажатию и отпусканию кнопки HID-клавиатуры Bluetooth с символом 'h'. Подобным образом будут выглядеть оповещения для каждого символа переданной строки 'hello'. Поэтому, если нажать Button 1 еще раз, то оповещения нажатия и отпускания будут для следующей буквы 'e'.

5. Симуляция кнопки Shift: при удерживании в нажатом состоянии кнопки Button 2, нажимайте кнопку Button 1 на плате. Будут появляться по 2 оповещения характеристик HID Report (press и release) для каждого символа тестового сообщения. Первое будет иметь значение '02000F0000000000', второе '0200000000000000', что соответствует нажатию и отпусканию клавиши с символом 'l' при удерживаемой клавише Shift.

6. Симуляция Caps Lock ON: в Master Control Panel выберите HID Report, у которого должны быть свойства Read, WriteWithoutResponse и Write (Output Report), и UUID 0x2A4D. Выберите радиокнопку 'hex', введите '02' и кликните на кнопку 'Write'. Наблюдайте на плате индикацию BSP_INDICATE_ALERT_3. Также должны быть получены другие 7 оповещений характеристик HID Report (Input Report). Первое из них со значением '0000060413161211', второе '0000000413161211', третье '0000000013161211', и так далее, до события отпускания всех отправленных символов, 7-е оповещение '0000000000000000'.

7. Симуляция Caps Lock OFF: в Master Control Panel выберите HID Report, у которого должны быть свойства Read, WriteWithoutResponse и Write (Output Report). Выберите радиокнопку 'hex', введите '00' и кликните на кнопку 'Write'. Наблюдайте оповещение BSP_INDICATE_ALERT_OFF, и получение двух оповещений по другой характеристике HID Report. Первое должно быть со значением '0000060413161209', второе со значением '0000000413161209', третье '0000000013161209', и так далее, до события отпускания (release event for) для всех отправленных символов, 7-е оповещение '0000000000000000'.

8. Кликните на кнопку Disconnect в Master Control Panel. Наблюдайте, что новые оповещения больше не появляются, и устройство находится в состоянии объявления о себе по белому списку (advertising with Whitelist).

9. Пока состояние привязки (bond) сохраняется в Master Control Panel, должна быть возможность немедленного восстановления соединения с устройством путем повторного клика на кнопку Connect. Наблюдайте статус Battery Level, появляющийся на плате каждые 2 секунды.

[Ссылки]

1. BLE HID Keyboard Application site:nordicsemi.com.
2. HID usage tables site:usb.org.
3. Bluetooth Low Energy development kit for the nRF51 Series site:nordicsemi.com.
4. nRF Connect for Desktop site:nordicsemi.com.
5. SoftDevice site:nordicsemi.com.
6. Bluetooth Low Energy GATT.
7. nRF51 Development Kit site:nordicsemi.com.
8. nRFxx: аббревиатуры и термины.

 

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


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

Top of Page