Эмуляция нажатия на экран
10:44 12 авг 2014
Zaterehniy
Tue, 12 Aug 2014 10:44:44 +0400
В статье речь пойдет о том как можно имитировать прикосновения экрана android смартфона.
план статьи
1. Вступление
2. Обзор приложений. Пишем макрос
3. Заключение
Итак приступим. Во-первых давайте разберемся для чего нам это нужно. Самый простой пример — допустим вы установили игру, предположим стратегию и ваша задача — собирать ресурсы через определенный промежуток времени. Что вы делаете: 1. запускаете игру 2.жмете на иконки, собираете урожай. 3. Слайдите экран. и так каждый раз, т. е. выполняете рутинную, определенную последовательность одинаковых действий. Программы, о которых в данной статье пойдет речь, призваны облегчить подобные задачи. Но это не единственное применение данному ПО. Тут все зависит от вашей фантазии и поставленной задаче. Мы рассмотрим на примере двух приложений реализуемых нужный нам функционал. Первая это Finger replayer, название второй HiroMacro. По ходу разбора полетов познакомимся с приложениями, напишем первый макрос.
В статье речь пойдет о том как можно имитировать прикосновения экрана android смартфона.
план статьи
1. Вступление
2. Обзор приложений. Пишем макрос
3. Заключение
Итак приступим. Во-первых давайте разберемся для чего нам это нужно. Самый простой пример — допустим вы установили игру, предположим стратегию и ваша задача — собирать ресурсы через определенный промежуток времени. Что вы делаете: 1. запускаете игру 2.жмете на иконки, собираете урожай. 3. Слайдите экран. и так каждый раз, т. е. выполняете рутинную, определенную последовательность одинаковых действий. Программы, о которых в данной статье пойдет речь, призваны облегчить подобные задачи. Но это не единственное применение данному ПО. Тут все зависит от вашей фантазии и поставленной задаче. Мы рассмотрим на примере двух приложений реализуемых нужный нам функционал. Первая это Finger replayer, название второй HiroMacro. По ходу разбора полетов познакомимся с приложениями, напишем первый макрос.
Источник
Эмуляция нажатия клавиш андроид
Краткое описание:
Симуляция тапов и нажатий кнопок.
Описание:
Это приложение поможет вам избежать рутинных операций с вашим устройством. Достаточно лишь записать все действия,и программа будет их повторять автоматически.
FRep is Finger Record/Replay App. Once you record the routine operation, you can replay it by single trigger. Your own automatic operation button will be easily created.
— Record and Replay/Repeat operations of touchscreen and/or keystroke
— Easy record/play on current app, by pushing the button of floating console
— Console shows/hides depending on playable records for current app
Unlock key provides the unlimited number of records & Tasker/Locale plugin functionality.
Usage Example
— Recording analog Push/Drag/Flick operations for automatic process/scroll/gesture
— Playing continuous virtual space key push with interval for browsing
— Preload delayed or continuous pushing in prospect of processing delay, such as CPU load or network communication
— Avoid blind area or blurring by the finger operation
— Combination with automation App through FRep replay shortcut/Tasker plugin
— Demonstrate your App
=== Initial Setup ===
FRep needs the initial setup below. If your Android is ROOTED, you can skip this section by permitting su.
To setup FRep initially or when Android rebooted, you need USB connection to Win/Mac/Linux/Android. Please retrieve and run the setup tool from following URL.
[Tested devices]
Xperia Z, Xperia Ray, Sony Tablet S, Nexus 7, Medias N-06C, Galaxy Note, Galaxy Tab 2
================
Show/Hide console
After starting service, FRep will stay in the notification. By tapping it, the console shows/hides. Once you record by the recording circle button, FRep automatically show console on the app on recorded. Then, the record can be replayed by the playing triangle button.
NOTE: Since FRep records the absolute position for the device, it is also sensitive to screen orientation.
Recording mode
Choose which you like at the FRep front app;
Simple: record until Power push.
Till Gap: record until designated seconds of no input.
Progress: record and construct editable sequence separated by input gap.
*Time limit: 10 min per record.
Repeat/Edit playing
By setting the Repeat number >1 in Manage Traces, FRep play the record continuously by the count. You can also create/edit the playing sequence consisting of multiple records/controls.
Power button
FRep do not record Power push, which will finish any recording/playing immediately.
Restrict by current App
In record/replay, occasional call or App change may cause a problem. To avoid that, FRep is restricted on Phone, Google Play and FRep itself. You can configure restriction for other Apps.
Interruption of playing
To abort replaying, you can interrupt easily by the overlapping the operation.
Virtual keyboard
Double-tapping the upper button on the console, you can open another page which has key operation editor.
Customization
Notification type/icon, console size/transparency, drag/flick sensitivity, default settings, etc.
= Notice&Tips =
— Do not record including personal information and/or password.
— The replay result may differ depending on the CPU load and/or network traffic. To make good reproducibility, take longer delay for processing wait, stop touch at end point for dragging/flick, and more, try to Edit Sequence with image matching (see Appendix in our website).
— By default option, the records will be saved in sdcard. Though it can be copied for backup, it has no compatibility with other device.
If you have any question or request, please mail us. The reply will be in English.
Русский интерфейс: Нет
Требуется Android: 4.0 и выше
Unlock Key 1.0 //4pda.to/forum/dl/post/3951574/FRep+Unlock+Key+v1.0.apk
версия: 4.0 + Key FRep — Finger Replayer (Пост Giacomino #64745798)
версия: 3.98 FRep — Finger Replayer (Пост Giacomino #61296654)
версия: 3.97 FRep — Finger Replayer (Пост Giacomino #56094712)
версия: 3.9 build 54 FRep — Finger Replayer (Пост pyshnyi #44157353)
версия: 3.8 FRep — Finger Replayer (Пост Alex0047 #41490203)
версия: 3.7 build 46 Full FRep — Finger Replayer (Пост Alex0047 #40311041)
версия: 3.7 Full FRep — Finger Replayer (Пост Alex0047 #38918442)
версия: 3.6 Full FRep — Finger Replayer (Пост #36666219)
версия: 3.4 FRep — Finger Replayer (Пост #34700523)
версия: 3.2 FRep — Finger Replayer (Пост #32176005)
версия: 3.0 //4pda.to/forum/dl/post/4417117/frep.apk
версия: 2.8 + Unlock Key FRep — Finger Replayer (Пост #28065738)
версия: 2.7 FRep — Finger Replayer (Пост #26761748)
версия: 2.3 com.x0.strai.frep-20-v2.3patched.apk ( 1.75 МБ )
Сообщение отредактировал iMiKED — 29.07.21, 05:40
Источник
Обзор программы Sixaxis Controller — играй с удовольствием и комфортом!
Bee-GT
Прогресс не стоит на месте, и наряду с наращиванием технических характеристик смартфонов, появляются все новые и новые игры со сложной графикой. А куда ещё же девать всю эту мощь любимых девайсов, кроме как не на игры?
Игры классные, наверняка, каждый нашел для себя свои любимые в Google Play, а кто-то, напротив, любит понастольгировать по старым играм через эмуляторы различных консолей для Android. Но часто бывает так, что управление игрой мелкими виртуальными кнопками вызывает дискомфорт и усталость рук, а в порыве азарта доводит до бешенства, когда вдруг промазал по кнопке и по этой причине ты пересёк финишную черту вторым, или твои враги убили твоего героя раньше. Устранить это досадное недоразумение вам поможет программа Sixaxis Controller. Программа Sixaxis Controller представляет из себя утилиту по управлению джойстиком Dualshock3 от приставки Sony Playstation 3. К счастью, джойстики найти в свободной продаже проблем не составляет, так что если вы заядлый геймер, а джойстика у вас еще нет, но вы всерьез задумываетесь над его приобретением, то этот именно для вас. Думаю, никому не нужно объяснять, насколько удобнее держать в руках именно джойстик и иметь дистанционное управление устройством. Если пойдёте покупать, то обращайте внимание на «породистые» устройства, остерегайтесь подделок. Официально в России продаются Dualshock3 с номерами: CECHZC2R, возможны и варианты для других стран: CECHZC2E (Европа), CECHZC2H (Азия), CECHZC2U (США). Обращайте на это внимание при покупке. Кабеля MiniUSB-USB в комплекте с джойстиком нет, не забудьте докупить при необходимости. Если у вас дома есть приставка Sony Playstation 3, то вам уже повезло. Итак, подготовительные действия вы уже совершили, давайте перейдём к самой программе. Скачать её можно в Google Play, около 80 рублей. К сожалению, программа Sixaxis Controller требует наличия root прав на вашем устройстве под управлением Android, без них она функционировать не сможет. Да, Android поддерживает подобную периферию (по крайней мере, версии Android 4.0 и выше) на системном уровне и позволяет подключать такие устройства через OTG-кабели. Но мы с вами хотим играть качественно и комфортно, по-современному, без проводов, и в любые игры, а не только в те, в которых есть родная поддержка аппаратных кнопок. Поэтому, без внедрения в систему тут не обойтись. При запуске программы видим следующее:
Нас очень интресует строчка слева внизу, где написано «Local Bluetooth Address». Для того, чтобы наш аппарат на Android и джойстик могли работать в тандеме, необходимо, чтобы эти адреса у телефона и у джойстика совпадали. Изначально в джойстик зашит адрес 00:00:00:00:00:00, но это не беда, его легко сменить на требуемый. При наличии у вас кабеля OTG для вашего устройства Android, все просто до безобразия. Но, прежде чем соединять устройства, перейдем в настройки телефона, вкладка «Язык и ввод» и поставим галочку напротив метода ввода «Sixaxis Controller»:
Зайдем в программу, нажмём кнопку «Change IME» и выберем «Sixaxis Controller»:
Соединим два устройства:
Нажимаем кнопку Start, программа сразу же запросит права суперпользователя, предоставим их на постоянной основе:
После этого нажмём кнопку «Pair Controller», а на джойстике нажмём кнопку «Power» (круглая такая, с логотипом PS). Подождём секунд 5, пока программа Sixaxis Controller «прошьёт» требуемый адрес в наш джойстик. Всё, теперь можно конструкцию разбирать. Если джойстик отключился, то снова жмём кнопку «Power», должны раза три-пять моргнуть красные светодиоды на контроллере, а потом загореться один постоянно, соответствующий цифре «1»:
Если у вас нет в наличии кабеля OTG (или телефон/планшет не поддерживает), то не отчаивайтесь. Скачайте и установите для Windows программу Sixaxis Pair Tool, а с помощью неё в диалоговом окошке пропишите «Local Bluetooth Address» вашего телефона а нажмите кнопку «Update», предварительно соединив джойстик с компьютером:
Итак, теперь, наконец-таки мы проделали все предварительные действия. Возникает вопрос: как играть? Вот об этом, сейчас ниже я вам и расскажу. Все игры на Android подразделяются условно на две большие категории: со встроенной поддержкой аналоговых контроллеров (некоторые игры, почти все эмуляторы игровых приставок) и без таковой (все остальные игры). Рассмотрим первый вариант: с поддержкой игровых контроллеров. Для того, чтобы приступить играть в подобные игры, нужно на стартовом окне программы установить «Active Touch Profile» в положение «None». Далее выполняем следующие действия: Menu → Preferences → Gamepad Settings → Enable Gamepad (ставим галочку). Тем самым мы заставили устройство думать, что к нему подключен аналоговый контроллер. Сворачиваем программу кнопкой «Home» (домик), и запускаем игру. Например, это может быть Grand Theft Auto: Vice City или Beach Buggy Blitz. Не забываем в настройках игры выставлять соответствующий метод управления:
Перейдём к выводам. Итак, мы рассмотрели программу, какие же плюсы можно выделить:
Источник
Простая эмуляция USB клавиатуры при помощи PIC18F2550 в CarPC на базе Android
Здравствуйте, уважаемые участники Habrahabr.
При том, что Хабр — портал, ориентированный на программистов, обратил внимание, что последнее время появляется много статей о программировании микроконтроллеров и создании девайсов на их базе. Решил поделиться одной своей разработкой. В прошлом я много писал для МК, даже работал разработчиком ПО и схемотехники в одной из фирм, а до этого программил на АСМе под Z80 и i8080. Сейчас, во взрослой жизни, в основном пишу на PHP/MySQL для собственных интернет-проектов и к программированию МК не возвращался очень давно. Назвать полноценным программистом я себя не могу, т.к. освоить, например, OOP так и не смог, но немного пишу на С по мере надобности.
Некоторое время назад у меня возникла задача создать эмулятор USB клавиатуры для CarPC проекта. Использоваться она должна была в магнитоле Becker BE2580, устанавливаемой на автомобили немецкого производства 2000-х годов. Эмулятор должен был опрашивать штатные кнопки магнитолы и генерировать нажатия на виртуальной USB клавиатуре, подключенной к материнской плате CarPC на базе Android. Что из этого получилось, под катом.
Вкратце о самом CarPC: изначально мне в голову пришла крамольная идея воткнуть в машину новомодную магнитолу на базе Android со съёмной передней панелью-планшетом, которую недавно начали выпускать китайские производители. Однако товарищи по автосообществу отговорили меня от этой идеи, призывая не нарушать классический облик салона автомобиля и дизайн, задуманный производителем. В результате, в магнитолу была встроена материнская плата от медиаплеера Iconbit Toucan Nano, установил я её на место кассетной лентопротяжки. При этом отметил как быстро развивается прогресс: решил ради интереса проверить кассетник, но дома не нашлось ни одной кассеты.
Toucan Nano — идеальный кандидат для использования в CarPC, при цене около 100 долл (в РФ) у него есть TV выход (композит), компонент (субтрактивный с выделенным синхросигналом), правда, отсутствует, к сожалению, RGB, который был нужен для вывода изображения на дисплей в самой магнитоле. Есть HDMI, USB хост (2 порта). Ещё в ядро оказались вкомпилированными поддержка чипа PL2303 (USB2COM конвертер, т.е. RS232) — что позволило подключить внешний GPS приёмник, а также поддержка WiFi свистков на чипе Ralink (я использовал Dlink DWA-140). Плата была установлена в магнитолу, сигнал с ТВ выхода подан на RGB входы штатного монитора магнитолы при помощи самостоятельно собранного конвертора TV -> RGB на базе TDA8362. В магнитоле предусмотрен коммутатор видео-сигнала, таким образом, весь родной функционал магнитолы был сохранён. Выглядит это примерно вот так:
Красным цветом показано то, что размещено вторым этажом (под платой). С Toucan Nano в комплекте идёт пульт, работающий в паре с радио-свистком. В пульте реализована интересная технология Fly Mouse: мышь реагирует на встроенный в пульт акселерометр, таким образом, просто наклоняя пульт, передвигаешь мышку по экрану девайса, получается что-то вроде указки. Однако, в машине пользоваться этим мне показалось неудобно и глупо: это ведь всё-таки магнитола, а не комп! Поэтому было принято решение собрать эмулятор клавиатуры магнитолы, который бы подключался к порту USB и вёл себя как стандартная PC клавиатура, при этом опрашивая кнопки магнитолы. По сути, решение это универсально и может использоваться с любой ОС: не секрет, что многие системы CarPC строятся на платформах Intel.
Так случилось, что у меня на тот момент не было опыта работы с микроконтроллерами PIC, в молодости я программил для Atmel, но этот опыт на сегодня был уже не актуален, т.к. прошло лет 10 и о моих любимых AT89c2051 сейчас, наверное, уже никто не помнит. Писались программы тогда строго на АСМе, т.к. на С это просто было бы сложнее, у 2051 всего 2К ПЗУ. В те годы PIC тоже существовал, но мы отказались от его использования, т.к. средства разработки были слишком дороги, а для 2051 я тогда разрабатывал эмулятор ПЗУ самостоятельно на базе i51 с внешней ПЗУшкой, имевшего тот же instruction set что и Atmel 89c2051. Сейчас, поняв, что мне придётся пройти этот путь фактически заново, я собрался духом и засел за литературу. Думаю, опыт потому и будет полезен читателям, что всё расписываю по шагам, в развитии.
Сначала я стал изучать интернет на тему микроконтроллеров с поддержкой USB и сразу же наткнулся на девайс от славной компании PIC, это был 18F2550. Заявленные его функции оказались очень неплохими: поддержка USB 2.0, 1К ОЗУ, полностью конфигурируемый USB порт, по сути, 2550 может стать любым USB девайсом. Плюс все стандартные фичи PIC. Эту микросхему можно приобрести в корпусе DIP28, что удобно для монтажа и распайки, да и цена совсем невысока. В стародавние времена микроконтроллеры шили программатором, сейчас стали популярны бутлоадеры. Смысл бутлоадера в том, что его достаточно записать в микроконтроллер всего один раз, после чего вы можете обращаться к нему какими-либо иными средствами (в нашем случае через USB порт), и обновлять прошивку девайса, не извлекая его из схемы. Продаются готовые киты с предпрошитыми микроконтроллерами и готовым софтом для заливки прошивок через бутлоадер, однако мне искать такой кит (вернее, ждать пока его пришлют) не хотелось. Поэтому я просто отправился в ближайший радиомагазин и купил чистый PIC18F2550.
Далее нужно было собрать программатор для заливки бутлоадера. Пошарив по инету, нашёл вот это:
Схема там прилагается. Упростил её, конечно, убрав лишние детали, т.к. паять было лень. По сути, пины микроконтроллера подключил напрямую к LPT. Софт использовал WinPic800. Про сам бутлоадер история отдельная. Грузится он с адреса 0x000, соответственно сама прога должна начинаться с адреса 0x800, что указывается в настройках компилятора. Находил несколько разных бутлоадеров, они льют прошивку в разных режимах (например, HID), соответственно, предназначены для разных IDE. USB Драйвер PIC для прошивающего компа тоже может использоваться разный, т.к. PIC «превращается» в разные USB девайсы. Мне постоянно попадались бутлоадеры для 18F4550, а его конфиг отличается и бутлоадер от него на моём МК не работал. В результате, я остановился на бутлоадере и загрузчике прошивки на базе PIC-овской демо-платы MCHPUSB. Сам бутлоадер пришлось немного доработать под мою схемотехнику (т.к. я разместил кнопку бутлоадера на другом пине микроконтроллера). Вообще, там оказалось много всяких разных параметров (например, тип кварцевого резонатора, умножитель частоты и много подобной ерунды). При неправильном указании этих параметров, девайс шьётся и даже мигает светодиодом по программе, но потом отказывается работать как USB девайс, выдавая мою «любимую» ошибку «USB устройство не опознано», т.к. частоты неправильные. С этой проблемой я провозился пару дней, пока окончательно не нашёл работоспособную конфигурацию. В итоге, мой бутлоадер рассчитан на кварц 4Mhz. Светодиод припаян на RA5, кнопка активации режима прошивки для бутлоадера — на RA3 (и с нее 1кОм на плюс), 26 нога на землю (для работы в режиме LVP). Для того, чтобы МК вошёл в режим бутлоадера, удерживая сброс, нажимаем указанную кнопку на RA3. Бит LVP (отключение режима низковольтной прошивки) перепрошить мне почему-то так и не удалось, ну и ладно. По идее он нужен для предохранения бутлоадера от перезаписи. Умножитель настроен на максимальную частоту 48 Mhz. К сожалению, если микроконтроллер используется в режиме USB, выше частоту поднять нельзя, т.к. частоты USB фиксированы, а у умножителя есть кратность, но это оказалось и не нужно.
В итоге, бутлоадер поправил, драйвера на комп от Microchip установил. В качестве основы программы сразу взял бесплатный пример от Bradley A. Minch, который выдаёт на виртуальную клавиатуру последовательно символы ‘f’, ‘o’, ‘o’, ‘b’, ‘a’, ‘r’. Исходный код этой программы можно найти здесь:
Скомпилировав программу, предварительно настроив кучу конфигурационных регистров PIC-а, я добился, что она начала печатать на компе в цикле строку foobar! Ура! В реальности всё это тоже случилось не за один день, но подробности я опускаю. И здесь меня постиг на секунду страх, что всё это чудо может не заработать на Iconbit, который может просто без объяснения причин игнорировать почти неделю моей работы — и я никогда не узнаю почему. Но, подключив девайс к Android материнке, я увидел, что всё заработало: тут же открылось окно поиска в котором побежали знакомые буковки foobar. Android на нажатие произвольных клавиш реагирует открытием именно окна поиска.
Далее требовалось доработать программу до моих нужд, в частности написать код, который будет считывать данные с самой магнитолы. Как это будет работать, я на тот момент не представлял. Думал, придётся подключаться к матрице магнитолы и считывать с неё. Обычно подобные устройства используют динамическое сканирование матрицы, когда по оси X «бежит» единичка, а по оси Y считывается информация. Т.е., скажем, 16 клавиш можно обработать 8 пинами (4 + 4). Чтобы параллельно считывать такую матрицу тоже понадобится 8 пинов, но настроенных на ввод. Однако, покопавшись на плате магнитолы, я обнаружил, что заботливые немцы выделили отдельный процессор для обработки всей клавиатуры, единственно, ручки энкодеров шли напрямую на центральный проц. В итоге, у проца клавиатуры магнитолы я нашёл выход, на котором появляются импульсы при нажатии любых клавиш магнитолы. Частота следования импульсов оказалась достаточно высокой и для начала я просто тупо подключил их к конвертеру на базе PL2303, т.е. просто подал на RS-232 порт и начал экспериментировать с настройками порта. В результате выяснилось, что осмысленные байты можно увидеть, настроив порт аж на 480 кбит. Для мне до сих пор загадка зачем немцам понадобилось данные с клавиатуры передавать на такой высокой скорости.
Для того чтобы написать программу для PIC, пришлось детально проанализировать характер импульсов клавиатурного процессора магнитолы. Для этого я купил осциллограф. В молодости, конечно, у меня были все эти приборы, но всё это осталось у родителей, а я уже 5 лет как переехал в Москву. Поэтому решил потихоньку собирать парк приборов: ведь к радиолюбительству возвращаюсь время от времени.
В итоге оказалось, что процессор перед каждой пачкой информации (которая состоит из 2 байт), выдаёт длинный импульс, который служит «пилотом», предупреждающим о начале передачи блока информации. Удивительным оказалось то, что длина этого блока (равно как и промежутки между байтами) меняются произвольным образом даже при нажатии одной и той же кнопки. Другая проблема оказалась в том, что PIC не мог программным путём надёжно читать данные на такой скорости. Ведь он должен ещё и успевать обслуживать шину USB! Если нажатие клавиши происходит в неподходящий момент, он её просто пропускает. Как я писал выше, частоту ядра я поднял до максимума при помощи умножителей, однако даже при такой настройке процессор работал на пределе и иногда пропускал биты, в результате вероятность правильного определения кнопок составляла около 70%, что недопустимо в автомобиле. Здесь я уже собрался с умом и подумал, что, наверное, есть второй сигнал (строб). Так и оказалось. Но изначально я его не нашёл потому, что импульсы на нём почему-то присутствуют постоянно, а было бы логично если бы они появлялись при нажатии кнопок. Видимо, процессор магнитолы опрашивает клавиатуру в непрерывном цикле и выдаёт импульс при передаче любого бита, даже если состояние клавиш не меняется. Т.е., просто шлёт нули если нет никакой активности. В общем, процессор стробирует каждый передаваемый бит, в результате их можно читать абсолютно чётко. Программу на PIC переписал, после чего всё стало работать стабильно и красиво. При нажатии кнопки формируется один код, при отпускании — другой. Таким образом можно было ещё реализовать режим удерживания кнопок, но я этого делать не стал, т.к. кнопок и так оказалось в изобилии.
Здесь я приведу выдержки из своей программы, те части, что написал именно я. Оригинал программы вы можете увидеть по приведённой выше ссылке. В программе у меня есть, разумеется, таблица, сопоставляющая считанные коды клавиш и USB коды, которые надо передавать в головной девайс. Сразу замечу, что комментарии я обычно пишу на английском (чтобы не терять время на переключение регистра). Если кому-то интересна полная версия программы, я без проблем могу выслать её. Полный текст не привожу здесь по соображениям соблюдения авторских прав. Также могу выслать и бутлоадер и программу для его прошивки, программу для заливки прошивок.
Часть конфигов переопределяется самим программатором при заливке бутлоадера.
Передача кода клавиши на USB интерфейс:
Подпрограммы чтения кнопок магнитолы. Для максимизации быстродействия
цикл не используется. Важен каждый такт.
CAR — пин на который подключен сигнал с процессора клавиатуры магнитолы. SYN — сигнал строб с процессора клавиатуры магнитолы.
В процессе отладки я столкнулся с рядом проблем. В некоторых случаях микроконтроллер зависал и USB устройство просто пропадало. Протокол обмена USB очень непростой и вникать во все его нюансы было непросто. Путём проб и ошибок я нашёл проблемные места и добавил туда программный watchdog, который просто перезапускал процессор в случае зависания в этих местах. В итоге, я добился устойчивой бессбойной работы программы без зависаний с верностью определения нажатия клавиш 99%. USB порт в самом Toucan работает не очень хорошо, тем более, что я использовал USB разветвитель. Иногда даже «серьёзные» девайсы типа USB свистка мыши пропадают до следующей перезагрузки. Что уж говорить о моей самоделке. Однако, мне удалось добиться стабильности на уровне заводских USB девайсов.
Далее нужно было подключить энкодер. Я задумал направить данные с энкодера на эмуляцию кнопок «вверх» и «вниз», а нажатие ручки энкодера на клавишу Enter. Ну нажатие обрабатывает процессор, т.е. оно уже работает. Что касается энкодера, реализовать его чтение совсем несложно. Если его пины подключить к двум битам, он выдает последовательность 0, 1, 3, 2 (в двоичном коде 00 01 11 10). Двойку с тройкой меняем местами, получается 0 1 2 3. Далее, текущий результат из предыдущего вычитаем, если разность 1 или -3, то вращение в одну сторону, если -1 или 3, — в другую. Видел, что чтение энкодера реализуют какой-то таблицей, в общем, ничего это не нужно делать. Вот процедура:
Теперь PowerAMP управляется чётко: ручка-энкодер и она же enter! Ручкой бегаем по папкам с музыкой, кнопкой входим в них и запускаем композиции. Мечта!
Добавлю, что коды, генерируемые виртуальной клавиатурой, это не коды ASCII и даже не коды клавиш Android (которые тоже отличаются от кодов ASCII). Это отдельные коды USB клавиатуры. Найти их можно в этой таблице:
Соответственно, в Android есть специальный конфиг, который отвечает за обработку спец. клавиш. Конечно, мне надо было запускать и навигацию, и использовать кнопку Home и запускать плеер. Для этой цели нужно отредактировать файл keylayout, описание этих файлов есть здесь:
key 1 BACK # ESC («AC» button)
key 59 MENU # F1 («BC» button)
#key 60 CAMERA # F2 («CALL» button)
key 61 NOTIFICATION # F3 («repeat» key on deck)
key 62 HOME # F4 («main» button)
key 63 MEDIA_PREVIOUS # F5 («4» button)
key 64 HEADSETHOOK # PLAY/PAUSE F6 («audio» button)
#key 65 INFO # F7 («navi» button)
key 66 VOLUME_UP # F8 ??
key 67 VOLUME_DOWN # F9 ??
key 200 HEADSETHOOK # hardware key # MEDIA_STOP not working
key 68 MEDIA_NEXT # F10 («6» button)
key 87 POWER # F11 (‘map’ key on deck)
#key 88 EMAIL # F12 («tel» button)
Разумеется, отредактировать этот файл можно только на рутованных устройствах.
Так получилось, что некоторые клавиши не работают после установки последнего обновления на Toucan Nano. Почему — мне так и не удалось выяснить. Например, перестала работать самая важная кнопка HOME. Поэтому я написал простой командный файлик, который у меня стартует при старте системы. Вот он:
#!/system/bin/sh
stty -F /dev/ttyUSB0 ispeed 4800
chmod 0777 /dev/ttyUSB0
sleep 20
am broadcast -a info.mapcam.droid.SERVICE_START # mapcam.info
s=$(getevent -v0 -c1) # считываем одно событие из всех устройств ввода
# -v0 чтобы он не сыпал кучей ненужного мусора
s=$(echo $s | awk ‘
case $s in # выполняем нужную команду
0007003f) am start -a android.intent.action.MAIN -c android.intent.category.HOME -n com.maxmpz.audioplayer/.StartupActivity # AUDIO
# am start -a android.intent.action.MAIN -c android.intent.category.HOME -n com.maxmpz.audioplayer/.PlayListActivity # AUDIO
sleep 1
;;
00070040) am start -n ru.yandex.yandexmaps/.MapActivity # NAVI
sleep 1
;;
0007003d) am start -a android.intent.action.MAIN -c android.intent.category.HOME
sleep 1
;;
00070045) am start -a android.intent.action.MAIN -n com.speedsoftware.rootexplorer/.RootExplorer # TEL
sleep 1
;;
0007003b) am startservice -a «org.broeuschmeul.android.gps.usb.provider.nmea.intent.action.START_GPS_PROVIDER»
sleep 5
am broadcast -a info.mapcam.droid.SERVICE_START
# am start -n info.mapcam.droid/.SpeedometrActivity # CALL
sleep 1
;;
esac
Данный эмулятор уже почти в течение года успешно используется на машине. В планах сделать эмуляцию мыши, чтобы её можно было передвигать по экрану кнопками. Интегрировать тачскрин в систему я пока, к сожалению, так и не осилил. К сожалению, ряд программ (например Карты Рамблер) не управляются кнопками и требуют наличия тачскрина. Поэтому всё-таки для таких случаев в машине приходиться возить USB мышку.
О самом Android проекте я могу как-нибудь рассказать отдельно если это будет интересно.
Источник