PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Дополнительные устройства (http://pccar.ru/forumdisplay.php?f=177)
-   -   Собственный контроллер резистивного сенсорного экрана, совместимый с Android (http://pccar.ru/showthread.php?t=18930)

VVi3ard 28.03.2013 18:44

Я сейчас занят сильно, нет времени гуглить, обрати внимание:
по ссылке http://source.android.com/tech/input/touch-devices.html в конце есть ссылки:
Linux multi-touch protocol
ENAC list of available multitouch devices on Linux

Мне все таки кажется что там тоже может быть полезная информация.

VVi3ard 28.03.2013 19:12

Вот еще масса информации: http://www.usb.org/developers/hidpage
Нужно смотреть твой код который реализует HID класс "Мышь" возможно там есть комментарии по настройке для другого класса.
Вот от туда инфа от MS
http://msdn.microsoft.com/ru-RU/libr.../gg487435.aspx
http://msdn.microsoft.com/en-us/libr.../gg487437.aspx

zyxel812 28.03.2013 21:02

Товарищи! Работает!
Как световое перо работает и на Андроиде тоже!
Вот с таким дескриптором.
Данные отчета такие:
uint16_t flags; //чтобы не ошибится, позже расшифрую. здесь закодировано прикосновение и наличие пера в поле видимости
int16_t X; //от 0 до 32767 координата Х
int16_t Y; //от 0 до 32767 координата Y
int16_t Width; //Width of contact
int16_t Height; //Height of contact
int16_t Const; //должно быть нулем.

Я еще поэкспериментирую, вроде как последние три поля из дескриптора и, соответственно, отчета можно изъять.

В общем, скоро будет готов контроллер резистивного тача, совместимый с Андроид!

zyxel812 29.03.2013 20:43

Вот и результат: http://www.pccar.ru/showthread.php?t=18943
Отдельное спасибо VVi3ard, благодаря его ссылке на touch screen class device было сэкономлено уйма времени.

s.m. 29.03.2013 21:11

Цитата:

Сообщение от zyxel812 (Сообщение 253141)
Вот и результат: http://www.pccar.ru/showthread.php?t=18943
Отдельное спасибо VVi3ard, благодаря его ссылке на touch screen class device было сэкономлено уйма времени.

поздравляю!
если не будет секретом принцип работы калибровочной утилиты - могу написать такую под андроид - решение будет законченным (непонятно сейчас, как будет виден калибровочный порт под андроидом)

mas_u 29.03.2013 22:10

Вложений: 1
Цитата:

Сообщение от s.m. (Сообщение 253145)
если не будет секретом принцип работы калибровочной утилиты - могу написать такую под андроид - решение будет законченным (непонятно сейчас, как будет виден калибровочный порт под андроидом)

Описание алгоритма для калибровки. Минимальное кол-во точек для калибровки - 3.

zyxel812 29.03.2013 23:02

Цитата:

Сообщение от s.m. (Сообщение 253145)
если не будет секретом принцип работы калибровочной утилиты - могу написать такую под андроид - решение будет законченным (непонятно сейчас, как будет виден калибровочный порт под андроидом)

Отличная новость! Конечно не секрет.
В Андроиде устройство видится как /dev/ttyACM0 (точнее не само устройство, а виртуальный последовательный порт в его составе)

Протокол очень простой и примитивный:
Пакет:
word - 0xFFFF - сигнатура
byte - 0x01 - признак версии
byte - cmd - команда
тут могут быть данные, если того требует команда
byte - crc - контрольная сумма - xor всех предыдущих байт пакета

в ответ придут данные, если они предусмотрены командой и один байт - 0х00 - ошибок нет, 0хFF - что-то не так.

Команды следующие:
0х01 - получить номер версии. В ответ на эту команду придет только один байт - 0х01 без закрывающего нуля. Это команда для проверки того, что мы подключились к правильному устройству.

0х0A - Получить состояние. В ответ придут:
byte x - последнее измеренное значение по оси Х
byte y - последнее измеренное значение по оси Y
byte touched - 1 - в данный момент есть прикосновение, 0 - прикосновения нет
и закрывающий 0.

0x0B - Выключить мышь. Нужно подавать эту команду перед калибровкой. Устройство перестанет передавать прикосновения в компьютер. Данные можно будет получить только по последовательному порту. В ответ придет только один байт - 0х00

0х0С - Включить мышь. Выдавать после окончания калибровки. В ответ придет только один байт - 0х00

0х0D - Записать калибровочные данные:
int32 - kx
int32 - ky
byte - dx
byte - dy
word - xsize
word - ysize
не забываем про crc.
В ответ придет один байт - 0х00.

Общий порядок калибровки:
1) Выключаем мышь, командой 0х0В
2) Просим пользователя прикоснуться куда-нибудь в верхний левый угол, и в цикле считываем значения измерений x и y командой 0х0А. В зачет идут только те результаты, в которых флаг touch = 1. На основе нескольких десятков измерений, вычисляем средний x и y.
3) Повторяем процедуру для правого нижнего угла.
На основе полученных данных, вычисляем dx,dy,kx,ky. (xsize и ysize задуманы для передачи контроллеру размеров экрана, но на данный момент не используются.)
4) Записываем результаты в контроллер, командой 0х0D
5) Включаем мышь командой 0х0С.

Теперь о том, что такое dx, dy, kx, ky.
Устройство посылает в компьютер отчет, который содержит координаты X и Y в виде чисел от 0 до 32767. При этом, 0 соответствует самой левой части экрана (или самой верхней), 32767 - самой правой части экрана (или самой нижней). Нужно пересчитать значения от 0 до 255, полученные с АЦП в числа от 0 до 32767, передаваемые в компьютер.
Формула в контроллер заложена такая.
X = kx*(adc_x - dx)/65536
Y = ky*(adc_y - dy)/65536
где Х,Y - числа от 0 до 32767, передаваемые в компьютер
adc_x, adc_y - значения измерений, получаемых с АЦП.

Этой информации, как мне кажется, достаточно чтобы написать калибровочную утилиту. Если остались вопросы, спрашивай.

zyxel812 29.03.2013 23:09

Цитата:

Сообщение от mas_u (Сообщение 253152)
Описание алгоритма для калибровки. Минимальное кол-во точек для калибровки - 3.

Это так. Я указал, что проект не совсем закончен, но уже работоспособен. Я упростил калибровку сознательно, исходя из следующего: При таком низком разрешении измерений (8 бит) отклонение в параллельности сенсорной панели и экрана не заметно. Т.е., принимаем как константу, что сенсорная панель параллельна экрану. И, так как мы не собираемся компенсировать поворот сенсорной панели относительно экрана, достаточно двух точек калибровки.

VVi3ard 30.03.2013 17:18

Цитата:

Сообщение от zyxel812 (Сообщение 253141)
Вот и результат: http://www.pccar.ru/showthread.php?t=18943
Отдельное спасибо VVi3ard, благодаря его ссылке на touch screen class device было сэкономлено уйма времени.

Спасибо за упоминание моего ника :) Не уверен что я достоин но спасибо.

Не хотите написать свою статью на HABR? Я думаю вы в процессе разработки убедились что в рунете информации по данной теме нет, и ваша статья на хабре многим бы помогла. Плюс возможно там найдется 1-2 человека которые смогут помочь улучшить вашу разработку.

Ведь для многих CARPC шников вопрос подключения штатного тача весьма актуален.

macau 30.03.2013 20:37

а разве такой контроллер не работает в ондроеде?


Часовой пояс GMT +4, время: 08:55.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot