From 3b8b2ef3768ff47e2835ae066512102ad2691709 Mon Sep 17 00:00:00 2001 From: Pascal Langer Date: Tue, 9 Feb 2021 18:23:33 +0100 Subject: [PATCH] Protocol init function modified --- Multiprotocol/AFHDS2A_Rx_a7105.ino | 32 +- Multiprotocol/AFHDS2A_a7105.ino | 5 +- Multiprotocol/ASSAN_nrf24l01.ino | 7 +- Multiprotocol/BUGSMINI_nrf24l01.ino | 7 +- Multiprotocol/Bayang_Rx_nrf24l01.ino | 11 +- Multiprotocol/Bayang_nrf24l01.ino | 7 +- Multiprotocol/Bugs_a7105.ino | 6 +- Multiprotocol/CABELL_nrf224l01.ino | 10 +- Multiprotocol/CFlie_nrf24l01.ino | 19 +- Multiprotocol/CG023_nrf24l01.ino | 7 +- Multiprotocol/CX10_nrf24l01.ino | 11 +- Multiprotocol/Corona_cc2500.ino | 9 +- Multiprotocol/DM002_nrf24l01.ino | 7 +- Multiprotocol/DSM_cyrf6936.ino | 5 +- Multiprotocol/Devo_cyrf6936.ino | 20 +- Multiprotocol/E010R5_cyrf6936.ino | 6 +- Multiprotocol/E016HV2_cc2500.ino | 3 +- Multiprotocol/E01X_nrf24l01.ino | 7 +- Multiprotocol/E129_cyrf6936.ino | 5 +- Multiprotocol/ESky150_nrf24l01.ino | 7 +- Multiprotocol/ESky150v2_cc2500.ino | 3 +- Multiprotocol/ESky_nrf24l01.ino | 11 +- Multiprotocol/FQ777_nrf24l01.ino | 7 +- Multiprotocol/FX816_nrf24l01.ino | 7 +- Multiprotocol/FY326_nrf24l01.ino | 7 +- Multiprotocol/FlySky_a7105.ino | 21 +- Multiprotocol/FrSkyDVX_common.ino | 2 +- Multiprotocol/FrSkyD_cc2500.ino | 27 +- Multiprotocol/FrSkyL_cc2500.ino | 7 +- Multiprotocol/FrSkyR9_sx1276.ino | 5 +- Multiprotocol/FrSkyV_cc2500.ino | 5 +- Multiprotocol/FrSkyX_cc2500.ino | 7 +- Multiprotocol/FrSky_Rx_cc2500.ino | 190 ++++---- Multiprotocol/Futaba_cc2500.ino | 5 +- Multiprotocol/GD00X_nrf24l01.ino | 7 +- Multiprotocol/GW008_nrf24l01.ino | 7 +- Multiprotocol/H8_3D_nrf24l01.ino | 7 +- Multiprotocol/HOTT_cc2500.ino | 11 +- Multiprotocol/Height_a7105.ino | 5 +- Multiprotocol/Hisky_nrf24l01.ino | 25 +- Multiprotocol/Hitec_cc2500.ino | 5 +- Multiprotocol/Hontai_nrf24l01.ino | 7 +- Multiprotocol/Hubsan_a7105.ino | 5 +- Multiprotocol/J6Pro_cyrf6936.ino | 5 +- Multiprotocol/JJRC345_nrf24l01.ino | 7 +- Multiprotocol/KF606_nrf24l01.ino | 7 +- Multiprotocol/KN_nrf24l01.ino | 10 +- Multiprotocol/Kyosho_a7105.ino | 13 +- Multiprotocol/LOLI_nrf24l01.ino | 8 +- Multiprotocol/MJXQ_nrf24l01.ino | 7 +- Multiprotocol/MLINK_cyrf6936.ino | 6 +- Multiprotocol/MT99xx_nrf24l01.ino | 7 +- Multiprotocol/Multi_Names.ino | 429 ---------------- Multiprotocol/Multi_Protos.ino | 426 ++++++++++++++++ Multiprotocol/Multiprotocol.h | 36 +- Multiprotocol/Multiprotocol.ino | 699 +++------------------------ Multiprotocol/NCC1701_nrf24l01.ino | 7 +- Multiprotocol/NanoRF_nrf24l01.ino | 7 +- Multiprotocol/OMP_cc2500.ino | 7 +- Multiprotocol/POTENSIC_nrf24l01.ino | 7 +- Multiprotocol/Pelikan_a7105.ino | 5 +- Multiprotocol/Propel_nrf24l01.ino | 7 +- Multiprotocol/Q303_nrf24l01.ino | 7 +- Multiprotocol/Q90C_nrf24l01.ino | 7 +- Multiprotocol/REALACC_nrf24l01.ino | 7 +- Multiprotocol/RadioLink_cc2500.ino | 7 +- Multiprotocol/Redpine_cc2500.ino | 13 +- Multiprotocol/SHENQI_nrf24l01.ino | 7 +- Multiprotocol/SLT_nrf24l01.ino | 7 +- Multiprotocol/Scanner_cc2500.ino | 5 +- Multiprotocol/Skyartec_cc2500.ino | 5 +- Multiprotocol/Symax_nrf24l01.ino | 9 +- Multiprotocol/TEST_cc2500.ino | 3 +- Multiprotocol/TRAXXAS_cyrf6936.ino | 7 +- Multiprotocol/Telemetry.ino | 15 +- Multiprotocol/Tiger_nrf24l01.ino | 7 +- Multiprotocol/V2X2_nrf24l01.ino | 9 +- Multiprotocol/V761_nrf24l01.ino | 7 +- Multiprotocol/V911S_xn297l.ino | 7 +- Multiprotocol/Validate.h | 10 +- Multiprotocol/WFLY2_a7105.ino | 5 +- Multiprotocol/WFLY_cyrf6936.ino | 5 +- Multiprotocol/WK2x01_cyrf6936.ino | 21 +- Multiprotocol/XK_nrf24l01.ino | 7 +- Multiprotocol/XN297Dump_nrf24l01.ino | 11 +- Multiprotocol/YD717_nrf24l01.ino | 40 +- Multiprotocol/ZSX_nrf24l01.ino | 7 +- 87 files changed, 944 insertions(+), 1565 deletions(-) delete mode 100644 Multiprotocol/Multi_Names.ino create mode 100644 Multiprotocol/Multi_Protos.ino diff --git a/Multiprotocol/AFHDS2A_Rx_a7105.ino b/Multiprotocol/AFHDS2A_Rx_a7105.ino index 37f187a..108942c 100644 --- a/Multiprotocol/AFHDS2A_Rx_a7105.ino +++ b/Multiprotocol/AFHDS2A_Rx_a7105.ino @@ -28,7 +28,7 @@ enum { AFHDS2A_RX_DATA }; -static void __attribute__((unused)) AFHDS2A_Rx_build_telemetry_packet() +static void __attribute__((unused)) AFHDS2A_RX_build_telemetry_packet() { uint32_t bits = 0; uint8_t bitsavailable = 0; @@ -56,13 +56,13 @@ static void __attribute__((unused)) AFHDS2A_Rx_build_telemetry_packet() } } -static uint8_t __attribute__((unused)) AFHDS2A_Rx_data_ready() +static uint8_t __attribute__((unused)) AFHDS2A_RX_data_ready() { // check if FECF+CRCF Ok return !(A7105_ReadReg(A7105_00_MODE) & (1 << 5 | 1 << 6 | 1 << 0)); } -uint16_t initAFHDS2A_Rx() +void AFHDS2A_RX_init() { uint8_t i; A7105_Init(); @@ -84,12 +84,11 @@ uint16_t initAFHDS2A_Rx() hopping_frequency[i] = eeprom_read_byte((EE_ADDR)temp++); phase = AFHDS2A_RX_DATA; } - return 1000; } #define AFHDS2A_RX_WAIT_WRITE 0x80 -uint16_t AFHDS2A_Rx_callback() +uint16_t AFHDS2A_RX_callback() { static int8_t read_retry; int16_t temp; @@ -105,9 +104,13 @@ uint16_t AFHDS2A_Rx_callback() switch(phase) { case AFHDS2A_RX_BIND1: - if(IS_BIND_DONE) return initAFHDS2A_Rx(); // Abort bind + if(IS_BIND_DONE) + { + AFHDS2A_RX_init(); // Abort bind + break; + } debugln("bind p=%d", phase+1); - if (AFHDS2A_Rx_data_ready()) { + if (AFHDS2A_RX_data_ready()) { A7105_ReadData(AFHDS2A_RX_TXPACKET_SIZE); if ((packet[0] == 0xbb && packet[9] == 0x01) || (packet[0] == 0xbc && packet[9] <= 0x02)) { memcpy(rx_id, &packet[1], 4); // TX id actually @@ -121,9 +124,13 @@ uint16_t AFHDS2A_Rx_callback() return 10000; case AFHDS2A_RX_BIND2: - if(IS_BIND_DONE) return initAFHDS2A_Rx(); // Abort bind + if(IS_BIND_DONE) + { + AFHDS2A_RX_init(); // Abort bind + break; + } // got 2nd bind packet from tx ? - if (AFHDS2A_Rx_data_ready()) { + if (AFHDS2A_RX_data_ready()) { A7105_ReadData(AFHDS2A_RX_TXPACKET_SIZE); if ((packet[0] == 0xBC && packet[9] == 0x02 && packet[10] == 0x00) && (memcmp(rx_id, &packet[1], 4) == 0) && @@ -156,7 +163,8 @@ uint16_t AFHDS2A_Rx_callback() { debugln("done"); BIND_DONE; - return initAFHDS2A_Rx(); // Restart protocol + AFHDS2A_RX_init(); // Restart protocol + break; } phase |= AFHDS2A_RX_WAIT_WRITE; return 1700; @@ -173,13 +181,13 @@ uint16_t AFHDS2A_Rx_callback() return 10000; case AFHDS2A_RX_DATA: - if (AFHDS2A_Rx_data_ready()) { + if (AFHDS2A_RX_data_ready()) { A7105_ReadData(AFHDS2A_RX_TXPACKET_SIZE); if (memcmp(&packet[1], rx_id, 4) == 0 && memcmp(&packet[5], rx_tx_addr, 4) == 0) { if (packet[0] == 0x58 && packet[37] == 0x00 && telemetry_link == 0) { // standard packet, send channels to TX int rssi = min(A7105_ReadReg(A7105_1D_RSSI_THOLD),160); RX_RSSI = map16b(rssi, 160, 8, 0, 128); - AFHDS2A_Rx_build_telemetry_packet(); + AFHDS2A_RX_build_telemetry_packet(); telemetry_link = 1; } rx_data_started = true; diff --git a/Multiprotocol/AFHDS2A_a7105.ino b/Multiprotocol/AFHDS2A_a7105.ino index 4f534e6..e8dbc7c 100644 --- a/Multiprotocol/AFHDS2A_a7105.ino +++ b/Multiprotocol/AFHDS2A_a7105.ino @@ -277,7 +277,7 @@ static void AFHDS2A_build_packet(uint8_t type) #define AFHDS2A_WRITE_TIME 1700 #endif -uint16_t ReadAFHDS2A() +uint16_t AFHDS2A_callback() { static uint8_t packet_type; static uint16_t packet_counter; @@ -420,7 +420,7 @@ uint16_t ReadAFHDS2A() return 3850; // never reached, please the compiler } -uint16_t initAFHDS2A() +void AFHDS2A_init() { A7105_Init(); @@ -446,6 +446,5 @@ uint16_t initAFHDS2A() num_ch=17; else num_ch=14; - return 50000; } #endif diff --git a/Multiprotocol/ASSAN_nrf24l01.ino b/Multiprotocol/ASSAN_nrf24l01.ino index cd02334..ead96ea 100644 --- a/Multiprotocol/ASSAN_nrf24l01.ino +++ b/Multiprotocol/ASSAN_nrf24l01.ino @@ -33,7 +33,7 @@ enum { ASSAN_DATA5 }; -void ASSAN_init() +void ASSAN_RF_init() { NRF24L01_Initialize(); NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, 0x02); // 4 bytes rx/tx address @@ -169,17 +169,16 @@ static void __attribute__((unused)) ASSAN_initialize_txid() hopping_frequency[1]=freq2; } -uint16_t initASSAN() +void ASSAN_init() { ASSAN_initialize_txid(); - ASSAN_init(); + ASSAN_RF_init(); hopping_frequency_no = 0; if(IS_BIND_IN_PROGRESS) phase=ASSAN_BIND0; else phase=ASSAN_DATA0; - return 1000; } #endif \ No newline at end of file diff --git a/Multiprotocol/BUGSMINI_nrf24l01.ino b/Multiprotocol/BUGSMINI_nrf24l01.ino index a8ba47a..8b30d51 100644 --- a/Multiprotocol/BUGSMINI_nrf24l01.ino +++ b/Multiprotocol/BUGSMINI_nrf24l01.ino @@ -57,7 +57,7 @@ enum { #define BUGSMINI_FLAG_ANGLE 0x02 // angle/acro mode (set is angle mode) #define BUGSMINI_FLAG_ALTHOLD 0x04 // angle/altitude hold mode (set is altitude mode) -static void __attribute__((unused)) BUGSMINI_init() +static void __attribute__((unused)) BUGSMINI_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -357,11 +357,11 @@ static void __attribute__((unused)) BUGSMINI_initialize_txid() BUGSMINI_txhash = pgm_read_byte_near( &BUGSMINI_tx_hash[rx_tx_addr[3]%BUGSMINI_NUM_TX_RF_MAPS] ); } -uint16_t initBUGSMINI() +void BUGSMINI_init() { BUGSMINI_initialize_txid(); memset(packet, (uint8_t)0, BUGSMINI_TX_PAYLOAD_SIZE); - BUGSMINI_init(); + BUGSMINI_RF_init(); if(IS_BIND_IN_PROGRESS) { XN297_SetTXAddr((const uint8_t*)"mjxRC", 5); @@ -378,7 +378,6 @@ uint16_t initBUGSMINI() armed = 0; arm_flags = BUGSMINI_FLAG_DISARM; // initial value from captures arm_channel_previous = BUGSMINI_CH_SW_ARM; - return BUGSMINI_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/Bayang_Rx_nrf24l01.ino b/Multiprotocol/Bayang_Rx_nrf24l01.ino index d85230f..d285820 100644 --- a/Multiprotocol/Bayang_Rx_nrf24l01.ino +++ b/Multiprotocol/Bayang_Rx_nrf24l01.ino @@ -98,7 +98,7 @@ static void __attribute__((unused)) Bayang_Rx_build_telemetry_packet() } } -uint16_t initBayang_Rx() +void BAYANG_RX_init() { uint8_t i; Bayang_Rx_init_nrf24l01(); @@ -119,17 +119,20 @@ uint16_t initBayang_Rx() XN297_SetRXAddr(rx_tx_addr, BAYANG_RX_ADDRESS_LENGTH); phase = BAYANG_RX_DATA; } - return 1000; } -uint16_t Bayang_Rx_callback() +uint16_t BAYANG_RX_callback() { uint8_t i; static int8_t read_retry; switch (phase) { case BAYANG_RX_BIND: - if(IS_BIND_DONE) return initBayang_Rx(); // Abort bind + if(IS_BIND_DONE) + { + BAYANG_RX_init(); // Abort bind + break; + } if (NRF24L01_ReadReg(NRF24L01_07_STATUS) & _BV(NRF24L01_07_RX_DR)) { // data received from TX if (XN297_ReadPayload(packet, BAYANG_RX_PACKET_SIZE) && ( packet[0] == 0xA4 || packet[0] == 0xA2 ) && Bayang_Rx_check_validity()) { diff --git a/Multiprotocol/Bayang_nrf24l01.ino b/Multiprotocol/Bayang_nrf24l01.ino index 6519ab9..2d7ad6e 100644 --- a/Multiprotocol/Bayang_nrf24l01.ino +++ b/Multiprotocol/Bayang_nrf24l01.ino @@ -246,7 +246,7 @@ static void __attribute__((unused)) BAYANG_check_rx(void) } #endif -static void __attribute__((unused)) BAYANG_init() +static void __attribute__((unused)) BAYANG_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -363,15 +363,14 @@ static void __attribute__((unused)) BAYANG_initialize_txid() hopping_frequency_no=0; } -uint16_t initBAYANG(void) +void BAYANG_init(void) { BIND_IN_PROGRESS; // autobind protocol phase=BAYANG_BIND; bind_counter = BAYANG_BIND_COUNT; BAYANG_initialize_txid(); - BAYANG_init(); + BAYANG_RF_init(); packet_count=0; - return BAYANG_INITIAL_WAIT+BAYANG_PACKET_PERIOD; } #endif diff --git a/Multiprotocol/Bugs_a7105.ino b/Multiprotocol/Bugs_a7105.ino index 8ec45ef..d77829a 100644 --- a/Multiprotocol/Bugs_a7105.ino +++ b/Multiprotocol/Bugs_a7105.ino @@ -315,7 +315,7 @@ static void __attribute__((unused)) BUGS_increment_counts() // FIFO config is one less than desired value #define BUGS_FIFO_SIZE_RX 15 #define BUGS_FIFO_SIZE_TX 21 -uint16_t ReadBUGS(void) +uint16_t BUGS_callback(void) { uint8_t mode, base_adr; uint16_t rxid; @@ -437,7 +437,7 @@ uint16_t ReadBUGS(void) return packet_period; } -uint16_t initBUGS(void) +void BUGS_init(void) { uint16_t rxid=0; uint8_t base_adr=BUGS_EEPROM_OFFSET+(RX_num&0x0F)*2; @@ -459,8 +459,6 @@ uint16_t initBUGS(void) armed = 0; arm_flags = BUGS_FLAG_DISARM; // initial value from captures arm_channel_previous = BUGS_CH_SW_ARM; - - return 10000; } #endif diff --git a/Multiprotocol/CABELL_nrf224l01.ino b/Multiprotocol/CABELL_nrf224l01.ino index 3f9c927..5087664 100644 --- a/Multiprotocol/CABELL_nrf224l01.ino +++ b/Multiprotocol/CABELL_nrf224l01.ino @@ -356,7 +356,7 @@ static void __attribute__((unused)) CABELL_setAddress() } //----------------------------------------------------------------------------------------- -static void __attribute__((unused)) CABELL_init() +static void __attribute__((unused)) CABELL_RF_init() { NRF24L01_Initialize(); CABELL_SetPower(); @@ -414,7 +414,7 @@ uint16_t CABELL_callback() else if (bind_counter == 0) { BIND_DONE; - CABELL_init(); // non-bind address + CABELL_RF_init(); // non-bind address } else { @@ -425,17 +425,15 @@ uint16_t CABELL_callback() } //----------------------------------------------------------------------------------------- -uint16_t initCABELL(void) +void CABELL_init(void) { if (IS_BIND_DONE) bind_counter = 0; else bind_counter = CABELL_BIND_COUNT; - CABELL_init(); + CABELL_RF_init(); packet_period = CABELL_PACKET_PERIOD; - - return packet_period; } #endif \ No newline at end of file diff --git a/Multiprotocol/CFlie_nrf24l01.ino b/Multiprotocol/CFlie_nrf24l01.ino index 4978be8..a07dd10 100644 --- a/Multiprotocol/CFlie_nrf24l01.ino +++ b/Multiprotocol/CFlie_nrf24l01.ino @@ -644,7 +644,7 @@ static uint8_t crtp_log_setup_state_machine() return state_machine_completed; } -static int cflie_init() +static void CFLIE_RF_init() { NRF24L01_Initialize(); @@ -672,9 +672,6 @@ static int cflie_init() NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x01); // Enable Dynamic Payload Length on pipe 0 NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x06); // Enable Dynamic Payload Length, enable Payload with ACK - - // 50ms delay in callback - return 50000; } // TODO: Fix telemetry @@ -749,7 +746,7 @@ static int cflie_init() // } // } -static uint16_t cflie_callback() +static uint16_t CFLIE_callback() { switch (phase) { case CFLIE_INIT_SEARCH: @@ -799,7 +796,7 @@ static uint16_t cflie_callback() } // Generate address to use from TX id and manufacturer id (STM32 unique id) -static uint8_t initialize_rx_tx_addr() +static uint8_t CFLIE_initialize_rx_tx_addr() { rx_tx_addr[0] = rx_tx_addr[1] = @@ -844,19 +841,15 @@ static uint8_t initialize_rx_tx_addr() return CFLIE_INIT_SEARCH; } -uint16_t initCFlie(void) +void CFLIE_init(void) { BIND_IN_PROGRESS; // autobind protocol - phase = initialize_rx_tx_addr(); + phase = CFLIE_initialize_rx_tx_addr(); crtp_log_setup_state = CFLIE_CRTP_LOG_SETUP_STATE_INIT; packet_count=0; - int delay = cflie_init(); - - // debugln("CFlie init!"); - - return delay; + CFLIE_RF_init(); } #endif \ No newline at end of file diff --git a/Multiprotocol/CG023_nrf24l01.ino b/Multiprotocol/CG023_nrf24l01.ino index 7d6b260..ecd8a4d 100644 --- a/Multiprotocol/CG023_nrf24l01.ino +++ b/Multiprotocol/CG023_nrf24l01.ino @@ -119,7 +119,7 @@ static void __attribute__((unused)) CG023_send_packet(uint8_t bind) NRF24L01_SetPower(); // Set tx_power } -static void __attribute__((unused)) CG023_init() +static void __attribute__((unused)) CG023_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -165,17 +165,16 @@ static void __attribute__((unused)) CG023_initialize_txid() hopping_frequency_no = rx_tx_addr[0] - 0x7D; // rf channel for data packets } -uint16_t initCG023(void) +void CG023_init(void) { BIND_IN_PROGRESS; // autobind protocol bind_counter = CG023_BIND_COUNT; CG023_initialize_txid(); - CG023_init(); + CG023_RF_init(); if(sub_protocol==CG023) packet_period=CG023_PACKET_PERIOD; else // YD829 packet_period=YD829_PACKET_PERIOD; - return CG023_INITIAL_WAIT+YD829_PACKET_PERIOD; } #endif diff --git a/Multiprotocol/CX10_nrf24l01.ino b/Multiprotocol/CX10_nrf24l01.ino index b4ff40b..aea1691 100644 --- a/Multiprotocol/CX10_nrf24l01.ino +++ b/Multiprotocol/CX10_nrf24l01.ino @@ -169,7 +169,7 @@ static void __attribute__((unused)) CX10_Write_Packet(uint8_t bind) NRF24L01_SetPower(); } -static void __attribute__((unused)) CX10_init() +static void __attribute__((unused)) CX10_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -261,9 +261,13 @@ static void __attribute__((unused)) CX10_initialize_txid() } } -uint16_t initCX10(void) +void CX10_init(void) { BIND_IN_PROGRESS; // autobind protocol + + if(protocol == PROTO_Q2X2) + sub_protocol|=0x08; // Increase the number of sub_protocols for CX-10 + if(sub_protocol==CX10_BLUE) { packet_length = CX10A_PACKET_SIZE; @@ -286,8 +290,7 @@ uint16_t initCX10(void) bind_counter = CX10_BIND_COUNT; } CX10_initialize_txid(); - CX10_init(); - return CX10_INITIAL_WAIT+packet_period; + CX10_RF_init(); } #endif diff --git a/Multiprotocol/Corona_cc2500.ino b/Multiprotocol/Corona_cc2500.ino index 574bc78..ff6fc9d 100644 --- a/Multiprotocol/Corona_cc2500.ino +++ b/Multiprotocol/Corona_cc2500.ino @@ -71,7 +71,7 @@ static void __attribute__((unused)) CORONA_rf_init() } // Generate id and hopping freq -static void __attribute__((unused)) CORONA_init() +static void __attribute__((unused)) CORONA_TXID_init() { #ifdef CORONA_FORCE_ID // Example of ID and channels taken from dumps @@ -255,7 +255,7 @@ static uint16_t __attribute__((unused)) CORONA_build_packet() return packet_period; } -uint16_t ReadCORONA() +uint16_t CORONA_callback() { #ifdef MULTI_SYNC telemetry_set_input_sync(22000); @@ -276,7 +276,7 @@ uint16_t ReadCORONA() return packet_period; } -uint16_t initCORONA() +void CORONA_init() { switch(sub_protocol) { @@ -293,9 +293,8 @@ uint16_t initCORONA() state=400; // Used by V2 to send RF channels + ID for 2.65s at startup hopping_frequency_no=0; fdv3_id_send = 0; - CORONA_init(); + CORONA_TXID_init(); CORONA_rf_init(); - return 10000; } #endif \ No newline at end of file diff --git a/Multiprotocol/DM002_nrf24l01.ino b/Multiprotocol/DM002_nrf24l01.ino index a565640..d8acd3a 100644 --- a/Multiprotocol/DM002_nrf24l01.ino +++ b/Multiprotocol/DM002_nrf24l01.ino @@ -95,7 +95,7 @@ static void __attribute__((unused)) DM002_send_packet(uint8_t bind) NRF24L01_SetPower(); // Set tx_power } -static void __attribute__((unused)) DM002_init() +static void __attribute__((unused)) DM002_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -155,13 +155,12 @@ static void __attribute__((unused)) DM002_initialize_txid() } } -uint16_t initDM002(void) +void DM002_init(void) { BIND_IN_PROGRESS; // autobind protocol bind_counter = DM002_BIND_COUNT; DM002_initialize_txid(); - DM002_init(); - return DM002_INITIAL_WAIT; + DM002_RF_init(); } #endif diff --git a/Multiprotocol/DSM_cyrf6936.ino b/Multiprotocol/DSM_cyrf6936.ino index 8984496..51d1d95 100644 --- a/Multiprotocol/DSM_cyrf6936.ino +++ b/Multiprotocol/DSM_cyrf6936.ino @@ -228,7 +228,7 @@ static uint8_t __attribute__((unused)) DSM_Check_RX_packet() return result; } -uint16_t ReadDsm() +uint16_t DSM_callback() { #define DSM_CH1_CH2_DELAY 4010 // Time between write of channel 1 and channel 2 #ifdef STM32_BOARD @@ -449,7 +449,7 @@ uint16_t ReadDsm() return 0; } -uint16_t initDsm() +void DSM_init() { CYRF_GetMfgData(cyrfmfg_id); //Model match @@ -496,7 +496,6 @@ uint16_t initDsm() } else phase = DSM_CHANSEL;// - return 10000; } #endif diff --git a/Multiprotocol/Devo_cyrf6936.ino b/Multiprotocol/Devo_cyrf6936.ino index 6c950dc..369f687 100644 --- a/Multiprotocol/Devo_cyrf6936.ino +++ b/Multiprotocol/Devo_cyrf6936.ino @@ -294,7 +294,7 @@ static void __attribute__((unused)) DEVO_BuildPacket() packet_count = 0; } -uint16_t devo_callback() +uint16_t DEVO_callback() { static uint8_t txState=0; @@ -404,8 +404,23 @@ uint16_t devo_callback() #endif } -uint16_t DevoInit() +void DEVO_init() { + #ifdef ENABLE_PPM + if(mode_select) //PPM mode + { + if(IS_BIND_BUTTON_FLAG_on) + { + eeprom_write_byte((EE_ADDR)(MODELMODE_EEPROM_OFFSET+RX_num),0x00); // reset to autobind mode for the current model + option=0; + } + else + { + option=eeprom_read_byte((EE_ADDR)(MODELMODE_EEPROM_OFFSET+RX_num)); // load previous mode: autobind or fixed id + if(option!=1) option=0; // if not fixed id mode then it should be autobind + } + } + #endif //ENABLE_PPM switch(sub_protocol) { case 1: @@ -453,7 +468,6 @@ uint16_t DevoInit() bind_counter = 0; DEVO_cyrf_set_bound_sop_code(); } - return 2400; } #endif diff --git a/Multiprotocol/E010R5_cyrf6936.ino b/Multiprotocol/E010R5_cyrf6936.ino index a63a025..37ba366 100644 --- a/Multiprotocol/E010R5_cyrf6936.ino +++ b/Multiprotocol/E010R5_cyrf6936.ino @@ -51,7 +51,7 @@ static void __attribute__((unused)) E010R5_build_data_packet() RF2500_BuildPayload(packet); } -uint16_t ReadE010R5() +uint16_t E010R5_callback() { //Bind if(bind_counter) @@ -90,7 +90,7 @@ uint16_t ReadE010R5() return 0; } -uint16_t initE010R5() +void E010R5_init() { BIND_IN_PROGRESS; // Autobind protocol bind_counter = 2600; @@ -134,8 +134,6 @@ uint16_t initE010R5() RF2500_RFChannel(hopping_frequency[0]); hopping_frequency_no=0; packet_count=0; - - return 3400; } #endif diff --git a/Multiprotocol/E016HV2_cc2500.ino b/Multiprotocol/E016HV2_cc2500.ino index cebb704..7c18bca 100644 --- a/Multiprotocol/E016HV2_cc2500.ino +++ b/Multiprotocol/E016HV2_cc2500.ino @@ -124,7 +124,7 @@ uint16_t E016HV2_callback() return E016HV2_PACKET_PERIOD; } -uint16_t initE016HV2() +void E016HV2_init() { //Config CC2500 CC2500_250K_Init(); @@ -152,7 +152,6 @@ uint16_t initE016HV2() flags=0; bind_counter = E016HV2_BIND_COUNT; BIND_IN_PROGRESS; // Autobind protocol - return E016HV2_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/E01X_nrf24l01.ino b/Multiprotocol/E01X_nrf24l01.ino index 91fbf72..371aae3 100644 --- a/Multiprotocol/E01X_nrf24l01.ino +++ b/Multiprotocol/E01X_nrf24l01.ino @@ -244,7 +244,7 @@ static void __attribute__((unused)) E01X_send_packet(uint8_t bind) NRF24L01_SetPower(); } -static void __attribute__((unused)) E01X_init() +static void __attribute__((unused)) E01X_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -322,7 +322,7 @@ static void __attribute__((unused)) E016H_initialize_txid() } } -uint16_t initE01X() +void E01X_init() { BIND_IN_PROGRESS; if(sub_protocol==E012) @@ -343,10 +343,9 @@ uint16_t initE01X() E016H_initialize_txid(); packet_period=E016H_PACKET_PERIOD; } - E01X_init(); + E01X_RF_init(); bind_counter = E01X_BIND_COUNT; hopping_frequency_no = 0; - return E01X_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/E129_cyrf6936.ino b/Multiprotocol/E129_cyrf6936.ino index 515e462..ce1c3a8 100644 --- a/Multiprotocol/E129_cyrf6936.ino +++ b/Multiprotocol/E129_cyrf6936.ino @@ -74,7 +74,7 @@ static void __attribute__((unused)) E129_build_data_packet() RF2500_BuildPayload(packet); } -uint16_t ReadE129() +uint16_t E129_callback() { //Set RF channel if(phase==0) @@ -115,7 +115,7 @@ uint16_t ReadE129() return 5200-1260; } -uint16_t initE129() +void E129_init() { BIND_IN_PROGRESS; // Autobind protocol bind_counter = 384; // ~2sec @@ -146,7 +146,6 @@ uint16_t initE129() hopping_frequency_no=0; packet_count=0; phase=0; - return 1260; } #endif diff --git a/Multiprotocol/ESky150_nrf24l01.ino b/Multiprotocol/ESky150_nrf24l01.ino index 06ff3a9..88f5fdb 100644 --- a/Multiprotocol/ESky150_nrf24l01.ino +++ b/Multiprotocol/ESky150_nrf24l01.ino @@ -23,7 +23,7 @@ #define ESKY150_BINDING_PACKET_PERIOD 2000 #define ESKY150_SENDING_PACKET_PERIOD 4800 -static void __attribute__((unused)) ESKY150_init() +static void __attribute__((unused)) ESKY150_RF_init() { //Original TX always sets for channelx 0x22 and 0x4a // Use channels 2..79 @@ -171,16 +171,15 @@ uint16_t ESKY150_callback() return ESKY150_SENDING_PACKET_PERIOD; } -uint16_t initESKY150(void) +void ESKY150_init(void) { - ESKY150_init(); + ESKY150_RF_init(); if(IS_BIND_IN_PROGRESS) { bind_counter=3000; ESKY150_bind_init(); } hopping_frequency_no=0; - return 10000; } #endif \ No newline at end of file diff --git a/Multiprotocol/ESky150v2_cc2500.ino b/Multiprotocol/ESky150v2_cc2500.ino index ab58d95..8c8f2c1 100644 --- a/Multiprotocol/ESky150v2_cc2500.ino +++ b/Multiprotocol/ESky150v2_cc2500.ino @@ -104,7 +104,7 @@ uint16_t ESKY150V2_callback() return ESKY150V2_PACKET_PERIOD; } -uint16_t initESKY150V2() +void ESKY150V2_init() { CC2500_250K_Init(); ESKY150V2_set_freq(); @@ -133,7 +133,6 @@ uint16_t initESKY150V2() } else CC2500_250K_NRF_SetTXAddr(rx_tx_addr, ESKY150V2_TXID_SIZE); - return 50000; } #endif diff --git a/Multiprotocol/ESky_nrf24l01.ino b/Multiprotocol/ESky_nrf24l01.ino index a7f3f5a..5339275 100644 --- a/Multiprotocol/ESky_nrf24l01.ino +++ b/Multiprotocol/ESky_nrf24l01.ino @@ -35,7 +35,7 @@ static void __attribute__((unused)) ESKY_set_data_address() NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, 4); } -static void __attribute__((unused)) ESKY_init() +static void __attribute__((unused)) ESKY_RF_init() { NRF24L01_Initialize(); @@ -65,7 +65,7 @@ static void __attribute__((unused)) ESKY_init() NRF24L01_WriteReg(NRF24L01_17_FIFO_STATUS, 0x00); // Just in case, no real bits to write here } -static void __attribute__((unused)) ESKY_init2() +static void __attribute__((unused)) ESKY_TXID_init() { NRF24L01_FlushTx(); if(sub_protocol==ESKY_STD) @@ -187,7 +187,7 @@ uint16_t ESKY_callback() return ESKY_STD_PACKET_PERIOD; } -uint16_t initESKY(void) +void ESKY_init(void) { bind_counter = ESKY_BIND_COUNT; rx_tx_addr[2] = rx_tx_addr[3]; // Model match @@ -200,10 +200,9 @@ uint16_t initESKY(void) } #endif rx_tx_addr[3] = 0xBB; - ESKY_init(); - ESKY_init2(); + ESKY_RF_init(); + ESKY_TXID_init(); packet_count=0; - return 50000; } #endif \ No newline at end of file diff --git a/Multiprotocol/FQ777_nrf24l01.ino b/Multiprotocol/FQ777_nrf24l01.ino index 73c0d50..9b6f131 100644 --- a/Multiprotocol/FQ777_nrf24l01.ino +++ b/Multiprotocol/FQ777_nrf24l01.ino @@ -150,7 +150,7 @@ static void __attribute__((unused)) FQ777_send_packet(uint8_t bind) NRF24L01_WritePayload(packet, packet_len); } -static void __attribute__((unused)) FQ777_init() +static void __attribute__((unused)) FQ777_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -191,7 +191,7 @@ uint16_t FQ777_callback() return FQ777_PACKET_PERIOD; } -uint16_t initFQ777(void) +void FQ777_init(void) { BIND_IN_PROGRESS; // autobind protocol bind_counter = FQ777_BIND_COUNT; @@ -204,8 +204,7 @@ uint16_t initFQ777(void) rx_tx_addr[2] = 0x00; rx_tx_addr[3] = 0xe7; rx_tx_addr[4] = 0x67; - FQ777_init(); - return FQ777_INITIAL_WAIT; + FQ777_RF_init(); } #endif diff --git a/Multiprotocol/FX816_nrf24l01.ino b/Multiprotocol/FX816_nrf24l01.ino index 1989c90..32403f0 100644 --- a/Multiprotocol/FX816_nrf24l01.ino +++ b/Multiprotocol/FX816_nrf24l01.ino @@ -58,7 +58,7 @@ static void __attribute__((unused)) FX816_send_packet() NRF24L01_SetPower(); // Set tx_power } -static void __attribute__((unused)) FX816_init() +static void __attribute__((unused)) FX816_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -100,14 +100,13 @@ uint16_t FX816_callback() return FX816_PACKET_PERIOD; } -uint16_t initFX816() +void FX816_init() { BIND_IN_PROGRESS; // autobind protocol FX816_initialize_txid(); - FX816_init(); + FX816_RF_init(); hopping_frequency_no = 0; bind_counter=FX816_BIND_COUNT; - return FX816_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/FY326_nrf24l01.ino b/Multiprotocol/FY326_nrf24l01.ino index 3e7723f..3ba75bd 100644 --- a/Multiprotocol/FY326_nrf24l01.ino +++ b/Multiprotocol/FY326_nrf24l01.ino @@ -88,7 +88,7 @@ static void __attribute__((unused)) FY326_send_packet(uint8_t bind) NRF24L01_SetPower(); // Set tx_power } -static void __attribute__((unused)) FY326_init() +static void __attribute__((unused)) FY326_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -209,20 +209,19 @@ static void __attribute__((unused)) FY326_initialize_txid() hopping_frequency[i]=rx_tx_addr[0] & ~0x80; } -uint16_t initFY326(void) +void FY326_init(void) { BIND_IN_PROGRESS; // autobind protocol rxid = 0xAA; bind_counter = FY326_BIND_COUNT; FY326_initialize_txid(); - FY326_init(); + FY326_RF_init(); if(sub_protocol==FY319) { phase=FY319_BIND1; } else phase=FY326_BIND1; - return FY326_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/FlySky_a7105.ino b/Multiprotocol/FlySky_a7105.ino index 799f499..4c4f550 100644 --- a/Multiprotocol/FlySky_a7105.ino +++ b/Multiprotocol/FlySky_a7105.ino @@ -12,7 +12,7 @@ You should have received a copy of the GNU General Public License along with Multiprotocol. If not, see . */ -// Last sync with hexfet new_protocols/flysky_a7105.c dated 2015-09-28 +// Last sync with hexfet new_protocols/FLYSKY_a7105.c dated 2015-09-28 #if defined(FLYSKY_A7105_INO) @@ -53,7 +53,7 @@ enum { const uint8_t PROGMEM V912_X17_SEQ[10] = { 0x14, 0x31, 0x40, 0x49, 0x49, // sometime first byte is 0x15 ? 0x49, 0x49, 0x49, 0x49, 0x49, }; -static void __attribute__((unused)) flysky_apply_extension_flags() +static void __attribute__((unused)) FLYSKY_apply_extension_flags() { switch(sub_protocol) { @@ -129,7 +129,7 @@ static void __attribute__((unused)) flysky_apply_extension_flags() } } -static void __attribute__((unused)) flysky_build_packet(uint8_t init) +static void __attribute__((unused)) FLYSKY_build_packet(uint8_t init) { uint8_t i; //servodata timing range for flysky. @@ -150,17 +150,17 @@ static void __attribute__((unused)) flysky_build_packet(uint8_t init) packet[5 + i*2]=temp&0xFF; //low byte of servo timing(1000-2000us) packet[6 + i*2]=(temp>>8)&0xFF; //high byte of servo timing(1000-2000us) } - flysky_apply_extension_flags(); + FLYSKY_apply_extension_flags(); } -uint16_t ReadFlySky() +uint16_t FLYSKY_callback() { #ifndef FORCE_FLYSKY_TUNING A7105_AdjustLOBaseFreq(1); #endif if(IS_BIND_IN_PROGRESS) { - flysky_build_packet(1); + FLYSKY_build_packet(1); A7105_WriteData(21, 1); bind_counter--; if (bind_counter==0) @@ -171,7 +171,7 @@ uint16_t ReadFlySky() #ifdef MULTI_SYNC telemetry_set_input_sync(packet_period); #endif - flysky_build_packet(0); + FLYSKY_build_packet(0); A7105_WriteData(21, hopping_frequency[hopping_frequency_no & 0x0F]); A7105_SetPower(); } @@ -179,7 +179,7 @@ uint16_t ReadFlySky() return packet_period; } -const uint8_t PROGMEM tx_channels[8][4] = { +const uint8_t PROGMEM FLYSKY_tx_channels[8][4] = { { 0x12, 0x34, 0x56, 0x78}, { 0x18, 0x27, 0x36, 0x45}, { 0x41, 0x82, 0x36, 0x57}, @@ -190,7 +190,7 @@ const uint8_t PROGMEM tx_channels[8][4] = { { 0x71, 0x86, 0x43, 0x52} }; -uint16_t initFlySky() +void FLYSKY_init() { uint8_t chanrow; uint8_t chanoffset; @@ -208,7 +208,7 @@ uint16_t initFlySky() chanoffset=rx_tx_addr[3]/16; for(uint8_t i=0;i<16;i++) { - temp=pgm_read_byte_near(&tx_channels[chanrow>>1][i>>2]); + temp=pgm_read_byte_near(&FLYSKY_tx_channels[chanrow>>1][i>>2]); if(i&0x02) temp&=0x0F; else @@ -242,6 +242,5 @@ uint16_t initFlySky() bind_counter = FLYSKY_BIND_COUNT; else bind_counter = 0; - return 2400; } #endif diff --git a/Multiprotocol/FrSkyDVX_common.ino b/Multiprotocol/FrSkyDVX_common.ino index eb65d7c..67f9348 100644 --- a/Multiprotocol/FrSkyDVX_common.ino +++ b/Multiprotocol/FrSkyDVX_common.ino @@ -508,7 +508,7 @@ static void __attribute__((unused)) FrSkyX_set_start(uint8_t ch ) CC2500_WriteReg(CC2500_0A_CHANNR, hopping_frequency[ch]); } -static void __attribute__((unused)) FrSkyX_init() +static void __attribute__((unused)) FrSkyX_RF_init() { if(protocol==PROTO_FRSKYL) FRSKY_init_cc2500(FRSKYL_cc2500_conf); diff --git a/Multiprotocol/FrSkyD_cc2500.ino b/Multiprotocol/FrSkyD_cc2500.ino index 42b4780..89ce99b 100644 --- a/Multiprotocol/FrSkyD_cc2500.ino +++ b/Multiprotocol/FrSkyD_cc2500.ino @@ -17,12 +17,12 @@ #include "iface_cc2500.h" -static void __attribute__((unused)) frsky2way_init(uint8_t bind) +static void __attribute__((unused)) FRSKYD_RF_init() { FRSKY_init_cc2500(FRSKYD_cc2500_conf); - CC2500_WriteReg(CC2500_1B_AGCCTRL2, bind ? 0x43 : 0x03); - CC2500_WriteReg(CC2500_09_ADDR, bind ? 0x03 : rx_tx_addr[3]); + CC2500_WriteReg(CC2500_1B_AGCCTRL2, IS_BIND_IN_PROGRESS ? 0x43 : 0x03); + CC2500_WriteReg(CC2500_09_ADDR, IS_BIND_IN_PROGRESS ? 0x03 : rx_tx_addr[3]); CC2500_WriteReg(CC2500_07_PKTCTRL1, 0x05); CC2500_Strobe(CC2500_SIDLE); // Go to idle... // @@ -32,7 +32,7 @@ static void __attribute__((unused)) frsky2way_init(uint8_t bind) //#######END INIT######## } -static void __attribute__((unused)) frsky2way_build_bind_packet() +static void __attribute__((unused)) FRSKYD_build_bind_packet() { //11 03 01 d7 2d 00 00 1e 3c 5b 78 00 00 00 00 00 00 01 //11 03 01 19 3e 00 02 8e 2f bb 5c 00 00 00 00 00 00 01 @@ -57,7 +57,7 @@ static void __attribute__((unused)) frsky2way_build_bind_packet() packet[17] = rx_tx_addr[1]; } -static void __attribute__((unused)) frsky2way_data_frame() +static void __attribute__((unused)) FRSKYD_data_frame() {//pachet[4] is telemetry user frame counter(hub) //11 d7 2d 22 00 01 c9 c9 ca ca 88 88 ca ca c9 ca 88 88 //11 57 12 00 00 01 f2 f2 f2 f2 06 06 ca ca ca ca 18 18 @@ -94,7 +94,7 @@ static void __attribute__((unused)) frsky2way_data_frame() } } -uint16_t initFrSky_2way() +void FRSKYD_init(void) { //FrskyD init hop if (sub_protocol==DCLONE) @@ -116,21 +116,20 @@ uint16_t initFrSky_2way() packet_count=0; if(IS_BIND_IN_PROGRESS) { - frsky2way_init(1); + FRSKYD_RF_init(); state = FRSKY_BIND; } else { state = FRSKY_BIND_DONE; } - return 10000; } -uint16_t ReadFrSky_2way() +uint16_t FRSKYD_callback(void) { if (state < FRSKY_BIND_DONE) { - frsky2way_build_bind_packet(); + FRSKYD_build_bind_packet(); CC2500_Strobe(CC2500_SIDLE); CC2500_WriteReg(CC2500_0A_CHANNR, 0x00); CC2500_WriteReg(CC2500_23_FSCAL3, 0x89); @@ -144,10 +143,10 @@ uint16_t ReadFrSky_2way() } if (state == FRSKY_BIND_DONE) { - state = FRSKY_DATA2; - frsky2way_init(0); - counter = 0; BIND_DONE; + FRSKYD_RF_init(); + counter = 0; + state = FRSKY_DATA2; } else if (state == FRSKY_DATA5) @@ -206,7 +205,7 @@ uint16_t ReadFrSky_2way() CC2500_SetFreqOffset(); CC2500_WriteReg(CC2500_23_FSCAL3, 0x89); CC2500_Strobe(CC2500_SFRX); - frsky2way_data_frame(); + FRSKYD_data_frame(); CC2500_WriteData(packet, packet[0]+1); state++; } diff --git a/Multiprotocol/FrSkyL_cc2500.ino b/Multiprotocol/FrSkyL_cc2500.ino index 62f8cd9..75126b9 100644 --- a/Multiprotocol/FrSkyL_cc2500.ino +++ b/Multiprotocol/FrSkyL_cc2500.ino @@ -137,7 +137,7 @@ static void __attribute__((unused)) FrSkyL_encode_packet(bool type) } } -uint16_t ReadFrSkyL() +uint16_t FRSKYL_callback() { static uint8_t written=0, send=0; switch(send) @@ -212,7 +212,7 @@ uint16_t ReadFrSkyL() return 1; } -uint16_t initFrSkyL() +void FRSKYL_init() { set_rx_tx_addr(MProtocol_id_master); rx_tx_addr[1]=0x02; // ID related, hw version? @@ -227,7 +227,7 @@ uint16_t initFrSkyL() while(!FrSkyX_chanskip) FrSkyX_chanskip=random(0xfefefefe)%47; - FrSkyX_init(); + FrSkyX_RF_init(); //Prepare frame memset(FrSkyL_buffer,0x00,FRSKYL_PACKET_LEN-3); @@ -253,6 +253,5 @@ uint16_t initFrSkyL() state = FRSKY_DATA1; FrSkyX_initialize_data(0); } - return 10000; } #endif diff --git a/Multiprotocol/FrSkyR9_sx1276.ino b/Multiprotocol/FrSkyR9_sx1276.ino index 02d4882..4c4c6a2 100644 --- a/Multiprotocol/FrSkyR9_sx1276.ino +++ b/Multiprotocol/FrSkyR9_sx1276.ino @@ -157,7 +157,7 @@ static void __attribute__((unused)) FrSkyR9_build_EU_packet() packet[13] = FrSkyR9_CRC8(packet, 13); } -uint16_t initFrSkyR9() +void FRSKYR9_init() { //Check frequencies #ifdef DISP_FREQ_TABLE @@ -213,10 +213,9 @@ uint16_t initFrSkyR9() hopping_frequency_no=0; phase=FRSKYR9_FREQ; - return 20000; // Start calling FrSkyR9_callback in 20 milliseconds } -uint16_t FrSkyR9_callback() +uint16_t FRSKYR9_callback() { switch (phase) { diff --git a/Multiprotocol/FrSkyV_cc2500.ino b/Multiprotocol/FrSkyV_cc2500.ino index 57f5d8f..6ad96f3 100644 --- a/Multiprotocol/FrSkyV_cc2500.ino +++ b/Multiprotocol/FrSkyV_cc2500.ino @@ -113,7 +113,7 @@ static void __attribute__((unused)) FRSKYV_build_data_packet() packet[14] = FRSKYV_crc8(crc8, packet, 14); } -uint16_t ReadFRSKYV() +uint16_t FRSKYV_callback(void) { if(IS_BIND_DONE) { // Normal operation @@ -148,7 +148,7 @@ uint16_t ReadFRSKYV() return 53460; } -uint16_t initFRSKYV() +void FRSKYV_init(void) { //ID is 15 bits. Using rx_tx_addr[2] and rx_tx_addr[3] since we want to use RX_Num for model match rx_tx_addr[2]&=0x7F; @@ -158,7 +158,6 @@ uint16_t initFRSKYV() seed = 1; binding_idx=0; phase = FRSKYV_DATA1; - return 10000; } #endif diff --git a/Multiprotocol/FrSkyX_cc2500.ino b/Multiprotocol/FrSkyX_cc2500.ino index 39d2780..d7b34db 100644 --- a/Multiprotocol/FrSkyX_cc2500.ino +++ b/Multiprotocol/FrSkyX_cc2500.ino @@ -116,7 +116,7 @@ static void __attribute__((unused)) FrSkyX_build_packet() debugln("");*/ } -uint16_t ReadFrSkyX() +uint16_t FRSKYX_callback() { switch(state) { @@ -241,7 +241,7 @@ uint16_t ReadFrSkyX() return 1; } -uint16_t initFrSkyX() +void FRSKYX_init() { set_rx_tx_addr(MProtocol_id_master); FrSkyFormat = sub_protocol; @@ -268,7 +268,7 @@ uint16_t initFrSkyX() while(!FrSkyX_chanskip) FrSkyX_chanskip=random(0xfefefefe)%47; - FrSkyX_init(); + FrSkyX_RF_init(); if(IS_BIND_IN_PROGRESS) { @@ -281,6 +281,5 @@ uint16_t initFrSkyX() FrSkyX_initialize_data(0); } FrSkyX_telem_init(); - return 10000; } #endif diff --git a/Multiprotocol/FrSky_Rx_cc2500.ino b/Multiprotocol/FrSky_Rx_cc2500.ino index 265e224..f3d3abd 100644 --- a/Multiprotocol/FrSky_Rx_cc2500.ino +++ b/Multiprotocol/FrSky_Rx_cc2500.ino @@ -40,7 +40,7 @@ enum { FRSKY_RX_DATA, }; -const PROGMEM uint8_t frsky_rx_common_reg[][2] = { +const PROGMEM uint8_t FRSKY_RX_common_reg[][2] = { {CC2500_02_IOCFG0, 0x01}, {CC2500_18_MCSM0, 0x18}, {CC2500_07_PKTCTRL1, 0x05}, @@ -68,7 +68,7 @@ const PROGMEM uint8_t frsky_rx_common_reg[][2] = { {CC2500_09_ADDR, 0x03}, }; -const PROGMEM uint8_t frsky_rx_d16fcc_reg[][2] = { +const PROGMEM uint8_t FRSKY_RX_d16fcc_reg[][2] = { {CC2500_17_MCSM1, 0x0C}, {CC2500_0E_FREQ1, 0x76}, {CC2500_0F_FREQ0, 0x27}, @@ -81,7 +81,7 @@ const PROGMEM uint8_t frsky_rx_d16fcc_reg[][2] = { {CC2500_15_DEVIATN, 0x51}, }; -const PROGMEM uint8_t frsky_rx_d16lbt_reg[][2] = { +const PROGMEM uint8_t FRSKY_RX_d16lbt_reg[][2] = { {CC2500_17_MCSM1, 0x0E}, {CC2500_0E_FREQ1, 0x80}, {CC2500_0F_FREQ0, 0x00}, @@ -94,7 +94,7 @@ const PROGMEM uint8_t frsky_rx_d16lbt_reg[][2] = { {CC2500_15_DEVIATN, 0x53}, }; -const PROGMEM uint8_t frsky_rx_d8_reg[][2] = { +const PROGMEM uint8_t FRSKY_RX_d8_reg[][2] = { {CC2500_17_MCSM1, 0x0C}, {CC2500_0E_FREQ1, 0x76}, {CC2500_0F_FREQ0, 0x27}, @@ -107,32 +107,32 @@ const PROGMEM uint8_t frsky_rx_d8_reg[][2] = { {CC2500_15_DEVIATN, 0x42}, }; -static uint8_t frsky_rx_chanskip; -static int8_t frsky_rx_finetune; -static uint8_t frsky_rx_format; +static uint8_t FRSKY_RX_chanskip; +static int8_t FRSKY_RX_finetune; +static uint8_t FRSKY_RX_format; -static void __attribute__((unused)) frsky_rx_strobe_rx() +static void __attribute__((unused)) FRSKY_RX_strobe_rx() { CC2500_Strobe(CC2500_SIDLE); CC2500_Strobe(CC2500_SFRX); CC2500_Strobe(CC2500_SRX); } -static void __attribute__((unused)) frsky_rx_initialise_cc2500() { - const uint8_t frsky_rx_length[] = { FRSKY_RX_D8_LENGTH, FRSKY_RX_D16FCC_LENGTH, FRSKY_RX_D16LBT_LENGTH, FRSKY_RX_D16v2_LENGTH, FRSKY_RX_D16v2_LENGTH }; - packet_length = frsky_rx_length[frsky_rx_format]; +static void __attribute__((unused)) FRSKY_RX_initialise_cc2500() { + const uint8_t FRSKY_RX_length[] = { FRSKY_RX_D8_LENGTH, FRSKY_RX_D16FCC_LENGTH, FRSKY_RX_D16LBT_LENGTH, FRSKY_RX_D16v2_LENGTH, FRSKY_RX_D16v2_LENGTH }; + packet_length = FRSKY_RX_length[FRSKY_RX_format]; CC2500_Reset(); CC2500_Strobe(CC2500_SIDLE); - for (uint8_t i = 0; i < sizeof(frsky_rx_common_reg) / 2; i++) - CC2500_WriteReg(pgm_read_byte_near(&frsky_rx_common_reg[i][0]), pgm_read_byte_near(&frsky_rx_common_reg[i][1])); + for (uint8_t i = 0; i < sizeof(FRSKY_RX_common_reg) / 2; i++) + CC2500_WriteReg(pgm_read_byte_near(&FRSKY_RX_common_reg[i][0]), pgm_read_byte_near(&FRSKY_RX_common_reg[i][1])); - switch (frsky_rx_format) + switch (FRSKY_RX_format) { case FRSKY_RX_D16v2FCC: case FRSKY_RX_D16FCC: - for (uint8_t i = 0; i < sizeof(frsky_rx_d16fcc_reg) / 2; i++) - CC2500_WriteReg(pgm_read_byte_near(&frsky_rx_d16fcc_reg[i][0]), pgm_read_byte_near(&frsky_rx_d16fcc_reg[i][1])); - if(frsky_rx_format==FRSKY_RX_D16v2FCC) + for (uint8_t i = 0; i < sizeof(FRSKY_RX_d16fcc_reg) / 2; i++) + CC2500_WriteReg(pgm_read_byte_near(&FRSKY_RX_d16fcc_reg[i][0]), pgm_read_byte_near(&FRSKY_RX_d16fcc_reg[i][1])); + if(FRSKY_RX_format==FRSKY_RX_D16v2FCC) { CC2500_WriteReg(CC2500_08_PKTCTRL0, 0x05); // Enable CRC CC2500_WriteReg(CC2500_17_MCSM1, 0x0E); // Go/Stay in RX mode @@ -141,36 +141,36 @@ static void __attribute__((unused)) frsky_rx_initialise_cc2500() { break; case FRSKY_RX_D16v2LBT: case FRSKY_RX_D16LBT: - for (uint8_t i = 0; i < sizeof(frsky_rx_d16lbt_reg) / 2; i++) - CC2500_WriteReg(pgm_read_byte_near(&frsky_rx_d16lbt_reg[i][0]), pgm_read_byte_near(&frsky_rx_d16lbt_reg[i][1])); - if(frsky_rx_format==FRSKY_RX_D16v2LBT) + for (uint8_t i = 0; i < sizeof(FRSKY_RX_d16lbt_reg) / 2; i++) + CC2500_WriteReg(pgm_read_byte_near(&FRSKY_RX_d16lbt_reg[i][0]), pgm_read_byte_near(&FRSKY_RX_d16lbt_reg[i][1])); + if(FRSKY_RX_format==FRSKY_RX_D16v2LBT) CC2500_WriteReg(CC2500_08_PKTCTRL0, 0x05); // Enable CRC break; case FRSKY_RX_D8: - for (uint8_t i = 0; i < sizeof(frsky_rx_d8_reg) / 2; i++) - CC2500_WriteReg(pgm_read_byte_near(&frsky_rx_d8_reg[i][0]), pgm_read_byte_near(&frsky_rx_d8_reg[i][1])); + for (uint8_t i = 0; i < sizeof(FRSKY_RX_d8_reg) / 2; i++) + CC2500_WriteReg(pgm_read_byte_near(&FRSKY_RX_d8_reg[i][0]), pgm_read_byte_near(&FRSKY_RX_d8_reg[i][1])); CC2500_WriteReg(CC2500_23_FSCAL3, 0x89); break; } CC2500_WriteReg(CC2500_0A_CHANNR, 0); // bind channel rx_disable_lna = IS_POWER_FLAG_on; CC2500_SetTxRxMode(rx_disable_lna ? TXRX_OFF : RX_EN); // lna disable / enable - frsky_rx_strobe_rx(); + FRSKY_RX_strobe_rx(); delayMicroseconds(1000); // wait for RX to activate } -static void __attribute__((unused)) frsky_rx_set_channel(uint8_t channel) +static void __attribute__((unused)) FRSKY_RX_set_channel(uint8_t channel) { CC2500_WriteReg(CC2500_0A_CHANNR, hopping_frequency[channel]); - if(frsky_rx_format == FRSKY_RX_D8) + if(FRSKY_RX_format == FRSKY_RX_D8) CC2500_WriteReg(CC2500_23_FSCAL3, 0x89); CC2500_WriteReg(CC2500_25_FSCAL1, calData[channel]); - frsky_rx_strobe_rx(); + FRSKY_RX_strobe_rx(); } -static void __attribute__((unused)) frsky_rx_calibrate() +static void __attribute__((unused)) FRSKY_RX_calibrate() { - frsky_rx_strobe_rx(); + FRSKY_RX_strobe_rx(); for (unsigned c = 0; c < 47; c++) { CC2500_Strobe(CC2500_SIDLE); @@ -193,7 +193,7 @@ static uint8_t __attribute__((unused)) frskyx_rx_check_crc_id(bool bind,bool ini uint8_t offset=bind?3:1; // Check D8 checksum - if (frsky_rx_format == FRSKY_RX_D8) + if (FRSKY_RX_format == FRSKY_RX_D8) { if((packet[packet_length+1] & 0x80) != 0x80) // Check CRC_OK flag in status byte 2 return false; // Bad CRC @@ -210,7 +210,7 @@ static uint8_t __attribute__((unused)) frskyx_rx_check_crc_id(bool bind,bool ini } // Check D16v2 checksum - if (frsky_rx_format == FRSKY_RX_D16v2LBT || frsky_rx_format == FRSKY_RX_D16v2FCC) + if (FRSKY_RX_format == FRSKY_RX_D16v2LBT || FRSKY_RX_format == FRSKY_RX_D16v2FCC) if((packet[packet_length+1] & 0x80) != 0x80) // Check CRC_OK flag in status byte 2 return false; //debugln("HW Checksum ok"); @@ -222,12 +222,12 @@ static uint8_t __attribute__((unused)) frskyx_rx_check_crc_id(bool bind,bool ini return false; // Bad CRC //debugln("Checksum ok"); - if (bind && (frsky_rx_format == FRSKY_RX_D16v2LBT || frsky_rx_format == FRSKY_RX_D16v2FCC)) + if (bind && (FRSKY_RX_format == FRSKY_RX_D16v2LBT || FRSKY_RX_format == FRSKY_RX_D16v2FCC)) for(uint8_t i=3; i= FRSKY_RX_DATA)) { if (option == 0) - CC2500_WriteReg(CC2500_0C_FSCTRL0, frsky_rx_finetune); + CC2500_WriteReg(CC2500_0C_FSCTRL0, FRSKY_RX_finetune); else CC2500_WriteReg(CC2500_0C_FSCTRL0, option); prev_option = option; @@ -431,20 +431,20 @@ uint16_t FrSky_Rx_callback() CC2500_ReadData(packet, len); if(frskyx_rx_check_crc_id(true,true)) { - frsky_rx_finetune = -127; - CC2500_WriteReg(CC2500_0C_FSCTRL0, frsky_rx_finetune); + FRSKY_RX_finetune = -127; + CC2500_WriteReg(CC2500_0C_FSCTRL0, FRSKY_RX_finetune); phase = FRSKY_RX_TUNE_LOW; debugln("FRSKY_RX_TUNE_LOW"); - frsky_rx_strobe_rx(); + FRSKY_RX_strobe_rx(); state = 0; return 1000; } } - frsky_rx_format = (frsky_rx_format + 1) % FRSKY_RX_FORMATS; // switch to next format (D8, D16FCC, D16LBT, D16v2FCC, D16v2LBT) - frsky_rx_initialise_cc2500(); - frsky_rx_finetune += 10; - CC2500_WriteReg(CC2500_0C_FSCTRL0, frsky_rx_finetune); - frsky_rx_strobe_rx(); + FRSKY_RX_format = (FRSKY_RX_format + 1) % FRSKY_RX_FORMATS; // switch to next format (D8, D16FCC, D16LBT, D16v2FCC, D16v2LBT) + FRSKY_RX_initialise_cc2500(); + FRSKY_RX_finetune += 10; + CC2500_WriteReg(CC2500_0C_FSCTRL0, FRSKY_RX_finetune); + FRSKY_RX_strobe_rx(); return 18000; case FRSKY_RX_TUNE_LOW: @@ -452,18 +452,18 @@ uint16_t FrSky_Rx_callback() { CC2500_ReadData(packet, len); if(frskyx_rx_check_crc_id(true,false)) { - tune_low = frsky_rx_finetune; - frsky_rx_finetune = 127; - CC2500_WriteReg(CC2500_0C_FSCTRL0, frsky_rx_finetune); + tune_low = FRSKY_RX_finetune; + FRSKY_RX_finetune = 127; + CC2500_WriteReg(CC2500_0C_FSCTRL0, FRSKY_RX_finetune); phase = FRSKY_RX_TUNE_HIGH; debugln("FRSKY_RX_TUNE_HIGH"); - frsky_rx_strobe_rx(); + FRSKY_RX_strobe_rx(); return 1000; } } - frsky_rx_finetune += 1; - CC2500_WriteReg(CC2500_0C_FSCTRL0, frsky_rx_finetune); - frsky_rx_strobe_rx(); + FRSKY_RX_finetune += 1; + CC2500_WriteReg(CC2500_0C_FSCTRL0, FRSKY_RX_finetune); + FRSKY_RX_strobe_rx(); return 18000; case FRSKY_RX_TUNE_HIGH: @@ -471,9 +471,9 @@ uint16_t FrSky_Rx_callback() { CC2500_ReadData(packet, len); if(frskyx_rx_check_crc_id(true,false)) { - tune_high = frsky_rx_finetune; - frsky_rx_finetune = (tune_low + tune_high) / 2; - CC2500_WriteReg(CC2500_0C_FSCTRL0, (int8_t)frsky_rx_finetune); + tune_high = FRSKY_RX_finetune; + FRSKY_RX_finetune = (tune_low + tune_high) / 2; + CC2500_WriteReg(CC2500_0C_FSCTRL0, (int8_t)FRSKY_RX_finetune); if(tune_low < tune_high) { phase = FRSKY_RX_BIND; @@ -484,13 +484,13 @@ uint16_t FrSky_Rx_callback() phase = FRSKY_RX_TUNE_START; debugln("FRSKY_RX_TUNE_START"); } - frsky_rx_strobe_rx(); + FRSKY_RX_strobe_rx(); return 1000; } } - frsky_rx_finetune -= 1; - CC2500_WriteReg(CC2500_0C_FSCTRL0, frsky_rx_finetune); - frsky_rx_strobe_rx(); + FRSKY_RX_finetune -= 1; + CC2500_WriteReg(CC2500_0C_FSCTRL0, FRSKY_RX_finetune); + FRSKY_RX_strobe_rx(); return 18000; case FRSKY_RX_BIND: @@ -498,7 +498,7 @@ uint16_t FrSky_Rx_callback() { CC2500_ReadData(packet, len); if(frskyx_rx_check_crc_id(true,false)) { - if(frsky_rx_format != FRSKY_RX_D16v2LBT && frsky_rx_format != FRSKY_RX_D16v2FCC) + if(FRSKY_RX_format != FRSKY_RX_D16v2LBT && FRSKY_RX_format != FRSKY_RX_D16v2FCC) {// D8 & D16v1 if(packet[5] <= 0x2D) { @@ -517,27 +517,27 @@ uint16_t FrSky_Rx_callback() uint16_t temp = FRSKY_RX_EEPROM_OFFSET; if(sub_protocol==FRSKY_CLONE) { - if(frsky_rx_format==FRSKY_RX_D8) + if(FRSKY_RX_format==FRSKY_RX_D8) temp=FRSKYD_CLONE_EEPROM_OFFSET; - else if(frsky_rx_format == FRSKY_RX_D16FCC || frsky_rx_format == FRSKY_RX_D16LBT) + else if(FRSKY_RX_format == FRSKY_RX_D16FCC || FRSKY_RX_format == FRSKY_RX_D16LBT) temp=FRSKYX_CLONE_EEPROM_OFFSET; else temp=FRSKYX2_CLONE_EEPROM_OFFSET; } - eeprom_write_byte((EE_ADDR)temp++, frsky_rx_format); + eeprom_write_byte((EE_ADDR)temp++, FRSKY_RX_format); eeprom_write_byte((EE_ADDR)temp++, rx_tx_addr[3]); eeprom_write_byte((EE_ADDR)temp++, rx_tx_addr[2]); eeprom_write_byte((EE_ADDR)temp++, rx_tx_addr[1]); if(sub_protocol==FRSKY_RX) - eeprom_write_byte((EE_ADDR)temp++, frsky_rx_finetune); - if(frsky_rx_format != FRSKY_RX_D16v2FCC && frsky_rx_format != FRSKY_RX_D16v2LBT) + eeprom_write_byte((EE_ADDR)temp++, FRSKY_RX_finetune); + if(FRSKY_RX_format != FRSKY_RX_D16v2FCC && FRSKY_RX_format != FRSKY_RX_D16v2LBT) for (ch = 0; ch < 47; ch++) eeprom_write_byte((EE_ADDR)temp++, hopping_frequency[ch]); - frsky_rx_data(); + FRSKY_RX_data(); debugln("FRSKY_RX_DATA"); } } - frsky_rx_strobe_rx(); + FRSKY_RX_strobe_rx(); } return 1000; @@ -554,30 +554,30 @@ uint16_t FrSky_Rx_callback() RX_RSSI += 128; bool chanskip_valid=true; // hop to next channel - if (frsky_rx_format != FRSKY_RX_D8) + if (FRSKY_RX_format != FRSKY_RX_D8) {//D16v1 & D16v2 if(rx_data_started) { - if(frsky_rx_chanskip != (((packet[4] & 0xC0) >> 6) | ((packet[5] & 0x3F) << 2))) + if(FRSKY_RX_chanskip != (((packet[4] & 0xC0) >> 6) | ((packet[5] & 0x3F) << 2))) { chanskip_valid=false; // chanskip value has changed which surely indicates a bad frame packet_count++; if(packet_count>5) // the TX must have changed chanskip... - frsky_rx_chanskip = ((packet[4] & 0xC0) >> 6) | ((packet[5] & 0x3F) << 2); // chanskip init + FRSKY_RX_chanskip = ((packet[4] & 0xC0) >> 6) | ((packet[5] & 0x3F) << 2); // chanskip init } else packet_count=0; } else - frsky_rx_chanskip = ((packet[4] & 0xC0) >> 6) | ((packet[5] & 0x3F) << 2); // chanskip init + FRSKY_RX_chanskip = ((packet[4] & 0xC0) >> 6) | ((packet[5] & 0x3F) << 2); // chanskip init } - hopping_frequency_no = (hopping_frequency_no + frsky_rx_chanskip) % 47; - frsky_rx_set_channel(hopping_frequency_no); + hopping_frequency_no = (hopping_frequency_no + FRSKY_RX_chanskip) % 47; + FRSKY_RX_set_channel(hopping_frequency_no); if(chanskip_valid) { if (telemetry_link == 0) { // send channels to TX - frsky_rx_build_telemetry_packet(); + FRSKY_RX_build_telemetry_packet(); telemetry_link = 1; } pps_counter++; @@ -602,8 +602,8 @@ uint16_t FrSky_Rx_callback() // skip channel if no packet received in time if (read_retry++ >= 9) { - hopping_frequency_no = (hopping_frequency_no + frsky_rx_chanskip) % 47; - frsky_rx_set_channel(hopping_frequency_no); + hopping_frequency_no = (hopping_frequency_no + FRSKY_RX_chanskip) % 47; + FRSKY_RX_set_channel(hopping_frequency_no); if(rx_data_started) read_retry = 0; else diff --git a/Multiprotocol/Futaba_cc2500.ino b/Multiprotocol/Futaba_cc2500.ino index 4e359e4..7432f22 100644 --- a/Multiprotocol/Futaba_cc2500.ino +++ b/Multiprotocol/Futaba_cc2500.ino @@ -207,7 +207,7 @@ static void __attribute__((unused)) SFHSS_send_packet() CC2500_WriteData(packet, SFHSS_PACKET_LEN); } -uint16_t ReadSFHSS() +uint16_t SFHSS_callback() { switch(phase) { @@ -285,7 +285,7 @@ static void __attribute__((unused)) SFHSS_get_tx_id() rx_tx_addr[1] = fixed_id >> 0; } -uint16_t initSFHSS() +void SFHSS_init() { BIND_DONE; // Not a TX bind protocol SFHSS_get_tx_id(); @@ -294,7 +294,6 @@ uint16_t initSFHSS() SFHSS_rf_init(); phase = SFHSS_START; - return 10000; } #endif \ No newline at end of file diff --git a/Multiprotocol/GD00X_nrf24l01.ino b/Multiprotocol/GD00X_nrf24l01.ino index 9c8c49d..1fca51d 100644 --- a/Multiprotocol/GD00X_nrf24l01.ino +++ b/Multiprotocol/GD00X_nrf24l01.ino @@ -127,7 +127,7 @@ static void __attribute__((unused)) GD00X_send_packet() XN297L_SetFreqOffset(); // Set frequency offset } -static void __attribute__((unused)) GD00X_init() +static void __attribute__((unused)) GD00X_RF_init() { XN297L_Init(); if(sub_protocol==GD_V1) @@ -214,18 +214,17 @@ uint16_t GD00X_callback() return packet_period; } -uint16_t initGD00X() +void GD00X_init() { BIND_IN_PROGRESS; // autobind protocol GD00X_initialize_txid(); - GD00X_init(); + GD00X_RF_init(); hopping_frequency_no = 0; bind_counter=GD00X_BIND_COUNT; packet_period=sub_protocol==GD_V1?GD00X_PACKET_PERIOD:GD00X_V2_BIND_PACKET_PERIOD; packet_length=sub_protocol==GD_V1?GD00X_PAYLOAD_SIZE:GD00X_V2_PAYLOAD_SIZE; packet_count=0; len=0; - return GD00X_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/GW008_nrf24l01.ino b/Multiprotocol/GW008_nrf24l01.ino index c0a0339..2b6881b 100644 --- a/Multiprotocol/GW008_nrf24l01.ino +++ b/Multiprotocol/GW008_nrf24l01.ino @@ -75,7 +75,7 @@ static void __attribute__((unused)) GW008_send_packet(uint8_t bind) NRF24L01_SetPower(); // Set tx_power } -static void __attribute__((unused)) GW008_init() +static void __attribute__((unused)) GW008_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -148,14 +148,13 @@ uint16_t GW008_callback() return GW008_PACKET_PERIOD; } -uint16_t initGW008() +void GW008_init() { BIND_IN_PROGRESS; // autobind protocol GW008_initialize_txid(); phase = GW008_BIND1; - GW008_init(); + GW008_RF_init(); hopping_frequency_no = 0; - return GW008_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/H8_3D_nrf24l01.ino b/Multiprotocol/H8_3D_nrf24l01.ino index 9eef089..0279006 100644 --- a/Multiprotocol/H8_3D_nrf24l01.ino +++ b/Multiprotocol/H8_3D_nrf24l01.ino @@ -155,7 +155,7 @@ static void __attribute__((unused)) H8_3D_send_packet(uint8_t bind) NRF24L01_SetPower(); // Set tx_power } -static void __attribute__((unused)) H8_3D_init() +static void __attribute__((unused)) H8_3D_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -238,12 +238,12 @@ static void __attribute__((unused)) H8_3D_initialize_txid() } } -uint16_t initH8_3D(void) +void H8_3D_init(void) { BIND_IN_PROGRESS; // autobind protocol bind_counter = H8_3D_BIND_COUNT; H8_3D_initialize_txid(); - H8_3D_init(); + H8_3D_RF_init(); switch(sub_protocol) { case H8_3D: @@ -257,7 +257,6 @@ uint16_t initH8_3D(void) packet_period=H20MINI_PACKET_PERIOD; break; } - return H8_3D_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/HOTT_cc2500.ino b/Multiprotocol/HOTT_cc2500.ino index 0f11c6f..159e7d7 100644 --- a/Multiprotocol/HOTT_cc2500.ino +++ b/Multiprotocol/HOTT_cc2500.ino @@ -137,7 +137,7 @@ const uint8_t PROGMEM HOTT_hop[][HOTT_NUM_RF_CHANNELS]= }; const uint16_t PROGMEM HOTT_hop_val[] = { 0xC06B, 0xC34A, 0xDB24, 0x8E09, 0x272E, 0x217F, 0x155B, 0xEDE8, 0x1D31, 0x0986, 0x56F7, 0x6454, 0xC42D, 0x01D2, 0xC253, 0x1180 }; -static void __attribute__((unused)) HOTT_init() +static void __attribute__((unused)) HOTT_TXID_init() { packet[0] = pgm_read_word_near( &HOTT_hop_val[num_ch] ); packet[1] = pgm_read_word_near( &HOTT_hop_val[num_ch] )>>8; @@ -277,7 +277,7 @@ static void __attribute__((unused)) HOTT_prep_data_packet() rf_ch_num=hopping_frequency[hopping_frequency_no]; } -uint16_t ReadHOTT() +uint16_t HOTT_callback() { switch(phase) { @@ -383,7 +383,7 @@ uint16_t ReadHOTT() for(uint8_t i=0; i<5; i++) eeprom_write_byte((EE_ADDR)(addr+i),packet_in[5+i]); BIND_DONE; - HOTT_init(); + HOTT_TXID_init(); } #ifdef HOTT_FW_TELEMETRY else @@ -509,10 +509,10 @@ uint16_t ReadHOTT() return 0; } -uint16_t initHOTT() +void HOTT_init() { num_ch=random(0xfefefefe)%16; - HOTT_init(); + HOTT_TXID_init(); HOTT_rf_init(); #ifdef HOTT_FW_TELEMETRY HoTT_SerialRX_val=0; @@ -527,7 +527,6 @@ uint16_t initHOTT() state=HOTT_SENSOR_SEARCH_PERIOD; #endif phase = HOTT_START; - return 10000; } #endif \ No newline at end of file diff --git a/Multiprotocol/Height_a7105.ino b/Multiprotocol/Height_a7105.ino index 6377459..2f4423a 100644 --- a/Multiprotocol/Height_a7105.ino +++ b/Multiprotocol/Height_a7105.ino @@ -41,7 +41,7 @@ static void __attribute__((unused)) HEIGHT_build_packet() } } -uint16_t ReadHeight() +uint16_t HEIGHT_callback() { #ifndef FORCE_HEIGHT_TUNING A7105_AdjustLOBaseFreq(1); @@ -78,7 +78,7 @@ uint16_t ReadHeight() return 1500; } -uint16_t initHeight() +void HEIGHT_init() { A7105_Init(); @@ -94,7 +94,6 @@ uint16_t initHeight() phase=255; bind_counter = HEIGHT_BIND_COUNT; - return 2400; } #endif // Normal packet is 8 bytes: 0xA5 0xAF 0x59 0x84 0x7A 0x00 0x80 0xFF diff --git a/Multiprotocol/Hisky_nrf24l01.ino b/Multiprotocol/Hisky_nrf24l01.ino index 6cb5015..4e2cf4c 100644 --- a/Multiprotocol/Hisky_nrf24l01.ino +++ b/Multiprotocol/Hisky_nrf24l01.ino @@ -27,7 +27,7 @@ uint8_t bind_buf_arry[4][10]; // HiSky protocol uses TX id as an address for nRF24L01, and uses frequency hopping sequence // which does not depend on this id and is passed explicitly in binding sequence. So we are free // to generate this sequence as we wish. It should be in the range [02..77] -static void __attribute__((unused)) calc_fh_channels() +static void __attribute__((unused)) HISKY_calc_fh_channels() { uint8_t idx = 0; uint32_t rnd = MProtocol_id; @@ -61,7 +61,7 @@ static void __attribute__((unused)) calc_fh_channels() } } -static void __attribute__((unused)) build_binding_packet(void) +static void __attribute__((unused)) HISKY_build_binding_packet(void) { uint8_t i; uint16_t sum=0; @@ -95,7 +95,7 @@ static void __attribute__((unused)) build_binding_packet(void) } } -static void __attribute__((unused)) hisky_init() +static void __attribute__((unused)) HISKY_RF_init() { NRF24L01_Initialize(); @@ -116,7 +116,7 @@ static void __attribute__((unused)) hisky_init() // HiSky channel sequence: AILE ELEV THRO RUDD GEAR PITCH, channel data value is from 0 to 1000 // Channel 7 - Gyro mode, 0 - 6 axis, 3 - 3 axis -static void __attribute__((unused)) build_ch_data() +static void __attribute__((unused)) HISKY_build_ch_data() { uint16_t temp; uint8_t i,j; @@ -133,7 +133,7 @@ static void __attribute__((unused)) build_ch_data() } } -uint16_t hisky_cb() +uint16_t HISKY_callback() { phase++; if(sub_protocol==HK310) @@ -223,7 +223,7 @@ uint16_t hisky_cb() #ifdef MULTI_SYNC telemetry_set_input_sync(9000); #endif - build_ch_data(); + HISKY_build_ch_data(); break; case 8: break; @@ -236,7 +236,7 @@ uint16_t hisky_cb() return 1000; // send 1 binding packet and 1 data packet per 9ms } -static void __attribute__((unused)) initialize_tx_id() +static void __attribute__((unused)) HISKY_initialize_tx_id() { //Generate frequency hopping table if(sub_protocol==HK310) @@ -248,14 +248,14 @@ static void __attribute__((unused)) initialize_tx_id() hopping_frequency[i]=hopping_frequency_no++; // Sequential order hop channels... } else - calc_fh_channels(); + HISKY_calc_fh_channels(); } -uint16_t initHiSky() +void HISKY_init() { - initialize_tx_id(); - build_binding_packet(); - hisky_init(); + HISKY_initialize_tx_id(); + HISKY_build_binding_packet(); + HISKY_RF_init(); phase = 0; hopping_frequency_no = 0; binding_idx = 0; @@ -264,7 +264,6 @@ uint16_t initHiSky() bind_counter = HISKY_BIND_COUNT; else bind_counter = 0; - return 1000; } #endif diff --git a/Multiprotocol/Hitec_cc2500.ino b/Multiprotocol/Hitec_cc2500.ino index fd98381..924d4d3 100644 --- a/Multiprotocol/Hitec_cc2500.ino +++ b/Multiprotocol/Hitec_cc2500.ino @@ -219,7 +219,7 @@ static void __attribute__((unused)) HITEC_send_packet() packet[23] >>= 1; // packet sequence } -uint16_t ReadHITEC() +uint16_t HITEC_callback() { switch(phase) { @@ -389,7 +389,7 @@ uint16_t ReadHITEC() return 0; } -uint16_t initHITEC() +void HITEC_init() { HITEC_RF_channels(); #ifdef HITEC_FORCE_ID // ID and channels taken from dump @@ -399,7 +399,6 @@ uint16_t initHITEC() memcpy((void *)hopping_frequency,(void *)"\x00\x3A\x4A\x32\x0C\x58\x2A\x10\x26\x20\x08\x60\x68\x70\x78\x80\x88\x56\x5E\x66\x6E",HITEC_NUM_FREQUENCE); #endif phase = HITEC_START; - return 10000; } /* Full telemetry diff --git a/Multiprotocol/Hontai_nrf24l01.ino b/Multiprotocol/Hontai_nrf24l01.ino index 3d468d8..238d96c 100644 --- a/Multiprotocol/Hontai_nrf24l01.ino +++ b/Multiprotocol/Hontai_nrf24l01.ino @@ -148,7 +148,7 @@ static void __attribute__((unused)) HONTAI_send_packet(uint8_t bind) NRF24L01_SetPower(); } -static void __attribute__((unused)) HONTAI_init() +static void __attribute__((unused)) HONTAI_RF_init() { NRF24L01_Initialize(); @@ -252,13 +252,12 @@ uint16_t HONTAI_callback() return packet_period; } -uint16_t initHONTAI() +void HONTAI_init() { BIND_IN_PROGRESS; // autobind protocol bind_counter = HONTAI_BIND_COUNT; HONTAI_initialize_txid(); - HONTAI_init(); + HONTAI_RF_init(); packet_period = sub_protocol == FQ777_951 ? FQ777_951_PACKET_PERIOD : HONTAI_PACKET_PERIOD; - return HONTAI_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/Hubsan_a7105.ino b/Multiprotocol/Hubsan_a7105.ino index e0f8b29..d23d658 100644 --- a/Multiprotocol/Hubsan_a7105.ino +++ b/Multiprotocol/Hubsan_a7105.ino @@ -285,7 +285,7 @@ static uint8_t __attribute__((unused)) hubsan_check_integrity() } #endif -uint16_t ReadHubsan() +uint16_t HUBSAN_callback() { #ifdef HUBSAN_HUB_TELEMETRY static uint8_t rfMode=0; @@ -446,7 +446,7 @@ uint16_t ReadHubsan() return 0; } -uint16_t initHubsan() +void HUBSAN_init() { const uint8_t allowed_ch[] = {0x14, 0x1e, 0x28, 0x32, 0x3c, 0x46, 0x50, 0x5a, 0x64, 0x6e, 0x78, 0x82}; A7105_Init(); @@ -467,7 +467,6 @@ uint16_t initHubsan() } packet_count=0; bind_phase=0; - return 10000; } #endif diff --git a/Multiprotocol/J6Pro_cyrf6936.ino b/Multiprotocol/J6Pro_cyrf6936.ino index 591f3a1..adb8ba0 100644 --- a/Multiprotocol/J6Pro_cyrf6936.ino +++ b/Multiprotocol/J6Pro_cyrf6936.ino @@ -126,7 +126,7 @@ static void __attribute__((unused)) j6pro_set_radio_channels() hopping_frequency[3] = hopping_frequency[0]; } -uint16_t ReadJ6Pro() +uint16_t J6PRO_callback() { uint16_t start; @@ -226,7 +226,7 @@ uint16_t ReadJ6Pro() return 0; } -uint16_t initJ6Pro() +void J6PRO_init() { j6pro_cyrf_init(); @@ -234,7 +234,6 @@ uint16_t initJ6Pro() phase = J6PRO_BIND; else phase = J6PRO_CHANSEL; - return 2400; } #endif diff --git a/Multiprotocol/JJRC345_nrf24l01.ino b/Multiprotocol/JJRC345_nrf24l01.ino index 00a0d4e..907f615 100644 --- a/Multiprotocol/JJRC345_nrf24l01.ino +++ b/Multiprotocol/JJRC345_nrf24l01.ino @@ -130,7 +130,7 @@ static void __attribute__((unused)) JJRC345_send_packet() NRF24L01_SetPower(); // Set tx_power } -static void __attribute__((unused)) JJRC345_init() +static void __attribute__((unused)) JJRC345_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -183,13 +183,12 @@ static void __attribute__((unused)) JJRC345_initialize_txid() #endif } -uint16_t initJJRC345(void) +void JJRC345_init(void) { BIND_IN_PROGRESS; // autobind protocol bind_counter = JJRC345_BIND_COUNT; JJRC345_initialize_txid(); - JJRC345_init(); - return JJRC345_INITIAL_WAIT; + JJRC345_RF_init(); } #endif diff --git a/Multiprotocol/KF606_nrf24l01.ino b/Multiprotocol/KF606_nrf24l01.ino index 290f444..f216f91 100644 --- a/Multiprotocol/KF606_nrf24l01.ino +++ b/Multiprotocol/KF606_nrf24l01.ino @@ -76,7 +76,7 @@ static void __attribute__((unused)) KF606_initialize_txid() #endif } -static void __attribute__((unused)) KF606_init() +static void __attribute__((unused)) KF606_RF_init() { XN297L_Init(); XN297L_SetTXAddr((uint8_t*)"\xe7\xe7\xe7\xe7\xe7", 5); @@ -99,14 +99,13 @@ uint16_t KF606_callback() return KF606_PACKET_PERIOD; } -uint16_t initKF606() +void KF606_init() { BIND_IN_PROGRESS; // autobind protocol KF606_initialize_txid(); - KF606_init(); + KF606_RF_init(); hopping_frequency_no = 0; bind_counter=KF606_BIND_COUNT; - return KF606_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/KN_nrf24l01.ino b/Multiprotocol/KN_nrf24l01.ino index 54d26da..4abb116 100644 --- a/Multiprotocol/KN_nrf24l01.ino +++ b/Multiprotocol/KN_nrf24l01.ino @@ -239,7 +239,7 @@ static void __attribute__((unused)) kn_calculate_freqency_hopping_channels() // V977 needs payload length in the packet. We should configure 24L01 to enable Packet Control Field(PCF) // Some RX reg settings are actually for enable PCF //------------------------------------------------------------------------------------------------- -static void __attribute__((unused)) kn_init() +static void __attribute__((unused)) KN_RF_init() { kn_calculate_tx_addr(); kn_calculate_freqency_hopping_channels(); @@ -272,7 +272,7 @@ static void __attribute__((unused)) kn_init() //================================================================================================ // Private Functions //================================================================================================ -uint16_t initKN() +void KN_init() { if(sub_protocol==WLTOYS) { @@ -288,13 +288,11 @@ uint16_t initKN() packet_count = KN_FX_PACKET_SEND_COUNT; seed = KN_FX_PACKET_SEND_COUNT * KN_FX_SENDING_PACKET_PERIOD; } - kn_init(); + KN_RF_init(); phase = IS_BIND_IN_PROGRESS ? KN_PHASE_PRE_BIND : KN_PHASE_PRE_SEND; - - return KN_INIT_WAIT_MS; } -uint16_t kn_callback() +uint16_t KN_callback() { switch (phase) { diff --git a/Multiprotocol/Kyosho_a7105.ino b/Multiprotocol/Kyosho_a7105.ino index 9defaca..18c24c7 100644 --- a/Multiprotocol/Kyosho_a7105.ino +++ b/Multiprotocol/Kyosho_a7105.ino @@ -23,7 +23,7 @@ //Kyosho constants & variables #define KYOSHO_BIND_COUNT 2500 -static void __attribute__((unused)) kyosho_send_packet() +static void __attribute__((unused)) KYOSHO_send_packet() { //ID packet[1] = rx_tx_addr[0]; @@ -77,7 +77,7 @@ static void __attribute__((unused)) kyosho_send_packet() A7105_WriteData(37, rf_ch_num); } -static void __attribute__((unused)) kyosho_hype_send_packet() +static void __attribute__((unused)) KYOSHO_hype_send_packet() { if(IS_BIND_IN_PROGRESS) { @@ -124,7 +124,7 @@ static void __attribute__((unused)) kyosho_hype_send_packet() } } -uint16_t ReadKyosho() +uint16_t KYOSHO_callback() { #ifndef FORCE_KYOSHO_TUNING A7105_AdjustLOBaseFreq(1); @@ -151,13 +151,13 @@ uint16_t ReadKyosho() #endif } if(sub_protocol==KYOSHO_FHSS) - kyosho_send_packet(); + KYOSHO_send_packet(); else//HYPE - kyosho_hype_send_packet(); + KYOSHO_hype_send_packet(); return packet_period; } -uint16_t initKyosho() +void KYOSHO_init() { A7105_Init(); @@ -197,6 +197,5 @@ uint16_t initKyosho() packet_sent=0; packet_period=3852; //FHSS - return 2000; } #endif diff --git a/Multiprotocol/LOLI_nrf24l01.ino b/Multiprotocol/LOLI_nrf24l01.ino index 01aed60..4ec6086 100644 --- a/Multiprotocol/LOLI_nrf24l01.ino +++ b/Multiprotocol/LOLI_nrf24l01.ino @@ -21,7 +21,7 @@ Multiprotocol is distributed in the hope that it will be useful, #define LOLI_PACKET_SIZE 11 #define LOLI_NUM_CHANNELS 5 -static void __attribute__((unused)) LOLI_init() +static void __attribute__((unused)) LOLI_RF_init() { NRF24L01_Initialize(); NRF24L01_FlushTx(); @@ -290,7 +290,7 @@ uint16_t LOLI_callback() return 20000; } -uint16_t initLOLI() +void LOLI_init() { rx_tx_addr[1] %= 0x30; calc_fh_channels(LOLI_NUM_CHANNELS); @@ -306,9 +306,7 @@ uint16_t initLOLI() else phase = LOLI_PREP_DATA; - LOLI_init(); - - return 500; + LOLI_RF_init(); } #endif diff --git a/Multiprotocol/MJXQ_nrf24l01.ino b/Multiprotocol/MJXQ_nrf24l01.ino index 04c0a07..356f655 100644 --- a/Multiprotocol/MJXQ_nrf24l01.ino +++ b/Multiprotocol/MJXQ_nrf24l01.ino @@ -223,7 +223,7 @@ static void __attribute__((unused)) MJXQ_send_packet(uint8_t bind) hopping_frequency_no %= 2 * MJXQ_RF_NUM_CHANNELS; // channels repeated } -static void __attribute__((unused)) MJXQ_init() +static void __attribute__((unused)) MJXQ_RF_init() { uint8_t addr[MJXQ_ADDRESS_LENGTH]; memcpy(addr, "\x6d\x6a\x77\x77\x77", MJXQ_ADDRESS_LENGTH); @@ -350,14 +350,13 @@ uint16_t MJXQ_callback() return MJXQ_PACKET_PERIOD; } -uint16_t initMJXQ(void) +void MJXQ_init(void) { BIND_IN_PROGRESS; // autobind protocol bind_counter = MJXQ_BIND_COUNT; MJXQ_initialize_txid(); - MJXQ_init(); + MJXQ_RF_init(); packet_count=0; - return MJXQ_INITIAL_WAIT+MJXQ_PACKET_PERIOD; } #endif diff --git a/Multiprotocol/MLINK_cyrf6936.ino b/Multiprotocol/MLINK_cyrf6936.ino index ea2da8a..4e93a71 100644 --- a/Multiprotocol/MLINK_cyrf6936.ino +++ b/Multiprotocol/MLINK_cyrf6936.ino @@ -318,7 +318,7 @@ static void __attribute__((unused)) MLINK_send_data_packet() } #endif -uint16_t ReadMLINK() +uint16_t MLINK_callback() { uint8_t status; uint16_t start; @@ -511,7 +511,7 @@ static void __attribute__((unused)) MLINK_shuffle_freqs(uint32_t seed, uint8_t * } } -uint16_t initMLINK() +void MLINK_init() { MLINK_cyrf_config(); @@ -582,8 +582,6 @@ uint16_t initMLINK() } else phase = MLINK_PREP_DATA; - - return 10000; } #endif diff --git a/Multiprotocol/MT99xx_nrf24l01.ino b/Multiprotocol/MT99xx_nrf24l01.ino index 00ca9db..3175956 100644 --- a/Multiprotocol/MT99xx_nrf24l01.ino +++ b/Multiprotocol/MT99xx_nrf24l01.ino @@ -222,7 +222,7 @@ static void __attribute__((unused)) MT99XX_send_packet() NRF24L01_SetPower(); } -static void __attribute__((unused)) MT99XX_init() +static void __attribute__((unused)) MT99XX_RF_init() { NRF24L01_Initialize(); if(sub_protocol == YZ) @@ -315,18 +315,17 @@ uint16_t MT99XX_callback() return packet_period; } -uint16_t initMT99XX(void) +void MT99XX_init(void) { if(sub_protocol != A180) BIND_IN_PROGRESS; // autobind protocol bind_counter = MT99XX_BIND_COUNT; MT99XX_initialize_txid(); - MT99XX_init(); + MT99XX_RF_init(); packet_period = MT99XX_PACKET_PERIOD_MT; packet_count=0; - return MT99XX_INITIAL_WAIT+MT99XX_PACKET_PERIOD_MT; } #endif diff --git a/Multiprotocol/Multi_Names.ino b/Multiprotocol/Multi_Names.ino deleted file mode 100644 index b414109..0000000 --- a/Multiprotocol/Multi_Names.ino +++ /dev/null @@ -1,429 +0,0 @@ -/* - 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(MULTI_NAMES) - -const char STR_FLYSKY[] ="FlySky"; -const char STR_HUBSAN[] ="Hubsan"; -const char STR_FRSKYD[] ="FrSky D"; -const char STR_HISKY[] ="Hisky"; -const char STR_V2X2[] ="V2x2"; -const char STR_DSM[] ="DSM"; -const char STR_DSM_RX[] ="DSM_RX"; -const char STR_DEVO[] ="Devo"; -const char STR_YD717[] ="YD717"; -const char STR_KN[] ="KN"; -const char STR_SYMAX[] ="SymaX"; -const char STR_SLT[] ="SLT"; -const char STR_CX10[] ="CX10"; -const char STR_CG023[] ="CG023"; -const char STR_BAYANG[] ="Bayang"; -const char STR_FRSKYL[] ="FrSky L"; -const char STR_FRSKYX[] ="FrSky X"; -const char STR_FRSKYX2[] ="FrSkyX2"; -const char STR_ESKY[] ="ESky"; -const char STR_MT99XX[] ="MT99XX"; -const char STR_MJXQ[] ="MJXq"; -const char STR_SHENQI[] ="Shenqi"; -const char STR_FY326[] ="FY326"; -const char STR_FUTABA[] ="Futaba"; -const char STR_J6PRO[] ="J6 Pro"; -const char STR_JJRC345[] ="JJRC345"; -const char STR_FQ777[] ="FQ777"; -const char STR_ASSAN[] ="Assan"; -const char STR_FRSKYV[] ="FrSky V"; -const char STR_HONTAI[] ="Hontai"; -const char STR_AFHDS2A[] ="FlSky2A"; -const char STR_Q2X2[] ="Q2x2"; -const char STR_WK2x01[] ="Walkera"; -const char STR_Q303[] ="Q303"; -const char STR_Q90C[] ="Q90C"; -const char STR_GW008[] ="GW008"; -const char STR_DM002[] ="DM002"; -const char STR_CABELL[] ="Cabell"; -const char STR_ESKY150[] ="Esky150"; -const char STR_ESKY150V2[] ="EskyV2"; -const char STR_H8_3D[] ="H8 3D"; -const char STR_CORONA[] ="Corona"; -const char STR_CFLIE[] ="CFlie"; -const char STR_HITEC[] ="Hitec"; -const char STR_WFLY[] ="WFLY"; -const char STR_WFLY2[] ="WFLY2"; -const char STR_BUGS[] ="Bugs"; -const char STR_BUGSMINI[] ="BugMini"; -const char STR_TRAXXAS[] ="Traxxas"; -const char STR_NCC1701[] ="NCC1701"; -const char STR_E01X[] ="E01X"; -const char STR_V911S[] ="V911S"; -const char STR_GD00X[] ="GD00x"; -const char STR_V761[] ="V761"; -const char STR_KF606[] ="KF606"; -const char STR_REDPINE[] ="Redpine"; -const char STR_POTENSIC[] ="Potensi"; -const char STR_ZSX[] ="ZSX"; -const char STR_HEIGHT[] ="Height"; -const char STR_SCANNER[] ="Scanner"; -const char STR_FRSKY_RX[] ="FrSkyRX"; -const char STR_AFHDS2A_RX[] ="FS2A_RX"; -const char STR_HOTT[] ="HoTT"; -const char STR_FX816[] ="FX816"; -const char STR_BAYANG_RX[] ="BayanRX"; -const char STR_PELIKAN[] ="Pelikan"; -const char STR_TIGER[] ="Tiger"; -const char STR_XK[] ="XK"; -const char STR_XN297DUMP[] ="XN297DP"; -const char STR_FRSKYR9[] ="FrSkyR9"; -const char STR_PROPEL[] ="Propel"; -const char STR_SKYARTEC[] ="Skyartc"; -const char STR_KYOSHO[] ="Kyosho"; -const char STR_RLINK[] ="RadLink"; -const char STR_REALACC[] ="Realacc"; -const char STR_OMP[] ="OMP"; -const char STR_MLINK[] ="M-Link"; -const char STR_TEST[] ="Test"; -const char STR_NANORF[] ="NanoRF"; -const char STR_E016HV2[] ="E016Hv2"; -const char STR_E010R5[] ="E010r5"; -const char STR_LOLI[] ="LOLI"; -const char STR_E129[] ="E129"; - -const char STR_SUBTYPE_FLYSKY[] = "\x04""Std\0""V9x9""V6x6""V912""CX20"; -const char STR_SUBTYPE_HUBSAN[] = "\x04""H107""H301""H501"; -const char STR_SUBTYPE_FRSKYD[] = "\x06""D8\0 ""Cloned"; -const char STR_SUBTYPE_FRSKYX[] = "\x07""D16\0 ""D16 8ch""LBT(EU)""LBT 8ch""Cloned\0""Clo 8ch"; -const char STR_SUBTYPE_HISKY[] = "\x05""Std\0 ""HK310"; -const char STR_SUBTYPE_V2X2[] = "\x06""Std\0 ""JXD506""MR101\0"; -const char STR_SUBTYPE_DSM[] = "\x04""2 1F""2 2F""X 1F""X 2F""Auto"; -const char STR_SUBTYPE_DEVO[] = "\x04""8ch\0""10ch""12ch""6ch\0""7ch\0"; -const char STR_SUBTYPE_YD717[] = "\x07""Std\0 ""SkyWlkr""Syma X4""XINXUN\0""NIHUI\0 "; -const char STR_SUBTYPE_KN[] = "\x06""WLtoys""FeiLun"; -const char STR_SUBTYPE_SYMAX[] = "\x03""Std""X5C"; -const char STR_SUBTYPE_SLT[] = "\x06""V1_6ch""V2_8ch""Q100\0 ""Q200\0 ""MR100\0"; -const char STR_SUBTYPE_CX10[] = "\x07""Green\0 ""Blue\0 ""DM007\0 ""-\0 ""JC3015a""JC3015b""MK33041"; -const char STR_SUBTYPE_CG023[] = "\x05""Std\0 ""YD829"; -const char STR_SUBTYPE_BAYANG[] = "\x07""Std\0 ""H8S3D\0 ""X16 AH\0""IRDrone""DHD D4\0""QX100\0 "; -const char STR_SUBTYPE_MT99[] = "\x05""MT99\0""H7\0 ""YZ\0 ""LS\0 ""FY805""A180\0"; -const char STR_SUBTYPE_MJXQ[] = "\x07""WLH08\0 ""X600\0 ""X800\0 ""H26D\0 ""E010\0 ""H26WH\0 ""Phoenix"; -const char STR_SUBTYPE_FY326[] = "\x05""Std\0 ""FY319"; -const char STR_SUBTYPE_HONTAI[] = "\x07""Std\0 ""JJRC X1""X5C1\0 ""FQ_951"; -const char STR_SUBTYPE_AFHDS2A[] = "\x08""PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS""PWM,IB16""PPM,IB16""PWM,SB16""PPM,SB16"; -const char STR_SUBTYPE_Q2X2[] = "\x04""Q222""Q242""Q282"; -const char STR_SUBTYPE_WK2x01[] = "\x06""WK2801""WK2401""W6_5_1""W6_6_1""W6_HeL""W6_HeI"; -const char STR_SUBTYPE_Q303[] = "\x06""Std\0 ""CX35\0 ""CX10D\0""CX10WD"; -const char STR_SUBTYPE_CABELL[] = "\x07""V3\0 ""V3 Telm""-\0 ""-\0 ""-\0 ""-\0 ""F-Safe\0""Unbind\0"; -const char STR_SUBTYPE_H83D[] = "\x07""Std\0 ""H20H\0 ""H20Mini""H30Mini"; -const char STR_SUBTYPE_CORONA[] = "\x05""V1\0 ""V2\0 ""FD V3"; -const char STR_SUBTYPE_HITEC[] = "\x07""Optima\0""Opt Hub""Minima\0"; -const char STR_SUBTYPE_BUGS_MINI[] = "\x06""Std\0 ""Bugs3H"; -const char STR_SUBTYPE_TRAXXAS[] = "\x04""6519"; -const char STR_SUBTYPE_E01X[] = "\x05""E012\0""E015\0""E016H"; -const char STR_SUBTYPE_GD00X[] = "\x05""GD_V1""GD_V2"; -const char STR_SUBTYPE_REDPINE[] = "\x04""Fast""Slow"; -const char STR_SUBTYPE_POTENSIC[] = "\x03""A20"; -const char STR_SUBTYPE_ZSX[] = "\x07""280JJRC"; -const char STR_SUBTYPE_HEIGHT[] = "\x03""5ch""8ch"; -const char STR_SUBTYPE_FX816[] = "\x03""P38"; -const char STR_SUBTYPE_XN297DUMP[] = "\x07""250Kbps""1Mbps\0 ""2Mbps\0 ""Auto\0 ""NRF\0 "; -const char STR_SUBTYPE_ESKY150[] = "\x03""4ch""7ch"; -const char STR_SUBTYPE_ESKY150V2[] = "\x05""150V2"; -const char STR_SUBTYPE_V911S[] = "\x05""V911S""E119\0"; -const char STR_SUBTYPE_XK[] = "\x04""X450""X420"; -const char STR_SUBTYPE_FRSKYR9[] = "\x07""915MHz\0""868MHz\0""915 8ch""868 8ch""FCC\0 ""--\0 ""FCC 8ch""-- 8ch\0"; -const char STR_SUBTYPE_ESKY[] = "\x03""Std""ET4"; -const char STR_SUBTYPE_PROPEL[] = "\x04""74-Z"; -const char STR_SUBTYPE_FRSKY_RX[] = "\x07""RX\0 ""CloneTX""EraseTX"; -const char STR_SUBTYPE_FRSKYL[] = "\x08""LR12\0 ""LR12 6ch"; -const char STR_SUBTYPE_WFLY[] = "\x05""WFR0x"; -const char STR_SUBTYPE_WFLY2[] = "\x05""RF20x"; -const char STR_SUBTYPE_HOTT[] = "\x07""Sync\0 ""No_Sync"; -const char STR_SUBTYPE_PELIKAN[] = "\x04""Pro\0""Lite"; -const char STR_SUBTYPE_V761[] = "\x03""3ch""4ch"; -const char STR_SUBTYPE_RLINK[] = "\x07""Surface""Air\0 ""DumboRC"; -const char STR_SUBTYPE_REALACC[] = "\x03""R11"; -const char STR_SUBTYPE_KYOSHO[] = "\x04""FHSS""Hype"; -const char STR_SUBTYPE_FUTABA[] = "\x05""SFHSS"; -const char STR_SUBTYPE_JJRC345[] = "\x08""JJRC345\0""SkyTmblr"; - -enum -{ - OPTION_NONE, - OPTION_OPTION, - OPTION_RFTUNE, - OPTION_VIDFREQ, - OPTION_FIXEDID, - OPTION_TELEM, - OPTION_SRVFREQ, - OPTION_MAXTHR, - OPTION_RFCHAN, - OPTION_RFPOWER, -}; - -#define NO_SUBTYPE nullptr - -const mm_protocol_definition multi_protocols[] = { -// Protocol number, Protocol String, Number of sub_protocols, Sub_protocol strings, Option type - #if defined(ASSAN_NRF24L01_INO) - {PROTO_ASSAN, STR_ASSAN, 0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(BAYANG_NRF24L01_INO) - {PROTO_BAYANG, STR_BAYANG, 6, STR_SUBTYPE_BAYANG, OPTION_TELEM }, - #endif - #if defined(BAYANG_RX_NRF24L01_INO) - {PROTO_BAYANG_RX, STR_BAYANG_RX, 0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(BUGS_A7105_INO) - {PROTO_BUGS, STR_BUGS, 0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(BUGSMINI_NRF24L01_INO) - {PROTO_BUGSMINI, STR_BUGSMINI, 2, STR_SUBTYPE_BUGS_MINI, OPTION_NONE }, - #endif - #if defined(CABELL_NRF24L01_INO) - {PROTO_CABELL, STR_CABELL, 8, STR_SUBTYPE_CABELL, OPTION_OPTION }, - #endif - #if defined(CFLIE_NRF24L01_INO) - {PROTO_CFLIE, STR_CFLIE, 0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(CG023_NRF24L01_INO) - {PROTO_CG023, STR_CG023, 2, STR_SUBTYPE_CG023, OPTION_NONE }, - #endif - #if defined(CORONA_CC2500_INO) - {PROTO_CORONA, STR_CORONA, 3, STR_SUBTYPE_CORONA, OPTION_RFTUNE }, - #endif - #if defined(CX10_NRF24L01_INO) - {PROTO_CX10, STR_CX10, 7, STR_SUBTYPE_CX10, OPTION_NONE }, - #endif - #if defined(DEVO_CYRF6936_INO) - {PROTO_DEVO, STR_DEVO, 5, STR_SUBTYPE_DEVO, OPTION_FIXEDID }, - #endif - #if defined(DM002_NRF24L01_INO) - {PROTO_DM002, STR_DM002, 0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(DSM_CYRF6936_INO) - {PROTO_DSM, STR_DSM, 5, STR_SUBTYPE_DSM, OPTION_MAXTHR }, - #endif - #if defined(DSM_RX_CYRF6936_INO) - {PROTO_DSM_RX, STR_DSM_RX, 0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(E010R5_CYRF6936_INO) - {PROTO_E010R5, STR_E010R5, 0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(E016HV2_CC2500_INO) - {PROTO_E016HV2, STR_E016HV2, 0, NO_SUBTYPE, OPTION_RFTUNE }, - #endif - #if defined(E01X_NRF24L01_INO) - {PROTO_E01X, STR_E01X, 3, STR_SUBTYPE_E01X, OPTION_OPTION }, - #endif - #if defined(E129_CYRF6936_INO) - {PROTO_E129, STR_E129, 0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(ESKY_NRF24L01_INO) - {PROTO_ESKY, STR_ESKY, 2, STR_SUBTYPE_ESKY, OPTION_NONE }, - #endif - #if defined(ESKY150_NRF24L01_INO) - {PROTO_ESKY150, STR_ESKY150, 2, STR_SUBTYPE_ESKY150, OPTION_NONE }, - #endif - #if defined(ESKY150V2_CC2500_INO) - {PROTO_ESKY150V2, STR_ESKY150V2, 1, STR_SUBTYPE_ESKY150V2, OPTION_RFTUNE }, - #endif - #if defined(FLYSKY_A7105_INO) - {PROTO_FLYSKY, STR_FLYSKY, 5, STR_SUBTYPE_FLYSKY, OPTION_NONE }, - #endif - #if defined(AFHDS2A_A7105_INO) - {PROTO_AFHDS2A, STR_AFHDS2A, 8, STR_SUBTYPE_AFHDS2A, OPTION_SRVFREQ }, - #endif - #if defined(AFHDS2A_RX_A7105_INO) - {PROTO_AFHDS2A_RX, STR_AFHDS2A_RX,0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(FQ777_NRF24L01_INO) - {PROTO_FQ777, STR_FQ777, 0, NO_SUBTYPE, OPTION_NONE }, - #endif -//OpenTX 2.3.x issue: DO NOT CHANGE ORDER below - #if defined(FRSKY_RX_CC2500_INO) - {PROTO_FRSKY_RX, STR_FRSKY_RX, 3, STR_SUBTYPE_FRSKY_RX, OPTION_RFTUNE }, - #endif - #if defined(FRSKYD_CC2500_INO) - {PROTO_FRSKYD, STR_FRSKYD, 2, STR_SUBTYPE_FRSKYD, OPTION_RFTUNE }, - #endif - #if defined(FRSKYV_CC2500_INO) - {PROTO_FRSKYV, STR_FRSKYV, 0, NO_SUBTYPE, OPTION_RFTUNE }, - #endif - #if defined(FRSKYX_CC2500_INO) - {PROTO_FRSKYX, STR_FRSKYX, 6, STR_SUBTYPE_FRSKYX, OPTION_RFTUNE }, - {PROTO_FRSKYX2, STR_FRSKYX2, 6, STR_SUBTYPE_FRSKYX, OPTION_RFTUNE }, - #endif -//OpenTX 2.3.x issue: DO NOT CHANGE ORDER above - #if defined(FRSKYL_CC2500_INO) - {PROTO_FRSKYL, STR_FRSKYL, 2, STR_SUBTYPE_FRSKYL, OPTION_RFTUNE }, - #endif - #if defined(FRSKYR9_SX1276_INO) - {PROTO_FRSKY_R9, STR_FRSKYR9, 8, STR_SUBTYPE_FRSKYR9, OPTION_NONE }, - #endif - #if defined(FUTABA_CC2500_INO) - {PROTO_FUTABA, STR_FUTABA, 1, STR_SUBTYPE_FUTABA, OPTION_RFTUNE }, - #endif - #if defined(FX816_NRF24L01_INO) - {PROTO_FX816, STR_FX816, 1, STR_SUBTYPE_FX816, OPTION_NONE }, - #endif - #if defined(FY326_NRF24L01_INO) - {PROTO_FY326, STR_FY326, 2, STR_SUBTYPE_FY326, OPTION_NONE }, - #endif - #if defined(GD00X_NRF24L01_INO) - {PROTO_GD00X, STR_GD00X, 2, STR_SUBTYPE_GD00X, OPTION_RFTUNE }, - #endif - #if defined(GW008_NRF24L01_INO) - {PROTO_GW008, STR_GW008, 0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(H8_3D_NRF24L01_INO) - {PROTO_H8_3D, STR_H8_3D, 4, STR_SUBTYPE_H83D, OPTION_NONE }, - #endif - #if defined(HEIGHT_A7105_INO) - {PROTO_HEIGHT, STR_HEIGHT, 2, STR_SUBTYPE_HEIGHT, OPTION_NONE }, - #endif - #if defined(HISKY_NRF24L01_INO) - {PROTO_HISKY, STR_HISKY, 2, STR_SUBTYPE_HISKY, OPTION_NONE }, - #endif - #if defined(HITEC_CC2500_INO) - {PROTO_HITEC, STR_HITEC, 3, STR_SUBTYPE_HITEC, OPTION_RFTUNE }, - #endif - #if defined(HONTAI_NRF24L01_INO) - {PROTO_HONTAI, STR_HONTAI, 4, STR_SUBTYPE_HONTAI, OPTION_NONE }, - #endif - #if defined(HOTT_CC2500_INO) - {PROTO_HOTT, STR_HOTT, 2, STR_SUBTYPE_HOTT, OPTION_RFTUNE }, - #endif - #if defined(HUBSAN_A7105_INO) - {PROTO_HUBSAN, STR_HUBSAN, 3, STR_SUBTYPE_HUBSAN, OPTION_VIDFREQ }, - #endif - #if defined(J6PRO_CYRF6936_INO) - {PROTO_J6PRO, STR_J6PRO, 0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(JJRC345_NRF24L01_INO) - {PROTO_JJRC345, STR_JJRC345, 2, STR_SUBTYPE_JJRC345, OPTION_NONE }, - #endif - #if defined(KF606_NRF24L01_INO) - {PROTO_KF606, STR_KF606, 0, NO_SUBTYPE, OPTION_RFTUNE }, - #endif - #if defined(KN_NRF24L01_INO) - {PROTO_KN, STR_KN, 2, STR_SUBTYPE_KN, OPTION_NONE }, - #endif - #if defined(KYOSHO_A7105_INO) - {PROTO_KYOSHO, STR_KYOSHO, 2, STR_SUBTYPE_KYOSHO, OPTION_NONE }, - #endif - #if defined(LOLI_NRF24L01_INO) - {PROTO_LOLI, STR_LOLI, 0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(MJXQ_NRF24L01_INO) - {PROTO_MJXQ, STR_MJXQ, 7, STR_SUBTYPE_MJXQ, OPTION_RFTUNE }, - #endif - #if defined(MLINK_CYRF6936_INO) - {PROTO_MLINK, STR_MLINK, 0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(MT99XX_NRF24L01_INO) - {PROTO_MT99XX, STR_MT99XX, 6, STR_SUBTYPE_MT99, OPTION_NONE }, - #endif - #if defined(NCC1701_NRF24L01_INO) - {PROTO_NCC1701, STR_NCC1701, 0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(OMP_CC2500_INO) - {PROTO_OMP, STR_OMP, 0, NO_SUBTYPE, OPTION_RFTUNE }, - #endif - #if defined(PELIKAN_A7105_INO) - {PROTO_PELIKAN, STR_PELIKAN , 2, STR_SUBTYPE_PELIKAN, OPTION_NONE }, - #endif - #if defined(POTENSIC_NRF24L01_INO) - {PROTO_POTENSIC, STR_POTENSIC, 1, STR_SUBTYPE_POTENSIC, OPTION_NONE }, - #endif - #if defined(PROPEL_NRF24L01_INO) - {PROTO_PROPEL, STR_PROPEL, 1, STR_SUBTYPE_PROPEL, OPTION_NONE }, - #endif - #if defined(CX10_NRF24L01_INO) - {PROTO_Q2X2, STR_Q2X2, 3, STR_SUBTYPE_Q2X2, OPTION_NONE }, - #endif - #if defined(Q303_NRF24L01_INO) - {PROTO_Q303, STR_Q303, 4, STR_SUBTYPE_Q303, OPTION_NONE }, - #endif - #if defined(Q90C_NRF24L01_INO) - {PROTO_Q90C, STR_Q90C, 0, NO_SUBTYPE, OPTION_RFTUNE }, - #endif - #if defined(RLINK_CC2500_INO) - {PROTO_RLINK, STR_RLINK, 3, STR_SUBTYPE_RLINK, OPTION_RFTUNE }, - #endif - #if defined(REALACC_NRF24L01_INO) - {PROTO_REALACC, STR_REALACC, 1, STR_SUBTYPE_REALACC, OPTION_NONE }, - #endif - #if defined(REDPINE_CC2500_INO) - {PROTO_REDPINE, STR_REDPINE, 2, STR_SUBTYPE_REDPINE, OPTION_RFTUNE }, - #endif - #if defined(SCANNER_CC2500_INO) - // {PROTO_SCANNER, STR_SCANNER, 0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(SHENQI_NRF24L01_INO) - {PROTO_SHENQI, STR_SHENQI, 0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(SKYARTEC_CC2500_INO) - {PROTO_SKYARTEC, STR_SKYARTEC, 0, NO_SUBTYPE, OPTION_RFTUNE }, - #endif - #if defined(SLT_NRF24L01_INO) - {PROTO_SLT, STR_SLT, 5, STR_SUBTYPE_SLT, OPTION_RFTUNE }, - #endif - #if defined(SYMAX_NRF24L01_INO) - {PROTO_SYMAX, STR_SYMAX, 2, STR_SUBTYPE_SYMAX, OPTION_NONE }, - #endif - #if defined(TIGER_NRF24L01_INO) - {PROTO_TIGER, STR_TIGER , 0, NO_SUBTYPE, OPTION_NONE }, - #endif - #if defined(TRAXXAS_CYRF6936_INO) - {PROTO_TRAXXAS, STR_TRAXXAS, 1, STR_SUBTYPE_TRAXXAS, OPTION_NONE }, - #endif - #if defined(V2X2_NRF24L01_INO) - {PROTO_V2X2, STR_V2X2, 3, STR_SUBTYPE_V2X2, OPTION_NONE }, - #endif - #if defined(V761_NRF24L01_INO) - {PROTO_V761, STR_V761, 2, STR_SUBTYPE_V761, OPTION_NONE }, - #endif - #if defined(V911S_NRF24L01_INO) - {PROTO_V911S, STR_V911S, 2, STR_SUBTYPE_V911S, OPTION_RFTUNE }, - #endif - #if defined(WK2x01_CYRF6936_INO) - {PROTO_WK2x01, STR_WK2x01, 6, STR_SUBTYPE_WK2x01, OPTION_NONE }, - #endif - #if defined(WFLY_CYRF6936_INO) - {PROTO_WFLY, STR_WFLY, 1, STR_SUBTYPE_WFLY, OPTION_NONE }, - #endif - #if defined(WFLY2_A7105_INO) - {PROTO_WFLY2, STR_WFLY2, 1, STR_SUBTYPE_WFLY2, OPTION_OPTION }, - #endif - #if defined(XK_NRF24L01_INO) - {PROTO_XK, STR_XK , 2, STR_SUBTYPE_XK, OPTION_RFTUNE }, - #endif - #if defined(XN297DUMP_NRF24L01_INO) - {PROTO_XN297DUMP, STR_XN297DUMP, 5, STR_SUBTYPE_XN297DUMP, OPTION_RFCHAN }, - #endif - #if defined(YD717_NRF24L01_INO) - {PROTO_YD717, STR_YD717, 5, STR_SUBTYPE_YD717, OPTION_NONE }, - #endif - #if defined(ZSX_NRF24L01_INO) - {PROTO_ZSX, STR_ZSX, 1, STR_SUBTYPE_ZSX, OPTION_NONE }, - #endif - #if defined(TEST_CC2500_INO) - {PROTO_TEST, STR_TEST, 0, NO_SUBTYPE, OPTION_RFTUNE }, - #endif - #if defined(NANORF_NRF24L01_INO) - {PROTO_NANORF, STR_NANORF, 0, NO_SUBTYPE, OPTION_NONE }, - #endif - {0x00, nullptr, 0, nullptr, 0 } -}; - -#endif \ No newline at end of file diff --git a/Multiprotocol/Multi_Protos.ino b/Multiprotocol/Multi_Protos.ino new file mode 100644 index 0000000..30a6da6 --- /dev/null +++ b/Multiprotocol/Multi_Protos.ino @@ -0,0 +1,426 @@ +/* + 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 . + */ + +const char STR_FLYSKY[] ="FlySky"; +const char STR_HUBSAN[] ="Hubsan"; +const char STR_FRSKYD[] ="FrSky D"; +const char STR_HISKY[] ="Hisky"; +const char STR_V2X2[] ="V2x2"; +const char STR_DSM[] ="DSM"; +const char STR_DSM_RX[] ="DSM_RX"; +const char STR_DEVO[] ="Devo"; +const char STR_YD717[] ="YD717"; +const char STR_KN[] ="KN"; +const char STR_SYMAX[] ="SymaX"; +const char STR_SLT[] ="SLT"; +const char STR_CX10[] ="CX10"; +const char STR_CG023[] ="CG023"; +const char STR_BAYANG[] ="Bayang"; +const char STR_FRSKYL[] ="FrSky L"; +const char STR_FRSKYX[] ="FrSky X"; +const char STR_FRSKYX2[] ="FrSkyX2"; +const char STR_ESKY[] ="ESky"; +const char STR_MT99XX[] ="MT99XX"; +const char STR_MJXQ[] ="MJXq"; +const char STR_SHENQI[] ="Shenqi"; +const char STR_FY326[] ="FY326"; +const char STR_FUTABA[] ="Futaba"; +const char STR_J6PRO[] ="J6 Pro"; +const char STR_JJRC345[] ="JJRC345"; +const char STR_FQ777[] ="FQ777"; +const char STR_ASSAN[] ="Assan"; +const char STR_FRSKYV[] ="FrSky V"; +const char STR_HONTAI[] ="Hontai"; +const char STR_AFHDS2A[] ="FlSky2A"; +const char STR_Q2X2[] ="Q2x2"; +const char STR_WK2x01[] ="Walkera"; +const char STR_Q303[] ="Q303"; +const char STR_Q90C[] ="Q90C"; +const char STR_GW008[] ="GW008"; +const char STR_DM002[] ="DM002"; +const char STR_CABELL[] ="Cabell"; +const char STR_ESKY150[] ="Esky150"; +const char STR_ESKY150V2[] ="EskyV2"; +const char STR_H8_3D[] ="H8 3D"; +const char STR_CORONA[] ="Corona"; +const char STR_CFLIE[] ="CFlie"; +const char STR_HITEC[] ="Hitec"; +const char STR_WFLY[] ="WFLY"; +const char STR_WFLY2[] ="WFLY2"; +const char STR_BUGS[] ="Bugs"; +const char STR_BUGSMINI[] ="BugMini"; +const char STR_TRAXXAS[] ="Traxxas"; +const char STR_NCC1701[] ="NCC1701"; +const char STR_E01X[] ="E01X"; +const char STR_V911S[] ="V911S"; +const char STR_GD00X[] ="GD00x"; +const char STR_V761[] ="V761"; +const char STR_KF606[] ="KF606"; +const char STR_REDPINE[] ="Redpine"; +const char STR_POTENSIC[] ="Potensi"; +const char STR_ZSX[] ="ZSX"; +const char STR_HEIGHT[] ="Height"; +const char STR_SCANNER[] ="Scanner"; +const char STR_FRSKY_RX[] ="FrSkyRX"; +const char STR_AFHDS2A_RX[] ="FS2A_RX"; +const char STR_HOTT[] ="HoTT"; +const char STR_FX816[] ="FX816"; +const char STR_BAYANG_RX[] ="BayanRX"; +const char STR_PELIKAN[] ="Pelikan"; +const char STR_TIGER[] ="Tiger"; +const char STR_XK[] ="XK"; +const char STR_XN297DUMP[] ="XN297DP"; +const char STR_FRSKYR9[] ="FrSkyR9"; +const char STR_PROPEL[] ="Propel"; +const char STR_SKYARTEC[] ="Skyartc"; +const char STR_KYOSHO[] ="Kyosho"; +const char STR_RLINK[] ="RadLink"; +const char STR_REALACC[] ="Realacc"; +const char STR_OMP[] ="OMP"; +const char STR_MLINK[] ="M-Link"; +const char STR_TEST[] ="Test"; +const char STR_NANORF[] ="NanoRF"; +const char STR_E016HV2[] ="E016Hv2"; +const char STR_E010R5[] ="E010r5"; +const char STR_LOLI[] ="LOLI"; +const char STR_E129[] ="E129"; + +const char STR_SUBTYPE_FLYSKY[] = "\x04""Std\0""V9x9""V6x6""V912""CX20"; +const char STR_SUBTYPE_HUBSAN[] = "\x04""H107""H301""H501"; +const char STR_SUBTYPE_FRSKYD[] = "\x06""D8\0 ""Cloned"; +const char STR_SUBTYPE_FRSKYX[] = "\x07""D16\0 ""D16 8ch""LBT(EU)""LBT 8ch""Cloned\0""Clo 8ch"; +const char STR_SUBTYPE_HISKY[] = "\x05""Std\0 ""HK310"; +const char STR_SUBTYPE_V2X2[] = "\x06""Std\0 ""JXD506""MR101\0"; +const char STR_SUBTYPE_DSM[] = "\x04""2 1F""2 2F""X 1F""X 2F""Auto"; +const char STR_SUBTYPE_DEVO[] = "\x04""8ch\0""10ch""12ch""6ch\0""7ch\0"; +const char STR_SUBTYPE_YD717[] = "\x07""Std\0 ""SkyWlkr""Syma X4""XINXUN\0""NIHUI\0 "; +const char STR_SUBTYPE_KN[] = "\x06""WLtoys""FeiLun"; +const char STR_SUBTYPE_SYMAX[] = "\x03""Std""X5C"; +const char STR_SUBTYPE_SLT[] = "\x06""V1_6ch""V2_8ch""Q100\0 ""Q200\0 ""MR100\0"; +const char STR_SUBTYPE_CX10[] = "\x07""Green\0 ""Blue\0 ""DM007\0 ""-\0 ""JC3015a""JC3015b""MK33041"; +const char STR_SUBTYPE_CG023[] = "\x05""Std\0 ""YD829"; +const char STR_SUBTYPE_BAYANG[] = "\x07""Std\0 ""H8S3D\0 ""X16 AH\0""IRDrone""DHD D4\0""QX100\0 "; +const char STR_SUBTYPE_MT99[] = "\x05""MT99\0""H7\0 ""YZ\0 ""LS\0 ""FY805""A180\0"; +const char STR_SUBTYPE_MJXQ[] = "\x07""WLH08\0 ""X600\0 ""X800\0 ""H26D\0 ""E010\0 ""H26WH\0 ""Phoenix"; +const char STR_SUBTYPE_FY326[] = "\x05""Std\0 ""FY319"; +const char STR_SUBTYPE_HONTAI[] = "\x07""Std\0 ""JJRC X1""X5C1\0 ""FQ_951"; +const char STR_SUBTYPE_AFHDS2A[] = "\x08""PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS""PWM,IB16""PPM,IB16""PWM,SB16""PPM,SB16"; +const char STR_SUBTYPE_Q2X2[] = "\x04""Q222""Q242""Q282"; +const char STR_SUBTYPE_WK2x01[] = "\x06""WK2801""WK2401""W6_5_1""W6_6_1""W6_HeL""W6_HeI"; +const char STR_SUBTYPE_Q303[] = "\x06""Std\0 ""CX35\0 ""CX10D\0""CX10WD"; +const char STR_SUBTYPE_CABELL[] = "\x07""V3\0 ""V3 Telm""-\0 ""-\0 ""-\0 ""-\0 ""F-Safe\0""Unbind\0"; +const char STR_SUBTYPE_H83D[] = "\x07""Std\0 ""H20H\0 ""H20Mini""H30Mini"; +const char STR_SUBTYPE_CORONA[] = "\x05""V1\0 ""V2\0 ""FD V3"; +const char STR_SUBTYPE_HITEC[] = "\x07""Optima\0""Opt Hub""Minima\0"; +const char STR_SUBTYPE_BUGS_MINI[] = "\x06""Std\0 ""Bugs3H"; +const char STR_SUBTYPE_TRAXXAS[] = "\x04""6519"; +const char STR_SUBTYPE_E01X[] = "\x05""E012\0""E015\0""E016H"; +const char STR_SUBTYPE_GD00X[] = "\x05""GD_V1""GD_V2"; +const char STR_SUBTYPE_REDPINE[] = "\x04""Fast""Slow"; +const char STR_SUBTYPE_POTENSIC[] = "\x03""A20"; +const char STR_SUBTYPE_ZSX[] = "\x07""280JJRC"; +const char STR_SUBTYPE_HEIGHT[] = "\x03""5ch""8ch"; +const char STR_SUBTYPE_FX816[] = "\x03""P38"; +const char STR_SUBTYPE_XN297DUMP[] = "\x07""250Kbps""1Mbps\0 ""2Mbps\0 ""Auto\0 ""NRF\0 "; +const char STR_SUBTYPE_ESKY150[] = "\x03""4ch""7ch"; +const char STR_SUBTYPE_ESKY150V2[] = "\x05""150V2"; +const char STR_SUBTYPE_V911S[] = "\x05""V911S""E119\0"; +const char STR_SUBTYPE_XK[] = "\x04""X450""X420"; +const char STR_SUBTYPE_FRSKYR9[] = "\x07""915MHz\0""868MHz\0""915 8ch""868 8ch""FCC\0 ""--\0 ""FCC 8ch""-- 8ch\0"; +const char STR_SUBTYPE_ESKY[] = "\x03""Std""ET4"; +const char STR_SUBTYPE_PROPEL[] = "\x04""74-Z"; +const char STR_SUBTYPE_FRSKY_RX[] = "\x07""RX\0 ""CloneTX""EraseTX"; +const char STR_SUBTYPE_FRSKYL[] = "\x08""LR12\0 ""LR12 6ch"; +const char STR_SUBTYPE_WFLY[] = "\x05""WFR0x"; +const char STR_SUBTYPE_WFLY2[] = "\x05""RF20x"; +const char STR_SUBTYPE_HOTT[] = "\x07""Sync\0 ""No_Sync"; +const char STR_SUBTYPE_PELIKAN[] = "\x04""Pro\0""Lite"; +const char STR_SUBTYPE_V761[] = "\x03""3ch""4ch"; +const char STR_SUBTYPE_RLINK[] = "\x07""Surface""Air\0 ""DumboRC"; +const char STR_SUBTYPE_REALACC[] = "\x03""R11"; +const char STR_SUBTYPE_KYOSHO[] = "\x04""FHSS""Hype"; +const char STR_SUBTYPE_FUTABA[] = "\x05""SFHSS"; +const char STR_SUBTYPE_JJRC345[] = "\x08""JJRC345\0""SkyTmblr"; + +enum +{ + OPTION_NONE, + OPTION_OPTION, + OPTION_RFTUNE, + OPTION_VIDFREQ, + OPTION_FIXEDID, + OPTION_TELEM, + OPTION_SRVFREQ, + OPTION_MAXTHR, + OPTION_RFCHAN, + OPTION_RFPOWER, +}; + +#define NO_SUBTYPE nullptr + +const mm_protocol_definition multi_protocols[] = { +// Protocol number, Protocol String, Sub_protocol strings, Number of sub_protocols, Option type, Failsafe, ChMap, RF switch, Init, Callback + #if defined(ASSAN_NRF24L01_INO) + {PROTO_ASSAN, STR_ASSAN, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, ASSAN_init, ASSAN_callback }, + #endif + #if defined(BAYANG_NRF24L01_INO) + {PROTO_BAYANG, STR_BAYANG, STR_SUBTYPE_BAYANG, 6, OPTION_TELEM, 0, 0, SW_NRF, BAYANG_init, BAYANG_callback }, + #endif + #if defined(BAYANG_RX_NRF24L01_INO) + {PROTO_BAYANG_RX, STR_BAYANG_RX, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, BAYANG_RX_init, BAYANG_RX_callback }, + #endif + #if defined(BUGS_A7105_INO) + {PROTO_BUGS, STR_BUGS, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_A7105, BUGS_init, BUGS_callback }, + #endif + #if defined(BUGSMINI_NRF24L01_INO) + {PROTO_BUGSMINI, STR_BUGSMINI, STR_SUBTYPE_BUGS_MINI, 2, OPTION_NONE, 0, 0, SW_NRF, BUGSMINI_init, BUGSMINI_callback }, + #endif + #if defined(CABELL_NRF24L01_INO) + {PROTO_CABELL, STR_CABELL, STR_SUBTYPE_CABELL, 8, OPTION_OPTION, 0, 0, SW_NRF, CABELL_init, CABELL_callback }, + #endif + #if defined(CFLIE_NRF24L01_INO) + {PROTO_CFLIE, STR_CFLIE, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, CFLIE_init, CFLIE_callback }, // review protocol + #endif + #if defined(CG023_NRF24L01_INO) + {PROTO_CG023, STR_CG023, STR_SUBTYPE_CG023, 2, OPTION_NONE, 0, 0, SW_NRF, CG023_init, CG023_callback }, + #endif + #if defined(CORONA_CC2500_INO) + {PROTO_CORONA, STR_CORONA, STR_SUBTYPE_CORONA, 3, OPTION_RFTUNE, 0, 0, SW_CC2500, CORONA_init, CORONA_callback }, + #endif + #if defined(CX10_NRF24L01_INO) + {PROTO_CX10, STR_CX10, STR_SUBTYPE_CX10, 7, OPTION_NONE, 0, 0, SW_NRF, CX10_init, CX10_callback }, + #endif + #if defined(DEVO_CYRF6936_INO) + {PROTO_DEVO, STR_DEVO, STR_SUBTYPE_DEVO, 5, OPTION_FIXEDID, 1, 1, SW_CYRF, DEVO_init, DEVO_callback }, + #endif + #if defined(DM002_NRF24L01_INO) + {PROTO_DM002, STR_DM002, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, DM002_init, DM002_callback }, + #endif + #if defined(DSM_CYRF6936_INO) + {PROTO_DSM, STR_DSM, STR_SUBTYPE_DSM, 5, OPTION_MAXTHR, 0, 1, SW_CYRF, DSM_init, DSM_callback }, + #endif + #if defined(DSM_RX_CYRF6936_INO) + {PROTO_DSM_RX, STR_DSM_RX, NO_SUBTYPE, 0, OPTION_NONE, 0, 1, SW_CYRF, DSM_RX_init, DSM_RX_callback }, + #endif + #if defined(E010R5_CYRF6936_INO) + {PROTO_E010R5, STR_E010R5, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_CYRF, E010R5_init, E010R5_callback }, + #endif + #if defined(E016HV2_CC2500_INO) + {PROTO_E016HV2, STR_E016HV2, NO_SUBTYPE, 0, OPTION_RFTUNE, 0, 0, SW_CC2500, E016HV2_init, E016HV2_callback }, + #endif + #if defined(E01X_NRF24L01_INO) + {PROTO_E01X, STR_E01X, STR_SUBTYPE_E01X, 3, OPTION_OPTION, 0, 0, SW_NRF, E01X_init, E01X_callback }, + #endif + #if defined(E129_CYRF6936_INO) + {PROTO_E129, STR_E129, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_CYRF, E129_init, E129_callback }, + #endif + #if defined(ESKY_NRF24L01_INO) + {PROTO_ESKY, STR_ESKY, STR_SUBTYPE_ESKY, 2, OPTION_NONE, 0, 1, SW_NRF, ESKY_init, ESKY_callback }, + #endif + #if defined(ESKY150_NRF24L01_INO) + {PROTO_ESKY150, STR_ESKY150, STR_SUBTYPE_ESKY150, 2, OPTION_NONE, 0, 0, SW_NRF, ESKY150_init, ESKY150_callback }, + #endif + #if defined(ESKY150V2_CC2500_INO) + {PROTO_ESKY150V2, STR_ESKY150V2, STR_SUBTYPE_ESKY150V2, 1, OPTION_RFTUNE, 0, 1, SW_CC2500, ESKY150V2_init, ESKY150V2_callback }, + #endif + #if defined(FLYSKY_A7105_INO) + {PROTO_FLYSKY, STR_FLYSKY, STR_SUBTYPE_FLYSKY, 5, OPTION_NONE, 0, 1, SW_A7105, FLYSKY_init, FLYSKY_callback }, + #endif + #if defined(AFHDS2A_A7105_INO) + {PROTO_AFHDS2A, STR_AFHDS2A, STR_SUBTYPE_AFHDS2A, 8, OPTION_SRVFREQ, 1, 1, SW_A7105, AFHDS2A_init, AFHDS2A_callback }, + #endif + #if defined(AFHDS2A_RX_A7105_INO) + {PROTO_AFHDS2A_RX, STR_AFHDS2A_RX,NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_A7105, AFHDS2A_RX_init, AFHDS2A_RX_callback }, + #endif + #if defined(FQ777_NRF24L01_INO) + {PROTO_FQ777, STR_FQ777, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, FQ777_init, FQ777_callback }, + #endif +//OpenTX 2.3.x issue: DO NOT CHANGE ORDER below + #if defined(FRSKY_RX_CC2500_INO) + {PROTO_FRSKY_RX, STR_FRSKY_RX, STR_SUBTYPE_FRSKY_RX, 3, OPTION_RFTUNE, 0, 0, SW_CC2500, FRSKY_RX_init, FRSKY_RX_callback }, + #endif + #if defined(FRSKYD_CC2500_INO) + {PROTO_FRSKYD, STR_FRSKYD, STR_SUBTYPE_FRSKYD, 2, OPTION_RFTUNE, 0, 0, SW_CC2500, FRSKYD_init, FRSKYD_callback }, + #endif + #if defined(FRSKYV_CC2500_INO) + {PROTO_FRSKYV, STR_FRSKYV, NO_SUBTYPE, 0, OPTION_RFTUNE, 0, 0, SW_CC2500, FRSKYV_init, FRSKYV_callback }, + #endif + #if defined(FRSKYX_CC2500_INO) + {PROTO_FRSKYX, STR_FRSKYX, STR_SUBTYPE_FRSKYX, 6, OPTION_RFTUNE, 1, 0, SW_CC2500, FRSKYX_init, FRSKYX_callback }, + {PROTO_FRSKYX2, STR_FRSKYX2, STR_SUBTYPE_FRSKYX, 6, OPTION_RFTUNE, 1, 0, SW_CC2500, FRSKYX_init, FRSKYX_callback }, + #endif +//OpenTX 2.3.x issue: DO NOT CHANGE ORDER above + #if defined(FRSKYL_CC2500_INO) + {PROTO_FRSKYL, STR_FRSKYL, STR_SUBTYPE_FRSKYL, 2, OPTION_RFTUNE, 0, 0, SW_CC2500, FRSKYL_init, FRSKYL_callback }, + #endif + #if defined(FRSKYR9_SX1276_INO) + {PROTO_FRSKY_R9, STR_FRSKYR9, STR_SUBTYPE_FRSKYR9, 8, OPTION_NONE, 1, 0, 0, FRSKYR9_init, FRSKYR9_callback }, + #endif + #if defined(FUTABA_CC2500_INO) + {PROTO_FUTABA, STR_FUTABA, STR_SUBTYPE_FUTABA, 1, OPTION_RFTUNE, 1, 1, SW_CC2500, SFHSS_init, SFHSS_callback }, + #endif + #if defined(FX816_NRF24L01_INO) + {PROTO_FX816, STR_FX816, STR_SUBTYPE_FX816, 1, OPTION_NONE, 0, 0, SW_NRF, FX816_init, FX816_callback }, + #endif + #if defined(FY326_NRF24L01_INO) + {PROTO_FY326, STR_FY326, STR_SUBTYPE_FY326, 2, OPTION_NONE, 0, 0, SW_NRF, FY326_init, FY326_callback }, + #endif + #if defined(GD00X_NRF24L01_INO) + {PROTO_GD00X, STR_GD00X, STR_SUBTYPE_GD00X, 2, OPTION_RFTUNE, 0, 0, SW_NRF, GD00X_init, GD00X_callback }, + #endif + #if defined(GW008_NRF24L01_INO) + {PROTO_GW008, STR_GW008, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, GW008_init, GW008_callback }, + #endif + #if defined(H8_3D_NRF24L01_INO) + {PROTO_H8_3D, STR_H8_3D, STR_SUBTYPE_H83D, 4, OPTION_NONE, 0, 0, SW_NRF, H8_3D_init, H8_3D_callback }, + #endif + #if defined(HEIGHT_A7105_INO) + {PROTO_HEIGHT, STR_HEIGHT, STR_SUBTYPE_HEIGHT, 2, OPTION_NONE, 0, 0, SW_A7105, HEIGHT_init, HEIGHT_callback }, + #endif + #if defined(HISKY_NRF24L01_INO) + {PROTO_HISKY, STR_HISKY, STR_SUBTYPE_HISKY, 2, OPTION_NONE, 1, 1, SW_NRF, HISKY_init, HISKY_callback }, + #endif + #if defined(HITEC_CC2500_INO) + {PROTO_HITEC, STR_HITEC, STR_SUBTYPE_HITEC, 3, OPTION_RFTUNE, 0, 0, SW_CC2500, HITEC_init, HITEC_callback }, + #endif + #if defined(HONTAI_NRF24L01_INO) + {PROTO_HONTAI, STR_HONTAI, STR_SUBTYPE_HONTAI, 4, OPTION_NONE, 0, 0, SW_NRF, HONTAI_init, HONTAI_callback }, // review crc + #endif + #if defined(HOTT_CC2500_INO) + {PROTO_HOTT, STR_HOTT, STR_SUBTYPE_HOTT, 2, OPTION_RFTUNE, 1, 0, SW_CC2500, HOTT_init, HOTT_callback }, + #endif + #if defined(HUBSAN_A7105_INO) + {PROTO_HUBSAN, STR_HUBSAN, STR_SUBTYPE_HUBSAN, 3, OPTION_VIDFREQ, 0, 0, SW_A7105, HUBSAN_init, HUBSAN_callback }, + #endif + #if defined(J6PRO_CYRF6936_INO) + {PROTO_J6PRO, STR_J6PRO, NO_SUBTYPE, 0, OPTION_NONE, 0, 1, SW_CYRF, J6PRO_init, J6PRO_callback }, + #endif + #if defined(JJRC345_NRF24L01_INO) + {PROTO_JJRC345, STR_JJRC345, STR_SUBTYPE_JJRC345, 2, OPTION_NONE, 0, 0, SW_NRF, JJRC345_init, JJRC345_callback }, + #endif + #if defined(KF606_NRF24L01_INO) + {PROTO_KF606, STR_KF606, NO_SUBTYPE, 0, OPTION_RFTUNE, 0, 0, SW_NRF, KF606_init, KF606_callback }, + #endif + #if defined(KN_NRF24L01_INO) + {PROTO_KN, STR_KN, STR_SUBTYPE_KN, 2, OPTION_NONE, 0, 0, SW_NRF, KN_init, KN_callback }, + #endif + #if defined(KYOSHO_A7105_INO) + {PROTO_KYOSHO, STR_KYOSHO, STR_SUBTYPE_KYOSHO, 2, OPTION_NONE, 0, 1, SW_A7105, KYOSHO_init, KYOSHO_callback }, + #endif + #if defined(LOLI_NRF24L01_INO) + {PROTO_LOLI, STR_LOLI, NO_SUBTYPE, 0, OPTION_NONE, 1, 0, SW_NRF, LOLI_init, LOLI_callback }, + #endif + #if defined(MJXQ_NRF24L01_INO) + {PROTO_MJXQ, STR_MJXQ, STR_SUBTYPE_MJXQ, 7, OPTION_RFTUNE, 0, 0, SW_NRF, MJXQ_init, MJXQ_callback }, + #endif + #if defined(MLINK_CYRF6936_INO) + {PROTO_MLINK, STR_MLINK, NO_SUBTYPE, 0, OPTION_NONE, 1, 0, SW_CYRF, MLINK_init, MLINK_callback }, + #endif + #if defined(MT99XX_NRF24L01_INO) + {PROTO_MT99XX, STR_MT99XX, STR_SUBTYPE_MT99, 6, OPTION_NONE, 0, 0, SW_NRF, MT99XX_init, MT99XX_callback }, + #endif + #if defined(NCC1701_NRF24L01_INO) + {PROTO_NCC1701, STR_NCC1701, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, NCC_init, NCC_callback }, + #endif + #if defined(OMP_CC2500_INO) + {PROTO_OMP, STR_OMP, NO_SUBTYPE, 0, OPTION_RFTUNE, 0, 0, SW_NRF, OMP_init, OMP_callback }, + #endif + #if defined(PELIKAN_A7105_INO) + {PROTO_PELIKAN, STR_PELIKAN, STR_SUBTYPE_PELIKAN, 2, OPTION_NONE, 0, 1, SW_A7105, PELIKAN_init, PELIKAN_callback }, + #endif + #if defined(POTENSIC_NRF24L01_INO) + {PROTO_POTENSIC, STR_POTENSIC, STR_SUBTYPE_POTENSIC, 1, OPTION_NONE, 0, 0, SW_NRF, POTENSIC_init, POTENSIC_callback }, + #endif + #if defined(PROPEL_NRF24L01_INO) + {PROTO_PROPEL, STR_PROPEL, STR_SUBTYPE_PROPEL, 1, OPTION_NONE, 0, 0, SW_NRF, PROPEL_init, PROPEL_callback }, + #endif + #if defined(CX10_NRF24L01_INO) + {PROTO_Q2X2, STR_Q2X2, STR_SUBTYPE_Q2X2, 3, OPTION_NONE, 0, 0, SW_NRF, CX10_init, CX10_callback }, + #endif + #if defined(Q303_NRF24L01_INO) + {PROTO_Q303, STR_Q303, STR_SUBTYPE_Q303, 4, OPTION_NONE, 0, 0, SW_NRF, Q303_init, Q303_callback }, + #endif + #if defined(Q90C_NRF24L01_INO) + {PROTO_Q90C, STR_Q90C, NO_SUBTYPE, 0, OPTION_RFTUNE, 0, 0, SW_NRF, Q90C_init, Q90C_callback }, + #endif + #if defined(RLINK_CC2500_INO) + {PROTO_RLINK, STR_RLINK, STR_SUBTYPE_RLINK, 3, OPTION_RFTUNE, 0, 0, SW_CC2500, RLINK_init, RLINK_callback }, + #endif + #if defined(REALACC_NRF24L01_INO) + {PROTO_REALACC, STR_REALACC, STR_SUBTYPE_REALACC, 1, OPTION_NONE, 0, 0, SW_NRF, REALACC_init, REALACC_callback }, + #endif + #if defined(REDPINE_CC2500_INO) + {PROTO_REDPINE, STR_REDPINE, STR_SUBTYPE_REDPINE, 2, OPTION_RFTUNE, 0, 0, SW_CC2500, REDPINE_init, REDPINE_callback }, + #endif + #if defined(SCANNER_CC2500_INO) + {PROTO_SCANNER, STR_SCANNER, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_CC2500, SCANNER_init, SCANNER_callback }, + #endif + #if defined(SHENQI_NRF24L01_INO) + {PROTO_SHENQI, STR_SHENQI, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, SHENQI_init, SHENQI_callback }, + #endif + #if defined(SKYARTEC_CC2500_INO) + {PROTO_SKYARTEC, STR_SKYARTEC, NO_SUBTYPE, 0, OPTION_RFTUNE, 0, 1, SW_CC2500, SKYARTEC_init, SKYARTEC_callback }, + #endif + #if defined(SLT_NRF24L01_INO) + {PROTO_SLT, STR_SLT, STR_SUBTYPE_SLT, 5, OPTION_RFTUNE, 0, 1, SW_NRF, SLT_init, SLT_callback }, + #endif + #if defined(SYMAX_NRF24L01_INO) + {PROTO_SYMAX, STR_SYMAX, STR_SUBTYPE_SYMAX, 2, OPTION_NONE, 0, 0, SW_NRF, SYMAX_init, SYMAX_callback }, + #endif + #if defined(TIGER_NRF24L01_INO) + {PROTO_TIGER, STR_TIGER, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, TIGER_init, TIGER_callback }, + #endif + #if defined(TRAXXAS_CYRF6936_INO) + {PROTO_TRAXXAS, STR_TRAXXAS, STR_SUBTYPE_TRAXXAS, 1, OPTION_NONE, 0, 0, SW_CYRF, TRAXXAS_init, TRAXXAS_callback }, + #endif + #if defined(V2X2_NRF24L01_INO) + {PROTO_V2X2, STR_V2X2, STR_SUBTYPE_V2X2, 3, OPTION_NONE, 0, 0, SW_NRF, V2X2_init, V2X2_callback }, + #endif + #if defined(V761_NRF24L01_INO) + {PROTO_V761, STR_V761, STR_SUBTYPE_V761, 2, OPTION_NONE, 0, 0, SW_NRF, V761_init, V761_callback }, + #endif + #if defined(V911S_NRF24L01_INO) + {PROTO_V911S, STR_V911S, STR_SUBTYPE_V911S, 2, OPTION_RFTUNE, 0, 0, SW_NRF, V911S_init, V911S_callback }, + #endif + #if defined(WK2x01_CYRF6936_INO) + {PROTO_WK2x01, STR_WK2x01, STR_SUBTYPE_WK2x01, 6, OPTION_NONE, 1, 1, SW_CYRF, WK_init, WK_callback }, + #endif + #if defined(WFLY_CYRF6936_INO) + {PROTO_WFLY, STR_WFLY, STR_SUBTYPE_WFLY, 1, OPTION_NONE, 0, 0, SW_CYRF, WFLY_init, WFLY_callback }, + #endif + #if defined(WFLY2_A7105_INO) + {PROTO_WFLY2, STR_WFLY2, STR_SUBTYPE_WFLY2, 1, OPTION_OPTION, 1, 0, SW_A7105, WFLY2_init, WFLY2_callback }, + #endif + #if defined(XK_NRF24L01_INO) + {PROTO_XK, STR_XK, STR_SUBTYPE_XK, 2, OPTION_RFTUNE, 0, 0, SW_NRF, XK_init, XK_callback }, + #endif + #if defined(XN297DUMP_NRF24L01_INO) + {PROTO_XN297DUMP, STR_XN297DUMP, STR_SUBTYPE_XN297DUMP, 5, OPTION_RFCHAN, 0, 0, SW_NRF, XN297Dump_init, XN297Dump_callback }, + #endif + #if defined(YD717_NRF24L01_INO) + {PROTO_YD717, STR_YD717, STR_SUBTYPE_YD717, 5, OPTION_NONE, 0, 0, SW_NRF, YD717_init, YD717_callback }, + #endif + #if defined(ZSX_NRF24L01_INO) + {PROTO_ZSX, STR_ZSX, STR_SUBTYPE_ZSX, 1, OPTION_NONE, 0, 0, SW_NRF, ZSX_init, ZSX_callback }, + #endif + #if defined(TEST_CC2500_INO) + {PROTO_TEST, STR_TEST, NO_SUBTYPE, 0, OPTION_RFTUNE, 0, 0, SW_NRF, TEST_init, TEST_callback }, + #endif + #if defined(NANORF_NRF24L01_INO) + {PROTO_NANORF, STR_NANORF, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, NANORF_init, NANORF_callback }, + #endif + {0x00, nullptr, nullptr, 0, 0, 0, 0, 0, nullptr, nullptr } +}; + diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h index 59aacb7..97275f4 100644 --- a/Multiprotocol/Multiprotocol.h +++ b/Multiprotocol/Multiprotocol.h @@ -19,7 +19,7 @@ #define VERSION_MAJOR 1 #define VERSION_MINOR 3 #define VERSION_REVISION 2 -#define VERSION_PATCH_LEVEL 32 +#define VERSION_PATCH_LEVEL 33 //****************** // Protocols @@ -431,6 +431,7 @@ enum RLINK #define AUTOBIND 1 #define NO_AUTOBIND 0 +//PPM protocols struct PPM_Parameters { uint8_t protocol; @@ -442,6 +443,33 @@ struct PPM_Parameters uint32_t chan_order; }; +//Callback +typedef uint16_t (*uint16_function_t) (void); //pointer to a function with no parameters which return an uint16_t integer +typedef void (*void_function_t ) (void); //pointer to a function with no parameters which returns nothing + +//Protocols definition +struct mm_protocol_definition { + uint8_t protocol; + const char *ProtoString; + const char *SubProtoString; + uint8_t nbrSubProto : 4; + uint8_t optionType : 4; + uint8_t failSafe : 1; + uint8_t chMap : 1; + uint8_t rfSwitch : 2; + void_function_t Init; + uint16_function_t CallBack; +}; +extern const mm_protocol_definition multi_protocols[]; + +enum RF_SWITCH +{ + SW_A7105 = 0, //antenna RF1 + SW_CC2500 = 1, //antenna RF2 + SW_NRF = 2, //antenna RF3 + SW_CYRF = 3, //antenna RF4 +}; + // Telemetry enum MultiPacketTypes { @@ -464,12 +492,6 @@ enum MultiPacketTypes // Macros #define NOP() __asm__ __volatile__("nop") -//*************** -//*** Tests *** -//*************** -#define IS_FAILSAFE_PROTOCOL ( (protocol==PROTO_HISKY && sub_protocol==HK310) || protocol==PROTO_AFHDS2A || protocol==PROTO_DEVO || protocol==PROTO_FUTABA || protocol==PROTO_WK2x01 || protocol== PROTO_HOTT || protocol==PROTO_FRSKYX || protocol==PROTO_FRSKYX2 || protocol==PROTO_FRSKY_R9 || protocol==PROTO_WFLY2 || protocol==PROTO_LOLI || protocol==PROTO_MLINK) -#define IS_CHMAP_PROTOCOL ( (protocol==PROTO_HISKY && sub_protocol==HK310) || protocol==PROTO_AFHDS2A || protocol==PROTO_DEVO || protocol==PROTO_FUTABA || protocol==PROTO_WK2x01 || protocol== PROTO_DSM || protocol==PROTO_SLT || protocol==PROTO_FLYSKY || (protocol==PROTO_KYOSHO && sub_protocol==KYOSHO_HYPE) || protocol==PROTO_ESKY || protocol==PROTO_J6PRO || protocol==PROTO_PELIKAN || protocol==PROTO_SKYARTEC || protocol==PROTO_ESKY150V2 || protocol==PROTO_DSM_RX) - //*************** //*** Flags *** //*************** diff --git a/Multiprotocol/Multiprotocol.ino b/Multiprotocol/Multiprotocol.ino index ba9bde2..183a87c 100644 --- a/Multiprotocol/Multiprotocol.ino +++ b/Multiprotocol/Multiprotocol.ino @@ -185,6 +185,8 @@ volatile uint8_t rx_ok_buff[RXBUFFER_SIZE]; volatile bool discard_frame = false; volatile uint8_t rx_idx=0, rx_len=0; +// Callback +uint16_function_t remote_callback = 0; // Telemetry #define TELEMETRY_BUFFER_SIZE 32 @@ -247,18 +249,6 @@ uint8_t packet_in[TELEMETRY_BUFFER_SIZE];//telemetry receiving packets uint16_t rx_rc_chan[16]; #endif - //Multi names - #ifdef MULTI_NAMES - struct mm_protocol_definition { - uint8_t protocol; - const char *ProtoString; - uint8_t nbrSubProto; - const char *SubProtoString; - uint8_t optionType; - }; - extern const mm_protocol_definition multi_protocols[]; - uint8_t multi_protocols_index=0xFF; - #endif #ifdef HOTT_FW_TELEMETRY uint8_t HoTT_SerialRX_val=0; bool HoTT_SerialRX=false; @@ -269,9 +259,7 @@ uint8_t packet_in[TELEMETRY_BUFFER_SIZE];//telemetry receiving packets #endif #endif // TELEMETRY -// Callback -typedef uint16_t (*void_function_t) (void);//pointer to a function with no parameters which return an uint16_t integer -void_function_t remote_callback = 0; +uint8_t multi_protocols_index=0xFF; // Init void setup() @@ -1090,11 +1078,9 @@ inline void tx_resume() // Protocol start static void protocol_init() { - static uint16_t next_callback; if(IS_WAIT_BIND_off) { remote_callback = 0; // No protocol - next_callback=0; // Default is immediate call back LED_off; // Led off during protocol init modules_reset(); // Reset all modules crc16_polynomial = 0x1021; // Default CRC crc16_polynomial @@ -1106,9 +1092,7 @@ static void protocol_init() #ifdef MULTI_SYNC inputRefreshRate = 0; // Don't do it unless the protocol asks for it #endif - #ifdef MULTI_NAMES - multi_protocols_index = 0xFF; - #endif + multi_protocols_index = 0xFF; tx_pause(); init_frskyd_link_telemetry(); pps_timer=millis(); @@ -1148,622 +1132,55 @@ static void protocol_init() blink=millis(); - PE1_on; //NRF24L01 antenna RF3 by default - PE2_off; //NRF24L01 antenna RF3 by default - - switch(protocol) // Init the requested protocol - { - #ifdef A7105_INSTALLED - #if defined(FLYSKY_A7105_INO) - case PROTO_FLYSKY: - PE1_off; //antenna RF1 - next_callback = initFlySky(); - remote_callback = ReadFlySky; - break; - #endif - #if defined(AFHDS2A_A7105_INO) - case PROTO_AFHDS2A: - PE1_off; //antenna RF1 - next_callback = initAFHDS2A(); - remote_callback = ReadAFHDS2A; - break; - #endif - #if defined(HUBSAN_A7105_INO) - case PROTO_HUBSAN: - PE1_off; //antenna RF1 - if(IS_BIND_BUTTON_FLAG_on) random_id(EEPROM_ID_OFFSET,true); // Generate new ID if bind button is pressed. - next_callback = initHubsan(); - remote_callback = ReadHubsan; - break; - #endif - #if defined(BUGS_A7105_INO) - case PROTO_BUGS: - PE1_off; //antenna RF1 - next_callback = initBUGS(); - remote_callback = ReadBUGS; - break; - #endif - #if defined(HEIGHT_A7105_INO) - case PROTO_HEIGHT: - PE1_off; //antenna RF1 - next_callback = initHeight(); - remote_callback = ReadHeight; - break; - #endif - #if defined(AFHDS2A_RX_A7105_INO) - case PROTO_AFHDS2A_RX: - PE1_off; //antenna RF1 - next_callback = initAFHDS2A_Rx(); - remote_callback = AFHDS2A_Rx_callback; - break; - #endif - #if defined(PELIKAN_A7105_INO) - case PROTO_PELIKAN: - PE1_off; //antenna RF1 - next_callback = initPelikan(); - remote_callback = ReadPelikan; - break; - #endif - #if defined(KYOSHO_A7105_INO) - case PROTO_KYOSHO: - PE1_off; //antenna RF1 - next_callback = initKyosho(); - remote_callback = ReadKyosho; - break; - #endif - #if defined(WFLY2_A7105_INO) - case PROTO_WFLY2: - PE1_off; //antenna RF1 - next_callback = initWFLY2(); - remote_callback = ReadWFLY2; - break; - #endif - #endif - #ifdef CC2500_INSTALLED - #if defined(FRSKYD_CC2500_INO) - case PROTO_FRSKYD: - PE1_off; //antenna RF2 - PE2_on; - next_callback = initFrSky_2way(); - remote_callback = ReadFrSky_2way; - break; - #endif - #if defined(FRSKYL_CC2500_INO) - case PROTO_FRSKYL: - PE1_off; //antenna RF2 - PE2_on; - next_callback = initFrSkyL(); - remote_callback = ReadFrSkyL; - break; - #endif - #if defined(FRSKYV_CC2500_INO) - case PROTO_FRSKYV: - PE1_off; //antenna RF2 - PE2_on; - next_callback = initFRSKYV(); - remote_callback = ReadFRSKYV; - break; - #endif - #if defined(FRSKYX_CC2500_INO) - case PROTO_FRSKYX: - case PROTO_FRSKYX2: - #ifdef EU_MODULE - if(sub_protocol<2) - break; - #endif - PE1_off; //antenna RF2 - PE2_on; - next_callback = initFrSkyX(); - remote_callback = ReadFrSkyX; - break; - #endif - #if defined(FUTABA_CC2500_INO) - case PROTO_FUTABA: - PE1_off; //antenna RF2 - PE2_on; - next_callback = initSFHSS(); - remote_callback = ReadSFHSS; - break; - #endif - #if defined(CORONA_CC2500_INO) - case PROTO_CORONA: - PE1_off; //antenna RF2 - PE2_on; - next_callback = initCORONA(); - remote_callback = ReadCORONA; - break; - #endif - #if defined(SKYARTEC_CC2500_INO) - case PROTO_SKYARTEC: - PE1_off; //antenna RF2 - PE2_on; - next_callback = initSKYARTEC(); - remote_callback = ReadSKYARTEC; - break; - #endif - #if defined(REDPINE_CC2500_INO) - case PROTO_REDPINE: - PE1_off; //antenna RF2 - PE2_on; - next_callback = initREDPINE(); - remote_callback = ReadREDPINE; - break; - #endif - #if defined(HITEC_CC2500_INO) - case PROTO_HITEC: - PE1_off; //antenna RF2 - PE2_on; - next_callback = initHITEC(); - remote_callback = ReadHITEC; - break; - #endif - #if defined(HOTT_CC2500_INO) - case PROTO_HOTT: - PE1_off; //antenna RF2 - PE2_on; - next_callback = initHOTT(); - remote_callback = ReadHOTT; - break; - #endif - #if defined(SCANNER_CC2500_INO) - case PROTO_SCANNER: - PE1_off; - PE2_on; //antenna RF2 - next_callback = initScanner(); - remote_callback = Scanner_callback; - break; - #endif - #if defined(FRSKY_RX_CC2500_INO) - case PROTO_FRSKY_RX: - PE1_off; - PE2_on; //antenna RF2 - next_callback = initFrSky_Rx(); - remote_callback = FrSky_Rx_callback; - break; - #endif - #if defined(ESKY150V2_CC2500_INO) - case PROTO_ESKY150V2: - PE1_off; - PE2_on; //antenna RF2 - next_callback = initESKY150V2(); - remote_callback = ESKY150V2_callback; - break; - #endif - #if defined(RLINK_CC2500_INO) - case PROTO_RLINK: - PE1_off; - PE2_on; //antenna RF2 - next_callback = initRLINK(); - remote_callback = RLINK_callback; - break; - #endif - #if defined(E016HV2_CC2500_INO) - case PROTO_E016HV2: - PE1_off; - PE2_on; //antenna RF2 - next_callback = initE016HV2(); - remote_callback = E016HV2_callback; - break; - #endif - #endif - #ifdef CYRF6936_INSTALLED - #if defined(DSM_CYRF6936_INO) - case PROTO_DSM: - PE2_on; //antenna RF4 - next_callback = initDsm(); - remote_callback = ReadDsm; - break; - #endif - #if defined(DSM_RX_CYRF6936_INO) - case PROTO_DSM_RX: - PE2_on; //antenna RF4 - next_callback = initDSM_Rx(); - remote_callback = DSM_Rx_callback; - break; - #endif - #if defined(WFLY_CYRF6936_INO) - case PROTO_WFLY: - PE2_on; //antenna RF4 - next_callback = initWFLY(); - remote_callback = ReadWFLY; - break; - #endif - #if defined(MLINK_CYRF6936_INO) - case PROTO_MLINK: - PE2_on; //antenna RF4 - next_callback = initMLINK(); - remote_callback = ReadMLINK; - break; - #endif - #if defined(E010R5_CYRF6936_INO) - case PROTO_E010R5: - PE2_on; //antenna RF4 - next_callback = initE010R5(); - remote_callback = ReadE010R5; - break; - #endif - #if defined(E129_CYRF6936_INO) - case PROTO_E129: - PE2_on; //antenna RF4 - next_callback = initE129(); - remote_callback = ReadE129; - break; - #endif - #if defined(DEVO_CYRF6936_INO) - case PROTO_DEVO: - #ifdef ENABLE_PPM - if(mode_select) //PPM mode - { - if(IS_BIND_BUTTON_FLAG_on) - { - eeprom_write_byte((EE_ADDR)(MODELMODE_EEPROM_OFFSET+RX_num),0x00); // reset to autobind mode for the current model - option=0; - } - else - { - option=eeprom_read_byte((EE_ADDR)(MODELMODE_EEPROM_OFFSET+RX_num)); // load previous mode: autobind or fixed id - if(option!=1) option=0; // if not fixed id mode then it should be autobind - } - } - #endif //ENABLE_PPM - PE2_on; //antenna RF4 - next_callback = DevoInit(); - remote_callback = devo_callback; - break; - #endif - #if defined(WK2x01_CYRF6936_INO) - case PROTO_WK2x01: - #ifdef ENABLE_PPM - if(mode_select) //PPM mode - { - if(IS_BIND_BUTTON_FLAG_on) - { - eeprom_write_byte((EE_ADDR)(MODELMODE_EEPROM_OFFSET+RX_num),0x00); // reset to autobind mode for the current model - option=0; - } - else - { - option=eeprom_read_byte((EE_ADDR)(MODELMODE_EEPROM_OFFSET+RX_num)); // load previous mode: autobind or fixed id - if(option!=1) option=0; // if not fixed id mode then it should be autobind - } - } - #endif //ENABLE_PPM - PE2_on; //antenna RF4 - next_callback = WK_setup(); - remote_callback = WK_cb; - break; - #endif - #if defined(J6PRO_CYRF6936_INO) - case PROTO_J6PRO: - PE2_on; //antenna RF4 - next_callback = initJ6Pro(); - remote_callback = ReadJ6Pro; - break; - #endif - #if defined(TRAXXAS_CYRF6936_INO) - case PROTO_TRAXXAS: - PE2_on; //antenna RF4 - next_callback = initTRAXXAS(); - remote_callback = ReadTRAXXAS; - break; - #endif - #endif - #ifdef NRF24L01_INSTALLED - #if defined(HISKY_NRF24L01_INO) - case PROTO_HISKY: - next_callback=initHiSky(); - remote_callback = hisky_cb; - break; - #endif - #if defined(V2X2_NRF24L01_INO) - case PROTO_V2X2: - next_callback = initV2x2(); - remote_callback = ReadV2x2; - break; - #endif - #if defined(YD717_NRF24L01_INO) - case PROTO_YD717: - next_callback=initYD717(); - remote_callback = yd717_callback; - break; - #endif - #if defined(KN_NRF24L01_INO) - case PROTO_KN: - next_callback = initKN(); - remote_callback = kn_callback; - break; - #endif - #if defined(SYMAX_NRF24L01_INO) - case PROTO_SYMAX: - next_callback = initSymax(); - remote_callback = symax_callback; - break; - #endif - #if defined(SLT_NRF24L01_INO) - case PROTO_SLT: - next_callback=initSLT(); - remote_callback = SLT_callback; - break; - #endif - #if defined(CX10_NRF24L01_INO) - case PROTO_Q2X2: - sub_protocol|=0x08; // Increase the number of sub_protocols for CX-10 - case PROTO_CX10: - next_callback=initCX10(); - remote_callback = CX10_callback; - break; - #endif - #if defined(CG023_NRF24L01_INO) - case PROTO_CG023: - next_callback=initCG023(); - remote_callback = CG023_callback; - break; - #endif - #if defined(BAYANG_NRF24L01_INO) - case PROTO_BAYANG: - next_callback=initBAYANG(); - remote_callback = BAYANG_callback; - break; - #endif - #if defined(ESKY_NRF24L01_INO) - case PROTO_ESKY: - next_callback=initESKY(); - remote_callback = ESKY_callback; - break; - #endif - #if defined(MT99XX_NRF24L01_INO) - case PROTO_MT99XX: - next_callback=initMT99XX(); - remote_callback = MT99XX_callback; - break; - #endif - #if defined(LOLI_NRF24L01_INO) - case PROTO_LOLI: - next_callback=initLOLI(); - remote_callback = LOLI_callback; - break; - #endif - #if defined(MJXQ_NRF24L01_INO) - case PROTO_MJXQ: - next_callback=initMJXQ(); - remote_callback = MJXQ_callback; - break; - #endif - #if defined(SHENQI_NRF24L01_INO) - case PROTO_SHENQI: - next_callback=initSHENQI(); - remote_callback = SHENQI_callback; - break; - #endif - #if defined(FY326_NRF24L01_INO) - case PROTO_FY326: - next_callback=initFY326(); - remote_callback = FY326_callback; - break; - #endif - #if defined(FQ777_NRF24L01_INO) - case PROTO_FQ777: - next_callback=initFQ777(); - remote_callback = FQ777_callback; - break; - #endif - #if defined(ASSAN_NRF24L01_INO) - case PROTO_ASSAN: - next_callback=initASSAN(); - remote_callback = ASSAN_callback; - break; - #endif - #if defined(HONTAI_NRF24L01_INO) - case PROTO_HONTAI: - next_callback=initHONTAI(); - remote_callback = HONTAI_callback; - break; - #endif - #if defined(Q303_NRF24L01_INO) - case PROTO_Q303: - next_callback=initQ303(); - remote_callback = Q303_callback; - break; - #endif - #if defined(GW008_NRF24L01_INO) - case PROTO_GW008: - next_callback=initGW008(); - remote_callback = GW008_callback; - break; - #endif - #if defined(DM002_NRF24L01_INO) - case PROTO_DM002: - next_callback=initDM002(); - remote_callback = DM002_callback; - break; - #endif - #if defined(CABELL_NRF24L01_INO) - case PROTO_CABELL: - next_callback=initCABELL(); - remote_callback = CABELL_callback; - break; - #endif - #if defined(ESKY150_NRF24L01_INO) - case PROTO_ESKY150: - next_callback=initESKY150(); - remote_callback = ESKY150_callback; - break; - #endif - #if defined(H8_3D_NRF24L01_INO) - case PROTO_H8_3D: - next_callback=initH8_3D(); - remote_callback = H8_3D_callback; - break; - #endif - #if defined(CFLIE_NRF24L01_INO) - case PROTO_CFLIE: - next_callback=initCFlie(); - remote_callback = cflie_callback; - break; - #endif - #if defined(BUGSMINI_NRF24L01_INO) - case PROTO_BUGSMINI: - next_callback=initBUGSMINI(); - remote_callback = BUGSMINI_callback; - break; - #endif - #if defined(NCC1701_NRF24L01_INO) - case PROTO_NCC1701: - next_callback=initNCC(); - remote_callback = NCC_callback; - break; - #endif - #if defined(E01X_NRF24L01_INO) - case PROTO_E01X: - next_callback=initE01X(); - remote_callback = E01X_callback; - break; - #endif - #if defined(V911S_NRF24L01_INO) - case PROTO_V911S: - next_callback=initV911S(); - remote_callback = V911S_callback; - break; - #endif - #if defined(GD00X_NRF24L01_INO) - case PROTO_GD00X: - next_callback=initGD00X(); - remote_callback = GD00X_callback; - break; - #endif - #if defined(V761_NRF24L01_INO) - case PROTO_V761: - next_callback=initV761(); - remote_callback = V761_callback; - break; - #endif - #if defined(KF606_NRF24L01_INO) - case PROTO_KF606: - next_callback=initKF606(); - remote_callback = KF606_callback; - break; - #endif - #if defined(POTENSIC_NRF24L01_INO) - case PROTO_POTENSIC: - next_callback=initPOTENSIC(); - remote_callback = POTENSIC_callback; - break; - #endif - #if defined(ZSX_NRF24L01_INO) - case PROTO_ZSX: - next_callback=initZSX(); - remote_callback = ZSX_callback; - break; - #endif - #if defined(FX816_NRF24L01_INO) - case PROTO_FX816: - next_callback=initFX816(); - remote_callback = FX816_callback; - break; - #endif - #if defined(BAYANG_RX_NRF24L01_INO) - case PROTO_BAYANG_RX: - next_callback=initBayang_Rx(); - remote_callback = Bayang_Rx_callback; - break; - #endif - #if defined(TIGER_NRF24L01_INO) - case PROTO_TIGER: - next_callback=initTIGER(); - remote_callback = TIGER_callback; - break; - #endif - #if defined(XK_NRF24L01_INO) - case PROTO_XK: - next_callback=initXK(); - remote_callback = XK_callback; - break; - #endif - #if defined(PROPEL_NRF24L01_INO) - case PROTO_PROPEL: - next_callback=initPROPEL(); - remote_callback = PROPEL_callback; - break; - #endif - #if defined(XN297DUMP_NRF24L01_INO) - case PROTO_XN297DUMP: - next_callback=initXN297Dump(); - remote_callback = XN297Dump_callback; - break; - #endif - #if defined(JJRC345_NRF24L01_INO) - case PROTO_JJRC345: - next_callback=initJJRC345(); - remote_callback = JJRC345_callback; - break; - #endif - #if defined(Q90C_NRF24L01_INO) - case PROTO_Q90C: - next_callback=initQ90C(); - remote_callback = Q90C_callback; - break; - #endif - #if defined(REALACC_NRF24L01_INO) - case PROTO_REALACC: - next_callback=initREALACC(); - remote_callback = REALACC_callback; - break; - #endif - #if defined(OMP_CC2500_INO) - case PROTO_OMP: - next_callback=initOMP(); - remote_callback = OMP_callback; - break; - #endif - #if defined(TEST_CC2500_INO) - case PROTO_TEST: - next_callback=initTEST(); - remote_callback = TEST_callback; - break; - #endif - #if defined(NANORF_NRF24L01_INO) - case PROTO_NANORF: - next_callback=initNANORF(); - remote_callback = NANORF_callback; - break; - #endif - #endif - #ifdef SX1276_INSTALLED - #if defined(FRSKYR9_SX1276_INO) - case PROTO_FRSKY_R9: - next_callback = initFrSkyR9(); - remote_callback = FrSkyR9_callback; - break; - #endif - #endif - } debugln("Protocol selected: %d, sub proto %d, rxnum %d, option %d", protocol, sub_protocol, RX_num, option); - #ifdef MULTI_NAMES - uint8_t index=0; - while(multi_protocols[index].protocol != 0) - { - if(multi_protocols[index].protocol==protocol) - { - multi_protocols_index=index; - SEND_MULTI_STATUS_on; - #ifdef DEBUG_SERIAL - debug("Proto=%s",multi_protocols[multi_protocols_index].ProtoString); - uint8_t nbr=multi_protocols[multi_protocols_index].nbrSubProto; - debug(", nbr_sub=%d, Sub=",nbr); - if(nbr && (sub_protocol&0x07)32000) - { // next_callback should not be more than 32767 so we will wait here... - uint16_t temp=(next_callback>>10)-2; - delayMilliseconds(temp); - next_callback-=temp<<10; // between 2-3ms left at this stage - } + //Wait 5ms after protocol init cli(); // disable global int - OCR1A = TCNT1 + next_callback*2; // set compare A for callback + OCR1A = TCNT1 + 5000*2; // set compare A for callback #ifndef STM32_BOARD TIFR1 = OCF1A_bm ; // clear compare A flag #else @@ -1973,8 +1385,9 @@ void update_serial_data() cur_protocol[i] = rx_ok_buff[i]; //disable channel mapping - if(!IS_CHMAP_PROTOCOL) //not a protocol supporting ch map to be disabled - DISABLE_CH_MAP_off; + if(multi_protocols[multi_protocols_index].chMap == 0) + DISABLE_CH_MAP_off; //not a protocol supporting ch map to be disabled + if(prev_ch_mapping!=IS_DISABLE_CH_MAP_on) { prev_ch_mapping=IS_DISABLE_CH_MAP_on; diff --git a/Multiprotocol/NCC1701_nrf24l01.ino b/Multiprotocol/NCC1701_nrf24l01.ino index e151f9e..ff0ab27 100644 --- a/Multiprotocol/NCC1701_nrf24l01.ino +++ b/Multiprotocol/NCC1701_nrf24l01.ino @@ -31,7 +31,7 @@ enum { NCC_RX3, }; -static void __attribute__((unused)) NCC_init() +static void __attribute__((unused)) NCC_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -247,7 +247,7 @@ const uint8_t PROGMEM NCC_TX_DATA[][6]= { { 0xC2, 0x93, 0x55, 0x44, 0x4C, 0x0B }, }; -uint16_t initNCC(void) +void NCC_init(void) { BIND_IN_PROGRESS; // autobind protocol @@ -269,9 +269,8 @@ uint16_t initNCC(void) hopping_frequency[4]=0x08; // bind channel 1 hopping_frequency[5]=0x2A; // bind channel 2 hopping_frequency_no=4; // start with bind - NCC_init(); + NCC_RF_init(); phase=NCC_BIND_TX1; - return 10000; } #endif diff --git a/Multiprotocol/NanoRF_nrf24l01.ino b/Multiprotocol/NanoRF_nrf24l01.ino index 4005a9f..06f8d48 100644 --- a/Multiprotocol/NanoRF_nrf24l01.ino +++ b/Multiprotocol/NanoRF_nrf24l01.ino @@ -42,7 +42,7 @@ static void __attribute__((unused)) NANORF_send_packet() } -static void __attribute__((unused)) NANORF_init() +static void __attribute__((unused)) NANORF_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -63,11 +63,10 @@ uint16_t NANORF_callback() return NANORF_PACKET_PERIOD; } -uint16_t initNANORF() +void NANORF_init() { BIND_DONE; - NANORF_init(); - return NANORF_INITIAL_WAIT; + NANORF_RF_init(); } #endif diff --git a/Multiprotocol/OMP_cc2500.ino b/Multiprotocol/OMP_cc2500.ino index 322d11c..e2dbbfa 100644 --- a/Multiprotocol/OMP_cc2500.ino +++ b/Multiprotocol/OMP_cc2500.ino @@ -106,7 +106,7 @@ static void __attribute__((unused)) OMP_send_packet() XN297L_WriteEnhancedPayload(packet, OMP_PAYLOAD_SIZE, packet_sent!=0); } -static void __attribute__((unused)) OMP_init() +static void __attribute__((unused)) OMP_RF_init() { //Config CC2500 #ifdef OMP_HUB_TELEMETRY @@ -278,10 +278,10 @@ uint16_t OMP_callback() return OMP_PACKET_PERIOD; } -uint16_t initOMP() +void OMP_init() { OMP_initialize_txid(); - OMP_init(); + OMP_RF_init(); hopping_frequency_no = 0; packet_sent = 0; #ifdef OMP_HUB_TELEMETRY @@ -295,7 +295,6 @@ uint16_t initOMP() } else phase = OMP_PREPDATA; - return OMP_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/POTENSIC_nrf24l01.ino b/Multiprotocol/POTENSIC_nrf24l01.ino index 5e4b6ac..3d70a8a 100644 --- a/Multiprotocol/POTENSIC_nrf24l01.ino +++ b/Multiprotocol/POTENSIC_nrf24l01.ino @@ -71,7 +71,7 @@ static void __attribute__((unused)) POTENSIC_send_packet() NRF24L01_SetPower(); } -static void __attribute__((unused)) POTENSIC_init() +static void __attribute__((unused)) POTENSIC_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -116,13 +116,12 @@ uint16_t POTENSIC_callback() return POTENSIC_PACKET_PERIOD; } -uint16_t initPOTENSIC(void) +void POTENSIC_init(void) { bind_counter = POTENSIC_BIND_COUNT; POTENSIC_initialize_txid(); - POTENSIC_init(); + POTENSIC_RF_init(); hopping_frequency_no = 0; - return POTENSIC_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/Pelikan_a7105.ino b/Multiprotocol/Pelikan_a7105.ino index 805625b..6354161 100644 --- a/Multiprotocol/Pelikan_a7105.ino +++ b/Multiprotocol/Pelikan_a7105.ino @@ -110,7 +110,7 @@ static void __attribute__((unused)) pelikan_build_packet() A7105_SetPower(); } -uint16_t ReadPelikan() +uint16_t PELIKAN_callback() { if(phase==0) { @@ -242,7 +242,7 @@ const uint8_t PROGMEM pelikan_lite_hopp[][PELIKAN_NUM_RF_CHAN] = { }; #endif -uint16_t initPelikan() +void PELIKAN_init() { A7105_Init(); if(IS_BIND_IN_PROGRESS || sub_protocol==PELIKAN_LITE) @@ -288,6 +288,5 @@ uint16_t initPelikan() hopping_frequency_no=PELIKAN_NUM_RF_CHAN; packet_count=5; phase=0; - return 2400; } #endif diff --git a/Multiprotocol/Propel_nrf24l01.ino b/Multiprotocol/Propel_nrf24l01.ino index 42a698f..2febec8 100644 --- a/Multiprotocol/Propel_nrf24l01.ino +++ b/Multiprotocol/Propel_nrf24l01.ino @@ -155,7 +155,7 @@ static void __attribute__((unused)) PROPEL_data_packet() NRF24L01_WritePayload(packet, PROPEL_PACKET_SIZE); } -static void __attribute__((unused)) PROPEL_init() +static void __attribute__((unused)) PROPEL_RF_init() { NRF24L01_Initialize(); NRF24L01_WriteReg(NRF24L01_00_CONFIG, 0x7f); @@ -281,14 +281,13 @@ uint16_t PROPEL_callback() return PROPEL_PACKET_PERIOD; } -uint16_t initPROPEL() +void PROPEL_init() { BIND_IN_PROGRESS; // autobind protocol PROPEL_initialize_txid(); - PROPEL_init(); + PROPEL_RF_init(); hopping_frequency_no = 0; phase=PROPEL_BIND1; - return PROPEL_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/Q303_nrf24l01.ino b/Multiprotocol/Q303_nrf24l01.ino index 396e910..a1cdec5 100644 --- a/Multiprotocol/Q303_nrf24l01.ino +++ b/Multiprotocol/Q303_nrf24l01.ino @@ -281,7 +281,7 @@ static void __attribute__((unused)) Q303_send_packet(uint8_t bind) NRF24L01_SetPower(); // Set tx_power } -static void __attribute__((unused)) Q303_init() +static void __attribute__((unused)) Q303_RF_init() { const uint8_t bind_address[] = {0xcc,0xcc,0xcc,0xcc,0xcc}; @@ -377,10 +377,10 @@ uint16_t Q303_callback() return packet_period; } -uint16_t initQ303() +void Q303_init() { Q303_initialize_txid(); - Q303_init(); + Q303_RF_init(); bind_counter = Q303_BIND_COUNT; switch(sub_protocol) { @@ -407,7 +407,6 @@ uint16_t initQ303() } hopping_frequency_no = 0; BIND_IN_PROGRESS; // autobind protocol - return Q303_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/Q90C_nrf24l01.ino b/Multiprotocol/Q90C_nrf24l01.ino index d28ea68..d118c7a 100644 --- a/Multiprotocol/Q90C_nrf24l01.ino +++ b/Multiprotocol/Q90C_nrf24l01.ino @@ -131,7 +131,7 @@ static void __attribute__((unused)) Q90C_initialize_txid() crc8=rx_tx_addr[0]^rx_tx_addr[1]^rx_tx_addr[2]^rx_tx_addr[3]; } -static void __attribute__((unused)) Q90C_init() +static void __attribute__((unused)) Q90C_RF_init() { XN297L_Init(); if(IS_BIND_IN_PROGRESS) @@ -157,10 +157,10 @@ uint16_t Q90C_callback() return Q90C_PACKET_PERIOD; } -uint16_t initQ90C() +void Q90C_init() { Q90C_initialize_txid(); - Q90C_init(); + Q90C_RF_init(); hopping_frequency_no = 0; packet_count = 0; bind_counter=Q90C_BIND_COUNT; @@ -170,7 +170,6 @@ uint16_t initQ90C() Q90C_VTX=CH6_SW; packet[8] = 0x00; packet[9] = 0x00; - return Q90C_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/REALACC_nrf24l01.ino b/Multiprotocol/REALACC_nrf24l01.ino index eff18e2..ef962c7 100644 --- a/Multiprotocol/REALACC_nrf24l01.ino +++ b/Multiprotocol/REALACC_nrf24l01.ino @@ -86,7 +86,7 @@ static void __attribute__((unused)) REALACC_initialize_txid() #endif } -static void __attribute__((unused)) REALACC_init() +static void __attribute__((unused)) REALACC_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -124,14 +124,13 @@ uint16_t REALACC_callback() return REALACC_PACKET_PERIOD; } -uint16_t initREALACC() +void REALACC_init() { BIND_IN_PROGRESS; // autobind protocol REALACC_initialize_txid(); - REALACC_init(); + REALACC_RF_init(); bind_counter=REALACC_BIND_COUNT; hopping_frequency_no=0; - return REALACC_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/RadioLink_cc2500.ino b/Multiprotocol/RadioLink_cc2500.ino index f273a6a..b502105 100644 --- a/Multiprotocol/RadioLink_cc2500.ino +++ b/Multiprotocol/RadioLink_cc2500.ino @@ -95,7 +95,7 @@ static void __attribute__((unused)) RLINK_hop() hopping_frequency[rf_ch_num]=12*16+inc; } -static void __attribute__((unused)) RLINK_init() +static void __attribute__((unused)) RLINK_TXID_init() { #ifdef RLINK_FORCE_ID //surface RC6GS @@ -296,14 +296,13 @@ uint16_t RLINK_callback() return 0; } -uint16_t initRLINK() +void RLINK_init() { BIND_DONE; // Not a TX bind protocol - RLINK_init(); + RLINK_TXID_init(); RLINK_rf_init(); packet_count = 0; phase = RLINK_DATA; - return 10000; } #endif \ No newline at end of file diff --git a/Multiprotocol/Redpine_cc2500.ino b/Multiprotocol/Redpine_cc2500.ino index 41b202f..57f22d6 100644 --- a/Multiprotocol/Redpine_cc2500.ino +++ b/Multiprotocol/Redpine_cc2500.ino @@ -96,13 +96,13 @@ static void REDPINE_data_frame() { packet[10] = REDPINE_LOOPTIME_SLOW; } -static uint16_t ReadREDPINE() +uint16_t REDPINE_callback() { CC2500_SetFreqOffset(); if(IS_BIND_IN_PROGRESS) { if (state == REDPINE_BIND) { - REDPINE_init(0); + REDPINE_RF_init(0); } REDPINE_set_channel(49); CC2500_SetTxRxMode(TX_EN); @@ -114,7 +114,7 @@ static uint16_t ReadREDPINE() if(--bind_counter==0) { BIND_DONE; - REDPINE_init(sub_protocol); + REDPINE_RF_init(sub_protocol); } return 4000; } @@ -171,7 +171,7 @@ static const uint8_t REDPINE_init_data[][3] = { {CC2500_3E_PATABLE, 0xff, 0xff} }; -static void REDPINE_init(uint8_t format) +static void REDPINE_RF_init(uint8_t format) { CC2500_Reset(); @@ -195,7 +195,7 @@ static void REDPINE_init(uint8_t format) } } -static uint16_t initREDPINE() +void REDPINE_init() { hopping_frequency_no = 0; // Used from kn_nrf24l01.c : kn_calculate_freqency_hopping_channels @@ -228,8 +228,7 @@ static uint16_t initREDPINE() packet_period = REDPINE_LOOPTIME_SLOW*1000; bind_counter=REDPINE_BIND; - REDPINE_init(sub_protocol); + REDPINE_RF_init(sub_protocol); CC2500_SetTxRxMode(TX_EN); // enable PA - return 10000; } #endif diff --git a/Multiprotocol/SHENQI_nrf24l01.ino b/Multiprotocol/SHENQI_nrf24l01.ino index dcbc6c8..c38d96a 100644 --- a/Multiprotocol/SHENQI_nrf24l01.ino +++ b/Multiprotocol/SHENQI_nrf24l01.ino @@ -29,7 +29,7 @@ const uint8_t PROGMEM SHENQI_Freq[] = { 10,60,10,50,30,40, 20,10,40,30,60,20 }; -void SHENQI_init() +void SHENQI_RF_init() { NRF24L01_Initialize(); NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70); // Clear data ready, data sent, and retransmit @@ -116,14 +116,13 @@ uint16_t SHENQI_callback() return packet_period; } -uint16_t initSHENQI() +void SHENQI_init() { BIND_IN_PROGRESS; // autobind protocol - SHENQI_init(); + SHENQI_RF_init(); hopping_frequency_no = 0; packet_count=0; packet_period=500; - return 1000; } #endif \ No newline at end of file diff --git a/Multiprotocol/SLT_nrf24l01.ino b/Multiprotocol/SLT_nrf24l01.ino index 771caa0..4ae60bc 100644 --- a/Multiprotocol/SLT_nrf24l01.ino +++ b/Multiprotocol/SLT_nrf24l01.ino @@ -52,7 +52,7 @@ enum { SLT_BIND2, }; -static void __attribute__((unused)) SLT_init() +static void __attribute__((unused)) SLT_RF_init() { NRF250K_Init(); NRF250K_SetTXAddr(rx_tx_addr, SLT_TXID_SIZE); @@ -258,7 +258,7 @@ uint16_t SLT_callback() return 19000; } -uint16_t initSLT() +void SLT_init() { BIND_DONE; // Not a TX bind protocol packet_count = 0; @@ -273,10 +273,9 @@ uint16_t initSLT() /* rx_tx_addr[0]=0x01;rx_tx_addr[1]=0x02;rx_tx_addr[2]=0x0B;rx_tx_addr[3]=0x57;*/ #endif } - SLT_init(); + SLT_RF_init(); SLT_set_freq(); phase = SLT_BUILD; - return 50000; } #endif diff --git a/Multiprotocol/Scanner_cc2500.ino b/Multiprotocol/Scanner_cc2500.ino index fa7c416..e7e1cdd 100644 --- a/Multiprotocol/Scanner_cc2500.ino +++ b/Multiprotocol/Scanner_cc2500.ino @@ -93,7 +93,7 @@ static int __attribute__((unused)) Scanner_scan_rssi() return rssi_rel; } -uint16_t Scanner_callback() +uint16_t SCANNER_callback() { uint8_t rssi,max_rssi; @@ -131,7 +131,7 @@ uint16_t Scanner_callback() return 0; } -uint16_t initScanner(void) +void SCANNER_init(void) { rf_ch_num = 0; telemetry_link = 0; @@ -141,7 +141,6 @@ uint16_t initScanner(void) CC2500_Strobe(CC2500_SIDLE); CC2500_SetTxRxMode(RX_EN); CC2500_Strobe(CC2500_SRX); // Receive mode - return 1250; } #endif diff --git a/Multiprotocol/Skyartec_cc2500.ino b/Multiprotocol/Skyartec_cc2500.ino index 3e45969..e82870c 100644 --- a/Multiprotocol/Skyartec_cc2500.ino +++ b/Multiprotocol/Skyartec_cc2500.ino @@ -120,7 +120,7 @@ static void __attribute__((unused)) SKYARTEC_send_bind_packet() CC2500_WriteData(packet, 12); } -uint16_t ReadSKYARTEC() +uint16_t SKYARTEC_callback() { if (phase & 0x01) { @@ -154,7 +154,7 @@ uint16_t ReadSKYARTEC() return 3000; } -uint16_t initSKYARTEC() +void SKYARTEC_init() { SKYARTEC_rf_init(); @@ -168,7 +168,6 @@ uint16_t initSKYARTEC() bind_counter = 250; phase = SKYARTEC_PKT1; - return 10000; } #endif \ No newline at end of file diff --git a/Multiprotocol/Symax_nrf24l01.ino b/Multiprotocol/Symax_nrf24l01.ino index 4bbf645..0409424 100644 --- a/Multiprotocol/Symax_nrf24l01.ino +++ b/Multiprotocol/Symax_nrf24l01.ino @@ -189,7 +189,7 @@ static void __attribute__((unused)) SYMAX_send_packet(uint8_t bind) NRF24L01_SetPower(); // Set tx_power } -static void __attribute__((unused)) symax_init() +static void __attribute__((unused)) symax_rf_init() { NRF24L01_Initialize(); // @@ -331,7 +331,7 @@ static uint8_t chans_data_x5c[] = {0x1d, 0x2f, 0x26, 0x3d, 0x15, 0x2b, 0x25, 0x2 packet_count = 0; } -uint16_t symax_callback() +uint16_t SYMAX_callback() { switch (phase) { @@ -368,14 +368,13 @@ uint16_t symax_callback() return SYMAX_PACKET_PERIOD; } -uint16_t initSymax() +void SYMAX_init() { packet_count = 0; flags = 0; BIND_IN_PROGRESS; // autobind protocol - symax_init(); + symax_rf_init(); phase = SYMAX_INIT1; - return SYMAX_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/TEST_cc2500.ino b/Multiprotocol/TEST_cc2500.ino index e868a4f..bd838cc 100644 --- a/Multiprotocol/TEST_cc2500.ino +++ b/Multiprotocol/TEST_cc2500.ino @@ -43,7 +43,7 @@ uint16_t TEST_callback() return TEST_PACKET_PERIOD>>1; } -uint16_t initTEST() +void TEST_init() { option=1; @@ -57,7 +57,6 @@ uint16_t initTEST() phase=0; for(uint8_t i=0; i5) address_length=5; //default - XN297Dump_init(); + XN297Dump_RF_init(); bind_counter=0; rf_ch_num=0xFF; prev_option=option^0x55; phase=0; // init - return XN297DUMP_INITIAL_WAIT; } #endif diff --git a/Multiprotocol/YD717_nrf24l01.ino b/Multiprotocol/YD717_nrf24l01.ino index 959da75..72ebebf 100644 --- a/Multiprotocol/YD717_nrf24l01.ino +++ b/Multiprotocol/YD717_nrf24l01.ino @@ -12,7 +12,7 @@ You should have received a copy of the GNU General Public License along with Multiprotocol. If not, see . */ -// Last sync with hexfet new_protocols/yd717_nrf24l01.c dated 2015-09-28 +// Last sync with hexfet new_protocols/YD717_nrf24l01.c dated 2015-09-28 #if defined(YD717_NRF24L01_INO) @@ -33,10 +33,10 @@ #define YD717_PAYLOADSIZE 8 // receive data pipes set to this size, but unused -static void __attribute__((unused)) yd717_send_packet(uint8_t bind) +static void __attribute__((unused)) YD717_send_packet() { uint8_t rudder_trim, elevator_trim, aileron_trim; - if (bind) + if (IS_BIND_IN_PROGRESS) { packet[0]= rx_tx_addr[0]; // send data phase address in first 4 bytes packet[1]= rx_tx_addr[1]; @@ -117,7 +117,7 @@ static void __attribute__((unused)) yd717_send_packet(uint8_t bind) NRF24L01_SetPower(); // Set tx_power } -static void __attribute__((unused)) yd717_init() +static void __attribute__((unused)) YD717_RF_init() { NRF24L01_Initialize(); @@ -152,42 +152,32 @@ static void __attribute__((unused)) yd717_init() NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, bind_rx_tx_addr, 5); } -uint16_t yd717_callback() +uint16_t YD717_callback() { - if(IS_BIND_DONE) + if (bind_counter) { - #ifdef MULTI_SYNC - telemetry_set_input_sync(YD717_PACKET_PERIOD); - #endif - yd717_send_packet(0); - } - else - { - if (bind_counter == 0) + bind_counter--; + if(bind_counter==0) { NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, 5); // set address NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, rx_tx_addr, 5); - yd717_send_packet(0); BIND_DONE; // bind complete } - else - { - yd717_send_packet(1); - bind_counter--; - } } + else + #ifdef MULTI_SYNC + telemetry_set_input_sync(YD717_PACKET_PERIOD); + #endif + YD717_send_packet(); return YD717_PACKET_PERIOD; // Packet every 8ms } -uint16_t initYD717() +void YD717_init() { BIND_IN_PROGRESS; // autobind protocol rx_tx_addr[4] = 0xC1; // always uses first data port - yd717_init(); + YD717_RF_init(); bind_counter = YD717_BIND_COUNT; - - // Call callback in 50ms - return YD717_INITIAL_WAIT; } #endif \ No newline at end of file diff --git a/Multiprotocol/ZSX_nrf24l01.ino b/Multiprotocol/ZSX_nrf24l01.ino index 454a6cd..4b1f4b4 100644 --- a/Multiprotocol/ZSX_nrf24l01.ino +++ b/Multiprotocol/ZSX_nrf24l01.ino @@ -63,7 +63,7 @@ static void __attribute__((unused)) ZSX_initialize_txid() #endif } -static void __attribute__((unused)) ZSX_init() +static void __attribute__((unused)) ZSX_RF_init() { NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TX_EN); @@ -94,13 +94,12 @@ uint16_t ZSX_callback() return ZSX_PACKET_PERIOD; } -uint16_t initZSX() +void ZSX_init() { BIND_IN_PROGRESS; // autobind protocol ZSX_initialize_txid(); - ZSX_init(); + ZSX_RF_init(); bind_counter=ZSX_BIND_COUNT; - return ZSX_INITIAL_WAIT; } #endif