From 7676398aabb45f4d1088e55859fc668806b8f63e Mon Sep 17 00:00:00 2001 From: Pascal Langer Date: Mon, 25 Jan 2021 11:33:30 +0100 Subject: [PATCH] Fix OMP protocol --- Multiprotocol/Corona_cc2500.ino | 7 +----- Multiprotocol/ESky150v2_cc2500.ino | 2 -- Multiprotocol/FrSkyDVX_common.ino | 3 +-- Multiprotocol/FrSkyD_cc2500.ino | 6 +---- Multiprotocol/FrSkyL_cc2500.ino | 6 +---- Multiprotocol/FrSkyV_cc2500.ino | 6 +---- Multiprotocol/FrSkyX_cc2500.ino | 6 +---- Multiprotocol/Futaba_cc2500.ino | 1 - Multiprotocol/HOTT_cc2500.ino | 1 - Multiprotocol/Hitec_cc2500.ino | 1 - Multiprotocol/Multiprotocol.h | 2 +- Multiprotocol/OMP_cc2500.ino | 7 +++--- Multiprotocol/RadioLink_cc2500.ino | 12 +--------- Multiprotocol/Redpine_cc2500.ino | 35 +++++++++++------------------- Multiprotocol/Skyartec_cc2500.ino | 7 +----- Multiprotocol/WFLY2_a7105.ino | 1 - Multiprotocol/WK2x01_cyrf6936.ino | 1 - 17 files changed, 26 insertions(+), 78 deletions(-) diff --git a/Multiprotocol/Corona_cc2500.ino b/Multiprotocol/Corona_cc2500.ino index 9bbcc3a..574bc78 100644 --- a/Multiprotocol/Corona_cc2500.ino +++ b/Multiprotocol/Corona_cc2500.ino @@ -61,7 +61,6 @@ static void __attribute__((unused)) CORONA_rf_init() CC2500_WriteReg(CC2500_15_DEVIATN, 0x50); } - prev_option = option; CC2500_WriteReg(CC2500_0C_FSCTRL0, option); //not sure what they are doing to the PATABLE since basically only the first byte is used and it's only 8 bytes long. So I think they end up filling the PATABLE fully with 0xFF @@ -262,11 +261,7 @@ uint16_t ReadCORONA() telemetry_set_input_sync(22000); #endif // Tune frequency if it has been changed - if ( prev_option != option ) - { - CC2500_WriteReg(CC2500_0C_FSCTRL0, option); - prev_option = option ; - } + CC2500_SetFreqOffset(); if(IS_BIND_IN_PROGRESS) { diff --git a/Multiprotocol/ESky150v2_cc2500.ino b/Multiprotocol/ESky150v2_cc2500.ino index fdd72a7..ab58d95 100644 --- a/Multiprotocol/ESky150v2_cc2500.ino +++ b/Multiprotocol/ESky150v2_cc2500.ino @@ -79,7 +79,6 @@ static void __attribute__((unused)) ESKY150V2_send_packet() uint16_t ESKY150V2_callback() { - if(option==0) option=1; //Trick the RF component auto select system if(IS_BIND_DONE) { #ifdef MULTI_SYNC @@ -107,7 +106,6 @@ uint16_t ESKY150V2_callback() uint16_t initESKY150V2() { - if(option==0) option=1; // Trick the RF component auto select system CC2500_250K_Init(); ESKY150V2_set_freq(); hopping_frequency_no = 0; diff --git a/Multiprotocol/FrSkyDVX_common.ino b/Multiprotocol/FrSkyDVX_common.ino index 6f0aaa0..eb65d7c 100644 --- a/Multiprotocol/FrSkyDVX_common.ino +++ b/Multiprotocol/FrSkyDVX_common.ino @@ -375,7 +375,6 @@ void Frsky_init_clone(void) val=option; CC2500_WriteReg(reg,val); } - prev_option = option ; // Save option to monitor FSCTRL0 change for(uint8_t i=0;i<17;i++) { uint8_t reg=pgm_read_byte_near(&FRSKY_common_end_cc2500_conf[i][0]); @@ -406,7 +405,7 @@ void Frsky_init_clone(void) { for (uint8_t i=start+1;i<=end;i++) packet[i]=0; - packet[start] = FrSkyX_RX_Seq << 4; //TX=8 at startup + packet[start] = FrSkyX_RX_Seq << 4; #ifdef SPORT_SEND if (FrSkyX_TX_IN_Seq!=0xFF) {//RX has replied at least once diff --git a/Multiprotocol/FrSkyD_cc2500.ino b/Multiprotocol/FrSkyD_cc2500.ino index 9ecfd9d..42b4780 100644 --- a/Multiprotocol/FrSkyD_cc2500.ino +++ b/Multiprotocol/FrSkyD_cc2500.ino @@ -203,11 +203,7 @@ uint16_t ReadFrSky_2way() } CC2500_Strobe(CC2500_SIDLE); CC2500_WriteReg(CC2500_0A_CHANNR, hopping_frequency[counter % 47]); - if ( prev_option != option ) - { - CC2500_WriteReg(CC2500_0C_FSCTRL0,option); // Frequency offset hack - prev_option = option ; - } + CC2500_SetFreqOffset(); CC2500_WriteReg(CC2500_23_FSCAL3, 0x89); CC2500_Strobe(CC2500_SFRX); frsky2way_data_frame(); diff --git a/Multiprotocol/FrSkyL_cc2500.ino b/Multiprotocol/FrSkyL_cc2500.ino index 80338ea..62f8cd9 100644 --- a/Multiprotocol/FrSkyL_cc2500.ino +++ b/Multiprotocol/FrSkyL_cc2500.ino @@ -200,11 +200,7 @@ uint16_t ReadFrSkyL() break; case FRSKY_DATA1: - if ( prev_option != option ) - { - CC2500_WriteReg(CC2500_0C_FSCTRL0,option); //Frequency offset hack - prev_option = option ; - } + CC2500_SetFreqOffset(); FrSkyX_set_start(hopping_frequency_no); FrSkyL_build_packet(); FrSkyL_encode_packet(true); diff --git a/Multiprotocol/FrSkyV_cc2500.ino b/Multiprotocol/FrSkyV_cc2500.ino index 8b0afcb..57f5d8f 100644 --- a/Multiprotocol/FrSkyV_cc2500.ino +++ b/Multiprotocol/FrSkyV_cc2500.ino @@ -122,11 +122,7 @@ uint16_t ReadFRSKYV() #endif uint8_t chan = FRSKYV_calc_channel(); CC2500_Strobe(CC2500_SIDLE); - if (option != prev_option) - { - CC2500_WriteReg(CC2500_0C_FSCTRL0, option); - prev_option=option; - } + CC2500_SetFreqOffset(); CC2500_WriteReg(CC2500_0A_CHANNR, chan * 5 + 6); FRSKYV_build_data_packet(); diff --git a/Multiprotocol/FrSkyX_cc2500.ino b/Multiprotocol/FrSkyX_cc2500.ino index 2ddfb0f..39d2780 100644 --- a/Multiprotocol/FrSkyX_cc2500.ino +++ b/Multiprotocol/FrSkyX_cc2500.ino @@ -142,11 +142,7 @@ uint16_t ReadFrSkyX() case FRSKY_DATA1: CC2500_Strobe(CC2500_SIDLE); - if ( prev_option != option ) - { - CC2500_WriteReg(CC2500_0C_FSCTRL0,option); //Frequency offset hack - prev_option = option ; - } + CC2500_SetFreqOffset(); FrSkyX_set_start(hopping_frequency_no); FrSkyX_build_packet(); if(FrSkyFormat & 2) diff --git a/Multiprotocol/Futaba_cc2500.ino b/Multiprotocol/Futaba_cc2500.ino index 9ab41e6..4d15242 100644 --- a/Multiprotocol/Futaba_cc2500.ino +++ b/Multiprotocol/Futaba_cc2500.ino @@ -79,7 +79,6 @@ static void __attribute__((unused)) SFHSS_rf_init() for (uint8_t i = 0; i < 39; ++i) CC2500_WriteReg(i, pgm_read_byte_near(&SFHSS_init_values[i])); - prev_option = option; CC2500_WriteReg(CC2500_0C_FSCTRL0, option); CC2500_SetTxRxMode(TX_EN); diff --git a/Multiprotocol/HOTT_cc2500.ino b/Multiprotocol/HOTT_cc2500.ino index 1014cbb..0f11c6f 100644 --- a/Multiprotocol/HOTT_cc2500.ino +++ b/Multiprotocol/HOTT_cc2500.ino @@ -86,7 +86,6 @@ static void __attribute__((unused)) HOTT_rf_init() for (uint8_t i = 0; i < 39; ++i) CC2500_WriteReg(i, pgm_read_byte_near(&HOTT_init_values[i])); - prev_option = option; CC2500_WriteReg(CC2500_0C_FSCTRL0, option); CC2500_SetTxRxMode(TX_EN); diff --git a/Multiprotocol/Hitec_cc2500.ino b/Multiprotocol/Hitec_cc2500.ino index 1eaabe2..fd98381 100644 --- a/Multiprotocol/Hitec_cc2500.ino +++ b/Multiprotocol/Hitec_cc2500.ino @@ -54,7 +54,6 @@ static void __attribute__((unused)) HITEC_CC2500_init() for (uint8_t i = 0; i < 39; ++i) CC2500_WriteReg(i, pgm_read_byte_near(&HITEC_init_values[i])); - prev_option = option; CC2500_WriteReg(CC2500_0C_FSCTRL0, option); CC2500_SetTxRxMode(TX_EN); diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h index 315cb28..c92948e 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 11 +#define VERSION_PATCH_LEVEL 12 //****************** // Protocols diff --git a/Multiprotocol/OMP_cc2500.ino b/Multiprotocol/OMP_cc2500.ino index c545927..322d11c 100644 --- a/Multiprotocol/OMP_cc2500.ino +++ b/Multiprotocol/OMP_cc2500.ino @@ -30,7 +30,8 @@ Multiprotocol is distributed in the hope that it will be useful, static void __attribute__((unused)) OMP_send_packet() { #ifdef OMP_HUB_TELEMETRY - if(option==0) option=1; // Select the CC2500 by default + if(option==0) + prev_option=option=1; // Select the CC2500 by default PE1_off; PE2_on; // CC2500 antenna RF2 #endif @@ -110,7 +111,7 @@ static void __attribute__((unused)) OMP_init() //Config CC2500 #ifdef OMP_HUB_TELEMETRY if(option==0) - option=1; // Select the CC2500 + prev_option=option=1; // Select the CC2500 #endif XN297L_Init(); XN297L_SetTXAddr((uint8_t*)"FLPBD", 5); @@ -119,7 +120,7 @@ static void __attribute__((unused)) OMP_init() #ifdef OMP_HUB_TELEMETRY //Config NRF - option=0; // Select the NRF + prev_option=option=0; // Select the NRF XN297L_Init(); XN297_Configure(_BV(NRF24L01_00_EN_CRC)); XN297_SetRXAddr(rx_tx_addr, 5); // Set the RX address diff --git a/Multiprotocol/RadioLink_cc2500.ino b/Multiprotocol/RadioLink_cc2500.ino index 18c3088..f273a6a 100644 --- a/Multiprotocol/RadioLink_cc2500.ino +++ b/Multiprotocol/RadioLink_cc2500.ino @@ -139,21 +139,11 @@ static void __attribute__((unused)) RLINK_rf_init() CC2500_WriteReg(5, 0xDC); } - prev_option = option; CC2500_WriteReg(CC2500_0C_FSCTRL0, option); CC2500_SetTxRxMode(TX_EN); } -static void __attribute__((unused)) RLINK_tune_freq() -{ - if ( prev_option != option ) - { - CC2500_WriteReg(CC2500_0C_FSCTRL0, option); - prev_option = option ; - } -} - static void __attribute__((unused)) RLINK_send_packet() { static uint32_t pseudo=0; @@ -245,7 +235,7 @@ uint16_t RLINK_callback() telemetry_set_input_sync(RLINK_TIMING_PROTO); #endif CC2500_SetPower(); - RLINK_tune_freq(); + CC2500_SetFreqOffset(); RLINK_send_packet(); #if not defined RLINK_HUB_TELEMETRY return RLINK_TIMING_PROTO; diff --git a/Multiprotocol/Redpine_cc2500.ino b/Multiprotocol/Redpine_cc2500.ino index 7f881db..41b202f 100644 --- a/Multiprotocol/Redpine_cc2500.ino +++ b/Multiprotocol/Redpine_cc2500.ino @@ -98,11 +98,7 @@ static void REDPINE_data_frame() { static uint16_t ReadREDPINE() { - if ( prev_option != option ) - { // Frequency adjust - CC2500_WriteReg(CC2500_0C_FSCTRL0, option); - prev_option = option ; - } + CC2500_SetFreqOffset(); if(IS_BIND_IN_PROGRESS) { if (state == REDPINE_BIND) { @@ -122,22 +118,18 @@ static uint16_t ReadREDPINE() } return 4000; } - else - { - #ifdef MULTI_SYNC - telemetry_set_input_sync(packet_period); - #endif - CC2500_SetTxRxMode(TX_EN); - REDPINE_set_channel(hopping_frequency_no); - CC2500_SetPower(); - CC2500_Strobe(CC2500_SFRX); - REDPINE_data_frame(); - CC2500_Strobe(CC2500_SIDLE); - hopping_frequency_no = (hopping_frequency_no + 1) % 49; - CC2500_WriteData(packet, REDPINE_PACKET_SIZE); - return packet_period; - } - return 1; + #ifdef MULTI_SYNC + telemetry_set_input_sync(packet_period); + #endif + CC2500_SetTxRxMode(TX_EN); + REDPINE_set_channel(hopping_frequency_no); + CC2500_SetPower(); + CC2500_Strobe(CC2500_SFRX); + REDPINE_data_frame(); + CC2500_Strobe(CC2500_SIDLE); + hopping_frequency_no = (hopping_frequency_no + 1) % 49; + CC2500_WriteData(packet, REDPINE_PACKET_SIZE); + return packet_period; } // register, fast 250k, slow @@ -189,7 +181,6 @@ static void REDPINE_init(uint8_t format) CC2500_WriteReg(REDPINE_init_data[i][0], REDPINE_init_data[i][format+1]); } - prev_option = option; CC2500_WriteReg(CC2500_0C_FSCTRL0, option); CC2500_Strobe(CC2500_SIDLE); diff --git a/Multiprotocol/Skyartec_cc2500.ino b/Multiprotocol/Skyartec_cc2500.ino index 8334682..3e45969 100644 --- a/Multiprotocol/Skyartec_cc2500.ino +++ b/Multiprotocol/Skyartec_cc2500.ino @@ -54,7 +54,6 @@ static void __attribute__((unused)) SKYARTEC_rf_init() for (uint8_t i = 4; i <= 0x2E; ++i) CC2500_WriteReg(i, pgm_read_byte_near(&SKYARTEC_init_values[i-4])); - prev_option = option; CC2500_WriteReg(CC2500_0C_FSCTRL0, option); CC2500_SetTxRxMode(TX_EN); @@ -130,11 +129,7 @@ uint16_t ReadSKYARTEC() { CC2500_SetPower(); // Tune frequency if it has been changed - if ( prev_option != option ) - { - CC2500_WriteReg(CC2500_0C_FSCTRL0, option); - prev_option = option ; - } + CC2500_SetFreqOffset(); phase = SKYARTEC_PKT1; } else diff --git a/Multiprotocol/WFLY2_a7105.ino b/Multiprotocol/WFLY2_a7105.ino index 1ad27a3..65227fa 100644 --- a/Multiprotocol/WFLY2_a7105.ino +++ b/Multiprotocol/WFLY2_a7105.ino @@ -304,7 +304,6 @@ uint16_t initWFLY2() rf_ch_num = 0; bind_counter = WFLY2_BIND_COUNT; phase = WFLY2_DATA; - prev_option = option; #ifdef WFLY2_HUB_TELEMETRY packet_count = 0; telemetry_lost = 1; diff --git a/Multiprotocol/WK2x01_cyrf6936.ino b/Multiprotocol/WK2x01_cyrf6936.ino index 221f1e1..f4bffb2 100644 --- a/Multiprotocol/WK2x01_cyrf6936.ino +++ b/Multiprotocol/WK2x01_cyrf6936.ino @@ -477,7 +477,6 @@ uint16_t WK_setup() packet_count = 0; packet_sent = 0; WK_last_beacon = 0; - prev_option=option; if(sub_protocol!=WK2801 || option==0) { CYRF_GetMfgData(cyrfmfg_id);