From 856d1add1f65a5035b5203c06f2a0ec169182915 Mon Sep 17 00:00:00 2001 From: E1yot Date: Wed, 8 Apr 2020 22:55:59 +0200 Subject: [PATCH] Bugfix and change of the handling of the RX Num. If RX Num is 63, write a finetune value of 127 to the EEPROM. A real finetune value of 127 means, the frequency of module is out of range and the module should be replaced. This way the clone mode should not get unwanted active by a module with a frequency drift arround 63. --- Multiprotocol/FrSkyDVX_common.ino | 3 ++- Multiprotocol/FrSkyX_cc2500.ino | 3 +-- Multiprotocol/FrSky_Rx_cc2500.ino | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Multiprotocol/FrSkyDVX_common.ino b/Multiprotocol/FrSkyDVX_common.ino index e05f6b3..d281516 100644 --- a/Multiprotocol/FrSkyDVX_common.ino +++ b/Multiprotocol/FrSkyDVX_common.ino @@ -113,12 +113,13 @@ void Frsky_init_clone(void) temp++; rx_tx_addr[3] = eeprom_read_byte((EE_ADDR)temp++); rx_tx_addr[2] = eeprom_read_byte((EE_ADDR)temp++); - temp++; hw_ver = eeprom_read_byte((EE_ADDR)temp++); + temp++; for (uint8_t ch = 0; ch < 47; ch++) { hopping_frequency[ch] = eeprom_read_byte((EE_ADDR)temp++); } + debugln("Clone mode"); } #endif diff --git a/Multiprotocol/FrSkyX_cc2500.ino b/Multiprotocol/FrSkyX_cc2500.ino index 9d5a960..1fd8ded 100644 --- a/Multiprotocol/FrSkyX_cc2500.ino +++ b/Multiprotocol/FrSkyX_cc2500.ino @@ -385,8 +385,7 @@ uint16_t ReadFrSkyX() uint16_t initFrSkyX() { set_rx_tx_addr(MProtocol_id_master); - - if ((eeprom_read_byte((EE_ADDR)FRSKY_RX_EEPROM_OFFSET+3)==15) && (eeprom_read_byte((EE_ADDR)FRSKY_RX_EEPROM_OFFSET)<2))// bound in FRSKY-X RX-mode with num 63 -> use clone mode + if ((eeprom_read_byte((EE_ADDR)FRSKY_RX_EEPROM_OFFSET+4)==127) && (eeprom_read_byte((EE_ADDR)FRSKY_RX_EEPROM_OFFSET)<2))// bound in FRSKY-X RX-mode with RX Num 63 -> use clone mode Frsky_init_clone(); else if(protocol==PROTO_FRSKYX) Frsky_init_hop(); diff --git a/Multiprotocol/FrSky_Rx_cc2500.ino b/Multiprotocol/FrSky_Rx_cc2500.ino index dabaeee..171311e 100644 --- a/Multiprotocol/FrSky_Rx_cc2500.ino +++ b/Multiprotocol/FrSky_Rx_cc2500.ino @@ -314,8 +314,7 @@ uint16_t FrSky_Rx_callback() if(packet[1] == 0x03 && packet[2] == 0x01 && frskyx_rx_check_crc()) { rx_tx_addr[0] = packet[3]; // TXID rx_tx_addr[1] = packet[4]; // TXID - rx_tx_addr[2] = packet[12]; // TXID - rx_tx_addr[3] = packet[11]; // HW-Version # + rx_tx_addr[2] = packet[11]; // TXID frsky_rx_finetune = -127; CC2500_WriteReg(CC2500_0C_FSCTRL0, frsky_rx_finetune); phase = FRSKY_RX_TUNE_LOW; @@ -393,15 +392,16 @@ uint16_t FrSky_Rx_callback() eeprom_write_byte((EE_ADDR)temp++, rx_tx_addr[2]); debug("addr[2]=%02X, ", rx_tx_addr[2]); debug("rx_num=%02X, ", packet[12]); // RX # (D16) - if (rx_tx_addr[2]==15) + if (packet[12]==63) { - eeprom_write_byte((EE_ADDR)temp++, rx_tx_addr[3]); - debug("hw_ver=%02X, ", rx_tx_addr[3]); + // If RX Num is 63, write a finetune value of 127 to the EEPROM + // A real finetune value of 127 means, the frequency of module is out of range and the module should be replaced. + eeprom_write_byte((EE_ADDR)temp++, 127); } else { eeprom_write_byte((EE_ADDR)temp++, frsky_rx_finetune); - debugln("tune=%d", (int8_t)frsky_rx_finetune); + debugln("tune=%d", (int8_t)frsky_rx_finetune); } for (ch = 0; ch < 47; ch++) {