Цитата:
Сообщение от s.m.
если не будет секретом принцип работы калибровочной утилиты - могу написать такую под андроид - решение будет законченным (непонятно сейчас, как будет виден калибровочный порт под андроидом)
|
Отличная новость! Конечно не секрет.
В Андроиде устройство видится как /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 - значения измерений, получаемых с АЦП.
Этой информации, как мне кажется, достаточно чтобы написать калибровочную утилиту. Если остались вопросы, спрашивай.