Categories

Other Travel IT Coocking Стоительство Автомобили Do It Yourself

Tag Cloud

welcome share experience дача фундамент мангал bbq кирпич skoda washer headlamp омыватель путешествие рюкзак горы Алтай

Aggregation

Rss

Touch Panel Keyboard

Category: IT



Тщательно ознакомившись с функционалом Android-планшетов, собрав из своего настольного 22" Wide монитора — Touch Screen Monitor, а так же огорченный
отсутствием удобного Touch функционала в Операционных системах для настольных PC (Win\Linux) решил воплотить в жизнь Отдельную Touch Panel Keyboard.

Идея была в реализации «проста»:

Берем любую удобную Touch Panel и из координат нажатия делаем Эмуляцию нажатия кнопок на клавиатуре.
Соответственно расположение активных областей Touch Panel соответствовало статической кнопке.

Используем функционал как клавиатуру, мышь и сочетание активных клавишь для Операционной системы.
Тем самым отказавшись от мышки и клавиатуры в текущем понимании.

Апогеем данной реализации, хотелось бы видеть — динамичные слои, смена функций в зависимости от активного окна.

Конечно смущенный идеями которые болтались в Интернете, Я изначально нацелился собрать нечто такое:




http://web.artlebedev.ru/everything/optimus/tactus/


Но как показала практика, автор репродукций концепта не зря до сих пор не выпустил его на рынок (концепт датирован 01.01.2008) — на то есть масса причин.

Итак:

Направление Движения

Поиск компонент подходящих под реализацию прототипа, показал несколько прискорбных фактов:




Заказ и сборка

После долгих скитаний, раздумий и споров Мой выбор пал на Open Frame монитор 12.1 Inch TFT LCD16:9 Resolution: 1280 x 800 5 Wire Touch Screen.LILLIPUT 12.1" LCD KIT

Одним из факторов выбора именно 12.1" был типо размер, 10" мало, а вот 12.1" максимально близко к Клавиатуре функциональность которой хотелось бы повторить и расширить. (Размер 275.82L x 178W x 5.2H) и что самое интересное, 5 мм толщины, это для LED экземпляра и без учета контроллера.
После долгих переговоров (за что отдельное спасибо Мы знаем кому) были заказаны 2 варианта с CCFL и LED подсветкой. В итоге мне попал Набор с CCFL подсветкой с которым Я и продолжил упражняться.

И вместе с 12.1" монитором мне досталась Resestive Panel с контроллером 5 Wire в исполнении Стекло 2.8 мм толщиной и размером 275x178 мм.

С Чего же начать?

Touch Panel была подключена, без монитора, установлен драйверe eGalaxTouch, который увидел контроллер и начал успешно работать.
Но в итоге Я получаю просто Touch Panel — которая смахивает на гигантский TouchPad любого бука. Надо что делать с «перехватом» координат.

В наборе юного установщика драйверовe eGalaxTouch присутствовал любезно вложенный файл UserGuide.chm — в котором так же был раздел «Interface to eGalaxTouch Device Driver.» и «Packet Format for eGalaxTouch Touchscreen controller». С этого Я и начал свой поиск.
Т.к. в лоб понять как применить написанное Я не мог, Я пошел в поисковик и наткнулся на замечательный проект JooJoo и замечательные наработки JooJoo Touch Provider for MultiTouchVista. Порывшись в исходниках, Я обнаружил DllImport(«xtkutility.dll») и обработку координат в классе TouchHandlerForm после вызова EGalaxTouch.EnumerateTouchscreenCallback() в отдельном потоке.

Ура… начало есть, осталось найти только в себе запас энтузиазма и вспомнить как писать на C# (с учетом того, что в мою бытность программиста C# почему-то назывался Pascal, потом Visual C++, но никак не C#). Делая поправку на мою экспертизу программиста и отсутствие опыта… Я все же написал Код, который выгляд вот так (в самой важной своей части):
.....
void WorkerThread()
{
var cb = new EGalaxTouch.EnumerateTouchscreenCallback(EnumerateTouchscreenCallback);

EGalaxTouch.EnumerateTouchInstance(IntPtr.Zero, IntPtr.Zero, cb);

}
.....
TouchHandlerForm frm = new TouchHandlerForm();
EGalaxTouch.RegisterTPNotifyMessage(hDevice, frm.Handle, 0x0400 + 100);
Application.Run(frm);
.....
if (m.Msg != 0x464)
{
base.WndProc(ref m);
return;
}

iCx = LoWord((uint) m.LParam.ToInt32());
iCy = HiWord((uint) m.LParam.ToInt32());
.....

var sim = new InputSimulator();
if ((iCx >= 518 & iCx <= 640 ) & (iCy >= 1120 & iCy <= 1350)) { sim.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.VK_R );
.....


Да для «эммулирования» нажатия клавиш и мыши Я использовал наработки проекта Windows Input Simulator, хотя осваивать keybd_event уже начал, но понял что лучше чем в указанном проекте мне не написать.

Работу Soft части можно увидеть на ролике тут

Но до написания Soft части, Я все же решил собрать подобие корпуса, что бы хоть как то оживить функционал «будущего».

Т.к. пластика под рукой не было, дерева тоже, да и работа с таким материалом без дополнительных знаний и опыта затруднительна, был выбран самый доступный материал в доме — КАРТОН!

Не долго думая Я начала изготавливать изделие:









Но куда же изделие без Покраски, в оригинальный черный цвет!?

Для покраски был использована инновационная краска «о вот и краски сына пригодились, не только ими по обоям рисовать».









И конечно же увлекательное занятие отрисовка и распечатка слоя функциональности. Кроме классической Клавиатуры, первичный функционал содержал несколько «вкусностей»:




Еще не много работы инструментом и получается:








Финальный ролик с круговым обзором плохого качества тут

Итог

Получился однослойный, статичный, с подключением по USB, но вполне рабочий вариант.

Touch Panel Keyboard обладает потенциалом функциональности и требует доработки. В частности были идеи собрать все это в пластике с подсветкой свето-диодами, с заменой слоев. Слой планировалось печатать на прозрачной пленке.

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

Самое главное — Resestive touch panel (читайте одно касание) не является блокирующим фактором при работе с областью Клавиатура, а весь специфичный функционал требующий нажатия более 1-й кнопки легко реализуется в программном коде(Ctrl+Del+Alt — это всего лишь область на тач панели).

Что же касается вопросов — можно ли играть в игры с такой реализацией, да можно, Но для игр требуется более тщательная проработка областей, как показывает опыт Android-планшетов с Resestive touch panel — есть интересные интерфейсные решения для управления и FPS, TPS, RTS, TBS и RPG.

Что дальше

А дальше попробуем пересобрать данный проект и в качестве слоя отображения Клавиатуры и всего остального использовать — LCD монитор.

Пока альтернативный планы развития оставлены напосле:



В итоге может получится забавное устройство.

Это перепост статьи с www.habrahabr.ru. Перепост и перевод размещен с согласия автора GreenGo

<Tags> DIY touch screen panel resestive optimus-tactus eGalaxTouch </Tags>