| =========================== | |
| 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 | |
| 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 | |
| E | |
| I use green LED and BC109 NPN transistor. | |
| 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. | |
| 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) | |
| Signal pulses | |
| ------------- | |
| :: | |
| (ANALOG) | |
| SYNC BIN OCT | |
| +---------+ +------+ | |
| | | | | | |
| --+ +------+ +--- | |
| Frame | |
| ----- | |
| :: | |
| SYNC , BIN1, OCT1, BIN2, OCT2 ... BIN24, OCT24, BIN25, next frame SYNC .. | |
| 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). | |
| 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. | |
| 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. |