Compare commits

...

13 Commits

Author SHA1 Message Date
Ben Lye
d5885d96b9 Bump action versions 2023-06-14 12:46:28 +01:00
Ben Lye
f1ede37f6d Used a fixed version of Arduino CLI 2023-06-14 12:46:10 +01:00
Ben Lye
c814cc1bd4 Switch back to non-devel boards for CI/CD (#863) 2023-06-14 13:29:34 +02:00
pascallanger
4e7c1502ff Update Protocols_Details.md 2023-06-04 13:48:04 +02:00
pascallanger
8ddee12de5 Update _Config.h 2023-06-04 12:50:39 +02:00
pascallanger
692bcc1fbb Update Scorpio_cyrf6936.ino 2023-06-04 12:38:09 +02:00
pascallanger
0bb345e3fc J6Pro save some flash space 2023-06-04 12:20:10 +02:00
pascallanger
c193d0b9dd Update Multiprotocol.ino 2023-06-04 12:12:22 +02:00
pascallanger
410ce5cc4c Fixed SX1276 protocol 2023-06-04 12:07:27 +02:00
pascallanger
cefe69a692 Fix SPORT when using FRSKYX (V1) protocol set to EU LBT 2023-06-04 12:03:43 +02:00
pascallanger
daa4ded390 New protocol Scorpio
Model Falco 300
2023-06-04 12:02:37 +02:00
pascallanger
5949fca990 Update Protocols_Details.md (#856) 2023-05-15 08:26:13 +02:00
pascallanger
ed2e2e4f32 Update Protocols_Details.md 2023-05-15 08:17:19 +02:00
12 changed files with 173 additions and 29 deletions

View File

@@ -40,14 +40,14 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
board: [ board: [
"multi4in1-devel:avr:multiatmega328p:bootloader=none", "multi4in1:avr:multiatmega328p:bootloader=none",
"multi4in1-devel:avr:multiatmega328p:bootloader=optiboot", "multi4in1:avr:multiatmega328p:bootloader=optiboot",
"multi4in1-devel:avr:multixmega32d4", "multi4in1:avr:multixmega32d4",
"multi4in1-devel:STM32F1:multi5in1t18int", "multi4in1:STM32F1:multi5in1t18int",
"multi4in1-devel:STM32F1:multistm32f103cb:debug_option=none", "multi4in1:STM32F1:multistm32f103cb:debug_option=none",
"multi4in1-devel:STM32F1:multistm32f103cb:debug_option=native", "multi4in1:STM32F1:multistm32f103cb:debug_option=native",
"multi4in1-devel:STM32F1:multistm32f103cb:debug_option=ftdi", "multi4in1:STM32F1:multistm32f103cb:debug_option=ftdi",
"multi4in1-devel:STM32F1:multistm32f103c8:debug_option=none" "multi4in1:STM32F1:multistm32f103c8:debug_option=none"
] ]
# Set the environment variables # Set the environment variables
@@ -55,10 +55,12 @@ jobs:
BOARD: ${{ matrix.board }} BOARD: ${{ matrix.board }}
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- name: Install Arduino CLI - name: Install Arduino CLI
uses: arduino/setup-arduino-cli@v1.1.1 uses: arduino/setup-arduino-cli@v1.1.2
with:
version: "0.32.2"
- name: Prepare build environment - name: Prepare build environment
run: | run: |
@@ -196,7 +198,7 @@ jobs:
- name: 'Upload Artifacts' - name: 'Upload Artifacts'
if: env.HAVE_FILES == 'true' if: env.HAVE_FILES == 'true'
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
name: multi-test-build name: multi-test-build
path: ./binaries/ path: ./binaries/

View File

@@ -207,3 +207,4 @@
91,0,Xerall,Tank,0,FlTa,TakLan,Rate,HLess,Photo,Video,TrimR,TrimE,TrimA 91,0,Xerall,Tank,0,FlTa,TakLan,Rate,HLess,Photo,Video,TrimR,TrimE,TrimA
92,0,MT99xx2,PA18,0,MODE,FLIP,RTH 92,0,MT99xx2,PA18,0,MODE,FLIP,RTH
93,0,Kyosho2,KT-17,0 93,0,Kyosho2,KT-17,0
94,0,Scorpio

View File

@@ -100,7 +100,7 @@ static void __attribute__((unused)) FrSkyX_build_packet()
FrSkyX_channels(7); // Set packet[7]=failsafe, packet[8]=0?? and packet[9..20]=channels data FrSkyX_channels(7); // Set packet[7]=failsafe, packet[8]=0?? and packet[9..20]=channels data
//Sequence and send SPort //Sequence and send SPort
FrSkyX_seq_sport(21,packet_length-2); //21=RX|TXseq, 22=bytes count, 23..packet_length-2=data FrSkyX_seq_sport(21,packet_length-(protocol==PROTO_FRSKYX && (FrSkyFormat & 2 )) ? 4 : 2); //21=RX|TXseq, 22=bytes count, 23..packet_length-2=data
//CRC //CRC
uint16_t lcrc = FrSkyX_crc(&packet[3], packet_length-4); uint16_t lcrc = FrSkyX_crc(&packet[3], packet_length-4);

View File

@@ -36,7 +36,7 @@ enum PktState {
}; };
const uint8_t PROGMEM j6pro_bind_sop_code[] = {0x62, 0xdf, 0xc1, 0x49, 0xdf, 0xb1, 0xc0, 0x49}; const uint8_t PROGMEM j6pro_bind_sop_code[] = {0x62, 0xdf, 0xc1, 0x49, 0xdf, 0xb1, 0xc0, 0x49};
const uint8_t j6pro_data_code[] = {0x02, 0xf9, 0x93, 0x97, 0x02, 0xfa, 0x5c, 0xe3, 0x01, 0x2b, 0xf1, 0xdb, 0x01, 0x32, 0xbe, 0x6f}; //const uint8_t j6pro_data_code[] = {0x02, 0xf9, 0x93, 0x97, 0x02, 0xfa, 0x5c, 0xe3, 0x01, 0x2b, 0xf1, 0xdb, 0x01, 0x32, 0xbe, 0x6f}; // unneeded since this is the default table after a reset
static void __attribute__((unused)) j6pro_build_bind_packet() static void __attribute__((unused)) j6pro_build_bind_packet()
{ {
@@ -84,7 +84,7 @@ static void __attribute__((unused)) j6pro_cyrf_init()
CYRF_WriteRegister(CYRF_10_FRAMING_CFG, 0xee); CYRF_WriteRegister(CYRF_10_FRAMING_CFG, 0xee);
CYRF_WriteRegister(CYRF_1F_TX_OVERRIDE, 0x00); CYRF_WriteRegister(CYRF_1F_TX_OVERRIDE, 0x00);
CYRF_WriteRegister(CYRF_1E_RX_OVERRIDE, 0x00); CYRF_WriteRegister(CYRF_1E_RX_OVERRIDE, 0x00);
CYRF_ConfigDataCode(j6pro_data_code, 16); //CYRF_ConfigDataCode(j6pro_data_code, 16);
CYRF_WritePreamble(0x333302); CYRF_WritePreamble(0x333302);
CYRF_GetMfgData(cyrfmfg_id); CYRF_GetMfgData(cyrfmfg_id);

View File

@@ -90,3 +90,4 @@
91,Xerall 91,Xerall
92,MT99xx,PA18 92,MT99xx,PA18
93,Kyosho2,KT-17 93,Kyosho2,KT-17
94,Scorpio

View File

@@ -105,6 +105,7 @@ const char STR_CONFIG[] ="Config";
const char STR_LOSI[] ="Losi"; const char STR_LOSI[] ="Losi";
const char STR_MOULDKG[] ="MouldKg"; const char STR_MOULDKG[] ="MouldKg";
const char STR_XERALL[] ="Xerall"; 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_FLYSKY[] = "\x04""Std\0""V9x9""V6x6""V912""CX20";
const char STR_SUBTYPE_HUBSAN[] = "\x04""H107""H301""H501"; const char STR_SUBTYPE_HUBSAN[] = "\x04""H107""H301""H501";
@@ -428,6 +429,9 @@ const mm_protocol_definition multi_protocols[] = {
#if defined(SCANNER_CC2500_INO) #if defined(SCANNER_CC2500_INO)
{PROTO_SCANNER, STR_SCANNER, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_CC2500, SCANNER_init, SCANNER_callback }, {PROTO_SCANNER, STR_SCANNER, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_CC2500, SCANNER_init, SCANNER_callback },
#endif #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) #if defined(SHENQI_NRF24L01_INO)
{PROTO_SHENQI, STR_SHENQI, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, SHENQI_init, SHENQI_callback }, {PROTO_SHENQI, STR_SHENQI, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, SHENQI_init, SHENQI_callback },
#endif #endif

View File

@@ -19,7 +19,7 @@
#define VERSION_MAJOR 1 #define VERSION_MAJOR 1
#define VERSION_MINOR 3 #define VERSION_MINOR 3
#define VERSION_REVISION 3 #define VERSION_REVISION 3
#define VERSION_PATCH_LEVEL 25 #define VERSION_PATCH_LEVEL 27
#define MODE_SERIAL 0 #define MODE_SERIAL 0
@@ -121,7 +121,8 @@ enum PROTOCOLS
PROTO_XERALL = 91, // =>NRF24L01 PROTO_XERALL = 91, // =>NRF24L01
PROTO_MT99XX2 = 92, // =>NRF24L01, extension of MT99XX protocol PROTO_MT99XX2 = 92, // =>NRF24L01, extension of MT99XX protocol
PROTO_KYOSHO2 = 93, // =>NRF24L01 PROTO_KYOSHO2 = 93, // =>NRF24L01
PROTO_SCORPIO = 94, // =>CYRF6936
PROTO_NANORF = 126, // =>NRF24L01 PROTO_NANORF = 126, // =>NRF24L01
PROTO_TEST = 127, // =>CC2500 PROTO_TEST = 127, // =>CC2500
}; };

View File

@@ -1199,9 +1199,9 @@ static void protocol_init()
modules_reset(); modules_reset();
uint8_t index=0; uint8_t index=0;
#if defined(FRSKYX_CC2500_INO) && defined(EU_MODULE) //#if defined(FRSKYX_CC2500_INO) && defined(MULTI_EU)
if( ! ( (protocol == PROTO_FRSKYX || protocol == PROTO_FRSKYX2) && sub_protocol < 2 ) ) // if( ! ( (protocol == PROTO_FRSKYX || protocol == PROTO_FRSKYX2) && sub_protocol < 2 ) )
#endif //#endif
while(multi_protocols[index].protocol != 0xFF) while(multi_protocols[index].protocol != 0xFF)
{ {
if(multi_protocols[index].protocol==protocol) if(multi_protocols[index].protocol==protocol)

View File

@@ -0,0 +1,123 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
#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(180); //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 = 1;
hopping_frequency_no = 0;
}
#endif

View File

@@ -269,6 +269,7 @@
#undef LOSI_CYRF6936_INO #undef LOSI_CYRF6936_INO
#undef MLINK_CYRF6936_INO #undef MLINK_CYRF6936_INO
#undef TRAXXAS_CYRF6936_INO #undef TRAXXAS_CYRF6936_INO
#undef SCORPIO_CYRF6936_INO
#undef WFLY_CYRF6936_INO #undef WFLY_CYRF6936_INO
#undef WK2x01_CYRF6936_INO #undef WK2x01_CYRF6936_INO
#endif #endif
@@ -358,7 +359,7 @@
#if not defined(STM32_BOARD) #if not defined(STM32_BOARD)
#undef SX1276_INSTALLED #undef SX1276_INSTALLED
#endif #endif
#ifndef SX1276_INSTALLED || defined MULTI_EU #if not defined(SX1276_INSTALLED) || defined MULTI_EU
#undef FRSKYR9_SX1276_INO #undef FRSKYR9_SX1276_INO
#endif #endif

View File

@@ -191,8 +191,9 @@
#define E01X_CYRF6936_INO #define E01X_CYRF6936_INO
#define E129_CYRF6936_INO #define E129_CYRF6936_INO
#define J6PRO_CYRF6936_INO #define J6PRO_CYRF6936_INO
#define LOSI_CYRF6936_INO //#define LOSI_CYRF6936_INO
#define MLINK_CYRF6936_INO #define MLINK_CYRF6936_INO
#define SCORPIO_CYRF6936_INO
#define TRAXXAS_CYRF6936_INO #define TRAXXAS_CYRF6936_INO
#define WFLY_CYRF6936_INO #define WFLY_CYRF6936_INO
#define WK2x01_CYRF6936_INO #define WK2x01_CYRF6936_INO
@@ -667,6 +668,8 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
PROTO_FRSKY_RX PROTO_FRSKY_RX
FRSKY_RX FRSKY_RX
FRSKY_CLONE FRSKY_CLONE
PROTO_FUTABA
NONE
PROTO_FX PROTO_FX
FX816 FX816
FX620 FX620
@@ -789,7 +792,7 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
RLINK_DUMBORC RLINK_DUMBORC
PROTO_SCANNER PROTO_SCANNER
NONE NONE
PROTO_FUTABA PROTO_SCORPIO
NONE NONE
PROTO_SHENQI PROTO_SHENQI
NONE NONE

View File

@@ -134,6 +134,7 @@ CFlie|38|CFlie||||||||NRF24L01|
[Realacc](Protocols_Details.md#Realacc---76)|76|R11||||||||NRF24L01| [Realacc](Protocols_Details.md#Realacc---76)|76|R11||||||||NRF24L01|
[Redpine](Protocols_Details.md#Redpine---50)|50|FAST|SLOW|||||||NRF24L01|XN297 [Redpine](Protocols_Details.md#Redpine---50)|50|FAST|SLOW|||||||NRF24L01|XN297
[Scanner](Protocols_Details.md#Scanner---54)|54|||||||||CC2500| [Scanner](Protocols_Details.md#Scanner---54)|54|||||||||CC2500|
[Scorpio](Protocols_Details.md#Scorpio---94)|94|||||||||CYRF6936|
[Shenqi](Protocols_Details.md#Shenqi---19)|19|Shenqi||||||||NRF24L01|LT8900 [Shenqi](Protocols_Details.md#Shenqi---19)|19|Shenqi||||||||NRF24L01|LT8900
[Skyartec](Protocols_Details.md#Skyartec---68)|68|||||||||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 [SLT](Protocols_Details.md#SLT---11)|11|SLT_V1|SLT_V2|Q100|Q200|MR100||||NRF24L01|CC2500
@@ -520,18 +521,18 @@ Here is a table detailling the different RX output ranges based on the radio set
![Image](/docs/images/DSM_RX_Output.JPG) ![Image](/docs/images/DSM_RX_Output.JPG)
### Sub_protocol DSM2_1F - *0* ### Sub_protocol DSM2_1F - *0*
DSM2, Resolution 1024, servo refresh rate can only be 22ms Air DSM2, Resolution 1024, servo refresh rate can only be 22ms
### Sub_protocol DSM2_2F - *1* ### Sub_protocol DSM2_2F - *1*
DSM2, Resolution 2048, servo refresh rate can be 22 or 11ms. 11ms won't be available on all servo outputs when more than 7 channels are used. Air DSM2, Resolution 2048, servo refresh rate can be 22 or 11ms. 11ms won't be available on all servo outputs when more than 7 channels are used.
### Sub_protocol DSMX_1F - *2* ### Sub_protocol DSMX_1F - *2*
DSMX, Resolution 2048, servo refresh rate can only be 22ms Air DSMX, Resolution 2048, servo refresh rate can only be 22ms
### Sub_protocol DSMX_2F - *3* ### Sub_protocol DSMX_2F - *3*
DSMX, Resolution 2048, servo refresh rate can be 22 or 11ms. 11ms won't be available on all servo outputs when more than 7 channels are used. Air DSMX, Resolution 2048, servo refresh rate can be 22 or 11ms. 11ms won't be available on all servo outputs when more than 7 channels are used.
### Sub_protocol AUTO - *4* ### Sub_protocol AUTO - *4*
"AUTO" is recommended to automatically select the best settings for your DSM2 and DSMX RXs. "AUTO" is recommended to automatically select the best settings for your air DSM2 and DSMX RXs.
### Sub_protocol DSMR_1F - *5* ### Sub_protocol DSMR_1F - *5*
DSMR receivers Surface DSMR receivers
**Only 22 IDs available**, use RX num to cycle through them. **Only 22 IDs available**, use RX num to cycle through them.
@@ -615,7 +616,7 @@ Calib is the same as the original radio with both sticks down and to the left in
Models: Eachine E129/E130 and Twister Ninja 250 Models: Eachine E129/E130 and Twister Ninja 250
### Sub_protocol C186 - *1* ### Sub_protocol C186 - *1*
Models: C186/E120, C127/E110, K127 Models: C186/E120, C127/E110, K127, C159
The FC of the heli seems to store the trims Trim A/E/R=CH7..9. If you use these trims, make sure to center them after powering off the heli or they will be added to the previous trims and over correct. The FC of the heli seems to store the trims Trim A/E/R=CH7..9. If you use these trims, make sure to center them after powering off the heli or they will be added to the previous trims and over correct.
@@ -651,6 +652,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 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* ## Traxxas - *43*
Receiver 6519 Receiver 6519