/* This project is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Multiprotocol is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Multiprotocol. If not, see . */ // Compatible with KF606 plane. #if defined(KF606_CCNRF_INO) #include "iface_xn297.h" //#define FORCE_KF606_ORIGINAL_ID //#define FORCE_MIG320_ORIGINAL_ID #define KF606_INITIAL_WAIT 500 #define KF606_PACKET_PERIOD 3000 #define KF606_RF_BIND_CHANNEL 7 #define KF606_PAYLOAD_SIZE 4 #define KF606_BIND_COUNT 857 //3sec #define KF606_RF_NUM_CHANNELS 2 static void __attribute__((unused)) KF606_send_packet() { if(IS_BIND_IN_PROGRESS) { packet[0] = 0xAA; memcpy(&packet[1],rx_tx_addr,3); } else { 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; packet[3] |= GET_FLAG(CH6_SW, 0xC0); // 0xC0 and 0xE0 are both turning the LED off, not sure if there is another hidden feature } } 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