This commit is contained in:
midelic 2016-09-23 23:46:48 +03:00 committed by GitHub
parent 6c3ef981e2
commit a0074adcb2
7 changed files with 777 additions and 858 deletions

View File

@ -23,12 +23,12 @@
void A7105_WriteData(uint8_t len, uint8_t channel) void A7105_WriteData(uint8_t len, uint8_t channel)
{ {
uint8_t i; uint8_t i;
A7105_CS_off; A7105_CSN_off;
spi_write(A7105_RST_WRPTR); spi_write(A7105_RST_WRPTR);
spi_write(0x05); spi_write(0x05);
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
spi_write(packet[i]); spi_write(packet[i]);
A7105_CS_on; A7105_CSN_on;
A7105_WriteReg(0x0F, channel); A7105_WriteReg(0x0F, channel);
A7105_Strobe(A7105_TX); A7105_Strobe(A7105_TX);
} }
@ -36,27 +36,27 @@ void A7105_WriteData(uint8_t len, uint8_t channel)
void A7105_ReadData() { void A7105_ReadData() {
uint8_t i; uint8_t i;
A7105_Strobe(0xF0); //A7105_RST_RDPTR A7105_Strobe(0xF0); //A7105_RST_RDPTR
A7105_CS_off; A7105_CSN_off;
spi_write(0x45); spi_write(0x45);
for (i=0;i<16;i++) for (i=0;i<16;i++)
packet[i]=spi_Read(); packet[i]=spi_Read();
A7105_CS_on; A7105_CSN_on;
} }
void A7105_WriteReg(uint8_t address, uint8_t data) { void A7105_WriteReg(uint8_t address, uint8_t data) {
A7105_CS_off; A7105_CSN_off;
spi_write(address); spi_write(address);
NOP(); NOP();
spi_write(data); spi_write(data);
A7105_CS_on; A7105_CSN_on;
} }
uint8_t A7105_ReadReg(uint8_t address) { uint8_t A7105_ReadReg(uint8_t address) {
uint8_t result; uint8_t result;
A7105_CS_off; A7105_CSN_off;
spi_write(address |=0x40); //bit 6 =1 for reading spi_write(address |=0x40); //bit 6 =1 for reading
result = spi_Read(); result = spi_Read();
A7105_CS_on; A7105_CSN_on;
return(result); return(result);
} }
@ -93,13 +93,13 @@ uint8_t A7105_Reset()
} }
void A7105_WriteID(uint32_t ida) { void A7105_WriteID(uint32_t ida) {
A7105_CS_off; A7105_CSN_off;
spi_write(0x06);//ex id=0x5475c52a ;txid3txid2txid1txid0 spi_write(0x06);//ex id=0x5475c52a ;txid3txid2txid1txid0
spi_write((ida>>24)&0xff);//53 spi_write((ida>>24)&0xff);//53
spi_write((ida>>16)&0xff);//75 spi_write((ida>>16)&0xff);//75
spi_write((ida>>8)&0xff);//c5 spi_write((ida>>8)&0xff);//c5
spi_write((ida>>0)&0xff);//2a spi_write((ida>>0)&0xff);//2a
A7105_CS_on; A7105_CSN_on;
} }
/* /*
@ -145,9 +145,9 @@ void A7105_SetPower()
} }
void A7105_Strobe(uint8_t address) { void A7105_Strobe(uint8_t address) {
A7105_CS_off; A7105_CSN_off;
spi_write(address); spi_write(address);
A7105_CS_on; A7105_CSN_on;
} }
const uint8_t PROGMEM HUBSAN_A7105_regs[] = { const uint8_t PROGMEM HUBSAN_A7105_regs[] = {

View File

@ -15,7 +15,7 @@
// Check selected board type // Check selected board type
#ifndef XMEGA #ifndef XMEGA
#if not defined(ARDUINO_AVR_PRO) && not defined(ARDUINO_AVR_MINI) #if not defined(ARDUINO_AVR_PRO) && not defined(ARDUINO_AVR_MINI) && not defined(ARDUINO_AVR_NANO)
#error You must select the board type "Arduino Pro or Pro Mini" or "Arduino Mini" #error You must select the board type "Arduino Pro or Pro Mini" or "Arduino Mini"
#endif #endif
#if F_CPU != 16000000L || not defined(__AVR_ATmega328P__) #if F_CPU != 16000000L || not defined(__AVR_ATmega328P__)
@ -55,7 +55,7 @@ enum PROTOCOLS
MODE_ASSAN = 24, // =>NRF24L01 MODE_ASSAN = 24, // =>NRF24L01
MODE_FRSKYV = 25, // =>CC2500 MODE_FRSKYV = 25, // =>CC2500
MODE_HONTAI = 26, // =>NRF24L01 MODE_HONTAI = 26, // =>NRF24L01
MODE_OPENLRS = 27 // =>OpenLRS hardware MODE_OPENLRS = 27, // =>OpenLRS hardware
}; };
enum Flysky enum Flysky
@ -70,10 +70,13 @@ enum Hisky
Hisky = 0, Hisky = 0,
HK310 = 1 HK310 = 1
}; };
enum DSM2 enum DSM
{ {
DSM2 = 0, DSM2_22 = 0,
DSMX = 1 DSM2_11 = 1,
DSMX_22 = 2,
DSMX_11 = 3,
DSM_AUTO = 4
}; };
enum YD717 enum YD717
{ {
@ -125,7 +128,6 @@ enum MJXQ
H26D = 3, H26D = 3,
E010 = 4 E010 = 4
}; };
enum FRSKYX enum FRSKYX
{ {
CH_16 = 0, CH_16 = 0,
@ -146,22 +148,29 @@ enum HONTAI
struct PPM_Parameters struct PPM_Parameters
{ {
uint8_t protocol : 5; uint8_t protocol : 6;
uint8_t sub_proto : 3; uint8_t sub_proto : 3;
uint8_t rx_num : 4; uint8_t rx_num : 4;
uint8_t power : 1; uint8_t power : 1;
uint8_t autobind : 1; uint8_t autobind : 1;
uint8_t option; uint8_t option;
}; };
// Macros
#define NOP() __asm__ __volatile__("nop")
//*******************
//*** Timer ***
//*******************
#ifdef XMEGA #ifdef XMEGA
#define TIFR1 TCC1.INTFLAGS #define TIFR1 TCC1.INTFLAGS
#define OCF1A_bm TC1_CCAIF_bm #define OCF1A_bm TC1_CCAIF_bm
#define OCR1A TCC1.CCA #define OCR1A TCC1.CCA
#define TCNT1 TCC1.CNT #define TCNT1 TCC1.CNT
#define USARTC0.DATA UDR0 #define UDR0 USARTC0.DATA
#define OCF1B_bm TC1_CCBIF_bm #define OCF1B_bm TC1_CCBIF_bm
#define OCR1B TCC1.CCB #define OCR1B TCC1.CCB
#define TCC1.INTCTRLB TIMSK1 #define TIMSK1 TCC1.INTCTRLB
#define SET_TIMSK1_OCIE1B TIMSK1 = (TIMSK1 & 0xF3) | 0x04 #define SET_TIMSK1_OCIE1B TIMSK1 = (TIMSK1 & 0xF3) | 0x04
#define CLR_TIMSK1_OCIE1B TIMSK1 &= 0xF3 #define CLR_TIMSK1_OCIE1B TIMSK1 &= 0xF3
#else #else
@ -170,157 +179,10 @@ struct PPM_Parameters
#define SET_TIMSK1_OCIE1B TIMSK1 |= _BV(OCIE1B) #define SET_TIMSK1_OCIE1B TIMSK1 |= _BV(OCIE1B)
#define CLR_TIMSK1_OCIE1B TIMSK1 &=~_BV(OCIE1B) #define CLR_TIMSK1_OCIE1B TIMSK1 &=~_BV(OCIE1B)
#endif #endif
//*******************
//*** Pinouts ***
//*******************
#define LED_pin 5 //D13 = PB5
#define BIND_pin 5 //D13 = PB5
#define PPM_pin 3 //D3 = PD3
#ifdef XMEGA
#define SDI_pin 6 //SDIO-D6
#else
#define SDI_pin 5 //D5 = PD5
#endif
#define SCLK_pin 4 //D4 = PD4
#define A7105_CS_pin 2 //D2 = PD2
#define SDO_pin 6 //D6 = PD6
#define CC25_CSN_pin 7 //D7 = PD7
#define NRF_CSN_pin 0 //D8 = PB0
#define CYRF_CSN_pin 1 //D9 = PB1
#define CTRL1_pin 1 //A1 = PC1
#define CTRL2_pin 2 //A2 = PC2
//
#ifdef XMEGA
#define CTRL1_on
#define CTRL1_off
#define CTRL2_on
#define CTRL2_off
#else
#define CTRL1_on PORTC |= _BV(1)
#define CTRL1_off PORTC &= ~_BV(1)
#define CTRL2_on PORTC |= _BV(2)
#define CTRL2_off PORTC &= ~_BV(2)
#endif
//
#ifdef XMEGA
#define A7105_CS_on PORTD.OUTSET = _BV(4) //D4
#define A7105_CS_off PORTD.OUTCLR = _BV(4) //D4
#else
#define CS_on PORTD |= _BV(2) //D2
#define CS_off PORTD &= ~_BV(2) //D2
#endif
//
#ifdef XMEGA
#define SCK_on PORTD.OUTSET = _BV(7) //D7
#define SCK_off PORTD.OUTCLR = _BV(7) //D7
#else
#define SCK_on PORTD |= _BV(4) //D4
#define SCK_off PORTD &= ~_BV(4) //D4
#endif
//
#ifdef XMEGA
#define SDI_on PORTD.OUTSET = _BV(5) //D5
#define SDI_off PORTD.OUTCLR = _BV(5) //D5
#else
#define SDI_on PORTD |= _BV(5) //D5
#define SDI_off PORTD &= ~_BV(5) //D5
#endif
//
#ifdef XMEGA
#define SDI_1 (PORTD.IN & _BV(SDI_pin)) == _BV(SDI_pin) //D5
#define SDI_0 (PORTD.IN & _BV(SDI_pin)) == 0x00 //D5
#else
#define SDI_1 (PIND & _BV(SDI_pin)) == _BV(SDI_pin) //D5
#define SDI_0 (PIND & _BV(SDI_pin)) == 0x00 //D5
#endif
//
#define SDI_SET_INPUT DDRD &= ~_BV(5) //D5
#define SDI_SET_OUTPUT DDRD |= _BV(5) //D5
//
#ifdef XMEGA
#define CC25_CSN_on PORTD.OUTSET = _BV(7) //D7
#define CC25_CSN_off PORTD.OUTCLR = _BV(7) //D7
#else
#define CC25_CSN_on PORTD |= _BV(7) //D7
#define CC25_CSN_off PORTD &= ~_BV(7) //D7
#endif
//
#ifdef XMEGA
#define NRF_CSN_on
#define NRF_CSN_off
#define NRF_CE_on
#define NRF_CE_off
#else
#define NRF_CSN_on PORTB |= _BV(0) //D8
#define NRF_CSN_off PORTB &= ~_BV(0) //D8
#define NRF_CE_on
#define NRF_CE_off
#endif
//
#ifdef XMEGA
#define CYRF_CSN_on PORTD.OUTSET = _BV(4)
#define CYRF_CSN_off PORTD.OUTCLR = _BV(4)
#else
#define CYRF_CSN_on PORTB |= _BV(1) //D9
#define CYRF_CSN_off PORTB &= ~_BV(1) //D9
#define CYRF_RST_HI PORTC |= _BV(5) //A5
#define CYRF_RST_LO PORTC &= ~_BV(5) //A5
#define CYRF_RST_pin 5
#endif
//
#ifdef XMEGA
#define SDO_1 (PORTD.IN & _BV(SDO_pin)) == _BV(SDO_pin) //D6
#define SDO_0 (PORTD.IN & _BV(SDO_pin)) == 0x00 //D6
#else
#define SDO_1 (PIND & _BV(SDO_pin)) == _BV(SDO_pin) //D6
#define SDO_0 (PIND & _BV(SDO_pin)) == 0x00 //D6
#endif
//
//
// LED //***************
#ifdef XMEGA //*** Flags ***
#define LED_ON PORTD.OUTCLR = _BV(1) //***************
#define LED_OFF PORTD.OUTSET = _BV(1)
#define LED_TOGGLE PORTD.OUTTGL = _BV(1)
#define LED_SET_OUTPUT PORTD.DIRSET = _BV(1)
#define IS_LED_on ( (PORTD.OUT & _BV(1)) != 0x00 )
#else
#define LED_ON PORTB |= _BV(5)
#define LED_OFF PORTB &= ~_BV(5)
#define LED_TOGGLE PORTB ^= _BV(5)
#define LED_SET_OUTPUT DDRB |= _BV(5)
#define IS_LED_on ( (PORTB & _BV(5)) != 0x00 )
#endif
//BIND
#ifdef XMEGA
#define IS_BIND_BUTTON_on ( (PORTD.IN & _BV(2)) == 0x00 )
#else
#define BIND_SET_INPUT DDRB &= ~_BV(5)
#define BIND_SET_PULLUP PORTB |= _BV(5)
#define IS_BIND_BUTTON_on ( (PINB & _BV(5)) == 0x00 )
#define BIND_SET_OUTPUT DDRB |= _BV(5)
#endif
// TX
#ifdef DEBUG_TX
#define TX_ON PORTD |= _BV(1)
#define TX_OFF PORTD &= ~_BV(1)
#define TX_TOGGLE PORTD ^= _BV(1)
#define TX_SET_OUTPUT DDRD |= _BV(1)
#else
#define TX_ON
#define TX_OFF
#define TX_TOGGLE
#define TX_SET_OUTPUT
#endif
// Macros
#define NOP() __asm__ __volatile__("nop")
#define BV(bit) (1 << bit)
//Serial flags definition
#define RX_FLAG_on protocol_flags |= _BV(0) #define RX_FLAG_on protocol_flags |= _BV(0)
#define RX_FLAG_off protocol_flags &= ~_BV(0) #define RX_FLAG_off protocol_flags &= ~_BV(0)
#define IS_RX_FLAG_on ( ( protocol_flags & _BV(0) ) !=0 ) #define IS_RX_FLAG_on ( ( protocol_flags & _BV(0) ) !=0 )
@ -344,45 +206,47 @@ struct PPM_Parameters
#define BIND_BUTTON_FLAG_on protocol_flags |= _BV(5) #define BIND_BUTTON_FLAG_on protocol_flags |= _BV(5)
#define BIND_BUTTON_FLAG_off protocol_flags &= ~_BV(5) #define BIND_BUTTON_FLAG_off protocol_flags &= ~_BV(5)
#define IS_BIND_BUTTON_FLAG_on ( ( protocol_flags & _BV(5) ) !=0 ) #define IS_BIND_BUTTON_FLAG_on ( ( protocol_flags & _BV(5) ) !=0 )
//PPM RX OK //PPM RX OK
#define PPM_FLAG_off protocol_flags &= ~_BV(6) #define PPM_FLAG_off protocol_flags &= ~_BV(6)
#define PPM_FLAG_on protocol_flags |= _BV(6) #define PPM_FLAG_on protocol_flags |= _BV(6)
#define IS_PPM_FLAG_on ( ( protocol_flags & _BV(6) ) !=0 ) #define IS_PPM_FLAG_on ( ( protocol_flags & _BV(6) ) !=0 )
//Bind flag
//Bind flag for blinking
#define BIND_IN_PROGRESS protocol_flags &= ~_BV(7) #define BIND_IN_PROGRESS protocol_flags &= ~_BV(7)
#define BIND_DONE protocol_flags |= _BV(7) #define BIND_DONE protocol_flags |= _BV(7)
#define IS_BIND_DONE_on ( ( protocol_flags & _BV(7) ) !=0 ) #define IS_BIND_DONE_on ( ( protocol_flags & _BV(7) ) !=0 )
//
#define BAD_PROTO_off protocol_flags2 &= ~_BV(0) #define BAD_PROTO_off protocol_flags2 &= ~_BV(0)
#define BAD_PROTO_on protocol_flags2 |= _BV(0) #define BAD_PROTO_on protocol_flags2 |= _BV(0)
#define IS_BAD_PROTO_on ( ( protocol_flags2 & _BV(0) ) !=0 ) #define IS_BAD_PROTO_on ( ( protocol_flags2 & _BV(0) ) !=0 )
//
#define RX_DONOTUPDTAE_off protocol_flags2 &= ~_BV(1) #define RX_DONOTUPDTAE_off protocol_flags2 &= ~_BV(1)
#define RX_DONOTUPDTAE_on protocol_flags2 |= _BV(1) #define RX_DONOTUPDTAE_on protocol_flags2 |= _BV(1)
#define IS_RX_DONOTUPDTAE_on ( ( protocol_flags2 & _BV(1) ) !=0 ) #define IS_RX_DONOTUPDTAE_on ( ( protocol_flags2 & _BV(1) ) !=0 )
//
#define RX_MISSED_BUFF_off protocol_flags2 &= ~_BV(2) #define RX_MISSED_BUFF_off protocol_flags2 &= ~_BV(2)
#define RX_MISSED_BUFF_on protocol_flags2 |= _BV(2) #define RX_MISSED_BUFF_on protocol_flags2 |= _BV(2)
#define IS_RX_MISSED_BUFF_on ( ( protocol_flags2 & _BV(2) ) !=0 ) #define IS_RX_MISSED_BUFF_on ( ( protocol_flags2 & _BV(2) ) !=0 )
//TX Pause
#define TX_MAIN_PAUSE_off protocol_flags2 &= ~_BV(3) #define TX_MAIN_PAUSE_off protocol_flags2 &= ~_BV(3)
#define TX_MAIN_PAUSE_on protocol_flags2 |= _BV(3) #define TX_MAIN_PAUSE_on protocol_flags2 |= _BV(3)
#define IS_TX_MAIN_PAUSE_on ( ( protocol_flags2 & _BV(3) ) !=0 ) #define IS_TX_MAIN_PAUSE_on ( ( protocol_flags2 & _BV(3) ) !=0 )
#define TX_RX_PAUSE_off protocol_flags2 &= ~_BV(4) #define TX_RX_PAUSE_off protocol_flags2 &= ~_BV(4)
#define TX_RX_PAUSE_on protocol_flags2 |= _BV(4) #define TX_RX_PAUSE_on protocol_flags2 |= _BV(4)
#define IS_TX_RX_PAUSE_on ( ( protocol_flags2 & _BV(4) ) !=0 ) #define IS_TX_RX_PAUSE_on ( ( protocol_flags2 & _BV(4) ) !=0 )
#define IS_TX_PAUSE_on ( ( protocol_flags2 & (_BV(4)|_BV(3)) ) !=0 ) #define IS_TX_PAUSE_on ( ( protocol_flags2 & (_BV(4)|_BV(3)) ) !=0 )
//********************
//*** Blink timing ***
//********************
#define BLINK_BIND_TIME 100 #define BLINK_BIND_TIME 100
#define BLINK_SERIAL_TIME 500 #define BLINK_SERIAL_TIME 500
#define BLINK_BAD_PROTO_TIME_LOW 1000 #define BLINK_BAD_PROTO_TIME_LOW 1000
#define BLINK_BAD_PROTO_TIME_HIGH 50 #define BLINK_BAD_PROTO_TIME_HIGH 50
//AUX flags definition //*******************
//*** AUX flags ***
//*******************
#define GET_FLAG(ch, mask) ( ch ? mask : 0)
#define Servo_AUX1 Servo_AUX & _BV(0) #define Servo_AUX1 Servo_AUX & _BV(0)
#define Servo_AUX2 Servo_AUX & _BV(1) #define Servo_AUX2 Servo_AUX & _BV(1)
#define Servo_AUX3 Servo_AUX & _BV(2) #define Servo_AUX3 Servo_AUX & _BV(2)
@ -392,8 +256,6 @@ struct PPM_Parameters
#define Servo_AUX7 Servo_AUX & _BV(6) #define Servo_AUX7 Servo_AUX & _BV(6)
#define Servo_AUX8 Servo_AUX & _BV(7) #define Servo_AUX8 Servo_AUX & _BV(7)
#define GET_FLAG(ch, mask) ( ch ? mask : 0)
//************************ //************************
//*** Power settings *** //*** Power settings ***
//************************ //************************
@ -484,7 +346,7 @@ enum CYRF_POWER
#define CYRF_HIGH_POWER CYRF_POWER_7 #define CYRF_HIGH_POWER CYRF_POWER_7
#define CYRF_LOW_POWER CYRF_POWER_3 #define CYRF_LOW_POWER CYRF_POWER_3
#define CYRF_RANGE_POWER CYRF_POWER_1 // 1/30 of the full power distance #define CYRF_RANGE_POWER CYRF_POWER_1 // 1/30 of the full power distance
#define CYRF_BIND_POWER CYRF_POWER_1 #define CYRF_BIND_POWER CYRF_POWER_0
enum TXRX_State { enum TXRX_State {
TXRX_OFF, TXRX_OFF,
@ -502,6 +364,8 @@ enum {
// baudrate defines for serial // baudrate defines for serial
#define SPEED_100K 0 #define SPEED_100K 0
#define SPEED_9600 1 #define SPEED_9600 1
#define SPEED_57600 2
#define SPEED_125K 3
//**************************************** //****************************************
//*** MULTI protocol serial definition *** //*** MULTI protocol serial definition ***
@ -512,17 +376,18 @@ enum {
************************** **************************
Serial: 100000 Baud 8e2 _ xxxx xxxx p -- Serial: 100000 Baud 8e2 _ xxxx xxxx p --
Total of 26 bytes Total of 26 bytes
Stream[0] = 0x55 Stream[0] = 0x55 sub_protocol values are 0..31
Stream[0] = 0x54 sub_protocol values are 32..63
header header
Stream[1] = sub_protocol|BindBit|RangeCheckBit|AutoBindBit; Stream[1] = sub_protocol|BindBit|RangeCheckBit|AutoBindBit;
sub_protocol is 0..31 (bits 0..4) sub_protocol is 0..31 (bits 0..4), value should be added with 32 if Stream[0] = 0x54
=> Reserved 0 => Reserved 0
Flysky 1 Flysky 1
Hubsan 2 Hubsan 2
Frsky 3 FrskyD 3
Hisky 4 Hisky 4
V2x2 5 V2x2 5
DSM2 6 DSM 6
Devo 7 Devo 7
YD717 8 YD717 8
KN 9 KN 9
@ -541,7 +406,9 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p --
J6PRO 22 J6PRO 22
FQ777 23 FQ777 23
ASSAN 24 ASSAN 24
FRSKY1 25 FrskyV 25
HONTAI 26
OpenLRS 27
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
@ -556,9 +423,11 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p --
sub_protocol==Hisky sub_protocol==Hisky
Hisky 0 Hisky 0
HK310 1 HK310 1
sub_protocol==DSM2 sub_protocol==DSM
DSM2 0 DSM2_22 0
DSMX 1 DSM2_11 1
DSMX_22 2
DSMX_11 3
sub_protocol==YD717 sub_protocol==YD717
YD717 0 YD717 0
SKYWLKR 1 SKYWLKR 1
@ -598,6 +467,10 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p --
sub_protocol==FRSKYX sub_protocol==FRSKYX
CH_16 0 CH_16 0
CH_8 1 CH_8 1
sub_protocol==HONTAI
FORMAT_HONTAI 0
FORMAT_JJRCX1 1
FORMAT_X5C1 2
Power value => 0x80 0=High/1=Low Power value => 0x80 0=High/1=Low
Stream[3] = option_protocol; Stream[3] = option_protocol;
option_protocol value is -127..127 option_protocol value is -127..127
@ -610,4 +483,3 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p --
2047 +125% 2047 +125%
Channels bits are concatenated to fit in 22 bytes like in SBUS protocol Channels bits are concatenated to fit in 22 bytes like in SBUS protocol
*/ */

File diff suppressed because it is too large Load Diff

View File

@ -25,7 +25,7 @@ enum PROTOCOLS
MODE_FRSKYD = 3, // =>CC2500 MODE_FRSKYD = 3, // =>CC2500
MODE_HISKY = 4, // =>NRF24L01 MODE_HISKY = 4, // =>NRF24L01
MODE_V2X2 = 5, // =>NRF24L01 MODE_V2X2 = 5, // =>NRF24L01
MODE_DSM2 = 6, // =>CYRF6936 MODE_DSM = 6, // =>CYRF6936
MODE_DEVO = 7, // =>CYRF6936 MODE_DEVO = 7, // =>CYRF6936
MODE_YD717 = 8, // =>NRF24L01 MODE_YD717 = 8, // =>NRF24L01
MODE_KN = 9, // =>NRF24L01 MODE_KN = 9, // =>NRF24L01
@ -61,9 +61,12 @@ enum Hisky
Hisky = 0, Hisky = 0,
HK310 = 1 HK310 = 1
}; };
enum DSM2{ enum DSM{
DSM2 = 0, DSM2_22 = 0,
DSMX = 1 DSM2_11 = 1,
DSMX_22 = 2,
DSMX_11 = 3,
DSM_AUTO = 4
}; };
enum YD717 enum YD717
{ {
@ -177,7 +180,7 @@ struct PPM_Parameters
#define CC25_CSN_pin PB6//CC2500 #define CC25_CSN_pin PB6//CC2500
#define NRF_CSN_pin PB7//NRF24L01 #define NRF_CSN_pin PB7//NRF24L01
#define CYRF_RST_pin PB8//CYRF RESET #define CYRF_RST_pin PB8//CYRF RESET
#define A7105_CS_pin PB9//A7105 #define A7105_CSN_pin PB9//A7105
#define CYRF_CSN_pin PB12//CYRF CSN #define CYRF_CSN_pin PB12//CYRF CSN
//SPI pins //SPI pins
#define SCK_pin PB13//SCK #define SCK_pin PB13//SCK
@ -187,18 +190,18 @@ struct PPM_Parameters
#define TX_INV_pin PB3 #define TX_INV_pin PB3
#define RX_INV_pin PB1 #define RX_INV_pin PB1
// //
#define CTRL1_on digitalWrite(CTRL1,HIGH) #define PE1_on digitalWrite(CTRL1,HIGH)
#define CTRL1_off digitalWrite(CTRL1,LOW) #define PE1_off digitalWrite(CTRL1,LOW)
// //
#define CTRL2_on digitalWrite(CTRL2,HIGH) #define PE2_on digitalWrite(CTRL2,HIGH)
#define CTRL2_off digitalWrite(CTRL2,LOW) #define PE2_off digitalWrite(CTRL2,LOW)
#define RS_HI digitalWrite(CYRF_RST_pin,HIGH) //reset pin cyrf #define RS_HI digitalWrite(CYRF_RST_pin,HIGH) //reset pin cyrf
#define RS_LO digitalWrite(CYRF_RST_pin,LOW) #define RS_LO digitalWrite(CYRF_RST_pin,LOW)
#define A7105_CS_on digitalWrite(CS_pin,HIGH) #define A7105_CSN_on digitalWrite(A7105_CSN_pin,HIGH)
#define A7105_CS_off digitalWrite(CS_pin,LOW) #define A7105_CSN_off digitalWrite(A7105_CSN_pin,LOW)
#define NRF_CE_on #define NRF_CE_on
#define NRF_CE_off #define NRF_CE_off
@ -233,9 +236,9 @@ struct PPM_Parameters
#define RX_INV_on digitalWrite(RX_INV_pin,HIGH) #define RX_INV_on digitalWrite(RX_INV_pin,HIGH)
#define RX_INV_off digitalWrite(RX_INV_pin,LOW) #define RX_INV_off digitalWrite(RX_INV_pin,LOW)
#define LED_ON digitalWrite(LED_pin,HIGH) #define LED_on digitalWrite(LED_pin,HIGH)
#define LED_OFF digitalWrite(LED_pin,LOW) #define LED_off digitalWrite(LED_pin,LOW)
#define LED_TOGGLE digitalWrite(LED_pin ,!digitalRead(LED_pin)) #define LED_toggle digitalWrite(LED_pin ,!digitalRead(LED_pin))
#define LED_SET_OUTPUT pinMode(LED_pin,OUTPUT) #define LED_SET_OUTPUT pinMode(LED_pin,OUTPUT)
#define IS_LED_on ( digitalRead(LED_pin)==HIGH) #define IS_LED_on ( digitalRead(LED_pin)==HIGH)
@ -310,7 +313,7 @@ struct PPM_Parameters
#define IS_TX_PAUSE_on ( ( protocol_flags2 & (_BV(4)|_BV(3)) ) !=0 ) #define IS_TX_PAUSE_on ( ( protocol_flags2 & (_BV(4)|_BV(3)) ) !=0 )
#define IS_BIND_BUTTON_on (digitalRead(BIND_pin)==0x00) #define IS_BIND_BUTTON_on (digitalRead(BIND_pin)==LOW)
#define BIND_SET_INPUT pinMode(BIND_pin,INPUT) #define BIND_SET_INPUT pinMode(BIND_pin,INPUT)
#define BIND_SET_PULLUP digitalWrite(BIND_pin,HIGH) #define BIND_SET_PULLUP digitalWrite(BIND_pin,HIGH)

View File

@ -78,6 +78,11 @@ void SPI_SET_UNIDIRECTIONAL()
#else #else
#ifdef XMEGA
#define XNOP() NOP()
#else
#define XNOP()
#endif
void spi_write(uint8_t command) void spi_write(uint8_t command)
{ {
uint8_t n=8; uint8_t n=8;

View File

@ -1,8 +1,20 @@
//************************************* /*
// FrSky Telemetry serial code * This project is free software: you can redistribute it and/or modify
// By Midelic on RCGroups * 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/>.
*/
//**************************
// Telemetry serial code *
//**************************
#if defined TELEMETRY #if defined TELEMETRY
#if defined SPORT_TELEMETRY #if defined SPORT_TELEMETRY
@ -28,10 +40,8 @@ uint8_t pktx1[MAX_PKTX];//second buffer for sport
uint8_t idxt; uint8_t idxt;
uint8_t frame[18]; uint8_t frame[18];
#ifdef BASH_SERIAL #ifdef BASH_SERIAL
// For bit-bashed serial output // For bit-bashed serial output
struct t_serial_bash struct t_serial_bash
{ {
uint8_t head ; uint8_t head ;
@ -42,11 +52,10 @@ struct t_serial_bash
} SerialControl ; } SerialControl ;
#endif #endif
#if defined DSM_TELEMETRY #if defined DSM_TELEMETRY
void DSM2_frame() void DSM_frame()
{ {
Serial_write(0xAA); // Start Serial_write(0xAA); // Telemetry packet
for (uint8_t i = 0; i < 17; i++) // RSSI value followed by 16 bytes of telemetry data for (uint8_t i = 0; i < 17; i++) // RSSI value followed by 16 bytes of telemetry data
Serial_write(pkt[i]); Serial_write(pkt[i]);
} }
@ -87,8 +96,8 @@ void frsky_check_telemetry(uint8_t *pkt,uint8_t len)
if(pktt[6]) if(pktt[6])
telemetry_counter=(telemetry_counter+1)%32; telemetry_counter=(telemetry_counter+1)%32;
// //
#if defined FRSKYX_CC2500_INO #if defined SPORT_TELEMETRY && defined FRSKYX_CC2500_INO
if ((cur_protocol[0]&0x1F)==MODE_FRSKYX) if (protocol==MODE_FRSKYX)
{ {
if ((pktt[5] >> 4 & 0x0f) == 0x08) if ((pktt[5] >> 4 & 0x0f) == 0x08)
{ {
@ -111,7 +120,7 @@ void frsky_check_telemetry(uint8_t *pkt,uint8_t len)
void frsky_link_frame() void frsky_link_frame()
{ {
frame[0] = 0xFE; frame[0] = 0xFE;
if ((cur_protocol[0]&0x1F)==MODE_FRSKYD) if (protocol==MODE_FRSKYD)
{ {
compute_RSSIdbm(); compute_RSSIdbm();
frame[1] = pktt[3]; frame[1] = pktt[3];
@ -120,7 +129,7 @@ void frsky_link_frame()
frame[4] = (uint8_t)RSSI_dBm; frame[4] = (uint8_t)RSSI_dBm;
} }
else else
if ((cur_protocol[0]&0x1F)==MODE_HUBSAN) if (protocol==MODE_HUBSAN)
{ {
frame[1] = v_lipo*2; //v_lipo; common 0x2A=42/10=4.2V frame[1] = v_lipo*2; //v_lipo; common 0x2A=42/10=4.2V
frame[2] = frame[1]; frame[2] = frame[1];
@ -300,6 +309,13 @@ void sportSendFrame()
} }
switch (sport_counter) switch (sport_counter)
{ {
case 0:
frame[2] = 0x05;
frame[3] = 0xf1;
frame[4] = 0x02 ;//dummy values if swr 20230f00
frame[5] = 0x23;
frame[6] = 0x0F;
break;
case 2: // RSSI case 2: // RSSI
frame[2] = 0x01; frame[2] = 0x01;
frame[3] = 0xf1; frame[3] = 0xf1;
@ -339,6 +355,12 @@ void proces_sport_data(uint8_t data)
} }
break; break;
case 1: case 1:
if (data == START_STOP) // Happens if missed packet
{//waiting for 0x7e
idxt = 0;
pass = 1;
break;
}
if(data == BYTESTUFF)//if they are stuffed if(data == BYTESTUFF)//if they are stuffed
pass=2; pass=2;
else else
@ -355,7 +377,7 @@ void proces_sport_data(uint8_t data)
{//8 bytes no crc {//8 bytes no crc
if ( sport ) if ( sport )
{ {
// overrun! do nothing // overrun!
} }
else else
{ {
@ -375,7 +397,7 @@ void proces_sport_data(uint8_t data)
void TelemetryUpdate() void TelemetryUpdate()
{ {
#if defined SPORT_TELEMETRY #if defined SPORT_TELEMETRY
if ((cur_protocol[0]&0x1F)==MODE_FRSKYX) if (protocol==MODE_FRSKYX)
{ // FrSkyX { // FrSkyX
if(telemetry_link) if(telemetry_link)
{ {
@ -400,6 +422,8 @@ void TelemetryUpdate()
} }
#endif #endif
// check for space in tx buffer
#ifdef BASH_SERIAL #ifdef BASH_SERIAL
uint8_t h ; uint8_t h ;
uint8_t t ; uint8_t t ;
@ -438,21 +462,21 @@ void TelemetryUpdate()
#endif #endif
#if defined DSM_TELEMETRY #if defined DSM_TELEMETRY
if(telemetry_link && (cur_protocol[0]&0x1F) == MODE_DSM2 ) if(telemetry_link && protocol == MODE_DSM )
{ // DSM2 { // DSM
DSM2_frame(); DSM_frame();
telemetry_link=0; telemetry_link=0;
return; return;
} }
#endif #endif
if(telemetry_link && (cur_protocol[0]&0x1F) != MODE_FRSKYX ) if(telemetry_link && protocol != MODE_FRSKYX )
{ // FrSky + Hubsan { // FrSky + Hubsan
frsky_link_frame(); frsky_link_frame();
telemetry_link=0; telemetry_link=0;
return; return;
} }
#if defined HUB_TELEMETRY #if defined HUB_TELEMETRY
if(!telemetry_link && (cur_protocol[0]&0x1F) == MODE_FRSKYD) if(!telemetry_link && protocol == MODE_FRSKYD)
{ // FrSky { // FrSky
frsky_user_frame(); frsky_user_frame();
return; return;
@ -471,7 +495,6 @@ void TelemetryUpdate()
/**************************/ /**************************/
/**************************/ /**************************/
#ifndef BASH_SERIAL #ifndef BASH_SERIAL
// Routines for normal serial output // Routines for normal serial output
void Serial_write(uint8_t data) void Serial_write(uint8_t data)
@ -485,24 +508,21 @@ void Serial_write(uint8_t data)
tx_resume(); tx_resume();
} }
// Speed is 0 for 100K and 1 for 9600
void initTXSerial( uint8_t speed) void initTXSerial( uint8_t speed)
{ {
#ifdef ENABLE_PPM
if(speed==SPEED_9600) if(speed==SPEED_9600)
{ // 9600 { // 9600
#ifdef XMEGA #ifdef XMEGA
USARTC0.BAUDCTRLA = 207 ; USARTC0.BAUDCTRLA = 207 ;
USARTC0.BAUDCTRLB = 0 ; USARTC0.BAUDCTRLB = 0 ;
USARTC0.CTRLB = 0x18 ; USARTC0.CTRLB = 0x18 ;
USARTC0.CTRLA = (USARTC0.CTRLA & 0xCF) | 0x10 ; USARTC0.CTRLA = (USARTC0.CTRLA & 0xCF) | 0x10 ;
USARTC0.CTRLC = 0x03 ; USARTC0.CTRLC = 0x03 ;
}
#else #else
#ifdef STM32_board #ifdef STM32_board
Serial2.begin(9600);//USART3 Serial2.begin(9600);//USART3
USART3_BASE->CR1 &= ~ USART_CR1_RE;//disable RX leave TX enabled USART3_BASE->CR1 &= ~ USART_CR1_RE;//disable RX leave TX enabled
}
#else #else
//9600 bauds //9600 bauds
UBRR0H = 0x00; UBRR0H = 0x00;
@ -510,11 +530,59 @@ void initTXSerial( uint8_t speed)
UCSR0A = 0 ; // Clear X2 bit UCSR0A = 0 ; // Clear X2 bit
//Set frame format to 8 data bits, none, 1 stop bit //Set frame format to 8 data bits, none, 1 stop bit
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00); UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
#endif
#endif
} }
else if(speed==SPEED_57600)
{ // 57600
#ifdef XMEGA
/*USARTC0.BAUDCTRLA = 207 ;
USARTC0.BAUDCTRLB = 0 ;
USARTC0.CTRLB = 0x18 ;
USARTC0.CTRLA = (USARTC0.CTRLA & 0xCF) | 0x10 ;
USARTC0.CTRLC = 0x03 ;*/
#else
#ifdef STM32_board
Serial2.begin(57600);//USART3
USART3_BASE->CR1 &= ~ USART_CR1_RE;//disable RX leave TX enabled
#else
//57600 bauds
UBRR0H = 0x00;
UBRR0L = 0x22;
UCSR0A = 0x02 ; // Set X2 bit
//Set frame format to 8 data bits, none, 1 stop bit
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
#endif
#endif
}
else if(speed==SPEED_125K)
{ // 125000
#ifdef XMEGA
/*USARTC0.BAUDCTRLA = 207 ;
USARTC0.BAUDCTRLB = 0 ;
USARTC0.CTRLB = 0x18 ;
USARTC0.CTRLA = (USARTC0.CTRLA & 0xCF) | 0x10 ;
USARTC0.CTRLC = 0x03 ;*/
#else
#ifdef STM32_board
Serial2.begin(125000);//USART3
USART3_BASE->CR1 &= ~ USART_CR1_RE;//disable RX leave TX enabled
#else
//125000 bauds
UBRR0H = 0x00;
UBRR0L = 0x07;
UCSR0A = 0x00 ; // Clear X2 bit
//Set frame format to 8 data bits, none, 1 stop bit
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
#endif
#endif
}
#endif
#ifndef XMEGA
#ifndef STM32_board
UCSR0B |= (1<<TXEN0);//tx enable UCSR0B |= (1<<TXEN0);//tx enable
#endif #endif
#endif #endif
} }
@ -572,11 +640,10 @@ void initTXSerial( uint8_t speed)
{ {
TIMSK0 = 0 ; // Stop all timer 0 interrupts TIMSK0 = 0 ; // Stop all timer 0 interrupts
#ifdef INVERT_SERIAL #ifdef INVERT_SERIAL
PORTD &= ~2 ; SERIAL_TX_off;
#else #else
PORTD |= 2 ; SERIAL_TX_on;
#endif #endif
DDRD |= 2 ; // TxD pin is an output
UCSR0B &= ~(1<<TXEN0) ; UCSR0B &= ~(1<<TXEN0) ;
SerialControl.speed = speed ; SerialControl.speed = speed ;
@ -644,6 +711,12 @@ void Serial_write( uint8_t byte )
SerialControl.data[SerialControl.head+1] = byteLo ; SerialControl.data[SerialControl.head+1] = byteLo ;
SerialControl.head = next ; SerialControl.head = next ;
} }
if(!IS_TX_PAUSE_on)
tx_resume();
}
void resumeBashSerial()
{
cli() ; cli() ;
if ( SerialControl.busy == 0 ) if ( SerialControl.busy == 0 )
{ {
@ -684,13 +757,9 @@ ISR(TIMER0_COMPA_vect)
uint8_t byte ; uint8_t byte ;
byte = GPIOR0 ; byte = GPIOR0 ;
if ( byte & 0x01 ) if ( byte & 0x01 )
{ SERIAL_TX_on;
PORTD |= 0x02 ;
}
else else
{ SERIAL_TX_off;
PORTD &= ~0x02 ;
}
byte /= 2 ; // Generates shorter code than byte >>= 1 byte /= 2 ; // Generates shorter code than byte >>= 1
GPIOR0 = byte ; GPIOR0 = byte ;
if ( --GPIOR1 == 0 ) if ( --GPIOR1 == 0 )
@ -709,16 +778,19 @@ ISR(TIMER0_COMPB_vect)
uint8_t byte ; uint8_t byte ;
byte = GPIOR2 ; byte = GPIOR2 ;
if ( byte & 0x01 ) if ( byte & 0x01 )
{ SERIAL_TX_on;
PORTD |= 0x02 ;
}
else else
{ SERIAL_TX_off;
PORTD &= ~0x02 ;
}
byte /= 2 ; // Generates shorter code than byte >>= 1 byte /= 2 ; // Generates shorter code than byte >>= 1
GPIOR2 = byte ; GPIOR2 = byte ;
if ( --GPIOR1 == 0 ) if ( --GPIOR1 == 0 )
{
if ( IS_TX_PAUSE_on )
{
SerialControl.busy = 0 ;
TIMSK0 &= ~(1<<OCIE0B) ;
}
else
{ {
// prepare next byte and allow for 2 stop bits // prepare next byte and allow for 2 stop bits
struct t_serial_bash *ptr = &SerialControl ; struct t_serial_bash *ptr = &SerialControl ;
@ -738,6 +810,7 @@ ISR(TIMER0_COMPB_vect)
TIMSK0 &= ~(1<<OCIE0B) ; TIMSK0 &= ~(1<<OCIE0B) ;
} }
} }
}
else else
{ {
OCR0B += 20 ; OCR0B += 20 ;
@ -756,13 +829,9 @@ ISR(TIMER0_OVF_vect)
byte = GPIOR2 ; byte = GPIOR2 ;
} }
if ( byte & 0x01 ) if ( byte & 0x01 )
{ SERIAL_TX_on;
PORTD |= 0x02 ;
}
else else
{ SERIAL_TX_off;
PORTD &= ~0x02 ;
}
byte /= 2 ; // Generates shorter code than byte >>= 1 byte /= 2 ; // Generates shorter code than byte >>= 1
if ( GPIOR1 > 2 ) if ( GPIOR1 > 2 )
{ {

View File

@ -14,24 +14,6 @@
*/ */
/**Board selection**/
#define STM32_board
//#define XMEGA
/*******************/
#ifdef STM32_board
#undef __cplusplus
#include "Multiprotocol_STM32.h"
#include <EEPROM.h>
#include <libmaple/usart.h>
#include <libmaple/timer.h>
#include <SPI.h>
#else
#include <avr/eeprom.h>
#include <util/delay.h>
#include "Multiprotocol.h"
#endif
/** Multiprotocol module configuration file ***/ /** Multiprotocol module configuration file ***/
@ -48,23 +30,22 @@
#define CC2500_INSTALLED #define CC2500_INSTALLED
#define NFR24L01_INSTALLED #define NFR24L01_INSTALLED
//Comment a protocol to exclude it from compilation //The protocols below need an A7105 to be installed
#ifdef A7105_INSTALLED
#define FLYSKY_A7105_INO #define FLYSKY_A7105_INO
#define HUBSAN_A7105_INO #define HUBSAN_A7105_INO
#endif
#ifdef CYRF6936_INSTALLED //The protocols below need a CYRF6936 to be installed
#define DEVO_CYRF6936_INO #define DEVO_CYRF6936_INO
#define DSM2_CYRF6936_INO #define DSM2_CYRF6936_INO
#define J6PRO_CYRF6936_INO #define J6PRO_CYRF6936_INO
#endif
#ifdef CC2500_INSTALLED //The protocols below need a CC2500 to be installed
#define FRSKYD_CC2500_INO #define FRSKYD_CC2500_INO
#define FRSKYV_CC2500_INO #define FRSKYV_CC2500_INO
#define FRSKYX_CC2500_INO #define FRSKYX_CC2500_INO
#define SFHSS_CC2500_INO #define SFHSS_CC2500_INO
#endif
#ifdef NFR24L01_INSTALLED //The protocols below need a NRF24L01 to be installed
#define BAYANG_NRF24L01_INO #define BAYANG_NRF24L01_INO
#define CG023_NRF24L01_INO #define CG023_NRF24L01_INO
#define CX10_NRF24L01_INO #define CX10_NRF24L01_INO
@ -81,26 +62,26 @@
#define FY326_NRF24L01_INO #define FY326_NRF24L01_INO
#define FQ777_NRF24L01_INO #define FQ777_NRF24L01_INO
#define ASSAN_NRF24L01_INO #define ASSAN_NRF24L01_INO
#endif #define HONTAI_NRF24L01_INO
/**************************/
/*** TELEMETRY SETTINGS ***/
/**************************/
//In this section you can configure the telemetry.
//Uncomment to enable telemetry //Uncomment to enable telemetry
#define TELEMETRY #define TELEMETRY
//Uncomment to invert the polarity of the telemetry serial signal. //Uncomment to invert the polarity of the telemetry serial signal.
//For ER9X and ERSKY9X it must be commented. For OpenTX it must be uncommented. //For ER9X and ERSKY9X it must be commented. For OpenTX it must be uncommented.
//#define INVERT_TELEMETRY 1 //#define INVERT_TELEMETRY
//Comment to disable a specific telemetry //Comment to disable a specific telemetry
#if defined(TELEMETRY)
#if defined DSM2_CYRF6936_INO
#define DSM_TELEMETRY #define DSM_TELEMETRY
#endif
#if defined FRSKYX_CC2500_INO
#define SPORT_TELEMETRY #define SPORT_TELEMETRY
#endif
#if defined FRSKYD_CC2500_INO
#define HUB_TELEMETRY #define HUB_TELEMETRY
#endif
#endif
/****************************/ /****************************/
@ -125,10 +106,11 @@
//It is important for the module to know the endpoints of your radio. //It is important for the module to know the endpoints of your radio.
//Below are some standard transmitters already preconfigured. //Below are some standard transmitters already preconfigured.
//Uncomment only the one which matches your transmitter. //Uncomment only the one which matches your transmitter.
#define TX_ER9X //ER9X/ERSKY9X/OpenTX ( 988<->2012µs) #define TX_ER9X //ER9X/ERSKY9X/OpenTX ( 988<->2012µs)
//#define TX_DEVO7 //DEVO (1120<->1920µs) //#define TX_DEVO7 //DEVO (1120<->1920µs)
//#define TX_SPEKTRUM //Spektrum (1100<->1900µs) //#define TX_SPEKTRUM //Spektrum (1100<->1900µs)
//#define TX_HISKY //HISKY (1100<->1900µs) //#define TX_HISKY //HISKY (1100<->1900µs)
//#define TX_MPX //Multiplex MC2020 (1250<->1950µs)
//#define TX_CUSTOM //Custom //#define TX_CUSTOM //Custom
// The lines below are used to set the end points in microseconds (µs) if you have selected TX_CUSTOM. // The lines below are used to set the end points in microseconds (µs) if you have selected TX_CUSTOM.
@ -160,10 +142,10 @@ const PPM_Parameters PPM_prot[15]= {
// Dial Protocol Sub protocol RX_Num Power Auto Bind Option // Dial Protocol Sub protocol RX_Num Power Auto Bind Option
/* 1 */ {MODE_FLYSKY, Flysky , 0 , P_HIGH , NO_AUTOBIND , 0 }, /* 1 */ {MODE_FLYSKY, Flysky , 0 , P_HIGH , NO_AUTOBIND , 0 },
/* 2 */ {MODE_HUBSAN, 0 , 0 , P_HIGH , NO_AUTOBIND , 0 }, /* 2 */ {MODE_HUBSAN, 0 , 0 , P_HIGH , NO_AUTOBIND , 0 },
/* 3 */ {MODE_FRSKYD, 0 , 0 , P_HIGH , NO_AUTOBIND , 40 }, // D7 fine tuning /* 3 */ {MODE_FRSKYD, 0 , 0 , P_HIGH , NO_AUTOBIND , 40 }, // option=fine freq tuning
/* 4 */ {MODE_HISKY , Hisky , 0 , P_HIGH , NO_AUTOBIND , 0 }, /* 4 */ {MODE_HISKY , Hisky , 0 , P_HIGH , NO_AUTOBIND , 0 },
/* 5 */ {MODE_V2X2 , 0 , 0 , P_HIGH , NO_AUTOBIND , 0 }, /* 5 */ {MODE_V2X2 , 0 , 0 , P_HIGH , NO_AUTOBIND , 0 },
/* 6 */ {MODE_DSM2 , DSM2 , 0 , P_HIGH , NO_AUTOBIND , 6 }, // 6 channels @ 11ms /* 6 */ {MODE_DSM , DSM2_22 , 0 , P_HIGH , NO_AUTOBIND , 6 }, // option=number of channels
/* 7 */ {MODE_DEVO , 0 , 0 , P_HIGH , NO_AUTOBIND , 0 }, /* 7 */ {MODE_DEVO , 0 , 0 , P_HIGH , NO_AUTOBIND , 0 },
/* 8 */ {MODE_YD717 , YD717 , 0 , P_HIGH , NO_AUTOBIND , 0 }, /* 8 */ {MODE_YD717 , YD717 , 0 , P_HIGH , NO_AUTOBIND , 0 },
/* 9 */ {MODE_KN , WLTOYS , 0 , P_HIGH , NO_AUTOBIND , 0 }, /* 9 */ {MODE_KN , WLTOYS , 0 , P_HIGH , NO_AUTOBIND , 0 },
@ -182,16 +164,18 @@ const PPM_Parameters PPM_prot[15]= {
V912 V912
MODE_HUBSAN MODE_HUBSAN
NONE NONE
MODE_FRSKY MODE_FRSKYD
NONE NONE
MODE_HISKY MODE_HISKY
Hisky Hisky
HK310 HK310
MODE_V2X2 MODE_V2X2
NONE NONE
MODE_DSM2 MODE_DSM
DSM2 DSM2_22
DSMX DSM2_11
DSMX_22
DSMX_11
MODE_DEVO MODE_DEVO
NONE NONE
MODE_YD717 MODE_YD717
@ -232,21 +216,32 @@ const PPM_Parameters PPM_prot[15]= {
MT99 MT99
H7 H7
YZ YZ
LS
MODE_MJXQ MODE_MJXQ
WLH08 WLH08
X600 X600
X800 X800
H26D H26D
E010
MODE_SHENQI MODE_SHENQI
NONE NONE
MODE_FY326 MODE_FY326
NONE NONE
MODE_SFHSS MODE_SFHSS
NONE NONE
MODE_J6PRO
NONE
MODE_FQ777 MODE_FQ777
NONE NONE
MODE_ASSAN MODE_ASSAN
NONE NONE
MODE_FRSKYV
NONE
MODE_HONTAI
FORMAT_HONTAI
FORMAT_JJRCX1
FORMAT_X5C1
RX_Num value between 0 and 15 RX_Num value between 0 and 15