diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 8097b7170..85b0f88a9 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -430,10 +430,12 @@ if(NOT MSVC) # these are in addition to CMAKE_CXX_FLAGS set(CMAKE_EXE_LINKER_FLAGS "-lm -T${RADIO_SRC_DIRECTORY}/${LINKER_SCRIPT} -Wl,-Map=firmware.map,--cref,--no-warn-mismatch,--gc-sections") + if(SEMIHOSTING) add_definitions(-DSEMIHOSTING) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --specs=rdimon.specs") endif() + # Use newlib nano, which saves a few kilobytes. if(NOT NANO STREQUAL NO) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --specs=nano.specs") @@ -446,7 +448,6 @@ if(NOT MSVC) set(SRC ${SRC} bin_allocator.cpp) endif() - if(PCB STREQUAL XLITE OR PCB STREQUAL X9D OR PCB STREQUAL X9D+ OR PCB STREQUAL X9E OR PCB STREQUAL X7 OR PCB STREQUAL X10 OR PCB STREQUAL X12S) add_subdirectory(targets/common/arm/stm32/bootloader) include_directories(${CMAKE_CURRENT_BINARY_DIR}/targets/common/arm/stm32/bootloader) @@ -462,6 +463,8 @@ if(NOT MSVC) endif() endif() + add_definitions(-DRTOS_COOS) + add_executable(firmware ${SRC} ${FIRMWARE_HEADERS}) link_libraries(firmware -lstdc++) add_dependencies(firmware ${FIRMWARE_DEPENDENCIES}) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 8d95c141f..746ddb8bd 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -21,7 +21,7 @@ #include "opentx.h" #include -extern OS_MutexID audioMutex; +extern RTOS_MUTEX_HANDLE audioMutex; const int16_t sineValues[] = { @@ -508,14 +508,14 @@ AudioQueue::AudioQueue() void audioTask(void * pdata) { while (!audioQueue.started()) { - CoTickDelay(1); + RTOS_WAIT_TICKS(1); } setSampleRate(AUDIO_SAMPLE_RATE); #if defined(PCBX12S) // The audio amp needs ~2s to start - CoTickDelay(500); // 1s + RTOS_WAIT_MS(1000); // 1s #endif if (!unexpectedShutdown) { @@ -527,7 +527,7 @@ void audioTask(void * pdata) DEBUG_TIMER_START(debugTimerAudioDuration); audioQueue.wakeup(); DEBUG_TIMER_STOP(debugTimerAudioDuration); - CoTickDelay(2/*4ms*/); + RTOS_WAIT_MS(4); } } #endif @@ -763,9 +763,9 @@ void AudioQueue::wakeup() // mix the normal context (tones and wavs) if (normalContext.isEmpty() && !fragmentsFifo.empty()) { - CoEnterMutexSection(audioMutex); + RTOS_LOCK_MUTEX(audioMutex); normalContext.setFragment(fragmentsFifo.get()); - CoLeaveMutexSection(audioMutex); + RTOS_UNLOCK_MUTEX(audioMutex); } result = normalContext.mixBuffer(buffer, g_eeGeneral.beepVolume, g_eeGeneral.wavVolume, fade); if (result > 0) { @@ -848,7 +848,7 @@ void AudioQueue::playTone(uint16_t freq, uint16_t len, uint16_t pause, uint8_t f return; #endif - CoEnterMutexSection(audioMutex); + RTOS_LOCK_MUTEX(audioMutex); freq = limit(BEEP_MIN_FREQ, freq, BEEP_MAX_FREQ); @@ -871,7 +871,7 @@ void AudioQueue::playTone(uint16_t freq, uint16_t len, uint16_t pause, uint8_t f } } - CoLeaveMutexSection(audioMutex); + RTOS_UNLOCK_MUTEX(audioMutex); } #if defined(SDCARD) @@ -899,7 +899,7 @@ void AudioQueue::playFile(const char * filename, uint8_t flags, uint8_t id) return; } - CoEnterMutexSection(audioMutex); + RTOS_LOCK_MUTEX(audioMutex); if (flags & PLAY_BACKGROUND) { backgroundContext.clear(); @@ -909,7 +909,7 @@ void AudioQueue::playFile(const char * filename, uint8_t flags, uint8_t id) fragmentsFifo.push(AudioFragment(filename, flags & 0x0f, id)); } - CoLeaveMutexSection(audioMutex); + RTOS_UNLOCK_MUTEX(audioMutex); } void AudioQueue::stopPlay(uint8_t id) @@ -922,12 +922,12 @@ void AudioQueue::stopPlay(uint8_t id) return; #endif - CoEnterMutexSection(audioMutex); + RTOS_LOCK_MUTEX(audioMutex); fragmentsFifo.removePromptById(id); backgroundContext.stop(id); - CoLeaveMutexSection(audioMutex); + RTOS_UNLOCK_MUTEX(audioMutex); } void AudioQueue::stopSD() @@ -942,19 +942,19 @@ void AudioQueue::stopSD() void AudioQueue::stopAll() { flush(); - CoEnterMutexSection(audioMutex); + RTOS_LOCK_MUTEX(audioMutex); priorityContext.clear(); normalContext.clear(); - CoLeaveMutexSection(audioMutex); + RTOS_UNLOCK_MUTEX(audioMutex); } void AudioQueue::flush() { - CoEnterMutexSection(audioMutex); + RTOS_LOCK_MUTEX(audioMutex); fragmentsFifo.clear(); varioContext.clear(); backgroundContext.clear(); - CoLeaveMutexSection(audioMutex); + RTOS_UNLOCK_MUTEX(audioMutex); } void audioPlay(unsigned int index, uint8_t id) diff --git a/radio/src/buzzer.cpp b/radio/src/buzzer.cpp index e61b6cf9b..ae63001ea 100644 --- a/radio/src/buzzer.cpp +++ b/radio/src/buzzer.cpp @@ -28,7 +28,7 @@ bool warble = false; bool warbleC; // The various "beep" tone lengths -static const pm_uint8_t beepTab[] PROGMEM = { +static const pm_uint8_t beepTab[] = { // key, trim, warn2, warn1, error 1, 1, 2, 10, 60, //xShort 1, 1, 4, 20, 80, //short diff --git a/radio/src/cli.cpp b/radio/src/cli.cpp index 0e1971438..67e4b632c 100644 --- a/radio/src/cli.cpp +++ b/radio/src/cli.cpp @@ -308,7 +308,7 @@ int cliTestNew() { char * tmp = 0; serialPrint("Allocating 1kB with new()"); - CoTickDelay(100); + RTOS_WAIT_MS(200); tmp = new char[1024]; if (tmp) { serialPrint("\tsuccess"); @@ -320,7 +320,7 @@ int cliTestNew() } serialPrint("Allocating 10MB with (std::nothrow) new()"); - CoTickDelay(100); + RTOS_WAIT_MS(200); tmp = new (std::nothrow) char[1024*1024*10]; if (tmp) { serialPrint("\tFAILURE, tmp = %p", tmp); @@ -332,7 +332,7 @@ int cliTestNew() } serialPrint("Allocating 10MB with new()"); - CoTickDelay(100); + RTOS_WAIT_MS(200); tmp = new char[1024*1024*10]; if (tmp) { serialPrint("\tFAILURE, tmp = %p", tmp); @@ -437,14 +437,14 @@ float runGraphicsTest(graphichTestFunc func, const char * name, uint32_t runtime uint32_t actualRuntime = (uint32_t)CoGetOSTime() - start; float result = (noRuns * 500.0f) / (float)actualRuntime; // runs/second serialPrint("Test %s speed: %0.2f, (%d runs in %d ms)", name, result, noRuns, actualRuntime*2); - CoTickDelay(100); + RTOS_WAIT_MS(200); return result; } int cliTestGraphics() { serialPrint("Starting graphics performance test..."); - CoTickDelay(100); + RTOS_WAIT_MS(200); watchdogSuspend(6000/*60s*/); if (pulsesStarted()) { @@ -581,7 +581,7 @@ float runMemoryTest(graphichTestFunc func, const char * name, uint32_t runtime) uint32_t actualRuntime = (uint32_t)CoGetOSTime() - start; float result = (noRuns * 500.0f) / (float)actualRuntime; // runs/second serialPrint("Test %s speed: %0.2f, (%d runs in %d ms)", name, result, noRuns, actualRuntime*2); - CoTickDelay(100); + RTOS_WAIT_MS(200); return result; } @@ -589,7 +589,7 @@ float runMemoryTest(graphichTestFunc func, const char * name, uint32_t runtime) int cliTestMemorySpeed() { serialPrint("Starting memory speed test..."); - CoTickDelay(100); + RTOS_WAIT_MS(200); watchdogSuspend(6000/*60s*/); if (pulsesStarted()) { @@ -610,7 +610,7 @@ int cliTestMemorySpeed() LTDC_Cmd(DISABLE); serialPrint("Disabling LCD..."); - CoTickDelay(100); + RTOS_WAIT_MS(200); result += RUN_GRAPHICS_TEST(testMemoryReadFrom_RAM_8bit, 200); result += RUN_GRAPHICS_TEST(testMemoryReadFrom_RAM_32bit, 200); @@ -936,7 +936,7 @@ void printDebugTimers() #endif #include "OsMutex.h" -extern OS_MutexID audioMutex; +extern RTOS_MUTEX_HANDLE audioMutex; void printAudioVars() { @@ -1124,7 +1124,7 @@ int cliRepeat(const char ** argv) counter = interval; uint8_t c; while (!cliRxFifo.pop(c) || !(c == '\r' || c == '\n' || c == ' ')) { - CoTickDelay(10); // 20ms + RTOS_WAIT_MS(20); // 20ms if (++counter >= interval) { cliExecCommand(&argv[2]); counter = 0; @@ -1299,7 +1299,7 @@ void cliTask(void * pdata) uint8_t c; while (!cliRxFifo.pop(c)) { - CoTickDelay(10); // 20ms + RTOS_WAIT_MS(20); // 20ms } if (c == 12) { diff --git a/radio/src/debug.cpp b/radio/src/debug.cpp index af883134e..e0fda135a 100644 --- a/radio/src/debug.cpp +++ b/radio/src/debug.cpp @@ -94,7 +94,7 @@ void dumpTraceBuffer() #if !defined(SIMU) if ((n % 5) == 0) { while (!serial2TxFifo.isEmpty()) { - CoTickDelay(1); + RTOS_WAIT_TICKS(1); } } #endif diff --git a/radio/src/gui/128x64/fonts.cpp b/radio/src/gui/128x64/fonts.cpp index 798a2ca61..299deb2a2 100644 --- a/radio/src/gui/128x64/fonts.cpp +++ b/radio/src/gui/128x64/fonts.cpp @@ -20,7 +20,7 @@ #include "opentx.h" -const pm_uchar font_5x7[] PROGMEM = { +const pm_uchar font_5x7[] = { #include "font_05x07.lbm" #if defined(TRANSLATIONS_DE) #include "font_de_05x07.lbm" @@ -44,13 +44,13 @@ const pm_uchar font_5x7[] PROGMEM = { }; #if defined(BOLD_SPECIFIC_FONT) -const pm_uchar font_5x7_B[] PROGMEM = { +const pm_uchar font_5x7_B[] = { #include "font_05x07_B_compressed.lbm" }; #endif #if !defined(BOOT) -const pm_uchar font_10x14[] PROGMEM = { +const pm_uchar font_10x14[] = { #include "font_10x14_compressed.lbm" #if defined(TRANSLATIONS_DE) #include "font_de_10x14.lbm" @@ -75,10 +75,10 @@ const pm_uchar font_10x14[] PROGMEM = { #endif #if !defined(BOOT) -const pm_uchar font_3x5[] PROGMEM = { +const pm_uchar font_3x5[] = { #include "font_03x05.lbm" }; -const pm_uchar font_4x6[] PROGMEM = { +const pm_uchar font_4x6[] = { #include "font_04x06.lbm" #if defined(TRANSLATIONS_DE) #include "font_de_04x06.lbm" @@ -101,7 +101,7 @@ const pm_uchar font_4x6[] PROGMEM = { #endif }; -const pm_uchar font_8x10[] PROGMEM = { +const pm_uchar font_8x10[] = { #include "font_08x10.lbm" #if defined(TRANSLATIONS_DE) #include "font_de_08x10.lbm" @@ -124,19 +124,19 @@ const pm_uchar font_8x10[] PROGMEM = { #endif }; -const pm_uchar font_22x38_num[] PROGMEM = { +const pm_uchar font_22x38_num[] = { #include "font_22x38_num.lbm" }; -const pm_uchar font_4x6_extra[] PROGMEM = { +const pm_uchar font_4x6_extra[] = { #include "font_04x06_extra.lbm" }; -const pm_uchar font_5x7_extra[] PROGMEM = { +const pm_uchar font_5x7_extra[] = { #include "font_05x07_extra.lbm" }; -const pm_uchar font_10x14_extra[] PROGMEM = { +const pm_uchar font_10x14_extra[] = { #include "font_10x14_extra.lbm" }; diff --git a/radio/src/gui/128x64/gui.h b/radio/src/gui/128x64/gui.h index cdf890c0a..d2ecd6bf2 100644 --- a/radio/src/gui/128x64/gui.h +++ b/radio/src/gui/128x64/gui.h @@ -361,7 +361,7 @@ void deleteExpoMix(uint8_t expo, uint8_t idx); void drawCheckBox(coord_t x, coord_t y, uint8_t value, LcdFlags attr); -extern const pm_uchar sticks[] PROGMEM; +extern const pm_uchar sticks[] ; void drawSplash(); void drawSecondSplash(); diff --git a/radio/src/gui/128x64/menus.h b/radio/src/gui/128x64/menus.h index e51504314..2a0a565d6 100644 --- a/radio/src/gui/128x64/menus.h +++ b/radio/src/gui/128x64/menus.h @@ -93,7 +93,7 @@ void menuRadioDiagAnalogs(event_t event); void menuRadioHardware(event_t event); void menuRadioCalibration(event_t event); -static const MenuHandlerFunc menuTabGeneral[] PROGMEM = { +static const MenuHandlerFunc menuTabGeneral[] = { menuRadioSetup, CASE_SDCARD(menuRadioSdManager) menuRadioSpecialFunctions, @@ -144,7 +144,7 @@ void menuModelDisplay(event_t event); void menuModelTemplates(event_t event); void menuModelGVarOne(event_t event); -static const MenuHandlerFunc menuTabModel[] PROGMEM = { +static const MenuHandlerFunc menuTabModel[] = { menuModelSelect, menuModelSetup, CASE_HELI(menuModelHeli) diff --git a/radio/src/gui/128x64/model_curve_edit.cpp b/radio/src/gui/128x64/model_curve_edit.cpp index 42abb30ea..3a0112109 100644 --- a/radio/src/gui/128x64/model_curve_edit.cpp +++ b/radio/src/gui/128x64/model_curve_edit.cpp @@ -166,9 +166,9 @@ void menuModelCurveOne(event_t event) lcdDrawFilledRect(3, 2*FH+4, 7*FW-2, 4*FH-2, SOLID, ERASE); lcdDrawRect(3, 2*FH+4, 7*FW-2, 4*FH-2); drawStringWithIndex(7, 3*FH, STR_PT, i+1, LEFT); - lcdDrawText(7, 4*FH, PSTR("x=")); + lcdDrawText(7, 4*FH, "x="); lcdDrawNumber(7+2*FW+1, 4*FH, x, LEFT|(selectionMode==1?attr:0)); - lcdDrawText(7, 5*FH, PSTR("y=")); + lcdDrawText(7, 5*FH, "y="); lcdDrawNumber(7+2*FW+1, 5*FH, points[i], LEFT|(selectionMode==2?attr:0)); // Selection square diff --git a/radio/src/gui/128x64/model_display.cpp b/radio/src/gui/128x64/model_display.cpp index 5c4f60759..3da6c10ff 100644 --- a/radio/src/gui/128x64/model_display.cpp +++ b/radio/src/gui/128x64/model_display.cpp @@ -123,7 +123,7 @@ void menuModelDisplay(event_t event) uint8_t screenIndex = TELEMETRY_CURRENT_SCREEN(k); drawStringWithIndex(0*FW, y, STR_SCREEN, screenIndex+1); TelemetryScreenType oldScreenType = TELEMETRY_SCREEN_TYPE(screenIndex); - TelemetryScreenType newScreenType = (TelemetryScreenType)editChoice(DISPLAY_COL2, y, PSTR(""), STR_VTELEMSCREENTYPE, oldScreenType, 0, TELEMETRY_SCREEN_TYPE_MAX, (menuHorizontalPosition==0 ? attr : 0), event); + TelemetryScreenType newScreenType = (TelemetryScreenType)editChoice(DISPLAY_COL2, y, "", STR_VTELEMSCREENTYPE, oldScreenType, 0, TELEMETRY_SCREEN_TYPE_MAX, (menuHorizontalPosition==0 ? attr : 0), event); if (newScreenType != oldScreenType) { g_model.frsky.screensType = (g_model.frsky.screensType & (~(0x03 << (2*screenIndex)))) | (newScreenType << (2*screenIndex)); memset(&g_model.frsky.screens[screenIndex], 0, sizeof(g_model.frsky.screens[screenIndex])); diff --git a/radio/src/gui/128x64/model_flightmodes.cpp b/radio/src/gui/128x64/model_flightmodes.cpp index 8654a955e..e96d7c2d7 100644 --- a/radio/src/gui/128x64/model_flightmodes.cpp +++ b/radio/src/gui/128x64/model_flightmodes.cpp @@ -67,12 +67,12 @@ void menuModelFlightModeOne(event_t event) #if defined(GVARS) && !defined(GVARS_IN_CURVES_SCREEN) #if defined(PCBTARANIS) #define VERTICAL_SHIFT (ITEM_MODEL_FLIGHT_MODE_FADE_IN-ITEM_MODEL_FLIGHT_MODE_TRIMS) - static const pm_uint8_t mstate_tab_fm1[] PROGMEM = {0, 3, 0, 0, (uint8_t)-1, 1, 1, 1, 1, 1, 1}; + static const pm_uint8_t mstate_tab_fm1[] = {0, 3, 0, 0, (uint8_t)-1, 1, 1, 1, 1, 1, 1}; #else #define VERTICAL_SHIFT (ITEM_MODEL_FLIGHT_MODE_FADE_IN-ITEM_MODEL_FLIGHT_MODE_SWITCH) - static const pm_uint8_t mstate_tab_fm1[] PROGMEM = {0, 0, 0, (uint8_t)-1, 1, 1, 1, 1, 1}; + static const pm_uint8_t mstate_tab_fm1[] = {0, 0, 0, (uint8_t)-1, 1, 1, 1, 1, 1}; #endif - static const pm_uint8_t mstate_tab_others[] PROGMEM = {0, 0, 3, IF_ROTARY_ENCODERS(NUM_ROTARY_ENCODERS-1) 0, 0, (uint8_t)-1, 2, 2, 2, 2, 2}; + static const pm_uint8_t mstate_tab_others[] = {0, 0, 3, IF_ROTARY_ENCODERS(NUM_ROTARY_ENCODERS-1) 0, 0, (uint8_t)-1, 2, 2, 2, 2, 2}; check(event, 0, NULL, 0, (s_currIdx == 0) ? mstate_tab_fm1 : mstate_tab_others, DIM(mstate_tab_others)-1, ITEM_MODEL_FLIGHT_MODE_MAX - HEADER_LINE - (s_currIdx==0 ? (ITEM_MODEL_FLIGHT_MODE_FADE_IN-ITEM_MODEL_FLIGHT_MODE_SWITCH-1) : 0)); diff --git a/radio/src/gui/128x64/model_inputs_mixes.cpp b/radio/src/gui/128x64/model_inputs_mixes.cpp index 0478723a2..6535b8821 100644 --- a/radio/src/gui/128x64/model_inputs_mixes.cpp +++ b/radio/src/gui/128x64/model_inputs_mixes.cpp @@ -460,7 +460,7 @@ void menuModelMixOne(event_t event) } } else { - lcdDrawText(COLUMN_X+MIXES_2ND_COLUMN, y, PSTR("Diff"), menuHorizontalPosition==0 ? attr : 0); + lcdDrawText(COLUMN_X+MIXES_2ND_COLUMN, y, "Diff", menuHorizontalPosition==0 ? attr : 0); md2->curveParam = GVAR_MENU_ITEM(COLUMN_X+MIXES_2ND_COLUMN+5*FW, y, curveParam, -100, 100, LEFT|(menuHorizontalPosition==1 ? attr : 0), 0, editMode>0 ? event : 0); if (attr && editMode>0 && menuHorizontalPosition==0) { int8_t tmp = 0; @@ -508,7 +508,7 @@ void menuModelMixOne(event_t event) } } -#define _STR_MAX(x) PSTR("/" #x) +#define _STR_MAX(x) "/" #x #define STR_MAX(x) _STR_MAX(x) #define EXPO_LINE_WEIGHT_POS 7*FW+1 diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 7e70bdce9..b8c9570a0 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -613,7 +613,7 @@ void menuModelSetup(event_t event) attr = BLINK | INVERS; } lcdDrawChar(MODEL_SETUP_2ND_COLUMN+i*FW, y, (swactive) ? c : '-', attr); - lcdDrawText(MODEL_SETUP_2ND_COLUMN+(NUM_SWITCHES*FW), y, PSTR("<]"), (menuHorizontalPosition == NUM_SWITCHES-1 && !NO_HIGHLIGHT()) ? line : 0); + lcdDrawText(MODEL_SETUP_2ND_COLUMN+(NUM_SWITCHES*FW), y, "<]", (menuHorizontalPosition == NUM_SWITCHES-1 && !NO_HIGHLIGHT()) ? line : 0); } #endif break; @@ -621,7 +621,7 @@ void menuModelSetup(event_t event) #if defined(PCBTARANIS) case ITEM_MODEL_POTS_WARNING: lcdDrawTextAlignedLeft(y, STR_POTWARNING); - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, PSTR("\004""OFF\0""Man\0""Auto"), g_model.potsWarnMode, (menuHorizontalPosition == 0) ? attr : 0); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, "\004""OFF\0""Man\0""Auto", g_model.potsWarnMode, (menuHorizontalPosition == 0) ? attr : 0); if (attr && (menuHorizontalPosition == 0)) { CHECK_INCDEC_MODELVAR(event, g_model.potsWarnMode, POTS_WARN_OFF, POTS_WARN_AUTO); storageDirty(EE_MODEL); @@ -1269,7 +1269,7 @@ void menuModelSetup(event_t event) #if 0 case ITEM_MODEL_PPM2_PROTOCOL: - lcdDrawTextAlignedLeft(y, PSTR("Port2")); + lcdDrawTextAlignedLeft(y, "Port2"); lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VPROTOS, 0, 0); lcdDrawText(MODEL_SETUP_2ND_COLUMN+4*FW+3, y, STR_CH, menuHorizontalPosition<=0 ? attr : 0); lcdDrawNumber(lcdLastRightPos, y, g_model.moduleData[1].channelsStart+1, LEFT | (menuHorizontalPosition<=0 ? attr : 0)); diff --git a/radio/src/gui/128x64/model_telemetry.cpp b/radio/src/gui/128x64/model_telemetry.cpp index 861ce008b..5e763fd5c 100644 --- a/radio/src/gui/128x64/model_telemetry.cpp +++ b/radio/src/gui/128x64/model_telemetry.cpp @@ -545,10 +545,10 @@ void menuModelTelemetryFrsky(event_t event) #if defined(MULTIMODULE) if (telemetryProtocol == PROTOCOL_MULTIMODULE && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MM_RF_PROTO_FS_AFHDS2A) - lcdDrawTextAlignedLeft(y, PSTR("RSNR")); + lcdDrawTextAlignedLeft(y, "RSNR"); else #endif - lcdDrawTextAlignedLeft(y, PSTR("RSSI")); + lcdDrawTextAlignedLeft(y, "RSSI"); break; case ITEM_TELEMETRY_RSSI_ALARM1: diff --git a/radio/src/gui/128x64/popups.cpp b/radio/src/gui/128x64/popups.cpp index 11bd4f924..c00357a4f 100644 --- a/radio/src/gui/128x64/popups.cpp +++ b/radio/src/gui/128x64/popups.cpp @@ -47,7 +47,7 @@ void showMessageBox(const pm_char * str) lcdRefresh(); } -const pm_uchar ASTERISK_BITMAP[] PROGMEM = { +const pm_uchar ASTERISK_BITMAP[] = { #include "asterisk.lbm" }; diff --git a/radio/src/gui/128x64/radio_diaganas.cpp b/radio/src/gui/128x64/radio_diaganas.cpp index 159da24ba..6ae98b6c1 100644 --- a/radio/src/gui/128x64/radio_diaganas.cpp +++ b/radio/src/gui/128x64/radio_diaganas.cpp @@ -45,7 +45,7 @@ void menuRadioDiagAnalogs(event_t event) #else coord_t y = MENU_HEADER_HEIGHT + 1 + (i/2)*FH; uint8_t x = (i & 1) ? LCD_W/2+FW : 0; - drawStringWithIndex(x, y, PSTR("A"), i+1); + drawStringWithIndex(x, y, "A", i+1); lcdDrawChar(lcdNextPos, y, ':'); #endif lcdDrawHexNumber(x+3*FW-1, y, anaIn(i)); diff --git a/radio/src/gui/128x64/radio_hardware.cpp b/radio/src/gui/128x64/radio_hardware.cpp index d261abaa9..85bb01e33 100644 --- a/radio/src/gui/128x64/radio_hardware.cpp +++ b/radio/src/gui/128x64/radio_hardware.cpp @@ -52,7 +52,7 @@ void menuRadioHardware(event_t event) break; case ITEM_RADIO_HARDWARE_STICKS_GAINS_LABELS: - lcdDrawTextAlignedLeft(y, PSTR("Sticks")); + lcdDrawTextAlignedLeft(y, "Sticks"); break; case ITEM_RADIO_HARDWARE_STICK_LV_GAIN: @@ -60,8 +60,8 @@ void menuRadioHardware(event_t event) case ITEM_RADIO_HARDWARE_STICK_RV_GAIN: case ITEM_RADIO_HARDWARE_STICK_RH_GAIN: { - lcdDrawTextAtIndex(INDENT_WIDTH, y, PSTR("\002LVLHRVRH"), k-ITEM_RADIO_HARDWARE_STICK_LV_GAIN, 0); - lcdDrawText(INDENT_WIDTH+3*FW, y, PSTR("Gain")); + lcdDrawTextAtIndex(INDENT_WIDTH, y, "\002LVLHRVRH", k-ITEM_RADIO_HARDWARE_STICK_LV_GAIN, 0); + lcdDrawText(INDENT_WIDTH+3*FW, y, "Gain"); uint8_t mask = (1<<(k-ITEM_RADIO_HARDWARE_STICK_LV_GAIN)); uint8_t val = (g_eeGeneral.sticksGain & mask ? 1 : 0); lcdDrawChar(HW_SETTINGS_COLUMN, y, val ? '2' : '1', attr); @@ -77,13 +77,13 @@ void menuRadioHardware(event_t event) #if defined(ROTARY_ENCODERS) case ITEM_RADIO_HARDWARE_ROTARY_ENCODER: - g_eeGeneral.rotarySteps = editChoice(HW_SETTINGS_COLUMN, y, PSTR("Rotary Encoder"), PSTR("\0062steps4steps"), g_eeGeneral.rotarySteps, 0, 1, attr, event); + g_eeGeneral.rotarySteps = editChoice(HW_SETTINGS_COLUMN, y, "Rotary Encoder", "\0062steps4steps", g_eeGeneral.rotarySteps, 0, 1, attr, event); break; #endif #if defined(BLUETOOTH) case ITEM_RADIO_HARDWARE_BT_BAUDRATE: - g_eeGeneral.bluetoothBaudrate = editChoice(HW_SETTINGS_COLUMN, y, STR_BAUDRATE, PSTR("\005115k 9600 19200"), g_eeGeneral.bluetoothBaudrate, 0, 2, attr, event); + g_eeGeneral.bluetoothBaudrate = editChoice(HW_SETTINGS_COLUMN, y, STR_BAUDRATE, "\005115k 9600 19200", g_eeGeneral.bluetoothBaudrate, 0, 2, attr, event); if (attr && checkIncDec_Ret) { btInit(); } @@ -235,7 +235,7 @@ void menuRadioHardware(event_t event) pauseMixerCalculations(); pausePulses(); EXTERNAL_MODULE_OFF(); - CoTickDelay(10); // 20ms so that the pulses interrupt will reinit the frame rate + RTOS_WAIT_MS(20); // 20ms so that the pulses interrupt will reinit the frame rate telemetryProtocol = 255; // force telemetry port + module reinitialization EXTERNAL_MODULE_ON(); resumePulses(); diff --git a/radio/src/gui/128x64/radio_setup.cpp b/radio/src/gui/128x64/radio_setup.cpp index 2ec1246b3..a962a490f 100644 --- a/radio/src/gui/128x64/radio_setup.cpp +++ b/radio/src/gui/128x64/radio_setup.cpp @@ -22,7 +22,7 @@ #include "opentx.h" -const pm_uchar sticks[] PROGMEM = { +const pm_uchar sticks[] = { #include "sticks.lbm" }; @@ -166,7 +166,7 @@ void menuRadioSetup(event_t event) { int16_t year = TM_YEAR_BASE + t.tm_year; int8_t dlim = (((((year%4==0) && (year%100!=0)) || (year%400==0)) && (t.tm_mon==1)) ? 1 : 0); - static const pm_uint8_t dmon[] PROGMEM = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + static const pm_uint8_t dmon[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; dlim += pgm_read_byte(&dmon[t.tm_mon]); lcdDrawNumber(RADIO_SETUP_DATE_COLUMN+6*FW-4, y, t.tm_mday, rowattr|LEADING0|RIGHT, 2); if (rowattr && (s_editMode>0 || p1valdiff)) t.tm_mday = checkIncDec(event, t.tm_mday, 1, dlim, 0); @@ -507,12 +507,12 @@ void menuRadioSetup(event_t event) #if defined(FAI_CHOICE) case ITEM_SETUP_FAI: - editCheckBox(g_eeGeneral.fai, RADIO_SETUP_2ND_COLUMN, y, PSTR("FAI Mode"), attr, event); + editCheckBox(g_eeGeneral.fai, RADIO_SETUP_2ND_COLUMN, y, "FAI Mode", attr, event); if (attr && checkIncDec_Ret) { if (g_eeGeneral.fai) - POPUP_WARNING(PSTR("FAI\001mode blocked!")); + POPUP_WARNING("FAI\001mode blocked!"); else - POPUP_CONFIRMATION(PSTR("FAI mode?")); + POPUP_CONFIRMATION("FAI mode?"); } break; #endif diff --git a/radio/src/gui/128x64/radio_version.cpp b/radio/src/gui/128x64/radio_version.cpp index 1c826aa4f..66c27cbef 100644 --- a/radio/src/gui/128x64/radio_version.cpp +++ b/radio/src/gui/128x64/radio_version.cpp @@ -37,11 +37,11 @@ void menuRadioVersion(event_t event) #if defined(COPROCESSOR) if (Coproc_valid == 1) { - lcdDrawTextAlignedLeft(6*FH, PSTR("CoPr:")); + lcdDrawTextAlignedLeft(6*FH, "CoPr:"); lcdDraw8bitsNumber(10*FW, 6*FH, Coproc_read); } else { - lcdDrawTextAlignedLeft(6*FH, PSTR("CoPr: ---")); + lcdDrawTextAlignedLeft(6*FH, "CoPr: ---"); } #elif defined(EEPROM_RLC) lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT+5*FH+1, STR_EEBACKUP); diff --git a/radio/src/gui/128x64/splash.cpp b/radio/src/gui/128x64/splash.cpp index 6ae46334e..7cfeb5778 100644 --- a/radio/src/gui/128x64/splash.cpp +++ b/radio/src/gui/128x64/splash.cpp @@ -41,7 +41,7 @@ #endif #if defined(SPLASH) -const pm_uchar splashdata[] PROGMEM = { +const pm_uchar splashdata[] = { 'S','P','S',0, #include "bitmaps/128x64/splash.lbm" 'S','P','E',0 }; @@ -65,7 +65,7 @@ void drawSplash() #endif #if defined(SPLASH_FRSKY) -const pm_uchar splashdata2[] PROGMEM = { +const pm_uchar splashdata2[] = { 'S','F','S',0, #include "bitmaps/128x64/splash_frsky.lbm" 'S','F','E',0 }; diff --git a/radio/src/gui/128x64/view_about.cpp b/radio/src/gui/128x64/view_about.cpp index e5af021d4..cf325469f 100644 --- a/radio/src/gui/128x64/view_about.cpp +++ b/radio/src/gui/128x64/view_about.cpp @@ -20,7 +20,7 @@ #include "opentx.h" -const pm_uchar about_bmp[] PROGMEM = { +const pm_uchar about_bmp[] = { #include "about.lbm" }; diff --git a/radio/src/gui/128x64/view_main.cpp b/radio/src/gui/128x64/view_main.cpp index 4411ba95b..3459c77e8 100644 --- a/radio/src/gui/128x64/view_main.cpp +++ b/radio/src/gui/128x64/view_main.cpp @@ -564,12 +564,12 @@ void menuMainView(event_t event) warningText = STR_GLOBAL_VAR; drawMessageBox(); lcdDrawSizedText(16, 5*FH, g_model.gvars[gvarLastChanged].name, LEN_GVAR_NAME, ZCHAR); - lcdDrawText(16+6*FW, 5*FH, PSTR("["), BOLD); + lcdDrawText(16+6*FW, 5*FH, "[", BOLD); drawGVarValue(lcdLastRightPos, 5*FH, gvarLastChanged, GVAR_VALUE(gvarLastChanged, getGVarFlightMode(mixerCurrentFlightMode, gvarLastChanged)), LEFT|BOLD); if (g_model.gvars[gvarLastChanged].unit) { lcdDrawText(lcdLastRightPos, 5*FH, "%", BOLD); } - lcdDrawText(lcdLastRightPos, 5*FH, PSTR("]"), BOLD); + lcdDrawText(lcdLastRightPos, 5*FH, "]", BOLD); warningText = NULL; } #endif @@ -577,7 +577,7 @@ void menuMainView(event_t event) #if defined(DSM2) if (moduleFlag[0] == MODULE_BIND) { // Issue 98 - lcdDrawText(15*FW, 0, PSTR("BIND"), 0); + lcdDrawText(15*FW, 0, "BIND", 0); } #endif } diff --git a/radio/src/gui/128x64/view_statistics.cpp b/radio/src/gui/128x64/view_statistics.cpp index 4ab6d57a8..73c1c7370 100644 --- a/radio/src/gui/128x64/view_statistics.cpp +++ b/radio/src/gui/128x64/view_statistics.cpp @@ -187,13 +187,13 @@ void menuStatisticsDebug(event_t event) lcdDrawTextAlignedLeft(MENU_DEBUG_Y_COPROC, STR_COPROC_TEMP); if (Coproc_read==0) { - lcdDrawText(MENU_DEBUG_COL1_OFS, MENU_DEBUG_Y_COPROC, PSTR("Co Proc NACK"),INVERS); + lcdDrawText(MENU_DEBUG_COL1_OFS, MENU_DEBUG_Y_COPROC, "Co Proc NACK",INVERS); } else if (Coproc_read==0x81) { - lcdDrawText(MENU_DEBUG_COL1_OFS, MENU_DEBUG_Y_COPROC, PSTR("Inst.TinyApp"),INVERS); + lcdDrawText(MENU_DEBUG_COL1_OFS, MENU_DEBUG_Y_COPROC, "Inst.TinyApp",INVERS); } else if (Coproc_read<3) { - lcdDrawText(MENU_DEBUG_COL1_OFS, MENU_DEBUG_Y_COPROC, PSTR("Upgr.TinyApp"),INVERS); + lcdDrawText(MENU_DEBUG_COL1_OFS, MENU_DEBUG_Y_COPROC, "Upgr.TinyApp",INVERS); } else { drawValueWithUnit(MENU_DEBUG_COL1_OFS, MENU_DEBUG_Y_COPROC, Coproc_temp, UNIT_TEMPERATURE, LEFT); diff --git a/radio/src/gui/128x64/widgets.cpp b/radio/src/gui/128x64/widgets.cpp index f69c042e0..232352eee 100644 --- a/radio/src/gui/128x64/widgets.cpp +++ b/radio/src/gui/128x64/widgets.cpp @@ -246,7 +246,7 @@ void drawProgressBar(const char * label, int num, int den) lcdRefresh(); } -const pm_uchar SLEEP_BITMAP[] PROGMEM = { +const pm_uchar SLEEP_BITMAP[] = { #include "sleep.lbm" }; diff --git a/radio/src/gui/212x64/fonts.cpp b/radio/src/gui/212x64/fonts.cpp index 94197cfcd..86e660c3a 100644 --- a/radio/src/gui/212x64/fonts.cpp +++ b/radio/src/gui/212x64/fonts.cpp @@ -20,7 +20,7 @@ #include "opentx.h" -const pm_uchar font_5x7[] PROGMEM = { +const pm_uchar font_5x7[] = { #include "font_05x07.lbm" #if defined(TRANSLATIONS_DE) #include "font_de_05x07.lbm" @@ -43,12 +43,12 @@ const pm_uchar font_5x7[] PROGMEM = { #endif }; -const pm_uchar font_5x7_B[] PROGMEM = { +const pm_uchar font_5x7_B[] = { #include "font_05x07_B_compressed.lbm" }; #if !defined(BOOT) -const pm_uchar font_10x14[] PROGMEM = { +const pm_uchar font_10x14[] = { #include "font_10x14_compressed.lbm" #if defined(TRANSLATIONS_DE) #include "font_de_10x14.lbm" @@ -71,11 +71,11 @@ const pm_uchar font_10x14[] PROGMEM = { #endif }; -const pm_uchar font_3x5[] PROGMEM = { +const pm_uchar font_3x5[] = { #include "font_03x05.lbm" }; -const pm_uchar font_4x6[] PROGMEM = { +const pm_uchar font_4x6[] = { #include "font_04x06.lbm" #if defined(TRANSLATIONS_DE) #include "font_de_04x06.lbm" @@ -98,7 +98,7 @@ const pm_uchar font_4x6[] PROGMEM = { #endif }; -const pm_uchar font_8x10[] PROGMEM = { +const pm_uchar font_8x10[] = { #include "font_08x10.lbm" #if defined(TRANSLATIONS_DE) #include "font_de_08x10.lbm" @@ -121,19 +121,19 @@ const pm_uchar font_8x10[] PROGMEM = { #endif }; -const pm_uchar font_22x38_num[] PROGMEM = { +const pm_uchar font_22x38_num[] = { #include "font_22x38_num.lbm" }; -const pm_uchar font_4x6_extra[] PROGMEM = { +const pm_uchar font_4x6_extra[] = { #include "font_04x06_extra.lbm" }; -const pm_uchar font_5x7_extra[] PROGMEM = { +const pm_uchar font_5x7_extra[] = { #include "font_05x07_extra.lbm" }; -const pm_uchar font_10x14_extra[] PROGMEM = { +const pm_uchar font_10x14_extra[] = { #include "font_10x14_extra.lbm" }; diff --git a/radio/src/gui/212x64/gui.h b/radio/src/gui/212x64/gui.h index b0db1e2ef..0e192086e 100644 --- a/radio/src/gui/212x64/gui.h +++ b/radio/src/gui/212x64/gui.h @@ -326,7 +326,7 @@ uint8_t switchToMix(uint8_t source); extern coord_t scrollbar_X; #define SET_SCROLLBAR_X(x) scrollbar_X = (x); -extern const pm_uchar sticks[] PROGMEM; +extern const pm_uchar sticks[] ; #if defined(FLIGHT_MODES) void displayFlightModes(coord_t x, coord_t y, FlightModesType value); diff --git a/radio/src/gui/212x64/model_display.cpp b/radio/src/gui/212x64/model_display.cpp index 323b2ed45..42520142a 100644 --- a/radio/src/gui/212x64/model_display.cpp +++ b/radio/src/gui/212x64/model_display.cpp @@ -125,7 +125,7 @@ void menuModelDisplay(event_t event) uint8_t screenIndex = TELEMETRY_CURRENT_SCREEN(k); drawStringWithIndex(0*FW, y, STR_SCREEN, screenIndex+1); TelemetryScreenType oldScreenType = TELEMETRY_SCREEN_TYPE(screenIndex); - TelemetryScreenType newScreenType = (TelemetryScreenType)editChoice(DISPLAY_COL2, y, PSTR(""), STR_VTELEMSCREENTYPE, oldScreenType, 0, TELEMETRY_SCREEN_TYPE_MAX, (menuHorizontalPosition==0 ? attr : 0), event); + TelemetryScreenType newScreenType = (TelemetryScreenType)editChoice(DISPLAY_COL2, y, "", STR_VTELEMSCREENTYPE, oldScreenType, 0, TELEMETRY_SCREEN_TYPE_MAX, (menuHorizontalPosition==0 ? attr : 0), event); if (newScreenType != oldScreenType) { g_model.frsky.screensType = (g_model.frsky.screensType & (~(0x03 << (2*screenIndex)))) | (newScreenType << (2*screenIndex)); memset(&g_model.frsky.screens[screenIndex], 0, sizeof(g_model.frsky.screens[screenIndex])); diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 28592b520..7ea13ad9a 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -574,7 +574,7 @@ void menuModelSetup(event_t event) #endif lcdDrawTextAlignedLeft(y, STR_POTWARNING); - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, PSTR("\004""OFF\0""Man\0""Auto"), g_model.potsWarnMode, (menuHorizontalPosition == 0) ? attr : 0); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, "\004""OFF\0""Man\0""Auto", g_model.potsWarnMode, (menuHorizontalPosition == 0) ? attr : 0); if (attr && (menuHorizontalPosition == 0)) { CHECK_INCDEC_MODELVAR(event, g_model.potsWarnMode, POTS_WARN_OFF, POTS_WARN_AUTO); storageDirty(EE_MODEL); diff --git a/radio/src/gui/212x64/model_telemetry.cpp b/radio/src/gui/212x64/model_telemetry.cpp index a15d5c03c..13c2f1c21 100644 --- a/radio/src/gui/212x64/model_telemetry.cpp +++ b/radio/src/gui/212x64/model_telemetry.cpp @@ -519,10 +519,10 @@ void menuModelTelemetryFrsky(event_t event) if (g_model.moduleData[INTERNAL_MODULE].type != MODULE_TYPE_XJT && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MM_RF_PROTO_FS_AFHDS2A) - lcdDrawTextAlignedLeft(y, PSTR("RSNR")); + lcdDrawTextAlignedLeft(y, "RSNR"); else #endif - lcdDrawTextAlignedLeft(y, PSTR("RSSI")); + lcdDrawTextAlignedLeft(y, "RSSI"); break; case ITEM_TELEMETRY_RSSI_ALARM1: diff --git a/radio/src/gui/212x64/popups.cpp b/radio/src/gui/212x64/popups.cpp index 40d73451c..db3bf4d26 100644 --- a/radio/src/gui/212x64/popups.cpp +++ b/radio/src/gui/212x64/popups.cpp @@ -44,7 +44,7 @@ void showMessageBox(const char * title) lcdRefresh(); } -const pm_uchar ASTERISK_BITMAP[] PROGMEM = { +const pm_uchar ASTERISK_BITMAP[] = { #include "asterisk.lbm" }; diff --git a/radio/src/gui/212x64/radio_setup.cpp b/radio/src/gui/212x64/radio_setup.cpp index edc9c1fe7..204766ad4 100644 --- a/radio/src/gui/212x64/radio_setup.cpp +++ b/radio/src/gui/212x64/radio_setup.cpp @@ -22,7 +22,7 @@ #include "opentx.h" -const pm_uchar sticks[] PROGMEM = { +const pm_uchar sticks[] = { #include "sticks.lbm" }; @@ -149,7 +149,7 @@ void menuRadioSetup(event_t event) { int16_t year = TM_YEAR_BASE + t.tm_year; int8_t dlim = (((((year%4==0) && (year%100!=0)) || (year%400==0)) && (t.tm_mon==1)) ? 1 : 0); - static const pm_uint8_t dmon[] PROGMEM = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + static const pm_uint8_t dmon[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; dlim += pgm_read_byte(&dmon[t.tm_mon]); lcdDrawNumber(RADIO_SETUP_DATE_COLUMN+6*FW-4, y, t.tm_mday, rowattr|LEADING0|RIGHT, 2); if (rowattr && s_editMode>0) t.tm_mday = checkIncDec(event, t.tm_mday, 1, dlim, 0); @@ -455,12 +455,12 @@ void menuRadioSetup(event_t event) #if defined(FAI_CHOICE) case ITEM_SETUP_FAI: - editCheckBox(g_eeGeneral.fai, RADIO_SETUP_2ND_COLUMN, y, PSTR("FAI Mode"), attr, event); + editCheckBox(g_eeGeneral.fai, RADIO_SETUP_2ND_COLUMN, y, "FAI Mode"), attr, event; if (attr && checkIncDec_Ret) { if (g_eeGeneral.fai) - POPUP_WARNING(PSTR("FAI\001mode blocked!")); + POPUP_WARNING("FAI\001mode blocked!"); else - POPUP_CONFIRMATION(PSTR("FAI mode?")); + POPUP_CONFIRMATION("FAI mode?"); } break; #endif diff --git a/radio/src/gui/212x64/splash.cpp b/radio/src/gui/212x64/splash.cpp index 94f81b530..6066f81e6 100644 --- a/radio/src/gui/212x64/splash.cpp +++ b/radio/src/gui/212x64/splash.cpp @@ -21,7 +21,7 @@ #include "opentx.h" #if defined(SPLASH) -const pm_uchar splashdata[] PROGMEM = { +const pm_uchar splashdata[] = { 'S','P','S',0, #include "bitmaps/212x64/splash.lbm" 'S','P','E',0 }; @@ -44,7 +44,7 @@ void drawSplash() #endif #if defined(SPLASH_FRSKY) -const pm_uchar splashdata2[] PROGMEM = { +const pm_uchar splashdata2[] = { 'S','F','S',0, #include "bitmaps/212x64/splash_frsky.lbm" 'S','F','E',0 }; diff --git a/radio/src/gui/212x64/view_about.cpp b/radio/src/gui/212x64/view_about.cpp index 26cc7c445..731b715c3 100644 --- a/radio/src/gui/212x64/view_about.cpp +++ b/radio/src/gui/212x64/view_about.cpp @@ -20,7 +20,7 @@ #include "opentx.h" -const pm_uchar about_bmp[] PROGMEM = { +const pm_uchar about_bmp[] = { #include "about.lbm" }; diff --git a/radio/src/gui/212x64/view_main.cpp b/radio/src/gui/212x64/view_main.cpp index c99561bcd..61e0e12ac 100644 --- a/radio/src/gui/212x64/view_main.cpp +++ b/radio/src/gui/212x64/view_main.cpp @@ -49,11 +49,11 @@ #define TRIM_LEN 27 #define MARKER_WIDTH 5 -const pm_uchar logo_taranis[] PROGMEM = { +const pm_uchar logo_taranis[] = { #include "logo.lbm" }; -const pm_uchar icons[] PROGMEM = { +const pm_uchar icons[] = { #include "icons.lbm" }; @@ -594,9 +594,9 @@ void menuMainView(event_t event) lcdDrawRect(BITMAP_X, BITMAP_Y, 64, 32); drawStringWithIndex(BITMAP_X+FW, BITMAP_Y+FH-1, STR_GV, gvarLastChanged+1); lcdDrawSizedText(BITMAP_X+4*FW+FW/2, BITMAP_Y+FH-1, g_model.gvars[gvarLastChanged].name, LEN_GVAR_NAME, ZCHAR); - lcdDrawText(BITMAP_X+FW, BITMAP_Y+2*FH+3, PSTR("["), BOLD); + lcdDrawText(BITMAP_X+FW, BITMAP_Y+2*FH+3, "[", BOLD; drawGVarValue(BITMAP_X+2*FW, BITMAP_Y+2*FH+3, gvarLastChanged, GVAR_VALUE(gvarLastChanged, getGVarFlightMode(mixerCurrentFlightMode, gvarLastChanged)), LEFT|BOLD); - lcdDrawText(lcdLastRightPos, BITMAP_Y+2*FH+3, PSTR("]"), BOLD); + lcdDrawText(lcdLastRightPos, BITMAP_Y+2*FH+3, "]", BOLD; } #endif } diff --git a/radio/src/gui/212x64/widgets.cpp b/radio/src/gui/212x64/widgets.cpp index 27eaacac8..03193e1ce 100644 --- a/radio/src/gui/212x64/widgets.cpp +++ b/radio/src/gui/212x64/widgets.cpp @@ -20,7 +20,7 @@ #include "opentx.h" -const pm_uchar SLEEP_BITMAP[] PROGMEM = { +const pm_uchar SLEEP_BITMAP[] = { #include "../../bitmaps/212x64/sleep.lbm" }; @@ -34,7 +34,7 @@ void drawSleepBitmap() } #if defined(PWR_BUTTON_PRESS) -const pm_uchar SHUTDOWN_BITMAP[] PROGMEM = { +const pm_uchar SHUTDOWN_BITMAP[] = { #include "../../bitmaps/212x64/shutdown.lbm" }; diff --git a/radio/src/gui/480x272/menus.h b/radio/src/gui/480x272/menus.h index aaa2146fe..3b6a41a66 100644 --- a/radio/src/gui/480x272/menus.h +++ b/radio/src/gui/480x272/menus.h @@ -218,7 +218,7 @@ bool menuStatsDebug(event_t event); bool menuStatsAnalogs(event_t event); bool menuStatsTraces(event_t event); -static const MenuHandlerFunc menuTabStats[] PROGMEM = { +static const MenuHandlerFunc menuTabStats[] = { menuStatsGraph, menuStatsDebug, menuStatsAnalogs, @@ -243,7 +243,7 @@ extern uint8_t lastMonitorPage; extern void drawSingleMixerBar(coord_t, coord_t, coord_t, coord_t, uint8_t); extern void drawSingleOutputBar(coord_t, coord_t, coord_t, coord_t, uint8_t); -extern const MenuHandlerFunc menuTabScreensSetup[1+MAX_CUSTOM_SCREENS] PROGMEM; +extern const MenuHandlerFunc menuTabScreensSetup[1+MAX_CUSTOM_SCREENS] ; bool menuFirstCalib(event_t event); bool menuMainView(event_t event); diff --git a/radio/src/gui/480x272/model_inputs.cpp b/radio/src/gui/480x272/model_inputs.cpp index 0fac6fc0d..111d42d6b 100644 --- a/radio/src/gui/480x272/model_inputs.cpp +++ b/radio/src/gui/480x272/model_inputs.cpp @@ -303,7 +303,7 @@ bool menuModelExpoOne(event_t event) return true; } -#define _STR_MAX(x) PSTR("/" #x) +#define _STR_MAX(x) "/" #x #define STR_MAX(x) _STR_MAX(x) #define EXPO_LINE_WEIGHT_POS 125 diff --git a/radio/src/gui/480x272/model_mixes.cpp b/radio/src/gui/480x272/model_mixes.cpp index f37c276da..1672308bd 100644 --- a/radio/src/gui/480x272/model_mixes.cpp +++ b/radio/src/gui/480x272/model_mixes.cpp @@ -280,7 +280,7 @@ bool menuModelMixOne(event_t event) return true; } -#define _STR_MAX(x) PSTR("/" #x) +#define _STR_MAX(x) "/" #x #define STR_MAX(x) _STR_MAX(x) #define MIX_LINE_WEIGHT_POS 105 diff --git a/radio/src/gui/480x272/model_setup.cpp b/radio/src/gui/480x272/model_setup.cpp index 679b9eeae..ef2f254ca 100644 --- a/radio/src/gui/480x272/model_setup.cpp +++ b/radio/src/gui/480x272/model_setup.cpp @@ -530,7 +530,7 @@ bool menuModelSetup(event_t event) case ITEM_MODEL_SLIDPOT_WARNING_STATE: lcdDrawText(MENUS_MARGIN_LEFT, y,STR_POTWARNINGSTATE); - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, PSTR("\004""OFF\0""Man\0""Auto"), g_model.potsWarnMode, attr); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, "\004""OFF\0""Man\0""Auto", g_model.potsWarnMode, attr); if (attr) { CHECK_INCDEC_MODELVAR(event, g_model.potsWarnMode, POTS_WARN_OFF, POTS_WARN_AUTO); storageDirty(EE_MODEL); diff --git a/radio/src/gui/480x272/model_telemetry.cpp b/radio/src/gui/480x272/model_telemetry.cpp index 027aba2c9..5b5b10cbf 100644 --- a/radio/src/gui/480x272/model_telemetry.cpp +++ b/radio/src/gui/480x272/model_telemetry.cpp @@ -526,10 +526,10 @@ bool menuModelTelemetryFrsky(event_t event) if (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MM_RF_PROTO_FS_AFHDS2A) - lcdDrawText(MENUS_MARGIN_LEFT, y, PSTR("RSNR")); + lcdDrawText(MENUS_MARGIN_LEFT, y, "RSNR"); else #endif - lcdDrawText(MENUS_MARGIN_LEFT, y, PSTR("RSSI")); + lcdDrawText(MENUS_MARGIN_LEFT, y, "RSSI"); break; case ITEM_TELEMETRY_RSSI_ALARM1: diff --git a/radio/src/gui/480x272/radio_hardware.cpp b/radio/src/gui/480x272/radio_hardware.cpp index e6c204939..c7425d563 100644 --- a/radio/src/gui/480x272/radio_hardware.cpp +++ b/radio/src/gui/480x272/radio_hardware.cpp @@ -179,7 +179,7 @@ bool menuRadioHardware(event_t event) pauseMixerCalculations(); pausePulses(); EXTERNAL_MODULE_OFF(); - CoTickDelay(10); // 20ms so that the pulses interrupt will reinit the frame rate + RTOS_WAIT_MS(20); // 20ms so that the pulses interrupt will reinit the frame rate telemetryProtocol = 255; // force telemetry port + module reinitialization EXTERNAL_MODULE_ON(); resumePulses(); diff --git a/radio/src/gui/480x272/radio_sdmanager.cpp b/radio/src/gui/480x272/radio_sdmanager.cpp index a652cb206..7206687b2 100644 --- a/radio/src/gui/480x272/radio_sdmanager.cpp +++ b/radio/src/gui/480x272/radio_sdmanager.cpp @@ -67,7 +67,7 @@ inline bool isFilenameLower(bool isfile, const char * fn, const char * line) void getSelectionFullPath(char * lfn) { f_getcwd(lfn, _MAX_LFN); - strcat(lfn, PSTR("/")); + strcat(lfn, "/"); strcat(lfn, reusableBuffer.sdmanager.lines[menuVerticalPosition - menuVerticalOffset]); } @@ -95,7 +95,7 @@ void onSdManagerMenu(const char * result) f_getcwd(lfn, _MAX_LFN); // if destination is dir, copy into that dir if (IS_DIRECTORY(line)) { - strcat(lfn, PSTR("/")); + strcat(lfn, "/"); strcat(lfn, line); } if (strcmp(clipboard.data.sd.directory, lfn)) { // prevent copying to the same directory diff --git a/radio/src/gui/480x272/radio_setup.cpp b/radio/src/gui/480x272/radio_setup.cpp index b42f100a2..932d71049 100644 --- a/radio/src/gui/480x272/radio_setup.cpp +++ b/radio/src/gui/480x272/radio_setup.cpp @@ -154,7 +154,7 @@ bool menuRadioSetup(event_t event) { int16_t year = TM_YEAR_BASE + t.tm_year; int8_t dlim = (((((year%4==0) && (year%100!=0)) || (year%400==0)) && (t.tm_mon==1)) ? 1 : 0); - static const pm_uint8_t dmon[] PROGMEM = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + static const pm_uint8_t dmon[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; dlim += pgm_read_byte(&dmon[t.tm_mon]); lcdDrawNumber(lcdNextPos+3, y, t.tm_mday, flags|rowattr|LEADING0, 2); if (rowattr && s_editMode>0) t.tm_mday = checkIncDec(event, t.tm_mday, 1, dlim, 0); @@ -427,15 +427,15 @@ bool menuRadioSetup(event_t event) #if defined(FAI_CHOICE) case ITEM_SETUP_FAI: - lcdDrawText(MENUS_MARGIN_LEFT, y, PSTR("FAI Mode")); + lcdDrawText(MENUS_MARGIN_LEFT, y, "FAI Mode"); if (g_eeGeneral.fai) { - lcdDrawText(RADIO_SETUP_2ND_COLUMN, y, PSTR("Locked in FAI Mode")); + lcdDrawText(RADIO_SETUP_2ND_COLUMN, y, "Locked in FAI Mode"); } else { g_eeGeneral.fai = editCheckBox(g_eeGeneral.fai, RADIO_SETUP_2ND_COLUMN, y, attr, event); if (attr && checkIncDec_Ret) { g_eeGeneral.fai = false; - POPUP_CONFIRMATION(PSTR("FAI mode?")); + POPUP_CONFIRMATION("FAI mode?"); } } break; diff --git a/radio/src/gui/480x272/view_channels.cpp b/radio/src/gui/480x272/view_channels.cpp index c4601bb0a..3bf334932 100644 --- a/radio/src/gui/480x272/view_channels.cpp +++ b/radio/src/gui/480x272/view_channels.cpp @@ -43,7 +43,7 @@ bool menuChannelsMonitor(event_t event) return menuChannelsMonitor(event, index); } -const MenuHandlerFunc menuTabMonitors[] PROGMEM = { +const MenuHandlerFunc menuTabMonitors[] = { menuChannelsMonitor<0>, menuChannelsMonitor<1>, menuChannelsMonitor<2>, diff --git a/radio/src/gui/common/stdlcd/model_inputs.cpp b/radio/src/gui/common/stdlcd/model_inputs.cpp index 675ec6eac..17455b14a 100644 --- a/radio/src/gui/common/stdlcd/model_inputs.cpp +++ b/radio/src/gui/common/stdlcd/model_inputs.cpp @@ -20,7 +20,7 @@ #include "opentx.h" -#define _STR_MAX(x) PSTR("/" #x) +#define _STR_MAX(x) "/" #x #define STR_MAX(x) _STR_MAX(x) uint8_t getExposCount() diff --git a/radio/src/gui/common/stdlcd/model_mixes.cpp b/radio/src/gui/common/stdlcd/model_mixes.cpp index 37e884e40..ec70e8f33 100644 --- a/radio/src/gui/common/stdlcd/model_mixes.cpp +++ b/radio/src/gui/common/stdlcd/model_mixes.cpp @@ -20,7 +20,7 @@ #include "opentx.h" -#define _STR_MAX(x) PSTR("/" #x) +#define _STR_MAX(x) "/" #x #define STR_MAX(x) _STR_MAX(x) uint8_t getMixesCount() diff --git a/radio/src/gui/common/stdlcd/radio_sdmanager.cpp b/radio/src/gui/common/stdlcd/radio_sdmanager.cpp index 6e263ec32..b89cd74f4 100644 --- a/radio/src/gui/common/stdlcd/radio_sdmanager.cpp +++ b/radio/src/gui/common/stdlcd/radio_sdmanager.cpp @@ -64,7 +64,7 @@ inline bool isFilenameLower(bool isfile, const char * fn, const char * line) void getSelectionFullPath(char * lfn) { f_getcwd(lfn, _MAX_LFN); - strcat(lfn, PSTR("/")); + strcat(lfn, "/"); strcat(lfn, reusableBuffer.sdmanager.lines[menuVerticalPosition - HEADER_LINE - menuVerticalOffset]); } @@ -92,7 +92,7 @@ void onSdManagerMenu(const char * result) f_getcwd(lfn, _MAX_LFN); // if destination is dir, copy into that dir if (IS_DIRECTORY(line)) { - strcat(lfn, PSTR("/")); + strcat(lfn, "/"); strcat(lfn, line); } if (strcmp(clipboard.data.sd.directory, lfn)) { // prevent copying to the same directory @@ -114,7 +114,7 @@ void onSdManagerMenu(const char * result) getSelectionFullPath(lfn); f_unlink(lfn); strncpy(statusLineMsg, line, 13); - strcpy_P(statusLineMsg+min((uint8_t)strlen(statusLineMsg), (uint8_t)13), STR_REMOVED); + strcpy(statusLineMsg+min((uint8_t)strlen(statusLineMsg), (uint8_t)13), STR_REMOVED); showStatusLine(); REFRESH_FILES(); } diff --git a/radio/src/gui/gui_common_arm.cpp b/radio/src/gui/gui_common_arm.cpp index 0d2c594ed..1832043f0 100644 --- a/radio/src/gui/gui_common_arm.cpp +++ b/radio/src/gui/gui_common_arm.cpp @@ -647,53 +647,53 @@ int getFirstAvailable(int min, int max, IsValueAvailable isValueAvailable) // we don't need the special eeprom/flash string handling, just define them as // local strings -const pm_char STR_SUBTYPE_FLYSKY[] PROGMEM = "\004""Std\0""V9x9""V6x6""V912""CX20"; +const pm_char STR_SUBTYPE_FLYSKY[] = "\004""Std\0""V9x9""V6x6""V912""CX20"; -const pm_char STR_SUBTYPE_AFHDS2A[] PROGMEM = "\010""PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS"; +const pm_char STR_SUBTYPE_AFHDS2A[] = "\010""PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS"; -const pm_char STR_SUBTYPE_FRSKY[] PROGMEM = "\007""D16\0 ""D8\0 ""D16 8ch""V8\0 ""LBT(EU)""LBT 8ch"; +const pm_char STR_SUBTYPE_FRSKY[] = "\007""D16\0 ""D8\0 ""D16 8ch""V8\0 ""LBT(EU)""LBT 8ch"; -const pm_char STR_SUBTYPE_HISKY[] PROGMEM = "\005""HiSky""HK310"; +const pm_char STR_SUBTYPE_HISKY[] = "\005""HiSky""HK310"; -const pm_char STR_SUBTYPE_DSM[] PROGMEM = "\006""2 22ms""2 11ms""X 22ms""X 11ms"; +const pm_char STR_SUBTYPE_DSM[] = "\006""2 22ms""2 11ms""X 22ms""X 11ms"; -const pm_char STR_SUBTYPE_YD717[] PROGMEM = "\007""YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 "; +const pm_char STR_SUBTYPE_YD717[] = "\007""YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 "; -const pm_char STR_SUBTYPE_SYMAX[] PROGMEM = "\003""Std""5c\0"; +const pm_char STR_SUBTYPE_SYMAX[] = "\003""Std""5c\0"; -const pm_char STR_SUBTYPE_SLT[] PROGMEM = "\005""SLT\0 ""Vista"; +const pm_char STR_SUBTYPE_SLT[] = "\005""SLT\0 ""Vista"; -const pm_char STR_SUBTYPE_CX10[] PROGMEM = "\007""Green\0 ""Blue\0 ""DM007\0 ""-\0 ""JC3015a""JC3015b""MK33041""Q242\0 "; +const pm_char STR_SUBTYPE_CX10[] = "\007""Green\0 ""Blue\0 ""DM007\0 ""-\0 ""JC3015a""JC3015b""MK33041""Q242\0 "; -const pm_char STR_SUBTYPE_CG023[] PROGMEM = "\005""CG023""YD829"; +const pm_char STR_SUBTYPE_CG023[] = "\005""CG023""YD829"; -const pm_char STR_SUBTYPE_KN[] PROGMEM = "\006""WLtoys""FeiLun"; +const pm_char STR_SUBTYPE_KN[] = "\006""WLtoys""FeiLun"; -const pm_char STR_SUBTYPE_MT99[] PROGMEM = "\005""MT99\0""H7\0 ""YZ\0 ""LS\0 ""FY805"; +const pm_char STR_SUBTYPE_MT99[] = "\005""MT99\0""H7\0 ""YZ\0 ""LS\0 ""FY805"; -const pm_char STR_SUBTYPE_MJXQ[] PROGMEM = "\005""WLH08""X600\0""X800\0""H26D\0""E010\0""H26WH"; +const pm_char STR_SUBTYPE_MJXQ[] = "\005""WLH08""X600\0""X800\0""H26D\0""E010\0""H26WH"; -const pm_char STR_SUBTYPE_HONTAI[] PROGMEM = "\007""Std\0 ""JJRC X1""X5C1cln"; +const pm_char STR_SUBTYPE_HONTAI[] = "\007""Std\0 ""JJRC X1""X5C1cln"; -const pm_char STR_SUBTYPE_Q2X2[] PROGMEM = "\004""Q222""Q242""Q282"; +const pm_char STR_SUBTYPE_Q2X2[] = "\004""Q222""Q242""Q282"; -const pm_char STR_SUBTYPE_Q303[] PROGMEM = "\006""Q303\0 ""CX35\0 ""CX10D\0""CX10WD"; +const pm_char STR_SUBTYPE_Q303[] = "\006""Q303\0 ""CX35\0 ""CX10D\0""CX10WD"; -const pm_char STR_SUBTYPE_WK2x01[] PROGMEM = "\006""WK2801""WK2401""W6_5_1""W6_6_1""W6_Hel""W6_HeI"; +const pm_char STR_SUBTYPE_WK2x01[] = "\006""WK2801""WK2401""W6_5_1""W6_6_1""W6_Hel""W6_HeI"; -const pm_char STR_SUBTYPE_V2X2[] PROGMEM = "\006""V2x2\0 ""JXD506"; +const pm_char STR_SUBTYPE_V2X2[] = "\006""V2x2\0 ""JXD506"; -const pm_char STR_SUBTYPE_BAYANG[] PROGMEM = "\007""Bayang\0""H8S3D\0 ""X16 AH\0 ""irdrone"; +const pm_char STR_SUBTYPE_BAYANG[] = "\007""Bayang\0""H8S3D\0 ""X16 AH\0 ""irdrone"; -const pm_char STR_SUBTYPE_FY326[] PROGMEM = "\005""FY326""FY319"; +const pm_char STR_SUBTYPE_FY326[] = "\005""FY326""FY319"; -const pm_char STR_SUBTYPE_CABELL[] PROGMEM = "\006""CAB_V3""C_TELM""-\0 ""-\0 ""-\0 ""-\0 ""F_SAFE""UNBIND"; +const pm_char STR_SUBTYPE_CABELL[] = "\006""CAB_V3""C_TELM""-\0 ""-\0 ""-\0 ""-\0 ""F_SAFE""UNBIND"; -const pm_char STR_SUBTYPE_H83D[] PROGMEM = "\006""H8_3D\0""H20H\0 ""H20Mini""H30Mini"; +const pm_char STR_SUBTYPE_H83D[] = "\006""H8_3D\0""H20H\0 ""H20Mini""H30Mini"; -const pm_char STR_SUBTYPE_CORONA[] PROGMEM = "\005""V1\0 ""V2\0 ""FD V3"; +const pm_char STR_SUBTYPE_CORONA[] = "\005""V1\0 ""V2\0 ""FD V3"; -const pm_char STR_SUBTYPE_HITEC[] PROGMEM = "\006""Optima\0""Minima"; +const pm_char STR_SUBTYPE_HITEC[] = "\006""Optima\0""Minima"; const mm_protocol_definition multi_protocols[] = { diff --git a/radio/src/gui/screenshot.cpp b/radio/src/gui/screenshot.cpp index ae4dfe3c1..36cad1364 100644 --- a/radio/src/gui/screenshot.cpp +++ b/radio/src/gui/screenshot.cpp @@ -38,7 +38,7 @@ const char * writeScreenshot() char filename[42]; // /SCREENSHOTS/screen-2013-01-01-123540.bmp // check and create folder here - strcpy_P(filename, SCREENSHOTS_PATH); + strcpy(filename, SCREENSHOTS_PATH); const char * error = sdCheckAndCreateDirectory(filename); if (error) { return error; diff --git a/radio/src/io/frsky_sport.cpp b/radio/src/io/frsky_sport.cpp index 8a73d749e..c7adfd162 100644 --- a/radio/src/io/frsky_sport.cpp +++ b/radio/src/io/frsky_sport.cpp @@ -138,7 +138,7 @@ bool sportWaitState(SportUpdateState state, int timeout) else if (sportUpdateState == SPORT_FAIL) { return false; } - CoTickDelay(1); + RTOS_WAIT_TICKS(1); } return false; #endif @@ -313,7 +313,7 @@ void sportFlashDevice(ModuleIndex module, const char * filename) /* wait 2s off */ watchdogSuspend(2000); - CoTickDelay(1000); + RTOS_WAIT_MS(2000); #endif const char * result = sportUpdatePowerOn(module); diff --git a/radio/src/keys.cpp b/radio/src/keys.cpp index eb731d57d..eb2d5a4de 100644 --- a/radio/src/keys.cpp +++ b/radio/src/keys.cpp @@ -179,7 +179,7 @@ void killEvents(event_t event) bool clearKeyEvents() { #if defined(PCBSKY9X) - CoTickDelay(100); // 200ms + RTOS_WAIT_MS(200); // 200ms #endif // loop until all keys are up diff --git a/radio/src/logs.cpp b/radio/src/logs.cpp index 6e6a5f350..fc73f762e 100644 --- a/radio/src/logs.cpp +++ b/radio/src/logs.cpp @@ -54,7 +54,7 @@ const pm_char * logsOpen() return STR_SDCARD_FULL; // check and create folder here - strcpy_P(filename, STR_LOGS_PATH); + strcpy(filename, STR_LOGS_PATH); const char * error = sdCheckAndCreateDirectory(filename); if (error) { return error; @@ -85,7 +85,7 @@ const pm_char * logsOpen() // TODO uint8_t num = 1; #endif - strcpy_P(&filename[sizeof(LOGS_PATH)], STR_MODEL); + strcpy(&filename[sizeof(LOGS_PATH)], STR_MODEL); filename[sizeof(LOGS_PATH) + PSIZE(TR_MODEL)] = (char)((num / 10) + '0'); filename[sizeof(LOGS_PATH) + PSIZE(TR_MODEL) + 1] = (char)((num % 10) + '0'); len = sizeof(LOGS_PATH) + PSIZE(TR_MODEL) + 2; @@ -97,7 +97,7 @@ const pm_char * logsOpen() tmp = strAppendDate(&filename[len]); #endif - strcpy_P(tmp, STR_LOGS_EXT); + strcpy(tmp, STR_LOGS_EXT); result = f_open(&g_oLogFile, filename, FA_OPEN_ALWAYS | FA_WRITE | FA_OPEN_APPEND); if (result != FR_OK) { diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 1bca8a922..45713f56a 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -48,7 +48,7 @@ union ReusableBuffer reusableBuffer __DMA; uint8_t* MSC_BOT_Data = reusableBuffer.MSC_BOT_Data; #endif -const pm_uint8_t bchout_ar[] PROGMEM = { +const pm_uint8_t bchout_ar[] = { 0x1B, 0x1E, 0x27, 0x2D, 0x36, 0x39, 0x4B, 0x4E, 0x63, 0x6C, 0x72, 0x78, 0x87, 0x8D, 0x93, 0x9C, 0xB1, 0xB4, @@ -65,7 +65,7 @@ mode2 rud thr ele ail mode3 ail ele thr rud mode4 ail thr ele rud */ -const pm_uint8_t modn12x3[] PROGMEM = { +const pm_uint8_t modn12x3[] = { 0, 1, 2, 3, 0, 2, 1, 3, 3, 1, 2, 0, @@ -784,11 +784,7 @@ void doSplash() tmr10ms_t tgtime = get_tmr10ms() + SPLASH_TIMEOUT; while (tgtime > get_tmr10ms()) { -#if defined(SIMU) - SIMU_SLEEP(1); -#else - CoTickDelay(1); -#endif + RTOS_WAIT_TICKS(1); getADC(); @@ -924,11 +920,7 @@ void checkAll() showMessageBox(STR_KEYSTUCK); tmr10ms_t tgtime = get_tmr10ms() + 500; while (tgtime != get_tmr10ms()) { -#if defined(SIMU) - SIMU_SLEEP(1); -#else - CoTickDelay(1); -#endif + RTOS_WAIT_MS(1); wdt_reset(); } } @@ -1017,9 +1009,7 @@ void checkTHR() wdt_reset(); - SIMU_SLEEP(1); - CoTickDelay(10); - + RTOS_WAIT_MS(10); } LED_ERROR_END(); @@ -1049,8 +1039,7 @@ void alert(const pm_char * title, const pm_char * msg , uint8_t sound) #endif while (1) { - SIMU_SLEEP(1); - CoTickDelay(10); + RTOS_WAIT_MS(10); if (keyDown()) break; // wait for key release @@ -1576,7 +1565,7 @@ void doMixerCalculations() #if defined(NAVIGATION_STICKS) uint8_t StickScrollAllowed; uint8_t StickScrollTimer; -static const pm_uint8_t rate[] PROGMEM = { 0, 0, 100, 40, 16, 7, 3, 1 } ; +static const pm_uint8_t rate[] = { 0, 0, 100, 40, 16, 7, 3, 1 } ; uint8_t calcStickScroll( uint8_t index ) { @@ -1626,7 +1615,7 @@ void opentxStart(OPENTX_START_ARGS) #if defined(PCBSKY9X) && defined(SDCARD) && !defined(SIMU) for (int i=0; i<500 && !Card_initialized; i++) { - CoTickDelay(1); // 2ms + RTOS_WAIT_MS(2); // 2ms } #endif @@ -1693,9 +1682,10 @@ void opentxClose(uint8_t shutdown) storageCheck(true); while (IS_PLAYING(ID_PLAY_PROMPT_BASE + AU_BYE)) { - CoTickDelay(10); + RTOS_WAIT_MS(10); } - CoTickDelay(50); + + RTOS_WAIT_MS(100); #if defined(SDCARD) sdDone(); @@ -2265,7 +2255,7 @@ uint32_t pwrCheck() RAISE_ALERT(STR_MODEL, STR_MODEL_STILL_POWERED, STR_PRESS_ENTER_TO_CONFIRM, AU_MODEL_STILL_POWERED); while (TELEMETRY_STREAMING()) { resetForcePowerOffRequest(); - CoTickDelay(10); + RTOS_WAIT_MS(20); if (pwrPressed()) { return e_power_on; } diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 5e4ccc8b6..608283283 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -236,8 +236,6 @@ typedef const int16_t pm_int16_t; typedef const int8_t pm_int8_t; #define pgm_read_byte(address_short) (*(uint8_t*)(address_short)) - #define PSTR(adr) adr - #define PROGMEM #define pgm_read_adr(x) *(x) #define cli() #define sei() @@ -518,8 +516,6 @@ extern uint8_t flightModeTransitionLast; #elif !defined(SIMU) extern unsigned char *heap; extern int _end; - extern int _estack; - extern int _main_stack_start; extern int _heap_end; #define availableMemory() ((unsigned int)((unsigned char *)&_heap_end - heap)) #endif @@ -666,7 +662,7 @@ void checkAll(); #if !defined(SIMU) void getADC(); - #define GET_ADC_IF_MIXER_NOT_RUNNING() do { if (s_pulses_paused) getADC(); } while(0) +#define GET_ADC_IF_MIXER_NOT_RUNNING() do { if (s_pulses_paused) getADC(); } while(0) #endif #include "sbus.h" @@ -694,15 +690,15 @@ uint16_t isqrt32(uint32_t n); #if !defined(BOOT) #include "tasks_arm.h" -extern OS_MutexID mixerMutex; +extern RTOS_MUTEX_HANDLE mixerMutex; inline void pauseMixerCalculations() { - CoEnterMutexSection(mixerMutex); + RTOS_LOCK_MUTEX(mixerMutex); } inline void resumeMixerCalculations() { - CoLeaveMutexSection(mixerMutex); + RTOS_UNLOCK_MUTEX(mixerMutex); } #else #define pauseMixerCalculations() diff --git a/radio/src/rtos.h b/radio/src/rtos.h new file mode 100644 index 000000000..67b1925f6 --- /dev/null +++ b/radio/src/rtos.h @@ -0,0 +1,281 @@ +/* + * 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. + */ + +#ifndef _RTOS_H_ +#define _RTOS_H_ + +#include "definitions.h" + +#ifdef __cplusplus +extern "C++" { +#endif + +#define doNothing() do { } while(0) + +#if defined(SIMU) + #include + #include + #if __GNUC__ + #include + inline void msleep(unsigned x) + { + usleep(1000 * x); + } + #else + #include + inline void msleep(unsigned x) + { + Sleep(x); + } + #endif + + inline void RTOS_INIT() + { + } + + inline void RTOS_START() + { + } + + inline void RTOS_WAIT_MS(unsigned x) + { + msleep(x); + } + + inline void RTOS_WAIT_TICKS(unsigned x) + { + msleep(x * 2); + } + + typedef pthread_t RTOS_TASK_HANDLE; + typedef pthread_mutex_t RTOS_MUTEX_HANDLE; + typedef uint32_t RTOS_FLAG_HANDLE; + typedef sem_t * RTOS_EVENT_HANDLE; + +#ifdef __cplusplus + inline void RTOS_CREATE_MUTEX(pthread_mutex_t &mutex) + { + mutex = PTHREAD_MUTEX_INITIALIZER; + } + + inline void RTOS_LOCK_MUTEX(pthread_mutex_t &mutex) + { + pthread_mutex_lock(&mutex); + } + + inline void RTOS_UNLOCK_MUTEX(pthread_mutex_t &mutex) + { + pthread_mutex_unlock(&mutex); + } + + inline void RTOS_CREATE_FLAG(uint32_t &flag) + { + flag = 0; // TODO: real flags (use semaphores?) + } + + inline void RTOS_SET_FLAG(uint32_t &flag) + { + flag = 1; + } + + template + class FakeTaskStack + { + public: + FakeTaskStack() + { + } + + void paint() + { + } + + uint16_t size() + { + return SIZE; + } + + uint16_t available() + { + return SIZE / 2; + } + }; + #define RTOS_DEFINE_STACK(name, size) FakeTaskStack name + + #define TASK_FUNCTION(task) void * task(void * pdata) + + template + inline void RTOS_CREATE_TASK(pthread_t &taskId, void * task(void *) , const char * name, FakeTaskStack &stack, unsigned stackSize, unsigned priority) + { + pthread_create(&taskId, nullptr, task, nullptr); + } + + #define TASK_RETURN() return nullptr + + constexpr uint16_t stackAvailable() + { + return 500; + } +#endif + + // return 2ms resolution to match CoOS settings + inline uint32_t RTOS_GET_TIME(void) + { + extern uint64_t simuTimerMicros(void); + return simuTimerMicros() / 2000; + } +#elif defined(RTOS_COOS) +#ifdef __cplusplus + extern "C" { +#endif + #include +#ifdef __cplusplus + } +#endif + + typedef OS_TID RTOS_TASK_HANDLE; + typedef OS_MutexID RTOS_MUTEX_HANDLE; + typedef OS_FlagID RTOS_FLAG_HANDLE; + typedef OS_EventID RTOS_EVENT_HANDLE; + + static inline void RTOS_INIT() + { + CoInitOS(); + } + + static inline void RTOS_START() + { + CoStartOS(); + } + + static inline void RTOS_WAIT_MS(unsigned x) + { + CoTickDelay(x / 2); + } + + static inline void RTOS_WAIT_TICKS(unsigned x) + { + CoTickDelay(x); + } + + #define RTOS_CREATE_TASK(taskId, task, name, stackStruct, stackSize, priority) \ + taskId = CoCreateTask(task, NULL, priority, &stackStruct.stack[stackSize-1], stackSize) + +#ifdef __cplusplus + static inline void RTOS_CREATE_MUTEX(OS_MutexID &mutex) + { + mutex = CoCreateMutex(); + } + + static inline void RTOS_LOCK_MUTEX(OS_MutexID &mutex) + { + CoEnterMutexSection(mutex); + } + + static inline void RTOS_UNLOCK_MUTEX(OS_MutexID &mutex) + { + CoLeaveMutexSection(mutex); + } +#endif + + static inline uint16_t getStackAvailable(void * address, uint16_t size) + { + uint32_t * array = (uint32_t *)address; + uint16_t i = 0; + while (i < size && array[i] == 0x55555555) { + i++; + } + return i*4; + } + + extern int _estack; + extern int _main_stack_start; + static inline uint16_t stackSize() + { + return ((unsigned char *)&_estack - (unsigned char *)&_main_stack_start) / 4; + } + + static inline uint16_t stackAvailable() + { + return getStackAvailable(&_main_stack_start, stackSize()); + } + + #define RTOS_CREATE_FLAG(flag) flag = CoCreateFlag(false, false) + #define RTOS_SET_FLAG(flag) (void)CoSetFlag(flag) + +#ifdef __cplusplus + template + class TaskStack + { + public: + TaskStack() + { + } + + void paint() + { + for (uint32_t i=0; i __ALIGNED(8) name // stack must be aligned to 8 bytes otherwise printf for %f does not work! + + #define TASK_FUNCTION(task) void task(void * pdata) + #define TASK_RETURN() return + +#else // no RTOS + static inline void RTOS_START() + { + } + + static inline void RTOS_WAIT_MS(unsigned x) + { + } + + static inline void RTOS_WAIT_TICKS(unsigned x) + { + } +#endif + +#ifdef __cplusplus +} +#endif + +#endif // _RTOS_H_ diff --git a/radio/src/stamp.cpp b/radio/src/stamp.cpp index af74c9cb0..40e207eae 100644 --- a/radio/src/stamp.cpp +++ b/radio/src/stamp.cpp @@ -31,14 +31,14 @@ #endif #if defined(COLORLCD) - const pm_char vers_stamp[] PROGMEM = "VERS" TAB ": " "opentx-" FLAVOUR "-" VERSION " (" GIT_STR ")"; - const pm_char date_stamp[] PROGMEM = "DATE" TAB ": " DATE; - const pm_char time_stamp[] PROGMEM = "TIME" TAB ": " TIME; - const pm_char eeprom_stamp[] PROGMEM = "EEPR" TAB ": " EEPROM_STR; + const pm_char vers_stamp[] = "VERS" TAB ": " "opentx-" FLAVOUR "-" VERSION " (" GIT_STR ")"; + const pm_char date_stamp[] = "DATE" TAB ": " DATE; + const pm_char time_stamp[] = "TIME" TAB ": " TIME; + const pm_char eeprom_stamp[] = "EEPR" TAB ": " EEPROM_STR; #elif defined(PCBTARANIS) - const pm_char vers_stamp[] PROGMEM = "FW\037\033: " "opentx-" FLAVOUR "\036VERS\037\033: " VERSION " (" GIT_STR ")" "\036DATE\037\033: " DATE " " TIME "\036EEPR\037\033: " EEPROM_STR; + const pm_char vers_stamp[] = "FW\037\033: " "opentx-" FLAVOUR "\036VERS\037\033: " VERSION " (" GIT_STR ")" "\036DATE\037\033: " DATE " " TIME "\036EEPR\037\033: " EEPROM_STR; #else - const pm_char vers_stamp[] PROGMEM = "FW\037\033: " "opentx-" FLAVOUR "\036VERS\037\033: " VERSION "\036DATE\037\033: " DATE "\036TIME\037\033: " TIME "\036EEPR\037\033: " EEPROM_STR; + const pm_char vers_stamp[] = "FW\037\033: " "opentx-" FLAVOUR "\036VERS\037\033: " VERSION "\036DATE\037\033: " DATE "\036TIME\037\033: " TIME "\036EEPR\037\033: " EEPROM_STR; #endif /** diff --git a/radio/src/storage/eeprom_conversions.cpp b/radio/src/storage/eeprom_conversions.cpp index fc93afe5e..0046fb2d1 100644 --- a/radio/src/storage/eeprom_conversions.cpp +++ b/radio/src/storage/eeprom_conversions.cpp @@ -1250,10 +1250,10 @@ bool eeConvert() const char *msg = NULL; if (g_eeGeneral.version == 216) { - msg = PSTR("EEprom Data v216"); + msg = "EEprom Data v216"; } else if (g_eeGeneral.version == 217) { - msg = PSTR("EEprom Data v217"); + msg = "EEprom Data v217"; } else { return false; diff --git a/radio/src/storage/eeprom_raw.cpp b/radio/src/storage/eeprom_raw.cpp index edda1f87d..f84785c6e 100644 --- a/radio/src/storage/eeprom_raw.cpp +++ b/radio/src/storage/eeprom_raw.cpp @@ -305,7 +305,7 @@ void eepromWriteWait(EepromWriteState state/* = EEPROM_IDLE*/) while (eepromWriteState != state) { #if defined(STM32) // Waits a little bit for CS transitions - CoTickDelay(1/*2ms*/); + RTOS_WAIT_MS(2); #endif eepromWriteProcess(); #ifdef SIMU @@ -468,7 +468,7 @@ const pm_char * eeBackupModel(uint8_t i_fileSrc) } #if defined(PCBSKY9X) - strcpy(statusLineMsg, PSTR("File ")); + strcpy(statusLineMsg, "File "); strcpy(statusLineMsg+5, &buf[sizeof(MODELS_PATH)]); #endif diff --git a/radio/src/storage/eeprom_rlc.cpp b/radio/src/storage/eeprom_rlc.cpp index e31dcc2d1..40a88c0ca 100644 --- a/radio/src/storage/eeprom_rlc.cpp +++ b/radio/src/storage/eeprom_rlc.cpp @@ -450,7 +450,7 @@ const pm_char * eeBackupModel(uint8_t i_fileSrc) logsClose(); // check and create folder here - strcpy_P(buf, STR_MODELS_PATH); + strcpy(buf, STR_MODELS_PATH); const char * error = sdCheckAndCreateDirectory(buf); if (error) { return error; @@ -476,7 +476,7 @@ const pm_char * eeBackupModel(uint8_t i_fileSrc) if (len == 0) { uint8_t num = i_fileSrc + 1; - strcpy_P(&buf[sizeof(MODELS_PATH)], STR_MODEL); + strcpy(&buf[sizeof(MODELS_PATH)], STR_MODEL); buf[sizeof(MODELS_PATH) + PSIZE(TR_MODEL)] = (char)((num / 10) + '0'); buf[sizeof(MODELS_PATH) + PSIZE(TR_MODEL) + 1] = (char)((num % 10) + '0'); len = sizeof(MODELS_PATH) + PSIZE(TR_MODEL) + 2; @@ -487,7 +487,7 @@ const pm_char * eeBackupModel(uint8_t i_fileSrc) len = tmp - buf; #endif - strcpy_P(&buf[len], STR_MODELS_EXT); + strcpy(&buf[len], STR_MODELS_EXT); #ifdef SIMU TRACE("SD-card backup filename=%s", buf); @@ -532,10 +532,10 @@ const pm_char * eeRestoreModel(uint8_t i_fileDst, char *model_name) // we must close the logs as we reuse the same FIL structure logsClose(); - strcpy_P(buf, STR_MODELS_PATH); + strcpy(buf, STR_MODELS_PATH); buf[sizeof(MODELS_PATH)-1] = '/'; strcpy(&buf[sizeof(MODELS_PATH)], model_name); - strcpy_P(&buf[strlen(buf)], STR_MODELS_EXT); + strcpy(&buf[strlen(buf)], STR_MODELS_EXT); FRESULT result = f_open(&g_oLogFile, buf, FA_OPEN_EXISTING | FA_READ); if (result != FR_OK) { diff --git a/radio/src/strhelpers.cpp b/radio/src/strhelpers.cpp index b33026659..e6c4d75bb 100644 --- a/radio/src/strhelpers.cpp +++ b/radio/src/strhelpers.cpp @@ -21,7 +21,7 @@ #include "opentx.h" #if !defined(BOOT) -const pm_char s_charTab[] PROGMEM = "_-.,"; +const pm_char s_charTab[] = "_-.,"; char hex2zchar(uint8_t hex) { diff --git a/radio/src/switches.cpp b/radio/src/switches.cpp index ca3215af2..8791e30bc 100644 --- a/radio/src/switches.cpp +++ b/radio/src/switches.cpp @@ -747,8 +747,7 @@ void checkSwitches() wdt_reset(); - SIMU_SLEEP(1); - CoTickDelay(10); + RTOS_WAIT_MS(10); } LED_ERROR_END(); diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index 651f26d48..0818657da 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -95,9 +95,6 @@ extern "C" { #define TIMER_MULT_APB1 2 #define TIMER_MULT_APB2 2 -#define strcpy_P strcpy -#define strcat_P strcat - extern uint16_t sessionTimer; #define SLAVE_MODE() (g_model.trainerMode == TRAINER_MODE_SLAVE) diff --git a/radio/src/targets/horus/diskio.cpp b/radio/src/targets/horus/diskio.cpp index c254463a2..9572fc796 100644 --- a/radio/src/targets/horus/diskio.cpp +++ b/radio/src/targets/horus/diskio.cpp @@ -33,7 +33,7 @@ /* Lock / unlock functions */ /*-----------------------------------------------------------------------*/ #if !defined(BOOT) -static OS_MutexID ioMutex; +static RTOS_MUTEX_HANDLE ioMutex; uint32_t ioMutexReq = 0, ioMutexRel = 0; int ff_cre_syncobj (BYTE vol, _SYNC_t *mutex) { @@ -44,13 +44,14 @@ int ff_cre_syncobj (BYTE vol, _SYNC_t *mutex) int ff_req_grant (_SYNC_t mutex) { ioMutexReq += 1; - return CoEnterMutexSection(mutex) == E_OK; + RTOS_LOCK_MUTEX(mutex); + return 1; } void ff_rel_grant (_SYNC_t mutex) { ioMutexRel += 1; - CoLeaveMutexSection(mutex); + RTOS_UNLOCK_MUTEX(mutex); } int ff_del_syncobj (_SYNC_t mutex) diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index 641872af6..8cc45a983 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -49,7 +49,7 @@ uint32_t Peri1_frequency, Peri2_frequency; GPIO_TypeDef gpioa, gpiob, gpioc, gpiod, gpioe, gpiof, gpiog, gpioh, gpioi, gpioj; TIM_TypeDef tim1, tim2, tim3, tim4, tim5, tim6, tim7, tim8, tim9, tim10; RCC_TypeDef rcc; -DMA_Stream_TypeDef dma1_stream2, dma1_stream5, dma1_stream7, dma2_stream1, dma2_stream2, dma2_stream5, dma2_stream6, dma2_stream7; +DMA_Stream_TypeDef dma1_stream1, dma1_stream2, dma1_stream3, dma1_stream4, dma1_stream5, dma1_stream6, dma1_stream7, dma2_stream1, dma2_stream2, dma2_stream5, dma2_stream6, dma2_stream7; DMA_TypeDef dma2; USART_TypeDef Usart0, Usart1, Usart2, Usart3, Usart4; SysTick_Type systick; @@ -105,7 +105,7 @@ uint64_t simuTimerMicros(void) #else // GNUC auto now = std::chrono::steady_clock::now(); - return (U64) std::chrono::duration_cast(now.time_since_epoch()).count(); + return (uint64_t) std::chrono::duration_cast(now.time_since_epoch()).count(); #endif } @@ -121,7 +121,7 @@ uint16_t getTmr2MHz() } // return 2ms resolution to match CoOS settings -U64 CoGetOSTime(void) +uint64_t CoGetOSTime(void) { return simuTimerMicros() / 2000; } @@ -524,11 +524,6 @@ void StopAudioThread() } #endif // #if defined(SIMU_AUDIO) -uint16_t stackAvailable() -{ - return 500; -} - bool simuLcdRefresh = true; display_t simuLcdBuf[DISPLAY_BUFFER_SIZE]; @@ -666,18 +661,3 @@ void LCD_ControlLight(uint16_t dutyCycle) { } void serialPrintf(const char * format, ...) { } void serialCrlf() { } void serialPutc(char c) { } -uint16_t stackSize() { return 0; } - -void * start_routine(void * attr) -{ - FUNCPtr task = (FUNCPtr)attr; - task(NULL); - return NULL; -} - -OS_TID CoCreateTask(FUNCPtr task, void *argv, uint32_t parameter, void * stk, uint32_t stksize) -{ - pthread_t tid; - pthread_create(&tid, NULL, start_routine, (void *)task); - return tid; -} diff --git a/radio/src/targets/simu/simpgmspace.h b/radio/src/targets/simu/simpgmspace.h index 0ceaa74f4..5ee9ce1fd 100644 --- a/radio/src/targets/simu/simpgmspace.h +++ b/radio/src/targets/simu/simpgmspace.h @@ -92,7 +92,7 @@ extern GPIO_TypeDef gpioa, gpiob, gpioc, gpiod, gpioe, gpiof, gpiog, gpioh, gpio extern TIM_TypeDef tim1, tim2, tim3, tim4, tim5, tim6, tim7, tim8, tim9, tim10; extern USART_TypeDef Usart0, Usart1, Usart2, Usart3, Usart4; extern RCC_TypeDef rcc; -extern DMA_Stream_TypeDef dma1_stream2, dma1_stream5, dma1_stream7, dma2_stream1, dma2_stream2, dma2_stream5, dma2_stream6, dma2_stream7; +extern DMA_Stream_TypeDef dma1_stream0, dma1_stream1, dma1_stream2, dma1_stream3, dma1_stream4, dma1_stream5, dma1_stream6, dma1_stream7, dma2_stream1, dma2_stream2, dma2_stream5, dma2_stream6, dma2_stream7; extern DMA_TypeDef dma2; extern SysTick_Type systick; #undef SysTick @@ -147,7 +147,11 @@ extern SysTick_Type systick; #define USART3 (&Usart3) #undef RCC #define RCC (&rcc) +#undef DMA1_Stream0 +#undef DMA1_Stream1 #undef DMA1_Stream2 +#undef DMA1_Stream3 +#undef DMA1_Stream4 #undef DMA1_Stream5 #undef DMA1_Stream7 #undef DMA2_Stream1 @@ -155,7 +159,11 @@ extern SysTick_Type systick; #undef DMA2_Stream5 #undef DMA2_Stream6 #undef DMA2_Stream7 +#define DMA1_Stream0 (&dma1_stream0) +#define DMA1_Stream1 (&dma1_stream1) #define DMA1_Stream2 (&dma1_stream2) +#define DMA1_Stream3 (&dma1_stream3) +#define DMA1_Stream4 (&dma1_stream4) #define DMA1_Stream5 (&dma1_stream5) #define DMA1_Stream7 (&dma1_stream7) #define DMA2_Stream1 (&dma2_stream1) @@ -213,117 +221,6 @@ extern uint32_t txPdcUsart( uint8_t *buffer, uint32_t size ); extern uint32_t txPdcPending(); extern void rxPdcUsart( void (*pChProcess)(uint8_t x) ); -#define loop_until_bit_is_set( port, bitnum) \ - while ( 0/*! ( (port) & (1 << (bitnum)) )*/ ) ; - -#define PROGMEM -#define pgm_read_byte(address_short) (*(uint8_t*)(address_short)) -#define pgm_read_word(address_short) (*(uint16_t*)(address_short)) -#define pgm_read_adr(address_short) *address_short -#define pgm_read_stringP(adr) ((adr)) -#define PSTR(adr) adr -#define _delay_us(a) -#define _delay_ms(a) -#define cli() -#define sei() -#define strcpy_P strcpy -#define strcat_P strcat -#define memcpy_P memcpy - -#define PORTA dummyport -#define PORTB portb -#define PORTC portc -#define PORTD dummyport -#define PORTE dummyport -#define PORTF dummyport -#define PORTG dummyport -#define PORTH porth -#define PORTL dummyport -#define DDRA dummyport -#define DDRB dummyport -#define DDRC dummyport -#define DDRD dummyport -#define DDRE dummyport -#define DDRF dummyport -#define DDRG dummyport -#define EEMEM - -#define UCSR0B dummyport -#define UDRIE0 dummyport -#define TXB80 dummyport -#define TXCIE0 dummyport -#define TXEN0 dummyport -#define RXEN0 dummyport -#define DDE0 dummyport -#define PORTE0 dummyport -#define RXCIE0 dummyport -#define OCR0A dummyport -#define OCR1A dummyport16 -#define OCR1B dummyport16 -#define OCR1C dummyport16 -#define OCR2 dummyport -#define OCR3A dummyport16 -#define OCR3B dummyport16 -#define OCR4A dummyport -#define OCR5A dummyport -#define TCCR0A dummyport -#define TCCR1A dummyport -#define TCCR1B dummyport -#define TCCR1C dummyport -#define COM1B0 dummyport -#define COM0A0 dummyport -#define TCNT1 dummyport16 -#define TCNT1L dummyport -#define TCNT5 dummyport16 -#define ICR1 dummyport16 -#define TIFR dummyport -#define TIFR1 dummyport -#define ETIFR dummyport - -#define SPDR dummyport -#define SPSR dummyport -#define SPIF dummyport -#define SPCR dummyport - -#define TIMSK dummyport -#define TIMSK1 dummyport -#define TIMSK3 dummyport -#define TIMSK4 dummyport -#define TIMSK5 dummyport -#define ETIMSK dummyport -#define ETIMSK1 dummyport - -#define UCSZ02 dummyport -#define UCSR0C dummyport -#define UCSZ01 dummyport -#define UCSZ00 dummyport -#define UCSR0A dummyport -#define RXC0 dummyport - -#define UDR0 dummyport -#define OCIE1A dummyport -#define OCIE1B dummyport -#define OCIE1C dummyport -#define OCIE4A dummyport -#define OCIE5A dummyport - -#define OUT_B_LIGHT 7 -#define INP_E_ElevDR 2 -#define INP_E_Trainer 5 -#define INP_E_Gear 4 -#define INP_C_ThrCt 6 -#define INP_C_AileDR 7 -#define INP_E_ID2 6 - -#define WGM10 0 -#define WGM12 0 -#define COM1B1 0 -#define FOC1B 0 -#define CS10 0 -#define DOR0 0 -#define UPE0 0 -#define FE0 0 - #define ISR(x, ...) void x() #if !defined(_MSC_VER) && defined(__GNUC__) @@ -345,7 +242,6 @@ extern char * main_thread_error; #define getADC() #define GET_ADC_IF_MIXER_NOT_RUNNING() -#define getADC_bandgap() #define SIMU_SLEEP(x) do { if (!main_thread_running) return; sleep(x/*ms*/); } while (0) #define SIMU_SLEEP_NORET(x) do { sleep(x/*ms*/); } while (0) @@ -370,49 +266,12 @@ void StopEepromThread(); #define StopAudioThread() #endif - -#define OS_MutexID pthread_mutex_t -extern OS_MutexID audioMutex; - -#define OS_FlagID uint32_t -#define OS_TID pthread_t -#define OS_TCID uint32_t -#define OS_STK uint32_t - -#define E_OK 0 -#define WDRF 0 - void * simuMain(void * args = NULL); -extern uint8_t MCUCSR, MCUSR, MCUCR; - -typedef unsigned int U32; -typedef unsigned long long U64; -typedef void (*FUNCPtr)(void*); - -#define CoInitOS(...) -#define CoStartOS(...) - -OS_TID CoCreateTask(FUNCPtr task, void *argv, uint32_t parameter, void * stk, uint32_t stksize); -#define CoCreateTaskEx(...) 0 - -#define CoCreateMutex(...) PTHREAD_MUTEX_INITIALIZER -#define CoEnterMutexSection(m) pthread_mutex_lock(&(m)) -#define CoLeaveMutexSection(m) pthread_mutex_unlock(&(m)) - -#define CoSetFlag(...) -#define CoClearFlag(...) -#define CoSetTmrCnt(...) -#define CoEnterISR(...) -#define CoExitISR(...) -#define CoStartTmr(...) -#define CoWaitForSingleFlag(...) 0 -#define CoTickDelay(x) sleep(2*(x)) -#define CoCreateFlag(...) 0 -U64 CoGetOSTime(void); #define UART_Stop(...) #define UART3_Stop(...) #define USART_GetITStatus(...) 0 +#define USART_ClearFlag(...) #if defined(STM32) inline void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) { } @@ -437,6 +296,7 @@ inline void DMA_Init(DMA_Stream_TypeDef* DMAy_Streamx, DMA_InitTypeDef* DMA_Init inline void DMA_ITConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT, FunctionalState NewState) { } inline void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct) { } inline void DMA_Cmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState) { } +void DMACopy(void * src, void * dest, unsigned size); inline FlagStatus DMA_GetFlagStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG) { return RESET; } inline ITStatus DMA_GetITStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT) { return RESET; } inline void DMA_ClearITPendingBit(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT) { } diff --git a/radio/src/targets/simu/simudisk.cpp b/radio/src/targets/simu/simudisk.cpp index ab3ee4c62..5e8dfcd82 100644 --- a/radio/src/targets/simu/simudisk.cpp +++ b/radio/src/targets/simu/simudisk.cpp @@ -29,7 +29,7 @@ FILE * diskImage = 0; FATFS g_FATFS_Obj = {0}; -OS_MutexID ioMutex; +RTOS_MUTEX_HANDLE ioMutex; int ff_cre_syncobj (BYTE vol, _SYNC_t* sobj) /* Create a sync object */ { diff --git a/radio/src/targets/sky9x/bluetooth.cpp b/radio/src/targets/sky9x/bluetooth.cpp index 4e3add0fb..c058f2c22 100644 --- a/radio/src/targets/sky9x/bluetooth.cpp +++ b/radio/src/targets/sky9x/bluetooth.cpp @@ -86,7 +86,7 @@ void btSendBuffer() btTx.buffer = btTxBuffer; txPdcBt(&btTx); while (btTx.ready == 1) { - CoTickDelay(1); // 2ms for now + RTOS_WAIT_TICKS(1); } btTx.size = 0; } @@ -131,7 +131,7 @@ uint32_t btChangeBaudrate( uint32_t baudIndex ) } } else { - CoTickDelay(1) ; // 2mS + RTOS_WAIT_TICKS(1); } } @@ -167,7 +167,7 @@ uint32_t btPollDevice() } } else { - CoTickDelay(1) ; // 2mS + RTOS_WAIT_TICKS(1) ; // 2mS } } @@ -229,7 +229,7 @@ void bluetoothTask(void * pdata) x = 0 ; } btSetBaudrate(x) ; - CoTickDelay(1) ; // 2mS + RTOS_WAIT_TICKS(1) ; // 2mS btStatus = btPollDevice() ; // Do we get a response? } } @@ -248,7 +248,7 @@ void bluetoothTask(void * pdata) btInit(); } - CoTickDelay(1) ; + RTOS_WAIT_TICKS(1) ; btPollDevice(); // Do we get a response? diff --git a/radio/src/targets/sky9x/board.h b/radio/src/targets/sky9x/board.h index c526ddddf..c49fd1119 100644 --- a/radio/src/targets/sky9x/board.h +++ b/radio/src/targets/sky9x/board.h @@ -223,9 +223,6 @@ extern uint8_t temperature ; // Raw temp reading extern uint8_t maxTemperature ; // Raw temp reading uint8_t getTemperature(); -#define strcpy_P strcpy -#define strcat_P strcat - #if !defined(REVA) extern uint16_t Current_analogue; extern uint16_t Current_max; diff --git a/radio/src/targets/sky9x/diskio.cpp b/radio/src/targets/sky9x/diskio.cpp index 161d90adc..394629d70 100644 --- a/radio/src/targets/sky9x/diskio.cpp +++ b/radio/src/targets/sky9x/diskio.cpp @@ -79,7 +79,7 @@ uint32_t transSpeed; /*-----------------------------------------------------------------------*/ #if !defined(BOOT) -static OS_MutexID ioMutex; +static RTOS_MUTEX_HANDLE ioMutex; volatile int mutexCheck = 0; int ff_cre_syncobj (BYTE vol, _SYNC_t *mutex) { @@ -89,7 +89,7 @@ int ff_cre_syncobj (BYTE vol, _SYNC_t *mutex) int ff_req_grant (_SYNC_t mutex) { - CoEnterMutexSection(mutex); + RTOS_LOCK_MUTEX(mutex); return 1; } @@ -676,7 +676,7 @@ const char * sdIdentify() * The host that does not support CMD8 shall supply high voltage range... */ result = sdCmd8(1); if (result == 0) f8 = 1; - else if (result == SD_NORESPONSE) CoTickDelay(1); /* 2ms delay after "no response" */ + else if (result == SD_NORESPONSE) RTOS_WAIT_MS(2); /* 2ms delay after "no response" */ else return "Identify.8 error"; #if 0 @@ -956,7 +956,7 @@ void sdInit() } sdCmd0(); - CoTickDelay(5); // 10ms + RTOS_WAIT_MS(10); // 10ms sdCmd8(1); #if 0 @@ -971,7 +971,7 @@ void sdInit() uint8_t retry; for (retry=0; retry<10; retry++) { if (!sdCmd2()) break; - CoTickDelay(1); // 2ms + RTOS_WAIT_MS(2); // 2ms } if (retry == 10) { @@ -982,7 +982,7 @@ void sdInit() for (retry=0; retry<10; retry++) { if (!sdCmd3()) break; - CoTickDelay(1); // 2ms + RTOS_WAIT_MS(2); // 2ms } if (retry == 10) { diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index 9997cf7ea..a269f5deb 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -107,10 +107,10 @@ extern "C" void INTERRUPT_xMS_IRQHandler() #endif #if (defined(PCBX9E) && !defined(SIMU)) -const pm_uchar bmp_startup[] PROGMEM = { +const pm_uchar bmp_startup[] = { #include "startup.lbm" }; -const pm_uchar bmp_lock[] PROGMEM = { +const pm_uchar bmp_lock[] = { #include "lock.lbm" }; #endif diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index cf056ba0f..87fabf59b 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -106,9 +106,6 @@ extern "C" { #define TIMER_MULT_APB1 2 #define TIMER_MULT_APB2 2 -#define strcpy_P strcpy -#define strcat_P strcat - extern uint16_t sessionTimer; // Board driver diff --git a/radio/src/targets/taranis/diskio.cpp b/radio/src/targets/taranis/diskio.cpp index df27815cc..482e62367 100644 --- a/radio/src/targets/taranis/diskio.cpp +++ b/radio/src/targets/taranis/diskio.cpp @@ -60,7 +60,7 @@ /* Lock / unlock functions */ /*-----------------------------------------------------------------------*/ #if !defined(BOOT) -static OS_MutexID ioMutex; +static RTOS_MUTEX_HANDLE ioMutex; int ff_cre_syncobj (BYTE vol, _SYNC_t *mutex) { @@ -70,12 +70,13 @@ int ff_cre_syncobj (BYTE vol, _SYNC_t *mutex) int ff_req_grant (_SYNC_t mutex) { - return CoEnterMutexSection(mutex) == E_OK; + RTOS_LOCK_MUTEX(mutex); + return 1; } void ff_rel_grant (_SYNC_t mutex) { - CoLeaveMutexSection(mutex); + RTOS_UNLOCK_MUTEX(mutex); } int ff_del_syncobj (_SYNC_t mutex) diff --git a/radio/src/tasks_arm.cpp b/radio/src/tasks_arm.cpp index 641942e1f..5d5dcc6cf 100644 --- a/radio/src/tasks_arm.cpp +++ b/radio/src/tasks_arm.cpp @@ -20,18 +20,17 @@ #include "opentx.h" -OS_TID menusTaskId; -// menus stack must be aligned to 8 bytes otherwise printf for %f does not work! -TaskStack __ALIGNED(8) menusStack; +RTOS_TASK_HANDLE menusTaskId; +RTOS_DEFINE_STACK(menusStack, MENUS_STACK_SIZE); -OS_TID mixerTaskId; -TaskStack mixerStack; +RTOS_TASK_HANDLE mixerTaskId; +RTOS_DEFINE_STACK(mixerStack, MIXER_STACK_SIZE); -OS_TID audioTaskId; -TaskStack audioStack; +RTOS_TASK_HANDLE audioTaskId; +RTOS_DEFINE_STACK(audioStack, AUDIO_STACK_SIZE); -OS_MutexID audioMutex; -OS_MutexID mixerMutex; +RTOS_MUTEX_HANDLE audioMutex; +RTOS_MUTEX_HANDLE mixerMutex; enum TaskIndex { MENU_TASK_INDEX, @@ -43,27 +42,6 @@ enum TaskIndex { MAIN_TASK_INDEX = 255 }; -template -void TaskStack::paint() -{ - for (uint32_t i=0; i= (usbStarted() ? 5 : 10)) { // run at least every 20ms (every 10ms if USB is active) @@ -158,11 +124,11 @@ void mixerTask(void * pdata) uint16_t t0 = getTmr2MHz(); DEBUG_TIMER_START(debugTimerMixer); - CoEnterMutexSection(mixerMutex); + RTOS_LOCK_MUTEX(mixerMutex); doMixerCalculations(); DEBUG_TIMER_START(debugTimerMixerCalcToUsage); DEBUG_TIMER_SAMPLE(debugTimerMixerIterval); - CoLeaveMutexSection(mixerMutex); + RTOS_UNLOCK_MUTEX(mixerMutex); DEBUG_TIMER_STOP(debugTimerMixer); #if defined(STM32) && !defined(SIMU) @@ -196,7 +162,7 @@ void scheduleNextMixerCalculation(uint8_t module, uint16_t period_ms) { // Schedule next mixer calculation time, // for now assume mixer calculation takes 2 ms. - nextMixerTime[module] = (uint32_t)CoGetOSTime() + period_ms / 2 - 1/*2ms*/; + nextMixerTime[module] = (uint32_t)RTOS_GET_TIME() + period_ms / 2 - 1/*2ms*/; DEBUG_TIMER_STOP(debugTimerMixerCalcToUsage); } @@ -206,7 +172,7 @@ void scheduleNextMixerCalculation(uint8_t module, uint16_t period_ms) bool perMainEnabled = true; #endif -void menusTask(void * pdata) +TASK_FUNCTION(menusTask) { opentxInit(); @@ -217,13 +183,13 @@ void menusTask(void * pdata) break; } else if (pwr_check == e_power_press) { - CoTickDelay(MENU_TASK_PERIOD_TICKS); + RTOS_WAIT_TICKS(MENU_TASK_PERIOD_TICKS); continue; } #else while (pwrCheck() != e_power_off) { #endif - uint32_t start = (uint32_t)CoGetOSTime(); + uint32_t start = (uint32_t)RTOS_GET_TIME(); DEBUG_TIMER_START(debugTimerPerMain); #if defined(COLORLCD) && defined(CLI) if (perMainEnabled) { @@ -234,11 +200,11 @@ void menusTask(void * pdata) #endif DEBUG_TIMER_STOP(debugTimerPerMain); // TODO remove completely massstorage from sky9x firmware - uint32_t runtime = ((uint32_t)CoGetOSTime() - start); + uint32_t runtime = ((uint32_t)RTOS_GET_TIME() - start); // deduct the thread run-time from the wait, if run-time was more than // desired period, then skip the wait all together if (runtime < MENU_TASK_PERIOD_TICKS) { - CoTickDelay(MENU_TASK_PERIOD_TICKS - runtime); + RTOS_WAIT_TICKS(MENU_TASK_PERIOD_TICKS - runtime); } resetForcePowerOffRequest(); @@ -260,26 +226,27 @@ void menusTask(void * pdata) drawSleepBitmap(); opentxClose(); boardOff(); // Only turn power off if necessary + + TASK_RETURN(); } void tasksStart() { - CoInitOS(); + RTOS_INIT(); #if defined(CLI) cliStart(); #endif - mixerTaskId = CoCreateTask(mixerTask, NULL, 5, &mixerStack.stack[MIXER_STACK_SIZE-1], MIXER_STACK_SIZE); - menusTaskId = CoCreateTask(menusTask, NULL, 10, &menusStack.stack[MENUS_STACK_SIZE-1], MENUS_STACK_SIZE); + RTOS_CREATE_TASK(mixerTaskId, mixerTask, "Mixer", mixerStack, MIXER_STACK_SIZE, MIXER_TASK_PRIO); + RTOS_CREATE_TASK(menusTaskId, menusTask, "Menus", menusStack, MENUS_STACK_SIZE, MENUS_TASK_PRIO); #if !defined(SIMU) - // TODO move the SIMU audio in this task - audioTaskId = CoCreateTask(audioTask, NULL, 7, &audioStack.stack[AUDIO_STACK_SIZE-1], AUDIO_STACK_SIZE); + RTOS_CREATE_TASK(audioTaskId, audioTask, "Audio", audioStack, AUDIO_STACK_SIZE, AUDIO_TASK_PRIO); #endif - audioMutex = CoCreateMutex(); - mixerMutex = CoCreateMutex(); + RTOS_CREATE_MUTEX(audioMutex); + RTOS_CREATE_MUTEX(mixerMutex); - CoStartOS(); + RTOS_START(); } diff --git a/radio/src/tasks_arm.h b/radio/src/tasks_arm.h index 164ba4bae..2096606ca 100644 --- a/radio/src/tasks_arm.h +++ b/radio/src/tasks_arm.h @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -21,53 +21,37 @@ #ifndef _TASKS_ARM_H_ #define _TASKS_ARM_H_ -#if !defined(SIMU) -extern "C" { -#include -} -#endif +#include "rtos.h" +// stack sizes should be in multiples of 8 for better alignment #define MENUS_STACK_SIZE 2000 -#define MIXER_STACK_SIZE 500 -#define AUDIO_STACK_SIZE 500 -#define BLUETOOTH_STACK_SIZE 500 +#define MIXER_STACK_SIZE 512 +#define AUDIO_STACK_SIZE 512 -uint16_t getStackAvailable(void * address, uint16_t size); +#define MIXER_TASK_PRIO 5 +#define AUDIO_TASK_PRIO 7 +#define MENUS_TASK_PRIO 10 +#define CLI_TASK_PRIO 10 -template -class TaskStack -{ - public: - TaskStack() { } - void paint(); - uint16_t size() - { - return SIZE * 4; - } - uint16_t available() - { - return getStackAvailable(stack, SIZE); - } - OS_STK stack[SIZE]; -}; +extern RTOS_TASK_HANDLE menusTaskId; +extern RTOS_DEFINE_STACK(menusStack, MENUS_STACK_SIZE); + +extern RTOS_TASK_HANDLE mixerTaskId; +extern RTOS_DEFINE_STACK(mixerStack, MIXER_STACK_SIZE); + +extern RTOS_TASK_HANDLE audioTaskId; +extern RTOS_DEFINE_STACK(audioStack, AUDIO_STACK_SIZE); + +extern RTOS_MUTEX_HANDLE mixerMutex; +extern RTOS_FLAG_HANDLE openTxInitCompleteFlag; void stackPaint(); -uint16_t stackSize(); -uint16_t stackAvailable(); - -extern OS_TID menusTaskId; -// menus stack must be aligned to 8 bytes otherwise printf for %f does not work! -extern TaskStack _ALIGNED(8) menusStack; - -extern OS_TID mixerTaskId; -extern TaskStack mixerStack; - -extern OS_TID audioTaskId; -extern TaskStack audioStack; - void tasksStart(); extern volatile uint16_t timeForcePowerOffPressed; -inline void resetForcePowerOffRequest() {timeForcePowerOffPressed = 0; } +inline void resetForcePowerOffRequest() +{ + timeForcePowerOffPressed = 0; +} #endif // _TASKS_ARM_H_ diff --git a/radio/src/thirdparty/FatFs/ff.h b/radio/src/thirdparty/FatFs/ff.h index 84ab016ed..a22016247 100644 --- a/radio/src/thirdparty/FatFs/ff.h +++ b/radio/src/thirdparty/FatFs/ff.h @@ -21,6 +21,8 @@ #ifndef _FATFS #define _FATFS 68020 /* Revision ID */ +#include "rtos.h" + #ifdef __cplusplus extern "C" { #endif diff --git a/radio/src/thirdparty/FatFs/ffconf.h b/radio/src/thirdparty/FatFs/ffconf.h index 03a895fba..533364752 100644 --- a/radio/src/thirdparty/FatFs/ffconf.h +++ b/radio/src/thirdparty/FatFs/ffconf.h @@ -2,6 +2,8 @@ / FatFs - FAT file system module configuration file /---------------------------------------------------------------------------*/ +#include "rtos.h" + #define _FFCONF 68020 /* Revision ID */ #if !defined(SIMU) @@ -263,7 +265,7 @@ extern "C" { #if !defined(BOOT) #define _FS_REENTRANT 1 /* 0:Disable or 1:Enable */ - #define _SYNC_t unsigned char /*OS_MutexID*/ /* O/S dependent type of sync object. e.g. HANDLE, OS_EVENT*, ID and etc.. */ + #define _SYNC_t RTOS_MUTEX_HANDLE /* O/S dependent type of sync object. e.g. HANDLE, OS_EVENT*, ID and etc.. */ #else #define _FS_REENTRANT 0 /* 0:Disable or 1:Enable */ #endif diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 6a4303329..8138d16a8 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -23,7 +23,7 @@ #define ISTR(x) LEN_##x TR_##x // The non-0-terminated-strings -const pm_char STR_OPEN9X[] PROGMEM = +const pm_char STR_OPEN9X[] = ISTR(OFFON) ISTR(MMMINV) ISTR(NCHANNELS) @@ -113,458 +113,458 @@ const pm_char STR_OPEN9X[] PROGMEM = ; // The 0-terminated-strings -const pm_char STR_POPUPS[] PROGMEM = TR_POPUPS; +const pm_char STR_POPUPS[] = TR_POPUPS; #if !defined(OFS_EXIT) - const pm_char STR_EXIT[] PROGMEM = TR_EXIT; + const pm_char STR_EXIT[] = TR_EXIT; #endif #if !defined(PCBHORUS) - const pm_char STR_MENUWHENDONE[] PROGMEM = TR_MENUWHENDONE; + const pm_char STR_MENUWHENDONE[] = TR_MENUWHENDONE; #endif -const pm_char STR_FREE[] PROGMEM = TR_FREE; -const pm_char STR_DELETEMODEL[] PROGMEM = TR_DELETEMODEL; -const pm_char STR_COPYINGMODEL[] PROGMEM = TR_COPYINGMODEL; -const pm_char STR_MOVINGMODEL[] PROGMEM = TR_MOVINGMODEL; -const pm_char STR_LOADINGMODEL[] PROGMEM = TR_LOADINGMODEL; -const pm_char STR_NAME[] PROGMEM = TR_NAME; -const pm_char STR_BITMAP[] PROGMEM = TR_BITMAP; -const pm_char STR_TIMER[] PROGMEM = TR_TIMER; -const pm_char STR_ELIMITS[] PROGMEM = TR_ELIMITS; -const pm_char STR_ETRIMS[] PROGMEM = TR_ETRIMS; -const pm_char STR_TRIMINC[] PROGMEM = TR_TRIMINC; -const pm_char STR_DISPLAY_TRIMS[] PROGMEM = TR_DISPLAY_TRIMS; -const pm_char STR_TTRACE[] PROGMEM = TR_TTRACE; -const pm_char STR_TTRIM[] PROGMEM = TR_TTRIM; -const pm_char STR_BEEPCTR[] PROGMEM = TR_BEEPCTR; -const pm_char STR_USE_GLOBAL_FUNCS[] PROGMEM = TR_USE_GLOBAL_FUNCS; +const pm_char STR_FREE[] = TR_FREE; +const pm_char STR_DELETEMODEL[] = TR_DELETEMODEL; +const pm_char STR_COPYINGMODEL[] = TR_COPYINGMODEL; +const pm_char STR_MOVINGMODEL[] = TR_MOVINGMODEL; +const pm_char STR_LOADINGMODEL[] = TR_LOADINGMODEL; +const pm_char STR_NAME[] = TR_NAME; +const pm_char STR_BITMAP[] = TR_BITMAP; +const pm_char STR_TIMER[] = TR_TIMER; +const pm_char STR_ELIMITS[] = TR_ELIMITS; +const pm_char STR_ETRIMS[] = TR_ETRIMS; +const pm_char STR_TRIMINC[] = TR_TRIMINC; +const pm_char STR_DISPLAY_TRIMS[] = TR_DISPLAY_TRIMS; +const pm_char STR_TTRACE[] = TR_TTRACE; +const pm_char STR_TTRIM[] = TR_TTRIM; +const pm_char STR_BEEPCTR[] = TR_BEEPCTR; +const pm_char STR_USE_GLOBAL_FUNCS[] = TR_USE_GLOBAL_FUNCS; #if defined(PCBSKY9X) && defined(REVX) - const pm_char STR_OUTPUT_TYPE[] PROGMEM = TR_OUTPUT_TYPE; + const pm_char STR_OUTPUT_TYPE[] = TR_OUTPUT_TYPE; #endif -const pm_char STR_PROTO[] PROGMEM = TR_PROTO; -const pm_char STR_PPMFRAME[] PROGMEM = TR_PPMFRAME; -const pm_char STR_REFRESHRATE[] PROGMEM = TR_REFRESHRATE; -const pm_char SSTR_WARN_BATTVOLTAGE[] PROGMEM = STR_WARN_BATTVOLTAGE; -const pm_char STR_MS[] PROGMEM = TR_MS; -const pm_char STR_SWITCH[] PROGMEM = TR_SWITCH; -const pm_char STR_TRIMS[] PROGMEM = TR_TRIMS; -const pm_char STR_FADEIN[] PROGMEM = TR_FADEIN; -const pm_char STR_FADEOUT[] PROGMEM = TR_FADEOUT; -const pm_char STR_DEFAULT[] PROGMEM = TR_DEFAULT; -const pm_char STR_CHECKTRIMS[] PROGMEM = TR_CHECKTRIMS; +const pm_char STR_PROTO[] = TR_PROTO; +const pm_char STR_PPMFRAME[] = TR_PPMFRAME; +const pm_char STR_REFRESHRATE[] = TR_REFRESHRATE; +const pm_char SSTR_WARN_BATTVOLTAGE[] = STR_WARN_BATTVOLTAGE; +const pm_char STR_MS[] = TR_MS; +const pm_char STR_SWITCH[] = TR_SWITCH; +const pm_char STR_TRIMS[] = TR_TRIMS; +const pm_char STR_FADEIN[] = TR_FADEIN; +const pm_char STR_FADEOUT[] = TR_FADEOUT; +const pm_char STR_DEFAULT[] = TR_DEFAULT; +const pm_char STR_CHECKTRIMS[] = TR_CHECKTRIMS; #ifdef HELI -const pm_char STR_SWASHTYPE[] PROGMEM = TR_SWASHTYPE; -const pm_char STR_COLLECTIVE[] PROGMEM = TR_COLLECTIVE; -const pm_char STR_AILERON[] PROGMEM = TR_AILERON; -const pm_char STR_ELEVATOR[] PROGMEM = TR_ELEVATOR; -const pm_char STR_SWASHRING[] PROGMEM = TR_SWASHRING; -const pm_char STR_ELEDIRECTION[] PROGMEM = TR_ELEDIRECTION; -const pm_char STR_AILDIRECTION[] PROGMEM = TR_AILDIRECTION; -const pm_char STR_COLDIRECTION[] PROGMEM = TR_COLDIRECTION; +const pm_char STR_SWASHTYPE[] = TR_SWASHTYPE; +const pm_char STR_COLLECTIVE[] = TR_COLLECTIVE; +const pm_char STR_AILERON[] = TR_AILERON; +const pm_char STR_ELEVATOR[] = TR_ELEVATOR; +const pm_char STR_SWASHRING[] = TR_SWASHRING; +const pm_char STR_ELEDIRECTION[] = TR_ELEDIRECTION; +const pm_char STR_AILDIRECTION[] = TR_AILDIRECTION; +const pm_char STR_COLDIRECTION[] = TR_COLDIRECTION; #endif -const pm_char STR_MODE[] PROGMEM = TR_MODE; +const pm_char STR_MODE[] = TR_MODE; #if defined(AUDIO) && defined(BUZZER) -const pm_char STR_SPEAKER[] PROGMEM = TR_SPEAKER; -const pm_char STR_BUZZER[] PROGMEM = TR_BUZZER; +const pm_char STR_SPEAKER[] = TR_SPEAKER; +const pm_char STR_BUZZER[] = TR_BUZZER; #endif -const pm_char STR_NOFREEEXPO[] PROGMEM = TR_NOFREEEXPO; -const pm_char STR_NOFREEMIXER[] PROGMEM = TR_NOFREEMIXER; -const pm_char STR_SOURCE[] PROGMEM = TR_SOURCE; -const pm_char STR_WEIGHT[] PROGMEM = TR_WEIGHT; -const pm_char STR_EXPO[] PROGMEM = TR_EXPO; -const pm_char STR_SIDE[] PROGMEM = TR_SIDE; -const pm_char STR_DIFFERENTIAL[] PROGMEM = TR_DIFFERENTIAL; -const pm_char STR_OFFSET[] PROGMEM = TR_OFFSET; -const pm_char STR_TRIM[] PROGMEM = TR_TRIM; -const pm_char STR_DREX[] PROGMEM = TR_DREX; -const pm_char STR_CURVE[] PROGMEM = TR_CURVE; -const pm_char STR_FLMODE[] PROGMEM = TR_FLMODE; -const pm_char STR_MIXWARNING[] PROGMEM = TR_MIXWARNING; -const pm_char STR_OFF[] PROGMEM = TR_OFF; -const pm_char STR_MULTPX[] PROGMEM = TR_MULTPX; -const pm_char STR_DELAYDOWN[] PROGMEM = TR_DELAYDOWN; -const pm_char STR_DELAYUP[] PROGMEM = TR_DELAYUP; -const pm_char STR_SLOWDOWN[] PROGMEM = TR_SLOWDOWN; -const pm_char STR_SLOWUP[] PROGMEM = TR_SLOWUP; -const pm_char STR_MIXER[] PROGMEM = TR_MIXER; -const pm_char STR_CV[] PROGMEM = TR_CV; -const pm_char STR_GV[] PROGMEM = TR_GV; -const pm_char STR_ACHANNEL[] PROGMEM = TR_ACHANNEL; -const pm_char STR_RANGE[] PROGMEM = TR_RANGE; -const pm_char STR_CENTER[] PROGMEM = TR_CENTER; -const pm_char STR_BAR[] PROGMEM = TR_BAR; -const pm_char STR_ALARM[] PROGMEM = TR_ALARM; -const pm_char STR_USRDATA[] PROGMEM = TR_USRDATA; -const pm_char STR_BLADES[] PROGMEM = TR_BLADES; -const pm_char STR_SCREEN[] PROGMEM = TR_SCREEN; -const pm_char STR_SOUND_LABEL[] PROGMEM = TR_SOUND_LABEL; -const pm_char STR_LENGTH[] PROGMEM = TR_LENGTH; -const pm_char STR_BEEP_LENGTH[] PROGMEM = TR_BEEP_LENGTH; +const pm_char STR_NOFREEEXPO[] = TR_NOFREEEXPO; +const pm_char STR_NOFREEMIXER[] = TR_NOFREEMIXER; +const pm_char STR_SOURCE[] = TR_SOURCE; +const pm_char STR_WEIGHT[] = TR_WEIGHT; +const pm_char STR_EXPO[] = TR_EXPO; +const pm_char STR_SIDE[] = TR_SIDE; +const pm_char STR_DIFFERENTIAL[] = TR_DIFFERENTIAL; +const pm_char STR_OFFSET[] = TR_OFFSET; +const pm_char STR_TRIM[] = TR_TRIM; +const pm_char STR_DREX[] = TR_DREX; +const pm_char STR_CURVE[] = TR_CURVE; +const pm_char STR_FLMODE[] = TR_FLMODE; +const pm_char STR_MIXWARNING[] = TR_MIXWARNING; +const pm_char STR_OFF[] = TR_OFF; +const pm_char STR_MULTPX[] = TR_MULTPX; +const pm_char STR_DELAYDOWN[] = TR_DELAYDOWN; +const pm_char STR_DELAYUP[] = TR_DELAYUP; +const pm_char STR_SLOWDOWN[] = TR_SLOWDOWN; +const pm_char STR_SLOWUP[] = TR_SLOWUP; +const pm_char STR_MIXER[] = TR_MIXER; +const pm_char STR_CV[] = TR_CV; +const pm_char STR_GV[] = TR_GV; +const pm_char STR_ACHANNEL[] = TR_ACHANNEL; +const pm_char STR_RANGE[] = TR_RANGE; +const pm_char STR_CENTER[] = TR_CENTER; +const pm_char STR_BAR[] = TR_BAR; +const pm_char STR_ALARM[] = TR_ALARM; +const pm_char STR_USRDATA[] = TR_USRDATA; +const pm_char STR_BLADES[] = TR_BLADES; +const pm_char STR_SCREEN[] = TR_SCREEN; +const pm_char STR_SOUND_LABEL[] = TR_SOUND_LABEL; +const pm_char STR_LENGTH[] = TR_LENGTH; +const pm_char STR_BEEP_LENGTH[] = TR_BEEP_LENGTH; #if defined(AUDIO) -const pm_char STR_SPKRPITCH[] PROGMEM = TR_SPKRPITCH; +const pm_char STR_SPKRPITCH[] = TR_SPKRPITCH; #endif #if defined(HAPTIC) -const pm_char STR_HAPTIC_LABEL[] PROGMEM = TR_HAPTIC_LABEL; -const pm_char STR_HAPTICSTRENGTH[] PROGMEM = TR_HAPTICSTRENGTH; +const pm_char STR_HAPTIC_LABEL[] = TR_HAPTIC_LABEL; +const pm_char STR_HAPTICSTRENGTH[] = TR_HAPTICSTRENGTH; #endif -const pm_char STR_CONTRAST[] PROGMEM = TR_CONTRAST; -const pm_char STR_ALARMS_LABEL[] PROGMEM = TR_ALARMS_LABEL; -const pm_char STR_BATTERY_RANGE[] PROGMEM = TR_BATTERY_RANGE; -const pm_char STR_BATTERYWARNING[] PROGMEM = TR_BATTERYWARNING; -const pm_char STR_INACTIVITYALARM[] PROGMEM = TR_INACTIVITYALARM; -const pm_char STR_MEMORYWARNING[] PROGMEM = TR_MEMORYWARNING; -const pm_char STR_ALARMWARNING[] PROGMEM = TR_ALARMWARNING; -const pm_char STR_RSSISHUTDOWNALARM[] PROGMEM = TR_RSSISHUTDOWNALARM; -const pm_char STR_MODEL_STILL_POWERED[] PROGMEM = TR_MODEL_STILL_POWERED; -const pm_char STR_MODEL_SHUTDOWN[] PROGMEM = TR_MODEL_SHUTDOWN; -const pm_char STR_PRESS_ENTER_TO_CONFIRM[] PROGMEM = TR_PRESS_ENTER_TO_CONFIRM; +const pm_char STR_CONTRAST[] = TR_CONTRAST; +const pm_char STR_ALARMS_LABEL[] = TR_ALARMS_LABEL; +const pm_char STR_BATTERY_RANGE[] = TR_BATTERY_RANGE; +const pm_char STR_BATTERYWARNING[] = TR_BATTERYWARNING; +const pm_char STR_INACTIVITYALARM[] = TR_INACTIVITYALARM; +const pm_char STR_MEMORYWARNING[] = TR_MEMORYWARNING; +const pm_char STR_ALARMWARNING[] = TR_ALARMWARNING; +const pm_char STR_RSSISHUTDOWNALARM[] = TR_RSSISHUTDOWNALARM; +const pm_char STR_MODEL_STILL_POWERED[] = TR_MODEL_STILL_POWERED; +const pm_char STR_MODEL_SHUTDOWN[] = TR_MODEL_SHUTDOWN; +const pm_char STR_PRESS_ENTER_TO_CONFIRM[] = TR_PRESS_ENTER_TO_CONFIRM; #if defined(ROTARY_ENCODERS) -const pm_char STR_RENAVIG[] PROGMEM = TR_RENAVIG; +const pm_char STR_RENAVIG[] = TR_RENAVIG; #endif -const pm_char STR_THROTTLEREVERSE[] PROGMEM = TR_THROTTLEREVERSE; -const pm_char STR_TIMER_NAME[] PROGMEM = TR_TIMER_NAME; -const pm_char STR_MINUTEBEEP[] PROGMEM = TR_MINUTEBEEP; -const pm_char STR_BEEPCOUNTDOWN[] PROGMEM = TR_BEEPCOUNTDOWN; -const pm_char STR_PERSISTENT[] PROGMEM = TR_PERSISTENT; -const pm_char STR_BACKLIGHT_LABEL[] PROGMEM = TR_BACKLIGHT_LABEL; -const pm_char STR_BLDELAY[] PROGMEM = TR_BLDELAY; +const pm_char STR_THROTTLEREVERSE[] = TR_THROTTLEREVERSE; +const pm_char STR_TIMER_NAME[] = TR_TIMER_NAME; +const pm_char STR_MINUTEBEEP[] = TR_MINUTEBEEP; +const pm_char STR_BEEPCOUNTDOWN[] = TR_BEEPCOUNTDOWN; +const pm_char STR_PERSISTENT[] = TR_PERSISTENT; +const pm_char STR_BACKLIGHT_LABEL[] = TR_BACKLIGHT_LABEL; +const pm_char STR_BLDELAY[] = TR_BLDELAY; #if defined(PWM_BACKLIGHT) || defined(PCBHORUS) -const pm_char STR_BLONBRIGHTNESS[] PROGMEM = TR_BLONBRIGHTNESS; -const pm_char STR_BLOFFBRIGHTNESS[] PROGMEM = TR_BLOFFBRIGHTNESS; +const pm_char STR_BLONBRIGHTNESS[] = TR_BLONBRIGHTNESS; +const pm_char STR_BLOFFBRIGHTNESS[] = TR_BLOFFBRIGHTNESS; #endif -const pm_char STR_SPLASHSCREEN[] PROGMEM = TR_SPLASHSCREEN; -const pm_char STR_THROTTLEWARNING[] PROGMEM = TR_THROTTLEWARNING; -const pm_char STR_SWITCHWARNING[] PROGMEM = TR_SWITCHWARNING; -const pm_char STR_POTWARNINGSTATE[] PROGMEM = TR_POTWARNINGSTATE; -const pm_char STR_POTWARNING[] PROGMEM = TR_POTWARNING; -const pm_char STR_SLIDERWARNING[] PROGMEM = TR_SLIDERWARNING; +const pm_char STR_SPLASHSCREEN[] = TR_SPLASHSCREEN; +const pm_char STR_THROTTLEWARNING[] = TR_THROTTLEWARNING; +const pm_char STR_SWITCHWARNING[] = TR_SWITCHWARNING; +const pm_char STR_POTWARNINGSTATE[] = TR_POTWARNINGSTATE; +const pm_char STR_POTWARNING[] = TR_POTWARNING; +const pm_char STR_SLIDERWARNING[] = TR_SLIDERWARNING; #ifdef TELEMETRY_FRSKY -const pm_char STR_TIMEZONE[] PROGMEM = TR_TIMEZONE; -const pm_char STR_ADJUST_RTC[] PROGMEM = TR_ADJUST_RTC; -const pm_char STR_GPS[] PROGMEM = TR_GPS; -const pm_char STR_GPSCOORD[] PROGMEM = TR_GPSCOORD; -const pm_char STR_VARIO[] PROGMEM = TR_VARIO; -const pm_char STR_PITCH_AT_ZERO[] PROGMEM = TR_PITCH_AT_ZERO; -const pm_char STR_PITCH_AT_MAX[] PROGMEM = TR_PITCH_AT_MAX; -const pm_char STR_REPEAT_AT_ZERO[] PROGMEM = TR_REPEAT_AT_ZERO; +const pm_char STR_TIMEZONE[] = TR_TIMEZONE; +const pm_char STR_ADJUST_RTC[] = TR_ADJUST_RTC; +const pm_char STR_GPS[] = TR_GPS; +const pm_char STR_GPSCOORD[] = TR_GPSCOORD; +const pm_char STR_VARIO[] = TR_VARIO; +const pm_char STR_PITCH_AT_ZERO[] = TR_PITCH_AT_ZERO; +const pm_char STR_PITCH_AT_MAX[] = TR_PITCH_AT_MAX; +const pm_char STR_REPEAT_AT_ZERO[] = TR_REPEAT_AT_ZERO; #endif -const pm_char STR_RXCHANNELORD[] PROGMEM = TR_RXCHANNELORD; -const pm_char STR_STICKS[] PROGMEM = TR_STICKS; -const pm_char STR_POTS[] PROGMEM = TR_POTS; -const pm_char STR_SWITCHES[] PROGMEM = TR_SWITCHES; -const pm_char STR_SWITCHES_DELAY[] PROGMEM = TR_SWITCHES_DELAY; -const pm_char STR_SLAVE[] PROGMEM = TR_SLAVE; -const pm_char STR_MODESRC[] PROGMEM = TR_MODESRC; -const pm_char STR_MULTIPLIER[] PROGMEM = TR_MULTIPLIER; -const pm_char STR_CAL[] PROGMEM = TR_CAL; -const pm_char STR_VTRIM[] PROGMEM = TR_VTRIM; -const pm_char STR_BG[] PROGMEM = TR_BG; -const pm_char STR_MENUTOSTART[] PROGMEM = TR_MENUTOSTART; -const pm_char STR_SETMIDPOINT[] PROGMEM = TR_SETMIDPOINT; -const pm_char STR_MOVESTICKSPOTS[] PROGMEM = TR_MOVESTICKSPOTS; -const pm_char STR_RXBATT[] PROGMEM = TR_RXBATT; -const pm_char STR_TX[] PROGMEM = TR_TXnRX; -const pm_char STR_ACCEL[] PROGMEM = TR_ACCEL; -const pm_char STR_NODATA[] PROGMEM = TR_NODATA; -const pm_char STR_TOTTM1TM2THRTHP[] PROGMEM = TR_TOTTM1TM2THRTHP; -const pm_char STR_TMR1LATMAXUS[] PROGMEM = TR_TMR1LATMAXUS; -const pm_char STR_TMR1LATMINUS[] PROGMEM = TR_TMR1LATMINUS; -const pm_char STR_TMR1JITTERUS[] PROGMEM = TR_TMR1JITTERUS; -const pm_char STR_TMIXMAXMS[] PROGMEM = TR_TMIXMAXMS; -const pm_char STR_FREESTACKMINB[] PROGMEM = TR_FREESTACKMINB; -const pm_char STR_MENUTORESET[] PROGMEM = TR_MENUTORESET; -const pm_char STR_PPM_TRAINER[] PROGMEM = TR_PPM_TRAINER; -const pm_char STR_CH[] PROGMEM = TR_CH; -const pm_char STR_MODEL[] PROGMEM = TR_MODEL; -const pm_char STR_FP[] PROGMEM = TR_FP; -const pm_char STR_MIX[] PROGMEM = TR_MIX; -const pm_char STR_ALERT[] PROGMEM = TR_ALERT; -const pm_char STR_PRESSANYKEYTOSKIP[] PROGMEM = TR_PRESSANYKEYTOSKIP; -const pm_char STR_THROTTLENOTIDLE[] PROGMEM = TR_THROTTLENOTIDLE; -const pm_char STR_ALARMSDISABLED[] PROGMEM = TR_ALARMSDISABLED; -const pm_char STR_PRESSANYKEY[] PROGMEM = TR_PRESSANYKEY; -const pm_char STR_TRIMS2OFFSETS[] PROGMEM = TR_TRIMS2OFFSETS; -const pm_char STR_OUTPUTS2FAILSAFE[] PROGMEM = TR_OUTPUTS2FAILSAFE; -const pm_char STR_MENURADIOSETUP[] PROGMEM = TR_MENURADIOSETUP; +const pm_char STR_RXCHANNELORD[] = TR_RXCHANNELORD; +const pm_char STR_STICKS[] = TR_STICKS; +const pm_char STR_POTS[] = TR_POTS; +const pm_char STR_SWITCHES[] = TR_SWITCHES; +const pm_char STR_SWITCHES_DELAY[] = TR_SWITCHES_DELAY; +const pm_char STR_SLAVE[] = TR_SLAVE; +const pm_char STR_MODESRC[] = TR_MODESRC; +const pm_char STR_MULTIPLIER[] = TR_MULTIPLIER; +const pm_char STR_CAL[] = TR_CAL; +const pm_char STR_VTRIM[] = TR_VTRIM; +const pm_char STR_BG[] = TR_BG; +const pm_char STR_MENUTOSTART[] = TR_MENUTOSTART; +const pm_char STR_SETMIDPOINT[] = TR_SETMIDPOINT; +const pm_char STR_MOVESTICKSPOTS[] = TR_MOVESTICKSPOTS; +const pm_char STR_RXBATT[] = TR_RXBATT; +const pm_char STR_TX[] = TR_TXnRX; +const pm_char STR_ACCEL[] = TR_ACCEL; +const pm_char STR_NODATA[] = TR_NODATA; +const pm_char STR_TOTTM1TM2THRTHP[] = TR_TOTTM1TM2THRTHP; +const pm_char STR_TMR1LATMAXUS[] = TR_TMR1LATMAXUS; +const pm_char STR_TMR1LATMINUS[] = TR_TMR1LATMINUS; +const pm_char STR_TMR1JITTERUS[] = TR_TMR1JITTERUS; +const pm_char STR_TMIXMAXMS[] = TR_TMIXMAXMS; +const pm_char STR_FREESTACKMINB[] = TR_FREESTACKMINB; +const pm_char STR_MENUTORESET[] = TR_MENUTORESET; +const pm_char STR_PPM_TRAINER[] = TR_PPM_TRAINER; +const pm_char STR_CH[] = TR_CH; +const pm_char STR_MODEL[] = TR_MODEL; +const pm_char STR_FP[] = TR_FP; +const pm_char STR_MIX[] = TR_MIX; +const pm_char STR_ALERT[] = TR_ALERT; +const pm_char STR_PRESSANYKEYTOSKIP[] = TR_PRESSANYKEYTOSKIP; +const pm_char STR_THROTTLENOTIDLE[] = TR_THROTTLENOTIDLE; +const pm_char STR_ALARMSDISABLED[] = TR_ALARMSDISABLED; +const pm_char STR_PRESSANYKEY[] = TR_PRESSANYKEY; +const pm_char STR_TRIMS2OFFSETS[] = TR_TRIMS2OFFSETS; +const pm_char STR_OUTPUTS2FAILSAFE[] = TR_OUTPUTS2FAILSAFE; +const pm_char STR_MENURADIOSETUP[] = TR_MENURADIOSETUP; #if defined(EEPROM) -const pm_char STR_BAD_RADIO_DATA[] PROGMEM = TR_BADEEPROMDATA; -const pm_char STR_STORAGE_FORMAT[] PROGMEM = TR_EEPROMFORMATTING; -const pm_char STR_STORAGE_WARNING[] PROGMEM = TR_EEPROMWARN; -const pm_char STR_EEPROM_CONVERTING[] PROGMEM = TR_EEPROM_CONVERTING; -const pm_char STR_EEPROMLOWMEM[] PROGMEM = TR_EEPROMLOWMEM; -const pm_char STR_EEPROMOVERFLOW[] PROGMEM = TR_EEPROMOVERFLOW; +const pm_char STR_BAD_RADIO_DATA[] = TR_BADEEPROMDATA; +const pm_char STR_STORAGE_FORMAT[] = TR_EEPROMFORMATTING; +const pm_char STR_STORAGE_WARNING[] = TR_EEPROMWARN; +const pm_char STR_EEPROM_CONVERTING[] = TR_EEPROM_CONVERTING; +const pm_char STR_EEPROMLOWMEM[] = TR_EEPROMLOWMEM; +const pm_char STR_EEPROMOVERFLOW[] = TR_EEPROMOVERFLOW; #else -const pm_char STR_BAD_RADIO_DATA[] PROGMEM = TR_BAD_RADIO_DATA; -const pm_char STR_STORAGE_WARNING[] PROGMEM = TR_STORAGE_WARNING; -const pm_char STR_STORAGE_FORMAT[] PROGMEM = TR_STORAGE_FORMAT; +const pm_char STR_BAD_RADIO_DATA[] = TR_BAD_RADIO_DATA; +const pm_char STR_STORAGE_WARNING[] = TR_STORAGE_WARNING; +const pm_char STR_STORAGE_FORMAT[] = TR_STORAGE_FORMAT; #endif -const pm_char STR_FAS_OFFSET[] PROGMEM = TR_FAS_OFFSET; +const pm_char STR_FAS_OFFSET[] = TR_FAS_OFFSET; -const pm_char STR_MENUDATEANDTIME[] PROGMEM = TR_MENUDATEANDTIME; +const pm_char STR_MENUDATEANDTIME[] = TR_MENUDATEANDTIME; -const pm_char STR_MENUTRAINER[] PROGMEM = TR_MENUTRAINER; -const pm_char STR_MENUSPECIALFUNCS[] PROGMEM = TR_MENUSPECIALFUNCS; -const pm_char STR_MENUVERSION[] PROGMEM = TR_MENUVERSION; -const pm_char STR_MENU_RADIO_SWITCHES[] PROGMEM = TR_MENU_RADIO_SWITCHES; -const pm_char STR_MENU_RADIO_ANALOGS[] PROGMEM = TR_MENU_RADIO_ANALOGS; -const pm_char STR_MENUCALIBRATION[] PROGMEM = TR_MENUCALIBRATION; +const pm_char STR_MENUTRAINER[] = TR_MENUTRAINER; +const pm_char STR_MENUSPECIALFUNCS[] = TR_MENUSPECIALFUNCS; +const pm_char STR_MENUVERSION[] = TR_MENUVERSION; +const pm_char STR_MENU_RADIO_SWITCHES[] = TR_MENU_RADIO_SWITCHES; +const pm_char STR_MENU_RADIO_ANALOGS[] = TR_MENU_RADIO_ANALOGS; +const pm_char STR_MENUCALIBRATION[] = TR_MENUCALIBRATION; -const pm_char STR_MENUMODELSEL[] PROGMEM = TR_MENUMODELSEL; -const pm_char STR_MENUSETUP[] PROGMEM = TR_MENUSETUP; -const pm_char STR_MENUFLIGHTMODE[] PROGMEM = TR_MENUFLIGHTMODE; -const pm_char STR_MENUFLIGHTMODES[] PROGMEM = TR_MENUFLIGHTMODES; +const pm_char STR_MENUMODELSEL[] = TR_MENUMODELSEL; +const pm_char STR_MENUSETUP[] = TR_MENUSETUP; +const pm_char STR_MENUFLIGHTMODE[] = TR_MENUFLIGHTMODE; +const pm_char STR_MENUFLIGHTMODES[] = TR_MENUFLIGHTMODES; #ifdef HELI -const pm_char STR_MENUHELISETUP[] PROGMEM = TR_MENUHELISETUP; +const pm_char STR_MENUHELISETUP[] = TR_MENUHELISETUP; #endif -const pm_char STR_MENUINPUTS[] PROGMEM = TR_MENUINPUTS; -const pm_char STR_MENULIMITS[] PROGMEM = TR_MENULIMITS; -const pm_char STR_MENUCURVES[] PROGMEM = TR_MENUCURVES; -const pm_char STR_MENUCURVE[] PROGMEM = TR_MENUCURVE; -const pm_char STR_MENULOGICALSWITCH[] PROGMEM = TR_MENULOGICALSWITCH; -const pm_char STR_MENULOGICALSWITCHES[] PROGMEM = TR_MENULOGICALSWITCHES; -const pm_char STR_MENUCUSTOMFUNC[] PROGMEM = TR_MENUCUSTOMFUNC; +const pm_char STR_MENUINPUTS[] = TR_MENUINPUTS; +const pm_char STR_MENULIMITS[] = TR_MENULIMITS; +const pm_char STR_MENUCURVES[] = TR_MENUCURVES; +const pm_char STR_MENUCURVE[] = TR_MENUCURVE; +const pm_char STR_MENULOGICALSWITCH[] = TR_MENULOGICALSWITCH; +const pm_char STR_MENULOGICALSWITCHES[] = TR_MENULOGICALSWITCHES; +const pm_char STR_MENUCUSTOMFUNC[] = TR_MENUCUSTOMFUNC; #if defined(LUA) -const pm_char STR_MENUCUSTOMSCRIPTS[] PROGMEM = TR_MENUCUSTOMSCRIPTS; +const pm_char STR_MENUCUSTOMSCRIPTS[] = TR_MENUCUSTOMSCRIPTS; #endif #if defined(TELEMETRY_FRSKY) -const pm_char STR_MENUTELEMETRY[] PROGMEM = TR_MENUTELEMETRY; -const pm_char STR_LIMIT[] PROGMEM = TR_LIMIT; +const pm_char STR_MENUTELEMETRY[] = TR_MENUTELEMETRY; +const pm_char STR_LIMIT[] = TR_LIMIT; #endif -const pm_char STR_MENUSTAT[] PROGMEM = TR_MENUSTAT; -const pm_char STR_MENUDEBUG[] PROGMEM = TR_MENUDEBUG; +const pm_char STR_MENUSTAT[] = TR_MENUSTAT; +const pm_char STR_MENUDEBUG[] = TR_MENUDEBUG; const char * const STR_MONITOR_CHANNELS[] = { TR_MONITOR_CHANNELS1, TR_MONITOR_CHANNELS2, TR_MONITOR_CHANNELS3, TR_MONITOR_CHANNELS4 }; -const pm_char STR_MONITOR_SWITCHES[] PROGMEM = TR_MONITOR_SWITCHES; -const pm_char STR_MONITOR_OUTPUT_DESC[] PROGMEM = TR_MONITOR_OUTPUT_DESC; -const pm_char STR_MONITOR_MIXER_DESC[] PROGMEM = TR_MONITOR_MIXER_DESC; -const pm_char STR_MENUGLOBALVARS[] PROGMEM = TR_MENUGLOBALVARS; +const pm_char STR_MONITOR_SWITCHES[] = TR_MONITOR_SWITCHES; +const pm_char STR_MONITOR_OUTPUT_DESC[] = TR_MONITOR_OUTPUT_DESC; +const pm_char STR_MONITOR_MIXER_DESC[] = TR_MONITOR_MIXER_DESC; +const pm_char STR_MENUGLOBALVARS[] = TR_MENUGLOBALVARS; #if defined(DSM2) || defined(PXX) -const pm_char STR_RECEIVER_NUM[] PROGMEM = TR_RECEIVER_NUM; -const pm_char STR_RECEIVER[] PROGMEM = TR_RECEIVER; -const pm_char STR_REBIND[] PROGMEM = TR_REBIND; +const pm_char STR_RECEIVER_NUM[] = TR_RECEIVER_NUM; +const pm_char STR_RECEIVER[] = TR_RECEIVER; +const pm_char STR_REBIND[] = TR_REBIND; #endif -const pm_char STR_SYNCMENU[] PROGMEM = TR_SYNCMENU; -const pm_char STR_INTERNALRF[] PROGMEM = TR_INTERNALRF; -const pm_char STR_EXTERNALRF[] PROGMEM = TR_EXTERNALRF; -const pm_char STR_MODULE_TELEMETRY[] PROGMEM = TR_MODULE_TELEMETRY; -const pm_char STR_MODULE_TELEM_ON[] PROGMEM = TR_MODULE_TELEM_ON; -const pm_char STR_COUNTRYCODE[] PROGMEM = TR_COUNTRYCODE; -const pm_char STR_USBMODE[] PROGMEM = TR_USBMODE; -const pm_char STR_FAILSAFE[] PROGMEM = TR_FAILSAFE; -const pm_char STR_FAILSAFESET[] PROGMEM = TR_FAILSAFESET; -const pm_char STR_HOLD[] PROGMEM = TR_HOLD; -const pm_char STR_NONE[] PROGMEM = TR_NONE; -const pm_char STR_MENUSENSOR[] PROGMEM = TR_MENUSENSOR; -const pm_char STR_SENSOR[] PROGMEM = TR_SENSOR; -const pm_char STR_DISABLE_INTERNAL[] PROGMEM = TR_DISABLE_INTERNAL; +const pm_char STR_SYNCMENU[] = TR_SYNCMENU; +const pm_char STR_INTERNALRF[] = TR_INTERNALRF; +const pm_char STR_EXTERNALRF[] = TR_EXTERNALRF; +const pm_char STR_MODULE_TELEMETRY[] = TR_MODULE_TELEMETRY; +const pm_char STR_MODULE_TELEM_ON[] = TR_MODULE_TELEM_ON; +const pm_char STR_COUNTRYCODE[] = TR_COUNTRYCODE; +const pm_char STR_USBMODE[] = TR_USBMODE; +const pm_char STR_FAILSAFE[] = TR_FAILSAFE; +const pm_char STR_FAILSAFESET[] = TR_FAILSAFESET; +const pm_char STR_HOLD[] = TR_HOLD; +const pm_char STR_NONE[] = TR_NONE; +const pm_char STR_MENUSENSOR[] = TR_MENUSENSOR; +const pm_char STR_SENSOR[] = TR_SENSOR; +const pm_char STR_DISABLE_INTERNAL[] = TR_DISABLE_INTERNAL; -const pm_char STR_INVERT_THR[] PROGMEM = TR_INVERT_THR; -const pm_char STR_AND_SWITCH[] PROGMEM = TR_AND_SWITCH; -const pm_char STR_SF[] PROGMEM = TR_SF; -const pm_char STR_GF[] PROGMEM = TR_GF; +const pm_char STR_INVERT_THR[] = TR_INVERT_THR; +const pm_char STR_AND_SWITCH[] = TR_AND_SWITCH; +const pm_char STR_SF[] = TR_SF; +const pm_char STR_GF[] = TR_GF; #if defined(FRSKY_HUB) -const pm_char STR_MINRSSI[] PROGMEM = TR_MINRSSI; -const pm_char STR_LATITUDE[] PROGMEM = TR_LATITUDE; -const pm_char STR_LONGITUDE[] PROGMEM = TR_LONGITUDE; +const pm_char STR_MINRSSI[] = TR_MINRSSI; +const pm_char STR_LATITUDE[] = TR_LATITUDE; +const pm_char STR_LONGITUDE[] = TR_LONGITUDE; #endif -const pm_char STR_SHUTDOWN[] PROGMEM = TR_SHUTDOWN; -const pm_char STR_SAVEMODEL[] PROGMEM = TR_SAVEMODEL; +const pm_char STR_SHUTDOWN[] = TR_SHUTDOWN; +const pm_char STR_SAVEMODEL[] = TR_SAVEMODEL; #if defined(PCBX9E) -const pm_char STR_POWEROFF[] PROGMEM = TR_POWEROFF; +const pm_char STR_POWEROFF[] = TR_POWEROFF; #endif -const pm_char STR_BATT_CALIB[] PROGMEM = TR_BATT_CALIB; +const pm_char STR_BATT_CALIB[] = TR_BATT_CALIB; -const pm_char STR_VOLTAGE[] PROGMEM = TR_VOLTAGE; -const pm_char STR_CURRENT[] PROGMEM = TR_CURRENT; +const pm_char STR_VOLTAGE[] = TR_VOLTAGE; +const pm_char STR_CURRENT[] = TR_CURRENT; -const pm_char STR_CURRENT_CALIB[] PROGMEM = TR_CURRENT_CALIB; -const pm_char STR_UNITSSYSTEM[] PROGMEM = TR_UNITSSYSTEM; -const pm_char STR_VOICELANG[] PROGMEM = TR_VOICELANG; -const pm_char STR_MODELIDUSED[] PROGMEM = TR_MODELIDUSED; -const pm_char STR_BEEP_VOLUME[] PROGMEM = INDENT TR_BEEP_VOLUME; -const pm_char STR_WAV_VOLUME[] PROGMEM = INDENT TR_WAV_VOLUME; -const pm_char STR_BG_VOLUME[] PROGMEM = INDENT TR_BG_VOLUME; -const pm_char STR_PERSISTENT_MAH[] PROGMEM = TR_PERSISTENT_MAH; +const pm_char STR_CURRENT_CALIB[] = TR_CURRENT_CALIB; +const pm_char STR_UNITSSYSTEM[] = TR_UNITSSYSTEM; +const pm_char STR_VOICELANG[] = TR_VOICELANG; +const pm_char STR_MODELIDUSED[] = TR_MODELIDUSED; +const pm_char STR_BEEP_VOLUME[] = INDENT TR_BEEP_VOLUME; +const pm_char STR_WAV_VOLUME[] = INDENT TR_WAV_VOLUME; +const pm_char STR_BG_VOLUME[] = INDENT TR_BG_VOLUME; +const pm_char STR_PERSISTENT_MAH[] = TR_PERSISTENT_MAH; #if defined(NAVIGATION_MENUS) -const pm_char STR_SELECT_MODEL[] PROGMEM = TR_SELECT_MODEL; -const pm_char STR_CREATE_CATEGORY[] PROGMEM = TR_CREATE_CATEGORY; -const pm_char STR_RENAME_CATEGORY[] PROGMEM = TR_RENAME_CATEGORY; -const pm_char STR_DELETE_CATEGORY[] PROGMEM = TR_DELETE_CATEGORY; -const pm_char STR_CREATE_MODEL[] PROGMEM = TR_CREATE_MODEL; -const pm_char STR_DUPLICATE_MODEL[] PROGMEM = TR_DUPLICATE_MODEL; -const pm_char STR_COPY_MODEL[] PROGMEM = TR_COPY_MODEL; -const pm_char STR_MOVE_MODEL[] PROGMEM = TR_MOVE_MODEL; -const pm_char STR_DELETE_MODEL[] PROGMEM = TR_DELETE_MODEL; -const pm_char STR_EDIT[] PROGMEM = TR_EDIT; -const pm_char STR_INSERT_BEFORE[] PROGMEM = TR_INSERT_BEFORE; -const pm_char STR_INSERT_AFTER[] PROGMEM = TR_INSERT_AFTER; -const pm_char STR_COPY[] PROGMEM = TR_COPY; -const pm_char STR_MOVE[] PROGMEM = TR_MOVE; -const pm_char STR_PASTE[] PROGMEM = TR_PASTE; -const pm_char STR_INSERT[] PROGMEM = TR_INSERT; -const pm_char STR_DELETE[] PROGMEM = TR_DELETE; -const pm_char STR_RESET_FLIGHT[] PROGMEM = TR_RESET_FLIGHT; -const pm_char STR_RESET_TIMER1[] PROGMEM = TR_RESET_TIMER1; -const pm_char STR_RESET_TIMER2[] PROGMEM = TR_RESET_TIMER2; -const pm_char STR_RESET_TIMER3[] PROGMEM = TR_RESET_TIMER3; -const pm_char STR_RESET_TELEMETRY[] PROGMEM = TR_RESET_TELEMETRY; -const pm_char STR_STATISTICS[] PROGMEM = TR_STATISTICS; -const pm_char STR_ABOUT_US[] PROGMEM = TR_ABOUT_US; -const pm_char STR_USB_JOYSTICK[] PROGMEM = TR_USB_JOYSTICK; -const pm_char STR_USB_MASS_STORAGE[] PROGMEM = TR_USB_MASS_STORAGE; -const pm_char STR_USB_SERIAL[] PROGMEM = TR_USB_SERIAL; -const pm_char STR_SETUP_SCREENS[] PROGMEM = TR_SETUP_SCREENS; -const pm_char STR_MONITOR_SCREENS[] PROGMEM = TR_MONITOR_SCREENS; +const pm_char STR_SELECT_MODEL[] = TR_SELECT_MODEL; +const pm_char STR_CREATE_CATEGORY[] = TR_CREATE_CATEGORY; +const pm_char STR_RENAME_CATEGORY[] = TR_RENAME_CATEGORY; +const pm_char STR_DELETE_CATEGORY[] = TR_DELETE_CATEGORY; +const pm_char STR_CREATE_MODEL[] = TR_CREATE_MODEL; +const pm_char STR_DUPLICATE_MODEL[] = TR_DUPLICATE_MODEL; +const pm_char STR_COPY_MODEL[] = TR_COPY_MODEL; +const pm_char STR_MOVE_MODEL[] = TR_MOVE_MODEL; +const pm_char STR_DELETE_MODEL[] = TR_DELETE_MODEL; +const pm_char STR_EDIT[] = TR_EDIT; +const pm_char STR_INSERT_BEFORE[] = TR_INSERT_BEFORE; +const pm_char STR_INSERT_AFTER[] = TR_INSERT_AFTER; +const pm_char STR_COPY[] = TR_COPY; +const pm_char STR_MOVE[] = TR_MOVE; +const pm_char STR_PASTE[] = TR_PASTE; +const pm_char STR_INSERT[] = TR_INSERT; +const pm_char STR_DELETE[] = TR_DELETE; +const pm_char STR_RESET_FLIGHT[] = TR_RESET_FLIGHT; +const pm_char STR_RESET_TIMER1[] = TR_RESET_TIMER1; +const pm_char STR_RESET_TIMER2[] = TR_RESET_TIMER2; +const pm_char STR_RESET_TIMER3[] = TR_RESET_TIMER3; +const pm_char STR_RESET_TELEMETRY[] = TR_RESET_TELEMETRY; +const pm_char STR_STATISTICS[] = TR_STATISTICS; +const pm_char STR_ABOUT_US[] = TR_ABOUT_US; +const pm_char STR_USB_JOYSTICK[] = TR_USB_JOYSTICK; +const pm_char STR_USB_MASS_STORAGE[] = TR_USB_MASS_STORAGE; +const pm_char STR_USB_SERIAL[] = TR_USB_SERIAL; +const pm_char STR_SETUP_SCREENS[] = TR_SETUP_SCREENS; +const pm_char STR_MONITOR_SCREENS[] = TR_MONITOR_SCREENS; #endif #if defined(MULTIMODULE) -const pm_char STR_MULTI_CUSTOM[] PROGMEM = TR_MULTI_CUSTOM; -const pm_char STR_MULTI_RFTUNE[] PROGMEM = TR_MULTI_RFTUNE; -const pm_char STR_MULTI_TELEMETRY[] PROGMEM = TR_MULTI_TELEMETRY; -const pm_char STR_MULTI_VIDFREQ[] PROGMEM = TR_MULTI_VIDFREQ; -const pm_char STR_MULTI_OPTION[] PROGMEM = TR_MULTI_OPTION; -const pm_char STR_MULTI_AUTOBIND[] PROGMEM = TR_MULTI_AUTOBIND; -const pm_char STR_MULTI_DSM_AUTODTECT[] PROGMEM = TR_MULTI_DSM_AUTODTECT; -const pm_char STR_MULTI_LOWPOWER[] PROGMEM = TR_MULTI_LOWPOWER; -const pm_char STR_MODULE_NO_SERIAL_MODE[] PROGMEM = TR_MODULE_NO_SERIAL_MODE; -const pm_char STR_MODULE_NO_INPUT[] PROGMEM = TR_MODULE_NO_INPUT; -const pm_char STR_MODULE_WAITFORBIND[] PROGMEM = TR_MODULE_WAITFORBIND; -const pm_char STR_MODULE_NO_TELEMETRY[] PROGMEM = TR_MODULE_NO_TELEMETRY; -const pm_char STR_MODULE_BINDING[] PROGMEM = TR_MODULE_BINDING; -const pm_char STR_PROTOCOL_INVALID[] PROGMEM = TR_PROTOCOL_INVALID; -const pm_char STR_MODULE_STATUS[] PROGMEM = TR_MODULE_STATUS; -const pm_char STR_MODULE_SYNC[] PROGMEM = TR_MODULE_SYNC; -const pm_char STR_MULTI_SERVOFREQ[] PROGMEM = TR_MULTI_SERVOFREQ; +const pm_char STR_MULTI_CUSTOM[] = TR_MULTI_CUSTOM; +const pm_char STR_MULTI_RFTUNE[] = TR_MULTI_RFTUNE; +const pm_char STR_MULTI_TELEMETRY[] = TR_MULTI_TELEMETRY; +const pm_char STR_MULTI_VIDFREQ[] = TR_MULTI_VIDFREQ; +const pm_char STR_MULTI_OPTION[] = TR_MULTI_OPTION; +const pm_char STR_MULTI_AUTOBIND[] = TR_MULTI_AUTOBIND; +const pm_char STR_MULTI_DSM_AUTODTECT[] = TR_MULTI_DSM_AUTODTECT; +const pm_char STR_MULTI_LOWPOWER[] = TR_MULTI_LOWPOWER; +const pm_char STR_MODULE_NO_SERIAL_MODE[] = TR_MODULE_NO_SERIAL_MODE; +const pm_char STR_MODULE_NO_INPUT[] = TR_MODULE_NO_INPUT; +const pm_char STR_MODULE_WAITFORBIND[] = TR_MODULE_WAITFORBIND; +const pm_char STR_MODULE_NO_TELEMETRY[] = TR_MODULE_NO_TELEMETRY; +const pm_char STR_MODULE_BINDING[] = TR_MODULE_BINDING; +const pm_char STR_PROTOCOL_INVALID[] = TR_PROTOCOL_INVALID; +const pm_char STR_MODULE_STATUS[] = TR_MODULE_STATUS; +const pm_char STR_MODULE_SYNC[] = TR_MODULE_SYNC; +const pm_char STR_MULTI_SERVOFREQ[] = TR_MULTI_SERVOFREQ; #if LCD_W < 212 -const pm_char STR_SUBTYPE[] PROGMEM = TR_SUBTYPE; +const pm_char STR_SUBTYPE[] = TR_SUBTYPE; #endif #endif -const pm_char STR_RESET_BTN[] PROGMEM = TR_RESET_BTN; +const pm_char STR_RESET_BTN[] = TR_RESET_BTN; #if defined(SDCARD) -const pm_char STR_BACKUP_MODEL[] PROGMEM = TR_BACKUP_MODEL; -const pm_char STR_RESTORE_MODEL[] PROGMEM = TR_RESTORE_MODEL; -const pm_char STR_DELETE_ERROR[] PROGMEM = TR_DELETE_ERROR; -const pm_char STR_SDCARD_ERROR[] PROGMEM = TR_SDCARD_ERROR; -const pm_char STR_NO_SDCARD[] PROGMEM = TR_NO_SDCARD; -const pm_char STR_SDCARD_FULL[] PROGMEM = TR_SDCARD_FULL; -const pm_char STR_INCOMPATIBLE[] PROGMEM = TR_INCOMPATIBLE; -const pm_char STR_LOGS_PATH[] PROGMEM = LOGS_PATH; -const pm_char STR_LOGS_EXT[] PROGMEM = LOGS_EXT; -const pm_char STR_MODELS_PATH[] PROGMEM = MODELS_PATH; -const pm_char STR_MODELS_EXT[] PROGMEM = MODELS_EXT; +const pm_char STR_BACKUP_MODEL[] = TR_BACKUP_MODEL; +const pm_char STR_RESTORE_MODEL[] = TR_RESTORE_MODEL; +const pm_char STR_DELETE_ERROR[] = TR_DELETE_ERROR; +const pm_char STR_SDCARD_ERROR[] = TR_SDCARD_ERROR; +const pm_char STR_NO_SDCARD[] = TR_NO_SDCARD; +const pm_char STR_SDCARD_FULL[] = TR_SDCARD_FULL; +const pm_char STR_INCOMPATIBLE[] = TR_INCOMPATIBLE; +const pm_char STR_LOGS_PATH[] = LOGS_PATH; +const pm_char STR_LOGS_EXT[] = LOGS_EXT; +const pm_char STR_MODELS_PATH[] = MODELS_PATH; +const pm_char STR_MODELS_EXT[] = MODELS_EXT; #endif -const pm_char STR_CAT_NOT_EMPTY[] PROGMEM = TR_CAT_NOT_EMPTY; -const pm_char STR_WARNING[] PROGMEM = TR_WARNING; -const pm_char STR_THROTTLEWARN[] PROGMEM = TR_THROTTLEWARN; -const pm_char STR_ALARMSWARN[] PROGMEM = TR_ALARMSWARN; -const pm_char STR_SWITCHWARN[] PROGMEM = TR_SWITCHWARN; -const pm_char STR_FAILSAFEWARN[] PROGMEM = TR_FAILSAFEWARN; +const pm_char STR_CAT_NOT_EMPTY[] = TR_CAT_NOT_EMPTY; +const pm_char STR_WARNING[] = TR_WARNING; +const pm_char STR_THROTTLEWARN[] = TR_THROTTLEWARN; +const pm_char STR_ALARMSWARN[] = TR_ALARMSWARN; +const pm_char STR_SWITCHWARN[] = TR_SWITCHWARN; +const pm_char STR_FAILSAFEWARN[] = TR_FAILSAFEWARN; #if defined(NIGHTLY_BUILD_WARNING) -const pm_char STR_NIGHTLY_WARNING[] PROGMEM = TR_NIGHTLY_WARNING; -const pm_char STR_NIGHTLY_NOTSAFE[] PROGMEM = TR_NIGHTLY_NOTSAFE; +const pm_char STR_NIGHTLY_WARNING[] = TR_NIGHTLY_WARNING; +const pm_char STR_NIGHTLY_NOTSAFE[] = TR_NIGHTLY_NOTSAFE; #endif -const pm_char STR_WRONG_SDCARDVERSION[] PROGMEM = TR_WRONG_SDCARDVERSION; -const pm_char STR_WRONG_PCBREV[] PROGMEM = TR_WRONG_PCBREV; -const pm_char STR_EMERGENCY_MODE[] PROGMEM = TR_EMERGENCY_MODE; -const pm_char STR_PCBREV_ERROR[] PROGMEM = TR_PCBREV_ERROR; -const pm_char STR_NO_FAILSAFE[] PROGMEM = TR_NO_FAILSAFE; -const pm_char STR_KEYSTUCK[] PROGMEM = TR_KEYSTUCK; +const pm_char STR_WRONG_SDCARDVERSION[] = TR_WRONG_SDCARDVERSION; +const pm_char STR_WRONG_PCBREV[] = TR_WRONG_PCBREV; +const pm_char STR_EMERGENCY_MODE[] = TR_EMERGENCY_MODE; +const pm_char STR_PCBREV_ERROR[] = TR_PCBREV_ERROR; +const pm_char STR_NO_FAILSAFE[] = TR_NO_FAILSAFE; +const pm_char STR_KEYSTUCK[] = TR_KEYSTUCK; -const pm_char STR_SPEAKER_VOLUME[] PROGMEM = TR_SPEAKER_VOLUME; -const pm_char STR_LCD[] PROGMEM = TR_LCD; -const pm_char STR_BRIGHTNESS[] PROGMEM = TR_BRIGHTNESS; -const pm_char STR_CPU_TEMP[] PROGMEM = TR_CPU_TEMP; -const pm_char STR_CPU_CURRENT[] PROGMEM = TR_CPU_CURRENT; -const pm_char STR_CPU_MAH[] PROGMEM = TR_CPU_MAH; -const pm_char STR_COPROC[] PROGMEM = TR_COPROC; -const pm_char STR_COPROC_TEMP[] PROGMEM = TR_COPROC_TEMP; -const pm_char STR_TEMPWARNING[] PROGMEM = TR_TEMPWARNING; -const pm_char STR_CAPAWARNING[] PROGMEM = TR_CAPAWARNING; -const pm_char STR_FUNC[] PROGMEM = TR_FUNC; -const pm_char STR_V1[] PROGMEM = TR_V1; -const pm_char STR_V2[] PROGMEM = TR_V2; -const pm_char STR_DURATION[] PROGMEM = TR_DURATION; -const pm_char STR_DELAY[] PROGMEM = TR_DELAY; -const pm_char STR_SD_CARD[] PROGMEM = TR_SD_CARD; -const pm_char STR_SDHC_CARD[] PROGMEM = TR_SDHC_CARD; -const pm_char STR_NO_SOUNDS_ON_SD[] PROGMEM = TR_NO_SOUNDS_ON_SD; -const pm_char STR_NO_MODELS_ON_SD[] PROGMEM = TR_NO_MODELS_ON_SD; -const pm_char STR_NO_BITMAPS_ON_SD[] PROGMEM = TR_NO_BITMAPS_ON_SD; -const pm_char STR_NO_SCRIPTS_ON_SD[] PROGMEM = TR_NO_SCRIPTS_ON_SD; -const pm_char STR_SCRIPT_SYNTAX_ERROR[] PROGMEM = TR_SCRIPT_SYNTAX_ERROR; -const pm_char STR_SCRIPT_PANIC[] PROGMEM = TR_SCRIPT_PANIC; -const pm_char STR_SCRIPT_KILLED[] PROGMEM = TR_SCRIPT_KILLED; -const pm_char STR_SCRIPT_ERROR[] PROGMEM = TR_SCRIPT_ERROR; -const pm_char STR_PLAY_FILE[] PROGMEM = TR_PLAY_FILE; -const pm_char STR_ASSIGN_BITMAP[] PROGMEM = TR_ASSIGN_BITMAP; +const pm_char STR_SPEAKER_VOLUME[] = TR_SPEAKER_VOLUME; +const pm_char STR_LCD[] = TR_LCD; +const pm_char STR_BRIGHTNESS[] = TR_BRIGHTNESS; +const pm_char STR_CPU_TEMP[] = TR_CPU_TEMP; +const pm_char STR_CPU_CURRENT[] = TR_CPU_CURRENT; +const pm_char STR_CPU_MAH[] = TR_CPU_MAH; +const pm_char STR_COPROC[] = TR_COPROC; +const pm_char STR_COPROC_TEMP[] = TR_COPROC_TEMP; +const pm_char STR_TEMPWARNING[] = TR_TEMPWARNING; +const pm_char STR_CAPAWARNING[] = TR_CAPAWARNING; +const pm_char STR_FUNC[] = TR_FUNC; +const pm_char STR_V1[] = TR_V1; +const pm_char STR_V2[] = TR_V2; +const pm_char STR_DURATION[] = TR_DURATION; +const pm_char STR_DELAY[] = TR_DELAY; +const pm_char STR_SD_CARD[] = TR_SD_CARD; +const pm_char STR_SDHC_CARD[] = TR_SDHC_CARD; +const pm_char STR_NO_SOUNDS_ON_SD[] = TR_NO_SOUNDS_ON_SD; +const pm_char STR_NO_MODELS_ON_SD[] = TR_NO_MODELS_ON_SD; +const pm_char STR_NO_BITMAPS_ON_SD[] = TR_NO_BITMAPS_ON_SD; +const pm_char STR_NO_SCRIPTS_ON_SD[] = TR_NO_SCRIPTS_ON_SD; +const pm_char STR_SCRIPT_SYNTAX_ERROR[] = TR_SCRIPT_SYNTAX_ERROR; +const pm_char STR_SCRIPT_PANIC[] = TR_SCRIPT_PANIC; +const pm_char STR_SCRIPT_KILLED[] = TR_SCRIPT_KILLED; +const pm_char STR_SCRIPT_ERROR[] = TR_SCRIPT_ERROR; +const pm_char STR_PLAY_FILE[] = TR_PLAY_FILE; +const pm_char STR_ASSIGN_BITMAP[] = TR_ASSIGN_BITMAP; #if defined(PCBHORUS) -const pm_char STR_ASSIGN_SPLASH[] PROGMEM = TR_ASSIGN_SPLASH; +const pm_char STR_ASSIGN_SPLASH[] = TR_ASSIGN_SPLASH; #endif -const pm_char STR_EXECUTE_FILE[] PROGMEM = TR_EXECUTE_FILE; -const pm_char STR_DELETE_FILE[] PROGMEM = TR_DELETE_FILE; -const pm_char STR_COPY_FILE[] PROGMEM = TR_COPY_FILE; -const pm_char STR_RENAME_FILE[] PROGMEM = TR_RENAME_FILE; -const pm_char STR_SD_INFO[] PROGMEM = TR_SD_INFO; -const pm_char STR_SD_FORMAT[] PROGMEM = TR_SD_FORMAT; -const pm_char STR_REMOVED[] PROGMEM = TR_REMOVED; -const pm_char STR_NA[] PROGMEM = TR_NA; -const pm_char STR_HARDWARE[] PROGMEM = TR_HARDWARE; -const pm_char STR_FORMATTING[] PROGMEM = TR_FORMATTING; -const pm_char STR_TEMP_CALIB[] PROGMEM = TR_TEMP_CALIB; -const pm_char STR_TIME[] PROGMEM = TR_TIME; -const pm_char STR_MAXBAUDRATE[] PROGMEM = TR_MAXBAUDRATE; -const pm_char STR_BAUDRATE[] PROGMEM = TR_BAUDRATE; -const pm_char STR_SD_INFO_TITLE[] PROGMEM = TR_SD_INFO_TITLE; -const pm_char STR_SD_TYPE[] PROGMEM = TR_SD_TYPE; -const pm_char STR_SD_SPEED[] PROGMEM = TR_SD_SPEED; -const pm_char STR_SD_SECTORS[] PROGMEM = TR_SD_SECTORS; -const pm_char STR_SD_SIZE[] PROGMEM = TR_SD_SIZE; -const pm_char STR_TYPE[] PROGMEM = TR_TYPE; -const pm_char STR_GLOBAL_VARS[] PROGMEM = TR_GLOBAL_VARS; -const pm_char STR_GVARS[] PROGMEM = TR_GVARS; -const pm_char STR_GLOBAL_VAR[] PROGMEM = TR_GLOBAL_VAR; -const pm_char STR_OWN[] PROGMEM = TR_OWN; -const pm_char STR_ROTARY_ENCODER[] PROGMEM = TR_ROTARY_ENCODER; -const pm_char STR_DATE[] PROGMEM = TR_DATE; -const pm_char STR_CHANNELS_MONITOR[] PROGMEM = TR_CHANNELS_MONITOR; -const pm_char STR_MIXERS_MONITOR[] PROGMEM = TR_MIXERS_MONITOR; -const pm_char STR_PATH_TOO_LONG[] PROGMEM = TR_PATH_TOO_LONG; -const pm_char STR_VIEW_TEXT[] PROGMEM = TR_VIEW_TEXT; -const pm_char STR_FLASH_BOOTLOADER[] PROGMEM = TR_FLASH_BOOTLOADER; -const pm_char STR_FLASH_INTERNAL_MODULE[] PROGMEM = TR_FLASH_INTERNAL_MODULE; -const pm_char STR_FLASH_EXTERNAL_MODULE[] PROGMEM = TR_FLASH_EXTERNAL_MODULE; -const pm_char STR_FIRMWARE_UPDATE_ERROR[] PROGMEM = TR_FIRMWARE_UPDATE_ERROR; -const pm_char STR_FLASH_EXTERNAL_DEVICE[] PROGMEM = TR_FLASH_EXTERNAL_DEVICE; -const pm_char STR_WRITING[] PROGMEM = TR_WRITING; -const pm_char STR_CONFIRM_FORMAT[] PROGMEM = TR_CONFIRM_FORMAT; -const pm_char STR_EEBACKUP[] PROGMEM = TR_EEBACKUP; -const pm_char STR_FACTORYRESET[] PROGMEM = TR_FACTORYRESET; -const pm_char STR_CONFIRMRESET[] PROGMEM = TR_CONFIRMRESET; -const pm_char STR_TOO_MANY_LUA_SCRIPTS[] PROGMEM = TR_TO_MANY_LUA_SCRIPTS; -const pm_char STR_BLCOLOR[] PROGMEM = TR_BLCOLOR; +const pm_char STR_EXECUTE_FILE[] = TR_EXECUTE_FILE; +const pm_char STR_DELETE_FILE[] = TR_DELETE_FILE; +const pm_char STR_COPY_FILE[] = TR_COPY_FILE; +const pm_char STR_RENAME_FILE[] = TR_RENAME_FILE; +const pm_char STR_SD_INFO[] = TR_SD_INFO; +const pm_char STR_SD_FORMAT[] = TR_SD_FORMAT; +const pm_char STR_REMOVED[] = TR_REMOVED; +const pm_char STR_NA[] = TR_NA; +const pm_char STR_HARDWARE[] = TR_HARDWARE; +const pm_char STR_FORMATTING[] = TR_FORMATTING; +const pm_char STR_TEMP_CALIB[] = TR_TEMP_CALIB; +const pm_char STR_TIME[] = TR_TIME; +const pm_char STR_MAXBAUDRATE[] = TR_MAXBAUDRATE; +const pm_char STR_BAUDRATE[] = TR_BAUDRATE; +const pm_char STR_SD_INFO_TITLE[] = TR_SD_INFO_TITLE; +const pm_char STR_SD_TYPE[] = TR_SD_TYPE; +const pm_char STR_SD_SPEED[] = TR_SD_SPEED; +const pm_char STR_SD_SECTORS[] = TR_SD_SECTORS; +const pm_char STR_SD_SIZE[] = TR_SD_SIZE; +const pm_char STR_TYPE[] = TR_TYPE; +const pm_char STR_GLOBAL_VARS[] = TR_GLOBAL_VARS; +const pm_char STR_GVARS[] = TR_GVARS; +const pm_char STR_GLOBAL_VAR[] = TR_GLOBAL_VAR; +const pm_char STR_OWN[] = TR_OWN; +const pm_char STR_ROTARY_ENCODER[] = TR_ROTARY_ENCODER; +const pm_char STR_DATE[] = TR_DATE; +const pm_char STR_CHANNELS_MONITOR[] = TR_CHANNELS_MONITOR; +const pm_char STR_MIXERS_MONITOR[] = TR_MIXERS_MONITOR; +const pm_char STR_PATH_TOO_LONG[] = TR_PATH_TOO_LONG; +const pm_char STR_VIEW_TEXT[] = TR_VIEW_TEXT; +const pm_char STR_FLASH_BOOTLOADER[] = TR_FLASH_BOOTLOADER; +const pm_char STR_FLASH_INTERNAL_MODULE[] = TR_FLASH_INTERNAL_MODULE; +const pm_char STR_FLASH_EXTERNAL_MODULE[] = TR_FLASH_EXTERNAL_MODULE; +const pm_char STR_FIRMWARE_UPDATE_ERROR[] = TR_FIRMWARE_UPDATE_ERROR; +const pm_char STR_FLASH_EXTERNAL_DEVICE[] = TR_FLASH_EXTERNAL_DEVICE; +const pm_char STR_WRITING[] = TR_WRITING; +const pm_char STR_CONFIRM_FORMAT[] = TR_CONFIRM_FORMAT; +const pm_char STR_EEBACKUP[] = TR_EEBACKUP; +const pm_char STR_FACTORYRESET[] = TR_FACTORYRESET; +const pm_char STR_CONFIRMRESET[] = TR_CONFIRMRESET; +const pm_char STR_TOO_MANY_LUA_SCRIPTS[] = TR_TO_MANY_LUA_SCRIPTS; +const pm_char STR_BLCOLOR[] = TR_BLCOLOR; - const pm_char STR_MODELNAME[] PROGMEM = TR_MODELNAME; - const pm_char STR_PHASENAME[] PROGMEM = TR_PHASENAME; - const pm_char STR_MIXNAME[] PROGMEM = TR_MIXNAME; - const pm_char STR_INPUTNAME[] PROGMEM = TR_INPUTNAME; - const pm_char STR_EXPONAME[] PROGMEM = TR_EXPONAME; + const pm_char STR_MODELNAME[] = TR_MODELNAME; + const pm_char STR_PHASENAME[] = TR_PHASENAME; + const pm_char STR_MIXNAME[] = TR_MIXNAME; + const pm_char STR_INPUTNAME[] = TR_INPUTNAME; + const pm_char STR_EXPONAME[] = TR_EXPONAME; #if LCD_W >= 212 const char * const STR_PHASES_HEADERS[] = TR_PHASES_HEADERS; @@ -574,181 +574,181 @@ const pm_char STR_BLCOLOR[] PROGMEM = TR_BLCOLOR; const char * const STR_GVAR_HEADERS[] = TR_GVAR_HEADERS; #endif - const pm_char STR_TRAINER[] PROGMEM = TR_TRAINER; - const pm_char STR_MODULE_BIND[] PROGMEM = TR_MODULE_BIND; - const pm_char STR_BINDING_1_8_TELEM_ON[] PROGMEM = TR_BINDING_CH1_8_TELEM_ON; - const pm_char STR_BINDING_1_8_TELEM_OFF[] PROGMEM = TR_BINDING_CH1_8_TELEM_OFF; - const pm_char STR_BINDING_9_16_TELEM_ON[] PROGMEM = TR_BINDING_CH9_16_TELEM_ON; - const pm_char STR_BINDING_9_16_TELEM_OFF[] PROGMEM = TR_BINDING_CH9_16_TELEM_OFF; - const pm_char STR_CHANNELRANGE[] PROGMEM = TR_CHANNELRANGE; - const pm_char STR_ANTENNASELECTION[] PROGMEM = TR_ANTENNASELECTION; - const pm_char STR_ANTENNACONFIRM1[] PROGMEM = TR_ANTENNACONFIRM1; - const pm_char STR_ANTENNACONFIRM2[] PROGMEM = TR_ANTENNACONFIRM2; - const pm_char STR_SET[] PROGMEM = TR_SET; - const pm_char STR_PREFLIGHT[] PROGMEM = TR_PREFLIGHT; - const pm_char STR_CHECKLIST[] PROGMEM = TR_CHECKLIST; - const pm_char STR_VIEW_NOTES[] PROGMEM = TR_VIEW_NOTES; - const pm_char STR_MODEL_SELECT[] PROGMEM = TR_MODEL_SELECT; - const pm_char STR_RESET_SUBMENU[] PROGMEM = TR_RESET_SUBMENU; - const pm_char STR_LOWALARM[] PROGMEM = TR_LOWALARM; - const pm_char STR_CRITICALALARM[] PROGMEM = TR_CRITICALALARM; - const pm_char STR_RSSIALARM_WARN[] PROGMEM = TR_RSSIALARM_WARN; - const pm_char STR_NO_RSSIALARM[] PROGMEM = TR_NO_RSSIALARM; - const pm_char STR_DISABLE_ALARM[] PROGMEM = TR_DISABLE_ALARM; - const pm_char STR_TELEMETRY_TYPE[] PROGMEM = TR_TELEMETRY_TYPE; - const pm_char STR_TELEMETRY_SENSORS[] PROGMEM = TR_TELEMETRY_SENSORS; - const pm_char STR_VALUE[] PROGMEM = TR_VALUE; - const pm_char STR_TOPLCDTIMER[] PROGMEM = TR_TOPLCDTIMER; - const pm_char STR_UNIT[] PROGMEM = TR_UNIT; - const pm_char STR_TELEMETRY_NEWSENSOR[] PROGMEM = TR_TELEMETRY_NEWSENSOR; - const pm_char STR_ID[] PROGMEM = TR_ID; - const pm_char STR_PRECISION[] PROGMEM = TR_PRECISION; - const pm_char STR_RATIO[] PROGMEM = TR_RATIO; - const pm_char STR_FORMULA[] PROGMEM = TR_FORMULA; - const pm_char STR_CELLINDEX[] PROGMEM = TR_CELLINDEX; - const pm_char STR_LOGS[] PROGMEM = TR_LOGS; - const pm_char STR_OPTIONS[] PROGMEM = TR_OPTIONS; - const pm_char STR_ALTSENSOR[] PROGMEM = TR_ALTSENSOR; - const pm_char STR_CELLSENSOR[] PROGMEM = TR_CELLSENSOR; - const pm_char STR_GPSSENSOR[] PROGMEM = TR_GPSSENSOR; - const pm_char STR_CURRENTSENSOR[] PROGMEM = TR_CURRENTSENSOR; - const pm_char STR_AUTOOFFSET[] PROGMEM = TR_AUTOOFFSET; - const pm_char STR_ONLYPOSITIVE[] PROGMEM = TR_ONLYPOSITIVE; - const pm_char STR_FILTER[] PROGMEM = TR_FILTER; - const pm_char STR_TELEMETRYFULL[] PROGMEM = TR_TELEMETRYFULL; - const pm_char STR_SERVOS_OK[] PROGMEM = TR_SERVOS_OK; - const pm_char STR_SERVOS_KO[] PROGMEM = TR_SERVOS_KO; - const pm_char STR_INVERTED_SERIAL[] PROGMEM = TR_INVERTED_SERIAL; - const pm_char STR_IGNORE_INSTANCE[] PROGMEM = TR_IGNORE_INSTANCE; - const pm_char STR_DISCOVER_SENSORS[] PROGMEM = TR_DISCOVER_SENSORS; - const pm_char STR_STOP_DISCOVER_SENSORS[] PROGMEM = TR_STOP_DISCOVER_SENSORS; - const pm_char STR_DELETE_ALL_SENSORS[] PROGMEM = TR_DELETE_ALL_SENSORS; - const pm_char STR_CONFIRMDELETE[] PROGMEM = TR_CONFIRMDELETE; - const pm_char STR_SELECT_WIDGET[] PROGMEM = TR_SELECT_WIDGET; - const pm_char STR_REMOVE_WIDGET[] PROGMEM = TR_REMOVE_WIDGET; - const pm_char STR_WIDGET_SETTINGS[] PROGMEM = TR_WIDGET_SETTINGS; - const pm_char STR_REMOVE_SCREEN[] PROGMEM = TR_REMOVE_SCREEN; - const pm_char STR_SETUP_WIDGETS[] PROGMEM = TR_SETUP_WIDGETS; - const pm_char STR_USER_INTERFACE[] PROGMEM = TR_USER_INTERFACE; - const pm_char STR_THEME[] PROGMEM = TR_THEME; - const pm_char STR_SETUP[] PROGMEM = TR_SETUP; - const pm_char STR_MAINVIEWX[] PROGMEM = TR_MAINVIEWX; - const pm_char STR_LAYOUT[] PROGMEM = TR_LAYOUT; - const pm_char STR_ADDMAINVIEW[] PROGMEM = TR_ADDMAINVIEW; - const pm_char STR_BACKGROUND_COLOR[] PROGMEM = TR_BACKGROUND_COLOR; - const pm_char STR_MAIN_COLOR[] PROGMEM = TR_MAIN_COLOR; - const pm_char STR_TEXT_VIEWER[] PROGMEM = TR_TEXT_VIEWER; - const pm_char STR_MULTI_RFPOWER[] PROGMEM = TR_MULTI_RFPOWER; + const pm_char STR_TRAINER[] = TR_TRAINER; + const pm_char STR_MODULE_BIND[] = TR_MODULE_BIND; + const pm_char STR_BINDING_1_8_TELEM_ON[] = TR_BINDING_CH1_8_TELEM_ON; + const pm_char STR_BINDING_1_8_TELEM_OFF[] = TR_BINDING_CH1_8_TELEM_OFF; + const pm_char STR_BINDING_9_16_TELEM_ON[] = TR_BINDING_CH9_16_TELEM_ON; + const pm_char STR_BINDING_9_16_TELEM_OFF[] = TR_BINDING_CH9_16_TELEM_OFF; + const pm_char STR_CHANNELRANGE[] = TR_CHANNELRANGE; + const pm_char STR_ANTENNASELECTION[] = TR_ANTENNASELECTION; + const pm_char STR_ANTENNACONFIRM1[] = TR_ANTENNACONFIRM1; + const pm_char STR_ANTENNACONFIRM2[] = TR_ANTENNACONFIRM2; + const pm_char STR_SET[] = TR_SET; + const pm_char STR_PREFLIGHT[] = TR_PREFLIGHT; + const pm_char STR_CHECKLIST[] = TR_CHECKLIST; + const pm_char STR_VIEW_NOTES[] = TR_VIEW_NOTES; + const pm_char STR_MODEL_SELECT[] = TR_MODEL_SELECT; + const pm_char STR_RESET_SUBMENU[] = TR_RESET_SUBMENU; + const pm_char STR_LOWALARM[] = TR_LOWALARM; + const pm_char STR_CRITICALALARM[] = TR_CRITICALALARM; + const pm_char STR_RSSIALARM_WARN[] = TR_RSSIALARM_WARN; + const pm_char STR_NO_RSSIALARM[] = TR_NO_RSSIALARM; + const pm_char STR_DISABLE_ALARM[] = TR_DISABLE_ALARM; + const pm_char STR_TELEMETRY_TYPE[] = TR_TELEMETRY_TYPE; + const pm_char STR_TELEMETRY_SENSORS[] = TR_TELEMETRY_SENSORS; + const pm_char STR_VALUE[] = TR_VALUE; + const pm_char STR_TOPLCDTIMER[] = TR_TOPLCDTIMER; + const pm_char STR_UNIT[] = TR_UNIT; + const pm_char STR_TELEMETRY_NEWSENSOR[] = TR_TELEMETRY_NEWSENSOR; + const pm_char STR_ID[] = TR_ID; + const pm_char STR_PRECISION[] = TR_PRECISION; + const pm_char STR_RATIO[] = TR_RATIO; + const pm_char STR_FORMULA[] = TR_FORMULA; + const pm_char STR_CELLINDEX[] = TR_CELLINDEX; + const pm_char STR_LOGS[] = TR_LOGS; + const pm_char STR_OPTIONS[] = TR_OPTIONS; + const pm_char STR_ALTSENSOR[] = TR_ALTSENSOR; + const pm_char STR_CELLSENSOR[] = TR_CELLSENSOR; + const pm_char STR_GPSSENSOR[] = TR_GPSSENSOR; + const pm_char STR_CURRENTSENSOR[] = TR_CURRENTSENSOR; + const pm_char STR_AUTOOFFSET[] = TR_AUTOOFFSET; + const pm_char STR_ONLYPOSITIVE[] = TR_ONLYPOSITIVE; + const pm_char STR_FILTER[] = TR_FILTER; + const pm_char STR_TELEMETRYFULL[] = TR_TELEMETRYFULL; + const pm_char STR_SERVOS_OK[] = TR_SERVOS_OK; + const pm_char STR_SERVOS_KO[] = TR_SERVOS_KO; + const pm_char STR_INVERTED_SERIAL[] = TR_INVERTED_SERIAL; + const pm_char STR_IGNORE_INSTANCE[] = TR_IGNORE_INSTANCE; + const pm_char STR_DISCOVER_SENSORS[] = TR_DISCOVER_SENSORS; + const pm_char STR_STOP_DISCOVER_SENSORS[] = TR_STOP_DISCOVER_SENSORS; + const pm_char STR_DELETE_ALL_SENSORS[] = TR_DELETE_ALL_SENSORS; + const pm_char STR_CONFIRMDELETE[] = TR_CONFIRMDELETE; + const pm_char STR_SELECT_WIDGET[] = TR_SELECT_WIDGET; + const pm_char STR_REMOVE_WIDGET[] = TR_REMOVE_WIDGET; + const pm_char STR_WIDGET_SETTINGS[] = TR_WIDGET_SETTINGS; + const pm_char STR_REMOVE_SCREEN[] = TR_REMOVE_SCREEN; + const pm_char STR_SETUP_WIDGETS[] = TR_SETUP_WIDGETS; + const pm_char STR_USER_INTERFACE[] = TR_USER_INTERFACE; + const pm_char STR_THEME[] = TR_THEME; + const pm_char STR_SETUP[] = TR_SETUP; + const pm_char STR_MAINVIEWX[] = TR_MAINVIEWX; + const pm_char STR_LAYOUT[] = TR_LAYOUT; + const pm_char STR_ADDMAINVIEW[] = TR_ADDMAINVIEW; + const pm_char STR_BACKGROUND_COLOR[] = TR_BACKGROUND_COLOR; + const pm_char STR_MAIN_COLOR[] = TR_MAIN_COLOR; + const pm_char STR_TEXT_VIEWER[] = TR_TEXT_VIEWER; + const pm_char STR_MULTI_RFPOWER[] = TR_MULTI_RFPOWER; - const pm_char STR_BYTES[] PROGMEM = TR_BYTES; - const pm_char STR_ANTENNAPROBLEM[] PROGMEM = TR_ANTENNAPROBLEM; - const pm_char STR_MODULE[] PROGMEM = TR_MODULE; - const pm_char STR_ENABLE_POPUP[] PROGMEM = TR_ENABLE_POPUP; - const pm_char STR_DISABLE_POPUP[] PROGMEM = TR_DISABLE_POPUP; - const pm_char STR_POPUP[] PROGMEM = TR_POPUP; - const pm_char STR_MIN[] PROGMEM = TR_MIN; - const pm_char STR_MAX[] PROGMEM = TR_MAX; - const pm_char STR_CURVE_PRESET[] PROGMEM = TR_CURVE_PRESET; - const pm_char STR_PRESET[] PROGMEM = TR_PRESET; - const pm_char STR_MIRROR[] PROGMEM = TR_MIRROR; - const pm_char STR_CLEAR[] PROGMEM = TR_CLEAR; - const pm_char STR_RESET[] PROGMEM = TR_RESET; - const pm_char STR_COUNT[] PROGMEM = TR_COUNT; - const pm_char STR_PT[] PROGMEM = TR_PT; - const pm_char STR_PTS[] PROGMEM = TR_PTS; - const pm_char STR_SMOOTH[] PROGMEM = TR_SMOOTH; - const pm_char STR_COPY_STICKS_TO_OFS[] PROGMEM = TR_COPY_STICKS_TO_OFS; - const pm_char STR_COPY_TRIMS_TO_OFS[] PROGMEM = TR_COPY_TRIMS_TO_OFS; - const pm_char STR_INCDEC[] PROGMEM = TR_INCDEC; - const pm_char STR_GLOBALVAR[] PROGMEM = TR_GLOBALVAR; - const pm_char STR_MIXSOURCE[] PROGMEM = TR_MIXSOURCE; - const pm_char STR_CONSTANT[] PROGMEM = TR_CONSTANT; - const pm_char STR_TOP_BAR[] PROGMEM = TR_TOP_BAR; - const pm_char STR_ALTITUDE[] PROGMEM = TR_ALTITUDE; - const pm_char STR_SCALE[] PROGMEM = TR_SCALE; - const pm_char STR_VIEW_CHANNELS[] PROGMEM = TR_VIEW_CHANNELS; - const pm_char STR_UART3MODE[] PROGMEM = TR_UART3MODE; - const pm_char STR_THROTTLE_LABEL[] PROGMEM = TR_THROTTLE_LABEL; - const pm_char STR_SCRIPT[] PROGMEM = TR_SCRIPT; - const pm_char STR_INPUTS[] PROGMEM = TR_INPUTS; - const pm_char STR_OUTPUTS[] PROGMEM = TR_OUTPUTS; - const pm_char STR_MENU_INPUTS[] PROGMEM = TR_MENU_INPUTS; - const pm_char STR_MENU_LUA[] PROGMEM = TR_MENU_LUA; - const pm_char STR_MENU_STICKS[] PROGMEM = TR_MENU_STICKS; - const pm_char STR_MENU_POTS[] PROGMEM = TR_MENU_POTS; - const pm_char STR_MENU_MAX[] PROGMEM = TR_MENU_MAX; - const pm_char STR_MENU_HELI[] PROGMEM = TR_MENU_HELI; - const pm_char STR_MENU_TRIMS[] PROGMEM = TR_MENU_TRIMS; - const pm_char STR_MENU_SWITCHES[] PROGMEM = TR_MENU_SWITCHES; - const pm_char STR_MENU_LOGICAL_SWITCHES[] PROGMEM = TR_MENU_LOGICAL_SWITCHES; - const pm_char STR_MENU_TRAINER[] PROGMEM = TR_MENU_TRAINER; - const pm_char STR_MENU_CHANNELS[] PROGMEM = TR_MENU_CHANNELS; - const pm_char STR_MENU_GVARS[] PROGMEM = TR_MENU_GVARS; - const pm_char STR_MENU_TELEMETRY[] PROGMEM = TR_MENU_TELEMETRY; - const pm_char STR_MENU_DISPLAY[] PROGMEM = TR_MENU_DISPLAY; - const pm_char STR_MENU_OTHER[] PROGMEM = TR_MENU_OTHER; - const pm_char STR_MENU_INVERT[] PROGMEM = TR_MENU_INVERT; - const pm_char STR_JITTER_FILTER[] PROGMEM = TR_JITTER_FILTER; + const pm_char STR_BYTES[] = TR_BYTES; + const pm_char STR_ANTENNAPROBLEM[] = TR_ANTENNAPROBLEM; + const pm_char STR_MODULE[] = TR_MODULE; + const pm_char STR_ENABLE_POPUP[] = TR_ENABLE_POPUP; + const pm_char STR_DISABLE_POPUP[] = TR_DISABLE_POPUP; + const pm_char STR_POPUP[] = TR_POPUP; + const pm_char STR_MIN[] = TR_MIN; + const pm_char STR_MAX[] = TR_MAX; + const pm_char STR_CURVE_PRESET[] = TR_CURVE_PRESET; + const pm_char STR_PRESET[] = TR_PRESET; + const pm_char STR_MIRROR[] = TR_MIRROR; + const pm_char STR_CLEAR[] = TR_CLEAR; + const pm_char STR_RESET[] = TR_RESET; + const pm_char STR_COUNT[] = TR_COUNT; + const pm_char STR_PT[] = TR_PT; + const pm_char STR_PTS[] = TR_PTS; + const pm_char STR_SMOOTH[] = TR_SMOOTH; + const pm_char STR_COPY_STICKS_TO_OFS[] = TR_COPY_STICKS_TO_OFS; + const pm_char STR_COPY_TRIMS_TO_OFS[] = TR_COPY_TRIMS_TO_OFS; + const pm_char STR_INCDEC[] = TR_INCDEC; + const pm_char STR_GLOBALVAR[] = TR_GLOBALVAR; + const pm_char STR_MIXSOURCE[] = TR_MIXSOURCE; + const pm_char STR_CONSTANT[] = TR_CONSTANT; + const pm_char STR_TOP_BAR[] = TR_TOP_BAR; + const pm_char STR_ALTITUDE[] = TR_ALTITUDE; + const pm_char STR_SCALE[] = TR_SCALE; + const pm_char STR_VIEW_CHANNELS[] = TR_VIEW_CHANNELS; + const pm_char STR_UART3MODE[] = TR_UART3MODE; + const pm_char STR_THROTTLE_LABEL[] = TR_THROTTLE_LABEL; + const pm_char STR_SCRIPT[] = TR_SCRIPT; + const pm_char STR_INPUTS[] = TR_INPUTS; + const pm_char STR_OUTPUTS[] = TR_OUTPUTS; + const pm_char STR_MENU_INPUTS[] = TR_MENU_INPUTS; + const pm_char STR_MENU_LUA[] = TR_MENU_LUA; + const pm_char STR_MENU_STICKS[] = TR_MENU_STICKS; + const pm_char STR_MENU_POTS[] = TR_MENU_POTS; + const pm_char STR_MENU_MAX[] = TR_MENU_MAX; + const pm_char STR_MENU_HELI[] = TR_MENU_HELI; + const pm_char STR_MENU_TRIMS[] = TR_MENU_TRIMS; + const pm_char STR_MENU_SWITCHES[] = TR_MENU_SWITCHES; + const pm_char STR_MENU_LOGICAL_SWITCHES[] = TR_MENU_LOGICAL_SWITCHES; + const pm_char STR_MENU_TRAINER[] = TR_MENU_TRAINER; + const pm_char STR_MENU_CHANNELS[] = TR_MENU_CHANNELS; + const pm_char STR_MENU_GVARS[] = TR_MENU_GVARS; + const pm_char STR_MENU_TELEMETRY[] = TR_MENU_TELEMETRY; + const pm_char STR_MENU_DISPLAY[] = TR_MENU_DISPLAY; + const pm_char STR_MENU_OTHER[] = TR_MENU_OTHER; + const pm_char STR_MENU_INVERT[] = TR_MENU_INVERT; + const pm_char STR_JITTER_FILTER[] = TR_JITTER_FILTER; #if MENUS_LOCK == 1 - const pm_char STR_UNLOCKED[] PROGMEM = TR_UNLOCKED; - const pm_char STR_MODS_FORBIDDEN[] PROGMEM = TR_MODS_FORBIDDEN; + const pm_char STR_UNLOCKED[] = TR_UNLOCKED; + const pm_char STR_MODS_FORBIDDEN[] = TR_MODS_FORBIDDEN; #endif #if defined(PCBTARANIS) || defined(DSM2) - const pm_char STR_MODULE_RANGE[] PROGMEM = TR_MODULE_RANGE; + const pm_char STR_MODULE_RANGE[] = TR_MODULE_RANGE; #endif #if defined(BLUETOOTH) - const pm_char STR_BLUETOOTH[] PROGMEM = TR_BLUETOOTH; - const pm_char STR_BLUETOOTH_DISC[] PROGMEM = TR_BLUETOOTH_DISC; - const pm_char STR_BLUETOOTH_INIT[] PROGMEM = TR_BLUETOOTH_INIT; - const pm_char STR_BLUETOOTH_DIST_ADDR[] PROGMEM = TR_BLUETOOTH_DIST_ADDR; - const pm_char STR_BLUETOOTH_LOCAL_ADDR[] PROGMEM = TR_BLUETOOTH_LOCAL_ADDR; - const pm_char STR_BLUETOOTH_PIN_CODE[] PROGMEM = TR_BLUETOOTH_PIN_CODE; + const pm_char STR_BLUETOOTH[] = TR_BLUETOOTH; + const pm_char STR_BLUETOOTH_DISC[] = TR_BLUETOOTH_DISC; + const pm_char STR_BLUETOOTH_INIT[] = TR_BLUETOOTH_INIT; + const pm_char STR_BLUETOOTH_DIST_ADDR[] = TR_BLUETOOTH_DIST_ADDR; + const pm_char STR_BLUETOOTH_LOCAL_ADDR[] = TR_BLUETOOTH_LOCAL_ADDR; + const pm_char STR_BLUETOOTH_PIN_CODE[] = TR_BLUETOOTH_PIN_CODE; #endif - const pm_char STR_ABOUTUS[] PROGMEM = TR_ABOUTUS; - const pm_char STR_ABOUT_OPENTX_1[] PROGMEM = TR_ABOUT_OPENTX_1; - const pm_char STR_ABOUT_OPENTX_2[] PROGMEM = TR_ABOUT_OPENTX_2; - const pm_char STR_ABOUT_OPENTX_3[] PROGMEM = TR_ABOUT_OPENTX_3; - const pm_char STR_ABOUT_OPENTX_4[] PROGMEM = TR_ABOUT_OPENTX_4; - const pm_char STR_ABOUT_OPENTX_5[] PROGMEM = TR_ABOUT_OPENTX_5; + const pm_char STR_ABOUTUS[] = TR_ABOUTUS; + const pm_char STR_ABOUT_OPENTX_1[] = TR_ABOUT_OPENTX_1; + const pm_char STR_ABOUT_OPENTX_2[] = TR_ABOUT_OPENTX_2; + const pm_char STR_ABOUT_OPENTX_3[] = TR_ABOUT_OPENTX_3; + const pm_char STR_ABOUT_OPENTX_4[] = TR_ABOUT_OPENTX_4; + const pm_char STR_ABOUT_OPENTX_5[] = TR_ABOUT_OPENTX_5; - const pm_char STR_ABOUT_BERTRAND_1[] PROGMEM = TR_ABOUT_BERTRAND_1; - const pm_char STR_ABOUT_BERTRAND_2[] PROGMEM = TR_ABOUT_BERTRAND_2; - const pm_char STR_ABOUT_BERTRAND_3[] PROGMEM = TR_ABOUT_BERTRAND_3; + const pm_char STR_ABOUT_BERTRAND_1[] = TR_ABOUT_BERTRAND_1; + const pm_char STR_ABOUT_BERTRAND_2[] = TR_ABOUT_BERTRAND_2; + const pm_char STR_ABOUT_BERTRAND_3[] = TR_ABOUT_BERTRAND_3; - const pm_char STR_ABOUT_MIKE_1[] PROGMEM = TR_ABOUT_MIKE_1; - const pm_char STR_ABOUT_MIKE_2[] PROGMEM = TR_ABOUT_MIKE_2; - const pm_char STR_ABOUT_MIKE_3[] PROGMEM = TR_ABOUT_MIKE_3; - const pm_char STR_ABOUT_MIKE_4[] PROGMEM = TR_ABOUT_MIKE_4; + const pm_char STR_ABOUT_MIKE_1[] = TR_ABOUT_MIKE_1; + const pm_char STR_ABOUT_MIKE_2[] = TR_ABOUT_MIKE_2; + const pm_char STR_ABOUT_MIKE_3[] = TR_ABOUT_MIKE_3; + const pm_char STR_ABOUT_MIKE_4[] = TR_ABOUT_MIKE_4; - const pm_char STR_ABOUT_ROMOLO_1[] PROGMEM = TR_ABOUT_ROMOLO_1; - const pm_char STR_ABOUT_ROMOLO_2[] PROGMEM = TR_ABOUT_ROMOLO_2; - const pm_char STR_ABOUT_ROMOLO_3[] PROGMEM = TR_ABOUT_ROMOLO_3; + const pm_char STR_ABOUT_ROMOLO_1[] = TR_ABOUT_ROMOLO_1; + const pm_char STR_ABOUT_ROMOLO_2[] = TR_ABOUT_ROMOLO_2; + const pm_char STR_ABOUT_ROMOLO_3[] = TR_ABOUT_ROMOLO_3; - const pm_char STR_ABOUT_ANDRE_1[] PROGMEM = TR_ABOUT_ANDRE_1; - const pm_char STR_ABOUT_ANDRE_2[] PROGMEM = TR_ABOUT_ANDRE_2; - const pm_char STR_ABOUT_ANDRE_3[] PROGMEM = TR_ABOUT_ANDRE_3; + const pm_char STR_ABOUT_ANDRE_1[] = TR_ABOUT_ANDRE_1; + const pm_char STR_ABOUT_ANDRE_2[] = TR_ABOUT_ANDRE_2; + const pm_char STR_ABOUT_ANDRE_3[] = TR_ABOUT_ANDRE_3; - const pm_char STR_ABOUT_ROB_1[] PROGMEM = TR_ABOUT_ROB_1; - const pm_char STR_ABOUT_ROB_2[] PROGMEM = TR_ABOUT_ROB_2; + const pm_char STR_ABOUT_ROB_1[] = TR_ABOUT_ROB_1; + const pm_char STR_ABOUT_ROB_2[] = TR_ABOUT_ROB_2; - const pm_char STR_ABOUT_MARTIN_1[] PROGMEM = TR_ABOUT_MARTIN_1; - const pm_char STR_ABOUT_MARTIN_2[] PROGMEM = TR_ABOUT_MARTIN_2; + const pm_char STR_ABOUT_MARTIN_1[] = TR_ABOUT_MARTIN_1; + const pm_char STR_ABOUT_MARTIN_2[] = TR_ABOUT_MARTIN_2; - const pm_char STR_ABOUT_KJELL_1[] PROGMEM = TR_ABOUT_KJELL_1; - const pm_char STR_ABOUT_KJELL_2[] PROGMEM = TR_ABOUT_KJELL_2; - const pm_char STR_ABOUT_KJELL_3[] PROGMEM = TR_ABOUT_KJELL_3; - const pm_char STR_ABOUT_KJELL_4[] PROGMEM = TR_ABOUT_KJELL_4; + const pm_char STR_ABOUT_KJELL_1[] = TR_ABOUT_KJELL_1; + const pm_char STR_ABOUT_KJELL_2[] = TR_ABOUT_KJELL_2; + const pm_char STR_ABOUT_KJELL_3[] = TR_ABOUT_KJELL_3; + const pm_char STR_ABOUT_KJELL_4[] = TR_ABOUT_KJELL_4; - const pm_char STR_ABOUT_HARDWARE_1[] PROGMEM = TR_ABOUT_HARDWARE_1; - const pm_char STR_ABOUT_HARDWARE_2[] PROGMEM = TR_ABOUT_HARDWARE_2; - const pm_char STR_ABOUT_HARDWARE_3[] PROGMEM = TR_ABOUT_HARDWARE_3; + const pm_char STR_ABOUT_HARDWARE_1[] = TR_ABOUT_HARDWARE_1; + const pm_char STR_ABOUT_HARDWARE_2[] = TR_ABOUT_HARDWARE_2; + const pm_char STR_ABOUT_HARDWARE_3[] = TR_ABOUT_HARDWARE_3; - const pm_char STR_ABOUT_PARENTS_1[] PROGMEM = TR_ABOUT_PARENTS_1; - const pm_char STR_ABOUT_PARENTS_2[] PROGMEM = TR_ABOUT_PARENTS_2; - const pm_char STR_ABOUT_PARENTS_3[] PROGMEM = TR_ABOUT_PARENTS_3; - const pm_char STR_ABOUT_PARENTS_4[] PROGMEM = TR_ABOUT_PARENTS_4; + const pm_char STR_ABOUT_PARENTS_1[] = TR_ABOUT_PARENTS_1; + const pm_char STR_ABOUT_PARENTS_2[] = TR_ABOUT_PARENTS_2; + const pm_char STR_ABOUT_PARENTS_3[] = TR_ABOUT_PARENTS_3; + const pm_char STR_ABOUT_PARENTS_4[] = TR_ABOUT_PARENTS_4; diff --git a/radio/src/translations.h b/radio/src/translations.h index ca629f870..98d9bc7e9 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -856,7 +856,7 @@ extern const pm_char STR_BLCOLOR[]; extern const pm_char STR_TELEMETRY_SENSORS[]; extern const pm_char STR_VALUE[]; extern const pm_char STR_TOPLCDTIMER[]; - extern const pm_char STR_UNIT[] PROGMEM; + extern const pm_char STR_UNIT[] ; extern const pm_char STR_TELEMETRY_NEWSENSOR[]; extern const pm_char STR_ID[]; extern const pm_char STR_PRECISION[]; diff --git a/radio/util/addtr.py b/radio/util/addtr.py index 77b220c40..af5310be3 100755 --- a/radio/util/addtr.py +++ b/radio/util/addtr.py @@ -31,7 +31,7 @@ def modifyDeclaration(constant, after): def modifyDefinition(constant, after): - newline = "const pm_char S" + constant + "[] PROGMEM = " + constant + ";" + newline = "const pm_char S" + constant + "[] = " + constant + ";" filename = "translations.cpp" addLine(filename, newline, after + "[] ") diff --git a/radio/util/parse.py b/radio/util/parse.py index d4ea45f69..b267fe3de 100755 --- a/radio/util/parse.py +++ b/radio/util/parse.py @@ -15,7 +15,7 @@ cw = open(filename + ".stringsc", "w") replacements = {} for line in fr.readlines(): - pos_pstr = line.find("PSTR(\"") + pos_pstr = line.find("\"" MENU = False if pos_pstr < 0: pos_pstr = line.find("MENU(\"") @@ -53,10 +53,10 @@ for line in fr.readlines(): replacements[str_rep] = pstr print(glob_str, "=>", pstr, str_rep) ew.write("#define " + str_rep[1:] + " " * (17 - len(str_rep)) + '"%s"\n' % pstr) - hw.write("extern const PROGMEM char %s[];\n" % str_rep) + hw.write("extern const char %s[];\n" % str_rep) cw.write("const prog_char APM %s[] = %s;\n" % (str_rep, str_rep[1:])) - pos_pstr = line.find("PSTR(\"") + pos_pstr = line.find("\"" fw.write(line)