Merge branch 'pascallanger:master' into master

This commit is contained in:
Paul 2023-11-26 14:55:32 -08:00 committed by GitHub
commit 59ead358bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 282 additions and 64 deletions

View File

@ -39,16 +39,26 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
board: [ include:
"multi4in1:avr:multiatmega328p:bootloader=none", - board: "multi4in1:avr:multiatmega328p:bootloader=none"
"multi4in1:avr:multiatmega328p:bootloader=optiboot", name: "ATmega328p"
"multi4in1:avr:multixmega32d4", - board: "multi4in1:avr:multiatmega328p:bootloader=optiboot"
"multi4in1:STM32F1:multi5in1t18int", name: "ATmega328p (Optiboot)"
"multi4in1:STM32F1:multistm32f103cb:debug_option=none", - board: "multi4in1:avr:multixmega32d4"
"multi4in1:STM32F1:multistm32f103cb:debug_option=native", name: "OrangeRX"
"multi4in1:STM32F1:multistm32f103cb:debug_option=ftdi", - board: "multi4in1:STM32F1:multistm32f103c8:debug_option=none"
"multi4in1:STM32F1:multistm32f103c8:debug_option=none" name: "STM32F103 (64KB)"
] - board: "multi4in1:STM32F1:multistm32f103cb:debug_option=none"
name: "STM32F103 (128KB)"
- board: "multi4in1:STM32F1:multistm32f103cb:debug_option=native"
name: "STM32F103 (128KB, USB Debugging)"
- board: "multi4in1:STM32F1:multistm32f103cb:debug_option=ftdi"
name: "STM32F103 (128KB, Serial Debugging)"
- board: "multi4in1:STM32F1:multi5in1t18int"
name: "T18 5-in-1 (128KB)"
# Set the build name using the friendly board name
name: ${{ matrix.name }}
# Set the environment variables # Set the environment variables
env: env:

View File

@ -198,7 +198,7 @@
81,0,E010r5,E010r5,1,Flip,LED,CALIB,HLess,RTH,GLIDE 81,0,E010r5,E010r5,1,Flip,LED,CALIB,HLess,RTH,GLIDE
82,0,LOLI,Std,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 83,0,E129,E129,1,TakLan,EmStop,TrimA,TrimE,TrimR
83,1,E129,C186,1,TakLan,EmStop,TrimA,TrimE,TrimR,Loop 83,1,E129,C186,1,TakLan,EmStop,TrimA,TrimE,TrimR,Loop,Flip
84,0,JOYSWAY,Std,0 84,0,JOYSWAY,Std,0
85,0,E016H,Std,1,Stop,Flip,n-a,HLess,RTH 85,0,E016H,Std,1,Stop,Flip,n-a,HLess,RTH
87,0,IKEA 87,0,IKEA

View File

@ -58,15 +58,11 @@ This is the Graupner HoTT adapted version of the Model Locator script using RSSI
The OpenTX sensor "RSSI" is populated by the individual OpenTX telemetry protocol implementations and returns a value from 0..100 (percent) originating from the early FrSky implementation. It turns out that FrSky did not really provide a genuine signal strength indicator in units of dbm but a link quality indicator in 0..100%. With Graupner HoTT the link quality indicator is not a good basis for the model locator as it is very non-linear and doesn't change much with distance. Using the Graupner HoTT telemetry sensor "Rssi" which is a true signal strength indicator serves the purpose of locating a model much better as it varies much more with distance. The OpenTX sensor "RSSI" is populated by the individual OpenTX telemetry protocol implementations and returns a value from 0..100 (percent) originating from the early FrSky implementation. It turns out that FrSky did not really provide a genuine signal strength indicator in units of dbm but a link quality indicator in 0..100%. With Graupner HoTT the link quality indicator is not a good basis for the model locator as it is very non-linear and doesn't change much with distance. Using the Graupner HoTT telemetry sensor "Rssi" which is a true signal strength indicator serves the purpose of locating a model much better as it varies much more with distance.
## DSM Forward Programming ## DSM Tools for EdgeTX and OpenTx
This is a work in progress. It's available for color(+touch) and B&W screens. Collection of EdgeTx/OpenTX Tools to use with Spektrum Receivers including forward programming. Located on the radio SD card under \SCRIPTS\TOOLS, make sure to copy the DSMLIB folder!
Work on OpenTX and EdgeTX. Located on the radio SD card under \SCRIPTS\TOOLS, make sure to copy the DSMLIB folder along with DSM FwdPrg_05_Color.lua or DSM FwdPrg_05_BW.lua. Frank is maintaining these awesome tools, check out his [repository](https://github.com/frankiearzu/DSMTools). Feel free to ask questions or open issues there.
[![DSM Forward Programming](https://img.youtube.com/vi/sjIaDw5j9nE/0.jpg)](https://www.youtube.com/watch?v=sjIaDw5j9nE)
If some text appears as Unknown_xxx, please report xxx and what the exact text display should be.
## DSM PID Flight log gain parameters for Blade micros ## DSM PID Flight log gain parameters for Blade micros

View File

@ -0,0 +1,118 @@
/*
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/>.
*/
// compatible with BLUEFLY HP100
#if defined(BLUEFLY_CCNRF_INO)
#include "iface_nrf250k.h"
#define BLUEFLY_PACKET_PERIOD 6000
#define BLUEFLY_PACKET_SIZE 12
#define BLUEFLY_RF_BIND_CHANNEL 81
#define BLUEFLY_NUM_RF_CHANNELS 15
#define BLUEFLY_BIND_COUNT 800
#define BLUEFLY_TXID_SIZE 5
static void __attribute__((unused)) BLUEFLY_send_packet()
{
if(IS_BIND_IN_PROGRESS)
{
memset(packet, 0x55, BLUEFLY_PACKET_SIZE);
memcpy(packet, rx_tx_addr, BLUEFLY_TXID_SIZE);
packet[5] = hopping_frequency[0];
}
else
{
NRF250K_Hopping(hopping_frequency_no);
hopping_frequency_no++;
if(hopping_frequency_no >= BLUEFLY_NUM_RF_CHANNELS);
hopping_frequency_no = 0;
packet[8] = packet[9] = 0;
for(uint8_t i=0; i<8 ; i++)
{
uint16_t ch = convert_channel_16b_limit(CH_AETR[i], 0, 1000);
packet[ i] = ch;
ch &= 0x300;
ch >>= 2;
packet[8 + (i>3?0:1)] = (packet[8 + (i>3?0:1)] >> 2) | ch;
}
// Checksum
uint8_t l, h, t;
l = h = 0xff;
for (uint8_t i=0; i<10; ++i)
{
h ^= packet[i];
h ^= h >> 4;
t = h;
h = l;
l = t;
t = (l<<4) | (l>>4);
h ^= ((t<<2) | (t>>6)) & 0x1f;
h ^= t & 0xf0;
l ^= ((t<<1) | (t>>7)) & 0xe0;
}
packet[10] = h;
packet[11] = l;
}
NRF250K_WritePayload(packet, BLUEFLY_PACKET_SIZE);
NRF250K_SetPower(); // Set tx_power
NRF250K_SetFreqOffset(); // Set frequency offset
}
static void __attribute__((unused)) BLUEFLY_RF_init()
{
NRF250K_Init();
NRF250K_SetTXAddr((uint8_t *)"\x32\xAA\x45\x45\x78", BLUEFLY_TXID_SIZE); // BLUEFLY Bind address
NRF250K_HoppingCalib(BLUEFLY_NUM_RF_CHANNELS); // Calibrate all channels
NRF250K_RFChannel(BLUEFLY_RF_BIND_CHANNEL); // Set bind channel
}
static void __attribute__((unused)) BLUEFLY_initialize_txid()
{
uint8_t start = (rx_tx_addr[3] % 47) + 2;
for(uint8_t i=0;i<BLUEFLY_NUM_RF_CHANNELS;i++)
hopping_frequency[i] = start + i*2;
hopping_frequency_no=0;
}
uint16_t BLUEFLY_callback()
{
#ifdef MULTI_SYNC
telemetry_set_input_sync(BLUEFLY_PACKET_PERIOD);
#endif
if(bind_counter)
{
bind_counter--;
if (bind_counter == 0)
{
BIND_DONE;
NRF250K_SetTXAddr(rx_tx_addr, BLUEFLY_TXID_SIZE);
}
}
BLUEFLY_send_packet();
return BLUEFLY_PACKET_PERIOD;
}
void BLUEFLY_init(void)
{
BLUEFLY_initialize_txid();
BLUEFLY_RF_init();
bind_counter = IS_BIND_IN_PROGRESS ? BLUEFLY_BIND_COUNT : 1;
}
#endif

View File

@ -53,8 +53,9 @@ static void __attribute__((unused)) E129_build_data_packet()
packet[15] = bit_reverse(rx_tx_addr[0]); packet[15] = bit_reverse(rx_tx_addr[0]);
packet[16] = bit_reverse(rx_tx_addr[1]); packet[16] = bit_reverse(rx_tx_addr[1]);
} }
//packet[ 3] = 0x00; // E129 Mode: short press=0x20->0x00->0x20->..., long press=0x10->0x30->0x10->... => C186 throttle trim is doing the same:up=short press and down=long press packet[ 3] = GET_FLAG(CH10_SW, 0x40) // C159 loop flight 0x40, flag 0x04 is also set on this heli
packet[ 3] = GET_FLAG(CH10_SW, 0x40); // C159 loop flight 0x40, flag 0x04 is also set on this heli | GET_FLAG(CH11_SW, 0x08); // C129V2 flip
// Other flags in packet[3] => E129 Mode: short press=0x20->0x00->0x20->..., long press=0x10->0x30->0x10->... => C186 throttle trim is doing the same:up=short press and down=long press
packet[ 4] = GET_FLAG(CH5_SW, 0x20) // Take off/Land 0x20 packet[ 4] = GET_FLAG(CH5_SW, 0x20) // Take off/Land 0x20
| GET_FLAG(CH6_SW, 0x04); // Emergency stop 0x04 | GET_FLAG(CH6_SW, 0x04); // Emergency stop 0x04
//Channels and trims //Channels and trims

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}; // unneeded since this is the default table after a reset 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,9 @@ 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);
//Same as default reset but issues if not configured...
CYRF_ConfigDataCode(j6pro_data_code, 16);
CYRF_WritePreamble(0x333302); CYRF_WritePreamble(0x333302);
CYRF_GetMfgData(cyrfmfg_id); CYRF_GetMfgData(cyrfmfg_id);

View File

@ -19,7 +19,7 @@
#define LOSI_FORCE_ID #define LOSI_FORCE_ID
const uint8_t PROGMEM LOSI_bind_sop_code[] = {0x62, 0xdf, 0xc1, 0x49, 0xdf, 0xb1, 0xc0, 0x49}; //const uint8_t PROGMEM LOSI_bind_sop_code[] = {0x62, 0xdf, 0xc1, 0x49, 0xdf, 0xb1, 0xc0, 0x49};
const uint8_t LOSI_data_code[][16] = { const uint8_t LOSI_data_code[][16] = {
{ 0xD7, 0xA1, 0x54, 0xB1, 0x5E, 0x89, 0xAE, 0x86, 0xC9, 0x2C, 0x06, 0x93, 0x86, 0xB9, 0x9E, 0xD7 }, //bind { 0xD7, 0xA1, 0x54, 0xB1, 0x5E, 0x89, 0xAE, 0x86, 0xC9, 0x2C, 0x06, 0x93, 0x86, 0xB9, 0x9E, 0xD7 }, //bind
/* { 0xE1, 0xD6, 0x31, 0x26, 0x5F, 0xBD, 0x40, 0x93, 0xDC, 0x68, 0x08, 0x99, 0x97, 0xAE, 0xAF, 0x8C }, /* { 0xE1, 0xD6, 0x31, 0x26, 0x5F, 0xBD, 0x40, 0x93, 0xDC, 0x68, 0x08, 0x99, 0x97, 0xAE, 0xAF, 0x8C },
@ -94,17 +94,17 @@ static void __attribute__((unused)) LOSI_cyrf_init()
CYRF_WritePreamble(0x333304); CYRF_WritePreamble(0x333304);
//CYRF_WriteRegister(CYRF_27_CLK_OVERRIDE, 0x00); //CYRF_WriteRegister(CYRF_27_CLK_OVERRIDE, 0x00);
CYRF_WriteRegister(CYRF_10_FRAMING_CFG, 0x4A); CYRF_WriteRegister(CYRF_10_FRAMING_CFG, 0x4A);
CYRF_WriteRegister(CYRF_1F_TX_OVERRIDE, 0x04); // No CRC CYRF_WriteRegister(CYRF_1F_TX_OVERRIDE, 0x04); // No CRC
//CYRF_WriteRegister(CYRF_1E_RX_OVERRIDE, 0x14); //CYRF_WriteRegister(CYRF_1E_RX_OVERRIDE, 0x14);
//CYRF_WriteRegister(CYRF_14_EOP_CTRL, 0x02); //CYRF_WriteRegister(CYRF_14_EOP_CTRL, 0x02);
CYRF_ConfigDataCode(LOSI_data_code[0], 16); // Load bind data code
} }
uint16_t LOSI_callback() uint16_t LOSI_callback()
{ {
#ifdef MULTI_SYNC #ifdef MULTI_SYNC
telemetry_set_input_sync(19738); telemetry_set_input_sync(packet_period);
#endif #endif
LOSI_send_packet();
if(bind_counter) if(bind_counter)
{ {
bind_counter--; bind_counter--;
@ -112,17 +112,16 @@ uint16_t LOSI_callback()
{ {
BIND_DONE; BIND_DONE;
CYRF_ConfigDataCode(LOSI_data_code[1], 16); // Load normal data code CYRF_ConfigDataCode(LOSI_data_code[1], 16); // Load normal data code
packet_period = 19738;
} }
return 8763;
} }
return 19738; LOSI_send_packet();
return packet_period;
} }
void LOSI_init() void LOSI_init()
{ {
LOSI_cyrf_init(); LOSI_cyrf_init();
//CYRF_FindBestChannels(hopping_frequency, 1, 0, 0x13, 75); // 75 is unknown since dump stops at 0x27, this routine resets the CRC Seed to 0
//CYRF_ConfigRFChannel(hopping_frequency[0] | 1); // Only odd channels
#ifdef LOSI_FORCE_ID #ifdef LOSI_FORCE_ID
rx_tx_addr[0] = 0x47; rx_tx_addr[0] = 0x47;
@ -132,16 +131,11 @@ void LOSI_init()
CYRF_ConfigRFChannel(0x27); CYRF_ConfigRFChannel(0x27);
#endif #endif
if(IS_BIND_IN_PROGRESS) CYRF_FindBestChannels(hopping_frequency, 1, 0, 0x13, 75); // 75 is unknown since dump stops at 0x27, this routine resets the CRC Seed to 0
{ CYRF_ConfigRFChannel(hopping_frequency[0]); // Only odd channels integrated in CYRF code...
bind_counter = 300;
CYRF_ConfigDataCode(LOSI_data_code[0], 16); // Load bind data code bind_counter = IS_BIND_IN_PROGRESS?300:1;
} packet_period = 8763;
else
{
CYRF_ConfigDataCode(LOSI_data_code[1], 16); // Load normal data code
bind_counter = 0;
}
} }
#endif #endif

View File

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

View File

@ -106,6 +106,7 @@ 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_SCORPIO[] ="Scorpio";
const char STR_BLUEFLY[] ="BlueFly";
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";
@ -222,6 +223,9 @@ const mm_protocol_definition multi_protocols[] = {
#if defined(BAYANG_RX_NRF24L01_INO) #if defined(BAYANG_RX_NRF24L01_INO)
{PROTO_BAYANG_RX, STR_BAYANG_RX, STR_CPPM, NBR_CPPM, OPTION_NONE, 0, 0, SW_NRF, BAYANG_RX_init, BAYANG_RX_callback }, {PROTO_BAYANG_RX, STR_BAYANG_RX, STR_CPPM, NBR_CPPM, OPTION_NONE, 0, 0, SW_NRF, BAYANG_RX_init, BAYANG_RX_callback },
#endif #endif
#if defined(BLUEFLY_CCNRF_INO)
{PROTO_BLUEFLY, STR_BLUEFLY, NO_SUBTYPE, 0, OPTION_RFTUNE, 0, 0, SW_NRF, BLUEFLY_init, BLUEFLY_callback },
#endif
#if defined(BUGS_A7105_INO) #if defined(BUGS_A7105_INO)
{PROTO_BUGS, STR_BUGS, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_A7105, BUGS_init, BUGS_callback }, {PROTO_BUGS, STR_BUGS, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_A7105, BUGS_init, BUGS_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 34 #define VERSION_PATCH_LEVEL 38
#define MODE_SERIAL 0 #define MODE_SERIAL 0
@ -122,6 +122,8 @@ enum PROTOCOLS
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_SCORPIO = 94, // =>CYRF6936
PROTO_BLUEFLY = 95, // =>CC2500 & NRF24L01
PROTO_NANORF = 126, // =>NRF24L01 PROTO_NANORF = 126, // =>NRF24L01
PROTO_TEST = 127, // =>CC2500 PROTO_TEST = 127, // =>CC2500

View File

@ -340,6 +340,7 @@
#undef ZSX_NRF24L01_INO #undef ZSX_NRF24L01_INO
#endif #endif
#if ( not defined(CC2500_INSTALLED) && not defined(NRF24L01_INSTALLED) ) || defined MULTI_EU #if ( not defined(CC2500_INSTALLED) && not defined(NRF24L01_INSTALLED) ) || defined MULTI_EU
#undef BLUEFLY_CCNRF_INO
#undef GD00X_CCNRF_INO #undef GD00X_CCNRF_INO
#undef KF606_CCNRF_INO #undef KF606_CCNRF_INO
#undef MJXQ_CCNRF_INO #undef MJXQ_CCNRF_INO

View File

@ -255,6 +255,7 @@
#define ZSX_NRF24L01_INO #define ZSX_NRF24L01_INO
//The protocols below need either a CC2500 or NRF24L01 to be installed //The protocols below need either a CC2500 or NRF24L01 to be installed
#define BLUEFLY_CCNRF_INO
#define GD00X_CCNRF_INO #define GD00X_CCNRF_INO
#define KF606_CCNRF_INO #define KF606_CCNRF_INO
#define MJXQ_CCNRF_INO #define MJXQ_CCNRF_INO
@ -567,6 +568,8 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
QX100 QX100
PROTO_BAYANG_RX PROTO_BAYANG_RX
NONE NONE
PROTO_BLUEFLY
NONE
PROTO_BUGS PROTO_BUGS
NONE NONE
PROTO_BUGSMINI PROTO_BUGSMINI

View File

@ -65,6 +65,7 @@ Protocol Name|Protocol Number|Sub_Proto 0|Sub_Proto 1|Sub_Proto 2|Sub_Proto 3|Su
[Assan](Protocols_Details.md#ASSAN---24)|24|||||||||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](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|Multi|CPPM|||||||NRF24L01|XN297 [Bayang RX](Protocols_Details.md#BAYANG-RX---59)|59|Multi|CPPM|||||||NRF24L01|XN297
[BlueFly](Protocols_Details.md#BLUEFLY---95)|95|||||||||NRF24L01|
[Bugs](Protocols_Details.md#BUGS---41)|41|||||||||A7105| [Bugs](Protocols_Details.md#BUGS---41)|41|||||||||A7105|
[BugsMini](Protocols_Details.md#BUGSMINI---42)|42|BUGSMINI|BUGS3H|||||||NRF24L01|XN297 [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| [Cabell](Protocols_Details.md#Cabell---34)|34|Cabell_V3|C_TELEM|-|-|-|-|F_SAFE|UNBIND|NRF24L01|
@ -325,7 +326,9 @@ CH1|CH2|CH3|CH4
## Kyosho - *73* ## Kyosho - *73*
### Sub_protocol FHSS - *0* ### Sub_protocol FHSS - *0*
Surface protocol called FHSS introduced in 2017. Transmitters: KT-531P, KT-431PT... Surface protocol called FHSS introduced in 2017. Transmitter: KT-531P. Models: Mini-Z
Extended limits supported
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12|CH13|CH14 CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12|CH13|CH14
---|---|---|---|---|---|---|---|---|----|----|----|----|---- ---|---|---|---|---|---|---|---|---|----|----|----|----|----
@ -616,16 +619,18 @@ 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, C159, C189 Models: C186/E120, C127/E110, K127, C159, C189, C129v2
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.
CH10| CH10|CH11
---| ---|---
Loop| Loop|Flip
Loop: circular flight on the C159 (others?) Loop: circular flight on the C159 (others?)
Flip: flip/aerobatic on the C129v2 (others?)
## J6Pro - *22* ## J6Pro - *22*
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12 CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12
@ -1030,6 +1035,17 @@ If a CC2500 is installed it will be used for all the below protocols. Option in
If only a NRF24L01 is installed then these protocols might be problematic because they are 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. If only a NRF24L01 is installed then these protocols might be problematic because they are 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.
## BLUEFLY - *95*
Model: HP100
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8
---|---|---|---|---|---|---|---
A|E|T|R|CH5|CH6|CH7|CH8
TRIM: either use this channel for trim only or add a mixer with aileron to increase the roll rate.
RATE: -100% high rate, +100% low rate
## GD00X - *47* ## GD00X - *47*
Model: GD005 C-17 Transport, GD006 DA62 and ZC-Z50 Model: GD005 C-17 Transport, GD006 DA62 and ZC-Z50
@ -1398,7 +1414,7 @@ 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. 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.
### Sub_protocol X420 - *1* ### Sub_protocol X420 - *1*
Models: XK X420/X520 (TX=X4) Models: XK X420/X520 (TX=X4), WLtoys 284131/284161/284010
*** ***
# NRF24L01 RF Module # NRF24L01 RF Module
@ -1948,7 +1964,7 @@ CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11
A|E|T|R|FLIP|LIGHT|PICTURE|VIDEO|HEADLESS|MAG_CAL_X|MAG_CAL_Y A|E|T|R|FLIP|LIGHT|PICTURE|VIDEO|HEADLESS|MAG_CAL_X|MAG_CAL_Y
### Sub_protocol V2x2 - *0* ### Sub_protocol V2x2 - *0*
Models: WLToys V202/252/272, JXD 385/388, JJRC H6C, Yizhan Tarantula X6 ... Models: WLToys V202/252/272/A959/K969/K979/K989/K999, JXD 385/388, JJRC H6C, Yizhan Tarantula X6 ...
PICTURE: also automatic Missile Launcher and Hoist in one direction PICTURE: also automatic Missile Launcher and Hoist in one direction

View File

@ -86,6 +86,7 @@ buildEachRFModule() {
buildReleaseFiles(){ buildReleaseFiles(){
if [[ "$BOARD" =~ ":avr:multixmega32d4" ]]; then if [[ "$BOARD" =~ ":avr:multixmega32d4" ]]; then
build_release_orx; build_release_orx;
build_release_extras;
elif [[ "$BOARD" =~ ":avr:multiatmega328p:bootloader=none" ]]; then elif [[ "$BOARD" =~ ":avr:multiatmega328p:bootloader=none" ]]; then
build_release_avr_noboot; build_release_avr_noboot;
elif [[ "$BOARD" =~ ":avr:multiatmega328p:bootloader=optiboot" ]]; then elif [[ "$BOARD" =~ ":avr:multiatmega328p:bootloader=optiboot" ]]; then

View File

@ -0,0 +1,15 @@
#!/usr/bin/env bash
source ./buildroot/bin/buildFunctions;
exitcode=0;
printf "\e[33;1mPackaging ancilliary files for v$MULTI_VERSION\e[0m\n";
cp Multiprotocol/Multi.txt ./binaries/Multi.txt;
mkdir -p SCRIPTS/TOOLS;
cp -r Lua_scripts/* SCRIPTS/TOOLS/;
find SCRIPTS/TOOLS -type f -name "*.md" -delete
zip -q -r ./binaries/MultiLuaScripts.zip SCRIPTS/TOOLS/*;
exit $exitcode;

View File

@ -16,11 +16,4 @@ buildMulti;
exitcode=$((exitcode+$?)); exitcode=$((exitcode+$?));
mv build/Multiprotocol.ino.bin ./binaries/mm-orangerx-aetr-blue-inv-v$MULTI_VERSION.bin; mv build/Multiprotocol.ino.bin ./binaries/mm-orangerx-aetr-blue-inv-v$MULTI_VERSION.bin;
printf "\e[33;1mPackaging ancilliary files for v$MULTI_VERSION\e[0m\n";
cp Multiprotocol/Multi.txt ./binaries/Multi.txt;
mkdir -p SCRIPTS/TOOLS;
cp Lua_scripts/*.lua SCRIPTS/TOOLS/;
cp Lua_scripts/*.txt SCRIPTS/TOOLS/;
zip -q ./binaries/MultiLuaScripts.zip SCRIPTS/TOOLS/*;
exit $exitcode; exit $exitcode;

View File

@ -3,7 +3,7 @@
source ./buildroot/bin/buildFunctions; source ./buildroot/bin/buildFunctions;
exitcode=0; exitcode=0;
# CC2500-only 64Kb builds # CC2500-only 64Kb FCC builds
printf "\e[33;1mBuilding mm-stm-cc2500-64-aetr-v$MULTI_VERSION.bin\e[0m\n"; printf "\e[33;1mBuilding mm-stm-cc2500-64-aetr-v$MULTI_VERSION.bin\e[0m\n";
opt_enable $ALL_PROTOCOLS; opt_enable $ALL_PROTOCOLS;
opt_disable IKEAANSLUTA_CC2500_INO; opt_disable IKEAANSLUTA_CC2500_INO;
@ -28,4 +28,24 @@ buildMulti;
exitcode=$((exitcode+$?)); exitcode=$((exitcode+$?));
mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-64-reta-v$MULTI_VERSION.bin; mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-64-reta-v$MULTI_VERSION.bin;
# CC2500-only 64Kb LBT/EU builds
printf "\e[33;1mBuilding mm-stm-cc2500-64-aetr-lbt-v$MULTI_VERSION.bin\e[0m\n";
opt_replace RETA AETR;
opt_add MULTI_EU;
buildMulti;
exitcode=$((exitcode+$?));
mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-64-aetr-lbt-v$MULTI_VERSION.bin;
printf "\e[33;1mBuilding mm-stm-cc2500-64-taer-lbt-v$MULTI_VERSION.bin\e[0m\n";
opt_replace AETR TAER;
buildMulti;
exitcode=$((exitcode+$?));
mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-64-taer-lbt-v$MULTI_VERSION.bin;
printf "\e[33;1mBuilding mm-stm-cc2500-64-reta-lbt-v$MULTI_VERSION.bin\e[0m\n";
opt_replace TAER RETA;
buildMulti;
exitcode=$((exitcode+$?));
mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-64-reta-lbt-v$MULTI_VERSION.bin;
exit $exitcode; exit $exitcode;

View File

@ -3,11 +3,7 @@
source ./buildroot/bin/buildFunctions; source ./buildroot/bin/buildFunctions;
exitcode=0; exitcode=0;
# Builds for the DIY 5-in-1 module exceed the 120KB working capacity of the STM32F103CB # Generic 4-in-1 FCC builds
# To work around this we have to disable some protocols in the builds for this module
#DIY_5IN1_DISABLED="MOULDKG_NRF24L01_INO";
# Generic 4-in-1 builds
printf "\e[33;1mBuilding mm-stm-serial-aetr-v$MULTI_VERSION.bin\e[0m\n"; printf "\e[33;1mBuilding mm-stm-serial-aetr-v$MULTI_VERSION.bin\e[0m\n";
opt_disable ENABLE_PPM; opt_disable ENABLE_PPM;
buildMulti; buildMulti;
@ -26,10 +22,30 @@ buildMulti;
exitcode=$((exitcode+$?)); exitcode=$((exitcode+$?));
mv build/Multiprotocol.ino.bin ./binaries/mm-stm-serial-reta-v$MULTI_VERSION.bin; mv build/Multiprotocol.ino.bin ./binaries/mm-stm-serial-reta-v$MULTI_VERSION.bin;
# Generic 4-in-1 LBT/EU builds
printf "\e[33;1mBuilding mm-stm-serial-aetr-lbt-v$MULTI_VERSION.bin\e[0m\n";
opt_replace RETA AETR;
opt_add MULTI_EU;
buildMulti;
exitcode=$((exitcode+$?));
mv build/Multiprotocol.ino.bin ./binaries/mm-stm-serial-aetr-lbt-v$MULTI_VERSION.bin;
printf "\e[33;1mBuilding mm-stm-serial-taer-lbt-v$MULTI_VERSION.bin\e[0m\n";
opt_replace AETR TAER;
buildMulti;
exitcode=$((exitcode+$?));
mv build/Multiprotocol.ino.bin ./binaries/mm-stm-serial-taer-lbt-v$MULTI_VERSION.bin;
printf "\e[33;1mBuilding mm-stm-serial-reta-lbt-v$MULTI_VERSION.bin\e[0m\n";
opt_replace TAER RETA;
buildMulti;
exitcode=$((exitcode+$?));
mv build/Multiprotocol.ino.bin ./binaries/mm-stm-serial-reta-lbt-v$MULTI_VERSION.bin;
# DIY 5-in-1 builds # DIY 5-in-1 builds
printf "\e[33;1mBuilding mm-stm-5in1-aetr-v$MULTI_VERSION.bin\e[0m\n"; printf "\e[33;1mBuilding mm-stm-5in1-aetr-v$MULTI_VERSION.bin\e[0m\n";
opt_remove MULTI_EU;
opt_replace RETA AETR; opt_replace RETA AETR;
#opt_disable $DIY_5IN1_DISABLED;
opt_enable SX1276_INSTALLED; opt_enable SX1276_INSTALLED;
buildMulti; buildMulti;
exitcode=$((exitcode+$?)); exitcode=$((exitcode+$?));
@ -52,7 +68,6 @@ printf "\e[33;1mBuilding mm-tlite5in1-aetr-v$MULTI_VERSION.bin\e[0m\n";
opt_replace RETA AETR; opt_replace RETA AETR;
opt_disable INVERT_TELEMETRY; opt_disable INVERT_TELEMETRY;
opt_disable SX1276_INSTALLED; opt_disable SX1276_INSTALLED;
#opt_enable $DIY_5IN1_DISABLED;
opt_enable "MULTI_5IN1_INTERNAL JP_TLite" opt_enable "MULTI_5IN1_INTERNAL JP_TLite"
buildMulti; buildMulti;
exitcode=$((exitcode+$?)); exitcode=$((exitcode+$?));
@ -70,7 +85,7 @@ buildMulti;
exitcode=$((exitcode+$?)); exitcode=$((exitcode+$?));
mv build/Multiprotocol.ino.bin ./binaries/mm-tlite5in1-reta-v$MULTI_VERSION.bin; mv build/Multiprotocol.ino.bin ./binaries/mm-tlite5in1-reta-v$MULTI_VERSION.bin;
# CC2500-only builds # CC2500-only FCC builds
printf "\e[33;1mBuilding mm-stm-cc2500-aetr-v$MULTI_VERSION.bin\e[0m\n"; printf "\e[33;1mBuilding mm-stm-cc2500-aetr-v$MULTI_VERSION.bin\e[0m\n";
opt_replace RETA AETR; opt_replace RETA AETR;
opt_disable "MULTI_5IN1_INTERNAL JP_TLite" opt_disable "MULTI_5IN1_INTERNAL JP_TLite"
@ -94,11 +109,32 @@ buildMulti;
exitcode=$((exitcode+$?)); exitcode=$((exitcode+$?));
mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-reta-v$MULTI_VERSION.bin; mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-reta-v$MULTI_VERSION.bin;
# CC2500-only LBT/EU builds
printf "\e[33;1mBuilding mm-stm-cc2500-aetr-lbt-v$MULTI_VERSION.bin\e[0m\n";
opt_replace RETA AETR;
opt_add MULTI_EU;
buildMulti;
exitcode=$((exitcode+$?));
mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-aetr-lbt-v$MULTI_VERSION.bin;
printf "\e[33;1mBuilding mm-stm-cc2500-taer-lbt-v$MULTI_VERSION.bin\e[0m\n";
opt_replace AETR TAER;
buildMulti;
exitcode=$((exitcode+$?));
mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-taer-lbt-v$MULTI_VERSION.bin;
printf "\e[33;1mBuilding mm-stm-cc2500-reta-lbt-v$MULTI_VERSION.bin\e[0m\n";
opt_replace TAER RETA;
buildMulti;
exitcode=$((exitcode+$?));
mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-reta-lbt-v$MULTI_VERSION.bin;
# 4-in-1 PPM builds # 4-in-1 PPM builds
printf "\e[33;1mBuilding mm-stm-ppm-aetr-v$MULTI_VERSION.bin\e[0m\n"; printf "\e[33;1mBuilding mm-stm-ppm-aetr-v$MULTI_VERSION.bin\e[0m\n";
opt_enable A7105_INSTALLED; opt_enable A7105_INSTALLED;
opt_enable CYRF6936_INSTALLED; opt_enable CYRF6936_INSTALLED;
opt_enable NRF24L01_INSTALLED; opt_enable NRF24L01_INSTALLED;
opt_remove MULTI_EU;
opt_enable ENABLE_PPM; opt_enable ENABLE_PPM;
opt_disable ENABLE_SERIAL; opt_disable ENABLE_SERIAL;
opt_replace RETA AETR; opt_replace RETA AETR;

5
buildroot/bin/opt_remove Normal file
View File

@ -0,0 +1,5 @@
#!/usr/bin/env bash
SED=$(which gsed || which sed)
eval "${SED} -i '/#define \b${1}/d' Multiprotocol/_Config.h"