From daa4ded39053caf7f88feb41f8a195392d99356d Mon Sep 17 00:00:00 2001 From: pascallanger Date: Sun, 4 Jun 2023 12:02:37 +0200 Subject: [PATCH] New protocol Scorpio Model Falco 300 --- Lua_scripts/MultiChan.txt | 1 + Multiprotocol/Multi.txt | 1 + Multiprotocol/Multi_Protos.ino | 4 + Multiprotocol/Multiprotocol.h | 5 +- Multiprotocol/Scorpio_cyrf6936.ino | 126 +++++++++++++++++++++++++++++ Multiprotocol/Validate.h | 1 + Multiprotocol/_Config.h | 5 +- Protocols_Details.md | 7 ++ 8 files changed, 147 insertions(+), 3 deletions(-) create mode 100644 Multiprotocol/Scorpio_cyrf6936.ino diff --git a/Lua_scripts/MultiChan.txt b/Lua_scripts/MultiChan.txt index 67af1b2..e7d563d 100644 --- a/Lua_scripts/MultiChan.txt +++ b/Lua_scripts/MultiChan.txt @@ -207,3 +207,4 @@ 91,0,Xerall,Tank,0,FlTa,TakLan,Rate,HLess,Photo,Video,TrimR,TrimE,TrimA 92,0,MT99xx2,PA18,0,MODE,FLIP,RTH 93,0,Kyosho2,KT-17,0 +94,0,Scorpio diff --git a/Multiprotocol/Multi.txt b/Multiprotocol/Multi.txt index 848677c..52854f1 100644 --- a/Multiprotocol/Multi.txt +++ b/Multiprotocol/Multi.txt @@ -90,3 +90,4 @@ 91,Xerall 92,MT99xx,PA18 93,Kyosho2,KT-17 +94,Scorpio diff --git a/Multiprotocol/Multi_Protos.ino b/Multiprotocol/Multi_Protos.ino index daa3c87..a61e781 100644 --- a/Multiprotocol/Multi_Protos.ino +++ b/Multiprotocol/Multi_Protos.ino @@ -105,6 +105,7 @@ const char STR_CONFIG[] ="Config"; const char STR_LOSI[] ="Losi"; const char STR_MOULDKG[] ="MouldKg"; const char STR_XERALL[] ="Xerall"; +const char STR_SCORPIO[] ="Scorpio"; const char STR_SUBTYPE_FLYSKY[] = "\x04""Std\0""V9x9""V6x6""V912""CX20"; const char STR_SUBTYPE_HUBSAN[] = "\x04""H107""H301""H501"; @@ -428,6 +429,9 @@ const mm_protocol_definition multi_protocols[] = { #if defined(SCANNER_CC2500_INO) {PROTO_SCANNER, STR_SCANNER, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_CC2500, SCANNER_init, SCANNER_callback }, #endif + #if defined(SCORPIO_CYRF6936_INO) + {PROTO_SCORPIO, STR_SCORPIO, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_CYRF, SCORPIO_init, SCORPIO_callback }, + #endif #if defined(SHENQI_NRF24L01_INO) {PROTO_SHENQI, STR_SHENQI, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, SHENQI_init, SHENQI_callback }, #endif diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h index 939e7b4..5b1e9ae 100644 --- a/Multiprotocol/Multiprotocol.h +++ b/Multiprotocol/Multiprotocol.h @@ -19,7 +19,7 @@ #define VERSION_MAJOR 1 #define VERSION_MINOR 3 #define VERSION_REVISION 3 -#define VERSION_PATCH_LEVEL 25 +#define VERSION_PATCH_LEVEL 27 #define MODE_SERIAL 0 @@ -121,7 +121,8 @@ enum PROTOCOLS PROTO_XERALL = 91, // =>NRF24L01 PROTO_MT99XX2 = 92, // =>NRF24L01, extension of MT99XX protocol PROTO_KYOSHO2 = 93, // =>NRF24L01 - + PROTO_SCORPIO = 94, // =>CYRF6936 + PROTO_NANORF = 126, // =>NRF24L01 PROTO_TEST = 127, // =>CC2500 }; diff --git a/Multiprotocol/Scorpio_cyrf6936.ino b/Multiprotocol/Scorpio_cyrf6936.ino new file mode 100644 index 0000000..0cc7125 --- /dev/null +++ b/Multiprotocol/Scorpio_cyrf6936.ino @@ -0,0 +1,126 @@ +/* + 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(SCORPIO_CYRF6936_INO) + +#include "iface_cyrf6936.h" + +//#define SCORPIO_FORCE_ID + +#define SCORPIO_PACKET_PERIOD 12000 +#define SCORPIO_PACKETCH_PERIOD 2580 +#define SCORPIO_BINDPAYLOAD_SIZE 8 +#define SCORPIO_PAYLOAD_SIZE 10 +#define SCORPIO_BIND_COUNT 1000 +#define SCORPIO_RF_NUM_CHANNELS 3 + +static uint16_t __attribute__((unused)) SCORPIO_send_packet() +{ + if(IS_BIND_IN_PROGRESS) + { + packet[0] = 0x88; //FIXME: What is this? + packet[1] = 0x55; //FIXME: What is this? + packet[2] = crc; //CRC_low for normal packets + packet[3] = crc >> 8; //CRC_high for normal packets + packet[4] = hopping_frequency[0]; //RF freq 0 + packet[5] = hopping_frequency[1]; //RF freq 1 + packet[6] = hopping_frequency[2]; //RF freq 2 + packet[7] = 0x80; //FIXME: What is this? + //SendPacket + CYRF_WriteDataPacketLen(packet, SCORPIO_BINDPAYLOAD_SIZE); + return SCORPIO_PACKET_PERIOD; + } + CYRF_ConfigRFChannel(hopping_frequency[hopping_frequency_no]); + CYRF_SetPower(0x28); //Update power + delayMicroseconds(100); //Max frequency settle time + packet[0] = hopping_frequency[0]; + packet[1] = hopping_frequency[1]; + packet[2] = hopping_frequency[2]; + packet[3] = convert_channel_8b(THROTTLE); + packet[4] = 0xFF - convert_channel_8b(RUDDER); + packet[5] = convert_channel_8b(ELEVATOR); + packet[6] = convert_channel_8b(AILERON); + packet[7] = 0x55; //FIXME: What is this? + packet[8] = 0x00; //FIXME: What is this? + packet[9] = 0x00; //FIXME: What is this? + CYRF_WriteDataPacketLen(packet, SCORPIO_PAYLOAD_SIZE); + hopping_frequency_no++; + if(hopping_frequency_no >= SCORPIO_RF_NUM_CHANNELS) + { + hopping_frequency_no = 0; + return SCORPIO_PACKET_PERIOD - 2*SCORPIO_PACKETCH_PERIOD; + } + return SCORPIO_PACKETCH_PERIOD; +} + +static void __attribute__((unused)) SCORPIO_RF_init() +{ + /* Initialise CYRF chip */ + CYRF_WriteRegister(CYRF_32_AUTO_CAL_TIME, 0x3C); + CYRF_WriteRegister(CYRF_35_AUTOCAL_OFFSET, 0x14); + CYRF_WriteRegister(CYRF_1B_TX_OFFSET_LSB, 0x55); + CYRF_WriteRegister(CYRF_1C_TX_OFFSET_MSB, 0x05); + CYRF_WriteRegister(CYRF_10_FRAMING_CFG, 0xE8); + CYRF_SetPower(0x28); + CYRF_SetTxRxMode(TX_EN); +} + +static void __attribute__((unused)) SCORPIO_TX_init() +{ + calc_fh_channels(3); // select 3 frequencies between 2 and 77. FIXME: Could they be choosen on the spot finding empty frequencies? + crc = (rx_tx_addr[0] ^ rx_tx_addr[1] ^ RX_num) + ((rx_tx_addr[2] ^ rx_tx_addr[3] ^ RX_num) << 8); + + #ifdef SCORPIO_FORCE_ID + crc = 0x689C; + hopping_frequency[0] = 0x26; + hopping_frequency[1] = 0x49; + hopping_frequency[2] = 0x2E; + #endif + //debugln("C0:%02X, C1:%02X, C2:%02X, CRC:%04X", hopping_frequency[0], hopping_frequency[1], hopping_frequency[2], crc); + CYRF_ConfigRFChannel(hopping_frequency[0]); // Use first RF channel for bind +} + +uint16_t SCORPIO_callback() +{ + #ifdef MULTI_SYNC + telemetry_set_input_sync(SCORPIO_PACKET_PERIOD); + #endif + if(bind_counter) + if(--bind_counter==0) + { + CYRF_ConfigCRCSeed(crc); + BIND_DONE; + } + return SCORPIO_send_packet(); +} + +void SCORPIO_init() +{ + SCORPIO_RF_init(); + SCORPIO_TX_init(); + if(IS_BIND_IN_PROGRESS) + { + bind_counter = SCORPIO_BIND_COUNT; + CYRF_ConfigCRCSeed(0x0001); + } + else + { + bind_counter = 0; + CYRF_ConfigCRCSeed(crc); + } + hopping_frequency_no = 0; +} + +#endif diff --git a/Multiprotocol/Validate.h b/Multiprotocol/Validate.h index 39bec1b..b7a2102 100644 --- a/Multiprotocol/Validate.h +++ b/Multiprotocol/Validate.h @@ -269,6 +269,7 @@ #undef LOSI_CYRF6936_INO #undef MLINK_CYRF6936_INO #undef TRAXXAS_CYRF6936_INO + #undef SCORPIO_CYRF6936_INO #undef WFLY_CYRF6936_INO #undef WK2x01_CYRF6936_INO #endif diff --git a/Multiprotocol/_Config.h b/Multiprotocol/_Config.h index 60e5d97..08490f8 100644 --- a/Multiprotocol/_Config.h +++ b/Multiprotocol/_Config.h @@ -193,6 +193,7 @@ #define J6PRO_CYRF6936_INO #define LOSI_CYRF6936_INO #define MLINK_CYRF6936_INO +#define SCORPIO_CYRF6936_INO #define TRAXXAS_CYRF6936_INO #define WFLY_CYRF6936_INO #define WK2x01_CYRF6936_INO @@ -667,6 +668,8 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= { PROTO_FRSKY_RX FRSKY_RX FRSKY_CLONE + PROTO_FUTABA + NONE PROTO_FX FX816 FX620 @@ -789,7 +792,7 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= { RLINK_DUMBORC PROTO_SCANNER NONE - PROTO_FUTABA + PROTO_SCORPIO NONE PROTO_SHENQI NONE diff --git a/Protocols_Details.md b/Protocols_Details.md index e0283ea..3ac81fa 100644 --- a/Protocols_Details.md +++ b/Protocols_Details.md @@ -651,6 +651,13 @@ CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12|CH13|CH14|CH15|CH16 ---|---|---|---|---|---|---|---|---|----|----|----|----|----|----|---- CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12|CH13|CH14|CH15|CH16 +## Scorpio - *94* +Model Scorpio Falco 300, TX:Nine Eagles 4CH-TX, RX:Nine Eagles 4CH-RX + +CH1|CH2|CH3|CH4 +---|---|---|--- +A|E|T|R + ## Traxxas - *43* Receiver 6519