Prep for FrSky X v2

This commit is contained in:
pascallanger 2020-01-20 23:52:17 +01:00
parent 58665ea7a7
commit cc115323e1
9 changed files with 125 additions and 76 deletions

View File

@ -140,3 +140,25 @@ uint16_t convert_channel_frsky(uint8_t num)
uint16_t val=Channel_data[num]; uint16_t val=Channel_data[num];
return ((val*15)>>4)+1290; return ((val*15)>>4)+1290;
} }
// 0-2047, 0 = 817, 1024 = 1500, 2047 = 2182
//64=860,1024=1500,1984=2140//Taranis 125%
static uint16_t __attribute__((unused)) FrSkyX_scaleForPXX( uint8_t i )
{ //mapped 860,2140(125%) range to 64,1984(PXX values);
uint16_t chan_val=convert_channel_frsky(i)-1226;
if(i>7) chan_val|=2048; // upper channels offset
return chan_val;
}
#ifdef FAILSAFE_ENABLE
static uint16_t __attribute__((unused)) FrSkyX_scaleForPXX_FS( uint8_t i )
{ //mapped 1,2046(125%) range to 64,1984(PXX values);
uint16_t chan_val=((Failsafe_data[i]*15)>>4)+64;
if(Failsafe_data[i]==FAILSAFE_CHANNEL_NOPULSES)
chan_val=FAILSAFE_CHANNEL_NOPULSES;
else if(Failsafe_data[i]==FAILSAFE_CHANNEL_HOLD)
chan_val=FAILSAFE_CHANNEL_HOLD;
if(i>7) chan_val|=2048; // upper channels offset
return chan_val;
}
#endif

View File

@ -142,7 +142,7 @@ void Frsky_init_hop(void)
/*15_DEVIATN*/ 0x42 }; /*15_DEVIATN*/ 0x42 };
#endif #endif
#if defined(FRSKYX_CC2500_INO) #if defined(FRSKYX_CC2500_INO) || defined(FRSKYX2_CC2500_INO)
const PROGMEM uint8_t FRSKYX_cc2500_conf[]= { const PROGMEM uint8_t FRSKYX_cc2500_conf[]= {
//FRSKYX //FRSKYX
/*02_IOCFG0*/ 0x06 , /*02_IOCFG0*/ 0x06 ,
@ -222,8 +222,59 @@ void Frsky_init_hop(void)
uint8_t val=pgm_read_byte_near(&FRSKY_common_end_cc2500_conf[i][1]); uint8_t val=pgm_read_byte_near(&FRSKY_common_end_cc2500_conf[i][1]);
CC2500_WriteReg(reg,val); CC2500_WriteReg(reg,val);
} }
if(protocol==PROTO_FRSKYX2)
CC2500_WriteReg(CC2500_08_PKTCTRL0, 0x05); // enable CRC
CC2500_SetTxRxMode(TX_EN); CC2500_SetTxRxMode(TX_EN);
CC2500_SetPower(); CC2500_SetPower();
CC2500_Strobe(CC2500_SIDLE); // Go to idle... CC2500_Strobe(CC2500_SIDLE); // Go to idle...
} }
#endif #endif
#if defined(FRSKYX_CC2500_INO) || defined(FRSKYX2_CC2500_INO)
uint8_t FrSkyX_chanskip;
uint8_t FrSkyX_TX_Seq, FrSkyX_TX_IN_Seq;
uint8_t FrSkyX_RX_Seq ;
#ifdef SPORT_SEND
struct t_FrSkyX_TX_Frame
{
uint8_t count;
uint8_t payload[8];
} ;
// Store FrskyX telemetry
struct t_FrSkyX_TX_Frame FrSkyX_TX_Frames[4] ;
#endif
#define FRSKYX_FAILSAFE_TIMEOUT 1032
static void __attribute__((unused)) FrSkyX_set_start(uint8_t ch )
{
CC2500_Strobe(CC2500_SIDLE);
CC2500_WriteReg(CC2500_25_FSCAL1, calData[ch]);
CC2500_WriteReg(CC2500_0A_CHANNR, hopping_frequency[ch]);
}
static void __attribute__((unused)) FrSkyX_init()
{
FRSKY_init_cc2500((sub_protocol&2)?FRSKYXEU_cc2500_conf:FRSKYX_cc2500_conf); // LBT or FCC
//
for(uint8_t c=0;c < 48;c++)
{//calibrate hop channels
CC2500_Strobe(CC2500_SIDLE);
CC2500_WriteReg(CC2500_0A_CHANNR,hopping_frequency[c]);
CC2500_Strobe(CC2500_SCAL);
delayMicroseconds(900);//
calData[c] = CC2500_ReadReg(CC2500_25_FSCAL1);
}
//#######END INIT########
}
static void __attribute__((unused)) FrSkyX_initialize_data(uint8_t adr)
{
CC2500_WriteReg(CC2500_18_MCSM0, 0x8);
CC2500_WriteReg(CC2500_09_ADDR, adr ? 0x03 : rx_tx_addr[3]);
CC2500_WriteReg(CC2500_07_PKTCTRL1,0x05); // check address
}
#endif

View File

@ -19,52 +19,6 @@
#include "iface_cc2500.h" #include "iface_cc2500.h"
uint8_t FrSkyX_chanskip;
uint8_t FrSkyX_TX_Seq, FrSkyX_TX_IN_Seq;
uint8_t FrSkyX_RX_Seq ;
#ifdef SPORT_SEND
struct t_FrSkyX_TX_Frame
{
uint8_t count;
uint8_t payload[8];
} ;
// Store FrskyX telemetry
struct t_FrSkyX_TX_Frame FrSkyX_TX_Frames[4] ;
#endif
#define FrSkyX_FAILSAFE_TIMEOUT 1032
static void __attribute__((unused)) FrSkyX_set_start(uint8_t ch )
{
CC2500_Strobe(CC2500_SIDLE);
CC2500_WriteReg(CC2500_25_FSCAL1, calData[ch]);
CC2500_WriteReg(CC2500_0A_CHANNR, hopping_frequency[ch]);
}
static void __attribute__((unused)) FrSkyX_init()
{
FRSKY_init_cc2500((sub_protocol&2)?FRSKYXEU_cc2500_conf:FRSKYX_cc2500_conf); // LBT or FCC
//
for(uint8_t c=0;c < 48;c++)
{//calibrate hop channels
CC2500_Strobe(CC2500_SIDLE);
CC2500_WriteReg(CC2500_0A_CHANNR,hopping_frequency[c]);
CC2500_Strobe(CC2500_SCAL);
delayMicroseconds(900);//
calData[c] = CC2500_ReadReg(CC2500_25_FSCAL1);
}
//#######END INIT########
}
static void __attribute__((unused)) FrSkyX_initialize_data(uint8_t adr)
{
CC2500_WriteReg(CC2500_0C_FSCTRL0,option); // Frequency offset hack
CC2500_WriteReg(CC2500_18_MCSM0, 0x8);
CC2500_WriteReg(CC2500_09_ADDR, adr ? 0x03 : rx_tx_addr[3]);
CC2500_WriteReg(CC2500_07_PKTCTRL1,0x05);
}
static void __attribute__((unused)) FrSkyX_build_bind_packet() static void __attribute__((unused)) FrSkyX_build_bind_packet()
{ {
packet[0] = (sub_protocol & 2 ) ? 0x20 : 0x1D ; // LBT or FCC packet[0] = (sub_protocol & 2 ) ? 0x20 : 0x1D ; // LBT or FCC
@ -97,27 +51,6 @@ static void __attribute__((unused)) FrSkyX_build_bind_packet()
// //
} }
// 0-2047, 0 = 817, 1024 = 1500, 2047 = 2182
//64=860,1024=1500,1984=2140//Taranis 125%
static uint16_t __attribute__((unused)) FrSkyX_scaleForPXX( uint8_t i )
{ //mapped 860,2140(125%) range to 64,1984(PXX values);
uint16_t chan_val=convert_channel_frsky(i)-1226;
if(i>7) chan_val|=2048; // upper channels offset
return chan_val;
}
#ifdef FAILSAFE_ENABLE
static uint16_t __attribute__((unused)) FrSkyX_scaleForPXX_FS( uint8_t i )
{ //mapped 1,2046(125%) range to 64,1984(PXX values);
uint16_t chan_val=((Failsafe_data[i]*15)>>4)+64;
if(Failsafe_data[i]==FAILSAFE_CHANNEL_NOPULSES)
chan_val=FAILSAFE_CHANNEL_NOPULSES;
else if(Failsafe_data[i]==FAILSAFE_CHANNEL_HOLD)
chan_val=FAILSAFE_CHANNEL_HOLD;
if(i>7) chan_val|=2048; // upper channels offset
return chan_val;
}
#endif
#define FrSkyX_FAILSAFE_TIME 1032 #define FrSkyX_FAILSAFE_TIME 1032
static void __attribute__((unused)) FrSkyX_build_packet() static void __attribute__((unused)) FrSkyX_build_packet()
{ {

View File

@ -61,3 +61,4 @@
61,Tiger 61,Tiger
62,XK,X450,X420 62,XK,X450,X420
63,XN_DUMP,250K,1M,2M,AUTO 63,XN_DUMP,250K,1M,2M,AUTO
64,FrskyX2,CH_16,CH_8,EU_16,EU_8

View File

@ -30,6 +30,7 @@ const char STR_CX10[] ="CX10";
const char STR_CG023[] ="CG023"; const char STR_CG023[] ="CG023";
const char STR_BAYANG[] ="Bayang"; const char STR_BAYANG[] ="Bayang";
const char STR_FRSKYX[] ="FrSky X"; const char STR_FRSKYX[] ="FrSky X";
const char STR_FRSKYX2[] ="FrSkyX2";
const char STR_ESKY[] ="ESky"; const char STR_ESKY[] ="ESky";
const char STR_MT99XX[] ="MT99XX"; const char STR_MT99XX[] ="MT99XX";
const char STR_MJXQ[] ="MJXq"; const char STR_MJXQ[] ="MJXq";
@ -180,6 +181,9 @@ const mm_protocol_definition multi_protocols[] = {
#if defined(FRSKYX_CC2500_INO) #if defined(FRSKYX_CC2500_INO)
{PROTO_FRSKYX, STR_FRSKYX, 4, STR_SUBTYPE_FRSKYX, OPTION_RFTUNE }, {PROTO_FRSKYX, STR_FRSKYX, 4, STR_SUBTYPE_FRSKYX, OPTION_RFTUNE },
#endif #endif
#if defined(FRSKYX2_CC2500_INO)
{PROTO_FRSKYX2, STR_FRSKYX2, 4, STR_SUBTYPE_FRSKYX, OPTION_RFTUNE },
#endif
#if defined(ESKY_NRF24L01_INO) #if defined(ESKY_NRF24L01_INO)
{PROTO_ESKY, STR_ESKY, 0, NO_SUBTYPE, OPTION_NONE }, {PROTO_ESKY, STR_ESKY, 0, NO_SUBTYPE, OPTION_NONE },
#endif #endif

View File

@ -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 63 #define VERSION_PATCH_LEVEL 64
//****************** //******************
// Protocols // Protocols
@ -90,6 +90,7 @@ enum PROTOCOLS
PROTO_TIGER = 61, // =>NRF24L01 PROTO_TIGER = 61, // =>NRF24L01
PROTO_XK = 62, // =>NRF24L01 PROTO_XK = 62, // =>NRF24L01
PROTO_XN297DUMP = 63, // =>NRF24L01 PROTO_XN297DUMP = 63, // =>NRF24L01
PROTO_FRSKYX2 = 64, // =>CC2500
}; };
enum Flysky enum Flysky
@ -212,6 +213,13 @@ enum FRSKYX
EU_16 = 2, EU_16 = 2,
EU_8 = 3, EU_8 = 3,
}; };
enum FRSKYX2
{
FRSKYX2_CH_16 = 0,
FRSKYX2_CH_8 = 1,
FRSKYX2_EU_16 = 2,
FRSKYX2_EU_8 = 3,
};
enum HONTAI enum HONTAI
{ {
HONTAI = 0, HONTAI = 0,

View File

@ -514,6 +514,11 @@ void setup()
option = FORCE_FRSKYX_TUNING; // Use config-defined tuning value for FrSkyX option = FORCE_FRSKYX_TUNING; // Use config-defined tuning value for FrSkyX
else else
#endif #endif
#if defined(FORCE_FRSKYX2_TUNING) && defined(FRSKYX2_CC2500_INO)
if(protocol==PROTO_FRSKYX2)
option = FORCE_FRSKYX2_TUNING; // Use config-defined tuning value for FrSkyX2
else
#endif
#if defined(FORCE_SFHSS_TUNING) && defined(SFHSS_CC2500_INO) #if defined(FORCE_SFHSS_TUNING) && defined(SFHSS_CC2500_INO)
if (protocol==PROTO_SFHSS) if (protocol==PROTO_SFHSS)
option = FORCE_SFHSS_TUNING; // Use config-defined tuning value for SFHSS option = FORCE_SFHSS_TUNING; // Use config-defined tuning value for SFHSS
@ -737,7 +742,7 @@ bool Update_All()
update_led_status(); update_led_status();
#if defined(TELEMETRY) #if defined(TELEMETRY)
#if ( !( defined(MULTI_TELEMETRY) || defined(MULTI_STATUS) ) ) #if ( !( defined(MULTI_TELEMETRY) || defined(MULTI_STATUS) ) )
if((protocol == PROTO_BAYANG_RX) || (protocol == PROTO_AFHDS2A_RX) || (protocol == PROTO_FRSKY_RX) || (protocol == PROTO_SCANNER) || (protocol==PROTO_FRSKYD) || (protocol==PROTO_BAYANG) || (protocol==PROTO_NCC1701) || (protocol==PROTO_BUGS) || (protocol==PROTO_BUGSMINI) || (protocol==PROTO_HUBSAN) || (protocol==PROTO_AFHDS2A) || (protocol==PROTO_FRSKYX) || (protocol==PROTO_DSM) || (protocol==PROTO_CABELL) || (protocol==PROTO_HITEC) || (protocol==PROTO_HOTT)) if((protocol == PROTO_BAYANG_RX) || (protocol == PROTO_AFHDS2A_RX) || (protocol == PROTO_FRSKY_RX) || (protocol == PROTO_SCANNER) || (protocol==PROTO_FRSKYD) || (protocol==PROTO_BAYANG) || (protocol==PROTO_NCC1701) || (protocol==PROTO_BUGS) || (protocol==PROTO_BUGSMINI) || (protocol==PROTO_HUBSAN) || (protocol==PROTO_AFHDS2A) || (protocol==PROTO_FRSKYX) || (protocol==PROTO_DSM) || (protocol==PROTO_CABELL) || (protocol==PROTO_HITEC) || (protocol==PROTO_HOTT)) || (protocol==PROTO_FRSKYX2)
#endif #endif
if(IS_DISABLE_TELEM_off) if(IS_DISABLE_TELEM_off)
TelemetryUpdate(); TelemetryUpdate();
@ -1128,6 +1133,14 @@ static void protocol_init()
remote_callback = ReadFrSkyX; remote_callback = ReadFrSkyX;
break; break;
#endif #endif
#if defined(FRSKYX2_CC2500_INO)
case PROTO_FRSKYX2:
PE1_off; //antenna RF2
PE2_on;
next_callback = initFrSkyX2();
remote_callback = ReadFrSkyX2;
break;
#endif
#if defined(SFHSS_CC2500_INO) #if defined(SFHSS_CC2500_INO)
case PROTO_SFHSS: case PROTO_SFHSS:
PE1_off; //antenna RF2 PE1_off; //antenna RF2
@ -1603,6 +1616,11 @@ void update_serial_data()
option=FORCE_FRSKYX_TUNING; // Use config-defined tuning value for FrSkyX option=FORCE_FRSKYX_TUNING; // Use config-defined tuning value for FrSkyX
else else
#endif #endif
#if defined(FORCE_FRSKYX2_TUNING) && defined(FRSKYX2_CC2500_INO)
if(protocol==PROTO_FRSKYX2)
option=FORCE_FRSKYX2_TUNING; // Use config-defined tuning value for FrSkyX2
else
#endif
#if defined(FORCE_SFHSS_TUNING) && defined(SFHSS_CC2500_INO) #if defined(FORCE_SFHSS_TUNING) && defined(SFHSS_CC2500_INO)
if (protocol==PROTO_SFHSS) if (protocol==PROTO_SFHSS)
option=FORCE_SFHSS_TUNING; // Use config-defined tuning value for SFHSS option=FORCE_SFHSS_TUNING; // Use config-defined tuning value for SFHSS
@ -1765,14 +1783,14 @@ void update_serial_data()
#endif #endif
if(rx_len>27) if(rx_len>27)
{ // Data available for the current protocol { // Data available for the current protocol
#ifdef FRSKYX_CC2500_INO #if defined FRSKYX_CC2500_INO || defined FRSKYX2_CC2500_INO
if(protocol==PROTO_FRSKYX && rx_len==28) if((protocol==PROTO_FRSKYX || protocol==PROTO_FRSKYX2) && rx_len==28)
{//Protocol waiting for 1 byte during bind {//Protocol waiting for 1 byte during bind
binding_idx=rx_ok_buff[27]; binding_idx=rx_ok_buff[27];
} }
#endif #endif
#ifdef SPORT_SEND #ifdef SPORT_SEND
if(protocol==PROTO_FRSKYX && rx_len==35) if((protocol==PROTO_FRSKYX || protocol==PROTO_FRSKYX2) && rx_len==35)
{//Protocol waiting for 8 bytes {//Protocol waiting for 8 bytes
#define BYTE_STUFF 0x7D #define BYTE_STUFF 0x7D
#define STUFF_MASK 0x20 #define STUFF_MASK 0x20
@ -2057,12 +2075,12 @@ void PPM_Telemetry_serial_init()
{ {
if( (protocol==PROTO_FRSKYD) || (protocol==PROTO_HUBSAN) || (protocol==PROTO_AFHDS2A) || (protocol==PROTO_BAYANG)|| (protocol==PROTO_NCC1701) || (protocol==PROTO_CABELL) || (protocol==PROTO_HITEC) || (protocol==PROTO_BUGS) || (protocol==PROTO_BUGSMINI) if( (protocol==PROTO_FRSKYD) || (protocol==PROTO_HUBSAN) || (protocol==PROTO_AFHDS2A) || (protocol==PROTO_BAYANG)|| (protocol==PROTO_NCC1701) || (protocol==PROTO_CABELL) || (protocol==PROTO_HITEC) || (protocol==PROTO_BUGS) || (protocol==PROTO_BUGSMINI)
#ifdef TELEMETRY_FRSKYX_TO_FRSKYD #ifdef TELEMETRY_FRSKYX_TO_FRSKYD
|| (protocol==PROTO_FRSKYX) || (protocol==PROTO_FRSKYX) || (protocol==PROTO_FRSKYX2)
#endif #endif
) )
initTXSerial( SPEED_9600 ) ; initTXSerial( SPEED_9600 ) ;
#ifndef TELEMETRY_FRSKYX_TO_FRSKYD #ifndef TELEMETRY_FRSKYX_TO_FRSKYD
if(protocol==PROTO_FRSKYX) if(protocol==PROTO_FRSKYX || protocol==PROTO_FRSKYX2)
initTXSerial( SPEED_57600 ) ; initTXSerial( SPEED_57600 ) ;
#endif #endif
if(protocol==PROTO_DSM) if(protocol==PROTO_DSM)

View File

@ -89,6 +89,11 @@
#error "The FrSkyX forced frequency tuning value is outside of the range -127..127." #error "The FrSkyX forced frequency tuning value is outside of the range -127..127."
#endif #endif
#endif #endif
#ifdef FORCE_FRSKYX2_TUNING
#if ( FORCE_FRSKYX2_TUNING < -127 ) || ( FORCE_FRSKYX2_TUNING > 127 )
#error "The FrSkyX2 forced frequency tuning value is outside of the range -127..127."
#endif
#endif
#ifdef FORCE_HITEC_TUNING #ifdef FORCE_HITEC_TUNING
#if ( FORCE_HITEC_TUNING < -127 ) || ( FORCE_HITEC_TUNING > 127 ) #if ( FORCE_HITEC_TUNING < -127 ) || ( FORCE_HITEC_TUNING > 127 )
#error "The HITEC forced frequency tuning value is outside of the range -127..127." #error "The HITEC forced frequency tuning value is outside of the range -127..127."
@ -203,6 +208,7 @@
#undef FRSKYD_CC2500_INO #undef FRSKYD_CC2500_INO
#undef FRSKYV_CC2500_INO #undef FRSKYV_CC2500_INO
#undef FRSKYX_CC2500_INO #undef FRSKYX_CC2500_INO
#undef FRSKYX2_CC2500_INO
#undef SFHSS_CC2500_INO #undef SFHSS_CC2500_INO
#undef CORONA_CC2500_INO #undef CORONA_CC2500_INO
#undef REDPINE_CC2500_INO #undef REDPINE_CC2500_INO
@ -324,7 +330,7 @@
#if not defined(FRSKYD_CC2500_INO) #if not defined(FRSKYD_CC2500_INO)
#undef HUB_TELEMETRY #undef HUB_TELEMETRY
#endif #endif
#if not defined(FRSKYX_CC2500_INO) #if not defined(FRSKYX_CC2500_INO) and not defined(FRSKYX2_CC2500_INO)
#undef SPORT_TELEMETRY #undef SPORT_TELEMETRY
#undef SPORT_SEND #undef SPORT_SEND
#endif #endif

View File

@ -176,6 +176,7 @@
#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 FRSKYX2_CC2500_INO
#define FRSKY_RX_CC2500_INO #define FRSKY_RX_CC2500_INO
#define HITEC_CC2500_INO #define HITEC_CC2500_INO
#define HOTT_CC2500_INO #define HOTT_CC2500_INO
@ -567,6 +568,11 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
CH_8 CH_8
EU_16 EU_16
EU_8 EU_8
PROTO_FRSKYX2
FRSKYX2_CH_16
FRSKYX2_CH_8
FRSKYX2_EU_16
FRSKYX2_EU_8
PROTO_FRSKY_RX PROTO_FRSKY_RX
NONE NONE
PROTO_FX816 PROTO_FX816