mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 23:58:11 +00:00
Fix FrSky RX bind which could fail if another TX was around
This commit is contained in:
parent
edbf4b6908
commit
d092593e5c
@ -310,8 +310,9 @@ uint16_t FrSky_Rx_callback()
|
|||||||
case FRSKY_RX_TUNE_START:
|
case FRSKY_RX_TUNE_START:
|
||||||
if (len >= packet_length) {
|
if (len >= packet_length) {
|
||||||
CC2500_ReadData(packet, packet_length);
|
CC2500_ReadData(packet, packet_length);
|
||||||
if(packet[1] == 0x03 && packet[2] == 0x01) {
|
if(packet[1] == 0x03 && packet[2] == 0x01 && frskyx_rx_check_crc()) {
|
||||||
if(frskyx_rx_check_crc()) {
|
rx_tx_addr[0] = packet[3]; // TXID
|
||||||
|
rx_tx_addr[1] = packet[4]; // TXID
|
||||||
frsky_rx_finetune = -127;
|
frsky_rx_finetune = -127;
|
||||||
CC2500_WriteReg(CC2500_0C_FSCTRL0, frsky_rx_finetune);
|
CC2500_WriteReg(CC2500_0C_FSCTRL0, frsky_rx_finetune);
|
||||||
phase = FRSKY_RX_TUNE_LOW;
|
phase = FRSKY_RX_TUNE_LOW;
|
||||||
@ -319,7 +320,6 @@ uint16_t FrSky_Rx_callback()
|
|||||||
return 1000;
|
return 1000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
frsky_rx_format = (frsky_rx_format + 1) % FRSKY_RX_FORMATS; // switch to next format (D16FCC, D16LBT, D8)
|
frsky_rx_format = (frsky_rx_format + 1) % FRSKY_RX_FORMATS; // switch to next format (D16FCC, D16LBT, D8)
|
||||||
frsky_rx_initialise_cc2500();
|
frsky_rx_initialise_cc2500();
|
||||||
frsky_rx_finetune += 10;
|
frsky_rx_finetune += 10;
|
||||||
@ -330,7 +330,7 @@ uint16_t FrSky_Rx_callback()
|
|||||||
case FRSKY_RX_TUNE_LOW:
|
case FRSKY_RX_TUNE_LOW:
|
||||||
if (len >= packet_length) {
|
if (len >= packet_length) {
|
||||||
CC2500_ReadData(packet, packet_length);
|
CC2500_ReadData(packet, packet_length);
|
||||||
if (frskyx_rx_check_crc()) {
|
if(packet[1] == 0x03 && packet[2] == 0x01 && frskyx_rx_check_crc() && packet[3] == rx_tx_addr[0] && packet[4] == rx_tx_addr[1]) {
|
||||||
tune_low = frsky_rx_finetune;
|
tune_low = frsky_rx_finetune;
|
||||||
frsky_rx_finetune = 127;
|
frsky_rx_finetune = 127;
|
||||||
CC2500_WriteReg(CC2500_0C_FSCTRL0, frsky_rx_finetune);
|
CC2500_WriteReg(CC2500_0C_FSCTRL0, frsky_rx_finetune);
|
||||||
@ -347,7 +347,7 @@ uint16_t FrSky_Rx_callback()
|
|||||||
case FRSKY_RX_TUNE_HIGH:
|
case FRSKY_RX_TUNE_HIGH:
|
||||||
if (len >= packet_length) {
|
if (len >= packet_length) {
|
||||||
CC2500_ReadData(packet, packet_length);
|
CC2500_ReadData(packet, packet_length);
|
||||||
if (frskyx_rx_check_crc()) {
|
if(packet[1] == 0x03 && packet[2] == 0x01 && frskyx_rx_check_crc() && packet[3] == rx_tx_addr[0] && packet[4] == rx_tx_addr[1]) {
|
||||||
tune_high = frsky_rx_finetune;
|
tune_high = frsky_rx_finetune;
|
||||||
frsky_rx_finetune = (tune_low + tune_high) / 2;
|
frsky_rx_finetune = (tune_low + tune_high) / 2;
|
||||||
CC2500_WriteReg(CC2500_0C_FSCTRL0, (int8_t)frsky_rx_finetune);
|
CC2500_WriteReg(CC2500_0C_FSCTRL0, (int8_t)frsky_rx_finetune);
|
||||||
@ -367,18 +367,13 @@ uint16_t FrSky_Rx_callback()
|
|||||||
case FRSKY_RX_BIND:
|
case FRSKY_RX_BIND:
|
||||||
if(len >= packet_length) {
|
if(len >= packet_length) {
|
||||||
CC2500_ReadData(packet, packet_length);
|
CC2500_ReadData(packet, packet_length);
|
||||||
if (frskyx_rx_check_crc()) {
|
if(packet[1] == 0x03 && packet[2] == 0x01 && frskyx_rx_check_crc() && packet[3] == rx_tx_addr[0] && packet[4] == rx_tx_addr[1] && packet[5] <= 0x2D) {
|
||||||
if (packet[5] <= 0x2D) {
|
|
||||||
for (ch = 0; ch < 5; ch++)
|
for (ch = 0; ch < 5; ch++)
|
||||||
hopping_frequency[packet[5]+ch] = packet[6+ch];
|
hopping_frequency[packet[5]+ch] = packet[6+ch];
|
||||||
state |= 1 << (packet[5] / 5);
|
state |= 1 << (packet[5] / 5);
|
||||||
}
|
|
||||||
}
|
|
||||||
if (state == 0x3ff) {
|
if (state == 0x3ff) {
|
||||||
debugln("bind complete");
|
debug("Bind complete: ");
|
||||||
frsky_rx_calibrate();
|
frsky_rx_calibrate();
|
||||||
rx_tx_addr[0] = packet[3]; // TXID
|
|
||||||
rx_tx_addr[1] = packet[4]; // TXID
|
|
||||||
rx_tx_addr[2] = packet[12]; // RX # (D16)
|
rx_tx_addr[2] = packet[12]; // RX # (D16)
|
||||||
CC2500_WriteReg(CC2500_18_MCSM0, 0x08); // FS_AUTOCAL = manual
|
CC2500_WriteReg(CC2500_18_MCSM0, 0x08); // FS_AUTOCAL = manual
|
||||||
CC2500_WriteReg(CC2500_09_ADDR, rx_tx_addr[0]); // set address
|
CC2500_WriteReg(CC2500_09_ADDR, rx_tx_addr[0]); // set address
|
||||||
@ -388,14 +383,24 @@ uint16_t FrSky_Rx_callback()
|
|||||||
// store format, finetune setting, txid, channel list
|
// store format, finetune setting, txid, channel list
|
||||||
uint16_t temp = FRSKY_RX_EEPROM_OFFSET;
|
uint16_t temp = FRSKY_RX_EEPROM_OFFSET;
|
||||||
eeprom_write_byte((EE_ADDR)temp++, frsky_rx_format);
|
eeprom_write_byte((EE_ADDR)temp++, frsky_rx_format);
|
||||||
|
debug("format=%d, ", frsky_rx_format);
|
||||||
eeprom_write_byte((EE_ADDR)temp++, rx_tx_addr[0]);
|
eeprom_write_byte((EE_ADDR)temp++, rx_tx_addr[0]);
|
||||||
|
debug("addr[0]=%02X, ", rx_tx_addr[0]);
|
||||||
eeprom_write_byte((EE_ADDR)temp++, rx_tx_addr[1]);
|
eeprom_write_byte((EE_ADDR)temp++, rx_tx_addr[1]);
|
||||||
|
debug("addr[1]=%02X, ", rx_tx_addr[1]);
|
||||||
eeprom_write_byte((EE_ADDR)temp++, rx_tx_addr[2]);
|
eeprom_write_byte((EE_ADDR)temp++, rx_tx_addr[2]);
|
||||||
|
debug("rx_num=%02X, ", rx_tx_addr[2]);
|
||||||
eeprom_write_byte((EE_ADDR)temp++, frsky_rx_finetune);
|
eeprom_write_byte((EE_ADDR)temp++, frsky_rx_finetune);
|
||||||
|
debugln("tune=%d", (int8_t)frsky_rx_finetune);
|
||||||
for (ch = 0; ch < 47; ch++)
|
for (ch = 0; ch < 47; ch++)
|
||||||
|
{
|
||||||
eeprom_write_byte((EE_ADDR)temp++, hopping_frequency[ch]);
|
eeprom_write_byte((EE_ADDR)temp++, hopping_frequency[ch]);
|
||||||
|
debug("%02X ", hopping_frequency[ch]);
|
||||||
|
}
|
||||||
|
debugln("");
|
||||||
BIND_DONE;
|
BIND_DONE;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
frsky_rx_strobe_rx();
|
frsky_rx_strobe_rx();
|
||||||
}
|
}
|
||||||
return 1000;
|
return 1000;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user