/* 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 . */ #if defined(KYOSHO_A7105_INO) #include "iface_a7105.h" //#define KYOSHO_FORCE_ID_FHSS //#define KYOSHO_FORCE_ID_HYPE //Kyosho constants & variables #define KYOSHO_BIND_COUNT 2500 static void __attribute__((unused)) kyosho_send_packet() { //ID packet[1] = rx_tx_addr[0]; packet[2] = rx_tx_addr[1]; packet[3] = rx_tx_addr[2]; packet[4] = rx_tx_addr[3]; //unknown may be RX ID on some other remotes memset(packet+5,0xFF,4); if(IS_BIND_IN_PROGRESS) { packet[ 0] = 0xBC; // bind indicator packet[ 9] &= 0x01; packet[ 9] ^= 0x01; // high/ low part of the RF table packet[10] = 0x00; //RF table for(uint8_t i=0; i<16;i++) packet[i+11]=hopping_frequency[i+(packet[9]<<4)]; //unknwon packet[27] = 0x05; packet[28] = 0x00; memset(packet+29,0xFF,8); //frequency hop during bind if(packet[9]) rf_ch_num=0x8C; else rf_ch_num=0x0D; } else { packet[ 0] = 0x58; // normal packet //14 channels: steering, throttle, ... for(uint8_t i = 0; i < 14; i++) { uint16_t temp=convert_channel_ppm(i); packet[9 + i*2]=temp&0xFF; // low byte of servo timing(1000-2000us) packet[10 + i*2]=(temp>>8)&0xFF; // high byte of servo timing(1000-2000us) } rf_ch_num=hopping_frequency[hopping_frequency_no]; hopping_frequency_no++; packet[34] |= (hopping_frequency_no&0x0F)<<4; packet[36] |= (hopping_frequency_no&0xF0); // last byte is ending with F on the dumps so let's see hopping_frequency_no &= 0x1F; } #if 0 debug("ch=%02X P=",rf_ch_num); for(uint8_t i=0; i<37; i++) debug("%02X ", packet[i]); debugln(""); #endif A7105_WriteData(37, rf_ch_num); } static void __attribute__((unused)) kyosho_hype_send_packet() { if(IS_BIND_IN_PROGRESS) { packet[0] = rx_tx_addr[1]; packet[1] = rx_tx_addr[3]; //RF table for(uint8_t i=0; i<15;i++) packet[i+2]=hopping_frequency[i]; rf_ch_num=0x01; packet_length=17; packet_period=1423; } else { //original TX is only refreshing the packet every 20ms and only do retransmit in between //6 channels: AETR for(uint8_t i=0; i<6;i++) packet[i] = convert_channel_8b(i); rf_ch_num=hopping_frequency[hopping_frequency_no]; hopping_frequency_no++; if(hopping_frequency_no>14) hopping_frequency_no = 0; packet_length=6; packet_period=909; //packet period fluctuates a lot... } #if 0 debug("ch=%02X P=",rf_ch_num); for(uint8_t i=0; i