mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2026-08-20 16:43:16 +00:00
Compare commits
12 Commits
5984216fbd
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c8d0638b21 | ||
|
|
55a8412cc8 | ||
|
|
7fadec2d4f | ||
|
|
0c20c17c7d | ||
|
|
d8c3013bf4 | ||
|
|
b5e140bd23 | ||
|
|
90dcf034ba | ||
|
|
c223fb17b5 | ||
|
|
03921d36b9 | ||
|
|
780b4d9bcb | ||
|
|
d6a969ee28 | ||
|
|
9354abe5fd |
@@ -201,6 +201,7 @@
|
||||
62,0,XK,X450,1,FMode,TakeOf,Emerg,3D_6G,Pict,Video
|
||||
62,1,XK,X420,1,FMode,TakeOf,Emerg,3D_6G,Pict,Video,Flip,Light
|
||||
62,2,XK,Cars,0,FMode,TakeOf,Emerg,3D_6G,Pict,Video,Flip,Light
|
||||
109,0,MoFly,Std,0,FMode,Rate,BFlip,LRoll,RRoll,Invert
|
||||
99,0,XK2,X4,0,Rate,Mode,Hover,Light,Stunt
|
||||
99,1,XK2,P10,0,Rate,Mode,Hover,Light,Stunt
|
||||
8,0,YD717,Std,1,Flip,Light,Pict,Video,HLess
|
||||
@@ -232,7 +233,7 @@
|
||||
97,1,SGF22,F22S,1,Mode,Flip,LED,Pict,Video,TrRes
|
||||
97,2,SGF22,J20,1,Mode,Flip,LED,Pict,Video
|
||||
97,3,SGF22,CX10,1,Mode,Flip,LED,Pict,Video
|
||||
97,4,SGF22,T28,1,Mode,Flip
|
||||
97,4,SGF22,T28,1,Mode,Stunt,LED,Invert,RTH,-,-,-,RTH_SET
|
||||
61,0,EazyRC
|
||||
98,0,Kyosho3,ASF,0
|
||||
100,0,YuXiang,Std,0,Lock,Rate,Land,Manual,Flip,Mode,Pitch
|
||||
|
||||
@@ -103,4 +103,5 @@
|
||||
105,Shenqi2
|
||||
106,WL91x
|
||||
107,WPL
|
||||
108,0,Ares
|
||||
108,Ares
|
||||
109,MoFly
|
||||
@@ -84,6 +84,7 @@ const char STR_FX[] ="FX";
|
||||
const char STR_BAYANG_RX[] ="BayanRX";
|
||||
const char STR_PELIKAN[] ="Pelikan";
|
||||
const char STR_XK[] ="XK";
|
||||
const char STR_MOFLY[] ="MoFly";
|
||||
const char STR_XK2[] ="XK2";
|
||||
const char STR_XN297DUMP[] ="XN297DP";
|
||||
const char STR_FRSKYR9[] ="FrSkyR9";
|
||||
@@ -170,7 +171,7 @@ const char STR_SUBTYPE_XN297DUMP[] = "\x07""250Kbps""1Mbps\0 ""2Mbps\0 ""Auto\0
|
||||
const char STR_SUBTYPE_ESKY150[] = "\x03""4ch""7ch";
|
||||
const char STR_SUBTYPE_ESKY150V2[] = "\x05""150V2";
|
||||
const char STR_SUBTYPE_V911S[] = "\x05""V911S""E119\0";
|
||||
const char STR_SUBTYPE_XK[] = "\x04""X450""X420""Cars";
|
||||
const char STR_SUBTYPE_XK[] = "\x05""X450\0""X420\0""Cars\0";
|
||||
const char STR_SUBTYPE_XK2[] = "\x03""X4\0""P10";
|
||||
const char STR_SUBTYPE_FRSKYR9[] = "\x07""915MHz\0""868MHz\0""915 8ch""868 8ch""FCC\0 ""--\0 ""FCC 8ch""-- 8ch\0";
|
||||
const char STR_SUBTYPE_ESKY[] = "\x03""Std""ET4";
|
||||
@@ -431,6 +432,9 @@ const mm_protocol_definition multi_protocols[] = {
|
||||
#if defined(MLINK_CYRF6936_INO)
|
||||
{PROTO_MLINK, STR_MLINK, NO_SUBTYPE, 0, OPTION_NONE, 1, 0, SW_CYRF, MLINK_init, MLINK_callback },
|
||||
#endif
|
||||
#if defined(XK_CCNRF_INO)
|
||||
{PROTO_MOFLY, STR_MOFLY, NO_SUBTYPE, 0, OPTION_RFTUNE, 0, 0, SW_NRF, XK_init, XK_callback },
|
||||
#endif
|
||||
#if defined(MOULDKG_NRF24L01_INO)
|
||||
{PROTO_MOULDKG, STR_MOULDKG, STR_SUBTYPE_MOULDKG, 3, OPTION_OPTION, 0, 0, SW_NRF, MOULDKG_init, MOULDKG_callback },
|
||||
#endif
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
#define VERSION_MAJOR 1
|
||||
#define VERSION_MINOR 3
|
||||
#define VERSION_REVISION 4
|
||||
#define VERSION_PATCH_LEVEL 65
|
||||
#define VERSION_PATCH_LEVEL 70
|
||||
|
||||
#define MODE_SERIAL 0
|
||||
|
||||
@@ -136,6 +136,7 @@ enum PROTOCOLS
|
||||
PROTO_WL91X = 106, // =>CC2500 & NRF24L01
|
||||
PROTO_WPL = 107, // =>NRF24L01
|
||||
PROTO_ARES = 108, // =>CC2500
|
||||
PROTO_MOFLY = 109, // =>CC2500 & NRF24L01
|
||||
|
||||
PROTO_NANORF = 126, // =>NRF24L01
|
||||
PROTO_TEST = 127, // =>CC2500
|
||||
@@ -1173,6 +1174,8 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p --
|
||||
sub_protocol==XK
|
||||
X450 0
|
||||
X420 1
|
||||
Cars 2
|
||||
MoFly 3
|
||||
sub_protocol==FRSKY_R9
|
||||
R9_915 0
|
||||
R9_868 1
|
||||
|
||||
@@ -46,6 +46,8 @@ Multiprotocol is distributed in the hope that it will be useful,
|
||||
#define SGF22_FX922_FLAG_BALANCEHIGH 0x01
|
||||
#define SGF22_FX922_FLAG_BALANCE 0x02
|
||||
|
||||
#define SGF22_T28_RTH_SET 0x20
|
||||
#define SGF22_T28_FLAG_OPTIMIZED 0x80
|
||||
|
||||
//packet[9]
|
||||
#define SGF22_FLAG_TRIMRESET 0x04
|
||||
@@ -90,11 +92,12 @@ static void __attribute__((unused)) SGF22_send_packet()
|
||||
| GET_FLAG(CH7_SW, SGF22_FLAG_LIGHT) // push up throttle trim for light in the stock TX
|
||||
| GET_FLAG(CH9_SW, SGF22_FLAG_VIDEO) // push down throttle trim for video in the stock TX
|
||||
| GET_FLAG(CH11_SW, SGF22_FX922_FLAG_BALANCE)
|
||||
| GET_FLAG(CH12_SW, SGF22_FX922_FLAG_BALANCEHIGH);
|
||||
| GET_FLAG(CH12_SW, SGF22_FX922_FLAG_BALANCEHIGH)
|
||||
| GET_FLAG(CH13_SW, SGF22_T28_RTH_SET);
|
||||
if(Channel_data[CH5] > CHANNEL_MAX_COMMAND)
|
||||
packet[8] |= SGF22_FLAG_VERTICAL; // CH5 100%, vertical mode (torque)
|
||||
packet[8] |= ( sub_protocol == SGF22_T28 ? SGF22_T28_FLAG_OPTIMIZED : SGF22_FLAG_VERTICAL); // CH5 100%, vertical mode (torque)
|
||||
else if(Channel_data[CH5] > CHANNEL_MIN_COMMAND )
|
||||
packet[8] |= ( sub_protocol == SGF22_J20 ? SGF22_J20_FLAG_HORIZONTAL : SGF22_FLAG_6G ); // CH5 0%, F22 & F22S - 6G mode, J20 - Horizontal mode
|
||||
packet[8] |= ( sub_protocol == SGF22_J20 ? SGF22_J20_FLAG_HORIZONTAL : SGF22_FLAG_6G ); // CH5 0%, F22 & F22S - 6G mode, J20 - Horizontal mode
|
||||
}
|
||||
else //SGF22_CX10 114548
|
||||
{
|
||||
|
||||
@@ -403,6 +403,7 @@
|
||||
|
||||
#if defined(MULTI_AIR) || defined(MCU_STM32F103C8)
|
||||
// Save flash space...
|
||||
#undef ARES_CC2500_INO
|
||||
#undef BUMBLEB_CCNRF_INO
|
||||
#undef CABELL_NRF24L01_INO
|
||||
#undef FQ777_NRF24L01_INO
|
||||
@@ -507,6 +508,7 @@
|
||||
#undef OMP_HUB_TELEMETRY
|
||||
#undef V761_HUB_TELEMETRY
|
||||
#undef FX_HUB_TELEMETRY
|
||||
#undef XK_HUB_TELEMETRY
|
||||
#undef XK2_HUB_TELEMETRY
|
||||
#undef SGF22_HUB_TELEMETRY
|
||||
#undef KAMTOM_HUB_TELEMETRY
|
||||
@@ -552,6 +554,9 @@
|
||||
#if not defined(FX_NRF24L01_INO)
|
||||
#undef FX_HUB_TELEMETRY
|
||||
#endif
|
||||
#if not defined(XK_CCNRF_INO)
|
||||
#undef XK_HUB_TELEMETRY
|
||||
#endif
|
||||
#if not defined(XK2_CCNRF_INO)
|
||||
#undef XK2_HUB_TELEMETRY
|
||||
#endif
|
||||
@@ -621,7 +626,7 @@
|
||||
//protocols using FRSKYD user frames
|
||||
#undef HUB_TELEMETRY
|
||||
#endif
|
||||
#if not defined(HOTT_FW_TELEMETRY) && not defined(DSM_TELEMETRY) && not defined(SPORT_TELEMETRY) && not defined(HUB_TELEMETRY) && not defined(HUBSAN_HUB_TELEMETRY) && not defined(BUGS_HUB_TELEMETRY) && not defined(NCC1701_HUB_TELEMETRY) && not defined(BAYANG_HUB_TELEMETRY) && not defined(CABELL_HUB_TELEMETRY) && not defined(RLINK_HUB_TELEMETRY) && not defined(AFHDS2A_HUB_TELEMETRY) && not defined(AFHDS2A_FW_TELEMETRY) && not defined(MULTI_TELEMETRY) && not defined(MULTI_STATUS) && not defined(HITEC_HUB_TELEMETRY) && not defined(HITEC_FW_TELEMETRY) && not defined(SCANNER_TELEMETRY) && not defined(FRSKY_RX_TELEMETRY) && not defined(AFHDS2A_RX_TELEMETRY) && not defined(BAYANG_RX_TELEMETRY) && not defined(DEVO_HUB_TELEMETRY) && not defined(PROPEL_HUB_TELEMETRY) && not defined(OMP_HUB_TELEMETRY) && not defined(V761_HUB_TELEMETRY) && not defined(SGF22_HUB_TELEMETRY) && not defined(XK2_HUB_TELEMETRY) && not defined(FX_HUB_TELEMETRY) && not defined(KAMTOM_HUB_TELEMETRY) && not defined(YUXIANG_HUB_TELEMETRY) && not defined(WFLY2_HUB_TELEMETRY) && not defined(LOLI_HUB_TELEMETRY) && not defined(MLINK_HUB_TELEMETRY) && not defined(MLINK_FW_TELEMETRY) && not defined(MT99XX_HUB_TELEMETRY) && not defined(MULTI_CONFIG_INO)
|
||||
#if not defined(HOTT_FW_TELEMETRY) && not defined(DSM_TELEMETRY) && not defined(SPORT_TELEMETRY) && not defined(HUB_TELEMETRY) && not defined(HUBSAN_HUB_TELEMETRY) && not defined(BUGS_HUB_TELEMETRY) && not defined(NCC1701_HUB_TELEMETRY) && not defined(BAYANG_HUB_TELEMETRY) && not defined(CABELL_HUB_TELEMETRY) && not defined(RLINK_HUB_TELEMETRY) && not defined(AFHDS2A_HUB_TELEMETRY) && not defined(AFHDS2A_FW_TELEMETRY) && not defined(MULTI_TELEMETRY) && not defined(MULTI_STATUS) && not defined(HITEC_HUB_TELEMETRY) && not defined(HITEC_FW_TELEMETRY) && not defined(SCANNER_TELEMETRY) && not defined(FRSKY_RX_TELEMETRY) && not defined(AFHDS2A_RX_TELEMETRY) && not defined(BAYANG_RX_TELEMETRY) && not defined(DEVO_HUB_TELEMETRY) && not defined(PROPEL_HUB_TELEMETRY) && not defined(OMP_HUB_TELEMETRY) && not defined(V761_HUB_TELEMETRY) && not defined(SGF22_HUB_TELEMETRY) && not defined(XK_HUB_TELEMETRY) && not defined(XK2_HUB_TELEMETRY) && not defined(FX_HUB_TELEMETRY) && not defined(KAMTOM_HUB_TELEMETRY) && not defined(YUXIANG_HUB_TELEMETRY) && not defined(WFLY2_HUB_TELEMETRY) && not defined(LOLI_HUB_TELEMETRY) && not defined(MLINK_HUB_TELEMETRY) && not defined(MLINK_FW_TELEMETRY) && not defined(MT99XX_HUB_TELEMETRY) && not defined(MULTI_CONFIG_INO)
|
||||
#undef TELEMETRY
|
||||
#undef INVERT_TELEMETRY
|
||||
#undef MULTI_TELEMETRY
|
||||
|
||||
@@ -27,6 +27,11 @@ Multiprotocol is distributed in the hope that it will be useful,
|
||||
#define XK_PAYLOAD_SIZE 16
|
||||
#define XK_BIND_COUNT 750 //3sec
|
||||
|
||||
enum {
|
||||
XK_DATA,
|
||||
XK_RX,
|
||||
};
|
||||
|
||||
static uint16_t __attribute__((unused)) XK_convert_channel(uint8_t num)
|
||||
{
|
||||
uint16_t val;
|
||||
@@ -68,43 +73,65 @@ static void __attribute__((unused)) XK_send_packet()
|
||||
memset(packet,0x00,7);
|
||||
memset(&packet[10],0x00,5);
|
||||
|
||||
packet[12]=0x40;
|
||||
packet[13]=0x40;
|
||||
if(IS_BIND_IN_PROGRESS)
|
||||
packet[14] = 0xC0;
|
||||
if(protocol != PROTO_MOFLY)
|
||||
{
|
||||
packet[12]=0x40;
|
||||
packet[13]=0x40;
|
||||
if(IS_BIND_IN_PROGRESS)
|
||||
packet[14] = 0xC0;
|
||||
else
|
||||
{
|
||||
uint16_t val=convert_channel_10b(THROTTLE, false);
|
||||
packet[0] = val>>2; // 0..255
|
||||
packet[12] |= val & 2;
|
||||
val=XK_convert_channel(RUDDER);
|
||||
packet[1] = val>>2;
|
||||
packet[12] |= (val & 2)<<2;
|
||||
val=XK_convert_channel(ELEVATOR);
|
||||
packet[2] = val>>2;
|
||||
packet[13] |= val & 2;
|
||||
val=XK_convert_channel(AILERON);
|
||||
packet[3] = val>>2;
|
||||
packet[13] |= (val & 2)<<2;
|
||||
|
||||
memset(&packet[4],0x40,3); // Trims
|
||||
|
||||
if(CH5_SW)
|
||||
packet[10] = 0x10; // V-Mode
|
||||
else
|
||||
if(Channel_data[CH5] > CHANNEL_MIN_COMMAND)
|
||||
packet[10] = 0x04; // 6G-Mode
|
||||
//0x00 default M-Mode
|
||||
|
||||
packet[10] |= GET_FLAG(CH7_SW ,0x80); // Emergency stop momentary switch
|
||||
|
||||
packet[11] = GET_FLAG(CH8_SW ,0x03) // 3D/6G momentary switch
|
||||
|GET_FLAG(CH6_SW ,0x40); // Take off momentary switch
|
||||
packet[14] = GET_FLAG(CH9_SW ,0x01) // Photo momentary switch
|
||||
|GET_FLAG(CH10_SW,0x02) // Video momentary switch
|
||||
|GET_FLAG(CH11_SW,0x04) // Flip
|
||||
|GET_FLAG(CH12_SW,0x10); // Light
|
||||
//debugln("P1:%02X,P12:%02X",packet[1],packet[12]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
uint16_t val=convert_channel_10b(THROTTLE, false);
|
||||
packet[0] = val>>2; // 0..255
|
||||
packet[12] |= val & 2;
|
||||
val=XK_convert_channel(RUDDER);
|
||||
packet[1] = val>>2;
|
||||
packet[12] |= (val & 2)<<2;
|
||||
val=XK_convert_channel(ELEVATOR);
|
||||
packet[2] = val>>2;
|
||||
packet[13] |= val & 2;
|
||||
val=XK_convert_channel(AILERON);
|
||||
packet[3] = val>>2;
|
||||
packet[13] |= (val & 2)<<2;
|
||||
|
||||
memset(&packet[4],0x40,3); // Trims
|
||||
|
||||
if(Channel_data[CH5] > CHANNEL_MAX_COMMAND)
|
||||
packet[10] = 0x10; // V-Mode
|
||||
packet[0] = convert_channel_8b(THROTTLE);
|
||||
packet[1] = convert_channel_s8b(RUDDER);
|
||||
packet[2] = convert_channel_s8b(ELEVATOR);
|
||||
packet[3] = convert_channel_s8b(AILERON);
|
||||
memset(&packet[4],0x40,3); // Trims centered
|
||||
//0x00 default MM Mode
|
||||
if(CH5_SW)
|
||||
packet[10] = 0x01; // 6G Mode
|
||||
else
|
||||
if(Channel_data[CH5] > CHANNEL_MIN_COMMAND)
|
||||
packet[10] = 0x04; // 6G-Mode
|
||||
//0x00 default M-Mode
|
||||
|
||||
packet[10] |= GET_FLAG(CH7_SW ,0x80); // Emergency stop momentary switch
|
||||
|
||||
packet[11] = GET_FLAG(CH8_SW ,0x03) // 3D/6G momentary switch
|
||||
|GET_FLAG(CH6_SW ,0x40); // Take off momentary switch
|
||||
packet[14] = GET_FLAG(CH9_SW ,0x01) // Photo momentary switch
|
||||
|GET_FLAG(CH10_SW,0x02) // Video momentary switch
|
||||
|GET_FLAG(CH11_SW,0x04) // Flip
|
||||
|GET_FLAG(CH12_SW,0x10); // Light
|
||||
//debugln("P1:%02X,P12:%02X",packet[1],packet[12]);
|
||||
packet[10] = 0x02; // 3D-Mode
|
||||
packet[10] |= GET_FLAG(CH6_SW ,0x04); // Low/High rate
|
||||
packet[11] = GET_FLAG(CH7_SW ,0x10) // Back Flip - momentary switch
|
||||
|GET_FLAG(CH8_SW ,0x20) // Left Roll - momentary switch
|
||||
|GET_FLAG(CH9_SW ,0x04) // Right Roll - momentary switch
|
||||
|GET_FLAG(CH10_SW,0x08); // Inverted Flight - latching switch
|
||||
}
|
||||
|
||||
crc=packet[0];
|
||||
@@ -112,10 +139,12 @@ static void __attribute__((unused)) XK_send_packet()
|
||||
crc+=packet[i];
|
||||
packet[15]=crc;
|
||||
|
||||
// debug("C: %02X, P:",hopping_frequency[rf_ch_num]);
|
||||
// for(uint8_t i=0; i<XK_PAYLOAD_SIZE; i++)
|
||||
// debug(" %02X",packet[i]);
|
||||
// debugln("");
|
||||
#if 0
|
||||
debug("C: %02X, P:",hopping_frequency[rf_ch_num]);
|
||||
for(uint8_t i=0; i<XK_PAYLOAD_SIZE; i++)
|
||||
debug(" %02X",packet[i]);
|
||||
debugln("");
|
||||
#endif
|
||||
|
||||
// Send
|
||||
XN297_SetPower(); // Set tx_power
|
||||
@@ -128,7 +157,7 @@ const uint8_t PROGMEM XK_bind_hop[XK_RF_BIND_NUM_CHANNELS]= { 0x07, 0x24, 0x3E,
|
||||
|
||||
const uint8_t PROGMEM XK_tx_addr[]= { 0xB3, 0x67, 0xE9, 0x98, 0x3A, 0xEC, 0xA6, 0x59, 0xB2, 0x94, 0x2B, 0xA5, 0x37, 0xC5, 0x4A, 0xD3,
|
||||
0x49, 0xA6, 0x83, 0xEB, 0x4B, 0xC9, 0x59, 0xD2, 0x65, 0x34, 0x6A, 0xD3, 0x2C, 0x96, 0x2A, 0xA9,
|
||||
0x32, 0xB2, 0xB4, 0x49, 0xD3, 0x37, 0xE9 };
|
||||
0x32, 0xB2, 0xB4, 0x49, 0xD3, 0x37, 0xE9 }; // last one in the table is 0x68 but not reachable
|
||||
|
||||
const uint8_t PROGMEM XK_hop[]= { 0x47, 0x3A, 0x4C, 0x39, 0x4D, 0x34, 0x4A, 0x3F, 0x45, 0x3E, 0x4B, 0x3D, 0x3B, 0x48, 0x40, 0x49,
|
||||
0x46, 0x3C, 0x43, 0x38, 0x35, 0x42, 0x33, 0x44, 0x4E, 0x37, 0x44, 0x35, 0x37, 0x4E, 0x36, 0x41 };
|
||||
@@ -196,34 +225,102 @@ static void __attribute__((unused)) XK_initialize_txid()
|
||||
|
||||
static void __attribute__((unused)) XK_RF_init()
|
||||
{
|
||||
XN297_Configure(XN297_CRCEN, XN297_SCRAMBLED, sub_protocol==X450 ? XN297_250K : XN297_1M );
|
||||
XN297_Configure(XN297_CRCEN, XN297_SCRAMBLED, sub_protocol==X450 ? XN297_250K : XN297_1M ); //MoFly equals to X450 here
|
||||
XN297_SetTXAddr((uint8_t*)"\x68\x94\xA6\xD5\xC3", 5); // Bind address
|
||||
XN297_HoppingCalib(XK_RF_BIND_NUM_CHANNELS+XK_RF_NUM_CHANNELS); // Calibrate all channels
|
||||
}
|
||||
|
||||
uint16_t XK_callback()
|
||||
{
|
||||
#ifdef MULTI_SYNC
|
||||
telemetry_set_input_sync(XK_PACKET_PERIOD);
|
||||
#ifdef XK_HUB_TELEMETRY
|
||||
bool rx = false;
|
||||
#endif
|
||||
if(bind_counter)
|
||||
if(--bind_counter==0)
|
||||
{
|
||||
BIND_DONE;
|
||||
XN297_SetTXAddr(rx_tx_addr, 5); // Normal packets address
|
||||
}
|
||||
XK_send_packet();
|
||||
|
||||
switch(phase)
|
||||
{
|
||||
case XK_DATA:
|
||||
#ifdef MULTI_SYNC
|
||||
telemetry_set_input_sync(XK_PACKET_PERIOD);
|
||||
#endif
|
||||
#ifdef XK_HUB_TELEMETRY
|
||||
rx = XN297_IsRX();
|
||||
XN297_SetTxRxMode(TXRX_OFF);
|
||||
#endif
|
||||
XK_send_packet();
|
||||
if(bind_counter)
|
||||
if(--bind_counter==0)
|
||||
{
|
||||
BIND_DONE;
|
||||
XN297_SetTXAddr(rx_tx_addr, 5); // Normal packets address
|
||||
#ifdef XK_HUB_TELEMETRY
|
||||
XN297_SetRXAddr(rx_tx_addr, XK_PAYLOAD_SIZE); // Normal packets address
|
||||
#endif
|
||||
}
|
||||
#ifdef XK_HUB_TELEMETRY
|
||||
if(rx)
|
||||
{
|
||||
XN297_ReadPayload(packet_in, XK_PAYLOAD_SIZE);
|
||||
#if 1
|
||||
debug("RX");
|
||||
for(uint8_t i=0; i<XK_PAYLOAD_SIZE; i++)
|
||||
debug(" %02X",packet_in[i]);
|
||||
debugln("");
|
||||
#endif
|
||||
if(memcmp(&packet[7], packet_in, 3) == 0)
|
||||
{//TX_ID ok
|
||||
crc=packet_in[0]+0x68;
|
||||
for(uint8_t i=1; i<XK_PAYLOAD_SIZE-1;i++)
|
||||
crc+=packet_in[i];
|
||||
if(packet_in[15] == crc)
|
||||
{//Checksum ok
|
||||
telemetry_link = 1;
|
||||
v_lipo1 = packet_in[10] ? 137:162; // low voltage 7.1V
|
||||
}
|
||||
}
|
||||
}
|
||||
phase++;
|
||||
return 1350;
|
||||
#endif
|
||||
break;
|
||||
#ifdef XK_HUB_TELEMETRY
|
||||
default: //XK_RX
|
||||
/*{ // Wait for packet to be sent before switching to receive mode
|
||||
uint16_t start=(uint16_t)micros(), count=0;
|
||||
while ((uint16_t)((uint16_t)micros()-(uint16_t)start) < 500)
|
||||
{
|
||||
if(XN297_IsPacketSent())
|
||||
break;
|
||||
count++;
|
||||
}
|
||||
debugln("%d",count);
|
||||
}*/
|
||||
//Switch to RX
|
||||
XN297_SetTxRxMode(TXRX_OFF);
|
||||
XN297_SetTxRxMode(RX_EN);
|
||||
phase = XK_DATA;
|
||||
return XK_PACKET_PERIOD-1350;
|
||||
#endif
|
||||
}
|
||||
return XK_PACKET_PERIOD;
|
||||
}
|
||||
|
||||
void XK_init()
|
||||
{
|
||||
if(sub_protocol != XK_CARS)
|
||||
if((sub_protocol != XK_CARS && protocol != PROTO_MOFLY) || IS_BIND_IN_PROGRESS)
|
||||
{
|
||||
bind_counter=XK_BIND_COUNT;
|
||||
BIND_IN_PROGRESS; // Autobind protocol
|
||||
}
|
||||
else
|
||||
bind_counter=0;
|
||||
XK_initialize_txid();
|
||||
XK_RF_init();
|
||||
hopping_frequency_no = 0;
|
||||
bind_counter=XK_BIND_COUNT;
|
||||
phase = XK_DATA;
|
||||
#ifdef XK_HUB_TELEMETRY
|
||||
RX_RSSI = 100; // Dummy value
|
||||
telemetry_lost = 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -281,7 +281,7 @@
|
||||
#define UDIRC_CCNRF_INO
|
||||
#define V911S_CCNRF_INO
|
||||
#define WL91X_CCNRF_INO
|
||||
#define XK_CCNRF_INO
|
||||
#define XK_CCNRF_INO //Include MoFly protocol
|
||||
#define XK2_CCNRF_INO
|
||||
|
||||
//The protocols below need a SX1276 to be installed
|
||||
@@ -357,6 +357,7 @@
|
||||
#define V761_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
||||
#define KAMTOM_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
||||
#define FX_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
||||
#define XK_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
||||
#define XK2_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
||||
#define SGF22_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
||||
#define YUXIANG_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
||||
@@ -789,6 +790,8 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
|
||||
PHOENIX
|
||||
PROTO_MLINK
|
||||
NONE
|
||||
PROTO_MOFLY
|
||||
NONE
|
||||
PROTO_MOULDKG
|
||||
MOULDKG_ANALOG4
|
||||
MOULDKG_DIGIT4
|
||||
|
||||
@@ -126,6 +126,7 @@ CFlie|AIR|38|CFlie||||||||NRF24L01|
|
||||
[Losi](Protocols_Details.md#Losi---89)||89|||||||||CYRF6936|
|
||||
[MJXq](Protocols_Details.md#MJXQ---18)||18|WLH08|X600|X800|H26D|E010*|H26WH|PHOENIX*||NRF24L01|XN297
|
||||
[MLINK](Protocols_Details.md#MLINK---78)||78|||||||||CYRF6936|
|
||||
[MoFly](Protocols_Details.md#MoFly---109)||109|||||||||NRF24L01&CC2500|XN297
|
||||
[MouldKg](Protocols_Details.md#mouldkg---90)||90|A4444|D4444|A664||||||NRF24L01|XN297
|
||||
[MT99xx](Protocols_Details.md#MT99XX---17)||17|MT|H7|YZ|LS|FY805|A180|DRAGON|F949G|NRF24L01|XN297
|
||||
[MT99xx2](Protocols_Details.md#MT99XX2---92)||92|PA18|SU35|||||||NRF24L01|XN297
|
||||
@@ -159,7 +160,7 @@ CFlie|AIR|38|CFlie||||||||NRF24L01|
|
||||
[WL91X](Protocols_Details.md#WL91X---106)||106|||||||||NRF24L01&CC2500|XN297
|
||||
[WPL](Protocols_Details.md#WPL---107)||107|||||||||NRF24L01|XN297
|
||||
[XERALL](Protocols_Details.md#XERALL---91)||91|Tank||||||||NRF24L01|XN297
|
||||
[XK](Protocols_Details.md#XK---62)||62|X450|X420|Cars||||||NRF24L01&CC2500|XN297
|
||||
[XK](Protocols_Details.md#XK---62)||62|X450|X420|Cars|MoFly|||||NRF24L01&CC2500|XN297
|
||||
[XK2](Protocols_Details.md#XK2---99)||99|X4|P10|||||||NRF24L01&CC2500|XN297
|
||||
[YD717](Protocols_Details.md#YD717---8)||8|YD717|SKYWLKR|SYMAX4|XINXUN|NIHUI||||NRF24L01|
|
||||
[YuXiang](Protocols_Details.md#YuXiang---100)||100|||||||||NRF24L01|XN297
|
||||
@@ -811,6 +812,8 @@ To bind V2 RXs you must follow the below procedure (original):
|
||||
### Sub_protocol FD_V3 - *2*
|
||||
FlyDream RXs like IS-4R and IS-4R0
|
||||
|
||||
Protronik (PTR-6A) RXs like R8X: you need to initiate binding on the receiver, then on the transmitter, and finally press the bind button on the receiver.
|
||||
|
||||
## E016HV2 - *80*
|
||||
Models: E016H v2
|
||||
|
||||
@@ -1255,6 +1258,19 @@ If a CC2500 is installed it will be used for this sub protocol. Option in this c
|
||||
|
||||
If only a NRF24L01 is installed then this sub protocol might be problematic because it is using the xn297L emulation with a transmission speed of 250kbps which doesn't work very well with every NRF24L01, this is an hardware issue with the authenticity and accuracy of the components.
|
||||
|
||||
## MoFly - *109*
|
||||
Models: MoFly planes MF-X7, P-51D, MF-A84 and Ki-84
|
||||
|
||||
If a CC2500 is installed it will be used for this sub protocol. Option in this case is used for fine frequency tuning like any CC2500 protocols so check the [Frequency Tuning page](/docs/Frequency_Tuning.md).
|
||||
|
||||
If only a NRF24L01 is installed then this sub protocol might be problematic because it is using the xn297L emulation with a transmission speed of 250kbps which doesn't work very well with every NRF24L01, this is an hardware issue with the authenticity and accuracy of the components.
|
||||
|
||||
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10
|
||||
---|---|---|---|---|---|---|---|---|----
|
||||
A|E|T|R|Flight_modes|Rate_L/H|Back_Flip|Left_Roll|Right_Roll|Inverted
|
||||
|
||||
Flight_modes: -100%=MM-Mode, 0%=3D-Mode, +100%=6G-Mode. CH7-CH9 are momentary switches. CH10 is a toggle switch.
|
||||
|
||||
## MT99XX - *17*
|
||||
Autobind protocol
|
||||
|
||||
@@ -1605,7 +1621,7 @@ CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10
|
||||
---|---|---|---|---|---|---|---|---|----
|
||||
A|E|T|R|Flight_modes|Take_off|Emerg stop|3D/6G|Picture|Video
|
||||
|
||||
Flight_modes: -100%=M-Mode, 0%=6G-Mode, +100%=V-Mode. CH6-CH10 are mementary switches.
|
||||
Flight_modes: -100%=M-Mode, 0%=6G-Mode, +100%=V-Mode. CH6-CH10 are momentary switches.
|
||||
|
||||
### Sub_protocol X420 - *1*
|
||||
Models: XK X420/X520 (TX=X4)
|
||||
@@ -1614,7 +1630,7 @@ CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10
|
||||
---|---|---|---|---|---|---|---|---|----
|
||||
A|E|T|R|Flight_modes|Take_off|Emerg stop|3D/6G|Picture|Video
|
||||
|
||||
Flight_modes: -100%=M-Mode, 0%=6G-Mode, +100%=V-Mode. CH6-CH10 are mementary switches.
|
||||
Flight_modes: -100%=M-Mode, 0%=6G-Mode, +100%=V-Mode. CH6-CH10 are momentary switches.
|
||||
|
||||
Model: Tiger Drone 1400782
|
||||
|
||||
@@ -2365,9 +2381,9 @@ ST TRIM: -100% Left, +100% Right, variable/shouldn't be needed? CH1 trim on stee
|
||||
## SGF22 - *97*
|
||||
Autobind protocol
|
||||
|
||||
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12
|
||||
---|---|---|---|---|---|---|---|---|---|---|---
|
||||
A|E|T|R|MODE|FLIP|LIGHT|PHOTO|VIDEO|TRIMRESET|BAL|BALHIG
|
||||
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12|CH13
|
||||
---|---|---|---|---|---|---|---|---|---|---|---|---
|
||||
A|E|T|R|MODE|FLIP|LIGHT|PHOTO|VIDEO|TRIMRESET|BAL|BALHIG|RTH_SET
|
||||
|
||||
Telemetry is supported. The plane sends a battery status of good->empty which is visible in A1 (good=13.2V->empty=0V) and RSSI gets a dummy value of 100.
|
||||
|
||||
@@ -2388,18 +2404,28 @@ Mode -100% = 3D, 0% = 6G
|
||||
### Sub_protocol J20
|
||||
Model: KF700 J20
|
||||
|
||||
Mode -100% = Gyro off, 0% = Horizontal, 100% = Vertical. CH8 - Invert, CH10 - Fix Height (Altitude hold)
|
||||
Mode: -100% = Gyro off, 0% = Horizontal, 100% = Vertical. CH8 - Invert, CH10 - Fix Height (Altitude hold)
|
||||
|
||||
### Sub_protocol CX10
|
||||
Model: Cheerson CX-10 with red PCB
|
||||
|
||||
**Only 2 IDs available**, use RX num to cycle through them.
|
||||
|
||||
Mode -100% = Low, 0% = Medium, 100% = High
|
||||
Mode: -100% = Low, 0% = Medium, 100% = High
|
||||
|
||||
### Sub_protocol T28
|
||||
Model: FMS T28
|
||||
|
||||
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12|CH13
|
||||
---|---|---|---|---|---|---|---|---|---|---|---|---
|
||||
A|E|T|R|MODE|STUNT|LIGHT|INVERT|RTH|-|-|-|RTH_SET
|
||||
|
||||
Mode: -100% = Gyro off, 0% = Stabilized, 100% = Optimized
|
||||
|
||||
Notes:
|
||||
- CH6/CH9/CH13 (STUNT, RTH, RTH Set) are NOT required to be bound, or used to fly the plane.
|
||||
- CH9 (RTH) WILL function without CH13 (RTH Set) bound/used.
|
||||
|
||||
## Shenqi - *19*
|
||||
Autobind protocol
|
||||
|
||||
|
||||
Reference in New Issue
Block a user