From bc8d39adbfd0fa8921ca9529e3b86dfd49fb30ff Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sun, 15 Dec 2019 18:13:36 +0100 Subject: [PATCH 01/63] Update CREDITS.txt --- CREDITS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.txt b/CREDITS.txt index 298dc3f45..afbca29e1 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -1667,3 +1667,4 @@ James Snodgrass Peter Schneider Norman Schenck Boris Hemmer +Gilles Arbona From 9abcee430a6ccad267a1b5a00f50185c4a157ec4 Mon Sep 17 00:00:00 2001 From: 3djc Date: Mon, 16 Dec 2019 07:02:17 +0100 Subject: [PATCH 02/63] T16 mute improve (#7193) Introduce mute time on T16 --- radio/src/audio.h | 3 + .../common/arm/stm32/audio_dac_driver.cpp | 58 ++++++++++++++----- radio/src/targets/horus/hal.h | 3 +- 3 files changed, 48 insertions(+), 16 deletions(-) diff --git a/radio/src/audio.h b/radio/src/audio.h index ac356863a..0f4821a82 100644 --- a/radio/src/audio.h +++ b/radio/src/audio.h @@ -512,6 +512,9 @@ class AudioQueue { bool isEmpty() const { return fragmentsFifo.empty(); }; void wakeup(); bool started() const { return _started; }; +#if defined(AUDIO_UNMUTE_DELAY) + tmr10ms_t lastAudioPlayTime = 0; +#endif AudioBufferFifo buffersFifo; diff --git a/radio/src/targets/common/arm/stm32/audio_dac_driver.cpp b/radio/src/targets/common/arm/stm32/audio_dac_driver.cpp index d050382a2..a99020dda 100644 --- a/radio/src/targets/common/arm/stm32/audio_dac_driver.cpp +++ b/radio/src/targets/common/arm/stm32/audio_dac_driver.cpp @@ -88,33 +88,61 @@ void dacInit() NVIC_SetPriority(AUDIO_DMA_Stream_IRQn, 7); } +#if defined(AUDIO_MUTE_GPIO_PIN) +void audioMute() +{ +#if defined(AUDIO_UNMUTE_DELAY) + tmr10ms_t now = get_tmr10ms(); + if (!audioQueue.lastAudioPlayTime) { + // we start the mute delay now + audioQueue.lastAudioPlayTime = now; + } + else if (now - audioQueue.lastAudioPlayTime > AUDIO_MUTE_DELAY / 10) { + // delay expired, we may mute + GPIO_SetBits(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); + } +#else + // mute + GPIO_SetBits(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); +#endif +} + +void audioUnmute() +{ +#if defined(AUDIO_UNMUTE_DELAY) + // if muted + if (GPIO_ReadOutputDataBit(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN)) { + // ..un-mute + GPIO_ResetBits(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); + RTOS_WAIT_MS(AUDIO_UNMUTE_DELAY); + } + // reset the mute delay + audioQueue.lastAudioPlayTime = 0; +#else + GPIO_ResetBits(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); +#endif +} +#endif + void audioConsumeCurrentBuffer() { if (!nextBuffer) { nextBuffer = audioQueue.buffersFifo.getNextFilledBuffer(); if (nextBuffer) { #if defined(AUDIO_MUTE_GPIO_PIN) - // if muted - if (GPIO_ReadOutputDataBit(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN)) { - // ..un-mute - GPIO_ResetBits(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); -#if defined(AUDIO_UNMUTE_DELAY) - RTOS_WAIT_MS(AUDIO_UNMUTE_DELAY); + audioUnmute(); #endif - } -#endif - AUDIO_DMA_Stream->CR &= ~DMA_SxCR_EN ; // Disable DMA channel - AUDIO_DMA->HIFCR = DMA_HIFCR_CTCIF5 | DMA_HIFCR_CHTIF5 | DMA_HIFCR_CTEIF5 | DMA_HIFCR_CDMEIF5 | DMA_HIFCR_CFEIF5 ; // Write ones to clear bits + AUDIO_DMA_Stream->CR &= ~DMA_SxCR_EN; // Disable DMA channel + AUDIO_DMA->HIFCR = DMA_HIFCR_CTCIF5 | DMA_HIFCR_CHTIF5 | DMA_HIFCR_CTEIF5 | DMA_HIFCR_CDMEIF5 | DMA_HIFCR_CFEIF5; // Write ones to clear bits AUDIO_DMA_Stream->M0AR = CONVERT_PTR_UINT(nextBuffer->data); AUDIO_DMA_Stream->NDTR = nextBuffer->size; - AUDIO_DMA_Stream->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE ; // Enable DMA channel and interrupt - DAC->SR = DAC_SR_DMAUDR1 ; // Write 1 to clear flag - DAC->CR |= DAC_CR_EN1 | DAC_CR_DMAEN1 ; // Enable DAC + AUDIO_DMA_Stream->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA channel and interrupt + DAC->SR = DAC_SR_DMAUDR1; // Write 1 to clear flag + DAC->CR |= DAC_CR_EN1 | DAC_CR_DMAEN1; // Enable DAC } #if defined(AUDIO_MUTE_GPIO_PIN) else { - // mute - GPIO_SetBits(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); + audioMute(); } #endif } diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index e7afa6ddb..38f017bcb 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -547,7 +547,8 @@ #endif #if defined(RADIO_T16) - #define AUDIO_UNMUTE_DELAY 150 + #define AUDIO_UNMUTE_DELAY 120 // ms + #define AUDIO_MUTE_DELAY 500 // ms #endif // I2C Bus From b475a7064d1c5fcb67518cfbb4d0a0f72a2c95a2 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 16 Dec 2019 07:48:19 +0100 Subject: [PATCH 03/63] I don't see why <= instead of < here. Untested (#7196) --- radio/src/gui/212x64/radio_diagkeys.cpp | 2 +- radio/src/gui/480x272/radio_diagkeys.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/src/gui/212x64/radio_diagkeys.cpp b/radio/src/gui/212x64/radio_diagkeys.cpp index 7a9f42499..56b8d102c 100644 --- a/radio/src/gui/212x64/radio_diagkeys.cpp +++ b/radio/src/gui/212x64/radio_diagkeys.cpp @@ -45,7 +45,7 @@ void menuRadioDiagKeys(event_t event) displayKeyState(5 * FW + 2, y, i); } - for (uint8_t i = 0, cnt = 0; i <= NUM_SWITCHES; i++) { + for (uint8_t i = 0, cnt = 0; i < NUM_SWITCHES; i++) { if (SWITCH_EXISTS(i)) { div_t qr = div(cnt++, 6); coord_t x = 4 * FH * qr.quot; diff --git a/radio/src/gui/480x272/radio_diagkeys.cpp b/radio/src/gui/480x272/radio_diagkeys.cpp index c952775a9..9e26ebe86 100644 --- a/radio/src/gui/480x272/radio_diagkeys.cpp +++ b/radio/src/gui/480x272/radio_diagkeys.cpp @@ -61,7 +61,7 @@ bool menuRadioDiagKeys(event_t event) displayKeyState(70, y, i); } - for (uint8_t i = 0; i <= NUM_SWITCHES; i++) { + for (uint8_t i = 0; i < NUM_SWITCHES; i++) { if (SWITCH_EXISTS(i)) { coord_t y = MENU_HEADER_HEIGHT + 1 + FH * i; getvalue_t val = getValue(MIXSRC_FIRST_SWITCH + i); From 16c9a92f497819d1d5b8307a5bb6a29cba428fb9 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 16 Dec 2019 12:22:48 +0100 Subject: [PATCH 04/63] Bluetooth SD logs (#7197) Bluetooth SD logs --- radio/src/bluetooth.cpp | 32 ++++++++++++--------- radio/src/bluetooth.h | 13 +++++++-- radio/src/debug.h | 9 ++++-- radio/src/dump.cpp | 4 +-- radio/src/gui/480x272/themes/default.cpp | 9 +++--- radio/src/opentx.h | 2 +- radio/src/targets/common/arm/CMakeLists.txt | 5 ++++ radio/src/targets/horus/diskio.cpp | 18 ++++++++++++ radio/src/targets/simu/simudisk.cpp | 10 +++++++ radio/src/targets/taranis/diskio.cpp | 15 ++++++++++ radio/src/telemetry/flysky_ibus.cpp | 2 +- radio/src/telemetry/hitec.cpp | 2 +- radio/src/telemetry/multi.cpp | 2 +- radio/src/telemetry/spektrum.cpp | 2 +- 14 files changed, 94 insertions(+), 31 deletions(-) diff --git a/radio/src/bluetooth.cpp b/radio/src/bluetooth.cpp index 18c2a43ea..a977d8990 100644 --- a/radio/src/bluetooth.cpp +++ b/radio/src/bluetooth.cpp @@ -21,6 +21,10 @@ #include "opentx.h" #include "io/frsky_firmware_update.h" +#if defined(LOG_BLUETOOTH) +extern FIL g_bluetoothFile; +#endif + #if defined(PCBX9E) #define BLUETOOTH_COMMAND_NAME "TTM:REN-" #define BLUETOOTH_ANSWER_NAME "TTM:REN" @@ -44,9 +48,9 @@ Bluetooth bluetooth; void Bluetooth::write(const uint8_t * data, uint8_t length) { - TRACE_NOCRLF("BT>"); + BLUETOOTH_TRACE("BT>"); for (int i=0; i %s", str); + BLUETOOTH_TRACE("BT> %s" CRLF, str); while (*str != 0) { btTxFifo.push(*str++); } @@ -77,19 +81,19 @@ char * Bluetooth::readline(bool error_reset) if (!btRxFifo.pop(byte)) { #if defined(PCBX9E) // X9E BT module can get unresponsive - TRACE("NO RESPONSE FROM BT MODULE"); + BLUETOOTH_TRACE("NO RESPONSE FROM BT MODULE" CRLF); #endif return nullptr; } - TRACE_NOCRLF("%02X ", byte); + BLUETOOTH_TRACE("%02X ", byte); #if 0 if (error_reset && byte == 'R' && bufferIndex == 4 && memcmp(buffer, "ERRO", 4)) { #if defined(PCBX9E) // X9E enter BT reset loop if following code is implemented - TRACE("BT Error..."); + BLUETOOTH_TRACE("BT Error..." CRLF); #else - TRACE("BT Reset..."); + BLUETOOTH_TRACE("BT Reset..." CRLF); bufferIndex = 0; bluetoothDisable(); state = BLUETOOTH_STATE_OFF; @@ -104,12 +108,12 @@ char * Bluetooth::readline(bool error_reset) if (bufferIndex > 2 && buffer[bufferIndex-1] == '\r') { buffer[bufferIndex-1] = '\0'; bufferIndex = 0; - TRACE("BT< %s", buffer); + BLUETOOTH_TRACE("BT< %s" CRLF, buffer); if (error_reset && !strcmp((char *)buffer, "ERROR")) { #if defined(PCBX9E) // X9E enter BT reset loop if following code is implemented - TRACE("BT Error..."); + BLUETOOTH_TRACE("BT Error..." CRLF); #else - TRACE("BT Reset..."); + BLUETOOTH_TRACE("BT Reset..." CRLF); bluetoothDisable(); state = BLUETOOTH_STATE_OFF; wakeupTime = get_tmr10ms() + 100; /* 1s */ @@ -137,7 +141,7 @@ char * Bluetooth::readline(bool error_reset) void Bluetooth::processTrainerFrame(const uint8_t * buffer) { - TRACE(""); + BLUETOOTH_TRACE(CRLF); for (uint8_t channel=0, i=1; channel<8; channel+=2, i+=3) { // +-500 != 512, but close enough. @@ -155,7 +159,7 @@ void Bluetooth::appendTrainerByte(uint8_t data) // we check for "DisConnected", but the first byte could be altered (if received in state STATE_DATA_XOR) if (data == '\n') { if (!strncmp((char *)&buffer[bufferIndex-13], "isConnected", 11)) { - TRACE("BT< DisConnected"); + BLUETOOTH_TRACE("BT< DisConnected" CRLF); state = BLUETOOTH_STATE_DISCONNECTED; bufferIndex = 0; wakeupTime += 200; // 1s @@ -285,7 +289,7 @@ void Bluetooth::receiveTrainer() return; } - TRACE_NOCRLF("%02X ", byte); + BLUETOOTH_TRACE("%02X ", byte); processTrainerByte(byte); } diff --git a/radio/src/bluetooth.h b/radio/src/bluetooth.h index 2f4f2e1c6..de7ed7611 100644 --- a/radio/src/bluetooth.h +++ b/radio/src/bluetooth.h @@ -46,8 +46,17 @@ enum BluetoothStates { #define LEN_BLUETOOTH_ADDR 16 #define MAX_BLUETOOTH_DISTANT_ADDR 6 -#define BLUETOOTH_PACKET_SIZE 14 -#define BLUETOOTH_LINE_LENGTH 32 +#define BLUETOOTH_PACKET_SIZE 14 +#define BLUETOOTH_LINE_LENGTH 32 + +#if defined(LOG_BLUETOOTH) + #define BLUETOOTH_TRACE(str, ...) \ + f_printf(&g_bluetoothFile, str, ##__VA_ARGS__); \ + TRACE_NOCRLF(str, ##__VA_ARGS__); +#else + #define BLUETOOTH_TRACE(str, ...) \ + TRACE_NOCRLF(str, ##__VA_ARGS__); +#endif class Bluetooth { diff --git a/radio/src/debug.h b/radio/src/debug.h index 3a5303ef3..2ed2f209b 100644 --- a/radio/src/debug.h +++ b/radio/src/debug.h @@ -24,6 +24,9 @@ #include #include "rtc.h" #include "dump.h" + +#define CRLF "\r\n" + #if defined(CLI) #include "cli.h" #else @@ -56,7 +59,7 @@ uint8_t auxSerialTracesEnabled(); #endif #define TRACE_NOCRLF(...) debugPrintf(__VA_ARGS__) -#define TRACE(f_, ...) debugPrintf((f_ "\r\n"), ##__VA_ARGS__) +#define TRACE(f_, ...) debugPrintf((f_ CRLF), ##__VA_ARGS__) #define DUMP(data, size) dump(data, size) #define TRACE_DEBUG(...) debugPrintf("-D- " __VA_ARGS__) #define TRACE_DEBUG_WP(...) debugPrintf(__VA_ARGS__) @@ -67,7 +70,7 @@ uint8_t auxSerialTracesEnabled(); #define TRACE_ERROR(...) debugPrintf("-E- " __VA_ARGS__) #if defined(TRACE_LUA_INTERNALS_ENABLED) - #define TRACE_LUA_INTERNALS(f_, ...) debugPrintf(("[LUA INT] " f_ "\r\n"), ##__VA_ARGS__) + #define TRACE_LUA_INTERNALS(f_, ...) debugPrintf(("[LUA INT] " f_ CRLF), ##__VA_ARGS__) #define TRACE_LUA_INTERNALS_WITH_LINEINFO(L, f_, ...) do { \ lua_Debug ar; \ @@ -75,7 +78,7 @@ uint8_t auxSerialTracesEnabled(); lua_getinfo(L, ">Sl", &ar); \ debugPrintf("%s:%d: ", ar.short_src, ar.currentline); \ } \ - debugPrintf(("[LUA INT] " f_ "\r\n"), ##__VA_ARGS__); \ + debugPrintf(("[LUA INT] " f_ CRLF), ##__VA_ARGS__); \ } while(0) #else #define TRACE_LUA_INTERNALS(...) diff --git a/radio/src/dump.cpp b/radio/src/dump.cpp index 60152a3af..12a6b3459 100644 --- a/radio/src/dump.cpp +++ b/radio/src/dump.cpp @@ -40,14 +40,14 @@ void dumpBody(const void *data, unsigned int size) dumpPrintf("%.2X ", ((uint8_t *)data)[i]); dumpPosition++; if ((dumpPosition & (32-1)) == 0) { - dumpPrintf("\r\n"); + dumpPrintf(CRLF); } } } void dumpEnd() { - dumpPrintf("\r\n"); + dumpPrintf(CRLF); } #if defined(DEBUG) || defined(CLI) diff --git a/radio/src/gui/480x272/themes/default.cpp b/radio/src/gui/480x272/themes/default.cpp index d846fb383..2ce0999af 100644 --- a/radio/src/gui/480x272/themes/default.cpp +++ b/radio/src/gui/480x272/themes/default.cpp @@ -90,11 +90,10 @@ class DefaultTheme: public Theme void loadIcons() const { -#if defined(LOG_TELEMETRY) || !defined(WATCHDOG) - loadMenuIcon(ICON_OPENTX, "mask_opentx_testmode.png", TEXT_COLOR); -#else - loadMenuIcon(ICON_OPENTX, "mask_opentx.png"); -#endif + if (isAsteriskDisplayed()) + loadMenuIcon(ICON_OPENTX, "mask_opentx_testmode.png", TEXT_COLOR); + else + loadMenuIcon(ICON_OPENTX, "mask_opentx.png"); loadMenuIcon(ICON_RADIO, "mask_menu_radio.png"); loadMenuIcon(ICON_RADIO_SETUP, "mask_radio_setup.png"); loadMenuIcon(ICON_RADIO_SD_MANAGER, "mask_radio_sd_browser.png"); diff --git a/radio/src/opentx.h b/radio/src/opentx.h index cda5378d8..addf87c1a 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1398,7 +1398,7 @@ extern uint8_t latencyToggleSwitch; inline bool isAsteriskDisplayed() { -#if defined(ASTERISK) || !defined(WATCHDOG) || defined(LOG_TELEMETRY) || defined(DEBUG_LATENCY) +#if defined(ASTERISK) || !defined(WATCHDOG) || defined(LOG_TELEMETRY) || defined(LOG_BLUETOOTH) || defined(DEBUG_LATENCY) return true; #endif diff --git a/radio/src/targets/common/arm/CMakeLists.txt b/radio/src/targets/common/arm/CMakeLists.txt index 2fd540afd..97ca896c6 100644 --- a/radio/src/targets/common/arm/CMakeLists.txt +++ b/radio/src/targets/common/arm/CMakeLists.txt @@ -3,6 +3,7 @@ set_property(CACHE TIMERS PROPERTY STRINGS 2 3) option(CLI "Command Line Interface" OFF) option(DEBUG "Debug mode" OFF) option(LOG_TELEMETRY "Telemetry Logs on SD card" OFF) +option(LOG_BLUETOOTH "Bluetooth Logs on SD card" OFF) option(TRACE_SD_CARD "Traces SD enabled" OFF) option(TRACE_FATFS "Traces FatFS enabled" OFF) option(TRACE_AUDIO "Traces audio enabled" OFF) @@ -30,6 +31,10 @@ if(LOG_TELEMETRY) add_definitions(-DLOG_TELEMETRY) endif() +if(LOG_BLUETOOTH) + add_definitions(-DLOG_BLUETOOTH) +endif() + if(TRACE_SD_CARD) add_definitions(-DTRACE_SD_CARD) set(DEBUG ON) diff --git a/radio/src/targets/horus/diskio.cpp b/radio/src/targets/horus/diskio.cpp index b9bcda011..3b3517af5 100644 --- a/radio/src/targets/horus/diskio.cpp +++ b/radio/src/targets/horus/diskio.cpp @@ -310,10 +310,15 @@ DRESULT disk_ioctl ( // TODO everything here should not be in the driver layer ... FATFS g_FATFS_Obj __DMA; // initialized in boardInit() + #if defined(LOG_TELEMETRY) FIL g_telemetryFile = {}; #endif +#if defined(LOG_BLUETOOTH) +FIL g_bluetoothFile = {}; +#endif + #if defined(BOOT) void sdInit(void) { @@ -350,6 +355,13 @@ void sdMount() f_lseek(&g_telemetryFile, f_size(&g_telemetryFile)); // append } #endif + +#if defined(LOG_BLUETOOTH) + f_open(&g_bluetoothFile, LOGS_PATH "/bluetooth.log", FA_OPEN_ALWAYS | FA_WRITE); + if (f_size(&g_bluetoothFile) > 0) { + f_lseek(&g_bluetoothFile, f_size(&g_bluetoothFile)); // append + } +#endif } else { TRACE("f_mount() failed"); @@ -362,9 +374,15 @@ void sdDone() if (sdMounted()) { audioQueue.stopSD(); + #if defined(LOG_TELEMETRY) f_close(&g_telemetryFile); #endif + +#if defined(LOG_BLUETOOTH) + f_close(&g_bluetoothFile); +#endif + f_mount(nullptr, "", 0); // unmount SD } } diff --git a/radio/src/targets/simu/simudisk.cpp b/radio/src/targets/simu/simudisk.cpp index 5e8dfcd82..220b23226 100644 --- a/radio/src/targets/simu/simudisk.cpp +++ b/radio/src/targets/simu/simudisk.cpp @@ -214,6 +214,13 @@ void sdInit(void) f_lseek(&g_telemetryFile, f_size(&g_telemetryFile)); // append } #endif + +#if defined(LOG_BLUETOOTH) + f_open(&g_bluetoothFile, LOGS_PATH "/bluetooth.log", FA_OPEN_ALWAYS | FA_WRITE); + if (f_size(&g_bluetoothFile) > 0) { + f_lseek(&g_bluetoothFile, f_size(&g_bluetoothFile)); // append + } +#endif } else { TRACE_SIMPGMSPACE("f_mount() failed"); @@ -226,6 +233,9 @@ void sdDone() audioQueue.stopSD(); #if defined(LOG_TELEMETRY) f_close(&g_telemetryFile); +#endif +#if defined(LOG_BLUETOOTH) + f_close(&g_bluetoothFile); #endif f_mount(NULL, "", 0); // unmount SD } diff --git a/radio/src/targets/taranis/diskio.cpp b/radio/src/targets/taranis/diskio.cpp index 94f190aa0..f7828f21d 100644 --- a/radio/src/targets/taranis/diskio.cpp +++ b/radio/src/targets/taranis/diskio.cpp @@ -978,10 +978,15 @@ void sdPoll10ms() // TODO everything here should not be in the driver layer ... FATFS g_FATFS_Obj; + #if defined(LOG_TELEMETRY) FIL g_telemetryFile = {}; #endif +#if defined(LOG_BLUETOOTH) +FIL g_bluetoothFile = {}; +#endif + #if defined(BOOT) void sdInit(void) { @@ -1016,6 +1021,13 @@ void sdMount() f_lseek(&g_telemetryFile, f_size(&g_telemetryFile)); // append } #endif + +#if defined(LOG_BLUETOOTH) + f_open(&g_bluetoothFile, LOGS_PATH "/bluetooth.log", FA_OPEN_ALWAYS | FA_WRITE); + if (f_size(&g_bluetoothFile) > 0) { + f_lseek(&g_bluetoothFile, f_size(&g_bluetoothFile)); // append + } +#endif } } @@ -1025,6 +1037,9 @@ void sdDone() audioQueue.stopSD(); #if defined(LOG_TELEMETRY) f_close(&g_telemetryFile); +#endif +#if defined(LOG_BLUETOOTH) + f_close(&g_bluetoothFile); #endif f_mount(nullptr, "", 0); // unmount SD } diff --git a/radio/src/telemetry/flysky_ibus.cpp b/radio/src/telemetry/flysky_ibus.cpp index 0869fb0da..af4d4b82c 100644 --- a/radio/src/telemetry/flysky_ibus.cpp +++ b/radio/src/telemetry/flysky_ibus.cpp @@ -282,7 +282,7 @@ void processFlySkyTelemetryData(uint8_t data, uint8_t * rxBuffer, uint8_t &rxBuf debugPrintf("[%02X %02X %02X%02X] ", rxBuffer[i*4+2], rxBuffer[i*4 + 3], rxBuffer[i*4 + 4], rxBuffer[i*4 + 5]); } - debugPrintf("\r\n"); + debugPrintf(CRLF); #endif if (data == 0xAA) processFlySkyPacket(rxBuffer + 1); else if (data == 0xAC) processFlySkyPacketAC(rxBuffer + 1); diff --git a/radio/src/telemetry/hitec.cpp b/radio/src/telemetry/hitec.cpp index 3d4770b81..febf32900 100644 --- a/radio/src/telemetry/hitec.cpp +++ b/radio/src/telemetry/hitec.cpp @@ -401,7 +401,7 @@ void processHitecTelemetryData(uint8_t data, uint8_t * rxBuffer, uint8_t &rxBuff for (int i=0; i<5; i++) { debugPrintf("%02X ", rxBuffer[4+i]); } - debugPrintf("\r\n"); + debugPrintf(CRLF); #endif processHitecPacket(rxBuffer + 1); rxBufferCount = 0; diff --git a/radio/src/telemetry/multi.cpp b/radio/src/telemetry/multi.cpp index 77ca485fe..9fba4105a 100644 --- a/radio/src/telemetry/multi.cpp +++ b/radio/src/telemetry/multi.cpp @@ -621,7 +621,7 @@ static void processMultiTelemetryByte(const uint8_t data, uint8_t module) debugPrintf("[%02X%02X %02X%02X] ", rxBuffer[i*4+2], rxBuffer[i*4 + 3], rxBuffer[i*4 + 4], rxBuffer[i*4 + 5]); } - debugPrintf("\r\n"); + debugPrintf(CRLF); #endif // Packet is complete, process it processMultiTelemetryPaket(rxBuffer, module); diff --git a/radio/src/telemetry/spektrum.cpp b/radio/src/telemetry/spektrum.cpp index 29229cf2b..a71d5118b 100644 --- a/radio/src/telemetry/spektrum.cpp +++ b/radio/src/telemetry/spektrum.cpp @@ -434,7 +434,7 @@ void processSpektrumTelemetryData(uint8_t module, uint8_t data, uint8_t* rxBuffe debugPrintf("%02X%02X %02X%02X ", rxBuffer[i], rxBuffer[i + 1], rxBuffer[i + 2], rxBuffer[i + 3]); } - debugPrintf("\r\n"); + debugPrintf(CRLF); #endif processSpektrumPacket(rxBuffer); rxBufferCount = 0; From de8ed12570fb035c315a2f4e8c84e5384e2f2008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Garc=C3=ADa=20Hierro?= Date: Tue, 17 Dec 2019 07:20:41 +0000 Subject: [PATCH 05/63] [build] Fix building with semihosting enabled (#7206) Remove -DSEMIHOSTING from the bootloader CFLAGS unconditionally. -DSEMIHOSTING is passed to the bootloader by the parent project when SEMIHOSTING=ON, however the bootloader wouldn't fit on flash with semihosting enabled. If we leave the -DSEMIHOSTING flag, we would get a compilation error on non-horus radios (since -DDEBUG is removed) and a link time error on horus (since the bootloader won't fit in its allocated flash region). --- radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt b/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt index 8e4e8160a..5bc11cc2d 100644 --- a/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt +++ b/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt @@ -134,6 +134,7 @@ endif() remove_definitions(-DDISK_CACHE) remove_definitions(-DLUA) remove_definitions(-DCLI) +remove_definitions(-DSEMIHOSTING) remove_definitions(-DUSB_SERIAL) remove_definitions(-DWATCHDOG) From 12ab16718dab39d7457468ff659688295f46760e Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 17 Dec 2019 10:23:41 +0100 Subject: [PATCH 06/63] Cosmetics --- radio/src/targets/horus/board.h | 6 +++--- radio/src/targets/horus/pwr_driver.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index 7e36df57a..c6cb49e87 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -27,9 +27,9 @@ #include "hal.h" PACK(typedef struct { - uint8_t pcbrev : 2; - uint8_t sticksPwmDisabled : 1; - uint8_t pxx2Enabled : 1; + uint8_t pcbrev:2; + uint8_t sticksPwmDisabled:1; + uint8_t pxx2Enabled:1; }) HardwareOptions; extern HardwareOptions hardwareOptions; diff --git a/radio/src/targets/horus/pwr_driver.cpp b/radio/src/targets/horus/pwr_driver.cpp index aa9e13497..2b08f2b2b 100644 --- a/radio/src/targets/horus/pwr_driver.cpp +++ b/radio/src/targets/horus/pwr_driver.cpp @@ -52,8 +52,8 @@ void pwrInit() GPIO_InitStructure.GPIO_Pin = PWR_SWITCH_GPIO_PIN; GPIO_Init(PWR_SWITCH_GPIO, &GPIO_InitStructure); - // PCBREV #if defined(PCBREV_GPIO_PIN) + // PCBREV GPIO_InitStructure.GPIO_Pin = PCBREV_GPIO_PIN; GPIO_Init(PCBREV_GPIO, &GPIO_InitStructure); hardwareOptions.pcbrev = PCBREV_VALUE(); From bf1198cf8c1fb7880dc63990b5600fc4b71e9f10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Garc=C3=ADa=20Hierro?= Date: Tue, 17 Dec 2019 10:57:40 +0000 Subject: [PATCH 07/63] Use target compiler for generating lua exported definitions (#7186) Include the lua subdirectory only after CMAKE_C_COMPILER has been set to the cross compiler. Otherwise, cmake will use the build machine compiler to preprocess dataconstants.h, which breaks on some systems and can cause problems due to different machine dependent types. --- radio/src/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 311c6dbd1..39da94311 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -146,7 +146,6 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) include_directories(${CMAKE_CURRENT_BINARY_DIR}/bitmaps/${GUI_DIR}) -add_subdirectory(lua) include(gui/CMakeLists.txt) if(RTC_BACKUP_RAM) @@ -551,3 +550,7 @@ if(NOT MSVC) PrintTargetReport("firmware") endif(NOT MSVC) +# Include the lua subdirectory after CMAKE_C_COMPILER has been +# set. Otherwise, the custom commands it includes will use the +# default CMAKE_C_COMPILER instead of the one we set manually +add_subdirectory(lua) From c7b9a149a7261457d8353a2650c973690d941d0d Mon Sep 17 00:00:00 2001 From: Alexander Novikov <31191831+mr-pokryshkin@users.noreply.github.com> Date: Tue, 17 Dec 2019 18:15:33 +0300 Subject: [PATCH 08/63] Updated: Companion Russian UI (#7211) --- companion/src/translations/companion_ru.ts | 579 +++++++++++---------- 1 file changed, 303 insertions(+), 276 deletions(-) diff --git a/companion/src/translations/companion_ru.ts b/companion/src/translations/companion_ru.ts index 20cdbc733..540e00c7d 100644 --- a/companion/src/translations/companion_ru.ts +++ b/companion/src/translations/companion_ru.ts @@ -100,7 +100,7 @@ Radio Profile - Профиль аппаратуры + Профиль передатчика @@ -158,27 +158,45 @@ Mode 4: Right stick: Elevator, Rudder - + Выбор моды передатчика: + +Mode 1: + Левый стик: Руль высоты (Elevator), Руль направления (Rudder) + Правый стик: Газ (Throttle), Элероны (Aileron) + +Mode 2: + Левый стик: Газ (Throttle), Руль направления (Rudder) + Правый стик: Руль высоты (Elevator), Элероны (Aileron) + +Mode 3: + Левый стик: Руль высоты (Elevator), Элероны (Aileron) + Правый стик: Газ (Throttle), Руль направления (Rudder) + +Mode 4: + Левый стик: Газ (Throttle), Элероны (Aileron) + Правый стик: Руль высоты (Elevator), Руль направления (Rudder) + + Mode 1 (RUD ELE THR AIL) - + Mode 2 (RUD THR ELE AIL) - + Mode 3 (AIL ELE THR RUD) - + Mode 4 (AIL THR ELE RUD) - + @@ -214,122 +232,122 @@ Mode 4: R E T A - + R E A T - + R T E A - + R T A E - + R A E T - + R A T E - + E R T A - + E R A T - + E T R A - + E T A R - + E A R T - + E A T R - + T R E A - + T R A E - + T E R A - + T E A R - + T A R E - + T A E R - + A R E T - + A R T E - + A E R T - + A E T R - + A T R E - + A T E R - + @@ -359,7 +377,7 @@ Mode 4: Radio Type - Тип передатчика + Тип передатчика @@ -920,22 +938,22 @@ Mode 4: Edit Checklist - + Редактирование контрольной карты Line nn, Col nn - + Строка nn, столбец nn &Import... - + Импорт... &Cancel - + Отмена @@ -945,22 +963,22 @@ Mode 4: Please note, the maximum width displayable is radio model limited. Also, renaming the model will break the link to this checklist file. - + Учтите, что ширина отображаемого текста ограничена. Переименование модели удалит ссылку на эту контрольную карту. File: unknown - + Файл: неизвестен Open Checklist - + Открыть контрольную карту Checklist Files (*.txt) - + Контрольные карты (*.txt) @@ -1005,7 +1023,7 @@ Mode 4: Line %1, Col %2 - + Строка %1, столбец %2 @@ -2568,47 +2586,47 @@ If blank then the input is considered to be "ON" all the time. %1%2 Both directions, to destination folder first - + %1%2 Оба направления, вначале в папку передатчика %1%2 Both directions, to source folder first - + %1%2 Оба направления, вначале в локальную папку %1 Only from source folder to destination folder - + %1 Только из локальной папки в папку передатчика %1 Only from destination folder to source folder - + %1 Только из папки передатчика в локальную папку How to handle overwriting files which already exist in the destination folder. - + Определяет, как обрабатывать файлы, которые уже существуют. Copy only if newer and different (compare contents) - + Копировать только если новее и отличается содержимое Copy only if newer (do not compare contents) - + Копировать только если новее (не сравнивать содержимое) Copy only if different (ignore file time stamps) - + Копировать только если разные (игнорировать дату файла) Always copy (force overwite existing files) - + Всегда копировать (перезаписывать существующие файлы) @@ -2618,159 +2636,164 @@ If blank then the input is considered to be "ON" all the time. Skip files larger than this size. Enter zero for unlimited. - + Пропускать, если файл больше указанного размера. Поставьте 0, если ограничение не нужно. Minimum reporting level. Events of this type and of higher importance are shown. WARNING: High log rates may make the user interface temporarily unresponsive. - + Уровень журналирования синхронизации. Будут показываться событие выбранного и более высоких уровней. +ПРЕДУПРЕЖДЕНИЕ: высокий уровень журналирования может временно заблокировать интерфейс. Skipped - + Пропущенные Created - + Новые Updated - + Обновленные Errors Only - + Только ошибки Test-run only - + Только тестирование Run as normal but do not actually copy anything. Useful for verifying results before real sync. - + Запускает обычную синхронизацию, только ничего не копирует. Полезно для проверки результатов перед реальной синхронизацией. Log Level: - + Журнал: Filters: - + Фильтры: The "Include" filter will only copy files which match the pattern(s). The "Exclude" filter will skip files matching the filter pattern(s). The Include filter is evaluated first. - + Фильтр "Включить" позволяет копировать файлы соответствующие шаблону(ам). +Фильтр "Исключить" позволяет пропускать файлы соответствующие шаблону(ам). +Вначале учитывается фильтр "Включить". One or more file pattern(s) to exclude, separated by commas. Blank means exclude none. ?, *, and [...] wildcards accepted. - + Один или несколько шаблонов, разделенных запятыми +Пустое поле означает обработку всех файлов, допускаются маски ?, * и [...]. One or more file pattern(s) to include, separated by commas. Blank means include all. ?, *, and [...] wildcards accepted. - + Один или несколько шаблонов, разделенных запятыми +Пустое поле означает обработку всех файлов, допускаются маски ?, * и [...]. Include: - + Включить: Exclude: - + Исключить: Case sensitive - + Чувствительный к регистру Follow links - + Учитывать ссылки Include hidden - + Учитывать скрытые Recursive - + Рекурсивно Skip empty - + Пропускать пустые Apply filters - + Применять фильтры Filter Options: - + Настройки фильтров: Folder Options: - + Параметры папок: Options - + Параметры Show extra options - + Показать дополнительные настройки Reset to defaults - + Использовать настройки по умолчанию Close - Закрыть + Закрыть Sync. Direction: - + Направление синхронизации: Existing Files: - + Существующие файлы: Max. File Size: - + Макс. размер файла: @@ -2785,37 +2808,37 @@ Blank means include all. ?, *, and [...] wildcards accepted. Abort - + Остановить Start - + Начать Total: <b>%1</b>; Created: <b>%2</b>; Updated: <b>%3</b>; Skipped: <b>%4</b>; Errors: <font color=%6><b>%5</b></font>; - + Итого: <b>%1</b>; Создано: <b>%2</b>; Обновлено: <b>%3</b>; Пропущено: <b>%4</b>; Ошибки: <font color=%6><b>%5</b></font>; Current: <b>%1</b> of - + Обработано: <b>%1</b> Всего. Source folder not found. - + Локальная папка (источник) не найдена. Destination folder not found. - + Папка назначения (в передатчике) не найдена. Source and destination folders are the same. - + Выберите разные папки. @@ -5320,7 +5343,7 @@ Are you sure ? Invert - Инверт + @@ -5330,22 +5353,22 @@ Are you sure ? 120 - 15 сек. {120?} + 120X - 15 сек. {120X?} + 140 - 15 сек. {140?} + 90 - 15 сек. {90?} + @@ -6300,12 +6323,12 @@ Do you wish to continue? Local Folder - + Локальная папка Radio Folder - + Папка в передатчике @@ -7767,7 +7790,7 @@ This determines how mixer values are added. Enable - + Вкл. @@ -7787,17 +7810,17 @@ This determines how mixer values are added. Yes - + Да No - Нет + Нет Y - + Да @@ -7815,7 +7838,7 @@ This determines how mixer values are added. OFF - ВЫКЛ + ВЫКЛ @@ -7825,44 +7848,44 @@ This determines how mixer values are added. Exponential - + по экспоненте Extra Fine - + очень точно Fine - + точно Medium - + средне Coarse - Грубо + грубо Unknown - + неизвестно Mode - + Режим Channels - + Каналы @@ -7879,35 +7902,35 @@ This determines how mixer values are added. Polarity - + Полярность Protocol - Протокол + Протокол Delay - + Задержка Receiver - + Приёмник Radio protocol - + Протокол Subtype - + Подтип @@ -7917,12 +7940,12 @@ This determines how mixer values are added. Sub Type - + Подтип RF Output Power - + Выходная мощность передатчика @@ -7958,7 +7981,7 @@ This determines how mixer values are added. Slow - + Замедление @@ -7968,12 +7991,12 @@ This determines how mixer values are added. Flight modes - + Полетные режимы Flight mode - + Полетный режим @@ -8013,73 +8036,73 @@ This determines how mixer values are added. Extended Limits - Расш. лимиты + Расш. лимиты Display Checklist - + Показать контрольную карту Global Functions - + Глобальные функции Manual - + вручную Auto - + автоматически Failsafe Mode - + Режим Failsafe Hold - + удержание No Pulse - + без сигнала Not set - + не задан No pulses - + Без сигнала Silent - + Тихо Beeps - + Писком Voice - + Голосом Haptic - + Вибрацией @@ -8094,54 +8117,54 @@ This determines how mixer values are added. Step - + Шаг Display - + Показывать Extended - + Расширенные Never - + никогда On Change - + при изменении Always - + всегда Source - Источник + Источник Trim idle only - + Триммировать только холостой ход Warning - Звук + Предупреждать Reversed - + Реверс @@ -8357,17 +8380,17 @@ This determines how mixer values are added. Unit - + Ед. измерения Prec - + Точность Ratio - + Коэффициент @@ -8377,7 +8400,7 @@ This determines how mixer values are added. A/Offset - + Авт. смещ. @@ -8392,12 +8415,12 @@ This determines how mixer values are added. Positive - + Положительный Log - + Журнал @@ -8422,32 +8445,32 @@ This determines how mixer values are added. Error: Unable to open or read file! - + Ошибка: невозможно открыть файл! Slave/Jack - + Ученик (джек) Master/SBUS Module - + Главный (SBUS модуль) Master/CPPM Module - + Главный (модуль CPPM) Master/SBUS in battery compartment - + Главный (SBUS в батарейном отсеке) Master/Jack - + Главный (джек) @@ -8467,7 +8490,7 @@ This determines how mixer values are added. None - + Нет @@ -8505,13 +8528,13 @@ This determines how mixer values are added. Weight - Вес + Вес Switch - Тумблер + Тумблер @@ -8532,19 +8555,19 @@ This determines how mixer values are added. Disabled in all flight modes - + Отключен во всех полетных режимах Custom - + Другой Standard - Стандартный + Стандартный @@ -8857,50 +8880,50 @@ This determines how mixer values are added. 10mW - 16CH - + 10 мВт - 16 каналов 100mW - 16CH - + 100 мВт - 16 каналов 500mW - 16CH - + 500 мВт - 16 каналов Auto <= 1W - 16CH - + Автоматически: < 1 Вт - 16 каналов 25mW - 8CH - + 25 мВт - 8 каналов 25mW - 16CH - + 25 мВт - 16 каналов 200mW - 16CH (no telemetry) - + 200 мВт - 16 каналов (без телеметрии) 500mW - 16CH (no telemetry) - + 500 мВт - 16 каналов (без телеметрии) 100mW - 16CH (no telemetry) - + 100 мВт - 16 каналов (без телеметрии) @@ -8966,19 +8989,19 @@ This determines how mixer values are added. Flight modes - + Полетные режимы Flight mode - + Режим Switch - Тумблер + Тумблер @@ -8994,120 +9017,120 @@ This determines how mixer values are added. Channel - + Канал Name - + Название General - + Основные параметры EEprom Size - + Размер Model Image - + Изображение Throttle - Газ + Газ Trims - + Триммеры Center Beep - + Сигнал в центре Switch Warnings - + Проверка тумблеров Pot Warnings - + Проверка крутилок Other - + Прочее Timers - + Таймеры Time - + Время Countdown - + Отсчет Min.call - + Ежеминутный сигнал Persist - + Постоянный Modules - + Радиомодули Trainer port - + Тренерский разъем Helicopter - + Вертолет Swash - + Автомат перекоса Type - + Тип Ring - + Тарелка Input - + Вход @@ -9142,7 +9165,7 @@ This determines how mixer values are added. Global vars - + Глобальные переменные @@ -9157,12 +9180,12 @@ This determines how mixer values are added. Outputs - + Выходы Subtrim - + Субтриммер @@ -9172,7 +9195,7 @@ This determines how mixer values are added. Curve - Кривая + Кривая @@ -9182,12 +9205,12 @@ This determines how mixer values are added. Linear - + Линейный Telemetry - + Телеметрия @@ -9197,79 +9220,79 @@ This determines how mixer values are added. Protocol - Протокол + Протокол Low - + Низкий Critical - + Критический Telemetry audio - + Звук телеметрии Altimetry - + Измерение высоты Vario source - + Вариометр Vario limits > - + Пределы вариометра > Sink max - + Сниж. макс. Sink min - + Сниж. мин. Climb min - + Набор мин. Climb max - + Набор макс. Center silent - + Тишина в 0 Top Bar - + Верхняя строка Volts source - + Напряжение Altitude source - + Высота @@ -9299,7 +9322,7 @@ This determines how mixer values are added. Current source - + Датчик тока @@ -9309,12 +9332,12 @@ This determines how mixer values are added. Parameters - + Параметры Telemetry Sensors - + Датчики телеметрии @@ -9329,44 +9352,44 @@ This determines how mixer values are added. Global Functions - + Глобальные функции Checklist - + Контрольная карта Min - Мин + Мин Max - Макс + Макс Global Variables - + Глобальные переменные Inputs - + Входы Mixers - + Микшеры Curves - Кривые + Кривые @@ -9376,7 +9399,7 @@ This determines how mixer values are added. Logical Switches - + Логические переключатели @@ -9386,7 +9409,7 @@ This determines how mixer values are added. Special Functions - + Специальные функции @@ -9397,7 +9420,7 @@ This determines how mixer values are added. Unit - + Ед. @@ -9407,7 +9430,7 @@ This determines how mixer values are added. RSSI Alarms - + Уровень RSSI @@ -9468,22 +9491,22 @@ This determines how mixer values are added. Throttle Channel: - + Газ: Yaw Channel: - + Рысканье (yaw): Pitch Channel: - + Тангаж (pitch): Roll Channel: - + Крен (roll): @@ -9631,7 +9654,7 @@ This determines how mixer values are added. Show Details - + Подробный отчет @@ -11466,7 +11489,7 @@ Profile ID: [%1]; Radio ID: [%2] OpenTX Simulator - Startup Options - + Настройки симулятора OpenTX @@ -11476,7 +11499,7 @@ Profile ID: [%1]; Radio ID: [%2] Radio Profile: - + Профиль передатчика: @@ -11487,7 +11510,7 @@ Create or edit profiles using the Companion application. Radio Type: - + Тип передатчика: @@ -11498,22 +11521,22 @@ The radio type specified in the selected profile is used by default. Data Source: - + Источник данных: Data File: - + Файл с данными: Data Folder: - + Папка с данными: SD Image Path: - + Папка с образом SD: @@ -11542,7 +11565,7 @@ New folder(s) with default radio/model will be created here if necessary. Select data folder... - + Выберите папку с данными... @@ -11568,22 +11591,22 @@ The default is configured in the chosen Radio Profile. Folder - + Папка SD Path - + Путь к SD All files (*.*) - + Все файлы (*.*) Select a data file - + Выбор файла с данными моделей @@ -11824,141 +11847,145 @@ Error: %2 [TEST RUN] - + [ТЕСТОВЫЙ ЗАПУСК] Gathering file information for %1... - + Собираем информацию о %1... No files found in %1 - + Файлы не найдены: %1 Synchronization failed, nothing found to copy. - + Ошибка синхронизации, файлы не найдены. Synchronization aborted at %1 of %2 files. - + Синхронизация остановлена. Обработано %1 из %2. Synchronization finished with %1 files in %2m %3s. - + Синхронизация завершена %1 файлов за %2 мин %3 с. Synchronizing: %1 To: %2 - + Синхронизация: %1 + в: %2 Starting synchronization: %1 -> %2 - + Начинаем синхронизацию: + %1 -> %2 + Too many errors, giving up. - + +Слишком много ошибок. Skipping large file: %1 (%2KB) - + Пропускаем большой файл: %1 (%2КБ) Skipping filtered file: %1 - + Пропускаем файл из-за фильтра: %1 Skipping linked file: %1 - + Пропускаем ссылку на %1 Aborted synchronization of: - + Синхронизация прервана: Finished synchronizing: - + Синхронизация завершена: Created: %1; Updated: %2; Skipped: %3; Errors: %4; - + Создано: %1; Обновлено: %2; Пропущено: %3; Ошибок: %4; Creating directory: %1 - + Создаем папку: %1 Could not create directory: %1 - + Невозможнос создать папку %1 Directory exists: %1 - + Папка уже существует: %1 At least one of the file modification dates is in the future, error on: %1 - + Как минимум у одного файла дата модификации в будущем, ошибка: %1 Skipping older file: %1 - + Пропускаем старый файл: %1 Could not open source file '%1': %2 - + Невозможно открыть файл '%1': %2 Could not open destination file '%1': %2 - + Невозможно открыть файл в папке передатчика: '%1': %2 Skipping identical file: %1 - + Пропускаем одинаковые файлы: %1 Replacing file: %1 - + Заменяем файл: %1 Could not delete destination file '%1': %2 - + Невозможнос удалить файл в папке передатчика e '%1': %2 Creating file: %1 - + Создаем файл: %1 Copy failed: '%1' to '%2': %3 - + Ошибка копирования: '%1' в '%2': %3 @@ -13617,7 +13644,7 @@ CTRL+колесо или PAGE UP/DOWN - для изменения с больш Select the control channels for your multirotor - + Выберите каналы управления коптером @@ -13709,7 +13736,7 @@ CTRL+колесо или PAGE UP/DOWN - для изменения с больш Select the control channels for your multirotor.<br><br>Throttle - Spektrum: CH1, Futaba: CH3<br>Yaw - Spektrum: CH4, Futaba: CH4<br>Pitch - Spektrum: CH3, Futaba: CH2<br>Roll - Spektrum: CH2, Futaba: CH1 - + Выберите каналы управления коптером.<br><br>Газ: Spektrum: Канал1, Futaba: Канал3<br>Рысканье: Spektrum: Канал4, Futaba: Канал4<br>Тангаж: Spektrum: Канал3, Futaba: Канал2<br>Крен: Spektrum: Канал2, Futaba: Канал1<br> From 8ffda8f96ffa84665483d9194ae97de8f3f838f1 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 17 Dec 2019 16:51:59 +0100 Subject: [PATCH 09/63] Too many params passed to a TRACE call --- radio/src/sdcard.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/sdcard.cpp b/radio/src/sdcard.cpp index 3a16fde9f..be89633f3 100644 --- a/radio/src/sdcard.cpp +++ b/radio/src/sdcard.cpp @@ -102,7 +102,7 @@ bool isFilePatternAvailable(const char * path, const char * file, const char * p fplen = strlen(path); if (fplen > LEN_FILE_PATH_MAX) { - TRACE_ERROR("isFilePatternAvailable(%s) = error: file path too long.\n", path, file); + TRACE_ERROR("isFilePatternAvailable(%s) = error: path too long.\n", path); return false; } From 42adcdef8737647a6bc8790514244fbced8beb00 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 18 Dec 2019 11:35:56 +0100 Subject: [PATCH 10/63] Fix compilation with MULTI=NO --- radio/src/gui/gui_common.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index 806ceb751..7e8b3f1a8 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -252,6 +252,7 @@ inline uint8_t MULTIMODULE_HASOPTIONS(uint8_t moduleIdx) #define MULTIMODULE_MODE_ROWS(moduleIdx) (g_model.moduleData[moduleIdx].multi.customProto) ? (uint8_t) 3 : MULTIMODULE_HAS_SUBTYPE(moduleIdx) ? (uint8_t)2 : (uint8_t)1 #define MULTIMODULE_SUBTYPE_ROWS(moduleIdx) isModuleMultimodule(moduleIdx) ? MULTIMODULE_RFPROTO_COLUMNS(moduleIdx) : HIDDEN_ROW, #define MULTIMODULE_OPTIONS_ROW(moduleIdx) (isModuleMultimodule(moduleIdx) && MULTIMODULE_HASOPTIONS(moduleIdx)) ? (uint8_t) 0: HIDDEN_ROW +#define MODULE_POWER_ROW(moduleIdx) (MULTIMODULE_PROTOCOL_KNOWN(moduleIdx) || isModuleR9MNonAccess(moduleIdx)) ? (isModuleR9MLiteNonPro(moduleIdx) ? (isModuleR9M_FCC_VARIANT(moduleIdx) ? READONLY_ROW : (uint8_t)0) : (uint8_t)0) : HIDDEN_ROW #else #define MULTIMODULE_STATUS_ROWS(moduleIdx) @@ -263,7 +264,7 @@ inline uint8_t MULTIMODULE_HASOPTIONS(uint8_t moduleIdx) #define FAILSAFE_ROWS(moduleIdx) isModuleFailsafeAvailable(moduleIdx) ? (g_model.moduleData[moduleIdx].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : HIDDEN_ROW #define MODULE_OPTION_ROW(moduleIdx) (isModuleR9MNonAccess(moduleIdx) || isModuleSBUS(moduleIdx) ? TITLE_ROW : MULTIMODULE_OPTIONS_ROW(moduleIdx)) -#define MODULE_POWER_ROW(moduleIdx) (MULTIMODULE_PROTOCOL_KNOWN(moduleIdx) || isModuleR9MNonAccess(moduleIdx)) ? (isModuleR9MLiteNonPro(moduleIdx) ? (isModuleR9M_FCC_VARIANT(moduleIdx) ? READONLY_ROW : (uint8_t)0) : (uint8_t)0) : HIDDEN_ROW +#define MODULE_POWER_ROW(moduleIdx) isModuleR9MNonAccess(moduleIdx) ? (isModuleR9MLiteNonPro(moduleIdx) ? (isModuleR9M_FCC_VARIANT(moduleIdx) ? READONLY_ROW : (uint8_t)0) : (uint8_t)0) : HIDDEN_ROW void editStickHardwareSettings(coord_t x, coord_t y, int idx, event_t event, LcdFlags flags); From f65c72e0cdcb5bb049dbc178e32ed941d861dd22 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 18 Dec 2019 15:13:05 +0100 Subject: [PATCH 11/63] Fix x9lite-s having only 5 switches on simu (#7215) Fixes #7207 --- companion/src/firmwares/boards.cpp | 4 +++- companion/src/firmwares/opentx/opentxeeprom.cpp | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index 9f42fa9c3..c1fbcb666 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -329,8 +329,10 @@ int Boards::getCapability(Board::Type board, Board::Capability capability) case Switches: if (IS_TARANIS_X9E(board)) return 18; - else if (IS_TARANIS_X9LITE(board)) + else if (board == Board::BOARD_TARANIS_X9LITE) return 5; + else if (board == Board::BOARD_TARANIS_X9LITES) + return 7; else if (IS_TARANIS_X7(board)) return 8; else if (IS_JUMPER_T12(board)) diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 10df6d7a3..9632be9e4 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -45,6 +45,9 @@ inline int MAX_SWITCHES(Board::Type board, int version) if (IS_TARANIS_X9D(board)) return 9; + if (IS_TARANIS_X9LITE(board)) + return 7; + if (IS_JUMPER_T12(board)) return 8; From 0f0779b56abda2a9a1cb01f642b881bb5685bf31 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 18 Dec 2019 15:27:02 +0100 Subject: [PATCH 12/63] Fix winbox compile --- radio/src/gui/gui_common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index 7e8b3f1a8..6c52f2fb3 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -260,11 +260,11 @@ inline uint8_t MULTIMODULE_HASOPTIONS(uint8_t moduleIdx) #define MULTIMODULE_SUBTYPE_ROWS(moduleIdx) #define MULTIMODULE_MODE_ROWS(moduleIdx) (uint8_t)0 #define MULTIMODULE_OPTIONS_ROW(moduleIdx) HIDDEN_ROW +#define MODULE_POWER_ROW(moduleIdx) isModuleR9MNonAccess(moduleIdx) ? (isModuleR9MLiteNonPro(moduleIdx) ? (isModuleR9M_FCC_VARIANT(moduleIdx) ? READONLY_ROW : (uint8_t)0) : (uint8_t)0) : HIDDEN_ROW #endif #define FAILSAFE_ROWS(moduleIdx) isModuleFailsafeAvailable(moduleIdx) ? (g_model.moduleData[moduleIdx].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : HIDDEN_ROW #define MODULE_OPTION_ROW(moduleIdx) (isModuleR9MNonAccess(moduleIdx) || isModuleSBUS(moduleIdx) ? TITLE_ROW : MULTIMODULE_OPTIONS_ROW(moduleIdx)) -#define MODULE_POWER_ROW(moduleIdx) isModuleR9MNonAccess(moduleIdx) ? (isModuleR9MLiteNonPro(moduleIdx) ? (isModuleR9M_FCC_VARIANT(moduleIdx) ? READONLY_ROW : (uint8_t)0) : (uint8_t)0) : HIDDEN_ROW void editStickHardwareSettings(coord_t x, coord_t y, int idx, event_t event, LcdFlags flags); From c91bf2afe975486bb9dc5b6c364b1d5d729443a1 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 18 Dec 2019 15:27:43 +0100 Subject: [PATCH 13/63] MSVC compilation fix --- radio/src/bluetooth.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/radio/src/bluetooth.h b/radio/src/bluetooth.h index de7ed7611..51d5cf468 100644 --- a/radio/src/bluetooth.h +++ b/radio/src/bluetooth.h @@ -50,12 +50,12 @@ enum BluetoothStates { #define BLUETOOTH_LINE_LENGTH 32 #if defined(LOG_BLUETOOTH) - #define BLUETOOTH_TRACE(str, ...) \ - f_printf(&g_bluetoothFile, str, ##__VA_ARGS__); \ - TRACE_NOCRLF(str, ##__VA_ARGS__); + #define BLUETOOTH_TRACE(...) \ + f_printf(&g_bluetoothFile, __VA_ARGS__); \ + TRACE_NOCRLF(__VA_ARGS__); #else - #define BLUETOOTH_TRACE(str, ...) \ - TRACE_NOCRLF(str, ##__VA_ARGS__); + #define BLUETOOTH_TRACE(...) \ + TRACE_NOCRLF(__VA_ARGS__); #endif class Bluetooth From 989d4873179060dfa91198ae4f4d7a1b3682a208 Mon Sep 17 00:00:00 2001 From: 3djc Date: Thu, 19 Dec 2019 10:27:40 +0100 Subject: [PATCH 14/63] Align naming for X12S (#7217) --- companion/src/firmwares/boards.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index c1fbcb666..acfc70004 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -457,8 +457,8 @@ QString Boards::getAnalogInputName(Board::Type board, int index) "S1", "6P", "S2", - "S3", - "S4", + "L1", + "L2", "LS", "RS", "JSx", From 833fbb763a73fa07d17444963c3822c58f4fe3dd Mon Sep 17 00:00:00 2001 From: 3djc Date: Fri, 20 Dec 2019 12:44:36 +0100 Subject: [PATCH 15/63] Fix Mac build server --- tools/build-companion-release.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/build-companion-release.sh b/tools/build-companion-release.sh index 81a20b6cd..2959df10d 100755 --- a/tools/build-companion-release.sh +++ b/tools/build-companion-release.sh @@ -40,48 +40,63 @@ cd build cmake ${COMMON_OPTIONS} -DPCB=AR9X ${SRCDIR} make -j${JOBS} libsimulator +rm CMakeCache.txt cmake ${COMMON_OPTIONS} -DPCB=SKY9X ${SRCDIR} make -j${JOBS} libsimulator +rm CMakeCache.txt cmake ${COMMON_OPTIONS} -DPCB=9XRPRO ${SRCDIR} make -j${JOBS} libsimulator +rm CMakeCache.txt cmake ${COMMON_OPTIONS} -DPCB=X9LITE ${SRCDIR} make -j${JOBS} libsimulator +rm CMakeCache.txt cmake ${COMMON_OPTIONS} -DPCB=X9LITES ${SRCDIR} make -j${JOBS} libsimulator +rm CMakeCache.txt cmake ${COMMON_OPTIONS} -DPCB=X7 ${SRCDIR} make -j${JOBS} libsimulator +rm CMakeCache.txt cmake ${COMMON_OPTIONS} -DPCB=X9D ${SRCDIR} make -j${JOBS} libsimulator +rm CMakeCache.txt cmake ${COMMON_OPTIONS} -DPCB=X9D+ ${SRCDIR} make -j${JOBS} libsimulator +rm CMakeCache.txt cmake ${COMMON_OPTIONS} -DPCB=X9D+ -DPCBREV=2019 ${SRCDIR} make -j${JOBS} libsimulator +rm CMakeCache.txt cmake ${COMMON_OPTIONS} -DPCB=XLITE ${SRCDIR} make -j${JOBS} libsimulator +rm CMakeCache.txt cmake ${COMMON_OPTIONS} -DPCB=XLITES ${SRCDIR} make -j${JOBS} libsimulator +rm CMakeCache.txt cmake ${COMMON_OPTIONS} -DPCB=X9E ${SRCDIR} make -j${JOBS} libsimulator +rm CMakeCache.txt cmake ${COMMON_OPTIONS} -DPCB=X10 ${SRCDIR} make -j${JOBS} libsimulator +rm CMakeCache.txt cmake ${COMMON_OPTIONS} -DPCB=X10 -DPCBREV=EXPRESS ${SRCDIR} make -j${JOBS} libsimulator +rm CMakeCache.txt cmake ${COMMON_OPTIONS} -DPCB=X12S ${SRCDIR} make -j${JOBS} libsimulator +rm CMakeCache.txt make -j${JOBS} package From f7957b084541ee958570fa5441e8b7e992236cc2 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 20 Dec 2019 18:51:00 +0100 Subject: [PATCH 16/63] Update CREDITS.txt --- CREDITS.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CREDITS.txt b/CREDITS.txt index afbca29e1..78375a750 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -1668,3 +1668,5 @@ Peter Schneider Norman Schenck Boris Hemmer Gilles Arbona +Patrice Germain +BalTrad From b60300b609bbe71bd76235249347a791600f64a6 Mon Sep 17 00:00:00 2001 From: 3djc Date: Sat, 21 Dec 2019 09:36:23 +0100 Subject: [PATCH 17/63] Move nightlies to 2.3.4 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fafd8c537..682659152 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ project(OpenTX) set(VERSION_MAJOR "2") set(VERSION_MINOR "3") -set(VERSION_REVISION "3") +set(VERSION_REVISION "4") set(VERSION_SUFFIX $ENV{OPENTX_VERSION_SUFFIX}) set(VERSION_FAMILY ${VERSION_MAJOR}.${VERSION_MINOR}) set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}${VERSION_SUFFIX}) From 0b0d2977c1a3e2e00c272a4d0e78dfff68d5cd15 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 21 Dec 2019 12:18:45 +0100 Subject: [PATCH 18/63] Update CREDITS.txt --- CREDITS.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CREDITS.txt b/CREDITS.txt index 78375a750..794e18862 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -1669,4 +1669,5 @@ Norman Schenck Boris Hemmer Gilles Arbona Patrice Germain -BalTrad +Mart Rogers +Stefan Möst From d5cb5aece1d1f9f1c1c332057e4f0d16c9b39626 Mon Sep 17 00:00:00 2001 From: 3djc Date: Mon, 23 Dec 2019 08:52:43 +0100 Subject: [PATCH 19/63] Fix wrong ifdef --- radio/src/opentx.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 75f52fb5e..d4c6620da 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -885,7 +885,7 @@ void checkFailsafe() void checkRSSIAlarmsDisabled() { if (g_model.rssiAlarms.disabled) { -#if !defined(INTERNAL_MODULE) +#if !defined(HARDWARE_INTERNAL_MODULE) if (!isModuleMultimoduleDSM2(EXTERNAL_MODULE)) #else if (!isModuleMultimoduleDSM2(INTERNAL_MODULE) && !isModuleMultimoduleDSM2(EXTERNAL_MODULE)) From bcaace286e4ad98bba54f7b37e7ed37da219bd31 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 23 Dec 2019 10:53:48 +0100 Subject: [PATCH 20/63] Update CREDITS.txt --- CREDITS.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CREDITS.txt b/CREDITS.txt index 794e18862..6c6deb5a5 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -1671,3 +1671,7 @@ Gilles Arbona Patrice Germain Mart Rogers Stefan Möst +John Beech +John Rodgers +Stanton Sweet +Peter Suphan From 3f8a42d270cb48ec18d6b919a19feaa63e0ffdc3 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 23 Dec 2019 11:01:30 +0100 Subject: [PATCH 21/63] Fixes #7232 (#7235) --- radio/src/pulses/pxx1.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/radio/src/pulses/pxx1.cpp b/radio/src/pulses/pxx1.cpp index b9eb75c00..0d5dd3d2c 100644 --- a/radio/src/pulses/pxx1.cpp +++ b/radio/src/pulses/pxx1.cpp @@ -33,7 +33,7 @@ void Pxx1Pulses::addFlag1(uint8_t module, uint8_t sendFailsafe) flag1 |= PXX_SEND_RANGECHECK; } - if (sendFailsafe && g_model.moduleData[module].failsafeMode != FAILSAFE_NOT_SET && g_model.moduleData[module].failsafeMode != FAILSAFE_RECEIVER) { + if (sendFailsafe) { flag1 |= PXX_SEND_FAILSAFE; } @@ -182,7 +182,7 @@ void Pxx1Pulses::setupFrame(uint8_t module) #if defined(PXX_FREQUENCY_HIGH) if (moduleState[module].protocol == PROTOCOL_CHANNELS_PXX1_SERIAL) { if (moduleState[module].counter-- == 0) { - sendFailsafe = 1; + sendFailsafe = (g_model.moduleData[module].failsafeMode != FAILSAFE_NOT_SET && g_model.moduleData[module].failsafeMode != FAILSAFE_RECEIVER); moduleState[module].counter = 1000; } add8ChannelsFrame(module, 0, sendFailsafe); @@ -196,12 +196,12 @@ void Pxx1Pulses::setupFrame(uint8_t module) if (moduleState[module].counter & 0x01) { sendUpperChannels = g_model.moduleData[module].channelsCount; if (sendUpperChannels && moduleState[module].counter == 1) { - sendFailsafe = 1; + sendFailsafe = (g_model.moduleData[module].failsafeMode != FAILSAFE_NOT_SET && g_model.moduleData[module].failsafeMode != FAILSAFE_RECEIVER); } } else { if (moduleState[module].counter == 0) { - sendFailsafe = 1; + sendFailsafe = (g_model.moduleData[module].failsafeMode != FAILSAFE_NOT_SET && g_model.moduleData[module].failsafeMode != FAILSAFE_RECEIVER); } } From acf00938c31e7a47cdd3b07c22a53b485d8cee53 Mon Sep 17 00:00:00 2001 From: Ben Lye Date: Mon, 23 Dec 2019 10:04:29 +0000 Subject: [PATCH 22/63] Fix T16 calibration image in dark blue theme (#7233) * Update darkblue.cpp * Update t16.bmp Removed white background --- radio/sdcard/horus/THEMES/Darkblue/t16.bmp | Bin 164938 -> 164938 bytes radio/src/gui/480x272/themes/darkblue.cpp | 10 +++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/radio/sdcard/horus/THEMES/Darkblue/t16.bmp b/radio/sdcard/horus/THEMES/Darkblue/t16.bmp index ac0d16cf6119ad1d3e791bf88258734cc443d9e0..9c78cb49809c1e8e6265c0507932bcb745b982f2 100755 GIT binary patch delta 7098 zcmeI0e^69a6vx>sDhms{%kHwf;E%*#=okfqpqOa7Q6WQN3W^R9;fkRv7!heA6+;^+ zNI9UUWTp(7?pQB*mcOVbEHzA;9IAOCYix4*F>$*0;Uj``sO8_`(iB<|sa-%uJrFnN^MB^uwIJOQQMt6dae%yo>^`1p6=`#W(LkMvz>uqH>c5mAhU;<*=iu zoOTSAE03e{sZ*$Y<84%qeh-zM@1t_#IaI#Xj>;h&sGR%>DwlQcVg8Zp)~)NeeTVt^ z`AIFGbLcEAEX1Is4izP4GwCC6QC`C0Np_Zh}RRq6-t063jw-p1PB{NfV8m$sEj1Q zsfh%*5k-LLX#{ZIMu5gx0$iF-fRLF4NWOyrWpfD7GLHb>yKvBuovIlv&%ammEOrja zoT7V3q)n8M->2DxrnN7`)8r8u1V~y+fRg0|@H~ivhA~c!U4~puH99p;@rr6z^F}Vj$NOM4D38=_iS@x;7DMX_dSiw>?9oaf+8!`5XaG zZ6?5tS^`ABKmcbw0UCGUpn+T2`M!(BXuE$8 zv17+VadEL4E$^Mm?q_E8P<%sTVj`56mtzJNGb~uJ0JK^y95`@5&5}R6m7CbqL&ap( zs#TDXkN}4dAI6M~6To7zKwMm$ngv_7Y=Jdv)FJ_6%~+@k^;MT?{-|fcFl3_+&M80?AWnGw1xK8>K^Ru>=dg8ZnwK9j_>}^ zS!{ccIiJFC^Z64ePQZ#4DUI(S6r7&&UG)PTN zRsD?q&eNw)t4IInE*d&++&Cp(FLyhbq1QYsD@$2m4jeC)%K#O?(gE^p3x$ z*E>M*D!dn$5*G* ziM{Q+Z)|KVSglsb$;nZYP4ZXiOn0-#0if6GVa}X6zWa*#3g6t^Ts7I)5WARl_8tW& z7os7Xi@m&ZZOEBLGhFP;_srK52 zre%K(7Hj~{lxju0_!V4@>)mjJ|Iph&v@1M39F{FxCI++x^AE4EE2!({7D7Toz+^HFWmist88c=m3pjiBY>0@6 z0JGWrJzozGUvRa~NPeAi%cd2qpl7oV-r~MgFGuFHZN6t^6$~Zod6(~5Cb_+cZS{4A qCV9kTL&-`i^*zffuiwBn`#M8$PuEh$Dtyipw{_Q_Vx?rF#_vzoC01|% delta 9708 zcmd5?3zUuJ8eacDbL@%1FvH9kV_Yh;I?P0JEh6)ZCb0fPV4No_Kf+T@A7`{<$2%l z{q31qbHPeB z{mLt^=*^oq%dyMOQ4u|s>m{?G#sB6#V+p|S2FJ9qBX;a_6m&o1@%F8{7wde@)$nhSEi`FHrg zU181N?qM_e&^@vH+g0OdpM9oFN=o#}lP85wBKuIX56|_{qeq>LS_yW7o;Pov-m_k(V|3dHo|o(+I~5fbIavuwcAWSe_dj&#kUn?rT!a~QeB?IBtjlZxLoyulDoLKkEYr4(Nv;e%LusFWrvSPdxF2{@{ZT7))U^V)U6aXY{kr zKI@dGUWbvBCr{Qdz4TH=iEfC(V<)3g4-9(bkw^6FufHA^Vq{~{Odt?&hFpH99i!K* zS)(D1u_p$l%b>-J7duOu4#sL6^urH7R9vmTk8!+q?OJEgRU@$43opE&PoF;RT`kGS zfJSgRrOn4;(56kBxSDrRoM;lZaay*Rh(YhY_a1YFcTlX4Qf%0;!5P_#gPwfyNsTGq zK`|oJ-o1OByf#xYh-~52Doz;f`}*sz^{iR5oP+H-hz|1Ur=NOPijJZ$RP8tu11PlV zYq$7*{P9PC7h~NIKm5?ZAikb9ZJN`k7cs07!sHyY z?pTWFt5>f!p2J0)9etN#FZ!Q(z7FC{7yA=?{PD*_5d-D55%+lh`RARMgNWzm=IRR< zE|jes#Bn-j~A3vTEYT(RAa2@C2am2H;v-QUxe{A4nfo02< zIh!UBA2n(eW7WWMR=s4&66fsw#7B%6q2GP?T>}SK=!FXxI#*3z0gc0l42;|beL6#? z5JT26F!+z2Idi77d>S#Ol!1{=rca;l9GFfF8PULSdg|DzI+IvIL4koCIdVi#nKH$> zX*RLvo_o%~$ZOE9Gifd{7{tKdfB$_wX3QApl?B9Bty*PZZ@>MvzWeUGos)}+LDL3C z?jAaHsMB~UvE|E`hp=eoXQ%IzD*=Fj41i4K%*!LNXwf1AfDW|t_G$tM1_LN8EYyx( zOJMHYxgj9R!Kd}QRd_yU&K%?U%P+s|WIxa62zui=wB_U%tb!e(`A`JF4X=r!hZnz0 zY{rZkVHmx;?nYvdKKf`FhAiOpe2p0RJq&yL>8G9C&6EQc3v4-WH7~2-v0-u))a-28 zLeTH`hl6=}dCrCHTov{VWfqZ?-k$LmF=mHg))8#QiWN@QZekBS@PH?duZeln z7-d10#Jo(2@uf?bItTX=zyJRGLwO>IGmq3bKs+ZWhxs_D*|Pay6{qV*#3xLcz&k(~ z4r@D84iRURf>Fb8Mp5CX#K(>u8%i3oKQk|!!YL^x4qx?fOr~%tXx+K;C~-zPV$WEg zEW$_}^z~XO{M4yaVHo_!S@I3BZ@&4)z{oDd_MIYzG!g-;a++8$HHo}r9VVQPXNi6B z#TUjrVvjxcn3Hp!7-BX8R`Bzs=N~;71>QWXwE!_AFyo+bsXw3ZXyYKWv4?U!^G6j6+op%h7WiCQm z<+T*h%q5vV=8H*_CaHth3K%Ri#NC)M5b&x-I{{IU8_TlzK}4&r*9nLs*8t%S3}-c^ zlYppK3=n=KVBt*yg3=8T-oSLMN^TYqcQylLmI4a|2KBH~Rp)&p+4W#*I@Q`w58TV$386 z_E9+lD*+4seQ7YzAj?WtdWba}B1c{uBY5J7U|{Y&P}se9i^9Ak5JMt2MpT^6%+Es= zjj04I9e-&s05DbkD@Qi=D$HFw`+-WP%dxjUD983rr!heIs@N~ny&(MrV4!C%w3hjZ zO!wNde1yUX9vjtzVJ?F7g51Xh^v?Z_sJcO3W0g$z205}8%jdw9d|2u~Pm85? z@7`^w!(|tYpsu{sLta8Lp$gXvxNqM+V-+wPedHfv#4<0;d%p^$5Hh3?>o&;f8)n~te-h5BR6P){@fbdyk zS?ZR|U35@DZ*r!zGpQlkv-Rf!dTSciEzE7%UkDhySW32FyM!9bKPF(s zN)8o|Dn1S{ye!2i%IGL33lTednuYfASLa7f)`_)?i#s-qc@_8qio)^gO)`@zBBJ1s;E3OUc;?j&8lv*p}snrmVPqh)=M}MSn#)7wlN_ZwkvahDua7Y0^Zzg5k;~(MzM?DyNlw z#_AzUfC$+ylO`u(hF5+Dm+sP~3yTi+bJ%ndY3Rvy>(jypu-Bw2Q5$=kHBh4w zAf0K%iSUto3Yvl5;eP06Tk+C>IPMF&Teoh~V~p>Lt2h-l5BL0tJCS!-S41Un4o5r3qr1+`yKr)b6;L z-Pn+Vax&?=U%!4jDJeLrR3X$if-^qJAtRdn;#opZ; z%I;{2G!jza?mN&=!k5RoxdZjg5aE%MlarZz#rH|?OcnG>+@IvwRNERjIUAcZa%ZSb zH`?{BTiJLLbFx7Wt%`S{D<+5GI|iDT%dm{3wkY?;jT@yu(yUoC-J?ej=`-+PiF7%# zGV59T6YT;MdJmQEsx*}jk;Hb-b%~4(Iyb$lQKLqtC#1%6S-K7PXH25zQ>9((I4ePn z%12ZUPYtV6HK~a_K00{1fB*gxzcdW3OTBU5*hIz-703@wSpM59Y_q_Tjx z-Dp>GCCLe`E51?*PQ=nzL}5kM`c}vmBdT(}M|?k?QnI^CLg6Z?YPenR6zu+zMz?F%PQUo#ixje7O$x|>EFWwr3hHSqR^?$5 z`F5m5ixv_G^h~-D>+FoxR%*Pvi~E}*<@XekIEErMb+K@%?z!h49UB`fq*{J$=qGJC zZ`ev+;*Vr4Hfq_jrA|yt)Pn~PmRDFzq>!b#ln1O&j`p%+p%U0KP`cc@B83O#hb0Ki4!HZQDV35(PfU^I4kXp7SkIyZK3>hNPLdwUgfs>=HR2nRX{t%NwPNh$f z;_0vqvLoOxw!vHWwhuLA`&aS?QI2v+h@k-S0wtqi!rPF8>y>*jZUK@4nS&`al1wBy zgH6`NCUj%hT*HSCmqM#gpFSFWQqceoTjoN05jBA^!||iRG%MD}h}?=^NcNrf{#bSZ zMRe)~fso7tCIluAw-OS|dp0^fJzbp2RAreQL5qdNN~2h`9C?ke99TUvW;%4}AWcST z6;qY*6ogttme=%oz6{78VDC?0D_r=GN+B;Hu}g8?#Pl$-85gC!XlYhW!HaO1Wb!9A z4QZ`jy?T1UfC0jX)vH$*r)L2`+JheIG$hTipdeGQcwjV;i^+C;%NBTlkbNRu)3;e` zP-H@gIw>r8Ai4w%UcP2(;(`SWghOiAuC3$Z;&kWEof+|!8@dZi92%Nh?Ao=fZr!@I zrpP=vGdHs_B_zeO)NwNh+WwL?D4sfZmt7NSgAPKHV0)d?@YNlYE7Jw%Goy1YzW1hr zv$C>;*K5?Mq2uG@C4`YgE0?$#C2rfct$5D$*I%zwQc`q6LW1}NUDfaROLfI0s^W*) zqrkd+{QwfKbmjOcc$aEC!d{FCEJdN+KbU~JQ1u@r6Go048EVa6!a?Gr(1lS8voRr> zy>{bHS8+xcxsbC%uy33_9}{q%N+;YJh0B|&avuhlb@DGkfT3`TLQtrV6J>SOqm>>u z#mAbCorOu0?Ku#qJOf1jFII?#G#}G9+p>jI?CB5*x52P0RM??8N$!|*ZTOEmJI$VG Q#Y&CO`jk}c$$Odq1tMv`=l}o! diff --git a/radio/src/gui/480x272/themes/darkblue.cpp b/radio/src/gui/480x272/themes/darkblue.cpp index 017175c77..9a6410bb4 100644 --- a/radio/src/gui/480x272/themes/darkblue.cpp +++ b/radio/src/gui/480x272/themes/darkblue.cpp @@ -137,11 +137,15 @@ class DarkblueTheme: public Theme calibTrackpBackground = BitmapBuffer::load(getThemePath("trackp_background.png")); delete calibHorus; -#if defined(PCBX10) - if (STICKS_PWM_ENABLED()) +#if defined(RADIO_T16) + calibHorus = BitmapBuffer::load(getThemePath("t16.bmp")); +#elif defined(PCBX10) + if(STICKS_PWM_ENABLED()) { calibHorus = BitmapBuffer::load(getThemePath("X10S.bmp")); - else + } + else { calibHorus = BitmapBuffer::load(getThemePath("X10.bmp")); + } #else calibHorus = BitmapBuffer::load(getThemePath("horus.bmp")); #endif From c9c33fd7374e20c8ab0c219aee66e43569718fc9 Mon Sep 17 00:00:00 2001 From: Hans Christian Olaussen <41271048+klutvott123@users.noreply.github.com> Date: Mon, 23 Dec 2019 11:05:11 +0100 Subject: [PATCH 23/63] LUA sport/crossfireTelemetryPush protocol detection (#7229) Make sportTelemetryPush/crossfireTelemetryPush return nil if they detect the wrong telemetry protocol. This allows us to differentiate between wrong protocol and telemetry buffer not available. For lua scripts supporting both crossfire and smartport this will let us reliably detect the telemetry protocol using these functions. --- radio/src/lua/api_general.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index b87d02fc2..2a5db1422 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -440,13 +440,15 @@ When called without parameters, it will only return the status of the output buf @retval boolean data queued in output buffer or not. -@status current Introduced in 2.2.0 +@retval nil incorrect telemetry protocol. + +@status current Introduced in 2.2.0, retval nil added in 2.3.4 */ static int luaSportTelemetryPush(lua_State * L) { if (!IS_FRSKY_SPORT_PROTOCOL()) { - lua_pushboolean(L, false); + lua_pushnil(L); return 1; } @@ -637,12 +639,14 @@ When called without parameters, it will only return the status of the output buf @retval boolean data queued in output buffer or not. -@status current Introduced in 2.2.0 +@retval nil incorrect telemetry protocol. + +@status current Introduced in 2.2.0, retval nil added in 2.3.4 */ static int luaCrossfireTelemetryPush(lua_State * L) { if (telemetryProtocol != PROTOCOL_TELEMETRY_CROSSFIRE) { - lua_pushboolean(L, false); + lua_pushnil(L); return 1; } From 4249c047420bf2c6bef0d59e9f3f398cac47342a Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 23 Dec 2019 11:10:19 +0100 Subject: [PATCH 24/63] Bsongis/trainer sbus x9e (#7227) Fixex #5636 --- radio/src/gui/gui_common.cpp | 7 +++++++ radio/src/targets/common/arm/stm32/bluetooth_driver.cpp | 6 ++++++ radio/src/targets/taranis/board.cpp | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index d3b826b28..ca7dc4442 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -724,6 +724,13 @@ bool isTrainerModeAvailable(int mode) return false; #endif +#if defined(PCBX9E) + if (g_eeGeneral.bluetoothMode && mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE) { + // bluetooth uses the same USART than SBUS + return false; + } +#endif + #if defined(PCBTARANIS) && !defined(TRAINER_BATTERY_COMPARTMENT) if (mode == TRAINER_MODE_MASTER_BATTERY_COMPARTMENT) return false; diff --git a/radio/src/targets/common/arm/stm32/bluetooth_driver.cpp b/radio/src/targets/common/arm/stm32/bluetooth_driver.cpp index 01349d56c..cbb9821c0 100644 --- a/radio/src/targets/common/arm/stm32/bluetooth_driver.cpp +++ b/radio/src/targets/common/arm/stm32/bluetooth_driver.cpp @@ -107,6 +107,12 @@ void bluetoothInit(uint32_t baudrate, bool enable) void bluetoothDisable() { GPIO_SetBits(BT_EN_GPIO, BT_EN_GPIO_PIN); // close bluetooth (recent modules will go to bootloader mode) + USART_ITConfig(BT_USART, USART_IT_RXNE, DISABLE); + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Pin = BT_RX_GPIO_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_Init(BT_USART_GPIO, &GPIO_InitStructure); + USART_DeInit(BT_USART); } extern "C" void BT_USART_IRQHandler(void) diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index 2d7a980c7..2dfa0a886 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -116,7 +116,7 @@ void boardInit() BT_RCC_APB2Periph, ENABLE); -#if defined(BLUETOOTH) +#if defined(BLUETOOTH) && !defined(PCBX9E) bluetoothInit(BLUETOOTH_DEFAULT_BAUDRATE, true); #endif From 103db22270f2e67641ce6150ff4857cd13d05f03 Mon Sep 17 00:00:00 2001 From: 3djc Date: Mon, 23 Dec 2019 11:11:17 +0100 Subject: [PATCH 25/63] Provide a manual compilation option to force TRAINER multi Horus with hacked hardware (#7226) --- radio/src/CMakeLists.txt | 5 +++++ radio/src/dataconstants.h | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 39da94311..c16bf7ca2 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -53,6 +53,7 @@ option(MODULE_PROTOCOL_LBT "Add support for EU/LBT modules" ON) option(MODULE_PROTOCOL_FLEX "Add support for non certified FLEX modules" OFF) option(MODULE_PROTOCOL_D8 "Add support for D8 modules" ON) option(FRSKY_RELEASE "Used to build FrSky released firmware" OFF) +option(ALLOW_TRAINER_MULTI "Allow multi trainer" OFF) # since we reset all default CMAKE compiler flags for firmware builds, provide an alternate way for user to specify additional flags. set(FIRMWARE_C_FLAGS "" CACHE STRING "Additional flags for firmware target c compiler (note: all CMAKE_C_FLAGS[_*] are ignored for firmware/bootloader).") @@ -343,6 +344,10 @@ if(FRSKY_RELEASE) set(POPUP_LEVEL 3) endif() +if(ALLOW_TRAINER_MULTI) + add_definitions(-DALLOW_TRAINER_MULTI) +endif() + add_definitions(-DPOPUP_LEVEL=${POPUP_LEVEL}) set(SRC diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index c747b39bb..1af8efdb6 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -205,7 +205,7 @@ enum TrainerMode { }; #endif -#if defined(RADIO_T16) +#if defined(RADIO_T16) || defined(ALLOW_TRAINER_MULTI) #define TRAINER_MODE_MAX() TRAINER_MODE_MULTI #elif defined(BLUETOOTH) #define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE_BLUETOOTH From af69e36ae6e18cc6ea41ff7fcf2d41c3698d25a4 Mon Sep 17 00:00:00 2001 From: Ben Lye Date: Mon, 23 Dec 2019 10:40:38 +0000 Subject: [PATCH 26/63] Call class load method when loading the dark blue theme (#7236) --- radio/src/gui/480x272/themes/darkblue.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/radio/src/gui/480x272/themes/darkblue.cpp b/radio/src/gui/480x272/themes/darkblue.cpp index 9a6410bb4..3d5e056fb 100644 --- a/radio/src/gui/480x272/themes/darkblue.cpp +++ b/radio/src/gui/480x272/themes/darkblue.cpp @@ -228,6 +228,7 @@ class DarkblueTheme: public Theme virtual void load() const { + Theme::load(); loadColors(); loadMenusIcons(); loadThemeBitmaps(); From 979cd7b719865f15e301036530162d09347a7730 Mon Sep 17 00:00:00 2001 From: 3djc Date: Tue, 24 Dec 2019 08:57:51 +0100 Subject: [PATCH 27/63] Move nightlies to 2.3.5 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 682659152..bcbe62e95 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ project(OpenTX) set(VERSION_MAJOR "2") set(VERSION_MINOR "3") -set(VERSION_REVISION "4") +set(VERSION_REVISION "5") set(VERSION_SUFFIX $ENV{OPENTX_VERSION_SUFFIX}) set(VERSION_FAMILY ${VERSION_MAJOR}.${VERSION_MINOR}) set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}${VERSION_SUFFIX}) From 428c0c635346f4e7968cd41a321214dc5e04caa7 Mon Sep 17 00:00:00 2001 From: 3djc Date: Tue, 24 Dec 2019 10:42:46 +0100 Subject: [PATCH 28/63] Add missing simu --- tools/build-companion-release.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/build-companion-release.sh b/tools/build-companion-release.sh index 2959df10d..8ecc343c8 100755 --- a/tools/build-companion-release.sh +++ b/tools/build-companion-release.sh @@ -62,6 +62,10 @@ cmake ${COMMON_OPTIONS} -DPCB=X7 ${SRCDIR} make -j${JOBS} libsimulator rm CMakeCache.txt +cmake ${COMMON_OPTIONS} -DPCB=X7 -DPCBREV=T12 ${SRCDIR} +make -j${JOBS} libsimulator +rm CMakeCache.txt + cmake ${COMMON_OPTIONS} -DPCB=X9D ${SRCDIR} make -j${JOBS} libsimulator rm CMakeCache.txt @@ -90,6 +94,10 @@ cmake ${COMMON_OPTIONS} -DPCB=X10 ${SRCDIR} make -j${JOBS} libsimulator rm CMakeCache.txt +cmake ${COMMON_OPTIONS} -DPCB=X10 -DPCBREV=T16 ${SRCDIR} +make -j${JOBS} libsimulator +rm CMakeCache.txt + cmake ${COMMON_OPTIONS} -DPCB=X10 -DPCBREV=EXPRESS ${SRCDIR} make -j${JOBS} libsimulator rm CMakeCache.txt From af0e708ee1cb6af19f88a88b8f1166f1ca4da7ce Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 24 Dec 2019 14:11:38 +0100 Subject: [PATCH 29/63] Update CREDITS.txt --- CREDITS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.txt b/CREDITS.txt index 6c6deb5a5..f1c43743b 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -1675,3 +1675,4 @@ John Beech John Rodgers Stanton Sweet Peter Suphan +FGS From 5d51317ceb080e46eadc7d49f2a6ecec5989a7d7 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 26 Dec 2019 22:27:25 +0100 Subject: [PATCH 30/63] Update CREDITS.txt --- CREDITS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.txt b/CREDITS.txt index f1c43743b..2991d5b42 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -1676,3 +1676,4 @@ John Rodgers Stanton Sweet Peter Suphan FGS +Outward Ideas From 2f793eba325023a6c96c692682b957fba735c891 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 26 Dec 2019 22:29:02 +0100 Subject: [PATCH 31/63] Update CREDITS.txt --- CREDITS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.txt b/CREDITS.txt index 2991d5b42..381adc1f3 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -1677,3 +1677,4 @@ Stanton Sweet Peter Suphan FGS Outward Ideas +Sylvie Le Madec From ea1133527313383b84f0ad3e58cb3f0f5463bca6 Mon Sep 17 00:00:00 2001 From: 3djc Date: Fri, 27 Dec 2019 09:42:13 +0100 Subject: [PATCH 32/63] D16 bind option (#7218) D16 bind option, and several fixes that give MULTI live data priority vs OpenTX stored multi definitions Co-authored-by: pascallanger --- radio/src/datastructs.h | 3 +++ radio/src/gui/128x64/model_setup.cpp | 23 +++++++++------- radio/src/gui/212x64/model_setup.cpp | 21 ++++++++------- radio/src/gui/480x272/model_setup.cpp | 19 +++++++------- .../gui/common/stdlcd/model_setup_pxx1.cpp | 26 +++++++++++++------ radio/src/gui/gui_common.cpp | 2 +- radio/src/gui/gui_common.h | 23 +++++++++------- radio/src/pulses/modules_helpers.h | 6 +++-- radio/src/pulses/multi.cpp | 15 +++++++++-- radio/src/telemetry/multi.cpp | 2 +- radio/src/translations/cz.h.txt | 2 +- radio/src/translations/de.h.txt | 2 +- radio/src/translations/en.h.txt | 2 +- radio/src/translations/es.h.txt | 2 +- radio/src/translations/fi.h.txt | 2 +- radio/src/translations/fr.h.txt | 2 +- radio/src/translations/nl.h.txt | 2 +- radio/src/translations/pl.h.txt | 2 +- radio/src/translations/pt.h.txt | 2 +- radio/src/translations/se.h.txt | 2 +- 20 files changed, 97 insertions(+), 63 deletions(-) diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 5733c7f86..9c5e1b652 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -444,6 +444,9 @@ PACK(struct ModuleData { uint8_t autoBindMode:1; uint8_t lowPowerMode:1; int8_t optionValue; + uint8_t receiverTelemetryOff:1; + uint8_t receiverHigherChannels:1; + uint8_t spare:6; } multi); NOBACKUP(struct { uint8_t power:2; // 0=10 mW, 1=100 mW, 2=500 mW, 3=1W diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index be933710b..3a67ba80e 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -1461,8 +1461,19 @@ void menuModelSetup(event_t event) if (MULTIMODULE_PROTOCOL_KNOWN(moduleIdx)) { int optionValue = g_model.moduleData[moduleIdx].multi.optionValue; + MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); const uint8_t multi_proto = g_model.moduleData[moduleIdx].getMultiProtocol(); - if (multi_proto < MODULE_SUBTYPE_MULTI_LAST) { + + if (status.isValid()) { + MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); + lcdDrawText(INDENT_WIDTH, y, mm_options_strings::options[status.optionDisp]); + if (attr && status.optionDisp == 2) { + lcdDrawText(MODEL_SETUP_2ND_COLUMN + 23, y, "RSSI(", LEFT); + lcdDrawNumber(lcdLastRightPos, y, TELEMETRY_RSSI(), LEFT); + lcdDrawText(lcdLastRightPos, y, ")", LEFT); + } + } + else { const mm_protocol_definition * pdef = getMultiProtocolDefinition(multi_proto); if (pdef->optionsstr) { lcdDrawText(INDENT_WIDTH, y, pdef->optionsstr); @@ -1473,15 +1484,7 @@ void menuModelSetup(event_t event) } } } - else { - MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); - lcdDrawText(INDENT_WIDTH, y, mm_options_strings::options[status.optionDisp]); - if (attr && status.optionDisp == 2) { - lcdDrawText(MODEL_SETUP_2ND_COLUMN + 23, y, "RSSI(", LEFT); - lcdDrawNumber(lcdLastRightPos, y, TELEMETRY_RSSI(), LEFT); - lcdDrawText(lcdLastRightPos, y, ")", LEFT); - } - } + if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A) optionValue = 50 + 5 * optionValue; diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index c7acddefb..18efa2849 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -1216,8 +1216,17 @@ void menuModelSetup(event_t event) if (MULTIMODULE_PROTOCOL_KNOWN(moduleIdx)) { int optionValue = g_model.moduleData[moduleIdx].multi.optionValue; + MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); const uint8_t multi_proto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(); - if (multi_proto < MODULE_SUBTYPE_MULTI_LAST) { + if (status.isValid()) { + lcdDrawText(INDENT_WIDTH, y, mm_options_strings::options[status.optionDisp]); + if (attr && status.optionDisp == 2) { + lcdDrawText(MODEL_SETUP_3RD_COLUMN+22, y, "RSSI(", LEFT); + lcdDrawNumber(lcdLastRightPos, y, TELEMETRY_RSSI(), LEFT); + lcdDrawText(lcdLastRightPos, y, ")", LEFT); + } + } + else { const mm_protocol_definition * pdef = getMultiProtocolDefinition(multi_proto); if (pdef->optionsstr) lcdDrawText(INDENT_WIDTH, y, pdef->optionsstr); @@ -1227,15 +1236,7 @@ void menuModelSetup(event_t event) lcdDrawText(lcdLastRightPos, y, ")", LEFT); } } - else { - MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); - lcdDrawText(INDENT_WIDTH, y, mm_options_strings::options[status.optionDisp]); - if (attr && status.optionDisp == 2) { - lcdDrawText(MODEL_SETUP_3RD_COLUMN+22, y, "RSSI(", LEFT); - lcdDrawNumber(lcdLastRightPos, y, TELEMETRY_RSSI(), LEFT); - lcdDrawText(lcdLastRightPos, y, ")", LEFT); - } - } + if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A) optionValue = 50 + 5 * optionValue; diff --git a/radio/src/gui/480x272/model_setup.cpp b/radio/src/gui/480x272/model_setup.cpp index 93fed1953..405efbfd5 100644 --- a/radio/src/gui/480x272/model_setup.cpp +++ b/radio/src/gui/480x272/model_setup.cpp @@ -1613,23 +1613,24 @@ bool menuModelSetup(event_t event) if (MULTIMODULE_PROTOCOL_KNOWN(moduleIdx)) { int optionValue = g_model.moduleData[moduleIdx].multi.optionValue; + MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); const uint8_t multi_proto = g_model.moduleData[moduleIdx].getMultiProtocol(); - if (multi_proto < MODULE_SUBTYPE_MULTI_LAST) { + if (status.isValid()) { + lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH, y, mm_options_strings::options[status.optionDisp]); + if (attr && status.optionDisp == 2) { + lcdDrawNumber(LCD_W - 10, y, TELEMETRY_RSSI(), RIGHT, 0, "RSSI(", ")"); + } + } + else { const mm_protocol_definition * pdef = getMultiProtocolDefinition(multi_proto); if (pdef->optionsstr) { lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH, y, pdef->optionsstr); - if (attr && pdef->optionsstr == STR_MULTI_RFTUNE) { + if (attr && pdef->optionsstr == STR_MULTI_RFTUNE) { lcdDrawNumber(LCD_W - 10, y, TELEMETRY_RSSI(), RIGHT, 0, "RSSI(", ")"); } } } - else { - MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); - lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH, y, mm_options_strings::options[status.optionDisp]); - if (attr && status.optionDisp == 2) { - lcdDrawNumber(LCD_W - 10, y, TELEMETRY_RSSI(), RIGHT, 0, "RSSI(", ")"); - } - } + if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A) optionValue = 50 + 5 * optionValue; diff --git a/radio/src/gui/common/stdlcd/model_setup_pxx1.cpp b/radio/src/gui/common/stdlcd/model_setup_pxx1.cpp index 24091dcd7..13ad0437c 100644 --- a/radio/src/gui/common/stdlcd/model_setup_pxx1.cpp +++ b/radio/src/gui/common/stdlcd/model_setup_pxx1.cpp @@ -22,27 +22,37 @@ void onBindMenu(const char * result) { uint8_t moduleIdx = CURRENT_MODULE_EDITED(menuVerticalPosition - HEADER_LINE); + uint8_t receiverTelemetryOff, receiverHigherChannels; if (result == STR_BINDING_1_8_TELEM_ON) { - g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = false; - g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = false; + receiverTelemetryOff = false; + receiverHigherChannels = false; } else if (result == STR_BINDING_1_8_TELEM_OFF) { - g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = true; - g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = false; + receiverTelemetryOff = true; + receiverHigherChannels = false; } else if (result == STR_BINDING_9_16_TELEM_ON) { - g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = false; - g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = true; + receiverTelemetryOff = false; + receiverHigherChannels = true; } else if (result == STR_BINDING_9_16_TELEM_OFF) { - g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = true; - g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = true; + receiverTelemetryOff = true; + receiverHigherChannels = true; } else { return; } + if (isModuleMultimodule(moduleIdx)) { + g_model.moduleData[moduleIdx].multi.receiverTelemetryOff = receiverTelemetryOff; + g_model.moduleData[moduleIdx].multi.receiverHigherChannels = receiverHigherChannels; + } + else { + g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = receiverTelemetryOff; + g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = receiverHigherChannels; + } + moduleState[moduleIdx].mode = MODULE_MODE_BIND; } diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index ca7dc4442..a849dfd7a 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -926,7 +926,7 @@ const mm_protocol_definition multi_protocols[] = { {MM_RF_CUSTOM_SELECTED, 7, true, true, NO_SUBTYPE, STR_MULTI_OPTION}, // Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff) - {0xfe, 0, false, true, NO_SUBTYPE, nullptr} + {0xfe, 0, false, false, NO_SUBTYPE, nullptr} }; #undef NO_SUBTYPE diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index 6c52f2fb3..ccbf535eb 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -166,6 +166,11 @@ inline uint8_t MULTI_DISABLE_CHAN_MAP_ROW(uint8_t moduleIdx) if (!isModuleMultimodule(moduleIdx)) return HIDDEN_ROW; + MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); + if (status.isValid()) { + return status.supportsDisableMapping() == true ? 0 : HIDDEN_ROW; + } + uint8_t protocol = g_model.moduleData[moduleIdx].getMultiProtocol(); if (protocol < MODULE_SUBTYPE_MULTI_LAST) { const mm_protocol_definition * pdef = getMultiProtocolDefinition(protocol); @@ -173,11 +178,6 @@ inline uint8_t MULTI_DISABLE_CHAN_MAP_ROW(uint8_t moduleIdx) return 0; } - MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); - if (status.supportsDisableMapping() && status.isValid()) { - return 0; - } - return HIDDEN_ROW; } @@ -239,12 +239,15 @@ inline uint8_t MULTIMODULE_HASOPTIONS(uint8_t moduleIdx) return false; uint8_t protocol = g_model.moduleData[moduleIdx].getMultiProtocol(); - if (protocol < MODULE_SUBTYPE_MULTI_LAST) { - return getMultiProtocolDefinition(protocol)->optionsstr != nullptr; - } - MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); - return status.optionDisp; + + if (status.isValid()) + return status.optionDisp; + + if (protocol < MODULE_SUBTYPE_MULTI_LAST) + return getMultiProtocolDefinition(protocol)->optionsstr != nullptr; + + return false; } #define MULTIMODULE_MODULE_ROWS(moduleIdx) MULTIMODULE_PROTOCOL_KNOWN(moduleIdx) ? (uint8_t) 0 : HIDDEN_ROW, MULTIMODULE_PROTOCOL_KNOWN(moduleIdx) ? (uint8_t) 0 : HIDDEN_ROW, MULTI_DISABLE_CHAN_MAP_ROW(moduleIdx), // AUTOBIND, DISABLE TELEM, DISABLE CN.MAP diff --git a/radio/src/pulses/modules_helpers.h b/radio/src/pulses/modules_helpers.h index 2c9a64e94..dfd5a1e24 100644 --- a/radio/src/pulses/modules_helpers.h +++ b/radio/src/pulses/modules_helpers.h @@ -127,7 +127,7 @@ inline bool isModuleISRMD16(uint8_t idx) inline bool isModuleD16(uint8_t idx) { - return isModuleXJTD16(idx) || isModuleISRMD16(idx); + return isModuleXJTD16(idx) || isModuleISRMD16(idx) || IS_D16_MULTI(idx); } inline bool isModuleISRMAccess(uint8_t idx) @@ -469,7 +469,7 @@ inline bool isTelemAllowedOnBind(uint8_t moduleIndex) { #if defined(HARDWARE_INTERNAL_MODULE) if (moduleIndex == INTERNAL_MODULE) - return isModuleISRM(moduleIndex) || isSportLineUsedByInternalModule(); + return true; if (isSportLineUsedByInternalModule()) return false; @@ -557,6 +557,8 @@ inline void resetMultiProtocolsOptions(uint8_t moduleIdx) g_model.moduleData[moduleIdx].multi.disableTelemetry = 0; g_model.moduleData[moduleIdx].multi.disableMapping = 0; g_model.moduleData[moduleIdx].multi.lowPowerMode = 0; + g_model.moduleData[moduleIdx].failsafeMode = FAILSAFE_NOT_SET; + g_model.header.modelId[moduleIdx] = 0; } inline void getMultiOptionValues(int8_t multi_proto, int8_t & min, int8_t & max) diff --git a/radio/src/pulses/multi.cpp b/radio/src/pulses/multi.cpp index b49c61b7d..936da0948 100644 --- a/radio/src/pulses/multi.cpp +++ b/radio/src/pulses/multi.cpp @@ -38,6 +38,7 @@ static void sendFrameProtocolHeader(uint8_t moduleIdx, bool failsafe); void sendChannels(uint8_t moduleIdx); +static void sendD16BindOption(uint8_t moduleIdx); #if defined(LUA) static void sendSport(uint8_t moduleIdx); static void sendHott(uint8_t moduleIdx); @@ -174,10 +175,13 @@ void setupPulsesMulti(uint8_t moduleIdx) | g_model.moduleData[moduleIdx].multi.disableMapping)); // Multi V1.3.X.X -> Send protocol additional data: max 9 bytes -#if defined(LUA) if (getMultiModuleStatus(moduleIdx).isValid()) { MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); if (status.minor >= 3 && !(status.flags & 0x80)) { //Version 1.3.x.x or more and Buffer not full + if (IS_D16_MULTI(moduleIdx) && moduleState[moduleIdx].mode == MODULE_MODE_BIND) { + sendD16BindOption(moduleIdx);//1 byte of additional data + } +#if defined(LUA) // SPort send if (IS_D16_MULTI(moduleIdx) && outputTelemetryBuffer.destination == TELEMETRY_ENDPOINT_SPORT && outputTelemetryBuffer.size) { sendSport(moduleIdx); //8 bytes of additional data @@ -185,9 +189,9 @@ void setupPulsesMulti(uint8_t moduleIdx) else if (IS_HOTT_MULTI(moduleIdx)) { sendHott(moduleIdx); //1 byte of additional data } +#endif } } - #endif } void setupPulsesMultiExternalModule() @@ -345,6 +349,13 @@ void sendFrameProtocolHeader(uint8_t moduleIdx, bool failsafe) sendMulti(moduleIdx, (uint8_t) optionValue); } +void sendD16BindOption(uint8_t moduleIdx) +{ + uint8_t bind_opt = g_model.moduleData[moduleIdx].multi.receiverTelemetryOff ? 1 : 0; + bind_opt |= g_model.moduleData[moduleIdx].multi.receiverHigherChannels ? 2 : 0; + sendMulti(moduleIdx, bind_opt); +} + #if defined(LUA) void sendSport(uint8_t moduleIdx) { diff --git a/radio/src/telemetry/multi.cpp b/radio/src/telemetry/multi.cpp index 9fba4105a..e6b41faae 100644 --- a/radio/src/telemetry/multi.cpp +++ b/radio/src/telemetry/multi.cpp @@ -548,7 +548,7 @@ void MultiModuleStatus::getStatusString(char * statusText) const return; } - if (major == 1 && minor < 3 && SLOW_BLINK_ON_PHASE) { + if (major <= 1 && minor <= 3 && revision <= 0 && patch <= 47 && SLOW_BLINK_ON_PHASE) { strcpy(statusText, STR_MODULE_UPGRADE); } else { diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index df4261a0a..d90d692c7 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -644,7 +644,7 @@ #define TR_MODULE_WAITFORBIND "Párovat při zavedení protokolu" #define TR_MODULE_BINDING TR("Bind...","Párování") #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Nutno přepárovat" #define TR_REG_OK "Registrace ok" #define TR_BIND_OK "Úspěšné párovaní" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 89ad37779..de1421c0e 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -646,7 +646,7 @@ #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebinding required" #define TR_REG_OK "Registration ok" #define TR_BIND_OK "Bind successful" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 0cfa48682..f7600bf4f 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -645,7 +645,7 @@ #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING TR("Bind...","Binding") #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebinding required" #define TR_REG_OK "Registration ok" #define TR_BIND_OK "Bind successful" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index acdc29090..a52691923 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -669,7 +669,7 @@ #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebinding required" #define TR_REG_OK "Registration ok" #define TR_BIND_OK "Bind successful" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index c378cb47c..f5e018ead 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -663,7 +663,7 @@ #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebinding required" #define TR_REG_OK "Registration ok" #define TR_BIND_OK "Bind successful" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index acf1f155f..c8ec87b9f 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -666,7 +666,7 @@ #define TR_MODULE_WAITFORBIND "Binder d'abord" #define TR_MODULE_BINDING "Bind..." #define TR_MODULE_UPGRADE_ALERT "Mise à jour requise" -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebind requis" #define TR_REG_OK "Enregistr. ok" #define TR_BIND_OK "Bind ok" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 2b68fe5df..633d83a26 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -651,7 +651,7 @@ #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebinding required" #define TR_REG_OK "Registration ok" #define TR_BIND_OK "Bind successful" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 0441b2418..339755077 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -664,7 +664,7 @@ #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebinding required" #define TR_REG_OK "Registration ok" #define TR_BIND_OK "Bind successful" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 998a4e99a..7d51e12f7 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -655,7 +655,7 @@ #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebinding required" #define TR_REG_OK "Registration ok" #define TR_BIND_OK "Bind successful" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index aeff79192..2c26a7a0a 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -664,7 +664,7 @@ #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebinding required" #define TR_REG_OK "Registration ok" #define TR_BIND_OK "Bind successful" From 01824fa4edb4866ab5187720cd840a767564dd16 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 27 Dec 2019 20:07:20 +0100 Subject: [PATCH 33/63] Update CREDITS.txt --- CREDITS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.txt b/CREDITS.txt index 381adc1f3..9bcf147d4 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -1678,3 +1678,4 @@ Peter Suphan FGS Outward Ideas Sylvie Le Madec +James Houck (monthly) From b19b3bcbe7f550329f2b3284674b6bebdee20b51 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sun, 29 Dec 2019 10:43:04 +0100 Subject: [PATCH 34/63] Update CREDITS.txt --- CREDITS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.txt b/CREDITS.txt index 9bcf147d4..3fbd84a7f 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -1679,3 +1679,4 @@ FGS Outward Ideas Sylvie Le Madec James Houck (monthly) +Frank Steinmetz From cfc114e8538d3172a00d9e7f5321ed5f40d6647a Mon Sep 17 00:00:00 2001 From: 3djc Date: Tue, 31 Dec 2019 09:00:08 +0100 Subject: [PATCH 35/63] Update credits --- CREDITS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.txt b/CREDITS.txt index 3fbd84a7f..b28f50d0e 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -29,6 +29,7 @@ Michael Byrne FrSky (monthly) FlySky (monthly) JumperRC (monthly) +RadioMaster (monthly) Aloft Hobbies Jonathan Modellismo WsTech From 655ac5773d37a503a97bec48028514d9a9b01bdf Mon Sep 17 00:00:00 2001 From: 3djc Date: Fri, 3 Jan 2020 10:32:06 +0100 Subject: [PATCH 36/63] Fix x7access remote compile (#7257) --- radio/util/build-firmware.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/radio/util/build-firmware.py b/radio/util/build-firmware.py index be3003c88..4488659b0 100755 --- a/radio/util/build-firmware.py +++ b/radio/util/build-firmware.py @@ -96,6 +96,11 @@ def main(): cmake_options["PCB"] = "X7" firmware_options = options_taranis_x9dp maxsize = 65536 * 8 + elif options[optcount] == "x7access": + cmake_options["PCB"] = "X7" + cmake_options["PCBREV"] = "ACCESS" + firmware_options = options_taranis_x9dp + maxsize = 65536 * 8 elif board_name == "xlite": cmake_options["PCB"] = "XLITE" firmware_options = options_taranis_xlite From ef49a9ff77cc417aed4c9b67e5873d76e0bc7586 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 3 Jan 2020 11:54:21 +0100 Subject: [PATCH 37/63] Bsongis/wizard issue when model id already used (#7259) Wizard: popup displayed when modelID already used, but screen not refreshed --- .../taranis-x7/SCRIPTS/WIZARD/wizard.lua | 12 +--- radio/src/gui/212x64/model_setup.cpp | 16 ++--- radio/src/gui/480x272/model_setup.cpp | 4 +- radio/src/main.cpp | 4 +- radio/src/opentx.cpp | 48 ++++++--------- radio/src/pulses/modules_helpers.h | 7 ++- radio/src/storage/modelslist.cpp | 58 ++++++++----------- 7 files changed, 60 insertions(+), 89 deletions(-) diff --git a/radio/sdcard/taranis-x7/SCRIPTS/WIZARD/wizard.lua b/radio/sdcard/taranis-x7/SCRIPTS/WIZARD/wizard.lua index 513ce253a..2568f22b9 100755 --- a/radio/sdcard/taranis-x7/SCRIPTS/WIZARD/wizard.lua +++ b/radio/sdcard/taranis-x7/SCRIPTS/WIZARD/wizard.lua @@ -14,8 +14,6 @@ ---- # GNU General Public License for more details. # ---- # # ---- ######################################################################### --- Navigation variables -local dirty = true -- Model types local modelType = 0 @@ -27,10 +25,8 @@ local MODELTYPE_QUAD = 2 local function fieldIncDec(event, value, max) if event == EVT_ROT_LEFT or event == EVT_UP_BREAK then value = (value + max) - dirty = true elseif event == EVT_ROT_RIGHT or event == EVT_DOWN_BREAK then value = (value + max + 2) - dirty = true end value = (value % (max+1)) return value @@ -38,7 +34,7 @@ end -- Model Type Menu local function modelTypeSurround(index) - if(index<=1) then + if index <= 1 then lcd.drawFilledRectangle(59*(index%2)+12, 13, 43, 23) else lcd.drawFilledRectangle(59*(index%2)+12, 34, 40, 20) @@ -56,10 +52,7 @@ local function drawModelChoiceMenu() end local function modelTypeMenu(event) - if dirty == true then - drawModelChoiceMenu() - dirty = false - end + drawModelChoiceMenu() if event == EVT_ENTER_BREAK then if modelType == MODELTYPE_PLANE then return "plane.lua" @@ -68,7 +61,6 @@ local function modelTypeMenu(event) elseif modelType == MODELTYPE_QUAD then return "multi.lua" end - dirty = true else modelType = fieldIncDec(event, modelType, 2) end diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 18efa2849..2d90d70da 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -1410,15 +1410,15 @@ void menuModelSetup(event_t event) if (old_editMode > 0 && s_editMode == 0) { switch(menuVerticalPosition) { - case ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_BIND: - if (menuHorizontalPosition == 0) - checkModelIdUnique(g_eeGeneral.currModel, INTERNAL_MODULE); - break; + case ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_BIND: + if (menuHorizontalPosition == 0) + checkModelIdUnique(g_eeGeneral.currModel, INTERNAL_MODULE); + break; - case ITEM_MODEL_SETUP_EXTERNAL_MODULE_NOT_ACCESS_BIND: - if (menuHorizontalPosition == 0) - checkModelIdUnique(g_eeGeneral.currModel, EXTERNAL_MODULE); - break; + case ITEM_MODEL_SETUP_EXTERNAL_MODULE_NOT_ACCESS_BIND: + if (menuHorizontalPosition == 0) + checkModelIdUnique(g_eeGeneral.currModel, EXTERNAL_MODULE); + break; } } } diff --git a/radio/src/gui/480x272/model_setup.cpp b/radio/src/gui/480x272/model_setup.cpp index 405efbfd5..0b0554336 100644 --- a/radio/src/gui/480x272/model_setup.cpp +++ b/radio/src/gui/480x272/model_setup.cpp @@ -397,7 +397,7 @@ void checkModelIdUnique(uint8_t moduleIdx) // cannot rely exactly on WARNING_LINE_LEN so using WARNING_LINE_LEN-2 size_t warn_buf_len = sizeof(reusableBuffer.moduleSetup.msg) - WARNING_LINE_LEN - 2; - if (!modelslist.isModelIdUnique(moduleIdx,warn_buf,warn_buf_len)) { + if (!modelslist.isModelIdUnique(moduleIdx, warn_buf, warn_buf_len)) { if (warn_buf[0] != 0) { POPUP_WARNING(STR_MODELIDUSED); SET_WARNING_INFO(warn_buf, sizeof(reusableBuffer.moduleSetup.msg), 0); @@ -1754,7 +1754,7 @@ bool menuModelSetup(event_t event) // some field just finished being edited if (old_editMode > 0 && s_editMode == 0) { - ModelCell* mod_cell = modelslist.getCurrentModel(); + ModelCell * mod_cell = modelslist.getCurrentModel(); if (mod_cell) { switch(menuVerticalPosition) { case ITEM_MODEL_SETUP_NAME: diff --git a/radio/src/main.cpp b/radio/src/main.cpp index 0a4d1a346..3f5dbd1ab 100644 --- a/radio/src/main.cpp +++ b/radio/src/main.cpp @@ -469,9 +469,9 @@ void guiMain(event_t evt) lcdRefresh(); - if (mainRequestFlags & (1 << REQUEST_SCREENSHOT)) { + if (mainRequestFlags & (1u << REQUEST_SCREENSHOT)) { writeScreenshot(); - mainRequestFlags &= ~(1 << REQUEST_SCREENSHOT); + mainRequestFlags &= ~(1u << REQUEST_SCREENSHOT); } } #endif diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index d4c6620da..3bf65563f 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -437,36 +437,27 @@ void checkModelIdUnique(uint8_t index, uint8_t module) uint8_t findNextUnusedModelId(uint8_t index, uint8_t module) { - // assume 63 is the highest Model ID - // and use 64 bits - uint8_t usedModelIds[8]; + uint8_t usedModelIds[(MAX_RXNUM + 7) / 8]; memset(usedModelIds, 0, sizeof(usedModelIds)); - for (uint8_t mod_i = 0; mod_i < MAX_MODELS; mod_i++) { - - if (mod_i == index) + for (uint8_t modelIndex = 0; modelIndex < MAX_MODELS; modelIndex++) { + if (modelIndex == index) continue; - uint8_t id = modelHeaders[mod_i].modelId[module]; + uint8_t id = modelHeaders[modelIndex].modelId[module]; if (id == 0) continue; - uint8_t mask = 1; - for (uint8_t i = 1; i < (id & 7); i++) - mask <<= 1; - - usedModelIds[id >> 3] |= mask; + uint8_t mask = 1u << (id & 7u); + usedModelIds[id >> 3u] |= mask; } - uint8_t new_id = 1; - uint8_t tst_mask = 1; - for (;new_id < getMaxRxNum(module); new_id++) { - if (!(usedModelIds[new_id >> 3] & tst_mask)) { + for (uint8_t id = 1; id <= getMaxRxNum(module); id++) { + uint8_t mask = 1u << (id & 7u); + if (!(usedModelIds[id >> 3u] & mask)) { // found free ID - return new_id; + return id; } - if ((tst_mask <<= 1) == 0) - tst_mask = 1; } // failed finding something... @@ -482,7 +473,7 @@ void modelDefault(uint8_t id) memcpy(g_model.modelRegistrationID, g_eeGeneral.ownerRegistrationID, PXX2_LEN_REGISTRATION_ID); -#if defined(LUA) && defined(PCBTARANIS) //Horus uses menuModelWizard() for wizard +#if defined(LUA) && defined(PCBTARANIS) // Horus uses menuModelWizard() for wizard if (isFileAvailable(WIZARD_PATH "/" WIZARD_NAME)) { f_chdir(WIZARD_PATH); luaExec(WIZARD_NAME); @@ -492,23 +483,20 @@ void modelDefault(uint8_t id) #if defined(FRSKY_RELEASE) g_model.moduleData[INTERNAL_MODULE].type = IS_PXX2_INTERNAL_ENABLED() ? MODULE_TYPE_ISRM_PXX2 : MODULE_TYPE_XJT_PXX1; g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE); + #if defined(EEPROM) + g_model.header.modelId[INTERNAL_MODULE] = findNextUnusedModelId(id, INTERNAL_MODULE); + modelHeaders[id].modelId[INTERNAL_MODULE] = g_model.header.modelId[INTERNAL_MODULE] + #endif #endif #if defined(PCBXLITE) g_model.trainerData.mode = TRAINER_MODE_MASTER_BLUETOOTH; #endif -#if defined(EEPROM) - for (int i=0; ivalid_rfData) { + ModelCell* modelCell = modelslist.getCurrentModel(); + if (!modelCell || !modelCell->valid_rfData) { // in doubt, pretend it's unique return true; } - uint8_t modelId = mod_cell->modelId[moduleIdx]; - uint8_t type = mod_cell->moduleData[moduleIdx].type; - uint8_t rfProtocol = mod_cell->moduleData[moduleIdx].rfProtocol; + uint8_t modelId = modelCell->modelId[moduleIdx]; + uint8_t type = modelCell->moduleData[moduleIdx].type; + uint8_t rfProtocol = modelCell->moduleData[moduleIdx].rfProtocol; uint8_t additionalOnes = 0; char* curr = warn_buf; @@ -458,10 +458,10 @@ bool ModelsList::isModelIdUnique(uint8_t moduleIdx, char* warn_buf, size_t warn_ bool hit_found = false; const std::list& cats = modelslist.getCategories(); - std::list::const_iterator cat_it = cats.begin(); - for (;cat_it != cats.end(); cat_it++) { - for (ModelsCategory::const_iterator it = (*cat_it)->begin(); it != (*cat_it)->end(); it++) { - if (mod_cell == *it) + std::list::const_iterator catIt = cats.begin(); + for (;catIt != cats.end(); catIt++) { + for (ModelsCategory::const_iterator it = (*catIt)->begin(); it != (*catIt)->end(); it++) { + if (modelCell == *it) continue; if (!(*it)->valid_rfData) @@ -507,24 +507,21 @@ bool ModelsList::isModelIdUnique(uint8_t moduleIdx, char* warn_buf, size_t warn_ uint8_t ModelsList::findNextUnusedModelId(uint8_t moduleIdx) { - ModelCell* mod_cell = modelslist.getCurrentModel(); - if (!mod_cell || !mod_cell->valid_rfData) { + ModelCell * modelCell = modelslist.getCurrentModel(); + if (!modelCell || !modelCell->valid_rfData) { return 0; } - uint8_t type = mod_cell->moduleData[moduleIdx].type; - uint8_t rfProtocol = mod_cell->moduleData[moduleIdx].rfProtocol; + uint8_t type = modelCell->moduleData[moduleIdx].type; + uint8_t rfProtocol = modelCell->moduleData[moduleIdx].rfProtocol; - // assume 63 is the highest Model ID - // and use 64 bits - uint8_t usedModelIds[8]; + uint8_t usedModelIds[(MAX_RXNUM + 7) / 8]; memset(usedModelIds, 0, sizeof(usedModelIds)); - const std::list& cats = modelslist.getCategories(); - std::list::const_iterator cat_it = cats.begin(); - for (;cat_it != cats.end(); cat_it++) { - for (ModelsCategory::const_iterator it = (*cat_it)->begin(); it != (*cat_it)->end(); it++) { - if (mod_cell == *it) + const std::list & cats = modelslist.getCategories(); + for (auto catIt = cats.begin(); catIt != cats.end(); catIt++) { + for (auto it = (*catIt)->begin(); it != (*catIt)->end(); it++) { + if (modelCell == *it) continue; if (!(*it)->valid_rfData) @@ -536,25 +533,18 @@ uint8_t ModelsList::findNextUnusedModelId(uint8_t moduleIdx) (rfProtocol == (*it)->moduleData[moduleIdx].rfProtocol)) { uint8_t id = (*it)->modelId[moduleIdx]; - - uint8_t mask = 1; - for (uint8_t i = 1; i < (id & 7); i++) - mask <<= 1; - - usedModelIds[id >> 3] |= mask; + uint8_t mask = 1 << (id & 7u); + usedModelIds[id >> 3u] |= mask; } } } - uint8_t new_id = 1; - uint8_t tst_mask = 1; - for (;new_id < getMaxRxNum(moduleIdx); new_id++) { - if (!(usedModelIds[new_id >> 3] & tst_mask)) { + for (uint8_t id = 1; id <= getMaxRxNum(moduleIdx); id++) { + uint8_t mask = 1u << (id & 7u); + if (!(usedModelIds[id >> 3u] & mask)) { // found free ID - return new_id; + return id; } - if ((tst_mask <<= 1) == 0) - tst_mask = 1; } // failed finding something... From fe75834a805f0fa3d4e74309a369b6ad910d779e Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 3 Jan 2020 11:55:03 +0100 Subject: [PATCH 38/63] Missing TrainerChannels in Companion (#7245) --- .../src/firmwares/customfunctiondata.cpp | 2 + companion/src/firmwares/customfunctiondata.h | 1 + .../src/firmwares/opentx/opentxeeprom.cpp | 5 ++- companion/src/modeledit/customfunctions.cpp | 42 +++++++++---------- companion/src/releasenotesfirmwaredialog.cpp | 1 - 5 files changed, 27 insertions(+), 24 deletions(-) diff --git a/companion/src/firmwares/customfunctiondata.cpp b/companion/src/firmwares/customfunctiondata.cpp index c93e0965b..9313ace5a 100644 --- a/companion/src/firmwares/customfunctiondata.cpp +++ b/companion/src/firmwares/customfunctiondata.cpp @@ -55,6 +55,8 @@ QString CustomFunctionData::funcToString(const ModelData * model) const return tr("Trainer THR"); else if (func == FuncTrainerAIL) return tr("Trainer AIL"); + else if (func == FuncTrainerChannels) + return tr("Trainer Channels"); else if (func == FuncInstantTrim) return tr("Instant Trim"); else if (func == FuncPlaySound) diff --git a/companion/src/firmwares/customfunctiondata.h b/companion/src/firmwares/customfunctiondata.h index 2ffce6688..9150035c5 100644 --- a/companion/src/firmwares/customfunctiondata.h +++ b/companion/src/firmwares/customfunctiondata.h @@ -41,6 +41,7 @@ enum AssignFunc { FuncTrainerELE, FuncTrainerTHR, FuncTrainerAIL, + FuncTrainerChannels, FuncInstantTrim, FuncPlaySound, FuncPlayHaptic, diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 9632be9e4..21e067a2d 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -1395,6 +1395,7 @@ class CustomFunctionsConversionTable: public ConversionTable { addConversion(FuncTrainerELE, val); addConversion(FuncTrainerTHR, val); addConversion(FuncTrainerAIL, val); + addConversion(FuncTrainerChannels, val); val++; addConversion(FuncInstantTrim, val++); @@ -1515,7 +1516,7 @@ class ArmCustomFunctionField: public TransformedField { *((uint16_t *)_param) = fn.param; *((uint8_t *)(_param+3)) = fn.func - FuncOverrideCH1; } - else if (fn.func >= FuncTrainer && fn.func <= FuncTrainerAIL) { + else if (fn.func >= FuncTrainer && fn.func <= FuncTrainerChannels) { *((uint8_t *)(_param+3)) = fn.func - FuncTrainer; } else if (fn.func >= FuncSetTimer1 && fn.func <= FuncSetTimer3) { @@ -1582,7 +1583,7 @@ class ArmCustomFunctionField: public TransformedField { fn.func = AssignFunc(fn.func + index); fn.param = (int)value; } - else if (fn.func >= FuncTrainer && fn.func <= FuncTrainerAIL) { + else if (fn.func >= FuncTrainer && fn.func <= FuncTrainerChannels) { fn.func = AssignFunc(fn.func + index); fn.param = value; } diff --git a/companion/src/modeledit/customfunctions.cpp b/companion/src/modeledit/customfunctions.cpp index c30454bdc..fdba765d8 100644 --- a/companion/src/modeledit/customfunctions.cpp +++ b/companion/src/modeledit/customfunctions.cpp @@ -70,7 +70,7 @@ CustomFunctionsPanel::CustomFunctionsPanel(QWidget * parent, ModelData * model, GenericPanel(parent, model, generalSettings, firmware), functions(model ? model->customFn : generalSettings.customFn), mediaPlayerCurrent(-1), - mediaPlayer(NULL) + mediaPlayer(nullptr) { Stopwatch s1("CustomFunctionsPanel - populate"); lock = true; @@ -84,7 +84,7 @@ CustomFunctionsPanel::CustomFunctionsPanel(QWidget * parent, ModelData * model, if (!firmware->getCapability(VoicesAsNumbers)) { tracksSet = getFilesSet(getSoundsPath(generalSettings), QStringList() << "*.wav" << "*.WAV", firmware->getCapability(VoicesMaxLength)); for (int i=0; igetBoard())) { scriptsSet = getFilesSet(g.profile[g.id()].sdPath() + "/SCRIPTS/FUNCTIONS", QStringList() << "*.lua", firmware->getCapability(VoicesMaxLength)); for (int i=0; i=FuncOverrideCH1 && func<=FuncOverrideCH32) { + if (func >= FuncOverrideCH1 && func <= FuncOverrideCH32) { if (model) { int channelsMax = model->getChannelsMax(true); fswtchParam[i]->setDecimals(0); @@ -403,7 +403,7 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM | CUSTOM_FUNCTION_ENABLE; } } - else if (func==FuncLogs) { + else if (func == FuncLogs) { fswtchParam[i]->setDecimals(1); fswtchParam[i]->setMinimum(0); fswtchParam[i]->setMaximum(25.5); @@ -413,13 +413,13 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) fswtchParam[i]->setValue(cfn.param/10.0); widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM; } - else if (func>=FuncAdjustGV1 && func<=FuncAdjustGVLast) { + else if (func >= FuncAdjustGV1 && func <= FuncAdjustGVLast) { int gvidx = func - FuncAdjustGV1; if (modified) cfn.adjustMode = fswtchGVmode[i]->currentIndex(); fswtchGVmode[i]->setCurrentIndex(cfn.adjustMode); widgetsMask |= CUSTOM_FUNCTION_GV_MODE | CUSTOM_FUNCTION_ENABLE; - if (cfn.adjustMode==FUNC_ADJUST_GVAR_CONSTANT || cfn.adjustMode==FUNC_ADJUST_GVAR_INCDEC) { + if (cfn.adjustMode == FUNC_ADJUST_GVAR_CONSTANT || cfn.adjustMode == FUNC_ADJUST_GVAR_INCDEC) { if (modified) cfn.param = fswtchParam[i]->value() * model->gvarData[gvidx].multiplierSet(); if (IS_ARM(getCurrentBoard())) { @@ -454,13 +454,13 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM; } } - else if (func==FuncReset) { + else if (func == FuncReset) { if (modified) cfn.param = fswtchParamT[i]->currentData().toInt(); populateFuncParamCB(fswtchParamT[i], func, cfn.param); widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM | CUSTOM_FUNCTION_ENABLE; } - else if (func>=FuncSetTimer1 && func<=FuncSetTimer3) { + else if (func >= FuncSetTimer1 && func <= FuncSetTimer3) { if (modified) cfn.param = fswtchParamTime[i]->timeInSeconds(); RawSourceRange range = RawSource(SOURCE_TYPE_SPECIAL, func - FuncSetTimer1 + 2).getRange(model, generalSettings); @@ -468,39 +468,39 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) fswtchParamTime[i]->setTime(cfn.param); widgetsMask |= CUSTOM_FUNCTION_TIME_PARAM | CUSTOM_FUNCTION_ENABLE; } - else if (func>=FuncSetFailsafeInternalModule && func<=FuncBindExternalModule) { + else if (func >= FuncSetFailsafeInternalModule && func <= FuncBindExternalModule) { widgetsMask |= CUSTOM_FUNCTION_ENABLE; } - else if (func==FuncVolume) { + else if (func == FuncVolume) { if (modified) cfn.param = fswtchParamT[i]->currentData().toInt(); populateFuncParamCB(fswtchParamT[i], func, cfn.param); widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM | CUSTOM_FUNCTION_ENABLE; } - else if (func==FuncPlaySound || func==FuncPlayHaptic || func==FuncPlayValue || func==FuncPlayPrompt || func==FuncPlayBoth || func==FuncBackgroundMusic) { + else if (func == FuncPlaySound || func == FuncPlayHaptic || func == FuncPlayValue || func == FuncPlayPrompt || func == FuncPlayBoth || func == FuncBackgroundMusic) { if (func != FuncBackgroundMusic) { widgetsMask |= CUSTOM_FUNCTION_REPEAT; fswtchRepeat[i]->update(); } - if (func==FuncPlayValue) { + if (func == FuncPlayValue) { if (modified) cfn.param = fswtchParamT[i]->currentData().toInt(); populateFuncParamCB(fswtchParamT[i], func, cfn.param); widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM | CUSTOM_FUNCTION_REPEAT; } - else if (func==FuncPlayPrompt || func==FuncPlayBoth) { + else if (func == FuncPlayPrompt || func == FuncPlayBoth) { if (firmware->getCapability(VoicesAsNumbers)) { fswtchParam[i]->setDecimals(0); fswtchParam[i]->setSingleStep(1); fswtchParam[i]->setMinimum(0); - if (func==FuncPlayPrompt) { + if (func == FuncPlayPrompt) { widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM | CUSTOM_FUNCTION_REPEAT | CUSTOM_FUNCTION_GV_TOOGLE; } else { widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM | CUSTOM_FUNCTION_REPEAT; fswtchParamGV[i]->setChecked(false); } - fswtchParam[i]->setMaximum(func==FuncPlayBoth ? 254 : 255); + fswtchParam[i]->setMaximum(func == FuncPlayBoth ? 254 : 255); if (modified) { if (fswtchParamGV[i]->isChecked()) { fswtchParam[i]->setMinimum(1); @@ -533,7 +533,7 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) } } } - else if (func==FuncBackgroundMusic) { + else if (func == FuncBackgroundMusic) { widgetsMask |= CUSTOM_FUNCTION_FILE_PARAM; if (modified) { Helpers::getFileComboBoxValue(fswtchParamArmT[i], cfn.paramarm, firmware->getCapability(VoicesMaxLength)); @@ -543,27 +543,27 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) widgetsMask |= CUSTOM_FUNCTION_PLAY; } } - else if (func==FuncPlaySound) { + else if (func == FuncPlaySound) { if (modified) cfn.param = (uint8_t)fswtchParamT[i]->currentIndex(); populateFuncParamCB(fswtchParamT[i], func, cfn.param); widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM; } - else if (func==FuncPlayHaptic) { + else if (func == FuncPlayHaptic) { if (modified) cfn.param = (uint8_t)fswtchParamT[i]->currentIndex(); populateFuncParamCB(fswtchParamT[i], func, cfn.param); widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM; } } - else if (func==FuncPlayScript) { + else if (func == FuncPlayScript) { widgetsMask |= CUSTOM_FUNCTION_FILE_PARAM; if (modified) { Helpers::getFileComboBoxValue(fswtchParamArmT[i], cfn.paramarm, 8); } Helpers::populateFileComboBox(fswtchParamArmT[i], scriptsSet, cfn.paramarm); } - else if (func==FuncBacklight && IS_TARANIS_PLUS(getCurrentBoard())) { + else if (func == FuncBacklight && IS_TARANIS_PLUS(getCurrentBoard())) { if (modified) cfn.param = (uint8_t)fswtchBLcolor[i]->value(); fswtchBLcolor[i]->setValue(cfn.param); diff --git a/companion/src/releasenotesfirmwaredialog.cpp b/companion/src/releasenotesfirmwaredialog.cpp index bcce6709c..753599c52 100644 --- a/companion/src/releasenotesfirmwaredialog.cpp +++ b/companion/src/releasenotesfirmwaredialog.cpp @@ -50,4 +50,3 @@ void ReleaseNotesFirmwareDialog::replyFinished(QNetworkReply * reply) ui->textEditor->setOpenExternalLinks(true); reply->deleteLater(); } - From a697706a4e8caad352a9af7f4fb411d8db9b0812 Mon Sep 17 00:00:00 2001 From: 3djc Date: Fri, 3 Jan 2020 11:55:59 +0100 Subject: [PATCH 39/63] Fix to some sdcard sync issues ? (#7258) --- companion/src/process_sync.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/companion/src/process_sync.h b/companion/src/process_sync.h index 67a139791..4fffc4d66 100644 --- a/companion/src/process_sync.h +++ b/companion/src/process_sync.h @@ -85,7 +85,7 @@ class SyncProcess : public QObject maxFileSize = 2 * 1024 * 1024; logLevel = QtWarningMsg; flags = OPT_RECURSIVE; - dirFilterFlags = QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::Readable; + dirFilterFlags = QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot; } friend inline QDebug operator<<(QDebug debug, const SyncOptions &o) { From 3e4c67b273375254793901f3d9766186319aef72 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 3 Jan 2020 12:01:15 +0100 Subject: [PATCH 40/63] Code cleaning --- radio/src/targets/taranis/board.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index 54127d6d1..1112ea0e9 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -529,15 +529,19 @@ enum Analogs { #define NUM_MOUSE_ANALOGS 0 #define STORAGE_NUM_MOUSE_ANALOGS 0 +#if defined(PCBXLITE) + #define NUM_TRIMS_KEYS 4 +#else + #define NUM_TRIMS_KEYS (NUM_TRIMS * 2) +#endif + #if defined(STICKS_PWM) #define NUM_PWMSTICKS 4 #define STICKS_PWM_ENABLED() (!hardwareOptions.sticksPwmDisabled) void sticksPwmInit(); void sticksPwmRead(uint16_t * values); extern volatile uint32_t pwm_interrupt_count; // TODO => reusable buffer (boot section) - #define NUM_TRIMS_KEYS 4 #else - #define NUM_TRIMS_KEYS 8 #define STICKS_PWM_ENABLED() false #endif From abc70f1a5ac8cf04284f33f25e5a01ceb987a9ae Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Fri, 3 Jan 2020 12:16:26 +0100 Subject: [PATCH 41/63] Buttons for trims T5 and T6 were not working in simu (fix #7167) (#7243) Buttons for trims T5 and T6 were not working in simu (fix #7167) --- radio/src/dataconstants.h | 2 +- radio/src/simu.cpp | 2 +- radio/src/targets/simu/simpgmspace.cpp | 20 ++++++++++---------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 1af8efdb6..c8e5b3ca0 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -581,7 +581,7 @@ enum SwitchSources { #define SWSRC_TRAINER SWSRC_LAST_SWITCH, #endif -#define SWSRC_LAST_TRIM (SWSRC_FIRST_TRIM + 2*NUM_TRIMS - 1) +#define SWSRC_LAST_TRIM (SWSRC_FIRST_TRIM + 2 * NUM_TRIMS - 1) enum MixSources { MIXSRC_NONE, diff --git a/radio/src/simu.cpp b/radio/src/simu.cpp index 80ad85e80..293170127 100644 --- a/radio/src/simu.cpp +++ b/radio/src/simu.cpp @@ -297,7 +297,7 @@ void OpenTxSim::updateKeysAndSwitches(bool start) static FXuint trimKeys[] = { KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, KEY_F12 }; #endif - for (unsigned i=0; i<2*NUM_TRIMS; i++) { + for (unsigned i=0; igetKeyState(trimKeys[i])); } diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index 12d5342d7..4e1cdf535 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -149,7 +149,7 @@ void simuSetKey(uint8_t key, bool state) keysStates[key] = state; } -bool trimsStates[NUM_TRIMS * 2] = { false }; +bool trimsStates[NUM_TRIMS_KEYS] = { false }; void simuSetTrim(uint8_t trim, bool state) { // TRACE("simuSetTrim(%d, %d)", trim, state); @@ -486,17 +486,17 @@ void pwrOff() void readKeysAndTrims() { uint8_t index = 0; - uint32_t keys_input = readKeys(); - for (uint8_t i = 1; i != uint8_t(1 << TRM_BASE); i <<= 1) { - keys[index++].input(keys_input & i); + auto keysInput = readKeys(); + for (auto mask = (1 << 0); mask < (1 << TRM_BASE); mask <<= 1) { + keys[index++].input(keysInput & mask); } - uint32_t trims_input = readTrims(); - for (uint8_t i = 1; i != uint8_t(1 << 8); i <<= 1) { - keys[index++].input(trims_input & i); + auto trimsInput = readTrims(); + for (auto mask = (1 << 0); mask < (1 << NUM_TRIMS_KEYS); mask <<= 1) { + keys[index++].input(trimsInput & mask); } - if (keys_input || trims_input) { + if (keysInput || trimsInput) { backlightOn(); } } @@ -515,7 +515,7 @@ uint32_t readKeys() { uint32_t result = 0; - for (int i=0; i Date: Fri, 3 Jan 2020 12:18:52 +0100 Subject: [PATCH 42/63] Rework pwr_driver (#7212) PWR driver rework --- .../arm/stm32/bootloader/CMakeLists.txt | 2 +- .../arm/stm32}/pwr_driver.cpp | 30 +++-- radio/src/targets/horus/CMakeLists.txt | 2 +- radio/src/targets/horus/hal.h | 2 + radio/src/targets/horus/pwr_driver.cpp | 109 ------------------ radio/src/targets/taranis/CMakeLists.txt | 10 +- radio/src/targets/taranis/board.h | 16 +-- radio/src/targets/taranis/hal.h | 30 ++--- 8 files changed, 56 insertions(+), 145 deletions(-) rename radio/src/targets/{taranis => common/arm/stm32}/pwr_driver.cpp (89%) delete mode 100644 radio/src/targets/horus/pwr_driver.cpp diff --git a/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt b/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt index 5bc11cc2d..86f4594f9 100644 --- a/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt +++ b/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt @@ -75,7 +75,7 @@ set(BOOTLOADER_SRC ../../../../../targets/${TARGET_DIR}/keys_driver.cpp ../../../../../targets/${TARGET_DIR}/diskio.cpp ../../../../../targets/${TARGET_DIR}/board.cpp - ../../../../../targets/${TARGET_DIR}/pwr_driver.cpp + ../pwr_driver.cpp ../../../../../targets/${TARGET_DIR}/bootloader/boot_menu.cpp ../usbd_usr.cpp ../usbd_storage_msd.cpp diff --git a/radio/src/targets/taranis/pwr_driver.cpp b/radio/src/targets/common/arm/stm32/pwr_driver.cpp similarity index 89% rename from radio/src/targets/taranis/pwr_driver.cpp rename to radio/src/targets/common/arm/stm32/pwr_driver.cpp index 997937d9f..751279da8 100644 --- a/radio/src/targets/taranis/pwr_driver.cpp +++ b/radio/src/targets/common/arm/stm32/pwr_driver.cpp @@ -23,17 +23,14 @@ void pwrInit() { GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - // Board PWR - GPIO_InitStructure.GPIO_Pin = PWR_ON_GPIO_PIN; - GPIO_Init(PWR_ON_GPIO, &GPIO_InitStructure); - #if defined(INTMODULE_BOOTCMD_GPIO) - GPIO_SetBits(INTMODULE_BOOTCMD_GPIO, INTMODULE_BOOTCMD_GPIO_PIN); + INIT_INTMODULE_BOOTCMD_PIN(); GPIO_InitStructure.GPIO_Pin = INTMODULE_BOOTCMD_GPIO_PIN; GPIO_Init(INTMODULE_BOOTCMD_GPIO, &GPIO_InitStructure); #endif @@ -54,23 +51,32 @@ void pwrInit() GPIO_InitStructure.GPIO_Pin = PWR_SWITCH_GPIO_PIN; GPIO_Init(PWR_SWITCH_GPIO, &GPIO_InitStructure); +#if defined(PCBREV_HARDCODED) + hardwareOptions.pcbrev = PCBREV_HARDCODED; +#elif defined(PCBREV_GPIO_PIN) + GPIO_ResetBits(PCBREV_GPIO, PCBREV_GPIO_PIN); + GPIO_InitStructure.GPIO_Pin = PCBREV_GPIO_PIN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; + GPIO_Init(PCBREV_GPIO, &GPIO_InitStructure); + hardwareOptions.pcbrev = PCBREV_VALUE(); +#endif + #if defined(TRAINER_DETECT_GPIO_PIN) GPIO_InitStructure.GPIO_Pin = TRAINER_DETECT_GPIO_PIN; GPIO_Init(TRAINER_DETECT_GPIO, &GPIO_InitStructure); #endif +#if defined(SD_PRESENT_GPIO_PIN) + GPIO_ResetBits(SD_PRESENT_GPIO, SD_PRESENT_GPIO_PIN); + GPIO_InitStructure.GPIO_Pin = SD_PRESENT_GPIO_PIN; + GPIO_Init(SD_PRESENT_GPIO, &GPIO_InitStructure); +#endif + #if defined(INTMODULE_USART) && defined(TRAINER_MODULE_CPPM_GPIO_PIN) GPIO_SetBits(TRAINER_MODULE_CPPM_GPIO, TRAINER_MODULE_CPPM_GPIO_PIN); GPIO_InitStructure.GPIO_Pin = TRAINER_MODULE_CPPM_GPIO_PIN; GPIO_Init(TRAINER_MODULE_CPPM_GPIO, &GPIO_InitStructure); #endif - -#if defined(PCBREV_GPIO_PIN) - GPIO_ResetBits(PCBREV_GPIO, PCBREV_GPIO_PIN); - GPIO_InitStructure.GPIO_Pin = PCBREV_GPIO_PIN; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; - GPIO_Init(PCBREV_GPIO, &GPIO_InitStructure); -#endif } void pwrOn() diff --git a/radio/src/targets/horus/CMakeLists.txt b/radio/src/targets/horus/CMakeLists.txt index 987e4e81f..ef9b75c42 100644 --- a/radio/src/targets/horus/CMakeLists.txt +++ b/radio/src/targets/horus/CMakeLists.txt @@ -207,7 +207,7 @@ set(FIRMWARE_TARGET_SRC ${LCD_DRIVER} board.cpp backlight_driver.cpp - pwr_driver.cpp + ../common/arm/stm32/pwr_driver.cpp sdram_driver.c startup_stm32f42_43xxx.s ../common/arm/stm32/sdio_sd.c diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index 38f017bcb..6f226d7b9 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -616,6 +616,7 @@ #define INTMODULE_BOOTCMD_GPIO GPIOI #define INTMODULE_BOOTCMD_GPIO_PIN GPIO_Pin_9 // PI.09 #endif +#define INIT_INTMODULE_BOOTCMD_PIN() GPIO_ResetBits(INTMODULE_BOOTCMD_GPIO, INTMODULE_BOOTCMD_GPIO_PIN); #if defined(PCBX10) || PCBREV >= 13 #define INTMODULE_RCC_APB1Periph RCC_APB1Periph_TIM2 #define INTMODULE_RCC_APB2Periph RCC_APB2Periph_USART1 @@ -635,6 +636,7 @@ // External Module #define EXTMODULE_PWR_GPIO GPIOB #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_3 // PB.03 +#define EXTERNAL_MODULE_PWR_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) #if defined(PCBX10) && defined(PCBREV_EXPRESS) #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1) #define EXTMODULE_RCC_APB1Periph (RCC_APB1Periph_TIM2 | RCC_APB1Periph_USART3) diff --git a/radio/src/targets/horus/pwr_driver.cpp b/radio/src/targets/horus/pwr_driver.cpp deleted file mode 100644 index 2b08f2b2b..000000000 --- a/radio/src/targets/horus/pwr_driver.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) OpenTX - * - * Based on code named - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program 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. - */ - -#include "board.h" -#include "storage/rtc_backup.h" - -void pwrInit() -{ - GPIO_InitTypeDef GPIO_InitStructure; - - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - - // Internal module PWR - GPIO_ResetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN); - GPIO_InitStructure.GPIO_Pin = INTMODULE_PWR_GPIO_PIN; - GPIO_Init(INTMODULE_PWR_GPIO, &GPIO_InitStructure); - - // External module PWR - GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN); - GPIO_InitStructure.GPIO_Pin = EXTMODULE_PWR_GPIO_PIN; - GPIO_Init(EXTMODULE_PWR_GPIO, &GPIO_InitStructure); - -#if defined(INTMODULE_BOOTCMD_GPIO) - GPIO_ResetBits(INTMODULE_BOOTCMD_GPIO, INTMODULE_BOOTCMD_GPIO_PIN); - GPIO_InitStructure.GPIO_Pin = INTMODULE_BOOTCMD_GPIO_PIN; - GPIO_Init(INTMODULE_BOOTCMD_GPIO, &GPIO_InitStructure); -#endif - - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; - - // PWR SWITCH - GPIO_InitStructure.GPIO_Pin = PWR_SWITCH_GPIO_PIN; - GPIO_Init(PWR_SWITCH_GPIO, &GPIO_InitStructure); - -#if defined(PCBREV_GPIO_PIN) - // PCBREV - GPIO_InitStructure.GPIO_Pin = PCBREV_GPIO_PIN; - GPIO_Init(PCBREV_GPIO, &GPIO_InitStructure); - hardwareOptions.pcbrev = PCBREV_VALUE(); -#endif - - // SD-DETECT PIN - GPIO_ResetBits(SD_PRESENT_GPIO, SD_PRESENT_GPIO_PIN); - GPIO_InitStructure.GPIO_Pin = SD_PRESENT_GPIO_PIN; - GPIO_Init(SD_PRESENT_GPIO, &GPIO_InitStructure); - - // TRAINER DETECT PIN - GPIO_InitStructure.GPIO_Pin = TRAINER_DETECT_GPIO_PIN; - GPIO_Init(TRAINER_DETECT_GPIO, &GPIO_InitStructure); -} - -void pwrOn() -{ - // we keep the init of the PIN to have pwrOn as quick as possible - - GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = PWR_ON_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_Init(PWR_ON_GPIO, &GPIO_InitStructure); - - GPIO_SetBits(PWR_ON_GPIO, PWR_ON_GPIO_PIN); -} - -void pwrOff() -{ - GPIO_ResetBits(PWR_ON_GPIO, PWR_ON_GPIO_PIN); -} - -bool pwrPressed() -{ - return GPIO_ReadInputDataBit(PWR_ON_GPIO, PWR_SWITCH_GPIO_PIN) == Bit_RESET; -} - -void pwrResetHandler() -{ - RCC->AHB1ENR |= PWR_RCC_AHB1Periph; - - // these two NOPs are needed (see STM32F errata sheet) before the peripheral - // register can be written after the peripheral clock was enabled - __ASM volatile ("nop"); - __ASM volatile ("nop"); - - if (WAS_RESET_BY_WATCHDOG_OR_SOFTWARE()) { - pwrOn(); - } -} diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index f2cc53add..db593064e 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -160,6 +160,14 @@ elseif(PCB STREQUAL X7) set(BLUETOOTH YES) add_definitions(-DBLUETOOTH_PROBE) set(ROTARY_ENCODER YES) + if(DEFINED PCBREV_HARDCODED) + # This *can* be used to prevent messing with PA14 (SWCLK), so stlink can be used + # without interruptions. + if(NOT ${PCBREV_HARDCODED} MATCHES "^[0-1]$") + message(FATAL_ERROR "PCBREV_HARDCODED must be 0 or 1, not '${PCBREV_HARDCODED}'") + endif() + add_definitions(-DPCBREV_HARDCODED=${PCBREV_HARDCODED}) + endif() endif() elseif(PCB STREQUAL X9LITE) option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" OFF) @@ -379,7 +387,7 @@ set(FIRMWARE_TARGET_SRC ${LCD_DRIVER} board.cpp i2c_driver.cpp - pwr_driver.cpp + ../common/arm/stm32/pwr_driver.cpp ../common/arm/loadboot.cpp ) diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index 1112ea0e9..b10a13186 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -61,6 +61,13 @@ void boardOff(); void init2MhzTimer(); void init5msTimer(); +// PCBREV driver +enum { + // X7 + PCBREV_X7_STD = 0, + PCBREV_X7_40 = 1, +}; + // SD driver #define BLOCK_SIZE 512 /* Block Size in Bytes */ #if !defined(SIMU) || defined(SIMU_DISKIO) @@ -545,16 +552,11 @@ enum Analogs { #define STICKS_PWM_ENABLED() false #endif -#if NUM_PWMSTICKS > 0 PACK(typedef struct { + uint8_t pcbrev:2; uint8_t sticksPwmDisabled:1; uint8_t pxx2Enabled:1; }) HardwareOptions; -#else -PACK(typedef struct { - uint8_t pxx2Enabled:1; -}) HardwareOptions; -#endif extern HardwareOptions hardwareOptions; @@ -705,7 +707,7 @@ void telemetryPortInvertedInit(uint32_t baudrate); #if defined(PCBX7ACCESS) #define HAS_SPORT_UPDATE_CONNECTOR() true #elif defined(PCBX7) - #define IS_PCBREV_40() (GPIO_ReadInputDataBit(PCBREV_GPIO, PCBREV_GPIO_PIN) == Bit_SET) + #define IS_PCBREV_40() (hardwareOptions.pcbrev == PCBREV_X7_40) #define HAS_SPORT_UPDATE_CONNECTOR() IS_PCBREV_40() #elif defined(SPORT_UPDATE_PWR_GPIO) #define HAS_SPORT_UPDATE_CONNECTOR() true diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index 0217d173a..2a7ca0ad9 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -986,23 +986,24 @@ #define INTMODULE_PWR_GPIO GPIOD #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_9 // PD.09 #endif - #define INTMODULE_GPIO GPIOB - #define INTMODULE_TX_GPIO_PIN GPIO_Pin_6 // PB.06 - #define INTMODULE_RX_GPIO_PIN GPIO_Pin_7 // PB.07 - #define INTMODULE_GPIO_PinSource_TX GPIO_PinSource6 - #define INTMODULE_GPIO_PinSource_RX GPIO_PinSource7 - #define INTMODULE_USART USART1 - #define INTMODULE_GPIO_AF GPIO_AF_USART1 - #define INTMODULE_USART_IRQHandler USART1_IRQHandler - #define INTMODULE_USART_IRQn USART1_IRQn - #define INTMODULE_DMA_STREAM DMA2_Stream7 + #define INTMODULE_GPIO GPIOB + #define INTMODULE_TX_GPIO_PIN GPIO_Pin_6 // PB.06 + #define INTMODULE_RX_GPIO_PIN GPIO_Pin_7 // PB.07 + #define INTMODULE_GPIO_PinSource_TX GPIO_PinSource6 + #define INTMODULE_GPIO_PinSource_RX GPIO_PinSource7 + #define INTMODULE_USART USART1 + #define INTMODULE_GPIO_AF GPIO_AF_USART1 + #define INTMODULE_USART_IRQHandler USART1_IRQHandler + #define INTMODULE_USART_IRQn USART1_IRQn + #define INTMODULE_DMA_STREAM DMA2_Stream7 #define INTMODULE_DMA_STREAM_IRQ DMA2_Stream7_IRQn #define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream7_IRQHandler - #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF7 - #define INTMODULE_DMA_CHANNEL DMA_Channel_4 + #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF7 + #define INTMODULE_DMA_CHANNEL DMA_Channel_4 #if defined(PCBXLITES) - #define INTMODULE_BOOTCMD_GPIO GPIOC - #define INTMODULE_BOOTCMD_GPIO_PIN GPIO_Pin_8 // PC.08 + #define INTMODULE_BOOTCMD_GPIO GPIOC + #define INTMODULE_BOOTCMD_GPIO_PIN GPIO_Pin_8 // PC.08 + #define INIT_INTMODULE_BOOTCMD_PIN() GPIO_SetBits(INTMODULE_BOOTCMD_GPIO, INTMODULE_BOOTCMD_GPIO_PIN); #endif #elif defined(RADIO_X9DP2019) #define INTMODULE_RCC_APB1Periph 0 @@ -1374,6 +1375,7 @@ #define PCBREV_RCC_AHB1Periph RCC_AHB1Periph_GPIOA #define PCBREV_GPIO GPIOA #define PCBREV_GPIO_PIN GPIO_Pin_14 // PA.14 + #define PCBREV_VALUE() GPIO_ReadInputDataBit(PCBREV_GPIO, PCBREV_GPIO_PIN) #else #define PCBREV_RCC_AHB1Periph 0 #endif From cf7e45d7cd810a3edc0471b02b58b6df6229f87d Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 3 Jan 2020 12:32:14 +0100 Subject: [PATCH 43/63] #7210 merged (thanks Fiam) --- radio/src/opentx.cpp | 8 ++++++++ radio/src/opentx.h | 2 +- radio/src/syscalls.c | 17 ++++++++--------- radio/src/targets/horus/board.cpp | 8 -------- 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 3bf65563f..5805f3161 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1979,12 +1979,20 @@ void opentxInit() WDG_ENABLE(WDG_DURATION); } +#if defined(SEMIHOSTING) +extern "C" void initialise_monitor_handles(); +#endif + #if defined(SIMU) void simuMain() #else int main() #endif { +#if defined(SEMIHOSTING) + initialise_monitor_handles(); +#endif + #if defined(STM32) TRACE("reusableBuffer: modelSel=%d, moduleSetup=%d, calib=%d, sdManager=%d, hardwareAndSettings=%d, spectrumAnalyser=%d, usb=%d", sizeof(reusableBuffer.modelsel), diff --git a/radio/src/opentx.h b/radio/src/opentx.h index addf87c1a..f7e0b411f 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -481,7 +481,7 @@ extern uint8_t flightModeTransitionLast; #if defined(SIMU) inline int availableMemory() { return 1000; } -#elif !defined(SIMU) +#else extern unsigned char *heap; extern int _end; extern int _heap_end; diff --git a/radio/src/syscalls.c b/radio/src/syscalls.c index b80ae58e9..369566877 100644 --- a/radio/src/syscalls.c +++ b/radio/src/syscalls.c @@ -73,7 +73,7 @@ extern int _close(int file) extern int _fstat(int file, struct stat * st) { - st->st_mode = S_IFCHR ; + st->st_mode = S_IFCHR; return 0; } @@ -97,6 +97,12 @@ extern int _write(int file, char *ptr, int len) return 0; } +extern int _getpid() +{ + return -1; +} +#endif + extern void _exit(int status) { TRACE("_exit(%d)", status); @@ -105,12 +111,5 @@ extern void _exit(int status) extern void _kill(int pid, int sig) { - return ; + return; } - -extern int _getpid() -{ - return -1 ; -} -#endif - diff --git a/radio/src/targets/horus/board.cpp b/radio/src/targets/horus/board.cpp index 048817c69..ac6e4e1f8 100644 --- a/radio/src/targets/horus/board.cpp +++ b/radio/src/targets/horus/board.cpp @@ -41,10 +41,6 @@ void watchdogInit(unsigned int duration) IWDG->KR = 0xCCCC; // start } -#if defined(SEMIHOSTING) -extern "C" void initialise_monitor_handles(); -#endif - #if defined(PCBX10) && !defined(RADIO_T16) void sportUpdateInit() { @@ -70,10 +66,6 @@ void sportUpdatePowerOff() void boardInit() { -#if defined(SEMIHOSTING) - initialise_monitor_handles(); -#endif - RCC_AHB1PeriphClockCmd(PWR_RCC_AHB1Periph | PCBREV_RCC_AHB1Periph | LED_RCC_AHB1Periph | From 653d260a608c8af01a05bc67315c317164cb669f Mon Sep 17 00:00:00 2001 From: 3djc Date: Fri, 3 Jan 2020 13:21:26 +0100 Subject: [PATCH 44/63] Update companion multi parts to bring in line with radio (#7237) --- companion/src/firmwares/moduledata.h | 4 +++- companion/src/firmwares/multiprotocols.cpp | 9 ++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/companion/src/firmwares/moduledata.h b/companion/src/firmwares/moduledata.h index 6d6795c58..caeaad833 100644 --- a/companion/src/firmwares/moduledata.h +++ b/companion/src/firmwares/moduledata.h @@ -117,7 +117,9 @@ enum MultiModuleRFProtocols { MODULE_SUBTYPE_MULTI_SCANNER, MODULE_SUBTYPE_MULTI_FRSKYX_RX, MODULE_SUBTYPE_MULTI_AFHDS2A_RX, - MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_AFHDS2A_RX + MODULE_SUBTYPE_MULTI_HOTT, + MODULE_SUBTYPE_MULTI_FX816, + MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_FX816 }; enum TrainerProtocol { diff --git a/companion/src/firmwares/multiprotocols.cpp b/companion/src/firmwares/multiprotocols.cpp index f1b37bae0..18b7035a9 100644 --- a/companion/src/firmwares/multiprotocols.cpp +++ b/companion/src/firmwares/multiprotocols.cpp @@ -72,6 +72,8 @@ static const QStringList STR_SUBTYPE_POTENSIC {"A20 Firefly"}; static const QStringList STR_SUBTYPE_ZSX {"JJRC ZSX-280"}; static const QStringList STR_SUBTYPE_FLYZONE {"FZ-410 TX"}; static const QStringList STR_SUBTYPE_FRSKYX_RX {"D16 FCC", "D16 LBT"}; +static const QStringList STR_SUBTYPE_FX816 {"P38"}; +static const QStringList STR_SUBTYPE_ESKY150 {"4CH", "7CH"}; static const QStringList NO_SUBTYPE {STR_MULTI_DEFAULT}; @@ -118,6 +120,11 @@ const Multiprotocols multiProtocols { {MODULE_SUBTYPE_MULTI_ZSX, 0, false, STR_SUBTYPE_ZSX, nullptr}, {MODULE_SUBTYPE_MULTI_FLYZONE, 0, false, STR_SUBTYPE_FLYZONE, nullptr}, {MODULE_SUBTYPE_MULTI_FRSKYX_RX, 1, false, STR_SUBTYPE_FRSKYX_RX, STR_MULTI_RFTUNE}, + {MODULE_SUBTYPE_MULTI_ESky, 0, false, NO_SUBTYPE, nullptr}, + {MODULE_SUBTYPE_MULTI_J6PRO, 0, false, NO_SUBTYPE, nullptr}, + {MODULE_SUBTYPE_MULTI_ESKY150, 1, false, STR_SUBTYPE_ESKY150, nullptr}, + {MODULE_SUBTYPE_MULTI_FX816, 0, false, STR_SUBTYPE_FX816, nullptr}, + {MODULE_SUBTYPE_MULTI_HOTT, 0, true, NO_SUBTYPE, STR_MULTI_RFTUNE}, {MM_RF_CUSTOM_SELECTED, 7, true, STR_SUBTYPE_CUSTOM, STR_MULTI_OPTION}, // Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff) @@ -160,7 +167,7 @@ QString Multiprotocols::protocolToString(int protocol, bool custom) "Bayang", "ESky", "MT99XX", "MJXQ", "Shenqi", "FY326", "SFHSS", "J6 PRO","FQ777","Assan","Hontai","Open LRS", "FlySky AFHDS2A", "Q2x2", "Walkera", "Q303", "GW008", "DM002", "Cabell", "ESky 150", "H8 3D", "Corona", "CFlie", "Hitec", "Wfly", "Bugs", "Bugs Mini", "Traxxas", "NCC-1701-A", "E01X", "WL Heli V911S", "GD00X", "Volantex V761", - "KFPlan KF606", "Redpine", "Potensic", "ZXS", "FlyZone", "Scanner", "FrSky RX", "FlySky AFHDS2A RX" + "KFPlan KF606", "Redpine", "Potensic", "ZXS", "FlyZone", "Scanner", "FrSky RX", "FlySky AFHDS2A RX", "HoTT", "Fx816" }); if (protocol == MM_RF_CUSTOM_SELECTED || custom) From 27fad646bd7e22e8a6d133bd86a529549c3ab998 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 4 Jan 2020 00:30:31 +0100 Subject: [PATCH 45/63] Update CREDITS.txt --- CREDITS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.txt b/CREDITS.txt index b28f50d0e..ce69f45ad 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -1681,3 +1681,4 @@ Outward Ideas Sylvie Le Madec James Houck (monthly) Frank Steinmetz +Gary Garland From dc3e9b41539de7323e580cca47d159415a14bf2d Mon Sep 17 00:00:00 2001 From: 3djc Date: Mon, 6 Jan 2020 09:07:46 +0100 Subject: [PATCH 46/63] Lets pretend it never happened... (#7271) --- companion/src/generaledit/generalsetup.cpp | 4 ++-- companion/src/generaledit/generalsetup.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/companion/src/generaledit/generalsetup.cpp b/companion/src/generaledit/generalsetup.cpp index 5e1bcd13c..38db4d31a 100644 --- a/companion/src/generaledit/generalsetup.cpp +++ b/companion/src/generaledit/generalsetup.cpp @@ -750,11 +750,11 @@ void GeneralSetupPanel::on_blAlarm_ChkB_stateChanged() emit modified(); } -void GeneralSetupPanel::on_ownerID_editingFinished() +void GeneralSetupPanel::on_registrationId_editingFinished() { //copy ownerID back to generalSettings.registrationId QByteArray array = ui->registrationId->text().toLocal8Bit(); - strncpy(generalSettings.registrationId, "pafleraf", 9); + strncpy(generalSettings.registrationId, array, 8); generalSettings.registrationId[8] = '\0'; emit modified(); } diff --git a/companion/src/generaledit/generalsetup.h b/companion/src/generaledit/generalsetup.h index 53a1286eb..34aeaaa71 100644 --- a/companion/src/generaledit/generalsetup.h +++ b/companion/src/generaledit/generalsetup.h @@ -87,7 +87,7 @@ class GeneralSetupPanel : public GeneralPanel void on_vBatMinDSB_editingFinished(); void on_vBatMaxDSB_editingFinished(); void on_contrastSB_editingFinished(); - void on_ownerID_editingFinished(); + void on_registrationId_editingFinished(); void on_pwrOnDelay_valueChanged(); void on_pwrOffDelay_valueChanged(); From 39788e1a788898c302fa756b7376e60c2c73de90 Mon Sep 17 00:00:00 2001 From: 3djc Date: Mon, 6 Jan 2020 09:09:00 +0100 Subject: [PATCH 47/63] Fix display of more the 7 tools in BW screens (#7270) --- radio/src/gui/common/stdlcd/radio_tools.cpp | 23 +++++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/radio/src/gui/common/stdlcd/radio_tools.cpp b/radio/src/gui/common/stdlcd/radio_tools.cpp index b2d13cba5..478c052b3 100644 --- a/radio/src/gui/common/stdlcd/radio_tools.cpp +++ b/radio/src/gui/common/stdlcd/radio_tools.cpp @@ -25,15 +25,20 @@ extern uint8_t g_moduleIdx; bool addRadioTool(uint8_t index, const char * label) { - int8_t sub = menuVerticalPosition - HEADER_LINE; - LcdFlags attr = (sub == index ? INVERS : 0); - coord_t y = MENU_HEADER_HEIGHT + 1 + index * FH; - lcdDrawNumber(3, y, index + 1, LEADING0|LEFT, 2); - lcdDrawText(3*FW, y, label, (sub == index ? INVERS : 0)); - if (attr && s_editMode > 0) { - s_editMode = 0; - killAllEvents(); - return true; + if (index >= menuVerticalOffset) { + uint8_t lineIndex = index - menuVerticalOffset; + if (lineIndex < NUM_BODY_LINES) { + int8_t sub = menuVerticalPosition - HEADER_LINE; + LcdFlags attr = (sub == index ? INVERS : 0); + coord_t y = MENU_HEADER_HEIGHT + lineIndex * FH; + lcdDrawNumber(3, y, index + 1, LEADING0 | LEFT, 2); + lcdDrawText(3 * FW, y, label, (sub == index ? INVERS : 0)); + if (attr && s_editMode > 0) { + s_editMode = 0; + killAllEvents(); + return true; + } + } } return false; } From 89510d26c95dee52ee76684d917dfb737a18eaae Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 6 Jan 2020 09:21:06 +0100 Subject: [PATCH 48/63] Cosmetics --- radio/src/opentx.cpp | 2 +- radio/src/telemetry/telemetry.h | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 5805f3161..68b142b24 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -485,7 +485,7 @@ void modelDefault(uint8_t id) g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE); #if defined(EEPROM) g_model.header.modelId[INTERNAL_MODULE] = findNextUnusedModelId(id, INTERNAL_MODULE); - modelHeaders[id].modelId[INTERNAL_MODULE] = g_model.header.modelId[INTERNAL_MODULE] + modelHeaders[id].modelId[INTERNAL_MODULE] = g_model.header.modelId[INTERNAL_MODULE]; #endif #endif diff --git a/radio/src/telemetry/telemetry.h b/radio/src/telemetry/telemetry.h index 0c0a1c969..a2feefd48 100644 --- a/radio/src/telemetry/telemetry.h +++ b/radio/src/telemetry/telemetry.h @@ -105,17 +105,19 @@ void frskyDSetDefault(int index, uint16_t id); extern uint8_t telemetryProtocol; #if defined (MULTIMODULE) -#define IS_D16_MULTI(module) ((g_model.moduleData[module].getMultiProtocol() == MODULE_SUBTYPE_MULTI_FRSKY) && (g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16 || g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_8CH || g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_LBT || g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_LBT_8CH)) -#define IS_HOTT_MULTI(module) (g_model.moduleData[module].getMultiProtocol() == MODULE_SUBTYPE_MULTI_HOTT) -#if defined(HARDWARE_INTERNAL_MODULE) -#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT || (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE && (IS_D16_MULTI(INTERNAL_MODULE)||IS_D16_MULTI(EXTERNAL_MODULE)))) + #define IS_D16_MULTI(module) ((g_model.moduleData[module].getMultiProtocol() == MODULE_SUBTYPE_MULTI_FRSKY) && (g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16 || g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_8CH || g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_LBT || g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_LBT_8CH)) + #define IS_HOTT_MULTI(module) (g_model.moduleData[module].getMultiProtocol() == MODULE_SUBTYPE_MULTI_HOTT) + #if defined(HARDWARE_INTERNAL_MODULE) + #define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT || (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE && (IS_D16_MULTI(INTERNAL_MODULE)||IS_D16_MULTI(EXTERNAL_MODULE)))) + #else + #define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT || (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE && IS_D16_MULTI(EXTERNAL_MODULE))) + #endif #else -#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT || (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE && IS_D16_MULTI(EXTERNAL_MODULE))) + #define IS_D16_MULTI(module) false + #define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT) #endif -#else -#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT) -#endif -#define IS_SPEKTRUM_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_SPEKTRUM) + +#define IS_SPEKTRUM_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_SPEKTRUM) #if defined(PCBTARANIS) || defined(PCBHORUS) inline bool isSportLineUsedByInternalModule() From d1255434ed662fe3fc034c79f9a5ecb6de64f2b4 Mon Sep 17 00:00:00 2001 From: 3djc Date: Mon, 6 Jan 2020 09:24:53 +0100 Subject: [PATCH 49/63] Compile fix --- radio/src/telemetry/telemetry.h | 1 + 1 file changed, 1 insertion(+) diff --git a/radio/src/telemetry/telemetry.h b/radio/src/telemetry/telemetry.h index a2feefd48..9a6872e5a 100644 --- a/radio/src/telemetry/telemetry.h +++ b/radio/src/telemetry/telemetry.h @@ -114,6 +114,7 @@ extern uint8_t telemetryProtocol; #endif #else #define IS_D16_MULTI(module) false + #define IS_HOTT_MULTI(module) false #define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT) #endif From d9f8b32a645dd533457ae8676734fde72656d989 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 6 Jan 2020 09:45:09 +0100 Subject: [PATCH 50/63] Wrong comment --- radio/src/sdcard.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/sdcard.h b/radio/src/sdcard.h index a37476d3a..98dff0e03 100644 --- a/radio/src/sdcard.h +++ b/radio/src/sdcard.h @@ -141,7 +141,7 @@ const char * getBasename(const char * path); #elif defined(PCBX7) #define OTX_FOURCC 0x3678746F // otx for Taranis X7 / X7S / X7 Express / X7S Express #elif defined(PCBX9LITES) - #define OTX_FOURCC 0x3E78746F // otx for Taranis X9-Lite + #define OTX_FOURCC 0x3E78746F // otx for Taranis X9-Lite S #elif defined(PCBX9LITE) #define OTX_FOURCC 0x3C78746F // otx for Taranis X9-Lite #elif defined(PCBX9D) || defined(PCBX9DP) From 71c763f94336d3b501ca27ca6f6011ecba0aa1ea Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 6 Jan 2020 10:28:29 +0100 Subject: [PATCH 51/63] Bsongis/x9lites sources companion fix (#7275) Fixes #7215 Fixes #7244 --- companion/src/firmwares/boards.h | 5 +++++ companion/src/firmwares/opentx/opentxeeprom.cpp | 3 --- companion/src/firmwares/opentx/opentxeeprom.h | 2 +- companion/src/firmwares/opentx/opentxinterface.cpp | 10 ++++++++++ radio/src/storage/eeprom_rlc.cpp | 9 +++++++++ radio/src/targets/taranis/CMakeLists.txt | 2 +- 6 files changed, 26 insertions(+), 5 deletions(-) diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index 1057d3706..74e690ebf 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -255,6 +255,11 @@ inline bool IS_TARANIS_X9LITE(Board::Type board) return board == Board::BOARD_TARANIS_X9LITE || board == Board::BOARD_TARANIS_X9LITES; } +inline bool IS_TARANIS_X9LITES(Board::Type board) +{ + return board == Board::BOARD_TARANIS_X9LITES; +} + inline bool IS_TARANIS_X9(Board::Type board) { return board==Board::BOARD_TARANIS_X9D || board==Board::BOARD_TARANIS_X9DP || board==Board::BOARD_TARANIS_X9DP_2019 || board==Board::BOARD_TARANIS_X9E; diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 21e067a2d..18dfc7379 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -45,9 +45,6 @@ inline int MAX_SWITCHES(Board::Type board, int version) if (IS_TARANIS_X9D(board)) return 9; - if (IS_TARANIS_X9LITE(board)) - return 7; - if (IS_JUMPER_T12(board)) return 8; diff --git a/companion/src/firmwares/opentx/opentxeeprom.h b/companion/src/firmwares/opentx/opentxeeprom.h index 95f75ce19..ac1cf09dc 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.h +++ b/companion/src/firmwares/opentx/opentxeeprom.h @@ -28,13 +28,13 @@ #define GVARS_VARIANT 0x0001 #define FRSKY_VARIANT 0x0002 -#define MAVLINK_VARIANT 0x0008 #define M128_VARIANT 0x8000 #define TARANIS_X9E_VARIANT 0x8000 #define TARANIS_X7_VARIANT 0x4000 #define TARANIS_XLITE_VARIANT 0x2000 #define TARANIS_XLITES_VARIANT 0x1000 #define TARANIS_X9LITE_VARIANT 0x0800 +#define TARANIS_X9LITES_VARIANT 0x0801 #define JUMPER_T12_VARIANT 0x4001 #define SIMU_STOCK_VARIANTS (GVARS_VARIANT|FRSKY_VARIANT) diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index aaff3123b..741db16b6 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -329,6 +329,9 @@ int OpenTxEepromInterface::save(uint8_t * eeprom, const RadioData & radioData, u else if (IS_TARANIS_X9E(board)) { variant |= TARANIS_X9E_VARIANT; } + else if (IS_TARANIS_X9LITES(board)) { + variant |= TARANIS_X9LITES_VARIANT; + } else if (IS_TARANIS_X9LITE(board)) { variant |= TARANIS_X9LITE_VARIANT; } @@ -718,6 +721,8 @@ int OpenTxFirmware::getCapability(::Capability capability) return SIMU_M128_VARIANTS; else if (IS_TARANIS_X9E(board)) return TARANIS_X9E_VARIANT; + else if (IS_TARANIS_X9LITES(board)) + return TARANIS_X9LITES_VARIANT; else if (IS_TARANIS_X9LITE(board)) return TARANIS_X9LITE_VARIANT; else if (IS_TARANIS_X7(board)) @@ -991,6 +996,11 @@ bool OpenTxEepromInterface::checkVariant(unsigned int version, unsigned int vari variantError = true; } } + else if (IS_TARANIS_X9LITES(board)) { + if (variant != TARANIS_X9LITES_VARIANT) { + variantError = true; + } + } else if (IS_TARANIS_X9LITE(board)) { if (variant != TARANIS_X9LITE_VARIANT) { variantError = true; diff --git a/radio/src/storage/eeprom_rlc.cpp b/radio/src/storage/eeprom_rlc.cpp index 3d77e3dbe..d1e28254c 100644 --- a/radio/src/storage/eeprom_rlc.cpp +++ b/radio/src/storage/eeprom_rlc.cpp @@ -776,6 +776,15 @@ bool eeLoadGeneral(bool allowFixes) } #endif +#if defined(PCBX9LITES) + if (g_eeGeneral.variant == 0x0800) { + TRACE("Pre release EEPROM detected, variant %d instead of %d for X9LiteS radio. Loading anyway", g_eeGeneral.variant, EEPROM_VARIANT); + g_eeGeneral.variant = EEPROM_VARIANT; + storageDirty(EE_GENERAL); + return true; + } +#endif + #if defined(RADIO_T12) if (g_eeGeneral.variant != (EEPROM_VARIANT & 0xFFFE)) { TRACE("EEPROM variant %d instead of %d", g_eeGeneral.variant, EEPROM_VARIANT); diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index db593064e..fe9a02922 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -207,7 +207,7 @@ elseif(PCB STREQUAL X9LITES) set(FLAVOUR x9lites) add_definitions(-DBOARD_NAME="x9lites") add_definitions(-DPCBX9LITES -DPCBX9LITE -DPCBX9 -DSOFTWARE_VOLUME -DHARDWARE_POWER_MANAGEMENT_UNIT) - add_definitions(-DEEPROM_VARIANT=0x0800) + add_definitions(-DEEPROM_VARIANT=0x0801) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) set(PXX2 ON) set(GUI_DIR 128x64) From 5a9c8edf64b668eb99f690f637813c813da029fe Mon Sep 17 00:00:00 2001 From: 3djc Date: Mon, 6 Jan 2020 10:32:26 +0100 Subject: [PATCH 52/63] Basics for TBS firmware (#7274) --- radio/src/CMakeLists.txt | 5 ++ radio/src/stamp.cpp | 2 + tools/build-tbs.py | 118 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 125 insertions(+) create mode 100755 tools/build-tbs.py diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index c16bf7ca2..a4d94a51b 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -53,6 +53,7 @@ option(MODULE_PROTOCOL_LBT "Add support for EU/LBT modules" ON) option(MODULE_PROTOCOL_FLEX "Add support for non certified FLEX modules" OFF) option(MODULE_PROTOCOL_D8 "Add support for D8 modules" ON) option(FRSKY_RELEASE "Used to build FrSky released firmware" OFF) +option(TBS_RELEASE "Used to build TBS released firmware" OFF) option(ALLOW_TRAINER_MULTI "Allow multi trainer" OFF) # since we reset all default CMAKE compiler flags for firmware builds, provide an alternate way for user to specify additional flags. @@ -339,6 +340,10 @@ if(JUMPER_RELEASE) add_definitions(-DJUMPER_RELEASE) endif() +if(TBS_RELEASE) + add_definitions(-DTBS_RELEASE) +endif() + if(FRSKY_RELEASE) add_definitions(-DFRSKY_RELEASE) set(POPUP_LEVEL 3) diff --git a/radio/src/stamp.cpp b/radio/src/stamp.cpp index 842020a8c..2369955b3 100644 --- a/radio/src/stamp.cpp +++ b/radio/src/stamp.cpp @@ -36,6 +36,8 @@ #define DISPLAY_VERSION "FrSky" #elif defined(JUMPER_RELEASE) #define DISPLAY_VERSION "JumperRC" +#elif defined(TBS_RELEASE) +#define DISPLAY_VERSION "TBS" #else #define DISPLAY_VERSION VERSION #endif diff --git a/tools/build-tbs.py b/tools/build-tbs.py new file mode 100755 index 000000000..3c5cb2d1c --- /dev/null +++ b/tools/build-tbs.py @@ -0,0 +1,118 @@ +#!/usr/bin/python3 + +import argparse +import datetime +import os +from builtins import NotADirectoryError +import shutil +import tempfile + + +boards = { + "XLITE": { + "PCB": "XLITE", + }, + "XLITES": { + "PCB": "XLITES", + }, + "X9LITE": { + "PCB": "X9LITE", + }, + "X9LITES": { + "PCB": "X9LITES", + }, + "X9D": { + "PCB": "X9D+", + }, + "X9D+": { + "PCB": "X9D+", + }, + "X9D+2019": { + "PCB": "X9D+", + "PCBREV": "2019", + }, + "X9E": { + "PCB": "X9E", + }, + "X7": { + "PCB": "X7", + }, + "X7ACCESS": { + "PCB": "X7", + "PCBREV": "ACCESS", + }, + "X10": { + "PCB": "X10", + }, + "X10EXPRESS": { + "PCB": "X10", + "PCBREV": "EXPRESS", + }, + "X12S": { + "PCB": "X12S", + }, + "T16": { + "PCB": "X10", + "PCBREV": "T16", + "INTERNAL_MODULE_MULTI": "YES" + }, + "T12": { + "PCB": "X7", + "PCBREV": "T12", + }, +} + +translations = [ + "EN" +] + + +def timestamp(): + return datetime.datetime.now().strftime("%y%m%d") + + +def build(board, translation, srcdir): + cmake_options = " ".join(["-D%s=%s" % (key, value) for key, value in boards[board].items()]) + cwd = os.getcwd() + if not os.path.exists("output"): + os.mkdir("output") + path = tempfile.mkdtemp() + os.chdir(path) + command = "cmake %s -DTRANSLATIONS=%s -DTBS_RELEASE=YES -DTEST_BUILD_WARNING=YES %s" % (cmake_options, translation, srcdir) + print(command) + os.system(command) + os.system("make firmware -j6") + os.chdir(cwd) + index = 0 + while 1: + suffix = "" if index == 0 else "_%d" % index + filename = "output/firmware_%s_%s_%s%s.bin" % (board.lower(), translation.lower(), timestamp(), suffix) + if not os.path.exists(filename): + shutil.copy("%s/firmware.bin" % path, filename) + break + index += 1 + shutil.rmtree(path) + + +def dir_path(string): + if os.path.isdir(string): + return string + else: + raise NotADirectoryError(string) + + +def main(): + parser = argparse.ArgumentParser(description="Build FrSky firmware") + parser.add_argument("-b", "--boards", action="append", help="Destination boards", required=True) + parser.add_argument("-t", "--translations", action="append", help="Translations", required=True) + parser.add_argument("srcdir", type=dir_path) + + args = parser.parse_args() + + for board in (boards.keys() if "ALL" in args.boards else args.boards): + for translation in (translations if "ALL" in args.translations else args.translations): + build(board, translation, args.srcdir) + + +if __name__ == "__main__": + main() From 838bd2f6a07c6c531a5c71f9e7d22fd82cfa6263 Mon Sep 17 00:00:00 2001 From: 3djc Date: Mon, 6 Jan 2020 10:38:10 +0100 Subject: [PATCH 53/63] Rework warning (#7264) --- radio/src/CMakeLists.txt | 6 +++--- radio/src/opentx.cpp | 4 ++-- radio/src/translations.cpp | 6 ++---- radio/src/translations.h | 4 ++-- radio/src/translations/cz.h.txt | 4 ++-- radio/src/translations/de.h.txt | 4 ++-- radio/src/translations/en.h.txt | 4 ++-- radio/src/translations/es.h.txt | 6 +++--- radio/src/translations/fi.h.txt | 4 ++-- radio/src/translations/fr.h.txt | 4 ++-- radio/src/translations/it.h.txt | 4 ++-- radio/src/translations/nl.h.txt | 4 ++-- radio/src/translations/pl.h.txt | 4 ++-- radio/src/translations/pt.h.txt | 4 ++-- radio/src/translations/se.h.txt | 4 ++-- radio/util/build-firmware.py | 2 +- tools/build-companion-nightly.sh | 2 +- 17 files changed, 34 insertions(+), 36 deletions(-) diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index a4d94a51b..8124cf651 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -47,7 +47,7 @@ option(TRACE_SIMPGMSPACE "Turn on traces in simpgmspace.cpp" ON) option(TRACE_LUA_INTERNALS "Turn on traces for Lua internals" OFF) option(FRSKY_STICKS "Reverse sticks for FrSky sticks" OFF) option(NANO "Use nano newlib and binalloc") -option(NIGHTLY_BUILD_WARNING "Warn this is a nightly build" OFF) +option(TEST_BUILD_WARNING "Warn this is a test build" OFF) option(MODULE_PROTOCOL_FCC "Add support for FCC modules" ON) option(MODULE_PROTOCOL_LBT "Add support for EU/LBT modules" ON) option(MODULE_PROTOCOL_FLEX "Add support for non certified FLEX modules" OFF) @@ -316,8 +316,8 @@ if(EEPROM_VARIANT_NEEDED) add_definitions(-DEEPROM_VARIANT=${EEPROM_VARIANT}) endif() -if(NIGHTLY_BUILD_WARNING) - add_definitions(-DNIGHTLY_BUILD_WARNING) +if(TEST_BUILD_WARNING) + add_definitions(-DTEST_BUILD_WARNING) endif() if(MODULE_PROTOCOL_FCC) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 68b142b24..1bf9e8342 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1554,8 +1554,8 @@ void opentxStart(const uint8_t startOptions = OPENTX_START_DEFAULT_ARGS) } #endif -#if defined(NIGHTLY_BUILD_WARNING) - ALERT(STR_NIGHTLY_WARNING, TR_NIGHTLY_NOTSAFE, AU_ERROR); +#if defined(TEST_BUILD_WARNING) + ALERT(STR_TEST_WARNING, TR_TEST_NOTSAFE, AU_ERROR); #endif #if defined(GUI) diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index ba23c2436..8e333fcc4 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -705,10 +705,8 @@ const char STR_MODELS_PATH[] = MODELS_PATH; const char STR_MODELS_EXT[] = MODELS_EXT; #endif -#if defined(NIGHTLY_BUILD_WARNING) -const char STR_NIGHTLY_WARNING[] = TR_NIGHTLY_WARNING; -const char STR_NIGHTLY_NOTSAFE[] = TR_NIGHTLY_NOTSAFE; -#endif +const char STR_TEST_WARNING[] = TR_TEST_WARNING; +const char STR_TEST_NOTSAFE[] = TR_TEST_NOTSAFE; #if LCD_W >= 212 const char * const STR_PHASES_HEADERS[] = TR_PHASES_HEADERS; diff --git a/radio/src/translations.h b/radio/src/translations.h index e1e9e9c0f..239fd7c71 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -552,8 +552,8 @@ extern const char STR_THROTTLEWARN[]; extern const char STR_ALARMSWARN[]; extern const char STR_SWITCHWARN[]; extern const char STR_FAILSAFEWARN[]; -extern const char STR_NIGHTLY_WARNING[]; -extern const char STR_NIGHTLY_NOTSAFE[]; +extern const char STR_TEST_WARNING[]; +extern const char STR_TEST_NOTSAFE[]; extern const char STR_WRONG_SDCARDVERSION[]; extern const char STR_WARN_RTC_BATTERY_LOW[]; extern const char STR_WARN_MULTI_LOWPOWER[]; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index d90d692c7..fe2f4a921 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -733,8 +733,8 @@ #define TR_ALARMSWARN "ALARMU" #define TR_SWITCHWARN "POZICE" #define TR_FAILSAFEWARN "FAILSAFE" -#define TR_NIGHTLY_WARNING TR("NOČNÍ", "NOČNÍ SESTAVENÍ") -#define TR_NIGHTLY_NOTSAFE "Verze není bezpečná k létání" +#define TR_TEST_WARNING TR("NOČNÍ", "NOČNÍ SESTAVENÍ") +#define TR_TEST_NOTSAFE "Use for tests only" #define TR_WRONG_SDCARDVERSION "Očekávaná ver.: " #define TR_WARN_RTC_BATTERY_LOW "Slabá RTC baterie" #define TR_WARN_MULTI_LOWPOWER "Low power mode" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index de1421c0e..1cfef0aef 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -735,8 +735,8 @@ #define TR_ALARMSWARN "ALARM" #define TR_SWITCHWARN "SCHALTER" #define TR_FAILSAFEWARN "FAILSAFE" -#define TR_NIGHTLY_WARNING TR("NIGHTLY", "NIGHTLY BUILD") -#define TR_NIGHTLY_NOTSAFE "Nicht für Flug geeignet" +#define TR_TEST_WARNING TR("TESTING", "TEST BUILD") +#define TR_TEST_NOTSAFE "Use for tests only" #define TR_WRONG_SDCARDVERSION TR("Erw. Version: ","Erwartete Version: ") #define TR_WARN_RTC_BATTERY_LOW "RTC Battery low" #define TR_WARN_MULTI_LOWPOWER "Low power mode" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index f7600bf4f..9ab4f8725 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -734,8 +734,8 @@ #define TR_ALARMSWARN "ALARMS" #define TR_SWITCHWARN TR("SWITCH", "CONTROL") #define TR_FAILSAFEWARN "FAILSAFE" -#define TR_NIGHTLY_WARNING TR("NIGHTLY", "NIGHTLY BUILD") -#define TR_NIGHTLY_NOTSAFE "Version not safe to fly" +#define TR_TEST_WARNING TR("TESTING", "TEST BUILD") +#define TR_TEST_NOTSAFE "Use for tests only" #define TR_WRONG_SDCARDVERSION TR("Expected ver: ","Expected version: ") #define TR_WARN_RTC_BATTERY_LOW "RTC Battery low" #define TR_WARN_MULTI_LOWPOWER "Low power mode" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index a52691923..3d7a70d43 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -758,9 +758,9 @@ #define TR_ALARMSWARN "ALARMAS" #define TR_SWITCHWARN "INTERPTOR" #define TR_FAILSAFEWARN "FAILSAFE" -#define TR_NIGHTLY_WARNING TR("NIGHTLY", "NIGHTLY BUILD") -#define TR_NIGHTLY_NOTSAFE "Version not safe to fly" -#define TR_WRONG_SDCARDVERSION TR("Expected ver: ","Expected version: ") +#define TR_TEST_WARNING TR("TESTING", "TEST BUILD") +#define TR_TEST_NOTSAFE "Use for tests only" +#define TR_WRONG_SDCARDVERSION TR("Expected ver: ","Expected version: ") #define TR_WARN_RTC_BATTERY_LOW "RTC Battery low" #define TR_WARN_MULTI_LOWPOWER "Low power mode" #define TR_BATTERY "BATTERY" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index f5e018ead..241e4fdcb 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -752,8 +752,8 @@ #define TR_ALARMSWARN "ALARMS" #define TR_SWITCHWARN TR("SWITCH","CONTROL") #define TR_FAILSAFEWARN "FAILSAFE" -#define TR_NIGHTLY_WARNING TR("NIGHTLY", "NIGHTLY BUILD") -#define TR_NIGHTLY_NOTSAFE "Version not safe to fly" +#define TR_TEST_WARNING TR("TESTING", "TEST BUILD") +#define TR_TEST_NOTSAFE "Use for tests only" #define TR_WRONG_SDCARDVERSION TR("Expected ver: ","Expected version: ") #define TR_WARN_RTC_BATTERY_LOW "RTC Battery low" #define TR_WARN_MULTI_LOWPOWER "Low power mode" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index c8ec87b9f..88fa0689f 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -755,8 +755,8 @@ #define TR_ALARMSWARN "SON" #define TR_SWITCHWARN TR("INTERS","CONTROLES") #define TR_FAILSAFEWARN "FAILSAFE" -#define TR_NIGHTLY_WARNING TR("NIGHTLY", "NIGHTLY BUILD") -#define TR_NIGHTLY_NOTSAFE "Version de test uniq." +#define TR_TEST_WARNING TR("TESTING", "TEST BUILD") +#define TR_TEST_NOTSAFE "Version de test uniq." #define TR_WRONG_SDCARDVERSION "Version requise: " #define TR_WARN_RTC_BATTERY_LOW "Batterie RTC faible" #define TR_WARN_MULTI_LOWPOWER "Mode basse puis." diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index f2852ba7b..f0534853d 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -754,8 +754,8 @@ #define TR_ALARMSWARN "ALLARMI" #define TR_SWITCHWARN "CONTROLLI" #define TR_FAILSAFEWARN "FAILSAFE" -#define TR_NIGHTLY_WARNING TR("NIGHTLY", "NIGHTLY BUILD") -#define TR_NIGHTLY_NOTSAFE "Versione non sicura" +#define TR_TEST_WARNING TR("TESTING", "TEST BUILD") +#define TR_TEST_NOTSAFE "Use for test only" #define TR_WRONG_SDCARDVERSION TR("Richiede ver: ", "Richiede versione: ") #define TR_WARN_RTC_BATTERY_LOW "Batteria RTC scarica" #define TR_WARN_MULTI_LOWPOWER "Modalità bassa pot." diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 633d83a26..e67be0298 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -740,8 +740,8 @@ #define TR_ALARMSWARN "ALARM" #define TR_SWITCHWARN "SCHAKELAAR" #define TR_FAILSAFEWARN "FAILSAFE" -#define TR_NIGHTLY_WARNING TR("NIGHTLY", "NIGHTLY BUILD") -#define TR_NIGHTLY_NOTSAFE "Version not safe to fly" +#define TR_TEST_WARNING TR("TESTING", "TEST BUILD") +#define TR_TEST_NOTSAFE "Use for tests only" #define TR_WRONG_SDCARDVERSION TR("Verwachte ver: ","Verwachte versie: ") #define TR_WARN_RTC_BATTERY_LOW "RTC Battery low" #define TR_WARN_MULTI_LOWPOWER "Low power mode" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 339755077..a52b0da24 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -753,8 +753,8 @@ #define TR_ALARMSWARN "ALARM" #define TR_SWITCHWARN TR("Przełą","Kontrola") #define TR_FAILSAFEWARN "FAILSAFE" -#define TR_NIGHTLY_WARNING TR("NIGHTLY", "NIGHTLY BUILD") -#define TR_NIGHTLY_NOTSAFE "Version not safe to fly" +#define TR_TEST_WARNING TR("TESTING", "TEST BUILD") +#define TR_TEST_NOTSAFE "Use for tests only" #define TR_WRONG_SDCARDVERSION TR("Expected ver: ","Expected version: ") #define TR_WARN_RTC_BATTERY_LOW "RTC Battery low" #define TR_WARN_MULTI_LOWPOWER "Low power mode" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 7d51e12f7..2d4d6fc71 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -743,8 +743,8 @@ #define TR_ALARMSWARN "ALARMES" #define TR_SWITCHWARN "CHAVES" #define TR_FAILSAFEWARN "FAILSAFE" -#define TR_NIGHTLY_WARNING TR("NIGHTLY", "NIGHTLY BUILD") -#define TR_NIGHTLY_NOTSAFE "Version not safe to fly" +#define TR_TEST_WARNING TR("TESTING", "TEST BUILD") +#define TR_TEST_NOTSAFE "Use for tests only" #define TR_WRONG_SDCARDVERSION TR("Expected ver: ","Expected version: ") #define TR_WARN_RTC_BATTERY_LOW "RTC Battery low" #define TR_WARN_MULTI_LOWPOWER "Low power mode" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 2c26a7a0a..85b31e4d9 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -752,8 +752,8 @@ #define TR_ALARMSWARN "ALARM" #define TR_SWITCHWARN "BRYTARE" #define TR_FAILSAFEWARN "FAILSAFE" -#define TR_NIGHTLY_WARNING TR("NIGHTLY", "NIGHTLY BUILD") -#define TR_NIGHTLY_NOTSAFE "Version not safe to fly" +#define TR_TEST_WARNING TR("TESTING", "TEST BUILD") +#define TR_TEST_NOTSAFE "Use for tests only" #define TR_SDCARDVERSIONWARN "SD Card Check" #define TR_WRONG_SDCARDVERSION TR("Expected ver: ","Expected version: ") #define TR_WARN_RTC_BATTERY_LOW "RTC Battery low" diff --git a/radio/util/build-firmware.py b/radio/util/build-firmware.py index 4488659b0..9658e605d 100755 --- a/radio/util/build-firmware.py +++ b/radio/util/build-firmware.py @@ -30,7 +30,7 @@ def build_target(target, path, cmake_options): suffix = os.environ["OPENTX_VERSION_SUFFIX"] cmd.append('-DVERSION_SUFFIX="%s"' % suffix) if suffix.startswith("N"): - cmd.append('-DNIGHTLY_BUILD_WARNING=YES') + cmd.append('-DTEST_BUILD_WARNING=YES') cmd.append(srcdir) proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) diff --git a/tools/build-companion-nightly.sh b/tools/build-companion-nightly.sh index ac2004b16..58d64709c 100755 --- a/tools/build-companion-nightly.sh +++ b/tools/build-companion-nightly.sh @@ -25,7 +25,7 @@ done SRCDIR=$1 OUTDIR=$2 -COMMON_OPTIONS="-DALLOW_NIGHTLY_BUILDS=YES -DNIGHTLY_BUILD_WARNING=YES -DGVARS=YES -DHELI=YES -DLUA=YES -DMULTIMODULE=YES -DTELEMETRY=FRSKY -DPPM_LIMITS_SYMETRICAL=YES -DVARIO=YES -DAUTOSWITCH=YES -DAUTOSOURCE=YES -DAUDIO=YES -DGPS=YES -DPPM_CENTER_ADJUSTABLE=YES -DFLIGHT_MODES=YES -DOVERRIDE_CHANNEL_FUNCTION=YES -DFRSKY_STICKS=YES" +COMMON_OPTIONS="-DALLOW_NIGHTLY_BUILDS=YES -DTEST_BUILD_WARNING=YES -DGVARS=YES -DHELI=YES -DLUA=YES -DMULTIMODULE=YES -DTELEMETRY=FRSKY -DPPM_LIMITS_SYMETRICAL=YES -DVARIO=YES -DAUTOSWITCH=YES -DAUTOSOURCE=YES -DAUDIO=YES -DGPS=YES -DPPM_CENTER_ADJUSTABLE=YES -DFLIGHT_MODES=YES -DOVERRIDE_CHANNEL_FUNCTION=YES -DFRSKY_STICKS=YES" if [ "$(uname)" = "Darwin" ]; then COMMON_OPTIONS="${COMMON_OPTIONS} -DCMAKE_PREFIX_PATH=~/Qt/5.7/clang_64/ -DCMAKE_OSX_DEPLOYMENT_TARGET='10.9'" fi From abb1cd473bbba40925b45ca3296efe5c6afa9112 Mon Sep 17 00:00:00 2001 From: 3djc Date: Mon, 6 Jan 2020 11:25:42 +0100 Subject: [PATCH 54/63] Fix some keys no sent to telemetry screens handler (#7263) Fix some keys no sent to telemetry screens handler --- radio/src/gui/128x64/view_telemetry.cpp | 72 +++++++++++-------------- radio/src/main.cpp | 15 ------ 2 files changed, 30 insertions(+), 57 deletions(-) diff --git a/radio/src/gui/128x64/view_telemetry.cpp b/radio/src/gui/128x64/view_telemetry.cpp index 84a0cbf77..f6d5d7301 100644 --- a/radio/src/gui/128x64/view_telemetry.cpp +++ b/radio/src/gui/128x64/view_telemetry.cpp @@ -216,58 +216,46 @@ enum NavigationDirection { #define incrTelemetryScreen() direction = down #if defined(NAVIGATION_XLITE) -#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_LONG(KEY_LEFT) -#define EVT_KEY_NEXT_VIEW EVT_KEY_LONG(KEY_RIGHT) + #define EVT_KEY_PREVIOUS_VIEW(evt) (evt == EVT_KEY_LONG(KEY_LEFT) && IS_SHIFT_PRESSED()) + #define EVT_KEY_NEXT_VIEW(evt) (evt == EVT_KEY_LONG(KEY_RIGHT) && IS_SHIFT_PRESSED()) #elif defined(NAVIGATION_X7) -#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_LONG(KEY_PAGE) -#define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_PAGE) + #define EVT_KEY_PREVIOUS_VIEW(evt) (evt == EVT_KEY_LONG(KEY_PAGE)) + #define EVT_KEY_NEXT_VIEW(evt) (evt == EVT_KEY_BREAK(KEY_PAGE)) +#elif defined(NAVIGATION_9X) + #define EVT_KEY_PREVIOUS_VIEW(evt) (evt == EVT_KEY_LONG(KEY_UP)) + #define EVT_KEY_NEXT_VIEW(evt) (evt == EVT_KEY_LONG(KEY_DOWN)) #else -#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_FIRST(KEY_UP) -#define EVT_KEY_NEXT_VIEW EVT_KEY_FIRST(KEY_DOWN) + #define EVT_KEY_PREVIOUS_VIEW(evt) (evt == EVT_KEY_FIRST(KEY_UP)) + #define EVT_KEY_NEXT_VIEW(evt) (evt == EVT_KEY_FIRST(KEY_DOWN)) #endif void menuViewTelemetryFrsky(event_t event) { enum NavigationDirection direction = none; - switch (event) { - case EVT_KEY_FIRST(KEY_EXIT): + if (event == EVT_KEY_FIRST(KEY_EXIT) && TELEMETRY_SCREEN_TYPE(s_frsky_view) != TELEMETRY_SCREEN_TYPE_SCRIPT) { + killEvents(event); + chainMenu(menuMainView); + } #if defined(LUA) - case EVT_KEY_LONG(KEY_EXIT): + else if (event == EVT_KEY_LONG(KEY_EXIT)) { + killEvents(event); + chainMenu(menuMainView); + } #endif - killEvents(event); - chainMenu(menuMainView); - break; - - case EVT_KEY_PREVIOUS_VIEW: -#if defined(PCBXLITE) - if (IS_SHIFT_PRESSED()) { - decrTelemetryScreen(); - } -#else - if (IS_KEY_LONG(EVT_KEY_PREVIOUS_VIEW)) { - killEvents(event); - } - decrTelemetryScreen(); -#endif - break; - - case EVT_KEY_NEXT_VIEW: -#if defined(PCBXLITE) - if (IS_SHIFT_PRESSED()) { - incrTelemetryScreen(); - } -#else - incrTelemetryScreen(); -#endif - break; - - case EVT_KEY_LONG(KEY_ENTER): - killEvents(event); - POPUP_MENU_ADD_ITEM(STR_RESET_TELEMETRY); - POPUP_MENU_ADD_ITEM(STR_RESET_FLIGHT); - POPUP_MENU_START(onMainViewMenu); - break; + else if (EVT_KEY_PREVIOUS_VIEW(event)) { + killEvents(event); + decrTelemetryScreen(); + } + else if (EVT_KEY_NEXT_VIEW(event)) { + killEvents(event); + incrTelemetryScreen(); + } + else if (event == EVT_KEY_LONG(KEY_ENTER)) { + killEvents(event); + POPUP_MENU_ADD_ITEM(STR_RESET_TELEMETRY); + POPUP_MENU_ADD_ITEM(STR_RESET_FLIGHT); + POPUP_MENU_START(onMainViewMenu); } for (int i=0; i<=TELEMETRY_SCREEN_TYPE_MAX; i++) { diff --git a/radio/src/main.cpp b/radio/src/main.cpp index 3f5dbd1ab..3aee248ef 100644 --- a/radio/src/main.cpp +++ b/radio/src/main.cpp @@ -381,21 +381,6 @@ void handleGui(event_t event) { } else if (luaTask(event, RUN_TELEM_FG_SCRIPT, true)) { // the telemetry screen is active - // prevent events from keys MENU, UP, DOWN, ENT(short) and EXIT(short) from reaching the normal menus, - // so Lua telemetry script can fully use them - if (event) { - uint8_t key = EVT_KEY_MASK(event); -#if defined(PCBXLITE) - // SHIFT + LEFT/RIGHT LONG used to change telemetry screen on XLITE - if ((!IS_KEY_LONG(event) && key == KEY_RIGHT && IS_SHIFT_PRESSED()) || (!IS_KEY_LONG(event) && key == KEY_LEFT && IS_SHIFT_PRESSED()) || (!IS_KEY_LONG(event) && key == KEY_EXIT)) { -#else - // no need to filter out MENU and ENT(short), because they are not used by menuViewTelemetryFrsky() - if (key == KEY_PLUS || key == KEY_MINUS || (!IS_KEY_LONG(event) && key == KEY_EXIT)) { -#endif - // TRACE("Telemetry script event 0x%02x killed", event); - event = 0; - } - } menuHandlers[menuLevel](event); } else From 763b9bedfbb72fef7237660c212ff0177dee38de Mon Sep 17 00:00:00 2001 From: Marco Robustini Date: Mon, 6 Jan 2020 13:48:40 +0100 Subject: [PATCH 55/63] Update it.h.txt (#7276) --- radio/src/translations/it.h.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index f0534853d..0f5e5b047 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -754,8 +754,8 @@ #define TR_ALARMSWARN "ALLARMI" #define TR_SWITCHWARN "CONTROLLI" #define TR_FAILSAFEWARN "FAILSAFE" -#define TR_TEST_WARNING TR("TESTING", "TEST BUILD") -#define TR_TEST_NOTSAFE "Use for test only" +#define TR_TEST_WARNING TR("PER TEST", "BUILD PER TEST") +#define TR_TEST_NOTSAFE "Usare solo per test" #define TR_WRONG_SDCARDVERSION TR("Richiede ver: ", "Richiede versione: ") #define TR_WARN_RTC_BATTERY_LOW "Batteria RTC scarica" #define TR_WARN_MULTI_LOWPOWER "Modalità bassa pot." From f8e159ba5f53f92edee1908cad53b60c44984cd2 Mon Sep 17 00:00:00 2001 From: 3djc Date: Mon, 6 Jan 2020 16:19:29 +0100 Subject: [PATCH 56/63] Quick'n'dirty : greyed companion backup radio non implemented option --- companion/src/mainwindow.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index e795594cb..dcae212df 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -1078,8 +1078,14 @@ void MainWindow::updateMenus() compareAct->setEnabled(activeChild); writeEepromAct->setEnabled(activeChild); readEepromAct->setEnabled(true); - writeBUToRadioAct->setEnabled(true); - readBUToFileAct->setEnabled(true); + if (IS_HORUS(getCurrentBoard())) { + writeBUToRadioAct->setEnabled(false); + readBUToFileAct->setEnabled(false); + } + else { + writeBUToRadioAct->setEnabled(true); + readBUToFileAct->setEnabled(true); + } editSplashAct->setDisabled(IS_HORUS(getCurrentBoard())); foreach (QAction * act, fileWindowActions) { @@ -1288,8 +1294,9 @@ void MainWindow::createActions() writeEepromAct = addAct("write_eeprom.png", SLOT(writeEeprom())); readEepromAct = addAct("read_eeprom.png", SLOT(readEeprom())); burnConfigAct = addAct("configure.png", SLOT(burnConfig())); - writeBUToRadioAct = addAct("write_eeprom_file.png", SLOT(writeBackup())); - readBUToFileAct = addAct("read_eeprom_file.png", SLOT(readBackup())); + + writeBUToRadioAct = addAct("write_eeprom_file.png", SLOT(writeBackup())); + readBUToFileAct = addAct("read_eeprom_file.png", SLOT(readBackup())); createProfileAct = addAct("new.png", SLOT(createProfile())); copyProfileAct = addAct("copy.png", SLOT(copyProfile())); From 5b16686adbbedbb5f7b560916597bb26028e7574 Mon Sep 17 00:00:00 2001 From: olliw42 <6089567+olliw42@users.noreply.github.com> Date: Mon, 6 Jan 2020 20:57:28 +0100 Subject: [PATCH 57/63] style it, according to majority identing style (#7278) --- radio/src/targets/horus/hal.h | 98 +++++++++++++++++------------------ 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index 6f226d7b9..7b6934068 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -120,24 +120,24 @@ // Gimbal switch left #define STORAGE_SWITCH_I #define HARDWARE_SWITCH_I - #define SWITCHES_GPIO_REG_I GPIOH->IDR - #define SWITCHES_GPIO_PIN_I GPIO_Pin_14 // PH.14 + #define SWITCHES_GPIO_REG_I GPIOH->IDR + #define SWITCHES_GPIO_PIN_I GPIO_Pin_14 // PH.14 // Gimbal switch right #define STORAGE_SWITCH_J #define HARDWARE_SWITCH_J - #define SWITCHES_GPIO_REG_J GPIOH->IDR - #define SWITCHES_GPIO_PIN_J GPIO_Pin_15 // PH.15 + #define SWITCHES_GPIO_REG_J GPIOH->IDR + #define SWITCHES_GPIO_PIN_J GPIO_Pin_15 // PH.15 #elif defined(PCBX12S) // Gimbal switch left #define STORAGE_SWITCH_I #define HARDWARE_SWITCH_I - #define SWITCHES_GPIO_REG_I GPIOB->IDR - #define SWITCHES_GPIO_PIN_I GPIO_Pin_1 // PB.01 + #define SWITCHES_GPIO_REG_I GPIOB->IDR + #define SWITCHES_GPIO_PIN_I GPIO_Pin_1 // PB.01 // Gimbal switch right #define STORAGE_SWITCH_J #define HARDWARE_SWITCH_J - #define SWITCHES_GPIO_REG_J GPIOB->IDR - #define SWITCHES_GPIO_PIN_J GPIO_Pin_0 // PB.00 + #define SWITCHES_GPIO_REG_J GPIOB->IDR + #define SWITCHES_GPIO_PIN_J GPIO_Pin_0 // PB.00 #endif // Trims @@ -184,15 +184,15 @@ #define TRIMS_GPIO_REG_RHR GPIOD->IDR #define TRIMS_GPIO_PIN_RHR GPIO_Pin_7 // PD.07 #if defined(RADIO_T16) - #define TRIMS_GPIO_REG_LSU GPIOD->IDR - #define TRIMS_GPIO_PIN_LSU GPIO_Pin_13 // PD.13 - #define TRIMS_GPIO_REG_LSD GPIOJ->IDR - #define TRIMS_GPIO_PIN_LSD GPIO_Pin_8 // PJ.08 + #define TRIMS_GPIO_REG_LSU GPIOD->IDR + #define TRIMS_GPIO_PIN_LSU GPIO_Pin_13 // PD.13 + #define TRIMS_GPIO_REG_LSD GPIOJ->IDR + #define TRIMS_GPIO_PIN_LSD GPIO_Pin_8 // PJ.08 #else - #define TRIMS_GPIO_REG_LSU GPIOJ->IDR - #define TRIMS_GPIO_PIN_LSU GPIO_Pin_8 // PJ.08 - #define TRIMS_GPIO_REG_LSD GPIOD->IDR - #define TRIMS_GPIO_PIN_LSD GPIO_Pin_13 // PD.13 + #define TRIMS_GPIO_REG_LSU GPIOJ->IDR + #define TRIMS_GPIO_PIN_LSU GPIO_Pin_8 // PJ.08 + #define TRIMS_GPIO_REG_LSD GPIOD->IDR + #define TRIMS_GPIO_PIN_LSD GPIO_Pin_13 // PD.13 #endif #define TRIMS_GPIO_REG_RSU GPIOB->IDR #define TRIMS_GPIO_PIN_RSU GPIO_Pin_14 // PB.14 @@ -288,11 +288,11 @@ #define ADC_DMA_Stream DMA2_Stream0 #define ADC_SET_DMA_FLAGS() ADC_DMA->LIFCR = (DMA_LIFCR_CTCIF0 | DMA_LIFCR_CHTIF0 | DMA_LIFCR_CTEIF0 | DMA_LIFCR_CDMEIF0 | DMA_LIFCR_CFEIF0) #define ADC_TRANSFER_COMPLETE() (ADC_DMA->LISR & DMA_LISR_TCIF0) -#if defined(RADIO_T16) - #define ADC_VREF_PREC2 300 -#else - #define ADC_VREF_PREC2 250 -#endif + #if defined(RADIO_T16) + #define ADC_VREF_PREC2 300 + #else + #define ADC_VREF_PREC2 250 + #endif #endif // Power @@ -316,15 +316,15 @@ // PCBREV #if defined(PCBX10) -#define PCBREV_RCC_AHB1Periph RCC_AHB1Periph_GPIOH -#define PCBREV_GPIO_PIN (GPIO_Pin_7 | GPIO_Pin_8) -#define PCBREV_GPIO GPIOH -#define PCBREV_VALUE() (GPIO_ReadInputDataBit(PCBREV_GPIO, GPIO_Pin_7) + (GPIO_ReadInputDataBit(PCBREV_GPIO, GPIO_Pin_8) << 1)) + #define PCBREV_RCC_AHB1Periph RCC_AHB1Periph_GPIOH + #define PCBREV_GPIO_PIN (GPIO_Pin_7 | GPIO_Pin_8) + #define PCBREV_GPIO GPIOH + #define PCBREV_VALUE() (GPIO_ReadInputDataBit(PCBREV_GPIO, GPIO_Pin_7) + (GPIO_ReadInputDataBit(PCBREV_GPIO, GPIO_Pin_8) << 1)) #else -#define PCBREV_RCC_AHB1Periph RCC_AHB1Periph_GPIOI -#define PCBREV_GPIO GPIOI -#define PCBREV_GPIO_PIN GPIO_Pin_11 // PI.11 -#define PCBREV_VALUE() GPIO_ReadInputDataBit(PCBREV_GPIO, PCBREV_GPIO_PIN) + #define PCBREV_RCC_AHB1Periph RCC_AHB1Periph_GPIOI + #define PCBREV_GPIO GPIOI + #define PCBREV_GPIO_PIN GPIO_Pin_11 // PI.11 + #define PCBREV_VALUE() GPIO_ReadInputDataBit(PCBREV_GPIO, PCBREV_GPIO_PIN) #endif // Led @@ -344,22 +344,22 @@ // Serial Port (DEBUG) #if defined(PCBX12S) -#define AUX_SERIAL_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1) -#define AUX_SERIAL_RCC_APB1Periph RCC_APB1Periph_USART3 -#define AUX_SERIAL_GPIO GPIOB -#define AUX_SERIAL_GPIO_PIN_TX GPIO_Pin_10 // PB.10 -#define AUX_SERIAL_GPIO_PIN_RX GPIO_Pin_11 // PB.11 -#define AUX_SERIAL_GPIO_PinSource_TX GPIO_PinSource10 -#define AUX_SERIAL_GPIO_PinSource_RX GPIO_PinSource11 -#define AUX_SERIAL_GPIO_AF GPIO_AF_USART3 -#define AUX_SERIAL_USART USART3 -#define AUX_SERIAL_USART_IRQHandler USART3_IRQHandler -#define AUX_SERIAL_USART_IRQn USART3_IRQn -#define AUX_SERIAL_DMA_Stream_RX DMA1_Stream1 -#define AUX_SERIAL_DMA_Channel_RX DMA_Channel_4 + #define AUX_SERIAL_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1) + #define AUX_SERIAL_RCC_APB1Periph RCC_APB1Periph_USART3 + #define AUX_SERIAL_GPIO GPIOB + #define AUX_SERIAL_GPIO_PIN_TX GPIO_Pin_10 // PB.10 + #define AUX_SERIAL_GPIO_PIN_RX GPIO_Pin_11 // PB.11 + #define AUX_SERIAL_GPIO_PinSource_TX GPIO_PinSource10 + #define AUX_SERIAL_GPIO_PinSource_RX GPIO_PinSource11 + #define AUX_SERIAL_GPIO_AF GPIO_AF_USART3 + #define AUX_SERIAL_USART USART3 + #define AUX_SERIAL_USART_IRQHandler USART3_IRQHandler + #define AUX_SERIAL_USART_IRQn USART3_IRQn + #define AUX_SERIAL_DMA_Stream_RX DMA1_Stream1 + #define AUX_SERIAL_DMA_Channel_RX DMA_Channel_4 #else -#define AUX_SERIAL_RCC_AHB1Periph 0 -#define AUX_SERIAL_RCC_APB1Periph 0 + #define AUX_SERIAL_RCC_AHB1Periph 0 + #define AUX_SERIAL_RCC_APB1Periph 0 #endif // Telemetry @@ -385,8 +385,8 @@ #define TELEMETRY_TIMER_IRQn TIM1_TRG_COM_TIM11_IRQn #define TELEMETRY_TIMER_IRQHandler TIM1_TRG_COM_TIM11_IRQHandler #if defined(PCBX12S) -#define TELEMETRY_DMA_Stream_RX DMA1_Stream5 -#define TELEMETRY_DMA_Channel_RX DMA_Channel_4 + #define TELEMETRY_DMA_Stream_RX DMA1_Stream5 + #define TELEMETRY_DMA_Channel_RX DMA_Channel_4 #endif #define TELEMETRY_DMA_Stream_TX DMA1_Stream6 #define TELEMETRY_DMA_Channel_TX DMA_Channel_4 @@ -590,7 +590,7 @@ #endif #if !defined(RADIO_T16) -#define EXTERNAL_ANTENNA + #define EXTERNAL_ANTENNA #endif #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA2) #define INTMODULE_PWR_GPIO GPIOA @@ -717,9 +717,9 @@ #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI15_10_IRQn #define INTMODULE_HEARTBEAT_REUSE_INTERRUPT_ROTARY_ENCODER #if defined(PXX2) -#define INTMODULE_HEARTBEAT_TRIGGER EXTI_Trigger_Falling + #define INTMODULE_HEARTBEAT_TRIGGER EXTI_Trigger_Falling #else -#define INTMODULE_HEARTBEAT_TRIGGER EXTI_Trigger_Rising + #define INTMODULE_HEARTBEAT_TRIGGER EXTI_Trigger_Rising #endif // Trainer Port From 656b022c7fe369f3d985b19c8f974516a356ddca Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 6 Jan 2020 22:39:03 +0100 Subject: [PATCH 58/63] Update CREDITS.txt --- CREDITS.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CREDITS.txt b/CREDITS.txt index ce69f45ad..e9ed1bac5 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -1682,3 +1682,5 @@ Sylvie Le Madec James Houck (monthly) Frank Steinmetz Gary Garland +Stefano Boggia +Jean-Jacques Pointel From 462ba50b0332a3cee5d36ad0cf102a2534ba7fc9 Mon Sep 17 00:00:00 2001 From: 3djc Date: Tue, 7 Jan 2020 07:25:15 +0100 Subject: [PATCH 59/63] Add internalmulti to T16 simu --- tools/build-companion-nightly.sh | 2 +- tools/build-companion-release.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/build-companion-nightly.sh b/tools/build-companion-nightly.sh index 58d64709c..bd5eb97ad 100755 --- a/tools/build-companion-nightly.sh +++ b/tools/build-companion-nightly.sh @@ -94,7 +94,7 @@ cmake ${COMMON_OPTIONS} -DPCB=X10 ${SRCDIR} make -j${JOBS} libsimulator rm CMakeCache.txt -cmake ${COMMON_OPTIONS} -DPCB=X10 -DPCBREV=T16 ${SRCDIR} +cmake ${COMMON_OPTIONS} -DPCB=X10 -DPCBREV=T16 -DINTERNAL_MODULE_MULTI=YES ${SRCDIR} make -j${JOBS} libsimulator rm CMakeCache.txt diff --git a/tools/build-companion-release.sh b/tools/build-companion-release.sh index 8ecc343c8..0529e9154 100755 --- a/tools/build-companion-release.sh +++ b/tools/build-companion-release.sh @@ -94,7 +94,7 @@ cmake ${COMMON_OPTIONS} -DPCB=X10 ${SRCDIR} make -j${JOBS} libsimulator rm CMakeCache.txt -cmake ${COMMON_OPTIONS} -DPCB=X10 -DPCBREV=T16 ${SRCDIR} +cmake ${COMMON_OPTIONS} -DPCB=X10 -DPCBREV=T16 -DINTERNAL_MODULE_MULTI=YES ${SRCDIR} make -j${JOBS} libsimulator rm CMakeCache.txt From 5cf3632879bdebd6123386a5cbe5c2b98525d62e Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 7 Jan 2020 07:56:41 +0100 Subject: [PATCH 60/63] Update CREDITS.txt --- CREDITS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.txt b/CREDITS.txt index e9ed1bac5..3ed94c926 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -1684,3 +1684,4 @@ Frank Steinmetz Gary Garland Stefano Boggia Jean-Jacques Pointel +Ferenc Kunkli From 20a33a93cd3f9afd24c25e262e351481a8f5b89d Mon Sep 17 00:00:00 2001 From: 3djc Date: Tue, 7 Jan 2020 10:09:52 +0100 Subject: [PATCH 61/63] Move to discord --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ddf9e4e4b..83960bd84 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ## OpenTX 2.3 Branch [![Travis build Status](https://travis-ci.org/opentx/opentx.svg?branch=2.3)](https://travis-ci.org/opentx/opentx) -[![Join the chat at https://chat.open-tx.org](https://camo.githubusercontent.com/3d659054abd6ce21c0e47cf3b83a51bda69ca282/68747470733a2f2f64656d6f2e726f636b65742e636861742f696d616765732f6a6f696e2d636861742e737667)](https://chat.open-tx.org) +[![Join the Discord chat](https://img.shields.io/badge/Discord_Chat-Join_Chat-yellow.svg)](https://discord.gg/pAmmCp2) [![Donate using Paypal](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=DJ9MASSKVW8WN) The ongoing development on 2.3.x is done in this branch. From c9e705b729e8a62bf595cceef3fef439b98d4e6f Mon Sep 17 00:00:00 2001 From: 3djc Date: Tue, 7 Jan 2020 10:11:47 +0100 Subject: [PATCH 62/63] lower case --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 83960bd84..35ebc3e02 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ## OpenTX 2.3 Branch [![Travis build Status](https://travis-ci.org/opentx/opentx.svg?branch=2.3)](https://travis-ci.org/opentx/opentx) -[![Join the Discord chat](https://img.shields.io/badge/Discord_Chat-Join_Chat-yellow.svg)](https://discord.gg/pAmmCp2) +[![Join the Discord chat](https://img.shields.io/badge/discord_chat-join_chat-yellow.svg)](https://discord.gg/pAmmCp2) [![Donate using Paypal](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=DJ9MASSKVW8WN) The ongoing development on 2.3.x is done in this branch. From 22dacf7f8551f31f7d21c33db28e109a0570a00d Mon Sep 17 00:00:00 2001 From: 3djc Date: Tue, 7 Jan 2020 10:13:07 +0100 Subject: [PATCH 63/63] Cosmetics --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 35ebc3e02..c966e7ed4 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ## OpenTX 2.3 Branch [![Travis build Status](https://travis-ci.org/opentx/opentx.svg?branch=2.3)](https://travis-ci.org/opentx/opentx) -[![Join the Discord chat](https://img.shields.io/badge/discord_chat-join_chat-yellow.svg)](https://discord.gg/pAmmCp2) +[![Join the Discord chat](https://img.shields.io/badge/discord-join_chat-yellow.svg)](https://discord.gg/pAmmCp2) [![Donate using Paypal](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=DJ9MASSKVW8WN) The ongoing development on 2.3.x is done in this branch.