From 29d1fb00b1a3ddf334dafe37439d9b67a1d66788 Mon Sep 17 00:00:00 2001 From: Pascal Langer Date: Fri, 12 Feb 2021 11:21:42 +0100 Subject: [PATCH] More code optimization --- Multiprotocol/CABELL_nrf224l01.ino | 4 ++-- Multiprotocol/CFlie_nrf24l01.ino | 5 ++--- Multiprotocol/CG023_nrf24l01.ino | 14 +++++--------- Multiprotocol/DM002_nrf24l01.ino | 28 +++++++++------------------ Multiprotocol/E010R5_cyrf6936.ino | 5 +---- Multiprotocol/E01X_nrf24l01.ino | 27 ++++++++++---------------- Multiprotocol/E129_cyrf6936.ino | 5 +---- Multiprotocol/ESky150_nrf24l01.ino | 4 ++-- Multiprotocol/FQ777_nrf24l01.ino | 8 +++----- Multiprotocol/FX816_nrf24l01.ino | 2 +- Multiprotocol/FY326_nrf24l01.ino | 2 -- Multiprotocol/FlySky_a7105.ino | 26 +++++++++++-------------- Multiprotocol/GD00X_nrf24l01.ino | 8 ++++---- Multiprotocol/Hontai_nrf24l01.ino | 14 ++++++-------- Multiprotocol/JJRC345_nrf24l01.ino | 7 +++---- Multiprotocol/KF606_nrf24l01.ino | 2 +- Multiprotocol/KN_nrf24l01.ino | 4 ++-- Multiprotocol/LOLI_nrf24l01.ino | 5 +---- Multiprotocol/MT99xx_nrf24l01.ino | 7 +++---- Multiprotocol/Multiprotocol.h | 2 +- Multiprotocol/NRF24l01_SPI.ino | 15 ++------------ Multiprotocol/POTENSIC_nrf24l01.ino | 8 ++++---- Multiprotocol/Propel_nrf24l01.ino | 14 +++++++------- Multiprotocol/Q303_nrf24l01.ino | 25 +++++++++--------------- Multiprotocol/Q90C_nrf24l01.ino | 2 +- Multiprotocol/Tiger_nrf24l01.ino | 2 +- Multiprotocol/V2X2_nrf24l01.ino | 4 ++-- Multiprotocol/V911S_xn297l.ino | 29 +++++++++++----------------- Multiprotocol/XK_nrf24l01.ino | 2 +- Multiprotocol/XN297Dump_nrf24l01.ino | 20 ------------------- Multiprotocol/YD717_nrf24l01.ino | 18 +++++++---------- Multiprotocol/ZSX_nrf24l01.ino | 2 +- 32 files changed, 114 insertions(+), 206 deletions(-) diff --git a/Multiprotocol/CABELL_nrf224l01.ino b/Multiprotocol/CABELL_nrf224l01.ino index 18e50bc..61a2f79 100644 --- a/Multiprotocol/CABELL_nrf224l01.ino +++ b/Multiprotocol/CABELL_nrf224l01.ino @@ -364,10 +364,10 @@ static void __attribute__((unused)) CABELL_RF_init() CABELL_setAddress(); NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, 0x20); // 32 byte packet length NRF24L01_WriteReg(NRF24L01_12_RX_PW_P1, 0x20); // 32 byte packet length - NRF24L01_Activate(0x73); // Activate feature register NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3F); // Enable dynamic payload length on all pipes NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x04); // Enable dynamic Payload Length - NRF24L01_Activate(0x73); + + NRF24L01_SetTxRxMode(TX_EN); // Clear data ready, data sent, retransmit and enable CRC 16bits, ready for TX } //----------------------------------------------------------------------------------------- diff --git a/Multiprotocol/CFlie_nrf24l01.ino b/Multiprotocol/CFlie_nrf24l01.ino index 4e45969..6d36d24 100644 --- a/Multiprotocol/CFlie_nrf24l01.ino +++ b/Multiprotocol/CFlie_nrf24l01.ino @@ -658,11 +658,10 @@ static void CFLIE_RF_init() NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, rx_tx_addr, TX_ADDR_SIZE); NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, TX_ADDR_SIZE); - // this sequence necessary for module from stock tx - NRF24L01_Activate(0x73); // Activate feature register 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 - NRF24L01_Activate(0x73); + + NRF24L01_SetTxRxMode(TX_EN); // Clear data ready, data sent, retransmit and enable CRC 16bits, ready for TX } // TODO: Fix telemetry diff --git a/Multiprotocol/CG023_nrf24l01.ino b/Multiprotocol/CG023_nrf24l01.ino index 0221804..9acb9b3 100644 --- a/Multiprotocol/CG023_nrf24l01.ino +++ b/Multiprotocol/CG023_nrf24l01.ino @@ -128,18 +128,14 @@ static void __attribute__((unused)) CG023_RF_init() uint16_t CG023_callback() { - if(IS_BIND_DONE) - { - #ifdef MULTI_SYNC - telemetry_set_input_sync(packet_period); - #endif - } - else + #ifdef MULTI_SYNC + telemetry_set_input_sync(packet_period); + #endif + if(bind_counter) { + bind_counter--; if (bind_counter == 0) BIND_DONE; - else - bind_counter--; } CG023_send_packet(); return packet_period; diff --git a/Multiprotocol/DM002_nrf24l01.ino b/Multiprotocol/DM002_nrf24l01.ino index ace7679..201e14a 100644 --- a/Multiprotocol/DM002_nrf24l01.ino +++ b/Multiprotocol/DM002_nrf24l01.ino @@ -37,10 +37,10 @@ enum DM002_FLAGS { DM002_FLAG_CAMERA2 = 0x80, }; -static void __attribute__((unused)) DM002_send_packet(uint8_t bind) +static void __attribute__((unused)) DM002_send_packet() { memcpy(packet+5,(uint8_t *)"\x00\x7F\x7F\x7F\x00\x00\x00",7); - if(bind) + if(IS_BIND_IN_PROGRESS) { packet[0] = 0xAA; packet[1] = rx_tx_addr[0]; @@ -83,10 +83,7 @@ static void __attribute__((unused)) DM002_send_packet(uint8_t bind) // Power on, TX mode, 2byte CRC // Why CRC0? xn297 does not interpret it - either 16-bit CRC or nothing XN297_Configure(_BV(NRF24L01_00_EN_CRC) | _BV(NRF24L01_00_CRCO) | _BV(NRF24L01_00_PWR_UP)); - if (bind) - NRF24L01_WriteReg(NRF24L01_05_RF_CH, DM002_RF_BIND_CHANNEL); - else - NRF24L01_WriteReg(NRF24L01_05_RF_CH, hopping_frequency[hopping_frequency_no]); + NRF24L01_WriteReg(NRF24L01_05_RF_CH, IS_BIND_IN_PROGRESS ? DM002_RF_BIND_CHANNEL : hopping_frequency[hopping_frequency_no]); // clear packet status bits and TX FIFO NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70); NRF24L01_FlushTx(); @@ -104,26 +101,19 @@ static void __attribute__((unused)) DM002_RF_init() uint16_t DM002_callback() { - if(IS_BIND_DONE) - { - #ifdef MULTI_SYNC - telemetry_set_input_sync(DM002_PACKET_PERIOD); - #endif - DM002_send_packet(0); - } - else + #ifdef MULTI_SYNC + telemetry_set_input_sync(DM002_PACKET_PERIOD); + #endif + if (bind_counter) { + bind_counter--; if (bind_counter == 0) { BIND_DONE; XN297_SetTXAddr(rx_tx_addr, 5); } - else - { - DM002_send_packet(1); - bind_counter--; - } } + DM002_send_packet(); return DM002_PACKET_PERIOD; } diff --git a/Multiprotocol/E010R5_cyrf6936.ino b/Multiprotocol/E010R5_cyrf6936.ino index 37ba366..dd184bc 100644 --- a/Multiprotocol/E010R5_cyrf6936.ino +++ b/Multiprotocol/E010R5_cyrf6936.ino @@ -55,11 +55,8 @@ uint16_t E010R5_callback() { //Bind if(bind_counter) - { - bind_counter--; - if(bind_counter==0) + if(--bind_counter==0) BIND_DONE; - } //Send packet RF2500_SendPayload(); diff --git a/Multiprotocol/E01X_nrf24l01.ino b/Multiprotocol/E01X_nrf24l01.ino index 55f6af9..690968f 100644 --- a/Multiprotocol/E01X_nrf24l01.ino +++ b/Multiprotocol/E01X_nrf24l01.ino @@ -95,14 +95,14 @@ static void __attribute__((unused)) E015_check_arming() } } -static void __attribute__((unused)) E01X_send_packet(uint8_t bind) +static void __attribute__((unused)) E01X_send_packet() { uint8_t can_flip = 0, calibrate = 1; if(sub_protocol==E012) { packet_length=E012_PACKET_SIZE; packet[0] = rx_tx_addr[1]; - if(bind) + if(IS_BIND_IN_PROGRESS) { packet[1] = 0xaa; memcpy(&packet[2], hopping_frequency, E012_NUM_RF_CHANNELS); @@ -134,7 +134,7 @@ static void __attribute__((unused)) E01X_send_packet(uint8_t bind) } else if(sub_protocol==E015) { // E015 - if(bind) + if(IS_BIND_IN_PROGRESS) { packet[0] = 0x18; packet[1] = 0x04; @@ -173,7 +173,7 @@ static void __attribute__((unused)) E01X_send_packet(uint8_t bind) else { // E016H packet_length=E016H_PACKET_SIZE; - if(bind) + if(IS_BIND_IN_PROGRESS) { rf_ch_num=E016H_BIND_CHANNEL; memcpy(packet, &rx_tx_addr[1], 4); @@ -258,8 +258,12 @@ static void __attribute__((unused)) E01X_RF_init() uint16_t E01X_callback() { - if(IS_BIND_IN_PROGRESS) + #ifdef MULTI_SYNC + telemetry_set_input_sync(packet_period); + #endif + if(bind_counter) { + bind_counter--; if (bind_counter == 0) { if(sub_protocol==E016H) @@ -268,19 +272,8 @@ uint16_t E01X_callback() HS6200_SetTXAddr(rx_tx_addr, E01X_ADDRESS_LENGTH); BIND_DONE; } - else - { - E01X_send_packet(1); - bind_counter--; - } - } - else - { - #ifdef MULTI_SYNC - telemetry_set_input_sync(packet_period); - #endif - E01X_send_packet(0); } + E01X_send_packet(); return packet_period; } diff --git a/Multiprotocol/E129_cyrf6936.ino b/Multiprotocol/E129_cyrf6936.ino index ce1c3a8..4e27645 100644 --- a/Multiprotocol/E129_cyrf6936.ino +++ b/Multiprotocol/E129_cyrf6936.ino @@ -92,14 +92,11 @@ uint16_t E129_callback() //Bind if(bind_counter) - { - bind_counter--; - if(bind_counter==0) + if(--bind_counter==0) { BIND_DONE; RF2500_SetTXAddr(rx_tx_addr); // 4 bytes of address } - } //Build packet E129_build_data_packet(); diff --git a/Multiprotocol/ESky150_nrf24l01.ino b/Multiprotocol/ESky150_nrf24l01.ino index 680a9fc..091a75d 100644 --- a/Multiprotocol/ESky150_nrf24l01.ino +++ b/Multiprotocol/ESky150_nrf24l01.ino @@ -36,11 +36,11 @@ static void __attribute__((unused)) ESKY150_RF_init() NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, ESKY150_PAYLOADSIZE); // bytes of data payload for pipe 0 NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, ESKY150_TX_ADDRESS_SIZE); - NRF24L01_Activate(0x73); NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 1); // Dynamic payload for data pipe 0 // Enable: Dynamic Payload Length, Payload with ACK , W_TX_PAYLOAD_NOACK NRF24L01_WriteReg(NRF24L01_1D_FEATURE, _BV(NRF2401_1D_EN_DPL) | _BV(NRF2401_1D_EN_ACK_PAY) | _BV(NRF2401_1D_EN_DYN_ACK)); - NRF24L01_Activate(0x73); + + NRF24L01_SetTxRxMode(TX_EN); // Clear data ready, data sent, retransmit and enable CRC 16bits, ready for TX } static void __attribute__((unused)) ESKY150_bind_init() diff --git a/Multiprotocol/FQ777_nrf24l01.ino b/Multiprotocol/FQ777_nrf24l01.ino index 49874d4..61d0a31 100644 --- a/Multiprotocol/FQ777_nrf24l01.ino +++ b/Multiprotocol/FQ777_nrf24l01.ino @@ -160,6 +160,9 @@ static void __attribute__((unused)) FQ777_RF_init() uint16_t FQ777_callback() { + #ifdef MULTI_SYNC + telemetry_set_input_sync(FQ777_PACKET_PERIOD); + #endif if(bind_counter) { bind_counter--; @@ -169,11 +172,6 @@ uint16_t FQ777_callback() BIND_DONE; } } - #ifdef MULTI_SYNC - else - telemetry_set_input_sync(FQ777_PACKET_PERIOD); - #endif - FQ777_send_packet(); return FQ777_PACKET_PERIOD; } diff --git a/Multiprotocol/FX816_nrf24l01.ino b/Multiprotocol/FX816_nrf24l01.ino index 38040d5..9d1abae 100644 --- a/Multiprotocol/FX816_nrf24l01.ino +++ b/Multiprotocol/FX816_nrf24l01.ino @@ -81,7 +81,7 @@ uint16_t FX816_callback() #ifdef MULTI_SYNC telemetry_set_input_sync(FX816_PACKET_PERIOD); #endif - if(IS_BIND_IN_PROGRESS) + if(bind_counter) if(--bind_counter==0) BIND_DONE; FX816_send_packet(); diff --git a/Multiprotocol/FY326_nrf24l01.ino b/Multiprotocol/FY326_nrf24l01.ino index 017db97..ca11f24 100644 --- a/Multiprotocol/FY326_nrf24l01.ino +++ b/Multiprotocol/FY326_nrf24l01.ino @@ -102,10 +102,8 @@ static void __attribute__((unused)) FY326_RF_init() NRF24L01_WriteReg(NRF24L01_05_RF_CH, FY326_RF_BIND_CHANNEL); NRF24L01_SetBitrate(NRF24L01_BR_250K); - NRF24L01_Activate(0x73); NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3f); NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x07); - NRF24L01_Activate(0x73); //Switch to RX NRF24L01_SetTxRxMode(TXRX_OFF); diff --git a/Multiprotocol/FlySky_a7105.ino b/Multiprotocol/FlySky_a7105.ino index 4c4f550..b312ba0 100644 --- a/Multiprotocol/FlySky_a7105.ino +++ b/Multiprotocol/FlySky_a7105.ino @@ -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_send_packet() { uint8_t i; //servodata timing range for flysky. @@ -137,7 +137,7 @@ static void __attribute__((unused)) FLYSKY_build_packet(uint8_t init) //+100% =~ 0x07ca//=1994us(max) //Center = 0x5d9//=1497us(center) //channel order AIL;ELE;THR;RUD;CH5;CH6;CH7;CH8 - packet[0] = init ? 0xaa : 0x55; + packet[0] = IS_BIND_IN_PROGRESS ? 0xaa : 0x55; packet[1] = rx_tx_addr[3]; packet[2] = rx_tx_addr[2]; packet[3] = rx_tx_addr[1]; @@ -151,31 +151,27 @@ static void __attribute__((unused)) FLYSKY_build_packet(uint8_t init) packet[6 + i*2]=(temp>>8)&0xFF; //high byte of servo timing(1000-2000us) } FLYSKY_apply_extension_flags(); + + A7105_SetPower(); + A7105_WriteData(21, IS_BIND_IN_PROGRESS ? 0x01:hopping_frequency[hopping_frequency_no & 0x0F]); + hopping_frequency_no++; } uint16_t FLYSKY_callback() { + #ifdef MULTI_SYNC + telemetry_set_input_sync(packet_period); + #endif #ifndef FORCE_FLYSKY_TUNING A7105_AdjustLOBaseFreq(1); #endif - if(IS_BIND_IN_PROGRESS) + if(bind_counter) { - FLYSKY_build_packet(1); - A7105_WriteData(21, 1); bind_counter--; if (bind_counter==0) BIND_DONE; } - else - { - #ifdef MULTI_SYNC - telemetry_set_input_sync(packet_period); - #endif - FLYSKY_build_packet(0); - A7105_WriteData(21, hopping_frequency[hopping_frequency_no & 0x0F]); - A7105_SetPower(); - } - hopping_frequency_no++; + FLYSKY_send_packet(); return packet_period; } diff --git a/Multiprotocol/GD00X_nrf24l01.ino b/Multiprotocol/GD00X_nrf24l01.ino index 1fca51d..939c9f9 100644 --- a/Multiprotocol/GD00X_nrf24l01.ino +++ b/Multiprotocol/GD00X_nrf24l01.ino @@ -204,13 +204,13 @@ static void __attribute__((unused)) GD00X_initialize_txid() uint16_t GD00X_callback() { - if(IS_BIND_IN_PROGRESS) - if(--bind_counter==0) - BIND_DONE; - GD00X_send_packet(); #ifdef MULTI_SYNC telemetry_set_input_sync(packet_period); #endif + if(bind_counter) + if(--bind_counter==0) + BIND_DONE; + GD00X_send_packet(); return packet_period; } diff --git a/Multiprotocol/Hontai_nrf24l01.ino b/Multiprotocol/Hontai_nrf24l01.ino index f9d3edd..033f8db 100644 --- a/Multiprotocol/Hontai_nrf24l01.ino +++ b/Multiprotocol/Hontai_nrf24l01.ino @@ -141,14 +141,14 @@ static void __attribute__((unused)) HONTAI_RF_init() else XN297_SetTXAddr((const uint8_t*)"\xd2\xb5\x99\xb3\x4a", 5); - NRF24L01_Activate(0x73); // Activate feature register if(sub_protocol == JJRCX1) { NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0xff); // JJRC uses dynamic payload length NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3f); // match other stock settings even though AA disabled... NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x07); } - NRF24L01_Activate(0x73); // Deactivate feature register + + NRF24L01_SetTxRxMode(TX_EN); // Clear data ready, data sent, retransmit and enable CRC 16bits, ready for TX } const uint8_t PROGMEM HONTAI_hopping_frequency_nonels[][3] = { @@ -201,7 +201,9 @@ static void __attribute__((unused)) HONTAI_initialize_txid() uint16_t HONTAI_callback() { - HONTAI_send_packet(); + #ifdef MULTI_SYNC + telemetry_set_input_sync(packet_period); + #endif if(bind_counter) { bind_counter--; @@ -211,11 +213,7 @@ uint16_t HONTAI_callback() BIND_DONE; } } - #ifdef MULTI_SYNC - else - telemetry_set_input_sync(packet_period); - #endif - + HONTAI_send_packet(); return packet_period; } diff --git a/Multiprotocol/JJRC345_nrf24l01.ino b/Multiprotocol/JJRC345_nrf24l01.ino index 1fcc10c..59fa23e 100644 --- a/Multiprotocol/JJRC345_nrf24l01.ino +++ b/Multiprotocol/JJRC345_nrf24l01.ino @@ -143,11 +143,10 @@ uint16_t JJRC345_callback() #ifdef MULTI_SYNC telemetry_set_input_sync(JJRC345_PACKET_PERIOD); #endif - if(IS_BIND_IN_PROGRESS) + if(bind_counter) { - if (bind_counter) - bind_counter--; - else + bind_counter--; + if (bind_counter==0) BIND_DONE; } JJRC345_send_packet(); diff --git a/Multiprotocol/KF606_nrf24l01.ino b/Multiprotocol/KF606_nrf24l01.ino index f216f91..cd743dc 100644 --- a/Multiprotocol/KF606_nrf24l01.ino +++ b/Multiprotocol/KF606_nrf24l01.ino @@ -89,7 +89,7 @@ uint16_t KF606_callback() #ifdef MULTI_SYNC telemetry_set_input_sync(KF606_PACKET_PERIOD); #endif - if(IS_BIND_IN_PROGRESS) + if(bind_counter) if(--bind_counter==0) { BIND_DONE; diff --git a/Multiprotocol/KN_nrf24l01.ino b/Multiprotocol/KN_nrf24l01.ino index 621c81f..ddd59ec 100644 --- a/Multiprotocol/KN_nrf24l01.ino +++ b/Multiprotocol/KN_nrf24l01.ino @@ -247,11 +247,11 @@ static void __attribute__((unused)) KN_RF_init() NRF24L01_Initialize(); NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, 0x20); // bytes of data payload for pipe 0 - NRF24L01_Activate(0x73); NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 1); // Dynamic payload for data pipe 0 // Enable: Dynamic Payload Length to enable PCF NRF24L01_WriteReg(NRF24L01_1D_FEATURE, _BV(NRF2401_1D_EN_DPL)); - NRF24L01_Activate(0x73); + + NRF24L01_SetTxRxMode(TX_EN); // Clear data ready, data sent, retransmit and enable CRC 16bits, ready for TX } //================================================================================================ diff --git a/Multiprotocol/LOLI_nrf24l01.ino b/Multiprotocol/LOLI_nrf24l01.ino index 72ddfc5..bde11fc 100644 --- a/Multiprotocol/LOLI_nrf24l01.ino +++ b/Multiprotocol/LOLI_nrf24l01.ino @@ -166,14 +166,11 @@ uint16_t LOLI_callback() { case LOLI_BIND1: if(bind_counter) - { - bind_counter--; - if(bind_counter==0) + if(--bind_counter==0) { phase=LOLI_PREP_DATA; break; } - } // send bind packet NRF24L01_SetTxRxMode(TXRX_OFF); NRF24L01_SetTxRxMode(TX_EN); diff --git a/Multiprotocol/MT99xx_nrf24l01.ino b/Multiprotocol/MT99xx_nrf24l01.ino index 04f9f44..a68905c 100644 --- a/Multiprotocol/MT99xx_nrf24l01.ino +++ b/Multiprotocol/MT99xx_nrf24l01.ino @@ -320,6 +320,9 @@ static void __attribute__((unused)) MT99XX_initialize_txid() uint16_t MT99XX_callback() { + #ifdef MULTI_SYNC + telemetry_set_input_sync(packet_period); + #endif if(bind_counter) { bind_counter--; @@ -333,10 +336,6 @@ uint16_t MT99XX_callback() BIND_DONE; } } - #ifdef MULTI_SYNC - else - telemetry_set_input_sync(packet_period); - #endif MT99XX_send_packet(); return packet_period; diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h index b634aa8..efdb9c5 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 39 +#define VERSION_PATCH_LEVEL 40 //****************** // Protocols diff --git a/Multiprotocol/NRF24l01_SPI.ino b/Multiprotocol/NRF24l01_SPI.ino index 05271be..3ab286ed 100644 --- a/Multiprotocol/NRF24l01_SPI.ino +++ b/Multiprotocol/NRF24l01_SPI.ino @@ -38,12 +38,8 @@ void NRF24L01_Initialize() NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, 0x03); // 5 bytes rx/tx address NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x00); // no retransmits NRF24L01_SetBitrate(NRF24L01_BR_1M); // 1Mbps - /* Already done in NRF24L01_Reset - NRF24L01_Activate(0x73); // Activate feature register NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x00); // Disable dynamic payload length on all pipes NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x01); // Set feature bits off and enable the command NRF24L01_B0_TX_PYLD_NOACK - NRF24L01_Activate(0x73); - */ NRF24L01_SetPower(); NRF24L01_SetTxRxMode(TX_EN); // Clear data ready, data sent, retransmit and enable CRC 16bits, ready for TX } @@ -134,13 +130,13 @@ static uint8_t NRF24L01_GetDynamicPayloadSize() return len; } -void NRF24L01_Activate(uint8_t code) +/*void NRF24L01_Activate(uint8_t code) { NRF_CSN_off; SPI_Write(ACTIVATE); SPI_Write(code); NRF_CSN_on; -} +}*/ void NRF24L01_SetBitrate(uint8_t bitrate) { @@ -234,13 +230,6 @@ void NRF24L01_SetTxRxMode(enum TXRX_State mode) void NRF24L01_Reset() { - //** not in deviation but needed to hot switch between models - NRF24L01_Activate(0x73); // Activate feature register - NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x00); // Disable dynamic payload length on all pipes - NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x01); // Set feature bits off - NRF24L01_Activate(0x73); - //** - NRF24L01_FlushTx(); NRF24L01_FlushRx(); NRF24L01_Strobe(0xff); // NOP diff --git a/Multiprotocol/POTENSIC_nrf24l01.ino b/Multiprotocol/POTENSIC_nrf24l01.ino index 12f8d68..74fde10 100644 --- a/Multiprotocol/POTENSIC_nrf24l01.ino +++ b/Multiprotocol/POTENSIC_nrf24l01.ino @@ -91,15 +91,15 @@ static void __attribute__((unused)) POTENSIC_initialize_txid() uint16_t POTENSIC_callback() { - if(IS_BIND_IN_PROGRESS) + #ifdef MULTI_SYNC + telemetry_set_input_sync(POTENSIC_PACKET_PERIOD); + #endif + if(bind_counter) if(--bind_counter==0) { BIND_DONE; XN297_SetTXAddr(rx_tx_addr,5); } - #ifdef MULTI_SYNC - telemetry_set_input_sync(POTENSIC_PACKET_PERIOD); - #endif POTENSIC_send_packet(); return POTENSIC_PACKET_PERIOD; } diff --git a/Multiprotocol/Propel_nrf24l01.ino b/Multiprotocol/Propel_nrf24l01.ino index db63d90..e379973 100644 --- a/Multiprotocol/Propel_nrf24l01.ino +++ b/Multiprotocol/Propel_nrf24l01.ino @@ -160,16 +160,16 @@ static void __attribute__((unused)) PROPEL_RF_init() NRF24L01_Initialize(); NRF24L01_WriteReg(NRF24L01_00_CONFIG, 0x7f); - NRF24L01_WriteReg(NRF24L01_01_EN_AA, 0x3f); // AA on all pipes - NRF24L01_WriteReg(NRF24L01_02_EN_RXADDR, 0x3f); // Enable all pipes - NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x36); // retransmit 1ms, 6 times + NRF24L01_WriteReg(NRF24L01_01_EN_AA, 0x3f); // AA on all pipes + NRF24L01_WriteReg(NRF24L01_02_EN_RXADDR, 0x3f); // Enable all pipes + NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x36); // retransmit 1ms, 6 times NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, (uint8_t *)"\x99\x77\x55\x33\x11", PROPEL_ADDRESS_LENGTH); //Bind address NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, (uint8_t *)"\x99\x77\x55\x33\x11", PROPEL_ADDRESS_LENGTH); //Bind address NRF24L01_WriteReg(NRF24L01_05_RF_CH, PROPEL_BIND_RF_CHANNEL); - NRF24L01_Activate(0x73); // Activate feature register - NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3f); // Enable dynamic payload length - NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x07); // Enable all features - NRF24L01_Activate(0x73); // Activate feature register + NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3f); // Enable dynamic payload length + NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x07); // Enable all features + + NRF24L01_SetTxRxMode(TX_EN); // Clear data ready, data sent, retransmit and enable CRC 16bits, ready for TX } const uint8_t PROGMEM PROPEL_hopping []= { 0x47,0x36,0x27,0x44,0x33,0x0D,0x3C,0x2E,0x1B,0x39,0x2A,0x18 }; diff --git a/Multiprotocol/Q303_nrf24l01.ino b/Multiprotocol/Q303_nrf24l01.ino index 1df2d6d..9544f60 100644 --- a/Multiprotocol/Q303_nrf24l01.ino +++ b/Multiprotocol/Q303_nrf24l01.ino @@ -174,10 +174,10 @@ static uint8_t __attribute__((unused)) cx35_lastButton() return command; } -static void __attribute__((unused)) Q303_send_packet(uint8_t bind) +static void __attribute__((unused)) Q303_send_packet() { uint16_t aileron, elevator, throttle, rudder, slider; - if(bind) + if(IS_BIND_IN_PROGRESS) { packet[0] = 0xaa; memcpy(&packet[1], rx_tx_addr + 1, 4); @@ -270,7 +270,7 @@ static void __attribute__((unused)) Q303_send_packet(uint8_t bind) // Power on, TX mode, CRC enabled XN297_Configure(_BV(NRF24L01_00_EN_CRC) | _BV(NRF24L01_00_CRCO) | _BV(NRF24L01_00_PWR_UP)); - NRF24L01_WriteReg(NRF24L01_05_RF_CH, bind ? Q303_RF_BIND_CHANNEL : hopping_frequency[hopping_frequency_no++]); + NRF24L01_WriteReg(NRF24L01_05_RF_CH, IS_BIND_IN_PROGRESS ? Q303_RF_BIND_CHANNEL : hopping_frequency[hopping_frequency_no++]); hopping_frequency_no %= rf_ch_num; NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70); @@ -334,27 +334,20 @@ static void __attribute__((unused)) Q303_initialize_txid() uint16_t Q303_callback() { - if(IS_BIND_DONE) - { - #ifdef MULTI_SYNC - telemetry_set_input_sync(packet_period); - #endif - Q303_send_packet(0); - } - else + #ifdef MULTI_SYNC + telemetry_set_input_sync(packet_period); + #endif + if(bind_counter) { + bind_counter--; if (bind_counter == 0) { XN297_SetTXAddr(rx_tx_addr, 5); packet_count = 0; BIND_DONE; } - else - { - Q303_send_packet(1); - bind_counter--; - } } + Q303_send_packet(); return packet_period; } diff --git a/Multiprotocol/Q90C_nrf24l01.ino b/Multiprotocol/Q90C_nrf24l01.ino index d118c7a..1aba35d 100644 --- a/Multiprotocol/Q90C_nrf24l01.ino +++ b/Multiprotocol/Q90C_nrf24l01.ino @@ -147,7 +147,7 @@ uint16_t Q90C_callback() #ifdef MULTI_SYNC telemetry_set_input_sync(Q90C_PACKET_PERIOD); #endif - if(IS_BIND_IN_PROGRESS) + if(bind_counter) if(--bind_counter==0) { BIND_DONE; diff --git a/Multiprotocol/Tiger_nrf24l01.ino b/Multiprotocol/Tiger_nrf24l01.ino index b95ed38..498db9c 100644 --- a/Multiprotocol/Tiger_nrf24l01.ino +++ b/Multiprotocol/Tiger_nrf24l01.ino @@ -120,7 +120,7 @@ uint16_t TIGER_callback() #ifdef MULTI_SYNC telemetry_set_input_sync(TIGER_PACKET_PERIOD); #endif - if(IS_BIND_IN_PROGRESS) + if(bind_counter) if(--bind_counter==0) { BIND_DONE; diff --git a/Multiprotocol/V2X2_nrf24l01.ino b/Multiprotocol/V2X2_nrf24l01.ino index 3dba162..1d98a0b 100644 --- a/Multiprotocol/V2X2_nrf24l01.ino +++ b/Multiprotocol/V2X2_nrf24l01.ino @@ -225,8 +225,7 @@ uint16_t V2X2_callback() #ifdef MULTI_SYNC telemetry_set_input_sync(V2X2_PACKET_PERIOD); #endif - V2X2_send_packet(); - if(IS_BIND_IN_PROGRESS) + if(bind_counter) { if (--bind_counter == 0) { @@ -241,6 +240,7 @@ uint16_t V2X2_callback() hopping_frequency_no = 0; } } + V2X2_send_packet(); // Packet every 4ms return V2X2_PACKET_PERIOD; } diff --git a/Multiprotocol/V911S_xn297l.ino b/Multiprotocol/V911S_xn297l.ino index a65aa70..7dc8b75 100644 --- a/Multiprotocol/V911S_xn297l.ino +++ b/Multiprotocol/V911S_xn297l.ino @@ -35,9 +35,9 @@ // flags going to packet[2] #define V911S_FLAG_CALIB 0x01 -static void __attribute__((unused)) V911S_send_packet(uint8_t bind) +static void __attribute__((unused)) V911S_send_packet() { - if(bind) + if(IS_BIND_IN_PROGRESS) { packet[0] = 0x42; packet[1] = 0x4E; @@ -104,7 +104,7 @@ static void __attribute__((unused)) V911S_send_packet(uint8_t bind) if(sub_protocol==V911S_STD) XN297L_WritePayload(packet, V911S_PACKET_SIZE); else - XN297L_WriteEnhancedPayload(packet, V911S_PACKET_SIZE, bind?0:1); + XN297L_WriteEnhancedPayload(packet, V911S_PACKET_SIZE, IS_BIND_IN_PROGRESS?0:1); XN297L_SetPower(); // Set tx_power XN297L_SetFreqOffset(); // Set frequency offset @@ -135,29 +135,22 @@ static void __attribute__((unused)) V911S_initialize_txid() uint16_t V911S_callback() { - if(IS_BIND_DONE) - { - #ifdef MULTI_SYNC - telemetry_set_input_sync(V911S_PACKET_PERIOD); - #endif - V911S_send_packet(0); - } - else + #ifdef MULTI_SYNC + telemetry_set_input_sync(V911S_PACKET_PERIOD); + #endif + if(bind_counter) { + bind_counter--; if (bind_counter == 0) { BIND_DONE; XN297_SetTXAddr(rx_tx_addr, 5); packet_period=V911S_PACKET_PERIOD; } - else - { - V911S_send_packet(1); - bind_counter--; - if(bind_counter==100) // same as original TX... - packet_period=V911S_BIND_PACKET_PERIOD*3; - } + else if(bind_counter==100) // same as original TX... + packet_period=V911S_BIND_PACKET_PERIOD*3; } + V911S_send_packet(); return packet_period; } diff --git a/Multiprotocol/XK_nrf24l01.ino b/Multiprotocol/XK_nrf24l01.ino index 58de0a2..9ac9cb5 100644 --- a/Multiprotocol/XK_nrf24l01.ino +++ b/Multiprotocol/XK_nrf24l01.ino @@ -200,7 +200,7 @@ uint16_t XK_callback() #ifdef MULTI_SYNC telemetry_set_input_sync(XK_PACKET_PERIOD); #endif - if(IS_BIND_IN_PROGRESS) + if(bind_counter) if(--bind_counter==0) { BIND_DONE; diff --git a/Multiprotocol/XN297Dump_nrf24l01.ino b/Multiprotocol/XN297Dump_nrf24l01.ino index 0c1c5a9..53fa280 100644 --- a/Multiprotocol/XN297Dump_nrf24l01.ino +++ b/Multiprotocol/XN297Dump_nrf24l01.ino @@ -43,11 +43,6 @@ static void __attribute__((unused)) XN297Dump_RF_init() NRF24L01_Initialize(); NRF24L01_SetTxRxMode(RX_EN); - NRF24L01_FlushTx(); - NRF24L01_FlushRx(); - NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70); // Clear data ready, data sent, and retransmit - NRF24L01_WriteReg(NRF24L01_01_EN_AA, 0x00); // No Auto Acknowledgment on all data pipes - NRF24L01_WriteReg(NRF24L01_02_EN_RXADDR, 0x01); // Enable data pipe 0 only NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, 0x01); // 3 bytes RX/TX address NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, (uint8_t*)"\x55\x0F\x71", 3); // set up RX address to xn297 preamble NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, XN297DUMP_MAX_PACKET_LEN); // Enable rx pipe 0 @@ -69,11 +64,6 @@ static void __attribute__((unused)) XN297Dump_RF_init() break; } - NRF24L01_Activate(0x73); // Activate feature register - NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x00); // Disable dynamic payload length on all pipes - NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x01); - NRF24L01_Activate(0x73); - NRF24L01_SetPower(); } static boolean __attribute__((unused)) XN297Dump_process_packet(void) @@ -636,11 +626,6 @@ static uint16_t XN297Dump_callback() NRF24L01_Initialize(); NRF24L01_SetTxRxMode(TXRX_OFF); NRF24L01_SetTxRxMode(RX_EN); - NRF24L01_FlushTx(); - NRF24L01_FlushRx(); - NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70); // Clear data ready, data sent, and retransmit - NRF24L01_WriteReg(NRF24L01_01_EN_AA, 0x00); // No Auto Acknowledgment on all data pipes - NRF24L01_WriteReg(NRF24L01_02_EN_RXADDR, 0x01); // Enable data pipe 0 only NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, address_length-2); // RX/TX address length NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, rx_tx_addr, address_length); // set up RX address NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, packet_length); // Enable rx pipe 0 @@ -663,11 +648,6 @@ static uint16_t XN297Dump_callback() break; } - NRF24L01_Activate(0x73); // Activate feature register - NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x00); // Disable dynamic payload length on all pipes - NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x01); - NRF24L01_Activate(0x73); - NRF24L01_SetPower(); NRF24L01_WriteReg(NRF24L01_00_CONFIG, _BV(NRF24L01_00_PWR_UP) | _BV(NRF24L01_00_PRIM_RX)); //_BV(NRF24L01_00_EN_CRC) | _BV(NRF24L01_00_CRCO) | phase++; } diff --git a/Multiprotocol/YD717_nrf24l01.ino b/Multiprotocol/YD717_nrf24l01.ino index b57ddc4..7f2c520 100644 --- a/Multiprotocol/YD717_nrf24l01.ino +++ b/Multiprotocol/YD717_nrf24l01.ino @@ -127,10 +127,8 @@ static void __attribute__((unused)) YD717_RF_init() NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x1A); // 500uS retransmit t/o, 10 tries NRF24L01_WriteReg(NRF24L01_05_RF_CH, YD717_RF_CHANNEL); // Channel 3C - NRF24L01_Activate(0x73); // Activate feature register NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3F); // Enable dynamic payload length on all pipes NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x07); // Set feature bits on - NRF24L01_Activate(0x73); // for bind packets set address to prearranged value known to receiver uint8_t bind_rx_tx_addr[5]; @@ -144,26 +142,24 @@ static void __attribute__((unused)) YD717_RF_init() bind_rx_tx_addr[i] = 0x60 + offset; NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, bind_rx_tx_addr, 5); NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, bind_rx_tx_addr, 5); + + NRF24L01_WriteReg(NRF24L01_00_CONFIG, _BV(NRF24L01_00_EN_CRC) | _BV(NRF24L01_00_PWR_UP)); } uint16_t YD717_callback() { + #ifdef MULTI_SYNC + telemetry_set_input_sync(YD717_PACKET_PERIOD); + #endif if (bind_counter) - { - bind_counter--; - if(bind_counter==0) + 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); BIND_DONE; // bind complete } - } - else - #ifdef MULTI_SYNC - telemetry_set_input_sync(YD717_PACKET_PERIOD); - #endif YD717_send_packet(); - return YD717_PACKET_PERIOD; // Packet every 8ms + return YD717_PACKET_PERIOD; // Packet every 8ms } void YD717_init() diff --git a/Multiprotocol/ZSX_nrf24l01.ino b/Multiprotocol/ZSX_nrf24l01.ino index 04b4904..f36a225 100644 --- a/Multiprotocol/ZSX_nrf24l01.ino +++ b/Multiprotocol/ZSX_nrf24l01.ino @@ -76,7 +76,7 @@ uint16_t ZSX_callback() #ifdef MULTI_SYNC telemetry_set_input_sync(ZSX_PACKET_PERIOD); #endif - if(IS_BIND_IN_PROGRESS) + if(bind_counter) if(--bind_counter==0) { BIND_DONE;