From 3067ea3a5cc05bb6e0b3ebd2cedfc930c9c2c08c Mon Sep 17 00:00:00 2001 From: pascallanger Date: Wed, 27 Nov 2019 12:12:13 +0100 Subject: [PATCH] New protocol: FX816 Model P38 Protocol number: 58 Sub protocol: None Channels: A & T --- Multiprotocol/FX816_nrf24l01.ino | 113 +++++++++++++++++++++++++++++++ Multiprotocol/Multi.txt | 1 + Multiprotocol/Multi_Names.ino | 7 +- Multiprotocol/Multiprotocol.h | 4 +- Multiprotocol/Multiprotocol.ino | 6 ++ Multiprotocol/Validate.h | 1 + Multiprotocol/_Config.h | 3 + Protocols_Details.md | 10 +++ 8 files changed, 143 insertions(+), 2 deletions(-) create mode 100644 Multiprotocol/FX816_nrf24l01.ino diff --git a/Multiprotocol/FX816_nrf24l01.ino b/Multiprotocol/FX816_nrf24l01.ino new file mode 100644 index 0000000..1fc4f4c --- /dev/null +++ b/Multiprotocol/FX816_nrf24l01.ino @@ -0,0 +1,113 @@ +/* + 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 . + */ +// Compatible with FEI XIONG P38 plane. + +#if defined(FX816_NRF24L01_INO) + +#include "iface_xn297l.h" + +#define FX816_INITIAL_WAIT 500 +#define FX816_PACKET_PERIOD 10000 +#define FX816_RF_BIND_CHANNEL 0x28 //40 +#define FX816_RF_NUM_CHANNELS 4 +#define FX816_PAYLOAD_SIZE 6 +#define FX816_BIND_COUNT 300 //3sec + +static void __attribute__((unused)) FX816_send_packet() +{ + packet[0] = IS_BIND_IN_PROGRESS?0x55:0xAA; + packet[1] = rx_tx_addr[0]; + packet[2] = rx_tx_addr[1]; + uint8_t val=convert_channel_8b(AILERON); + #define FX816_SWITCH 20 + if(val>127+FX816_SWITCH) + packet[3] = 1; + else if(val<127-FX816_SWITCH) + packet[3] = 2; + else + packet[3] = 0; + packet[4] = convert_channel_16b_limit(THROTTLE,0,100); + val=0; + for(uint8_t i=0;iCC2500 PROTO_AFHDS2A_RX= 56, // =>A7105 PROTO_HOTT = 57, // =>CC2500 + PROTO_FX816 = 58, // =>NRF24L01 PROTO_XN297DUMP = 63, // =>NRF24L01 }; @@ -671,6 +672,7 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p -- FRSKY_RX 55 AFHDS2A_RX 56 HOTT 57 + FX816 58 BindBit=> 0x80 1=Bind/0=No AutoBindBit=> 0x40 1=Yes /0=No RangeCheck=> 0x20 1=Yes /0=No diff --git a/Multiprotocol/Multiprotocol.ino b/Multiprotocol/Multiprotocol.ino index 2dce2f9..e9ba01c 100644 --- a/Multiprotocol/Multiprotocol.ino +++ b/Multiprotocol/Multiprotocol.ino @@ -1415,6 +1415,12 @@ static void protocol_init() remote_callback = ZSX_callback; break; #endif + #if defined(FX816_NRF24L01_INO) + case PROTO_FX816: + next_callback=initFX816(); + remote_callback = FX816_callback; + break; + #endif #if defined(XN297DUMP_NRF24L01_INO) case PROTO_XN297DUMP: next_callback=initXN297Dump(); diff --git a/Multiprotocol/Validate.h b/Multiprotocol/Validate.h index 4dae8e2..01be5fe 100644 --- a/Multiprotocol/Validate.h +++ b/Multiprotocol/Validate.h @@ -218,6 +218,7 @@ #undef MT99XX_NRF24L01_INO #undef MJXQ_NRF24L01_INO #undef SHENQI_NRF24L01_INO + #undef FX816_NRF24L01_INO #undef FY326_NRF24L01_INO #undef FQ777_NRF24L01_INO #undef ASSAN_NRF24L01_INO diff --git a/Multiprotocol/_Config.h b/Multiprotocol/_Config.h index 359cfc1..d8835f1 100644 --- a/Multiprotocol/_Config.h +++ b/Multiprotocol/_Config.h @@ -197,6 +197,7 @@ #define ESKY_NRF24L01_INO #define ESKY150_NRF24L01_INO #define FQ777_NRF24L01_INO +#define FX816_NRF24L01_INO #define FY326_NRF24L01_INO #define GD00X_NRF24L01_INO #define GW008_NRF24L01_INO @@ -564,6 +565,8 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= { EU_8 PROTO_FRSKY_RX NONE + PROTO_FX816 + NONE PROTO_FY326 FY326 FY319 diff --git a/Protocols_Details.md b/Protocols_Details.md index c859a38..5f3e405 100644 --- a/Protocols_Details.md +++ b/Protocols_Details.md @@ -91,6 +91,7 @@ CFlie|38|CFlie||||||||NRF24L01| [FrskyV](Protocols_Details.md#FRSKYV---25)|25|FrskyV||||||||CC2500| [FrskyX](Protocols_Details.md#FRSKYX---15)|15|CH_16|CH_8|EU_16|EU_8|||||CC2500| [FrskyX_RX](Protocols_Details.md#FRSKYX_RX---55)|55|FCC|EU_LBT|||||CC2500| +[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| [GW008](Protocols_Details.md#GW008---32)|32|GW008||||||||NRF24L01|XN297 @@ -834,6 +835,15 @@ A|E|T|R|FMODE|AUX6|AUX7 FMODE and AUX7 have 4 positions: -100%..-50%=>0, -50%..5%=>1, 5%..50%=>2, 50%..100%=>3 +## FX816 - *58* +Model: FEI XIONG FX816 P38 + +Only 8 TX IDs available + +CH1|CH2|CH3|CH4 +---|---|---|--- +A|-|T|- + ## FY326 - *20* ### Sub_protocol FY326 - *0*