Nedalo nám to a pokusili jsme sezjistit, jakým způsobem jednotka ET-312 komunikuje s připojeným PC. Zde jsou výsledky.
Propojovací kabel
Propojovací kabel je ideálně stíněný trojžilový, v nouzi a na kratší vzdálenosti ale vyhoví i stíněná dvojlinka. Jednotka komunikuje s PC po sériovém rozhraní s vlastním proprietárním komunikačním protokolem. Ze séroového rozhraní jsou využity vodiče RX, TX a GND. Zapojení kabelu (pro konektor DB-9) je následující:
Strana ET-312 (jack 3,5") ------ Strana PC (DB-9P)
kuželka ----------------------------------- pin 2
prstenec ---------------------------------- pin 3
tělo ----------------------------------------- pin 5
Komunikační rychlost je pevná 19 200 Bd, 8 datových bitů, 1 stopbit, bez parity a handshake.
Komunikační protokol je postaven na principu zpráva-odpověď, přičemž iniciátorem komunikace je připojené PC. Zprávy i odpovědi mají variabilní délku v závisalosti na typu přenášené informace.
Zprávy, odesílané jednotkou ET-312.
Jednotka odesílá dva typy zpráv. Prvním typem je jednobajtová zpráva o potvrzení (ACK, 0x06) či odmítnutí (NAK, 0x07) přenesené zprávy od PC. Druhým typem zprávy je trojbajtová zpráva, uvozená kódy 0x22 nebo 0x21, následovaná jednobajtovou hodnotou a kontrolním kódem (KK). Kontrolní kód je určen jako modulo 256 součet prvních dvou bajtů (sečteme a zahodíme případný devátý bit). Aby komunikace nebyla jednoduchá, obsahují některé zprávy dvojici hodnot, uložených v horním a spodním nibblu.
Zahájení komunikace.
Pro zahájení komunikace je žádoucí provést vypnutí jednotky, propojení s PC a její znovuzapnutí. Komunikaci zahajuje PC odesláním bajtu 0x00. Jednotka potvrzuje zahájení přenosu bajtem 0x07(ACK).
Synchronizace.
Synchronizace je dle všeho vývojáři jednotky založena do protokolu kvůli ztížení odposlouchání protokolu a zlepšení prodejnosti firemního software, praktický význam nemá. Synchronizační zprávy jsou trojbajtové a mají následující strukturu:
PC pro jednotku odesílá výzvu k synchronizaci ve tvaru 0x2F RX KK, kde RX je náhodně zvolená hodnota
Jednotka potvrzuje synchronizaci zprávou 0x21 RY KK, kde RY je náhodná hodnota, volená jednotkou
Po výměně synchronizační informací je spočítán klíčovací bajt MOD podle vzorce MOD = XR xor RY xor 0x55
Pozor na to, že první bajt má prohozený vrchní a spodní nibble ! Takto získaným klíčovacím bajtem musí být od okamžiku synchronizace xorován každý bajt, odesílaný z PC do jednotky. Komunikace směrem od jednotky do PC kódována není.
Čtení dat z jednotky.
PC odesílá jednotce požadavky na sdělení hodnoty jednotlivých parametrů ve čtyřbajtovém formátu 0x3c IK nn KK (každý bajt je xorován hodnotou bajtu MOD), kde IK je identifikace kanálu (kanál A má identifikaci 0x40, kanál B 0x41) a nn je identifikace příslušného parametru, jednotka odpovídá trojbajtovou zprávou ve tvaru (typicky) 0x22 XX KK, Při chybě v přenosu odpovídá jednotka jednobajtovou zprávou NAK (0x07). PC může jednotku požádat o následující hodnoty:
Parametr | Požadavek (musí být ještě xorován MOD) | Odpověď | Poznámka |
Doba zapnutí kanálu A | 3C 40 98 KK | 22 [00-FF] KK | |
Doba zapnutí kanálu B | 3C 41 98 KK | 22 [00-FF] KK | |
Doba vypnutí kanálu A | 3C 40 99 KK | 22 [00-FF] KK | |
Doba vypnutí kanálu B | 3C 41 99 KK | 22 [00-FF] KK | |
Nastavení intenzity A | 3C 40 A5 KK | 22 [80-FF] KK | |
Nastavení intenzity B | 3C 41 A5 KK | 22 [80-FF] KK | |
Nastavení spodní meze A | 3C 40 A6 KK | 22 [80-FF] KK | |
Nastavení spodní meze B | 3C 41 A6 KK | 22 [80-FF] KK | |
Nastavení horní meze A | 3C 40 A7 KK | 22 [80-FF] KK | |
Nastavení horní meze B | 3C 41 A7 KK | 22 [80-FF] KK | |
Šířka pulsu A | 3C 40 B7 KK | 22 [40-FF] KK | |
Šířka pulsu B | 3C 41 B7 KK | 22 [40-FF] KK | |
Spodní mez šířky pulsu A | 3C 40 B8 KK | 22 [40-FF] KK | |
Spodní mez šířky pulsu B | 3C 41 B8 KK | 22 [40-FF] KK | |
Horní mez šířky pulsu A | 3C 40 B9 KK | 22 [40-FF] KK | |
Horní mez šířky pulsu B | 3C 41 B9 KK | 22 [40-FF] KK | |
Časování kanálu A | 3C 40 9A KK | 22 FN KK | zde nibble F určuje způsob vypnutí 0=normal 2=tempo 4=MultiAdjust a nibble N způsob zapnutí 1=normal 5=efekt 9=MultiAdjust |
Časování kanálu B |
3C 41 9A KK | 22 FN KK | zde nibble F určuje způsob vypnutí 0=normal 2=tempo 4=MultiAdjust a nibble N způsob zapnutí 1=normal 5=efekt 9=MultiAdjust |
Frekvenční režim kanálu A | 3C 40 B5 KK | 22 RV KK | |
Frekvenční režim kanálu B | 3C 41 B5 KK | 22 RV KK | |
Režim řízení pulsu kanálu A | 3C 40 BE KK | 22 RV KK | zde nibble R určuje způsob cyklování (rate) 0=nic 2=pacet 4=MultiAdjust a nibble V určuje hodnotu (value) 1=nic 4=val/width 5=min/width |
Režim řízení pulsu kanálu B | 3C 41 BE KK | 22 RV KK | zde nibble R určuje způsob cyklování (rate) 0=nic 2=pacet 4=MultiAdjust a nibble V určuje hodnotu (value) 1=nic 4=val/width 5=min/width |
Režim řízení intenzity A |
3C 40 AC KK | 22 MR KK | zde nibbly M a R určují nastavený režim: M: 4=nic, 0=depth, R: 4=nic, 0=MA, 6=tempo |
Režim řízení intenzity B | 3C 41 AC KK | 22 MR KK | zde nibbly M a R určují nastavený režim: M: 4=nic, 0=depth, R: 5=nic, 1=MA, 7=tempo (ne, opravdu nevím, proč zde vývojáři použili nekonzistentní model) |
Dotaz na právě běžící mód | 3C 40 7B KK | 22 MM KK | zde 00=none 76=waves 77=stroke 78=climb 79=combo 7A=intense 7B=rhythm 7C=audio1 7D=audio2 7E=audio3 7F=split 80=random1 81=random2 82=toggle 83=orgasm 84=torment 85=phase1 86=phase2 87=phase3 88=user1 89=user2 8A=user3 8B=user4 8C=user5 |
Frekvence kanálu A | 3C 40 AE KK | 22 [08-FF] KK | zde vyšší hodnotě frekvence odpovídá nižší hodnota dat. Reálná frekvence je rovna f=255-data |
Frekvence kanálu B | 3C 41 AE KK | 22 [08-FF] KK | zde vyšší hodnotě frekvence odpovídá nižší hodnota dat. Reálná frekvence je rovna f=255-data |
Maximální frekvence kanálu A | 3C 40 AF KK | 22 [08-FF] KK | zde vyšší hodnotě frekvence odpovídá nižší hodnota dat. Reálná frekvence je rovna f=255-data |
Maximální frekvence kanálu B | 3C 41 AF KK | 22 [08-FF] KK | zde vyšší hodnotě frekvence odpovídá nižší hodnota dat. Reálná frekvence je rovna f=255-data |
Minimální frekvence kanálu A | 3C 40 B0 KK | 22 [08-FF] KK | zde vyšší hodnotě frekvence odpovídá nižší hodnota dat. Reálná frekvence je rovna f=255-data |
Minimální frekvence kanálu B | 3C 41 B0 KK | 22 [08-FF] KK | zde vyšší hodnotě frekvence odpovídá nižší hodnota dat. Reálná frekvence je rovna f=255-data |
Rychlost změny šířky pulsu A | 3C 40 BE KK | 22 [00-FF] KK | zde vyšší hodnotě odpovídá nižší rychlost změny |
Rychlost změny šířky pulsu B | 3C 41 BE KK | 22 [00-FF] KK | zde vyšší hodnotě odpovídá nižší rychlost změny |
Nastavení parametrů jednotky
Pro každý z výše uvedených parametrů (s výjimkou módu zařízení) lze realizovat programové nastavení. Příkaz pro nastavení má obecný tvar
0x4d IK IP xx KK
kde IK je identifikace kanálu, IP je identifikace parametru a xx je nově nastavovaná hodnota. Celá zpráva musí být bajt po bajtu xorována bajtem MOD. Jednotka v případě úspěšného provedení příkazu odpovídá bajtem 0x06 ACK, neúspěšný povel ohlásí bajtem 0x07 NAK.