mirror of
				https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
				synced 2025-11-03 22:31:04 +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