2010-08-01 7 views
3

J'écris actuellement un pilote OS X pour le NewTek LiveControl LC-11, comme illustré ici.Reverse engineering d'un protocole série Black-Box

newtek.com/addons/livecontrol.php

Au cours de mon ingénierie inverse, je l'ai trouvé qu'il utilise un convertisseur série pour USB et qu'il communique avec la sortie hexadécimale quand un bouton est poussé ou changements de valeur analogiques. En utilisant cette sortie, j'ai été capable d'interpetir chaque bouton, bouton numérique, et le curseur analogique, mais je suis actuellement bloqué sur l'interprétation des deux joysticks analogiques et le contrôle des LED de rétroéclairage. Voici un tableau des valeurs de sortie des manettes de jeu dans différentes positions.

(Désolé que je ne pouvais pas intégrer l'image, mais le débordement de pile ne me laisse pas depuis que je viens d'enregistrer.)

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

ou

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

Je pense que le '^'est une sorte de marqueur (certains des autres boutons ont des codes qui commencent par' ~ 'et certains des événements de release n'ont aucun marqueur autre qu'un' \ r 'du message précédent. aucun motif dans ces marques du tout, mais je ne pense pas que ce soit nécessaire ily important.) et je sais que chaque joystick a sa propre gamme unique de valeurs de sortie. Si quelqu'un peut faire la lumière sur ce mystère, ce serait grandement apprécié. : D

+1

Je sais que cette question est calme vieux. Mais je recherche un pilote OS X pour le NewTek LiveControl LC-11. L'avez-vous terminé et ça marche? –

Répondre

2

Un puzzle intéressant!

Le premier chiffre (hexa) est toujours 5. Ignorons celui-là. (Peut-être que c'est l'identificateur du joystick?)

Les deuxième et troisième sont bas dans la colonne de gauche (29, 08, 1E). Ils sont à mi-chemin dans la colonne du milieu (87, 81, 7C). Et ils sont grands dans la colonne de droite (D6, F2, BC). Donc, cela doit être la coordonnée X.

Les deux derniers chiffres de la rangée supérieure sont grands (DC, FF, DA). Les deux derniers dans la rangée du milieu sont à mi-chemin de la plage (83, 81, 80). Les deux derniers dans la rangée du bas sont bas (2F, 00, 1F). Donc, c'est clairement la coordonnée Y. A en juger par la façon dont les deux valeurs extérieures sont éloignées des extrêmes, je suppose que la manette de jeu se déplace dans un cercle (par opposition à un carré)?

Longue histoire courte, le format semble être:

^5xxyy 

Ici, xx est un octet (écrit en notation hexadécimale) décrivant la position X, avec la gauche étant 0, le centre étant 80 et le droit d'être FF . De même, yy est la position Y, le fond étant 0, le centre étant 80 et le sommet étant FF.

+0

Génial! Cela semble correct, je vais l'implémenter et le poster ici quand je le ferai fonctionner. Merci pour l'aide! : D – MadMod

+0

Grande réponse ... – Mark

+0

J'ai pu mettre en œuvre mon pilote personnalisé! Merci de votre aide! :RÉ – MadMod

1

Il semble que le paquet commence par deux octets:^5 suivi de quatre chiffres hexadécimaux représentant deux octets.Comme ceci:

^5 left/right up/down 

Regardez les chiffres dans l'isolement:

Centré haut et en bas:

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

Centré gauche et à droite:

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

Cela signifie donc que, idéalement, , les joysticks doivent avoir une valeur de 0 pour l'extrême gauche ou le bas et une valeur de 255 (0xFF) pour l'extrême haut ou r ight. Bien sûr, physiquement, le joystick semble être décalé vers la droite et vers le haut d'un bit (129 au lieu de 128) et ne peut pas atteindre les valeurs maximales pour gauche et droite (8 et 242 au lieu de 0 et 255).

Questions connexes