16. Walkera WK-0701 transmitter

Walkera WK-0701 transmitter is supplied with a ready to fly Walkera helicopters such as HM36, HM37, HM60. The walkera0701 module enables to use this transmitter as joystick

Devel homepage and download: http://zub.fei.tuke.sk/walkera-wk0701/

or use cogito: cg-clone http://zub.fei.tuke.sk/GIT/walkera0701-joystick

16.1. Connecting to PC

At back side of transmitter S-video connector can be found. Modulation pulses from processor to HF part can be found at pin 2 of this connector, pin 3 is GND. Between pin 3 and CPU 5k6 resistor can be found. To get modulation pulses to PC, signal pulses must be amplified.

Cable: (walkera TX to parport)

Walkera WK-0701 TX S-VIDEO connector:

(back side of TX)
    __   __              S-video:                                  canon25
   /  |_|  \             pin 2 (signal)              NPN           parport
  / O 4 3 O \            pin 3 (GND)        LED        ________________  10 ACK
 ( O 2   1 O )                                         | C
  \   ___   /      2 ________________________|\|_____|/
   | [___] |                                 |/|   B |\
    -------        3 __________________________________|________________ 25 GND

I use green LED and BC109 NPN transistor.

16.2. Software

Build kernel with walkera0701 module. Module walkera0701 need exclusive access to parport, modules like lp must be unloaded before loading walkera0701 module, check dmesg for error messages. Connect TX to PC by cable and run jstest /dev/input/js0 to see values from TX. If no value can be changed by TX “joystick”, check output from /proc/interrupts. Value for (usually irq7) parport must increase if TX is on.

16.3. Technical details

Driver use interrupt from parport ACK input bit to measure pulse length using hrtimers.

Frame format: Based on walkera WK-0701 PCM Format description by Shaul Eizikovich. (downloaded from http://www.smartpropoplus.com/Docs/Walkera_Wk-0701_PCM.pdf)

16.3.1. Signal pulses

    SYNC      BIN   OCT
  +---------+      +------+
  |         |      |      |
--+         +------+      +---

16.3.2. Frame

SYNC , BIN1, OCT1, BIN2, OCT2 ... BIN24, OCT24, BIN25, next frame SYNC ..

16.3.3. pulse length

 Binary values:               Analog octal values:

 288 uS Binary 0              318 uS       000
 438 uS Binary 1              398 uS       001
                              478 uS       010
                              558 uS       011
                              638 uS       100
1306 uS SYNC                  718 uS       101
                              798 uS       110
                              878 uS       111

24 bin+oct values + 1 bin value = 24*4+1 bits = 97 bits

(Warning, pulses on ACK are inverted by transistor, irq is raised up on sync to bin change or octal value to bin change).

16.3.4. Binary data representations

One binary and octal value can be grouped to nibble. 24 nibbles + one binary values can be sampled between sync pulses.

Values for first four channels (analog joystick values) can be found in first 10 nibbles. Analog value is represented by one sign bit and 9 bit absolute binary value. (10 bits per channel). Next nibble is checksum for first ten nibbles.

Next nibbles 12 .. 21 represents four channels (not all channels can be directly controlled from TX). Binary representations are the same as in first four channels. In nibbles 22 and 23 is a special magic number. Nibble 24 is checksum for nibbles 12..23.

After last octal value for nibble 24 and next sync pulse one additional binary value can be sampled. This bit and magic number is not used in software driver. Some details about this magic numbers can be found in Walkera_Wk-0701_PCM.pdf.

16.3.5. Checksum calculation

Summary of octal values in nibbles must be same as octal value in checksum nibble (only first 3 bits are used). Binary value for checksum nibble is calculated by sum of binary values in checked nibbles + sum of octal values in checked nibbles divided by 8. Only bit 0 of this sum is used.