пятница, 12 августа 2011 г.

Android 2.2 и bluetooth клавиатура.

Есть платная программа Blueinput от teksoft - если не жалко 10 евро она возможно поможет.
Если жалко:
статья на английском http://i-miss-erin.blogspot.com/2009/09/connect-bluetooth-keyboard-in-android.html

** Девайсы необходимо "спарить"
Settings->Wireless&networks->Bluetooth settigs
Включаем Bluetooth и клавиатуру (иногда на ней надо нажать еще хитрую кнопочку с обратной стороны, что бы она начала вещать на все окрестности о себе - как правило всего несколько минуть, затем если не успели - повторить нажатие)
На смарте жмем Scan for device - клавиатура должна появиться в списке Bluetooth devices
Жмем на строчку с названием клавиатуры (Bluetooth Keyboard) и вводим код - любой, к примеру 1234
ОК. Теперь этот же код набираем на клавиатуре и на жмем enter.
Состояние строки под Bluetooth Keyboard измениться на Paired but not connected

Версия для смарта, без применения компьютера
* нужен root на девайс - z4root
* нужен установленный - busybox
* нужен установленный - GScript

Качаем файлы в папку на флэшке - gscript (/mnt/sdcard/gscript)
hciconfig
hcitool
hidd
cp_blueutils.sh

В моем Huaway U8500 уже был в системе hcitool и при замене предложенным, сканирование устройств перестало корректно работать. Поэтому на всякий случай выкладываю и его.

hcitool.orgin_u8500

Если качается стандартным гугл.браузером, то все падает на флэшку в папку download, но программам к имени добавляется суффикс .bin, т.е. было hidd, скачалось hidd.bin. Т.е. надо переименовыват (отрывать у имени .bin) и копировать в нужный каталог.

Opera такими проблемами не страдает, она позволяет сразу выбрать - куда скачивать (выбираем папку gscript) и сохраняет с нормальными именами.

Затем запускаем GScript. В меню выбираем "Add script". Жмем "Load file" и выбираем cp_blueutils.sh
Проверяем, есть ли галка на "Needs SU?" - она нам нужна для рута и жмем "Save". В списке скриптов появиться cp_blueutils. Запускаем его на выполнение. На экране должны быть строки о выполнении, типа:

"copy 'hidd' to /system/xbin"

В версии Android ниже 2.2 флэшка (sdcard) монтировалась не в /mnt/sdcard, а в /sdcard
В этому случае надо в скрипте cp_blueutils.sh поправить строку вида:

cd /mnt/sdcard/gscript

отредактировать до вида:

cd /sdcard/gscript

Что бы убедиться, что все и правда скопировалось куда нужно можно еще раз запустить скрипт. На этот раз должно быть что-то вроде

"'hidd' already exists in /system/xbin"

Значит все скопировали.
Скачаем еще немного скрптов в папку gscript:

scan.sh
connect.sh
make_bbb.sh (нужен только если хотите в дальнейшем запускать connect из эмулятора терминала)

Затем запускаем GScript. В меню выбираем "Add script". Жмем "Load file" и выбираем scan.sh, затем сохраняем и запускаем его из списка. Если ничего не нашлось, попробуйте активирвоать на клавиатуре магическую кнопочку.
Должно получиться что-то вроде:

Scanning ...
00:22:43:C6:5B:B9 Bluetooth Keyboard

Запоминаем эти хх:хх:хх:хх:хх:хх цифры-буквы, это MAC адрес клавиатуры. Теперь надо в GScript добавить из файла скрипт connect.sh и в нем ИЗМЕНИТЬ строку вида
mac="00:22:43:C6:5B:B9"
на ваши цифры-буквы. Затем сохранить и выполнить.
После этого клавиатура должна заработать.

В дальнейшем запускать только скрипт connect. Остальные в принципе можно удалить, впрочем как и скачанные программы в папке gscript. Если запусить скрипт make_bbb (пердварительно отредактировав в нем MAC адрес, как и в случае со скриптом connect), то в /system/xbin/ появиться файл bbb. Т.е. теперь можно будет из эмулятора терминала набирать su и затем bbb. И клавиатура должна подключиться.



Вторая версия вышеизложенного - работа с компьютера:
--Смарт должен быть рутован (инструкций огромное множество)--
Качаем недостающие программы:
http://androidobex.googlecode.com/files/hciconfig
http://androidobex.googlecode.com/files/hcitool
http://androidobex.googlecode.com/files/hidd

Итак, вся работа будет производиться через утилиту adb которая входит в комплект SDK Android
** Необходимо подключить девайс через usb к компьютеру.
** Так же после этого включить режим отладки: ставим галку в Settings->Aplication->Development->Usb debugging (как это на русском не помню)

** Запускаем adb shell. Сразу оговорюсь, как под виндой это работает не знаю, нет ее у меня, но говорят, что как-то работает.
В ответ на запуск adb shell получаем приглашение $
Вводим "su" и enter для получения root. И вот тут внимательно смотрим на экран, так как при первом запросе su из шела появиться запрос на предоставление рута (10сек) и надо подтвердить.
Если все нормально, $ поменяется на # - root.

** Теперь надо перемонтировать раздел /system для чтения-записи (изначально он монтируется только на чтение)
Частенько разделы /system имеют отличие - system - это всего лишь точка монтирования, а сам раздел выглядит похоже на /dev/block/mtdblockх, где х - номер раздела. Вот этот номер нам и предстоит выяснить. Если бездумно копировать команды инструкций для других моделей, можно смонтировать ошибочно раздел. Ну в общем. я Вас предупредил.
Смотрим, что и куда смонитировано (символ # набирать не надо, он уже отображается на экране):

# mount

в строчках ищем что-то вроде
/dev/block/mtdblock4 /system ... - вот 4 - это и есть наш раздел. У Вас может быть другая цифра!

Перемонтируем раздел:
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock4 /system
# chmod 777 /system/xbin

Выходим из adb shell (или, предположительно, закрываем окно для винды)
# exit
$ exit

** Теперь надо закинуть три скачанных файлика в смарт.

adb push hidd /system/xbin
adb push hcitool /system/xbin
adb push hciconfig /system/xbin

Сделать исполняемыми:
# chmod 755 /system/xbin/hidd
# chmod 755 /system/xbin/hcitool
# chmod 755 /system/xbin/hciconfig



** Теперь пошаманим с программками. Запускаем adb shell

* Получаем root
$ su
#

* Скнируем на предмет наличия клавиатуры и ее MAC адреса (опять же, не забываем, что клавиатура доступна к обнаружению ограниченное время, если не найдется, находим на ней магическую кнопочку и нажимаем). На выходе получим что-то вроде
# hcitool scan
Scanning ...
00:22:43:C6:5B:B9 Bluetooth keyboard
~~~~~~~~~~~~~~~~~
Цифры-буквы и есть MAC адрес

* Пробуем подключить клавиатуру:
# hidd --connect 00:22:43:C6:5B:B9

Должна заработать.
Для удобства можно сделать скрипт вида (вписать свой MAC адрес):

#!/system/bin/sh
hidd --connect 00:22:43:C6:5B:B9

и сохранить в /system/xbin/bbbb
# chmod 755 /system/xbin/bbbb

Теперь открыв на смарте терминал (к примеру Better Terminal Emulator Pro) и в нем
$ su
# bbbb

Должна подключиться клавиатура

Перечитал, и в итоге получился вольный перевод англоязычной статьи. С дополнением про скрипт.

10 комментариев:

  1. Раскладка мне и не нужна. Хочу подключить клаву что б использовать ее как джойстик для игр. Blueimput у меня есть, работает,соединяет,но через некоторое время соединение рвется и приходится заново подключать постоянно

    ОтветитьУдалить
  2. Где брать эти файлы? Как все это в скрипты впихать?

    ОтветитьУдалить
  3. Файлы тут.
    http://androidobex.googlecode.com/files/hciconfig
    http://androidobex.googlecode.com/files/hcitool
    http://androidobex.googlecode.com/files/hidd

    В скрипт - ну если клава одна, то можно просто создать башевский скрипт, что-то вроде:

    #!/system/bin/sh
    hidd --connect 00:22:43:C6:5B:B9

    и сохранить в /system/xbin/имя_скриптика
    да не забыть его сделать выполняемым
    chmod 755 /system/xbin/имя_скриптика

    А вообще удобно через юсб в режиме дебага открывать консоль через adb shell. Отлаживать скрипты, а потом уже на смарте запускать.

    ОтветитьУдалить
  4. А на андроид 2.1 эта инструкция подойдет? не охота рут делать только для теста...

    ОтветитьУдалить
  5. По идее и на 2.1 должна подойти. но там пути другие до катрочки (флэшки) - это придется учесть в скриптах. Я уже сейчас не помню что там именно отличается.

    ОтветитьУдалить
  6. Вылетает ошибка
    HID create error 17 (file exists)

    клава соответственно не пашед.

    Что делать, не подскажете ?

    ОтветитьУдалить
  7. всё получилось!
    всё сделал как написал автор по первому варианту
    девайс samsung i5500 прошивка cyanogen (андроид 2.3.7)
    клавиатура rapoo e6300
    раскладка переключается (использовал ruKeyboard)
    но соединение "отваливается" периодически... зараза

    ОтветитьУдалить
  8. Есть стойкое подозрение, что "отваливание" связано с какой-то несовместимостью. После замены клавиатуры соединение становиться стабильным.

    ОтветитьУдалить
  9. пытаюсь подключить Луч ВТ (ВК600) к android 4.2.2
    busybox, root, файлы положены в xbin, права выставлены...
    делаю из adb shell получаю ошибку
    soinfo_relocate(linker.cpp:975): cannot locate symbol "hci_lmtostr" referenced by "hcitool"...CANNOT LINK EXECUTABLE
    помогите разобраться

    ОтветитьУдалить
    Ответы
    1. это снова я файла hci_lmtostr в системе не нашел
      до этого ругался на libbluetooth.so его не было, но был libbluetooth_mtk.so который я переиминовал libbluetooth после появилась ошибка hci_lmtostr

      Удалить