mirror of https://gitee.com/openkylin/linux.git
110 lines
3.8 KiB
Plaintext
110 lines
3.8 KiB
Plaintext
|
|
||
|
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 ar inverted by transistor, irq is rised 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 ar 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.
|
||
|
|