mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 20:08:11 +00:00
FrSkyRX: check additional ID and use RX num
This commit is contained in:
parent
08eee34446
commit
8af985a2cb
@ -313,6 +313,7 @@ uint16_t FrSky_Rx_callback()
|
|||||||
if(packet[1] == 0x03 && packet[2] == 0x01 && frskyx_rx_check_crc()) {
|
if(packet[1] == 0x03 && packet[2] == 0x01 && frskyx_rx_check_crc()) {
|
||||||
rx_tx_addr[0] = packet[3]; // TXID
|
rx_tx_addr[0] = packet[3]; // TXID
|
||||||
rx_tx_addr[1] = packet[4]; // TXID
|
rx_tx_addr[1] = packet[4]; // TXID
|
||||||
|
rx_tx_addr[2] = packet[11]; // 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;
|
||||||
@ -330,7 +331,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(packet[1] == 0x03 && packet[2] == 0x01 && frskyx_rx_check_crc() && packet[3] == rx_tx_addr[0] && packet[4] == rx_tx_addr[1]) {
|
if(packet[1] == 0x03 && packet[2] == 0x01 && frskyx_rx_check_crc() && packet[3] == rx_tx_addr[0] && packet[4] == rx_tx_addr[1] && (frsky_rx_format == FRSKY_RX_D8 || packet[11] == rx_tx_addr[2])) {
|
||||||
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 +348,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(packet[1] == 0x03 && packet[2] == 0x01 && frskyx_rx_check_crc() && packet[3] == rx_tx_addr[0] && packet[4] == rx_tx_addr[1]) {
|
if(packet[1] == 0x03 && packet[2] == 0x01 && frskyx_rx_check_crc() && packet[3] == rx_tx_addr[0] && packet[4] == rx_tx_addr[1] && (frsky_rx_format == FRSKY_RX_D8 || packet[11] == rx_tx_addr[2])) {
|
||||||
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,14 +368,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(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[1] == 0x03 && packet[2] == 0x01 && frskyx_rx_check_crc() && packet[3] == rx_tx_addr[0] && packet[4] == rx_tx_addr[1] && (frsky_rx_format == FRSKY_RX_D8 || packet[11] == rx_tx_addr[2]) && 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) {
|
||||||
debug("Bind complete: ");
|
debug("Bind complete: ");
|
||||||
frsky_rx_calibrate();
|
frsky_rx_calibrate();
|
||||||
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
|
||||||
CC2500_WriteReg(CC2500_07_PKTCTRL1, 0x05); // check address
|
CC2500_WriteReg(CC2500_07_PKTCTRL1, 0x05); // check address
|
||||||
@ -389,7 +389,8 @@ uint16_t FrSky_Rx_callback()
|
|||||||
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]);
|
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]);
|
debug("addr[2]=%02X, ", rx_tx_addr[2]);
|
||||||
|
debug("rx_num=%02X, ", packet[12]); // RX # (D16)
|
||||||
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);
|
debugln("tune=%d", (int8_t)frsky_rx_finetune);
|
||||||
for (ch = 0; ch < 47; ch++)
|
for (ch = 0; ch < 47; ch++)
|
||||||
@ -408,7 +409,7 @@ uint16_t FrSky_Rx_callback()
|
|||||||
case FRSKY_RX_DATA:
|
case FRSKY_RX_DATA:
|
||||||
if (len >= packet_length) {
|
if (len >= packet_length) {
|
||||||
CC2500_ReadData(packet, packet_length);
|
CC2500_ReadData(packet, packet_length);
|
||||||
if (packet[1] == rx_tx_addr[0] && packet[2] == rx_tx_addr[1] && frskyx_rx_check_crc() && (frsky_rx_format == FRSKY_RX_D8 || packet[6] == rx_tx_addr[2])) {
|
if (packet[1] == rx_tx_addr[0] && packet[2] == rx_tx_addr[1] && frskyx_rx_check_crc() && (frsky_rx_format == FRSKY_RX_D8 || (packet[6] == RX_num && packet[3] == rx_tx_addr[2])) {
|
||||||
RX_RSSI = packet[packet_length-2];
|
RX_RSSI = packet[packet_length-2];
|
||||||
if(RX_RSSI >= 128)
|
if(RX_RSSI >= 128)
|
||||||
RX_RSSI -= 128;
|
RX_RSSI -= 128;
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#define VERSION_MAJOR 1
|
#define VERSION_MAJOR 1
|
||||||
#define VERSION_MINOR 3
|
#define VERSION_MINOR 3
|
||||||
#define VERSION_REVISION 0
|
#define VERSION_REVISION 0
|
||||||
#define VERSION_PATCH_LEVEL 81
|
#define VERSION_PATCH_LEVEL 82
|
||||||
|
|
||||||
//******************
|
//******************
|
||||||
// Protocols
|
// Protocols
|
||||||
|
@ -92,7 +92,7 @@ CFlie|38|CFlie||||||||NRF24L01|
|
|||||||
[FrskyV](Protocols_Details.md#FRSKYV---25)|25|FrskyV||||||||CC2500|
|
[FrskyV](Protocols_Details.md#FRSKYV---25)|25|FrskyV||||||||CC2500|
|
||||||
[FrskyX](Protocols_Details.md#FRSKYX---15)|15|CH_16|CH_8|EU_16|EU_8|||||CC2500|
|
[FrskyX](Protocols_Details.md#FRSKYX---15)|15|CH_16|CH_8|EU_16|EU_8|||||CC2500|
|
||||||
[FrskyX2](Protocols_Details.md#FRSKYX2---64)|64|CH_16|CH_8|EU_16|EU_8|||||CC2500|
|
[FrskyX2](Protocols_Details.md#FRSKYX2---64)|64|CH_16|CH_8|EU_16|EU_8|||||CC2500|
|
||||||
[FrskyX_RX](Protocols_Details.md#FRSKYX_RX---55)|55|||||||||CC2500|
|
[Frsky_RX](Protocols_Details.md#FRSKY_RX---55)|55|||||||||CC2500|
|
||||||
[FX816](Protocols_Details.md#FX816---58)|28|FX816|P38|||||||NRF24L01|
|
[FX816](Protocols_Details.md#FX816---58)|28|FX816|P38|||||||NRF24L01|
|
||||||
[FY326](Protocols_Details.md#FY326---20)|20|FY326|FY319|||||||NRF24L01|
|
[FY326](Protocols_Details.md#FY326---20)|20|FY326|FY319|||||||NRF24L01|
|
||||||
[GD00X](Protocols_Details.md#GD00X---47)|47|GD_V1*|GD_V2*|||||||NRF24L01|
|
[GD00X](Protocols_Details.md#GD00X---47)|47|GD_V1*|GD_V2*|||||||NRF24L01|
|
||||||
@ -375,8 +375,8 @@ CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8
|
|||||||
## FRSKYX2 - *64*
|
## FRSKYX2 - *64*
|
||||||
Same as FrSkyX but for v2.1.0.
|
Same as FrSkyX but for v2.1.0.
|
||||||
|
|
||||||
## FRSKYX_RX - *55*
|
## FRSKY_RX - *55*
|
||||||
The FrSkyX receiver protocol enables master/slave trainning, separate access from 2 different radios to the same model,...
|
The FrSky receiver protocol enables master/slave trainning, separate access from 2 different radios to the same model,...
|
||||||
|
|
||||||
Auto selection of FrSkyD and FrSkyX v1.xxx at bind time.
|
Auto selection of FrSkyD and FrSkyX v1.xxx at bind time.
|
||||||
|
|
||||||
@ -384,6 +384,8 @@ Available in OpenTX 2.3.3, Trainer Mode Master/Multi
|
|||||||
|
|
||||||
Extended limits supported
|
Extended limits supported
|
||||||
|
|
||||||
|
For **FrSkyX, RX num must match on the master and slave**. This enables a multi student configuration for example.
|
||||||
|
|
||||||
Option for this protocol corresponds to fine frequency tuning.
|
Option for this protocol corresponds to fine frequency tuning.
|
||||||
If the value is equal to 0, the RX will auto tune otherwise it will use the indicated value.
|
If the value is equal to 0, the RX will auto tune otherwise it will use the indicated value.
|
||||||
This value is different for each Module and **must** be accurate otherwise the link will not be stable.
|
This value is different for each Module and **must** be accurate otherwise the link will not be stable.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user