Главная » 2012 » Март » 21 » Обучаем HID устройство (читай BT-клавиатуру) 1.ЧАСТЬ
19:04
Обучаем HID устройство (читай BT-клавиатуру) 1.ЧАСТЬ
На ДР, мне друзья подарили BT-клавиатуру. Маленькая, беленькая, симпатичная, Удобная! Подключил ее к своему Android 2.3.5 (SGSII), стал с ее помощью лазить по меню, запускать программы, дошел до Вконтакте и решил написать сообщение… а вот переключить на русский язык не смог, но как оказалось позже, это еще были только цветочки! Но кое-что мне удалось. Интересно как? Сейчас я уже многое понял, и не знаю с чего начать свой рассказ. Поэтому будет долго и скучно, но игра стоит свеч! Имеем: Клавиатура RAPOO E6300 Андроидофон Samsung Galaxy S II Первые шаги Начал я с того, что написал письмо в техподдержку клавиатуры, с вопросом: а не могли бы вы посодействовать с настройкой клавиатуры для Андроида? Получил, как и ожидалось, ласковый отказ: «Эта клавиатура сделана специально для iPad». Пока ждал от них ответа, стал «прогугливать» тему взаимодействия HID устройств и Android. И среди массы хлама нашел две полезнейшие статьи:
Изучение этих статей дало понимание, что для правильной работы устройства, нужно отредактировать как минимум .kl-файл, содержащий назначения клавиш. Кому лень было читать статьи, кратко поясню: На Вашем Android устройстве есть папка (кстати зависит от устройства, подробности есть в статье выше) /system/usr где расположены нужные нам каталоги keylayout и keychars в них размещаются файлы типа имя_клавиатуры.kl и имя_клавиатуры.kcm.bin соответственно. Первый (обычный текстовый) отвечает за соответствие сигналов клавиатуры (Linux key code) сигналам Android (Android key code name) и выглядит как список из таких команд: key 30 A WAKE Расшифровка:key [scancode] [Android key] [Flags] По-русски: если на клавиатуре нажали кнопку с кодом 30, то системе будет послана клавиша А, при этом устройство проснется. Флаг WAKE заставляет устройство проснуться и отреагировать на нажатие буквой А. А флаг WAKE_DROPPED заставляет только проснуться, т.е. чтобы нажать А, надо будет нажать ее снова. В статье есть описание и других флагов. Второй (скомпилированный из исходника бинарник) отвечает за комбинации клавиш вместе с Shift, Alt и т.п. Здесь уже идет таблица из разных вариантов, описывающих действия над Android key. В исходном виде он выглядит как: key A { label: 'A' base: 'a' shift, capslock: 'A' ctrl, alt, meta: none } А скомпилирован он для ускорения работы и загрузки устройства. Решаем что делать Я написал в техподдержку клавиатуры снова, описав свои наблюдения. Но поддержки от них никакой не добился. Им это не интересно. Придется все делать самому. Что, опять нужен root? Для доступа в папку /system нужны права root. Значит нужно его получить и не потерять гарантию. Я долго искал способ и для себя один нашел. Ничего не нужно прошивать. Все можно вернуть назад. ИСПОЛЬЗУЙТЕ НА СВОЙ СТРАХ И РИСК! ВСЕ ТОЛЬКО ДЛЯ ОЗНАКОМЛЕНИЯ! НИКАКОЙ ОТВЕТСТВЕННОСТИ! Но для меня все сработало как надо. Готовим файл Чтобы туда что-то положить, нужно подготовить наш файл имя_клавиатуры.kl. И начать стоит с того, чтобы скачать исходный образец. В папку /system/usr/keylayout/ можно попасть и без root, скопировав оттуда нужный нам файл при помощи файлового менеджера. Я воспользовался ASTRO. Но можно воспользоваться консольным приложением adb.exe, поставляемом с Samsung KIES. Команда adb pull remote local - copy file/dir from device Первые грабли:
Определить имя нужного файла может быть затруднительно. Общий принцип названия файлов, согласно статье — Vendor_XXXX_Product_XXXX_Version_XXXX.kl или DEVICE_NAME.kl
Ну вот, нашли файл, скачали, сделали копию, открыли текстовым редактором типа notepad. У меня файл назывался Broadcom_Bluetooth_HID.kl Тааааак, и что тут у нас? Все понятно, какие-то коды, какие-то кнопки, что к чему не особо понятно, но мы уже готовы к этому, потому что внимательно читали эту статью с начала и до сюда. А как же определить коды клавиш? Вторые грабли:
Чтобы определить коды клавиш понадобится средство отладки или...
Просто заходим на маркет и находим то что нужно, не с первой попытки конечно. Я перепробовал 3-4 программы. Не все могли похвастаться нужной функцией — многие отображали только Android коды, которые уже прописаны в нашем файле. А нам нужны scancod'ы! Получаем scancod'ы Я «отксерил» свою клавиатуру на копире и ручкой стал подписывать коды, которые мне давала программа KeyEvent Display. Так я получил набор кодов, осталось переписать их в файл и назначить им правильные функции.