mirror of
				https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
				synced 2025-11-04 06:51:03 +00:00 
			
		
		
		
	Merge remote-tracking branch 'refs/remotes/pascallanger/master' into benlye-multi-new
This commit is contained in:
		
						commit
						e990d44bb6
					
				@ -18,7 +18,7 @@
 | 
				
			|||||||
18,MJXq,WLH08,X600,X800,H26D,E010,H26WH
 | 
					18,MJXq,WLH08,X600,X800,H26D,E010,H26WH
 | 
				
			||||||
19,Shenqi
 | 
					19,Shenqi
 | 
				
			||||||
20,FY326,FY326,FY319
 | 
					20,FY326,FY326,FY319
 | 
				
			||||||
21,SFHSS,XK,T8J,T10J,TM-FH
 | 
					21,SFHSS
 | 
				
			||||||
22,J6PRO
 | 
					22,J6PRO
 | 
				
			||||||
23,FQ777
 | 
					23,FQ777
 | 
				
			||||||
24,ASSAN
 | 
					24,ASSAN
 | 
				
			||||||
 | 
				
			|||||||
@ -19,7 +19,7 @@
 | 
				
			|||||||
#define VERSION_MAJOR		1
 | 
					#define VERSION_MAJOR		1
 | 
				
			||||||
#define VERSION_MINOR		1
 | 
					#define VERSION_MINOR		1
 | 
				
			||||||
#define VERSION_REVISION	6
 | 
					#define VERSION_REVISION	6
 | 
				
			||||||
#define VERSION_PATCH_LEVEL	24
 | 
					#define VERSION_PATCH_LEVEL	25
 | 
				
			||||||
//******************
 | 
					//******************
 | 
				
			||||||
// Protocols
 | 
					// Protocols
 | 
				
			||||||
//******************
 | 
					//******************
 | 
				
			||||||
@ -196,13 +196,6 @@ enum Q303
 | 
				
			|||||||
	CX10D	= 2,
 | 
						CX10D	= 2,
 | 
				
			||||||
	CX10WD	= 3,
 | 
						CX10WD	= 3,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
enum SFHSS
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	XK		= 0,
 | 
					 | 
				
			||||||
	T10J	= 1,
 | 
					 | 
				
			||||||
	T8J		= 2,
 | 
					 | 
				
			||||||
	TM_FH	= 3,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define NONE 		0
 | 
					#define NONE 		0
 | 
				
			||||||
#define P_HIGH		1
 | 
					#define P_HIGH		1
 | 
				
			||||||
@ -592,11 +585,6 @@ Serial: 100000 Baud 8e2      _ xxxx xxxx p --
 | 
				
			|||||||
			CX35		1
 | 
								CX35		1
 | 
				
			||||||
			CX10D		2
 | 
								CX10D		2
 | 
				
			||||||
			CX10WD		3
 | 
								CX10WD		3
 | 
				
			||||||
		sub_protocol==SFHSS
 | 
					 | 
				
			||||||
			XK			0
 | 
					 | 
				
			||||||
			T10J		1
 | 
					 | 
				
			||||||
			T8J			2
 | 
					 | 
				
			||||||
			TM_FH		3
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
   Power value => 0x80	0=High/1=Low
 | 
					   Power value => 0x80	0=High/1=Low
 | 
				
			||||||
  Stream[3]   = option_protocol;
 | 
					  Stream[3]   = option_protocol;
 | 
				
			||||||
 | 
				
			|||||||
@ -27,6 +27,7 @@ uint8_t rf_setup;
 | 
				
			|||||||
void NRF24L01_Initialize()
 | 
					void NRF24L01_Initialize()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    rf_setup = 0x09;
 | 
					    rf_setup = 0x09;
 | 
				
			||||||
 | 
						prev_power = 0x00;	// Make sure prev_power is inline with current power
 | 
				
			||||||
	XN297_SetScrambledMode(XN297_SCRAMBLED);
 | 
						XN297_SetScrambledMode(XN297_SCRAMBLED);
 | 
				
			||||||
}  
 | 
					}  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -133,6 +134,7 @@ void NRF24L01_SetBitrate(uint8_t bitrate)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Bit 0 goes to RF_DR_HIGH, bit 1 - to RF_DR_LOW
 | 
					    // Bit 0 goes to RF_DR_HIGH, bit 1 - to RF_DR_LOW
 | 
				
			||||||
    rf_setup = (rf_setup & 0xD7) | ((bitrate & 0x02) << 4) | ((bitrate & 0x01) << 3);
 | 
					    rf_setup = (rf_setup & 0xD7) | ((bitrate & 0x02) << 4) | ((bitrate & 0x01) << 3);
 | 
				
			||||||
 | 
					    prev_power=(rf_setup>>1)&0x03;	// Make sure prev_power is inline with current power
 | 
				
			||||||
	NRF24L01_WriteReg(NRF24L01_06_RF_SETUP, rf_setup);
 | 
						NRF24L01_WriteReg(NRF24L01_06_RF_SETUP, rf_setup);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -167,9 +169,9 @@ void NRF24L01_SetPower()
 | 
				
			|||||||
		#endif
 | 
							#endif
 | 
				
			||||||
	if(IS_RANGE_FLAG_on)
 | 
						if(IS_RANGE_FLAG_on)
 | 
				
			||||||
		power=NRF_POWER_0;
 | 
							power=NRF_POWER_0;
 | 
				
			||||||
	rf_setup = (rf_setup & 0xF9) | (power << 1);
 | 
					 | 
				
			||||||
	if(prev_power != power)
 | 
						if(prev_power != power)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
							rf_setup = (rf_setup & 0xF9) | (power << 1);
 | 
				
			||||||
		NRF24L01_WriteReg(NRF24L01_06_RF_SETUP, rf_setup);
 | 
							NRF24L01_WriteReg(NRF24L01_06_RF_SETUP, rf_setup);
 | 
				
			||||||
		prev_power=power;
 | 
							prev_power=power;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -23,14 +23,14 @@
 | 
				
			|||||||
#define SFHSS_PACKET_LEN 13
 | 
					#define SFHSS_PACKET_LEN 13
 | 
				
			||||||
#define SFHSS_TX_ID_LEN   2
 | 
					#define SFHSS_TX_ID_LEN   2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t	fhss_code; // 0-27
 | 
					uint8_t	fhss_code=0; // 0-27
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum {
 | 
					enum {
 | 
				
			||||||
    SFHSS_START = 0x00,
 | 
					    SFHSS_START = 0x00,
 | 
				
			||||||
    SFHSS_CAL   = 0x01,
 | 
					    SFHSS_CAL   = 0x01,
 | 
				
			||||||
    SFHSS_DATA1 = 0x02,	// do not change this value
 | 
					    SFHSS_DATA1 = 0x02,
 | 
				
			||||||
    SFHSS_DATA2 = 0x0B,	// do not change this value
 | 
					    SFHSS_DATA2 = 0x03,
 | 
				
			||||||
    SFHSS_TUNE  = 0x0F
 | 
					    SFHSS_TUNE  = 0x04
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define SFHSS_FREQ0_VAL 0xC4
 | 
					#define SFHSS_FREQ0_VAL 0xC4
 | 
				
			||||||
@ -122,57 +122,40 @@ static void __attribute__((unused)) SFHSS_calc_next_chan()
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*// Channel values are 10-bit values between 86 and 906, 496 is the middle.
 | 
					 | 
				
			||||||
// Values grow down and to the right.
 | 
					 | 
				
			||||||
static void __attribute__((unused)) SFHSS_build_data_packet()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
#define spacer1 0x02
 | 
					 | 
				
			||||||
#define spacer2 (spacer1 << 4)
 | 
					 | 
				
			||||||
    uint8_t ch_offset = phase == SFHSS_DATA1 ? 0 : 4;
 | 
					 | 
				
			||||||
    uint16_t ch1 = convert_channel_16b_nolim(CH_AETR[ch_offset+0],86,906);
 | 
					 | 
				
			||||||
    uint16_t ch2 = convert_channel_16b_nolim(CH_AETR[ch_offset+1],86,906);
 | 
					 | 
				
			||||||
    uint16_t ch3 = convert_channel_16b_nolim(CH_AETR[ch_offset+2],86,906);
 | 
					 | 
				
			||||||
    uint16_t ch4 = convert_channel_16b_nolim(CH_AETR[ch_offset+3],86,906);
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    packet[0]  = 0x81; // can be 80 or 81 for Orange, only 81 for XK
 | 
					 | 
				
			||||||
    packet[1]  = rx_tx_addr[0];
 | 
					 | 
				
			||||||
    packet[2]  = rx_tx_addr[1];
 | 
					 | 
				
			||||||
    packet[3]  = 0;
 | 
					 | 
				
			||||||
    packet[4]  = 0;
 | 
					 | 
				
			||||||
    packet[5]  = (rf_ch_num << 3) | spacer1 | ((ch1 >> 9) & 0x01);
 | 
					 | 
				
			||||||
    packet[6]  = (ch1 >> 1);
 | 
					 | 
				
			||||||
    packet[7]  = (ch1 << 7) | spacer2 | ((ch2 >> 5) & 0x1F);
 | 
					 | 
				
			||||||
    packet[8]  = (ch2 << 3) | spacer1  | ((ch3 >> 9) & 0x01);
 | 
					 | 
				
			||||||
    packet[9]  = (ch3 >> 1);
 | 
					 | 
				
			||||||
    packet[10] = (ch3 << 7) | spacer2  | ((ch4 >> 5) & 0x1F);
 | 
					 | 
				
			||||||
    packet[11] = (ch4 << 3) | ((fhss_code >> 2) & 0x07);
 | 
					 | 
				
			||||||
    packet[12] = (fhss_code << 6) | phase;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Channel values are 12-bit values between 1020 and 2020, 1520 is the middle.
 | 
					// Channel values are 12-bit values between 1020 and 2020, 1520 is the middle.
 | 
				
			||||||
// Futaba @140% is 2070...1520...970
 | 
					// Futaba @140% is 2070...1520...970
 | 
				
			||||||
// Values grow down and to the right.
 | 
					// Values grow down and to the right.
 | 
				
			||||||
static void __attribute__((unused)) SFHSS_build_data_packet()
 | 
					static void __attribute__((unused)) SFHSS_build_data_packet()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	const uint8_t SFHSS_ident[4][3]={
 | 
						// command.bit0 is the packet number indicator: =0 -> SFHSS_DATA1, =1 -> SFHSS_DATA2
 | 
				
			||||||
		{ 0x81, 0x00, 0x00},	//XK
 | 
						// command.bit1 is unknown but seems to be linked to the payload[0].bit0 but more dumps are needed: payload[0]=0x82 -> =0, payload[0]=0x81 -> =1
 | 
				
			||||||
		{ 0x81, 0x42, 0x07},	//T8J
 | 
						// command.bit2 is the failsafe transmission indicator: =0 -> normal data, =1->failsafe data
 | 
				
			||||||
		{ 0x81, 0x0F, 0x09},	//T10J
 | 
						// command.bit3 is the channels indicator: =0 -> CH1-4, =1 -> CH5-8
 | 
				
			||||||
		{ 0x82, 0x9A, 0x06}		//TM-FH
 | 
						uint8_t command= (phase == SFHSS_DATA1) ? 0 : 1;	// Building packet for Data1 or Data2
 | 
				
			||||||
	};
 | 
						counter+=command;
 | 
				
			||||||
 | 
						if(counter&1) command|=0x08;						// Transmit lower and upper channels twice in a row
 | 
				
			||||||
	uint8_t ch_offset = phase == SFHSS_DATA1 ? 0 : 4;
 | 
						if((counter&0x3FE)==0x3FE)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							command|=0x04;									// Transmit failsafe data every 7s
 | 
				
			||||||
 | 
							counter&=0x3FF;									// Reset counter
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							command|=0x02;									// Assuming packet[0] == 0x81
 | 
				
			||||||
 | 
						uint8_t ch_offset = ((command&0x08) >> 1) + ((command&0x04)<<1);	// CH1..CH8 when failsafe is off, CH9..CH16 when failsafe is on
 | 
				
			||||||
	uint16_t ch1 = convert_channel_16b_nolim(CH_AETR[ch_offset+0],2020,1020);
 | 
						uint16_t ch1 = convert_channel_16b_nolim(CH_AETR[ch_offset+0],2020,1020);
 | 
				
			||||||
	uint16_t ch2 = convert_channel_16b_nolim(CH_AETR[ch_offset+1],2020,1020);
 | 
						uint16_t ch2 = convert_channel_16b_nolim(CH_AETR[ch_offset+1],2020,1020);
 | 
				
			||||||
	uint16_t ch3 = convert_channel_16b_nolim(CH_AETR[ch_offset+2],2020,1020);
 | 
						uint16_t ch3 = convert_channel_16b_nolim(CH_AETR[ch_offset+2],2020,1020);
 | 
				
			||||||
	uint16_t ch4 = convert_channel_16b_nolim(CH_AETR[ch_offset+3],2020,1020);
 | 
						uint16_t ch4 = convert_channel_16b_nolim(CH_AETR[ch_offset+3],2020,1020);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	packet[0] = SFHSS_ident[sub_protocol][0]; // can be 80 or 81 for Orange
 | 
						// XK		[0]=0x81 [3]=0x00 [4]=0x00
 | 
				
			||||||
 | 
						// T8J		[0]=0x81 [3]=0x42 [4]=0x07
 | 
				
			||||||
 | 
						// T10J		[0]=0x81 [3]=0x0F [4]=0x09
 | 
				
			||||||
 | 
						// TM-FH	[0]=0x82 [3]=0x9A [4]=0x06
 | 
				
			||||||
 | 
						packet[0] = 0x81;	// can be 80 or 81 for Orange, only 81 for XK
 | 
				
			||||||
	packet[1] = rx_tx_addr[0];
 | 
						packet[1] = rx_tx_addr[0];
 | 
				
			||||||
	packet[2] = rx_tx_addr[1];
 | 
						packet[2] = rx_tx_addr[1];
 | 
				
			||||||
	packet[3] = SFHSS_ident[sub_protocol][1];
 | 
						packet[3] = rx_tx_addr[2];	// ID?
 | 
				
			||||||
	packet[4] = SFHSS_ident[sub_protocol][2];
 | 
						packet[4] = rx_tx_addr[3];	// ID?
 | 
				
			||||||
	packet[5] = (rf_ch_num << 3) | ((ch1 >> 9) & 0x07);
 | 
						packet[5] = (rf_ch_num << 3) | ((ch1 >> 9) & 0x07);
 | 
				
			||||||
	packet[6] = (ch1 >> 1);
 | 
						packet[6] = (ch1 >> 1);
 | 
				
			||||||
	packet[7] = (ch1 << 7) | ((ch2 >> 5) & 0x7F );
 | 
						packet[7] = (ch1 << 7) | ((ch2 >> 5) & 0x7F );
 | 
				
			||||||
@ -180,7 +163,7 @@ static void __attribute__((unused)) SFHSS_build_data_packet()
 | 
				
			|||||||
	packet[9] = (ch3 >> 1);
 | 
						packet[9] = (ch3 >> 1);
 | 
				
			||||||
	packet[10] = (ch3 << 7) | ((ch4 >> 5) & 0x7F );
 | 
						packet[10] = (ch3 << 7) | ((ch4 >> 5) & 0x7F );
 | 
				
			||||||
	packet[11] = (ch4 << 3) | ((fhss_code >> 2) & 0x07 );
 | 
						packet[11] = (ch4 << 3) | ((fhss_code >> 2) & 0x07 );
 | 
				
			||||||
	packet[12] = (fhss_code << 6) | phase;
 | 
						packet[12] = (fhss_code << 6) | command;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __attribute__((unused)) SFHSS_send_packet()
 | 
					static void __attribute__((unused)) SFHSS_send_packet()
 | 
				
			||||||
@ -204,28 +187,31 @@ uint16_t ReadSFHSS()
 | 
				
			|||||||
			else
 | 
								else
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				rf_ch_num = 0;
 | 
									rf_ch_num = 0;
 | 
				
			||||||
 | 
									counter = 0;
 | 
				
			||||||
				phase = SFHSS_DATA1;
 | 
									phase = SFHSS_DATA1;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			return 2000;
 | 
								return 2000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Work cycle, 6.8ms, second packet 1.65ms after first */
 | 
							/* Work cycle: 6.8ms */
 | 
				
			||||||
 | 
					#define SFHSS_PACKET_PERIOD	6800
 | 
				
			||||||
 | 
					#define SFHSS_DATA2_TIMING	1630									// original 1650
 | 
				
			||||||
		case SFHSS_DATA1:
 | 
							case SFHSS_DATA1:
 | 
				
			||||||
			SFHSS_build_data_packet();
 | 
								SFHSS_build_data_packet();
 | 
				
			||||||
			SFHSS_send_packet();
 | 
								SFHSS_send_packet();
 | 
				
			||||||
			phase = SFHSS_DATA2;
 | 
								phase = SFHSS_DATA2;
 | 
				
			||||||
			return 1650;
 | 
								return SFHSS_DATA2_TIMING;								// original 1650
 | 
				
			||||||
		case SFHSS_DATA2:
 | 
							case SFHSS_DATA2:
 | 
				
			||||||
			SFHSS_build_data_packet();
 | 
								SFHSS_build_data_packet();
 | 
				
			||||||
			SFHSS_send_packet();
 | 
								SFHSS_send_packet();
 | 
				
			||||||
			SFHSS_calc_next_chan();
 | 
								SFHSS_calc_next_chan();
 | 
				
			||||||
			phase = SFHSS_TUNE;
 | 
								phase = SFHSS_TUNE;
 | 
				
			||||||
			return 2000;
 | 
								return (SFHSS_PACKET_PERIOD -2000 -SFHSS_DATA2_TIMING);	// original 2000
 | 
				
			||||||
		case SFHSS_TUNE:
 | 
							case SFHSS_TUNE:
 | 
				
			||||||
			phase = SFHSS_DATA1;
 | 
								phase = SFHSS_DATA1;
 | 
				
			||||||
			SFHSS_tune_freq();
 | 
								SFHSS_tune_freq();
 | 
				
			||||||
			SFHSS_tune_chan_fast();
 | 
								SFHSS_tune_chan_fast();
 | 
				
			||||||
			CC2500_SetPower();
 | 
								CC2500_SetPower();
 | 
				
			||||||
			return 3150;
 | 
								return 2000;											// original 3150
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -233,13 +219,13 @@ uint16_t ReadSFHSS()
 | 
				
			|||||||
// Generate internal id
 | 
					// Generate internal id
 | 
				
			||||||
static void __attribute__((unused)) SFHSS_get_tx_id()
 | 
					static void __attribute__((unused)) SFHSS_get_tx_id()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	uint32_t fixed_id;
 | 
					 | 
				
			||||||
	// Some receivers (Orange) behaves better if they tuned to id that has
 | 
						// Some receivers (Orange) behaves better if they tuned to id that has
 | 
				
			||||||
	//  no more than 6 consecutive zeros and ones
 | 
						//  no more than 6 consecutive zeros and ones
 | 
				
			||||||
 | 
						uint32_t fixed_id;
 | 
				
			||||||
	uint8_t run_count = 0;
 | 
						uint8_t run_count = 0;
 | 
				
			||||||
	// add guard for bit count
 | 
						// add guard for bit count
 | 
				
			||||||
	fixed_id = 1 ^ (MProtocol_id & 1);
 | 
						fixed_id = 1 ^ (MProtocol_id & 1);
 | 
				
			||||||
	for (uint8_t i = 0; i < 16; ++i)
 | 
						for (uint8_t i = 0; i < 32; ++i)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		fixed_id = (fixed_id << 1) | (MProtocol_id & 1);
 | 
							fixed_id = (fixed_id << 1) | (MProtocol_id & 1);
 | 
				
			||||||
		MProtocol_id >>= 1;
 | 
							MProtocol_id >>= 1;
 | 
				
			||||||
@ -256,8 +242,10 @@ static void __attribute__((unused)) SFHSS_get_tx_id()
 | 
				
			|||||||
			run_count = 0;
 | 
								run_count = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	//    fixed_id = 0xBC11;
 | 
						//    fixed_id = 0xBC11;
 | 
				
			||||||
	rx_tx_addr[0] = fixed_id >> 8;
 | 
						rx_tx_addr[0] = fixed_id >> 24;
 | 
				
			||||||
	rx_tx_addr[1] = fixed_id;
 | 
						rx_tx_addr[1] = fixed_id >> 16;
 | 
				
			||||||
 | 
						rx_tx_addr[2] = fixed_id >> 8;
 | 
				
			||||||
 | 
						rx_tx_addr[3] = fixed_id >> 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint16_t initSFHSS()
 | 
					uint16_t initSFHSS()
 | 
				
			||||||
@ -265,7 +253,7 @@ uint16_t initSFHSS()
 | 
				
			|||||||
	BIND_DONE;	// Not a TX bind protocol
 | 
						BIND_DONE;	// Not a TX bind protocol
 | 
				
			||||||
	SFHSS_get_tx_id();
 | 
						SFHSS_get_tx_id();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	fhss_code=rx_tx_addr[2]%28; // Initialize it to random 0-27 inclusive
 | 
						fhss_code=random(0xfefefefe)%28; // Initialize it to random 0-27 inclusive
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SFHSS_rf_init();
 | 
						SFHSS_rf_init();
 | 
				
			||||||
	phase = SFHSS_START;
 | 
						phase = SFHSS_START;
 | 
				
			||||||
 | 
				
			|||||||
@ -130,7 +130,7 @@
 | 
				
			|||||||
//#define	V2X2_NRF24L01_INO
 | 
					//#define	V2X2_NRF24L01_INO
 | 
				
			||||||
//#define	YD717_NRF24L01_INO
 | 
					//#define	YD717_NRF24L01_INO
 | 
				
			||||||
//#define	MT99XX_NRF24L01_INO
 | 
					//#define	MT99XX_NRF24L01_INO
 | 
				
			||||||
#define	MJXQ_NRF24L01_INO
 | 
					//#define	MJXQ_NRF24L01_INO
 | 
				
			||||||
//#define	SHENQI_NRF24L01_INO
 | 
					//#define	SHENQI_NRF24L01_INO
 | 
				
			||||||
//#define	FY326_NRF24L01_INO
 | 
					//#define	FY326_NRF24L01_INO
 | 
				
			||||||
//#define	FQ777_NRF24L01_INO
 | 
					//#define	FQ777_NRF24L01_INO
 | 
				
			||||||
@ -368,10 +368,7 @@ const PPM_Parameters PPM_prot[15]=	{
 | 
				
			|||||||
		FY326
 | 
							FY326
 | 
				
			||||||
		FY319
 | 
							FY319
 | 
				
			||||||
	MODE_SFHSS
 | 
						MODE_SFHSS
 | 
				
			||||||
		XK
 | 
							NONE
 | 
				
			||||||
		T10J
 | 
					 | 
				
			||||||
		T8J
 | 
					 | 
				
			||||||
		TM_FH
 | 
					 | 
				
			||||||
	MODE_J6PRO
 | 
						MODE_J6PRO
 | 
				
			||||||
		NONE
 | 
							NONE
 | 
				
			||||||
	MODE_FQ777
 | 
						MODE_FQ777
 | 
				
			||||||
 | 
				
			|||||||
@ -209,17 +209,7 @@ CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8
 | 
				
			|||||||
---|---|---|---|---|---|---|---
 | 
					---|---|---|---|---|---|---|---
 | 
				
			||||||
A|E|T|R|CH5|CH6|CH7|CH8
 | 
					A|E|T|R|CH5|CH6|CH7|CH8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Sub_protocol XK - *0*
 | 
					Channels 9 to 16 are used as failsafe values for the channels 1 to 8.
 | 
				
			||||||
XK transmitter
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Sub_protocol T8J - *1*
 | 
					 | 
				
			||||||
Futaba T8J transmitter
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Sub_protocol T10J - *2*
 | 
					 | 
				
			||||||
Futaba T10J transmitter
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Sub_protocol TM-FH - *3*
 | 
					 | 
				
			||||||
Futaba TM-FH transmitter
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
***
 | 
					***
 | 
				
			||||||
# CYRF6936 RF Module
 | 
					# CYRF6936 RF Module
 | 
				
			||||||
 | 
				
			|||||||
@ -7,21 +7,10 @@ The Deviation project (on which this project was based) have a useful list of mo
 | 
				
			|||||||
<img src="http://img2.cheapdrone.co.uk/images/upload/2014/12/X5C%203/SKU115108-7.jpg" Width="200" Height="200" />
 | 
					<img src="http://img2.cheapdrone.co.uk/images/upload/2014/12/X5C%203/SKU115108-7.jpg" Width="200" Height="200" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Channel Map
 | 
					## Channel Map
 | 
				
			||||||
<<<<<<< HEAD
 | 
					
 | 
				
			||||||
<<<<<<< HEAD
 | 
					 | 
				
			||||||
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9
 | 
					CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9
 | 
				
			||||||
---|---|---|---|---|---|---|---|---
 | 
					---|---|---|---|---|---|---|---|---
 | 
				
			||||||
A|E|T|R|FLIP|RATES|PICTURE|VIDEO|HEADLESS
 | 
					A|E|T|R|FLIP|RATES|PICTURE|VIDEO|HEADLESS
 | 
				
			||||||
=======
 | 
					 | 
				
			||||||
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8
 | 
					 | 
				
			||||||
---|---|---|---|---|---|---|---
 | 
					 | 
				
			||||||
A|E|T|R|FLIP|RATES|PICTURE|VIDEO
 | 
					 | 
				
			||||||
>>>>>>> dd3f8b4717c03dc2f86701191dc8b265d4706751
 | 
					 | 
				
			||||||
=======
 | 
					 | 
				
			||||||
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8
 | 
					 | 
				
			||||||
---|---|---|---|---|---|---|---
 | 
					 | 
				
			||||||
A|E|T|R|FLIP|RATES|PICTURE|VIDEO
 | 
					 | 
				
			||||||
>>>>>>> af88abb13fb63cc2cc399b4bd3b72d4747b7a7cf
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Binding
 | 
					## Binding
 | 
				
			||||||
There are no special binding instructions.  The model powers up in Autobind mode and expects the bind sequence from the transmitter within the first 4-5 seconds. 
 | 
					There are no special binding instructions.  The model powers up in Autobind mode and expects the bind sequence from the transmitter within the first 4-5 seconds. 
 | 
				
			||||||
@ -57,8 +46,6 @@ One of the most annoying functions on the Syma X5C is that the motors stop when
 | 
				
			|||||||
1. When you want to fly in "idle-up" mode flick the switch and your stabilization will always be active.  
 | 
					1. When you want to fly in "idle-up" mode flick the switch and your stabilization will always be active.  
 | 
				
			||||||
1. Remeber to switch off idle-up as soon as the quad lands (or crashes - to avoid damage to the motors)
 | 
					1. Remeber to switch off idle-up as soon as the quad lands (or crashes - to avoid damage to the motors)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<<<<<<< HEAD
 | 
					 | 
				
			||||||
<<<<<<< HEAD
 | 
					 | 
				
			||||||
### Additional notes on rates:
 | 
					### Additional notes on rates:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The SymaX driver can add full trim to the control output.  Doing so enables
 | 
					The SymaX driver can add full trim to the control output.  Doing so enables
 | 
				
			||||||
@ -78,10 +65,6 @@ direction the quadcopter thinks you selected for headless mode may not be
 | 
				
			|||||||
correct after especially wild flights.
 | 
					correct after especially wild flights.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=======
 | 
					 | 
				
			||||||
>>>>>>> dd3f8b4717c03dc2f86701191dc8b265d4706751
 | 
					 | 
				
			||||||
=======
 | 
					 | 
				
			||||||
>>>>>>> af88abb13fb63cc2cc399b4bd3b72d4747b7a7cf
 | 
					 | 
				
			||||||
# Inductrix (Horizon Hobby)
 | 
					# Inductrix (Horizon Hobby)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<img src="https://s7d5.scene7.com/is/image/horizonhobby/BLH8700_a0" Width="200" Height="200" />
 | 
					<img src="https://s7d5.scene7.com/is/image/horizonhobby/BLH8700_a0" Width="200" Height="200" />
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user