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 Примечание: пример не оптимизирован для минимального энергопотребления. Приложение остановит 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). [Модуль кнопок 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, генерирует следующие события в ответ на определенные виды нажатий кнопок:
Приложение отвечает за интерпретацию и реализацию действий, соответствующих событиям. Однако первые 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 1: пробуждение. Во время соединения: Button 1, долгое нажатие: отключение. Нажатия и отпускания всех кнопок обрабатывается по специфике работы приложения. [Проверка функциональности кнопок BSP BLE] Эта процедура позволит проверить функциональность кнопок в проекте примера. 1. Скомпилируйте, прошейте в память Flash и запустите пример приложения BLE (например [1]). [Тестирование] Как проверить работу 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:
[Тестирование с помощью 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. |