Compare commits

...
12 Commits
Author SHA1 Message Date
pascallanger ee984c403d Update DSM_cyrf6936.ino 2026-09-22 11:57:43 -04:00
pascallanger ced6bbc5c8 Update Protocols_Details.md 2026-09-22 11:57:31 -04:00
pascallanger f10fe7bbf0 AFHS2A: 14/17 channels
Switch based on RX number
2026-09-22 11:48:21 -04:00
Frankie Arzu 9691730be6 Fix to support DSM CH16 (#1179) 2026-09-22 16:20:06 +02:00
pascallanger 5353281ed7 Revert DSM timing change 2026-09-22 08:21:08 -04:00
pascallanger 1e65452d68 MoFly: arm on aerobatic flags
Aerobatic flags are sent only:
 - in 6G mode
 - must be released (-100%) before being used
2026-08-21 13:23:57 +02:00
pascallanger 53ecce8a7c XK: fix bind and normal 2026-08-20 20:11:32 +02:00
pascallanger c8d0638b21 Update XK_ccnrf.ino
Fix bind
2026-08-20 14:01:27 +02:00
pascallanger 55a8412cc8 MoFly telemetry try 1 2026-08-19 22:50:05 +02:00
pascallanger 7fadec2d4f Update Protocols_Details.md 2026-08-19 15:12:40 +02:00
pascallanger 0c20c17c7d SGF22/T28: Invert flag
Feature not advertised by the manufacturer
2026-08-19 14:48:42 +02:00
pascallanger d8c3013bf4 MoFly protocol 2026-08-19 12:57:37 +02:00
10 changed files with 184 additions and 66 deletions
+2 -2
View File
@@ -201,7 +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
62,3,XK,MoFly,0,FMode,Rate,BFlip,LRoll,RRoll,Invert
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
@@ -233,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,LED,-,RTH,-,-,-,RTH_SET
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
+11 -5
View File
@@ -183,16 +183,22 @@ static void AFHDS2A_build_bind_packet()
static void AFHDS2A_build_packet(uint8_t type)
{
uint16_t val;
uint8_t num_ch = 14; //14 channels
if(RX_num > 31)
num_ch = 17; //16 channels
memcpy( &packet[1], rx_tx_addr, 4);
memcpy( &packet[5], rx_id, 4);
switch(type)
{
case AFHDS2A_PACKET_STICKS:
packet[0] = 0x58;
//16 channels + RX_LQI on channel 17
for(uint8_t ch=0; ch<17; ch++)
for(uint8_t ch=0; ch<num_ch; ch++)
{
if(ch != 16)
val = convert_channel_ppm(sub_protocol<AFHDS2A_GYRO_OFF?CH_AETR[ch]:ch); // No remapping for BS receivers
else
val = 2000 - 10*RX_LQI; //CH17=RX_LQI
if(ch<14)
{
packet[9 + ch*2] = val;
@@ -200,8 +206,6 @@ static void AFHDS2A_build_packet(uint8_t type)
}
else
{
if(ch == 16) //CH17=RX_LQI
val = 2000 - 10*RX_LQI;
packet[10 + (ch-14)*6] |= (val)<<4;
packet[12 + (ch-14)*6] |= (val)&0xF0;
packet[14 + (ch-14)*6] |= (val>>4)&0xF0;
@@ -215,7 +219,9 @@ static void AFHDS2A_build_packet(uint8_t type)
break;
case AFHDS2A_PACKET_FAILSAFE:
packet[0] = 0x56;
for(uint8_t ch=0; ch<16; ch++)
if(num_ch == 17)
num_ch--;
for(uint8_t ch=0; ch<num_ch; ch++)
{ // Failsafe values
#ifdef FAILSAFE_ENABLE
val = Failsafe_data[protocol==PROTO_AFHDS2A?CH_AETR[ch]:ch]; // No remapping for BS receivers
+7 -4
View File
@@ -102,7 +102,7 @@ static void __attribute__((unused)) DSM_build_bind_packet()
if(sub_protocol==DSM_AUTO)
packet[11] = 12;
else
packet[11] = num_ch; // DX5 DSMR sends 0x48...
packet[11] = min(num_ch,12); // DX5 DSMR sends 0x48...
//packet[11] = 3; // DX3R
if (sub_protocol==DSMR)
@@ -142,7 +142,10 @@ static void __attribute__((unused)) DSM_initialize_bind_phase()
static void __attribute__((unused)) DSM_update_channels()
{
prev_option=option;
num_ch=option & 0x0F; // Remove flags 0x80=max_throw, 0x40=11ms
num_ch=option & 0x0F; // Remove flags 0x80=max_throw, 0x40=11ms, 0x20=Cloned
if (num_ch==0) // Special case for 16ch, since channels are encoded in lower 4 bits, 0=16 channels
num_ch=16;
if(num_ch<3)
num_ch=6; // Default to 6 channels if invalid choice...
@@ -329,7 +332,7 @@ uint16_t DSM_callback()
#define DSM_CH1_CH2_DELAY 4010 // Time between write of channel 1 and channel 2
#ifdef STM32_BOARD
#define DSM_WRITE_DELAY 1600 // Time after write to verify write complete
#define DSM_READ_DELAY 300 // Time before write to check read phase, and switch channels.
#define DSM_READ_DELAY 400 // Time before write to check read phase, and switch channels.
#else
#define DSM_WRITE_DELAY 1950 // Time after write to verify write complete
#define DSM_READ_DELAY 600 // Time before write to check read phase, and switch channels.
@@ -499,7 +502,7 @@ uint16_t DSM_callback()
else
return DSM2_SFC_PERIOD - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY - DSM_READ_DELAY;
}
return 10900 - DSM_WRITE_DELAY - DSM_READ_DELAY; //Was 11000 but the SR6200A needs 10900 to report telemetry correctly
return 11000 - DSM_WRITE_DELAY - DSM_READ_DELAY; //Was 11000 but the SR6200A needs 10900 to report telemetry correctly
}
#endif
return 11000 - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY - DSM_READ_DELAY;
+3 -2
View File
@@ -59,7 +59,7 @@
59,Bayang_RX,Multi,CPPM
60,Pelikan,Pro,Lite,SCX24
61,EazyRC
62,XK,X450,X420,Cars,MoFly
62,XK,X450,X420,Cars
63,XN_DUMP,250K,1M,2M,AUTO
64,FrskyX2,CH_16,CH_8,EU_16,EU_8,Cloned
65,FrSkyR9,915MHz,868MHz,915_8ch,868_8ch,FCC,--,FCC_8ch,--_8ch
@@ -103,4 +103,5 @@
105,Shenqi2
106,WL91x
107,WPL
108,0,Ares
108,Ares
109,MoFly
+6 -2
View File
@@ -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[] = "\x05""X450\0""X420\0""Cars\0""MoFly";
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
@@ -532,7 +536,7 @@ const mm_protocol_definition multi_protocols[] = {
{PROTO_XERALL, STR_XERALL, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, XERALL_init, XERALL_callback },
#endif
#if defined(XK_CCNRF_INO)
{PROTO_XK, STR_XK, STR_SUBTYPE_XK, 4, OPTION_RFTUNE, 0, 0, SW_NRF, XK_init, XK_callback },
{PROTO_XK, STR_XK, STR_SUBTYPE_XK, 3, OPTION_RFTUNE, 0, 0, SW_NRF, XK_init, XK_callback },
#endif
#if defined(XK2_CCNRF_INO)
{PROTO_XK2, STR_XK2, STR_SUBTYPE_XK2, 2, OPTION_RFTUNE, 0, 0, SW_NRF, XK2_init, XK2_callback },
+2 -2
View File
@@ -19,7 +19,7 @@
#define VERSION_MAJOR 1
#define VERSION_MINOR 3
#define VERSION_REVISION 4
#define VERSION_PATCH_LEVEL 68
#define VERSION_PATCH_LEVEL 74
#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
@@ -393,7 +394,6 @@ enum XK
X450 = 0,
X420 = 1,
XK_CARS = 2,
MOFLY = 3,
};
enum XN297DUMP
{
+5 -1
View File
@@ -508,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
@@ -553,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
@@ -622,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
+92 -5
View File
@@ -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,7 +73,7 @@ static void __attribute__((unused)) XK_send_packet()
memset(packet,0x00,7);
memset(&packet[10],0x00,5);
if(sub_protocol != MOFLY)
if(protocol != PROTO_MOFLY)
{
packet[12]=0x40;
packet[13]=0x40;
@@ -123,10 +128,19 @@ static void __attribute__((unused)) XK_send_packet()
if(Channel_data[CH5] > CHANNEL_MIN_COMMAND)
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
//Aerobatic flags
if(CH5_SW) // Only used in 6G mode
{
flags = 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
for(uint8_t i=0; i<8; i++)
if((flags & (1<<i)) == 0) arm_flags |= 1<<i;
packet[11] = flags & arm_flags;
}
else
arm_flags = 0;
}
crc=packet[0];
@@ -134,10 +148,12 @@ static void __attribute__((unused)) XK_send_packet()
crc+=packet[i];
packet[15]=crc;
#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
@@ -218,34 +234,105 @@ static void __attribute__((unused)) XK_initialize_txid()
static void __attribute__((unused)) XK_RF_init()
{
XN297_Configure(XN297_CRCEN, XN297_SCRAMBLED, (sub_protocol==X450||sub_protocol==MOFLY) ? 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 XK_HUB_TELEMETRY
bool rx = false;
#endif
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
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
}
XK_send_packet();
#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=1;
XK_initialize_txid();
XK_RF_init();
hopping_frequency_no = 0;
bind_counter=XK_BIND_COUNT;
phase = XK_DATA;
arm_flags = 0;
#ifdef XK_HUB_TELEMETRY
RX_RSSI = 100; // Dummy value
telemetry_lost = 1;
#endif
}
#endif
+4 -2
View File
@@ -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
@@ -901,7 +904,6 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
X450
X420
XK_CARS
MOFLY
PROTO_XK2
XK2_X4
XK2_P10
+34 -23
View File
@@ -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
@@ -236,26 +237,32 @@ Option is used to change the servo refresh rate. A value of 0 gives 50Hz (min),
**RX_Num is used to give a number a given RX. You must use a different RX_Num per RX. A maximum of 64 AFHDS2A RXs are supported.**
### Sub_protocol PWM_IBUS - *0*
RX output will match the Flysky standard AETR.
If the RX number is between 0 and 31, only 14 channels are sent. Between 32 and 63, all 17 channels are sent.
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12|CH13|CH14|CH15|CH16|CH17
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---
A|E|T|R|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12|CH13|CH14|CH15|CH16|LQI
RX output will match the Flysky standard AETR.
### Sub_protocol PPM_IBUS - *1*
RX output will match the Flysky standard AETR.
If the RX number is between 0 and 31, only 14 channels are sent. Between 32 and 63, all 17 channels are sent.
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12|CH13|CH14|CH15|CH16|CH17
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---
A|E|T|R|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12|CH13|CH14|CH15|CH16|LQI
RX output will match the Flysky standard AETR.
### Sub_protocol PWM_SBUS - *2*
RX output will match the Flysky standard AETR.
If the RX number is between 0 and 31, only 14 channels are sent. Between 32 and 63, all 17 channels are sent.
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12|CH13|CH14|CH15|CH16|CH17
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---
A|E|T|R|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12|CH13|CH14|CH15|CH16|LQI
RX output will match the Flysky standard AETR.
### Sub_protocol Gyro_Off - *3*
RXs: FS-BS6, FS-BS4
@@ -1257,6 +1264,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
@@ -1627,19 +1647,6 @@ A|E|T|R|FLIP|LIGHT
### Sub_protocol Cars - *2*
Models: WLtoys cars 284131/284161/284010/124016/124017/144010 and Eachine EAT14
### Sub_protocol MoFly - *3*
Models: MoFly planes
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.
## XK2 - *99*
You must assign a different RX number for each receiver/plane. Otherwise the new receiver/plane ID will overwrite the previous one.
@@ -2403,23 +2410,27 @@ 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|FLIP|LIGHT|-|RTH|-|-|-|RTH_SET
A|E|T|R|MODE|STUNT|LIGHT|INVERT|RTH|-|-|-|RTH_SET
Mode -100% = Gyro off, 0% = Stabilized, 100% = Optimized
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