From d8c3013bf4799f12077d1171452df2d1484baa60 Mon Sep 17 00:00:00 2001 From: pascallanger Date: Wed, 19 Aug 2026 12:57:37 +0200 Subject: [PATCH] MoFly protocol --- Lua_scripts/MultiChan.txt | 2 +- Multiprotocol/Multi.txt | 5 +++-- Multiprotocol/Multi_Protos.ino | 8 ++++++-- Multiprotocol/Multiprotocol.h | 4 ++-- Multiprotocol/XK_ccnrf.ino | 6 +++--- Multiprotocol/_Config.h | 5 +++-- Protocols_Details.md | 27 ++++++++++++++------------- 7 files changed, 32 insertions(+), 25 deletions(-) diff --git a/Lua_scripts/MultiChan.txt b/Lua_scripts/MultiChan.txt index 9ef8e5bd..223febfe 100644 --- a/Lua_scripts/MultiChan.txt +++ b/Lua_scripts/MultiChan.txt @@ -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 diff --git a/Multiprotocol/Multi.txt b/Multiprotocol/Multi.txt index baaa680a..41f0e650 100644 --- a/Multiprotocol/Multi.txt +++ b/Multiprotocol/Multi.txt @@ -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 \ No newline at end of file +108,Ares +109,MoFly \ No newline at end of file diff --git a/Multiprotocol/Multi_Protos.ino b/Multiprotocol/Multi_Protos.ino index 198771e1..c2cf4f0c 100644 --- a/Multiprotocol/Multi_Protos.ino +++ b/Multiprotocol/Multi_Protos.ino @@ -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 }, diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h index cc87cfc6..f17e736d 100644 --- a/Multiprotocol/Multiprotocol.h +++ b/Multiprotocol/Multiprotocol.h @@ -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 69 #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 { diff --git a/Multiprotocol/XK_ccnrf.ino b/Multiprotocol/XK_ccnrf.ino index dc7fc96c..469cf2ae 100644 --- a/Multiprotocol/XK_ccnrf.ino +++ b/Multiprotocol/XK_ccnrf.ino @@ -68,7 +68,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; @@ -218,7 +218,7 @@ 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 } @@ -240,7 +240,7 @@ uint16_t XK_callback() void XK_init() { - if(sub_protocol != XK_CARS) + if(sub_protocol != XK_CARS && protocol != PROTO_MOFLY) BIND_IN_PROGRESS; // Autobind protocol XK_initialize_txid(); XK_RF_init(); diff --git a/Multiprotocol/_Config.h b/Multiprotocol/_Config.h index 70a343ce..82fb7f4c 100644 --- a/Multiprotocol/_Config.h +++ b/Multiprotocol/_Config.h @@ -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 @@ -789,6 +789,8 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= { PHOENIX PROTO_MLINK NONE + PROTO_MOFLY + NONE PROTO_MOULDKG MOULDKG_ANALOG4 MOULDKG_DIGIT4 @@ -901,7 +903,6 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= { X450 X420 XK_CARS - MOFLY PROTO_XK2 XK2_X4 XK2_P10 diff --git a/Protocols_Details.md b/Protocols_Details.md index 801c1f37..8b7477ff 100644 --- a/Protocols_Details.md +++ b/Protocols_Details.md @@ -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 @@ -1257,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 @@ -1627,19 +1641,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.