diff --git a/Lua_scripts/MultiChan.txt b/Lua_scripts/MultiChan.txt index 69c704e..12c5a62 100644 --- a/Lua_scripts/MultiChan.txt +++ b/Lua_scripts/MultiChan.txt @@ -112,7 +112,8 @@ 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,Std,1,Trim +49,0,KF606,KF606,1,Trim +49,1,KF606,MIG320,1,Trim 9,0,KN,WLToys,0,DRate,THold,IdleUp,Gyro,Ttrim,Atrim,Etrim 9,1,KN,Feilun,0,DRate,THold,IdleUp,Gyro,Ttrim,Atrim,Etrim 73,0,Kyosho,Std,0,CH5,CH6,CH7,CH8,CH9,CH10,CH11,CH12,CH13,CH14 diff --git a/Multiprotocol/KF606_ccnrf.ino b/Multiprotocol/KF606_ccnrf.ino index d92c81a..88b746c 100644 --- a/Multiprotocol/KF606_ccnrf.ino +++ b/Multiprotocol/KF606_ccnrf.ino @@ -19,6 +19,7 @@ Multiprotocol is distributed in the hope that it will be useful, #include "iface_xn297.h" //#define FORCE_KF606_ORIGINAL_ID +//#define FORCE_MIG320_ORIGINAL_ID #define KF606_INITIAL_WAIT 500 #define KF606_PACKET_PERIOD 3000 @@ -35,25 +36,48 @@ static void __attribute__((unused)) KF606_send_packet() memcpy(&packet[1],rx_tx_addr,3); } else - { - packet[0]= 0x55; - packet[1]= convert_channel_8b(THROTTLE); // 0..255 - // Deadband is needed on aileron, 40 gives +-6% - 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 - // Aileron trim must be on a separated channel C1..D0..DF - packet[3]= convert_channel_16b_limit(CH5,0xC1,0xDF); - } - if(IS_BIND_DONE) { XN297_Hopping(hopping_frequency_no); hopping_frequency_no ^= 1; // 2 RF channels + + packet[0] = 0x55; + packet[1] = convert_channel_8b(THROTTLE); // 0..255 + // Deadband is needed on aileron, 40 gives +-6% + if(sub_protocol == 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 + } + else + { + 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; + } } + uint8_t len = KF606_PAYLOAD_SIZE; + if(sub_protocol == KF606_MIG320) + { + len++; + packet[4] = 0; // additional channel? + } + + #if 0 + for(uint8_t i=0; i