Обратный инжиниринг последовательного протокола черного ящика - PullRequest
3 голосов
/ 01 августа 2010

В настоящее время я пишу драйвер OS X для NewTek LiveControl LC-11, как показано здесь.

newtek.com / addons / livecontrol.php

В ходе моего реверс-инжиниринга я обнаружил, что он использует преобразователь последовательного интерфейса в USB и взаимодействует с шестнадцатеричным выходом при нажатии кнопки или изменении аналогового значения. Используя этот выход, я смог подключить каждую кнопку, цифровую ручку и аналоговый ползунок, но в настоящее время застрял в интерпретации двух аналоговых джойстиков и управлении светодиодами подсветки. Вот таблица значений вывода джойстиков в разных положениях.

(Извините, что я не смог встроить изображение, но переполнение стека не позволит мне, так как я только что зарегистрировался.)

         Left   Center  Right  
Top     ^529DC  ^587FF  ^5D6DA  
Center  ^50883  ^58181  ^5F280  
Bottom  ^51E2F  ^57C00  ^5BC1F  

или

http://i28.tinypic.com/217vbr.png

Я думаю, что «^» - это своего рода маркер (некоторые другие кнопки имеют коды, начинающиеся с «~», а некоторые из событий выпуска вообще не имеют маркера, кроме «\ r» в сообщении раньше. Мне вообще не удавалось ничего интерпретировать в этих отметках, но я не думаю, что это обязательно важно.) и я знаю, что у каждого джойстика есть свой уникальный диапазон выходных значений. Если кто-нибудь сможет пролить свет на эту загадку, это будет с благодарностью. : D

Ответы [ 2 ]

2 голосов
/ 01 августа 2010

Интересная головоломка!

Первая (шестнадцатеричная) цифра всегда равна 5. Давайте проигнорируем эту цифру.(Может быть, это идентификатор джойстика?)

Второй и третий находятся в левом столбце (29, 08, 1E).Они в середине диапазона в средней колонке (87, 81, 7C).И они большие в правой колонке (D6, F2, BC).Так что это должна быть координата X.

Последние две цифры в верхнем ряду большие (DC, FF, DA).Последние два в среднем ряду находятся на полпути диапазона (83, 81, 80).Последние два в нижнем ряду низкие (2F, 00, 1F).Так что это явно координата Y.Судя по тому, как внешние два значения находятся далеко от крайностей, я предполагаю, что джойстик перемещается по кругу (в отличие от квадрата)?

Короче говоря, формат выглядит так:

^5xxyy

Здесь xx - это один байт (записанный в шестнадцатеричной записи), описывающий позицию X, слева 0, центр 80, а справа FF.Точно так же, yy - это позиция Y, нижняя часть равна 0, центр - 80, а верхняя часть - FF.

1 голос
/ 01 августа 2010

Похоже, пакет начинается с двух байтов: ^ 5, за которыми следуют четыре шестнадцатеричные цифры, представляющие два байта. Как это:

^5   left/right   up/down

Посмотрите на числа в изоляции:

По центру сверху и снизу:

left:    ^5   08(8)    dont_care
center:  ^5   81(129)  dont_care
right:   ^5   F2(242)  dont_care

По центру слева и справа:

top:     ^5 dont_care  FF(255)
center:  ^5 dont_care  81(129)
bottom:  ^5 dont_care  00(0)

Таким образом, это означает, что в идеале джойстики должны иметь значение 0 для крайнего левого или нижнего угла и значение 255 (0xFF) для крайнего верхнего или правого.

Конечно, физически джойстик выглядит смещенным вправо и вверх на один бит (129 вместо 128) и не может достичь максимальных значений для левой и правой (8 и 242 вместо 0 и 255).

...