mirror of
				https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
				synced 2025-11-03 22:31:04 +00:00 
			
		
		
		
	New protocol: FX816
Model P38 Protocol number: 58 Sub protocol: None Channels: A & T
This commit is contained in:
		
							parent
							
								
									9a5309d84b
								
							
						
					
					
						commit
						3067ea3a5c
					
				
							
								
								
									
										113
									
								
								Multiprotocol/FX816_nrf24l01.ino
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								Multiprotocol/FX816_nrf24l01.ino
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,113 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 This project is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					 the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					 (at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Multiprotocol is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 GNU General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 along with Multiprotocol.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					// Compatible with FEI XIONG P38 plane.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(FX816_NRF24L01_INO)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "iface_xn297l.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define FX816_INITIAL_WAIT    500
 | 
				
			||||||
 | 
					#define FX816_PACKET_PERIOD   10000
 | 
				
			||||||
 | 
					#define FX816_RF_BIND_CHANNEL 0x28		//40
 | 
				
			||||||
 | 
					#define FX816_RF_NUM_CHANNELS 4
 | 
				
			||||||
 | 
					#define FX816_PAYLOAD_SIZE    6
 | 
				
			||||||
 | 
					#define FX816_BIND_COUNT	  300		//3sec
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void __attribute__((unused)) FX816_send_packet()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						packet[0] = IS_BIND_IN_PROGRESS?0x55:0xAA;
 | 
				
			||||||
 | 
						packet[1] = rx_tx_addr[0];
 | 
				
			||||||
 | 
						packet[2] = rx_tx_addr[1];
 | 
				
			||||||
 | 
						uint8_t val=convert_channel_8b(AILERON);
 | 
				
			||||||
 | 
						#define FX816_SWITCH 20
 | 
				
			||||||
 | 
						if(val>127+FX816_SWITCH)
 | 
				
			||||||
 | 
							packet[3] = 1;
 | 
				
			||||||
 | 
						else if(val<127-FX816_SWITCH)
 | 
				
			||||||
 | 
							packet[3] = 2;
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							packet[3] = 0;
 | 
				
			||||||
 | 
						packet[4] = convert_channel_16b_limit(THROTTLE,0,100);
 | 
				
			||||||
 | 
						val=0;
 | 
				
			||||||
 | 
						for(uint8_t i=0;i<FX816_PAYLOAD_SIZE-1;i++)
 | 
				
			||||||
 | 
							val+=packet[i];
 | 
				
			||||||
 | 
						packet[5]=val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						NRF24L01_WriteReg(NRF24L01_05_RF_CH, IS_BIND_IN_PROGRESS ? FX816_RF_BIND_CHANNEL:hopping_frequency[hopping_frequency_no++]);
 | 
				
			||||||
 | 
						hopping_frequency_no%=FX816_RF_NUM_CHANNELS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// clear packet status bits and TX FIFO
 | 
				
			||||||
 | 
						NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70);
 | 
				
			||||||
 | 
						NRF24L01_FlushTx();
 | 
				
			||||||
 | 
						XN297_WritePayload(packet, FX816_PAYLOAD_SIZE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Power on, TX mode, 2byte CRC
 | 
				
			||||||
 | 
						XN297_Configure(_BV(NRF24L01_00_EN_CRC) | _BV(NRF24L01_00_CRCO) | _BV(NRF24L01_00_PWR_UP));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						NRF24L01_SetPower();	// Set tx_power
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void __attribute__((unused)) FX816_init()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						NRF24L01_Initialize();
 | 
				
			||||||
 | 
						NRF24L01_SetTxRxMode(TX_EN);
 | 
				
			||||||
 | 
						XN297_SetTXAddr((uint8_t *)"\xcc\xcc\xcc\xcc\xcc", 5);
 | 
				
			||||||
 | 
						NRF24L01_FlushTx();
 | 
				
			||||||
 | 
						NRF24L01_FlushRx();
 | 
				
			||||||
 | 
						NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70);     	// Clear data ready, data sent, and retransmit
 | 
				
			||||||
 | 
						NRF24L01_WriteReg(NRF24L01_01_EN_AA, 0x00);      	// No Auto Acknowldgement on all data pipes
 | 
				
			||||||
 | 
						NRF24L01_WriteReg(NRF24L01_02_EN_RXADDR, 0x01);  	// Enable data pipe 0 only
 | 
				
			||||||
 | 
						NRF24L01_SetBitrate(NRF24L01_BR_1M);             	// 1Mbps
 | 
				
			||||||
 | 
						NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x00);	// No retransmits
 | 
				
			||||||
 | 
						NRF24L01_SetPower();
 | 
				
			||||||
 | 
						NRF24L01_Activate(0x73);							// Activate feature register
 | 
				
			||||||
 | 
						NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x00);			// Disable dynamic payload length on all pipes
 | 
				
			||||||
 | 
						NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x01);
 | 
				
			||||||
 | 
						NRF24L01_Activate(0x73);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void __attribute__((unused)) FX816_initialize_txid()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						//Only 8 IDs: the RX led does not indicate frame loss.
 | 
				
			||||||
 | 
						//I didn't open the plane to find out if I could connect there so this is the best I came up with with few trial and errors...
 | 
				
			||||||
 | 
						rx_tx_addr[0]=0x35+(rx_tx_addr[3]&0x07);							//Original dump=0x35
 | 
				
			||||||
 | 
						rx_tx_addr[1]=0x09;													//Original dump=0x09
 | 
				
			||||||
 | 
						memcpy(hopping_frequency,"\x09\x1B\x30\x42",FX816_RF_NUM_CHANNELS); //Original dump=9=0x09,27=0x1B,48=0x30,66=0x42
 | 
				
			||||||
 | 
						for(uint8_t i=0;i<FX816_RF_NUM_CHANNELS;i++)
 | 
				
			||||||
 | 
							hopping_frequency[i]+=rx_tx_addr[3]&0x07;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint16_t FX816_callback()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						#ifdef MULTI_SYNC
 | 
				
			||||||
 | 
							telemetry_set_input_sync(FX816_PACKET_PERIOD);
 | 
				
			||||||
 | 
						#endif
 | 
				
			||||||
 | 
						if(IS_BIND_IN_PROGRESS)
 | 
				
			||||||
 | 
							if(--bind_counter==0)
 | 
				
			||||||
 | 
								BIND_DONE;
 | 
				
			||||||
 | 
						FX816_send_packet();
 | 
				
			||||||
 | 
						return FX816_PACKET_PERIOD;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint16_t initFX816()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						BIND_IN_PROGRESS;	// autobind protocol
 | 
				
			||||||
 | 
						FX816_initialize_txid();
 | 
				
			||||||
 | 
						FX816_init();
 | 
				
			||||||
 | 
						hopping_frequency_no = 0;
 | 
				
			||||||
 | 
						bind_counter=FX816_BIND_COUNT;
 | 
				
			||||||
 | 
						return FX816_INITIAL_WAIT;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@ -55,4 +55,5 @@
 | 
				
			|||||||
55,Frsky_RX
 | 
					55,Frsky_RX
 | 
				
			||||||
56,AFHDS2A_RX
 | 
					56,AFHDS2A_RX
 | 
				
			||||||
57,HoTT
 | 
					57,HoTT
 | 
				
			||||||
 | 
					58,FX816,P38
 | 
				
			||||||
63,XN_DUMP,250K,1M,2M
 | 
					63,XN_DUMP,250K,1M,2M
 | 
				
			||||||
 | 
				
			|||||||
@ -71,6 +71,7 @@ const char STR_SCANNER[]	="Scanner";
 | 
				
			|||||||
const char STR_FRSKY_RX[]	="FrSkyRX";
 | 
					const char STR_FRSKY_RX[]	="FrSkyRX";
 | 
				
			||||||
const char STR_AFHDS2A_RX[]	="FS2A_RX";
 | 
					const char STR_AFHDS2A_RX[]	="FS2A_RX";
 | 
				
			||||||
const char STR_HOTT[]		="HoTT";
 | 
					const char STR_HOTT[]		="HoTT";
 | 
				
			||||||
 | 
					const char STR_FX816[]		="FX816";
 | 
				
			||||||
const char STR_XN297DUMP[]	="XN297DP";
 | 
					const char STR_XN297DUMP[]	="XN297DP";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char STR_SUBTYPE_FLYSKY[] =     "\x04""Std\0""V9x9""V6x6""V912""CX20";
 | 
					const char STR_SUBTYPE_FLYSKY[] =     "\x04""Std\0""V9x9""V6x6""V912""CX20";
 | 
				
			||||||
@ -107,6 +108,7 @@ const char STR_SUBTYPE_REDPINE[] =    "\x04""Fast""Slow";
 | 
				
			|||||||
const char STR_SUBTYPE_POTENSIC[] =   "\x03""A20";
 | 
					const char STR_SUBTYPE_POTENSIC[] =   "\x03""A20";
 | 
				
			||||||
const char STR_SUBTYPE_ZSX[] =        "\x07""280JJRC";
 | 
					const char STR_SUBTYPE_ZSX[] =        "\x07""280JJRC";
 | 
				
			||||||
const char STR_SUBTYPE_FLYZONE[] =    "\x05""FZ410";
 | 
					const char STR_SUBTYPE_FLYZONE[] =    "\x05""FZ410";
 | 
				
			||||||
 | 
					const char STR_SUBTYPE_FX816[] =    "\x03""P38";
 | 
				
			||||||
const char STR_SUBTYPE_XN297DUMP[] =  "\x07""250Kbps""1Mbps\0 ""2Mbps\0 ";
 | 
					const char STR_SUBTYPE_XN297DUMP[] =  "\x07""250Kbps""1Mbps\0 ""2Mbps\0 ";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum
 | 
					enum
 | 
				
			||||||
@ -259,7 +261,7 @@ const mm_protocol_definition multi_protocols[] = {
 | 
				
			|||||||
	{PROTO_E01X,       STR_E01X,      3, STR_SUBTYPE_E01X,      OPTION_OPTION  },
 | 
						{PROTO_E01X,       STR_E01X,      3, STR_SUBTYPE_E01X,      OPTION_OPTION  },
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if defined(V911S_NRF24L01_INO)
 | 
					#if defined(V911S_NRF24L01_INO)
 | 
				
			||||||
	{PROTO_V911S,      STR_V911S,     0, NO_SUBTYPE,            OPTION_RFTUNE  },
 | 
						{PROTO_V911S,      STR_V911S,     0, NO_SUBTYPE,            OPTION_NONE    },
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if defined(GD00X_NRF24L01_INO)
 | 
					#if defined(GD00X_NRF24L01_INO)
 | 
				
			||||||
	{PROTO_GD00X,      STR_GD00X,     2, STR_SUBTYPE_GD00X,     OPTION_RFTUNE  },
 | 
						{PROTO_GD00X,      STR_GD00X,     2, STR_SUBTYPE_GD00X,     OPTION_RFTUNE  },
 | 
				
			||||||
@ -294,6 +296,9 @@ const mm_protocol_definition multi_protocols[] = {
 | 
				
			|||||||
#if defined(HOTT_CC2500_INO)
 | 
					#if defined(HOTT_CC2500_INO)
 | 
				
			||||||
	{PROTO_HOTT,       STR_HOTT,      0, NO_SUBTYPE,            OPTION_RFTUNE  },
 | 
						{PROTO_HOTT,       STR_HOTT,      0, NO_SUBTYPE,            OPTION_RFTUNE  },
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#if defined(FX816_NRF24L01_INO)
 | 
				
			||||||
 | 
						{PROTO_FX816,      STR_FX816,     1, STR_SUBTYPE_FX816,     OPTION_NONE    },
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
#if defined(XN297DUMP_NRF24L01_INO)
 | 
					#if defined(XN297DUMP_NRF24L01_INO)
 | 
				
			||||||
	{PROTO_XN297DUMP,  STR_XN297DUMP, 3, STR_SUBTYPE_XN297DUMP, OPTION_RFCHAN  },
 | 
						{PROTO_XN297DUMP,  STR_XN297DUMP, 3, STR_SUBTYPE_XN297DUMP, OPTION_RFCHAN  },
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -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	44
 | 
					#define VERSION_PATCH_LEVEL	45
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//******************
 | 
					//******************
 | 
				
			||||||
// Protocols
 | 
					// Protocols
 | 
				
			||||||
@ -84,6 +84,7 @@ enum PROTOCOLS
 | 
				
			|||||||
	PROTO_FRSKY_RX	= 55,	// =>CC2500
 | 
						PROTO_FRSKY_RX	= 55,	// =>CC2500
 | 
				
			||||||
	PROTO_AFHDS2A_RX= 56,	// =>A7105
 | 
						PROTO_AFHDS2A_RX= 56,	// =>A7105
 | 
				
			||||||
	PROTO_HOTT		= 57,	// =>CC2500
 | 
						PROTO_HOTT		= 57,	// =>CC2500
 | 
				
			||||||
 | 
						PROTO_FX816		= 58,	// =>NRF24L01
 | 
				
			||||||
	PROTO_XN297DUMP	= 63,	// =>NRF24L01
 | 
						PROTO_XN297DUMP	= 63,	// =>NRF24L01
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -671,6 +672,7 @@ Serial: 100000 Baud 8e2      _ xxxx xxxx p --
 | 
				
			|||||||
				FRSKY_RX	55
 | 
									FRSKY_RX	55
 | 
				
			||||||
				AFHDS2A_RX	56
 | 
									AFHDS2A_RX	56
 | 
				
			||||||
				HOTT		57
 | 
									HOTT		57
 | 
				
			||||||
 | 
									FX816		58
 | 
				
			||||||
   BindBit=>		0x80	1=Bind/0=No
 | 
					   BindBit=>		0x80	1=Bind/0=No
 | 
				
			||||||
   AutoBindBit=>	0x40	1=Yes /0=No
 | 
					   AutoBindBit=>	0x40	1=Yes /0=No
 | 
				
			||||||
   RangeCheck=>		0x20	1=Yes /0=No
 | 
					   RangeCheck=>		0x20	1=Yes /0=No
 | 
				
			||||||
 | 
				
			|||||||
@ -1415,6 +1415,12 @@ static void protocol_init()
 | 
				
			|||||||
						remote_callback = ZSX_callback;
 | 
											remote_callback = ZSX_callback;
 | 
				
			||||||
						break;
 | 
											break;
 | 
				
			||||||
				#endif
 | 
									#endif
 | 
				
			||||||
 | 
									#if defined(FX816_NRF24L01_INO)
 | 
				
			||||||
 | 
										case PROTO_FX816:
 | 
				
			||||||
 | 
											next_callback=initFX816();
 | 
				
			||||||
 | 
											remote_callback = FX816_callback;
 | 
				
			||||||
 | 
											break;
 | 
				
			||||||
 | 
									#endif
 | 
				
			||||||
				#if defined(XN297DUMP_NRF24L01_INO)
 | 
									#if defined(XN297DUMP_NRF24L01_INO)
 | 
				
			||||||
					case PROTO_XN297DUMP:
 | 
										case PROTO_XN297DUMP:
 | 
				
			||||||
						next_callback=initXN297Dump();
 | 
											next_callback=initXN297Dump();
 | 
				
			||||||
 | 
				
			|||||||
@ -218,6 +218,7 @@
 | 
				
			|||||||
	#undef	MT99XX_NRF24L01_INO
 | 
						#undef	MT99XX_NRF24L01_INO
 | 
				
			||||||
	#undef	MJXQ_NRF24L01_INO
 | 
						#undef	MJXQ_NRF24L01_INO
 | 
				
			||||||
	#undef	SHENQI_NRF24L01_INO
 | 
						#undef	SHENQI_NRF24L01_INO
 | 
				
			||||||
 | 
						#undef	FX816_NRF24L01_INO
 | 
				
			||||||
	#undef	FY326_NRF24L01_INO
 | 
						#undef	FY326_NRF24L01_INO
 | 
				
			||||||
	#undef	FQ777_NRF24L01_INO
 | 
						#undef	FQ777_NRF24L01_INO
 | 
				
			||||||
	#undef	ASSAN_NRF24L01_INO
 | 
						#undef	ASSAN_NRF24L01_INO
 | 
				
			||||||
 | 
				
			|||||||
@ -197,6 +197,7 @@
 | 
				
			|||||||
#define	ESKY_NRF24L01_INO
 | 
					#define	ESKY_NRF24L01_INO
 | 
				
			||||||
#define	ESKY150_NRF24L01_INO
 | 
					#define	ESKY150_NRF24L01_INO
 | 
				
			||||||
#define	FQ777_NRF24L01_INO
 | 
					#define	FQ777_NRF24L01_INO
 | 
				
			||||||
 | 
					#define	FX816_NRF24L01_INO
 | 
				
			||||||
#define	FY326_NRF24L01_INO
 | 
					#define	FY326_NRF24L01_INO
 | 
				
			||||||
#define	GD00X_NRF24L01_INO
 | 
					#define	GD00X_NRF24L01_INO
 | 
				
			||||||
#define	GW008_NRF24L01_INO
 | 
					#define	GW008_NRF24L01_INO
 | 
				
			||||||
@ -564,6 +565,8 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]=	{
 | 
				
			|||||||
		EU_8
 | 
							EU_8
 | 
				
			||||||
	PROTO_FRSKY_RX
 | 
						PROTO_FRSKY_RX
 | 
				
			||||||
		NONE
 | 
							NONE
 | 
				
			||||||
 | 
						PROTO_FX816
 | 
				
			||||||
 | 
							NONE
 | 
				
			||||||
	PROTO_FY326
 | 
						PROTO_FY326
 | 
				
			||||||
		FY326
 | 
							FY326
 | 
				
			||||||
		FY319
 | 
							FY319
 | 
				
			||||||
 | 
				
			|||||||
@ -91,6 +91,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|
 | 
				
			||||||
[FrskyX_RX](Protocols_Details.md#FRSKYX_RX---55)|55|FCC|EU_LBT|||||CC2500|
 | 
					[FrskyX_RX](Protocols_Details.md#FRSKYX_RX---55)|55|FCC|EU_LBT|||||CC2500|
 | 
				
			||||||
 | 
					[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|
 | 
				
			||||||
[GW008](Protocols_Details.md#GW008---32)|32|GW008||||||||NRF24L01|XN297
 | 
					[GW008](Protocols_Details.md#GW008---32)|32|GW008||||||||NRF24L01|XN297
 | 
				
			||||||
@ -834,6 +835,15 @@ A|E|T|R|FMODE|AUX6|AUX7
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
FMODE and AUX7 have 4 positions: -100%..-50%=>0, -50%..5%=>1, 5%..50%=>2, 50%..100%=>3
 | 
					FMODE and AUX7 have 4 positions: -100%..-50%=>0, -50%..5%=>1, 5%..50%=>2, 50%..100%=>3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## FX816 - *58*
 | 
				
			||||||
 | 
					Model: FEI XIONG FX816 P38
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Only 8 TX IDs available
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CH1|CH2|CH3|CH4
 | 
				
			||||||
 | 
					---|---|---|---
 | 
				
			||||||
 | 
					A|-|T|-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## FY326 - *20*
 | 
					## FY326 - *20*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Sub_protocol FY326 - *0*
 | 
					### Sub_protocol FY326 - *0*
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user