09.03.2012, 02:42 | #1 |
Старший Пользователь
Регистрация: 17.01.2009
Возраст: 49
Город: Москва
Регион: 77, 97, 99, 177
Машина: Audi A5 3.2FSI Q, Porsche 996 Turbo
Сообщений: 669
|
Чтение клавы магнитолы --> эмуляция USB клавы/мыши
Приветствую.
В общем, имеется магнитола Becker, есть желание подключить штатную клаву к девайсу на Андроиде. Опрос клавиш у магнитолы как положено динамический. В Андроиде мудрить особо ничего не хочется и хочется сделать девайс универсальным. Поэтому идея такая: берем микроконтроллер, на нем пишем прогу, которая будет считывать динамический опрос клавы магнитолы (это несложно, нужно взять матрицу по X, смотреть когда проц магнитолы выставляет там нужные уровни, и читать матрицу по Y, выявляя, соответственно, нажатые клавиши) -- это решение тоже будет универсальным для всех магнитол. Опционально можно считывать код нажатой клавиши с проца магнитолы (т.к. именно в моей магнитоле есть выход data link на внешний блок навигации, предполагаю, что коды нажатых кнопок туда передаются по одному проводу). Далее, микроконтроллер должен иметь USB slave порт с программируемым ID, чтобы его можно было закосить под стандартную USB keyboard или USB mouse. Коды кнопок, считанных с магнитолы передаем туда, используя таблицу соответствия (должна настраиваться в прошивке). Девайс можно будет использовать практически с любой магнитолой и с любым carPC, независимо на какой ОС он работает, лишь бы был USB. При умелом подходе, думаю, такую вещь можно забомбасить за день. Но поскольку я немного отошел от мира микроконтроллеров и не знаю что сейчас есть и что актуально, прошу мне подсказать на каком м/контроллере это удобнее сделать, и чтобы он также просто шился (т.е. чтобы программатор было несложно слепить). Есть конечно микроконтроллеры со встроенным USB->COM (та же Ардуина), но это немножко не то... Да и софт придется писать для Андроида, а хотелось бы просто эмулировать клаву USB. Либо например есть такой чип: http://www.datasheetcatalog.org/data...3/135595_1.pdf Он уже сам по себе есть USB клава. Может быть с микроконтроллера на него сигналы посылать? В принципе, он должен быть в любой USB клаве, можно просто оттуда выпаять... Ах да... Можно просто взять данный чип и зафигачить мультиплексоры для клавы мафона, переключаяя ее между мафоном и этим чипом. Тогда можно вообще обойтись без микроконтроллера, правда коды клавы будут хрен знает какие, да и как-то по-ламерски это. Но вообще, хочется конечно простого решения, чтобы быстро и легко. |
09.03.2012, 02:56 | #2 |
Старший Пользователь
Регистрация: 17.01.2009
Возраст: 49
Город: Москва
Регион: 77, 97, 99, 177
Машина: Audi A5 3.2FSI Q, Porsche 996 Turbo
Сообщений: 669
|
А вот я уже что-то сам нашел...
PIC18F2550 Вот здесь человек написал программу для эмуляции USB клавы: http://www.picbasic.co.uk/forum/showthread.php?t=8291 Я правда ни разу не писал под PIC... Но там на бейсике. |
09.03.2012, 12:11 | #4 |
Старший Пользователь
Регистрация: 17.01.2009
Возраст: 49
Город: Москва
Регион: 77, 97, 99, 177
Машина: Audi A5 3.2FSI Q, Porsche 996 Turbo
Сообщений: 669
|
Да, это пожалуй и есть то что нужно, спасибо.
В вольтмастере 330р стоит этот м/к: http://www.voltmaster.ru/cgi-bin/qwe...2453&group=170 А чип-дипе -- 1000р!!!! Все, завязываем с чип-дипом. |
10.03.2012, 00:31 | #5 |
Старший Пользователь
Регистрация: 17.01.2009
Возраст: 49
Город: Москва
Регион: 77, 97, 99, 177
Машина: Audi A5 3.2FSI Q, Porsche 996 Turbo
Сообщений: 669
|
Купил, собрал, прошил микроконтроллер (правда без бутлоадера как у Стансона, потому что его бутлоадер написан под *никс, а у меня его под рукой нету). Можно напрямую шить, работает. Софт взял WinPic800, программатор на LPT порту, вот этот:
http://products.foxdelta.com/art2003.htm Только почему то не снимается LVP бит, да Бог с ним, замкнул ногу 26 на землю. У Стансона задумано, что после прошивки бутлоадера режим LVP отключается навсегда. Можно было использовать виндузовый бутлоадер, но искать было лень. В результате... Все запустил, светодиодик мигает, команды выдаются на USB интерфейс виртуальной клавы... Проблема в том, что в моей магнитоле клава оказалась не резистивная, в ней используется просто матрица с опросом, причем их три штуки. Щас буду смотреть, на разъеме есть data link для блока нави, возможно, туда отсылаются коды нажатых кнопок, будем раскодировать и переписывать стансоновскую прогу. В любом случае, старт оч. неплохой, спасибо! PIC крутой реально: может эмулировать сразу несколько девайсов на USB шине! |
10.03.2012, 16:06 | #6 |
Старший Пользователь
Регистрация: 17.01.2009
Возраст: 49
Город: Москва
Регион: 77, 97, 99, 177
Машина: Audi A5 3.2FSI Q, Porsche 996 Turbo
Сообщений: 669
|
В общем, в магнитоле отдельный небольшой проц отвечает за обработку всей клавы. Нашел выход где он выдает код, сейчас пока смотрю его через комп в режиме RS-232, пытаюсь подобрать скорость и параметры. Если получится, можно будет сразу задействовать готовые либы PIC для RS232 и все должно получиться несложно.
|
10.03.2012, 23:13 | #7 |
Старший Пользователь
Регистрация: 17.01.2009
Возраст: 49
Город: Москва
Регион: 77, 97, 99, 177
Машина: Audi A5 3.2FSI Q, Porsche 996 Turbo
Сообщений: 669
|
Сегодня весь день потратил на попытки доработать Стансоновский софт, но пока безрезультатно. Во-первых, полдня промучился с бутлоадером, наконец настроил, работает. Оказывается, все это непросто так с пустого места запустить. Вот, сразу выкладываю бутлоадер и драйвер и софт для заливки. Чтобы залить в микроконтроллер сам бутлоадер, потребуется программатор.
Проблема со стансоновским софтом, что у него все написано под *никс и у меня не получается собрать его прошивку под виндой. Сейчас пытаюсь настроить MPLAB IDE и загрузить в него микрочиповские примеры для эмуляции HID клавы... p.s. Последняя версия бутлоадера не в архиве, а отдельно - MCHPUSB_2550.hex. В архиве тоже полурабочий: не умеет прошивать config микроконтроллера. При пользовании бутлоадером программы должны начинаться с адреса 0x800, т.к. с нулевого адреса идет собственно бутлоадер. Бутлоадер нужен для упрощения загрузки программ микроконтроллер, чтобы не дергать его каждый раз на перепрошивку. Но сам бутлоадер надо хотя бы раз прошить программатором. Один раз можно для этого к другу сходить у кого он есть. Либо использовать софт WinPic800 и программатор ART2003, который работает на LPT порту под Windows - в нем практически нет деталей, один резистор и один кондер. Последний раз редактировалось AngelOfGrief; 12.03.2012 в 11:52. |
11.03.2012, 20:50 | #8 |
Старший Пользователь
Регистрация: 17.01.2009
Возраст: 49
Город: Москва
Регион: 77, 97, 99, 177
Машина: Audi A5 3.2FSI Q, Porsche 996 Turbo
Сообщений: 669
|
Короче еще один день прошел. Тот бутлоадер оказался левый, не прошивает конфиг м/контроллера (обновил бутлоадер в посте выше). Пробившись полдня, нашел нужный, подправил, работает как надо.
Найденная мною программа успешно скомпилировалась в MPLAB под виндой (она была под другой проц, пришлось править до фига...), на данном этапе мой девайс умеет печатать символы через USB как клавиатура. Подрубил уже с другой стороны к магнитоле, пытаюсь теперь для PIC написать функцию, которая будет читать и расшифровывать коды мафоновских кнопок. Когда заработает, останется составить таблицу соответствия... И ВСЕ! Кстати, выяснил, что в андроиде (по крайней мере на тукане) на клаве есть эквиваленты всех служебных кнопок: НАЗАД, ДОМОЙ, НАСТРОЙКА, ПЛЕЕР, ПОЧТА. Они назначены на функ. клавиши. Так что у меня на магнитоле будут эти кнопки, УРА! Вверх/вниз назначу на энкодер, а ENTER -- на нажимаемую крутилку энкодера. Последний раз редактировалось AngelOfGrief; 12.03.2012 в 11:52. |
12.03.2012, 02:33 | #9 |
Старший Пользователь
Регистрация: 17.01.2009
Возраст: 49
Город: Москва
Регион: 77, 97, 99, 177
Машина: Audi A5 3.2FSI Q, Porsche 996 Turbo
Сообщений: 669
|
Ну что... Сделал я, заработало! Боялся очень, что на андроиде не будет пахать (проверял же на ПК), но USB есть USB! Некоторые клавиши работают неправильно, видимо наши друзья из тукана на своем пульте функц. клавиши некоторые поменяли местами. Подключу щас к андроиду обычную клаву и проверю.
У меня только не совсем получилось написать процедуру декодирования кодовых посылок магнитофона, в общем в 10% случаев нажатия кнопок пропускаются. Кварц на 4мгц маловат, надо другой, а эти деятели (создатели магнитолы) почему-то изволили передавать данные из проца клавиатуры на скорости около 260 кбит. Зачем это было нужно, конечно вопрос. Но вцелом выглядит круто! Можно теперь пользоваться магнитолой без пульта. Работают кнопки домой, Enter, отмена, настройка, стрелки курсора, вызов области уведомлений (F3). Не придумал как прикрутить кнопки к запуску навигации и плеера. По клавише F6 родной клавы вызывается встроенный плеер. Это не та F6 что в обычной клаве (коды отличаются почему-то). Мож выложу видео попозже. Ну и исходники разумеется. Последний раз редактировалось AngelOfGrief; 12.03.2012 в 11:54. |
12.03.2012, 02:57 | #10 |
Старший Пользователь
Регистрация: 17.01.2009
Возраст: 49
Город: Москва
Регион: 77, 97, 99, 177
Машина: Audi A5 3.2FSI Q, Porsche 996 Turbo
Сообщений: 669
|
Так и есть: поключил к тукану обычную usb клаву, у нее функ. клавиши частично не совпадают с его родной беспроводной клавой. Кто-нибудь знает где можно взять USB скан-коды, которые использует Android или где они у него хранятся? Нужны именно USB скан-коды, не коды символов и не обычные скан-коды клавиатуры. Вот кусочек моей программы:
if (n=='H') return 0x3B; // F2 home if (n=='A') return 0x3f; // F6 audio/player if (n=='N') return 0x3e; // (F5) navi if (n=='L') return 0x50; // left if (n=='R') return 0x4f; // right if (n=='U') return 0x52; // up if (n=='D') return 0x51; // down if (n=='E') return 0x28; // enter if (n=='B') return 0x29; // ESC back if (n=='S') return 0x3a; // F1 settings if (n=='F') return 0x3d; // F4 find/search if (n=='O') return 0x3c; // F3 notification area То, что возвращает функция, USB скан-коды. Не работает F6, F4 и F5. |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | Поиск в этой теме |
|
|