From b757283f4139f01f9775d268857fd5e084b5b21f Mon Sep 17 00:00:00 2001 From: Pascal Langer Date: Tue, 2 Mar 2021 10:00:33 +0100 Subject: [PATCH] JOYSWAY: new protocol UNTESTED --- Lua_scripts/MultiChan.txt | 3 +- Multiprotocol/A7105_SPI.ino | 23 +++++++ Multiprotocol/Joysway_a7105.ino | 112 ++++++++++++++++++++++++++++++++ Multiprotocol/Multi.txt | 3 +- Multiprotocol/Multi_Protos.ino | 4 ++ Multiprotocol/Multiprotocol.h | 3 +- Multiprotocol/Validate.h | 9 +++ Multiprotocol/_Config.h | 4 ++ Protocols_Details.md | 39 ++++++----- 9 files changed, 181 insertions(+), 19 deletions(-) create mode 100644 Multiprotocol/Joysway_a7105.ino diff --git a/Lua_scripts/MultiChan.txt b/Lua_scripts/MultiChan.txt index f368d98..7e1824d 100644 --- a/Lua_scripts/MultiChan.txt +++ b/Lua_scripts/MultiChan.txt @@ -183,5 +183,6 @@ 79,0,WFLY2,RF20x,0,CH5,CH6,CH7,CH8,CH9,CH10 80,0,E016Hv2,E016Hv2,1,TakLan,EmStop,Flip,Calib,HLess,RTH 81,0,E010r5,E010r5,1,Flip,LED,CALIB,HLess,RTH,GLIDE -82,0,LOLI,LOLI,0,CH5,CH6,CH7,CH8,1SwSePpPw,2SwSePw,3SwSe,4SwSe,5SwSeSb,6SwSe,7SwSePw,8SwSe +82,0,LOLI,Std,0,CH5,CH6,CH7,CH8,1SwSePpPw,2SwSePw,3SwSe,4SwSe,5SwSeSb,6SwSe,7SwSePw,8SwSe 83,0,E129,E129,1,TakLan,EmStop,TrimA,TrimE,TrimR +84,0,JOYSWAY,Std,0 diff --git a/Multiprotocol/A7105_SPI.ino b/Multiprotocol/A7105_SPI.ino index 2cc39ca..df41b18 100644 --- a/Multiprotocol/A7105_SPI.ino +++ b/Multiprotocol/A7105_SPI.ino @@ -210,6 +210,11 @@ void A7105_AdjustLOBaseFreq(uint8_t cmd) offset=(int16_t)FORCE_KYOSHO_TUNING; #endif break; + case PROTO_JOYSWAY: + #ifdef FORCE_JOYSWAY_TUNING + offset=(int16_t)FORCE_JOYSWAY_TUNING; + #endif + break; case PROTO_WFLY2: #ifdef FORCE_WFLY2_TUNING offset=(int16_t)FORCE_WFLY2_TUNING; @@ -341,6 +346,14 @@ const uint8_t PROGMEM WFLY2_A7105_regs[] = { 0x01, 0x0f // 30 - 31 }; #endif +#ifdef JOYSWAY_A7105_INO +const uint8_t PROGMEM JOYSWAY_A7105_regs[] = { + 0xff, 0x62, 0xff, 0x0F, 0x00, 0xff, 0xff ,0x00, 0x00, 0x05, 0x00, 0x01, 0x00, 0xF5, 0x00, 0x15, // 00 - 0f + 0x9E, 0x4B, 0x00, 0x03, 0x56, 0x2B, 0x12, 0x4A, 0x02, 0x80, 0x80, 0x00, 0x0E, 0x91, 0x03, 0x0F, // 10 - 1f + 0x16, 0x2A, 0x00, 0xff, 0xff, 0xff, 0x3A, 0x06, 0x1F, 0x47, 0x80, 0x01, 0x05, 0x45, 0x18, 0x00, // 20 - 2f + 0x01, 0x0f // 30 - 31 +}; +#endif #define ID_NORMAL 0x55201041 #define ID_PLUS 0xAA201041 @@ -349,6 +362,13 @@ void A7105_Init(void) uint8_t *A7105_Regs=0; uint8_t vco_calibration0, vco_calibration1; + #ifdef JOYSWAY_A7105_INO + if(protocol==PROTO_JOYSWAY) + { + A7105_Regs=(uint8_t*)JOYSWAY_A7105_regs; + } + else + #endif #ifdef WFLY2_A7105_INO if(protocol==PROTO_WFLY2) { @@ -482,6 +502,9 @@ void A7105_Init(void) case PROTO_KYOSHO: //sub_protocol Hype vco_calibration1=0x0C; break; + case PROTO_JOYSWAY: + vco_calibration1=0x09; + break; default: vco_calibration1=0x0A; break; diff --git a/Multiprotocol/Joysway_a7105.ino b/Multiprotocol/Joysway_a7105.ino new file mode 100644 index 0000000..00ea758 --- /dev/null +++ b/Multiprotocol/Joysway_a7105.ino @@ -0,0 +1,112 @@ +/* + This project is free software: you can redistribute it and/or modify + 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 . + */ + +#if defined(JOYSWAY_A7105_INO) + +#include "iface_a7105.h" + +//#define JOYSWAY_FORCE_ID + +static void __attribute__((unused)) JOYSWAY_send_packet() +{ + static uint8_t next_ch = 0x30; + + //RF frequency + if (packet_count == 254) + { + packet_count = 0; + A7105_WriteID(0x5475c52a); + rf_ch_num = 0x0a; + } + else if (packet_count == 2) + { + A7105_WriteID(MProtocol_id); + rf_ch_num = 0x30; + } + else + { + if (packet_count & 0x01) + rf_ch_num = 0x30; + else + rf_ch_num = next_ch; + } + if (! (packet_count & 0x01)) + { + next_ch++; + if (next_ch >= 0x45) + next_ch = 0x30; + } + + //Payload + packet[0] = packet_count == 0 ? 0xdd : 0xff; + //ID + packet[1] = rx_tx_addr[0]; + packet[2] = rx_tx_addr[1]; + packet[3] = rx_tx_addr[2]; + packet[4] = rx_tx_addr[3]; + packet[5] = 0x00; + //Channels + for (uint8_t i = 0; i < 4; i++) + packet[ 6 + (i & 0x01) + ((i & 0x02)<<1)] = convert_channel_16b_limit(i, 0x00, 0xCC); + packet[8] = 0x64; + packet[9] = 0x64; + packet[12] = 0x64; + packet[13] = 0x64; + packet[14] = packet_count == 0 ? 0x30 : 0xaa; + //Check + uint8_t value = 0; + for (uint8_t i = 0; i < 15; i++) + value += packet[i]; + packet[15] = value; + + //Send + #if 0 + debug("ch=%02X P=",rf_ch_num); + for(uint8_t i=0; i<16; i++) + debug("%02X ", packet[i]); + debugln(""); + #endif + A7105_WriteData(16, rf_ch_num); + A7105_SetPower(); + packet_count++; +} + +uint16_t JOYSWAY_callback() +{ + #ifdef MULTI_SYNC + telemetry_set_input_sync(6000); + #endif + #ifndef FORCE_JOYSWAY_TUNING + A7105_AdjustLOBaseFreq(1); + #endif + + JOYSWAY_send_packet(); + return 6000; +} + +void JOYSWAY_init() +{ + BIND_DONE; // not a bind protocol + + #ifdef JOYSWAY_FORCE_ID + MProtocol_id = 0xf82dcaa0; + set_rx_tx_addr(MProtocol_id); + #endif + + A7105_Init(); + + packet_count = 2; +} +#endif diff --git a/Multiprotocol/Multi.txt b/Multiprotocol/Multi.txt index 3e1f769..3fdf6ae 100644 --- a/Multiprotocol/Multi.txt +++ b/Multiprotocol/Multi.txt @@ -80,4 +80,5 @@ 80,E016H,E016Hv2 81,E010r5 82,LOLI -83,E129 \ No newline at end of file +83,E129 +84,JOYSWAY \ No newline at end of file diff --git a/Multiprotocol/Multi_Protos.ino b/Multiprotocol/Multi_Protos.ino index e50ebac..5479b3c 100644 --- a/Multiprotocol/Multi_Protos.ino +++ b/Multiprotocol/Multi_Protos.ino @@ -39,6 +39,7 @@ const char STR_FY326[] ="FY326"; const char STR_FUTABA[] ="Futaba"; const char STR_J6PRO[] ="J6 Pro"; const char STR_JJRC345[] ="JJRC345"; +const char STR_JOYSWAY[] ="JOYSWAY"; const char STR_FQ777[] ="FQ777"; const char STR_ASSAN[] ="Assan"; const char STR_FRSKYV[] ="FrSky V"; @@ -318,6 +319,9 @@ const mm_protocol_definition multi_protocols[] = { #if defined(JJRC345_NRF24L01_INO) {PROTO_JJRC345, STR_JJRC345, STR_SUBTYPE_JJRC345, 2, OPTION_NONE, 0, 0, SW_NRF, JJRC345_init, JJRC345_callback }, #endif + #if defined(JOYSWAY_A7105_INO) + {PROTO_JOYSWAY, STR_JOYSWAY, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_A7105, JOYSWAY_init, JOYSWAY_callback }, + #endif #if defined(KF606_CCNRF_INO) {PROTO_KF606, STR_KF606, NO_SUBTYPE, 0, OPTION_RFTUNE, 0, 0, SW_NRF, KF606_init, KF606_callback }, #endif diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h index bc65c4a..9fc54da 100644 --- a/Multiprotocol/Multiprotocol.h +++ b/Multiprotocol/Multiprotocol.h @@ -19,7 +19,7 @@ #define VERSION_MAJOR 1 #define VERSION_MINOR 3 #define VERSION_REVISION 2 -#define VERSION_PATCH_LEVEL 52 +#define VERSION_PATCH_LEVEL 54 #define MODE_SERIAL 0 @@ -111,6 +111,7 @@ enum PROTOCOLS PROTO_E010R5 = 81, // =>CYRF6936 PROTO_LOLI = 82, // =>NRF24L01 PROTO_E129 = 83, // =>CYRF6936 + PROTO_JOYSWAY = 84, // =>A7105 PROTO_NANORF = 126, // =>NRF24L01 PROTO_TEST = 127, // =>CC2500 diff --git a/Multiprotocol/Validate.h b/Multiprotocol/Validate.h index 3da74e4..f41df28 100644 --- a/Multiprotocol/Validate.h +++ b/Multiprotocol/Validate.h @@ -155,6 +155,11 @@ #error "The Hubsan forced frequency tuning value is outside of the range -300..300." #endif #endif +#ifdef FORCE_JOYSWAY_TUNING + #if ( FORCE_JOYSWAY_TUNING < -300 ) || ( FORCE_JOYSWAY_TUNING > 300 ) + #error "The JOYSWAY forced frequency tuning value is outside of the range -300..300." + #endif +#endif #ifdef FORCE_KYOSHO_TUNING #if ( FORCE_KYOSHO_TUNING < -300 ) || ( FORCE_KYOSHO_TUNING > 300 ) #error "The Kyosho forced frequency tuning value is outside of the range -300..300." @@ -179,6 +184,9 @@ #ifndef FORCE_PELIKAN_TUNING #define FORCE_PELIKAN_TUNING 0 #endif + #ifndef FORCE_JOYSWAY_TUNING + #define FORCE_JOYSWAY_TUNING 0 + #endif #ifndef FORCE_KYOSHO_TUNING #define FORCE_KYOSHO_TUNING 0 #endif @@ -239,6 +247,7 @@ #undef FLYSKY_A7105_INO #undef HEIGHT_A7105_INO #undef HUBSAN_A7105_INO + #undef JOYSWAY_A7105_INO #undef KYOSHO_A7105_INO #undef PELIKAN_A7105_INO #undef WFLY2_A7105_INO diff --git a/Multiprotocol/_Config.h b/Multiprotocol/_Config.h index eeef2fa..ecad538 100644 --- a/Multiprotocol/_Config.h +++ b/Multiprotocol/_Config.h @@ -121,6 +121,7 @@ //#define FORCE_FLYSKY_TUNING 0 //#define FORCE_HEIGHT_TUNING 0 //#define FORCE_HUBSAN_TUNING 0 +//#define FORCE_JOYSWAY_TUNING 0 //#define FORCE_KYOSHO_TUNING 0 //#define FORCE_PELIKAN_TUNING 0 //#define FORCE_WFLY2_TUNING 0 @@ -174,6 +175,7 @@ #define FLYSKY_A7105_INO #define HEIGHT_A7105_INO #define HUBSAN_A7105_INO +#define JOYSWAY_A7105_INO #define KYOSHO_A7105_INO #define PELIKAN_A7105_INO #define WFLY2_A7105_INO @@ -682,6 +684,8 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= { PROTO_JJRC345 JJRC345 SKYTMBLR + PROTO_JOYSWAY + NONE PROTO_KF606 NONE PROTO_KN diff --git a/Protocols_Details.md b/Protocols_Details.md index c696f75..2be3010 100644 --- a/Protocols_Details.md +++ b/Protocols_Details.md @@ -62,10 +62,10 @@ You've upgraded the module but the radio does not display the name of the protoc Protocol Name|Protocol Number|Sub_Proto 0|Sub_Proto 1|Sub_Proto 2|Sub_Proto 3|Sub_Proto 4|Sub_Proto 5|Sub_Proto 6|Sub_Proto 7|RF Module|Emulation ---|---|---|---|---|---|---|---|---|---|---|--- -[Assan](Protocols_Details.md#ASSAN---24)|24|ASSAN||||||||NRF24L01| +[Assan](Protocols_Details.md#ASSAN---24)|24|||||||||NRF24L01| [Bayang](Protocols_Details.md#BAYANG---14)|14|Bayang|H8S3D|X16_AH|IRDRONE|DHD_D4|QX100|||NRF24L01|XN297 -[Bayang RX](Protocols_Details.md#BAYANG-RX---59)|59|RX||||||||NRF24L01|XN297 -[Bugs](Protocols_Details.md#BUGS---41)|41|BUGS||||||||A7105| +[Bayang RX](Protocols_Details.md#BAYANG-RX---59)|59|||||||||NRF24L01|XN297 +[Bugs](Protocols_Details.md#BUGS---41)|41|||||||||A7105| [BugsMini](Protocols_Details.md#BUGSMINI---42)|42|BUGSMINI|BUGS3H|||||||NRF24L01|XN297 [Cabell](Protocols_Details.md#Cabell---34)|34|Cabell_V3|C_TELEM|-|-|-|-|F_SAFE|UNBIND|NRF24L01| CFlie|38|CFlie||||||||NRF24L01| @@ -73,24 +73,24 @@ CFlie|38|CFlie||||||||NRF24L01| [Corona](Protocols_Details.md#CORONA---37)|37|COR_V1|COR_V2|FD_V3||||||CC2500| [CX10](Protocols_Details.md#CX10---12)|12|GREEN|BLUE|DM007|-|J3015_1|J3015_2|MK33041||NRF24L01|XN297 [Devo](Protocols_Details.md#DEVO---7)|7|Devo|8CH|10CH|12CH|6CH|7CH|||CYRF6936| -[DM002](Protocols_Details.md#DM002---33)|33|DM002||||||||NRF24L01|XN297 +[DM002](Protocols_Details.md#DM002---33)|33|||||||||NRF24L01|XN297 [DSM](Protocols_Details.md#DSM---6)|6|DSM2_1F|DSM2_2F|DSMX_1F|DSMX_2F|AUTO||||CYRF6936| -[DSM_RX](Protocols_Details.md#DSM_RX---70)|70|RX||||||||CYRF6936| +[DSM_RX](Protocols_Details.md#DSM_RX---70)|70|||||||||CYRF6936| [E010R5](Protocols_Details.md#E010R5---81)|81|||||||||CYRF6936/NRF24L01|RF2500 [E016HV2](Protocols_Details.md#E016HV2---80)|80|||||||||CC2500/NRF24L01|unknown [E01X](Protocols_Details.md#E01X---45)|45|E012|E015|E016H||||||NRF24L01|XN297/HS6200 [E129](Protocols_Details.md#E129---83)|83|||||||||CYRF6936/NRF24L01|RF2500 [ESky](Protocols_Details.md#ESKY---16)|16|ESky|ET4|||||||NRF24L01| -[ESky150](Protocols_Details.md#ESKY150---35)|35|ESKY150||||||||NRF24L01| -[ESky150V2](Protocols_Details.md#ESKY150V2---69)|69|ESky150V2||||||||CC2500|NRF51822 +[ESky150](Protocols_Details.md#ESKY150---35)|35|||||||||NRF24L01| +[ESky150V2](Protocols_Details.md#ESKY150V2---69)|69|||||||||CC2500|NRF51822 [Flysky](Protocols_Details.md#FLYSKY---1)|1|Flysky|V9x9|V6x6|V912|CX20||||A7105| [Flysky AFHDS2A](Protocols_Details.md#FLYSKY-AFHDS2A---28)|28|PWM_IBUS|PPM_IBUS|PWM_SBUS|PPM_SBUS|PWM_IBUS16|PPM_IBUS16|||A7105| [Flysky AFHDS2A RX](Protocols_Details.md#FLYSKY-AFHDS2A-RX---56)|56|RX||||||||A7105| -[FQ777](Protocols_Details.md#FQ777---23)|23|FQ777||||||||NRF24L01|SSV7241 +[FQ777](Protocols_Details.md#FQ777---23)|23|||||||||NRF24L01|SSV7241 [FrskyD](Protocols_Details.md#FRSKYD---3)|3|D8|Cloned|||||||CC2500| [FrskyL](Protocols_Details.md#FRSKYL---67)|67|LR12|LR12 6CH|||||||CC2500| [FrskyR9](Protocols_Details.md#FRSKYR9---65)|65|FrskyR9|R9_915|R9_868||||||SX1276| -[FrskyV](Protocols_Details.md#FRSKYV---25)|25|FrskyV||||||||CC2500| +[FrskyV](Protocols_Details.md#FRSKYV---25)|25|||||||||CC2500| [FrskyX](Protocols_Details.md#FRSKYX---15)|15|CH_16|CH_8|EU_16|EU_8|Cloned|Cloned_8|||CC2500| [FrskyX2](Protocols_Details.md#FRSKYX2---64)|64|CH_16|CH_8|EU_16|EU_8|Cloned|Cloned_8|||CC2500| [Frsky_RX](Protocols_Details.md#FRSKY_RX---55)|55|RX|CloneTX|||||||CC2500| @@ -98,7 +98,7 @@ CFlie|38|CFlie||||||||NRF24L01| [FX816](Protocols_Details.md#FX816---58)|28|FX816|P38|||||||NRF24L01| [FY326](Protocols_Details.md#FY326---20)|20|FY326|FY319|||||||NRF24L01| [GD00X](Protocols_Details.md#GD00X---47)|47|GD_V1*|GD_V2*|||||||NRF24L01|XN297L -[GW008](Protocols_Details.md#GW008---32)|32|GW008||||||||NRF24L01|XN297 +[GW008](Protocols_Details.md#GW008---32)|32|||||||||NRF24L01|XN297 [H8_3D](Protocols_Details.md#H8_3D---36)|36|H8_3D|H20H|H20Mini|H30Mini|||||NRF24L01|XN297 [Height](Protocols_Details.md#HEIGHT---53)|53|5ch|8ch|||||||A7105| [Hisky](Protocols_Details.md#HISKY---4)|4|Hisky|HK310|||||||NRF24L01| @@ -106,16 +106,17 @@ CFlie|38|CFlie||||||||NRF24L01| [Hontai](Protocols_Details.md#HONTAI---26)|26|HONTAI|JJRCX1|X5C1|FQ777_951|||||NRF24L01|XN297 [HoTT](Protocols_Details.md#HoTT---57)|57|Sync|No_Sync|||||||CC2500| [Hubsan](Protocols_Details.md#HUBSAN---2)|2|H107|H301|H501||||||A7105| -[J6Pro](Protocols_Details.md#J6Pro---22)|22|J6Pro||||||||CYRF6936| +[J6Pro](Protocols_Details.md#J6Pro---22)|22|||||||||CYRF6936| [JJRC345](Protocols_Details.md#JJRC345---71)|71|JJRC345|SkyTmblr|||||||NRF24L01|XN297 -[KF606](Protocols_Details.md#KF606---49)|49|KF606*||||||||NRF24L01|XN297 +[JOYSWAY](Protocols_Details.md#JOYSWAY---84)|84|||||||||NRF24L01|XN297 +[KF606](Protocols_Details.md#KF606---49)|49|||||||||NRF24L01|XN297 [KN](Protocols_Details.md#KN---9)|9|WLTOYS|FEILUN|||||||NRF24L01| [Kyosho](Protocols_Details.md#Kyosho---73)|73|FHSS|Hype|||||||A7105| [LOLI](Protocols_Details.md#LOLI---82)|82|||||||||NRF24L01| [MJXq](Protocols_Details.md#MJXQ---18)|18|WLH08|X600|X800|H26D|E010*|H26WH|PHOENIX*||NRF24L01|XN297 [MLINK](Protocols_Details.md#MLINK---78)|78|||||||||CYRF6936| [MT99xx](Protocols_Details.md#MT99XX---17)|17|MT|H7|YZ|LS|FY805|A180|DRAGON||NRF24L01|XN297 -[NCC1701](Protocols_Details.md#NCC1701---44)|44|NCC1701||||||||NRF24L01| +[NCC1701](Protocols_Details.md#NCC1701---44)|44|||||||||NRF24L01| [OMP](Protocols_Details.md#OMP---77)|77|||||||||CC2500&NRF24L01|XN297L [OpenLRS](Protocols_Details.md#OpenLRS---27)|27|||||||||None| [Pelikan](Protocols_Details.md#Pelikan---60)|60|Pro|Lite|||||||A7105| @@ -129,13 +130,13 @@ CFlie|38|CFlie||||||||NRF24L01| [Redpine](Protocols_Details.md#Redpine---50)|50|FAST|SLOW|||||||NRF24L01|XN297 [Scanner](Protocols_Details.md#Scanner---54)|54|||||||||CC2500| [Shenqi](Protocols_Details.md#Shenqi---19)|19|Shenqi||||||||NRF24L01|LT8900 -[Skyartec](Protocols_Details.md#Skyartec---68)|68|Skyartec||||||||CC2500|CC2500 +[Skyartec](Protocols_Details.md#Skyartec---68)|68|||||||||CC2500|CC2500 [SLT](Protocols_Details.md#SLT---11)|11|SLT_V1|SLT_V2|Q100|Q200|MR100||||NRF24L01|CC2500 [SymaX](Protocols_Details.md#Symax---10)|10|SYMAX|SYMAX5C|||||||NRF24L01| -[Tiger](Protocols_Details.md#Tiger---61)|61|Tiger||||||||NRF24L01|XN297 +[Tiger](Protocols_Details.md#Tiger---61)|61|||||||||NRF24L01|XN297 [Traxxas](Protocols_Details.md#Traxxas---43)|43|6519 RX||||||||CYRF6936| [V2x2](Protocols_Details.md#V2X2---5)|5|V2x2|JXD506|MR101||||||NRF24L01| -[V761](Protocols_Details.md#V761---48)|48|V761||||||||NRF24L01|XN297 +[V761](Protocols_Details.md#V761---48)|48|3CH|4CH|||||||NRF24L01|XN297 [V911S](Protocols_Details.md#V911S---46)|46|V911S*|E119*|||||||NRF24L01|XN297 [WFLY](Protocols_Details.md#WFLY---40)|40|WFR0x||||||||CYRF6936| [WFLY2](Protocols_Details.md#WFLY2---79)|79|RF20x||||||||A7105| @@ -302,6 +303,12 @@ H122D: FLIP H123D: FMODES -> -100%=Sport mode 1,0%=Sport mode 2,+100%=Acro +## JOYSWAY - *84* + +CH1|CH2|CH3|CH4 +---|---|---|--- +CH1|CH2|CH3|CH4 + ## Kyosho - *73* ### Sub_protocol FHSS - *0*