xref: /OK3568_Linux_fs/kernel/Documentation/input/devices/walkera0701.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun===========================
2*4882a593SmuzhiyunWalkera WK-0701 transmitter
3*4882a593Smuzhiyun===========================
4*4882a593Smuzhiyun
5*4882a593SmuzhiyunWalkera WK-0701 transmitter is supplied with a ready to fly Walkera
6*4882a593Smuzhiyunhelicopters such as HM36, HM37, HM60. The walkera0701 module enables to use
7*4882a593Smuzhiyunthis transmitter as joystick
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunDevel homepage and download:
10*4882a593Smuzhiyunhttp://zub.fei.tuke.sk/walkera-wk0701/
11*4882a593Smuzhiyun
12*4882a593Smuzhiyunor use cogito:
13*4882a593Smuzhiyuncg-clone http://zub.fei.tuke.sk/GIT/walkera0701-joystick
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun
16*4882a593SmuzhiyunConnecting to PC
17*4882a593Smuzhiyun================
18*4882a593Smuzhiyun
19*4882a593SmuzhiyunAt back side of transmitter S-video connector can be found. Modulation
20*4882a593Smuzhiyunpulses from processor to HF part can be found at pin 2 of this connector,
21*4882a593Smuzhiyunpin 3 is GND. Between pin 3 and CPU 5k6 resistor can be found. To get
22*4882a593Smuzhiyunmodulation pulses to PC, signal pulses must be amplified.
23*4882a593Smuzhiyun
24*4882a593SmuzhiyunCable: (walkera TX to parport)
25*4882a593Smuzhiyun
26*4882a593SmuzhiyunWalkera WK-0701 TX S-VIDEO connector::
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun (back side of TX)
29*4882a593Smuzhiyun     __   __              S-video:                                  canon25
30*4882a593Smuzhiyun    /  |_|  \             pin 2 (signal)              NPN           parport
31*4882a593Smuzhiyun   / O 4 3 O \            pin 3 (GND)        LED        ________________  10 ACK
32*4882a593Smuzhiyun  ( O 2   1 O )                                         | C
33*4882a593Smuzhiyun   \   ___   /      2 ________________________|\|_____|/
34*4882a593Smuzhiyun    | [___] |                                 |/|   B |\
35*4882a593Smuzhiyun     -------        3 __________________________________|________________ 25 GND
36*4882a593Smuzhiyun                                                          E
37*4882a593Smuzhiyun
38*4882a593SmuzhiyunI use green LED and BC109 NPN transistor.
39*4882a593Smuzhiyun
40*4882a593SmuzhiyunSoftware
41*4882a593Smuzhiyun========
42*4882a593Smuzhiyun
43*4882a593SmuzhiyunBuild kernel with walkera0701 module. Module walkera0701 need exclusive
44*4882a593Smuzhiyunaccess to parport, modules like lp must be unloaded before loading
45*4882a593Smuzhiyunwalkera0701 module, check dmesg for error messages. Connect TX to PC by
46*4882a593Smuzhiyuncable and run jstest /dev/input/js0 to see values from TX. If no value can
47*4882a593Smuzhiyunbe changed by TX "joystick", check output from /proc/interrupts. Value for
48*4882a593Smuzhiyun(usually irq7) parport must increase if TX is on.
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun
52*4882a593SmuzhiyunTechnical details
53*4882a593Smuzhiyun=================
54*4882a593Smuzhiyun
55*4882a593SmuzhiyunDriver use interrupt from parport ACK input bit to measure pulse length
56*4882a593Smuzhiyunusing hrtimers.
57*4882a593Smuzhiyun
58*4882a593SmuzhiyunFrame format:
59*4882a593SmuzhiyunBased on walkera WK-0701 PCM Format description by Shaul Eizikovich.
60*4882a593Smuzhiyun(downloaded from http://www.smartpropoplus.com/Docs/Walkera_Wk-0701_PCM.pdf)
61*4882a593Smuzhiyun
62*4882a593SmuzhiyunSignal pulses
63*4882a593Smuzhiyun-------------
64*4882a593Smuzhiyun
65*4882a593Smuzhiyun::
66*4882a593Smuzhiyun
67*4882a593Smuzhiyun                     (ANALOG)
68*4882a593Smuzhiyun      SYNC      BIN   OCT
69*4882a593Smuzhiyun    +---------+      +------+
70*4882a593Smuzhiyun    |         |      |      |
71*4882a593Smuzhiyun  --+         +------+      +---
72*4882a593Smuzhiyun
73*4882a593SmuzhiyunFrame
74*4882a593Smuzhiyun-----
75*4882a593Smuzhiyun
76*4882a593Smuzhiyun::
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun SYNC , BIN1, OCT1, BIN2, OCT2 ... BIN24, OCT24, BIN25, next frame SYNC ..
79*4882a593Smuzhiyun
80*4882a593Smuzhiyunpulse length
81*4882a593Smuzhiyun------------
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun::
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun   Binary values:		Analog octal values:
86*4882a593Smuzhiyun
87*4882a593Smuzhiyun   288 uS Binary 0		318 uS       000
88*4882a593Smuzhiyun   438 uS Binary 1		398 uS       001
89*4882a593Smuzhiyun				478 uS       010
90*4882a593Smuzhiyun				558 uS       011
91*4882a593Smuzhiyun				638 uS       100
92*4882a593Smuzhiyun  1306 uS SYNC			718 uS       101
93*4882a593Smuzhiyun				798 uS       110
94*4882a593Smuzhiyun				878 uS       111
95*4882a593Smuzhiyun
96*4882a593Smuzhiyun24 bin+oct values + 1 bin value = 24*4+1 bits  = 97 bits
97*4882a593Smuzhiyun
98*4882a593Smuzhiyun(Warning, pulses on ACK are inverted by transistor, irq is raised up on sync
99*4882a593Smuzhiyunto bin change or octal value to bin change).
100*4882a593Smuzhiyun
101*4882a593SmuzhiyunBinary data representations
102*4882a593Smuzhiyun---------------------------
103*4882a593Smuzhiyun
104*4882a593SmuzhiyunOne binary and octal value can be grouped to nibble. 24 nibbles + one binary
105*4882a593Smuzhiyunvalues can be sampled between sync pulses.
106*4882a593Smuzhiyun
107*4882a593SmuzhiyunValues for first four channels (analog joystick values) can be found in
108*4882a593Smuzhiyunfirst 10 nibbles. Analog value is represented by one sign bit and 9 bit
109*4882a593Smuzhiyunabsolute binary value. (10 bits per channel). Next nibble is checksum for
110*4882a593Smuzhiyunfirst ten nibbles.
111*4882a593Smuzhiyun
112*4882a593SmuzhiyunNext nibbles 12 .. 21 represents four channels (not all channels can be
113*4882a593Smuzhiyundirectly controlled from TX). Binary representations are the same as in first
114*4882a593Smuzhiyunfour channels. In nibbles 22 and 23 is a special magic number. Nibble 24 is
115*4882a593Smuzhiyunchecksum for nibbles 12..23.
116*4882a593Smuzhiyun
117*4882a593SmuzhiyunAfter last octal value for nibble 24 and next sync pulse one additional
118*4882a593Smuzhiyunbinary value can be sampled. This bit and magic number is not used in
119*4882a593Smuzhiyunsoftware driver. Some details about this magic numbers can be found in
120*4882a593SmuzhiyunWalkera_Wk-0701_PCM.pdf.
121*4882a593Smuzhiyun
122*4882a593SmuzhiyunChecksum calculation
123*4882a593Smuzhiyun--------------------
124*4882a593Smuzhiyun
125*4882a593SmuzhiyunSummary of octal values in nibbles must be same as octal value in checksum
126*4882a593Smuzhiyunnibble (only first 3 bits are used). Binary value for checksum nibble is
127*4882a593Smuzhiyuncalculated by sum of binary values in checked nibbles + sum of octal values
128*4882a593Smuzhiyunin checked nibbles divided by 8. Only bit 0 of this sum is used.
129