From 51a01d139349d52eadd2291538380fb717f4ce1e Mon Sep 17 00:00:00 2001 From: pascallanger Date: Tue, 14 Jul 2026 18:42:14 +0200 Subject: [PATCH] KF606 LED Add LED channel for KF606 boards --- Lua_scripts/MultiChan.txt | 2 +- Multiprotocol/KF606_ccnrf.ino | 37 ++++++++++++----------------------- Protocols_Details.md | 21 ++++++++++++++------ 3 files changed, 28 insertions(+), 32 deletions(-) diff --git a/Lua_scripts/MultiChan.txt b/Lua_scripts/MultiChan.txt index bab4fae0..0134266b 100644 --- a/Lua_scripts/MultiChan.txt +++ b/Lua_scripts/MultiChan.txt @@ -119,7 +119,7 @@ 22,0,J6Pro,Std,0,CH5,CH6,CH7,CH8,CH9,CH10,CH11,CH12 71,0,JJRC345,JJRC345,1,Flip,HLess,RTH,LED,UNK1,UNK2,UNK3 71,1,JJRC345,SkyTmblr,1,Flip,HLess,RTH,LED,UNK1,UNK2,UNK3 -49,0,KF606,KF606,1,Trim +49,0,KF606,KF606,1,Trim,LED 49,1,KF606,MIG320,1,Trim,LED 49,2,KF606,ZCZ50,1,Trim,UNK 9,0,KN,WLToys,0,DRate,THold,IdleUp,Gyro,Ttrim,Atrim,Etrim,Rtrim,Hover diff --git a/Multiprotocol/KF606_ccnrf.ino b/Multiprotocol/KF606_ccnrf.ino index 516451a5..26e89c46 100644 --- a/Multiprotocol/KF606_ccnrf.ino +++ b/Multiprotocol/KF606_ccnrf.ino @@ -48,32 +48,19 @@ static void __attribute__((unused)) KF606_send_packet() hopping_frequency_no ^= 1; // 2 RF channels packet[0] = 0x55; - packet[1] = convert_channel_8b(THROTTLE); // 0..255 + if(sub_protocol == KF606_ZCZ50) len--; + packet[len-3] = convert_channel_8b(THROTTLE); // 0..255 // Deadband is needed on aileron, 40 gives +-6% - switch(sub_protocol) - { - case KF606_KF606: - packet[2] = convert_channel_8b_limit_deadband(AILERON,0x20,0x80,0xE0,40); // Aileron: Max values:20..80..E0, Low rates:50..80..AF, High rates:3E..80..C1 - packet[3] = convert_channel_16b_limit(CH5,0xC1,0xDF); // Aileron trim must be on a separated channel C1..D0..DF - break; - case KF606_MIG320: - packet[2] = convert_channel_8b_limit_deadband(AILERON,0x00,0x80,0xFF,40); // Aileron: High rate:2B..80..DA - packet[3] = convert_channel_16b_limit(CH5,0x01,0x1F); // Aileron trim must be on a separated channel 01..10..1F - packet[3] += (packet[2]-0x80)>>3; // Drive trims for more aileron authority - if(packet[3] > 0x80) - packet[3] = 0x01; - else if(packet[3] > 0x1F) - packet[3] = 0x1F; - packet[3] |= GET_FLAG(CH6_SW, 0xC0); // 0xC0 and 0xE0 are both turning the LED off, not sure if there is another hidden feature - break; - case KF606_ZCZ50: - len--; // uses only 3 bytes of payload - packet[0] = packet[1]; // Throttle: 0x00..0xFF - packet[1] = convert_channel_8b_limit_deadband(AILERON,0x20,0x80,0xE0,40); // Aileron: Max values:20..80..E0, low rate 0x52..0x80..0xB1, high rate: 0x41..0x80..0xC3. - packet[2] = convert_channel_16b_limit(CH5,0x01,0x1F); // Trim: 0x01..0x10..0x1F - packet[2] |= GET_FLAG(CH6_SW, 0xC0); // Unknown: 0x00 or 0xC0. Left top switch on original TX changes nothing on my plane. Maybe ON/OFF for main motor? - break; - } + packet[len-2] = convert_channel_8b_limit_deadband(AILERON,0x00,0x80,0xFF,40); // Aileron: High rate:2B..80..DA + uint8_t p3; + p3 = convert_channel_8b(CH5)>>3; // Aileron trim must be on a separated channel 01..10..1F + p3 += (packet[2]-0x80)>>3; // Drive trims for more aileron authority + if(p3 > 0x80) + p3 = 0x01; + else if(p3 > 0x1F) + p3 = 0x1F; + p3 |= GET_FLAG(CH6_SW, 0xC0); // 0xC0 and 0xE0 are both turning the LED off, not sure if there is another hidden feature + packet[len-1] = p3; } if(sub_protocol == KF606_MIG320) diff --git a/Protocols_Details.md b/Protocols_Details.md index 3248ff55..41befea3 100644 --- a/Protocols_Details.md +++ b/Protocols_Details.md @@ -99,7 +99,7 @@ CFlie|AIR|38|CFlie||||||||NRF24L01| [FrskyX2](Protocols_Details.md#FRSKYX2---64)||64|CH_16|CH_8|EU_16|EU_8|Cloned|Cloned_8|||CC2500| [Frsky_RX](Protocols_Details.md#FRSKY_RX---55)||55|Multi|CloneTX|EraseTX|CPPM|||||CC2500| [Futaba/SFHSS](Protocols_Details.md#Futaba---21)||21|SFHSS||||||||CC2500| -[FX](Protocols_Details.md#FX---58)||28|816|620|9630|Q560|QF012||||NRF24L01| +[FX](Protocols_Details.md#FX---58)||28|FX816|FX620|9630|Q560|QF012|FX818|||NRF24L01| [FY326](Protocols_Details.md#FY326---20)||20|FY326|FY319|||||||NRF24L01| [GD00X](Protocols_Details.md#GD00X---47)||47|GD_V1*|GD_V2*|||||||NRF24L01|XN297L [GW008](Protocols_Details.md#GW008---32)||32|||||||||NRF24L01|XN297 @@ -1144,9 +1144,9 @@ New generation of GD models ### Sub_protocol KF606 - *0* Model: KF606 -CH1|CH2|CH3|CH4|CH5 ----|---|---|---|--- -A||T||TRIM +CH1|CH2|CH3|CH4|CH5|CH6 +---|---|---|---|---|--- +A||T||TRIM|LED ### Sub_protocol MIG320 - *1* Model: Zhiyang MIG-320 @@ -1839,7 +1839,7 @@ FMODE and AUX7 have 4 positions: -100%..-50%=>0, -50%..5%=>1, 5%..50%=>2, 50%..1 ## FX - *58* FEI XIONG -### Sub_protocol 816 - *0* +### Sub_protocol FX816 - *0* Model: FX816 P38, B17 Only 8 TX IDs available @@ -1848,7 +1848,7 @@ CH1|CH2|CH3|CH4 ---|---|---|--- A|-|T|- -### Sub_protocol 620 - *1* +### Sub_protocol FX620 - *1* Model: FX620 SU35 CH1|CH2|CH3|CH4 @@ -1890,6 +1890,15 @@ Gyro: -100%=6G, 0%=3D+Gyro, +100%=3D Reset: Restore fine tunning midpoint +### Sub_protocol FX818 - *5* +Model: FX818/FX820/FX822/FX823 + +Telemetry supported. The plane sends a battery status of good->empty which is visible in A1 (good=4.2V->empty=3.1V) and RSSI gets a dummy value of 100. + +CH1|CH2|CH3|CH4 +---|---|---|--- +A|-|T|- + ## FY326 - *20* ### Sub_protocol FY326 - *0*