chore(radio): remove EEPROM macros and related code (#5461)

This commit is contained in:
philmoz
2024-08-22 10:32:16 +10:00
committed by GitHub
parent 8cfa5b4846
commit e0ec49d84e
83 changed files with 27 additions and 3177 deletions
+1 -16
View File
@@ -73,11 +73,6 @@ set(RADIO_BIN_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
configure_file(stamp.h.in stamp.h @ONLY)
set(EEPROM_VARIANT 0)
set(GVARS_VARIANT 1)
set(FRSKY_VARIANT 2)
set(3POS_VARIANT 4)
if(PCB STREQUAL X12S OR PCB STREQUAL X10)
include(targets/horus/CMakeLists.txt)
elseif(PCB STREQUAL NV14)
@@ -151,7 +146,6 @@ include(gui/CMakeLists.txt)
set(SRC ${SRC} storage/storage_common.cpp)
set(SRC ${SRC} storage/sdcard_common.cpp)
set(SRC ${SRC} storage/sdcard_yaml.cpp)
add_definitions(-DSDCARD_YAML)
include(storage/yaml/CMakeLists.txt)
if(STORAGE_MODELSLIST)
set(SRC ${SRC} storage/modelslist.cpp)
@@ -197,7 +191,6 @@ endif()
if(GVARS)
add_definitions(-DGVARS)
set(SRC ${SRC} gvars.cpp)
math(EXPR EEPROM_VARIANT ${EEPROM_VARIANT}+${GVARS_VARIANT})
endif()
if(FAI STREQUAL YES)
@@ -242,11 +235,7 @@ if(SIMU_DISKIO)
add_definitions(-DSIMU_DISKIO)
endif()
if(SDCARD)
add_definitions(-DSDCARD)
set(SRC ${SRC} sdcard.cpp rtc.cpp logs.cpp lib_file.cpp)
set(FIRMWARE_SRC ${FIRMWARE_SRC})
endif()
set(SRC ${SRC} sdcard.cpp rtc.cpp logs.cpp lib_file.cpp)
if(BLUETOOTH)
add_definitions(-DBLUETOOTH)
@@ -320,10 +309,6 @@ if(IMU_LSM6DS33)
add_definitions(-DIMU_LSM6DS33)
endif()
if(EEPROM_VARIANT_NEEDED)
add_definitions(-DEEPROM_VARIANT=${EEPROM_VARIANT})
endif()
if(TEST_BUILD_WARNING)
add_definitions(-DTEST_BUILD_WARNING)
endif()
-26
View File
@@ -69,8 +69,6 @@ const int16_t sineValues[] =
#define SINE_INDEX_Q3 768
#define MAX_SINE_INDEX 1024
#if defined(SDCARD)
const char * const unitsFilenames[] = {
"",
"volt",
@@ -345,13 +343,6 @@ void playModelName()
audioQueue.playFile(filename);
}
#else // defined(SDCARD)
#define isAudioFileReferenced(i, f) false
#endif // defined(SDCARD)
AudioQueue audioQueue __DMA; // to place it in the RAM section on Horus, to have file buffers in RAM for DMA access
AudioBuffer audioBuffers[AUDIO_BUFFER_COUNT] __DMA;
@@ -397,8 +388,6 @@ inline void mixSample(audio_data_t * result, int sample, unsigned int fade)
*result = limit(AUDIO_DATA_MIN, *result + ((sample >> fade) >> (16-AUDIO_BITS_PER_SAMPLE)), AUDIO_DATA_MAX);
}
#if defined(SDCARD)
#define RIFF_CHUNK_SIZE 12
uint8_t wavBuffer[AUDIO_BUFFER_SIZE*2] __DMA;
@@ -485,12 +474,6 @@ int WavContext::mixBuffer(AudioBuffer *buffer, int volume, unsigned int fade)
}
return 0;
}
#else
int WavContext::mixBuffer(AudioBuffer *buffer, int volume, unsigned int fade)
{
return 0;
}
#endif
const uint8_t toneVolumes[] = { 10, 8, 6, 4, 2 };
inline float evalVolumeRatio(int freq, int volume)
@@ -737,7 +720,6 @@ void AudioQueue::playTone(uint16_t freq, uint16_t len, uint16_t pause, uint8_t f
RTOS_UNLOCK_MUTEX(audioMutex);
}
#if defined(SDCARD)
void AudioQueue::playFile(const char * filename, uint8_t flags, uint8_t id, int8_t fragmentVolume)
{
#if defined(SIMU)
@@ -800,8 +782,6 @@ void AudioQueue::stopSD()
playTone(0, 0, 100, PLAY_NOW); // insert a 100ms pause
}
#endif
void AudioQueue::stopAll()
{
flush();
@@ -931,14 +911,12 @@ void audioEvent(unsigned int index)
}
if (g_eeGeneral.beepMode >= e_mode_nokeys || (g_eeGeneral.beepMode >= e_mode_alarms && index <= AU_ERROR)) {
#if defined(SDCARD)
char filename[AUDIO_FILENAME_MAXLEN + 1];
if (index < AU_SPECIAL_SOUND_FIRST && isAudioFileReferenced(index, filename)) {
audioQueue.stopPlay(ID_PLAY_PROMPT_BASE + index);
audioQueue.playFile(filename, 0, ID_PLAY_PROMPT_BASE + index);
return;
}
#endif
switch (index) {
case AU_INACTIVITY:
audioQueue.playTone(2250, 80, 20, PLAY_REPEAT(2));
@@ -1090,7 +1068,6 @@ void audioEvent(unsigned int index)
}
}
#if defined(SDCARD)
void pushUnit(uint8_t unit, uint8_t idx, uint8_t id, uint8_t fragmentVolume)
{
if (unit < DIM(unitsFilenames)) {
@@ -1104,11 +1081,9 @@ void pushUnit(uint8_t unit, uint8_t idx, uint8_t id, uint8_t fragmentVolume)
TRACE("pushUnit: out of bounds unit : %d", unit); // We should never get here, but given the nature of TTS files, this prevent segfault in case of bug there.
}
}
#endif
void pushPrompt(uint16_t prompt, uint8_t id, uint8_t fragmentVolume)
{
#if defined(SDCARD)
char filename[AUDIO_FILENAME_MAXLEN+1];
char * str = strAppendSystemAudioPath(filename);
strcpy(str, "0000" SOUNDS_EXT);
@@ -1117,7 +1092,6 @@ void pushPrompt(uint16_t prompt, uint8_t id, uint8_t fragmentVolume)
prompt /= 10;
}
audioQueue.playFile(filename, 0, id, fragmentVolume);
#endif
}
void onKeyError()
+1 -1
View File
@@ -668,7 +668,7 @@ void playModelName();
#define AUDIO_FLUSH() audioQueue.flush()
#endif
#if defined(SDCARD) && defined(AUDIO)
#if defined(AUDIO)
extern tmr10ms_t timeAutomaticPromptsSilence;
void playModelEvent(uint8_t category, uint8_t index, event_t event=0);
#define PLAY_PHASE_OFF(phase) playModelEvent(PHASE_AUDIO_CATEGORY, phase, AUDIO_EVENT_OFF)
+3 -42
View File
@@ -71,9 +71,7 @@
RadioData g_eeGeneral;
ModelData g_model;
#if defined(SDCARD)
Clipboard clipboard;
#endif
GlobalData globalData;
@@ -655,10 +653,6 @@ static void checkFailsafe()
#if defined(GUI)
void checkAll(bool isBootCheck)
{
#if defined(EEPROM_RLC) && !defined(SDCARD_RAW) && !defined(SDCARD_YAML)
checkLowEEPROM();
#endif
checkSDfreeStorage();
// we don't check the throttle stick if the radio is not calibrated
@@ -735,17 +729,6 @@ void checkAll(bool isBootCheck)
}
#endif // GUI
#if defined(EEPROM_RLC) && !defined(SDCARD_RAW) && !defined(SDCARD_YAML)
void checkLowEEPROM()
{
if (g_eeGeneral.disableMemoryWarning) return;
if (EeFsGetFree() < 100) {
ALERT(STR_STORAGE_WARNING, STR_EEPROMLOWMEM, AU_ERROR);
}
}
#endif
bool isThrottleWarningAlertNeeded()
{
if (g_model.disableThrottleWarning) {
@@ -1097,9 +1080,7 @@ void edgeTxClose(uint8_t shutdown)
luaClose(&lsScripts);
#endif
#if defined(SDCARD)
logsClose();
#endif
storageFlushCurrentModel();
@@ -1127,9 +1108,7 @@ void edgeTxClose(uint8_t shutdown)
#endif
#endif
#if defined(SDCARD)
sdDone();
#endif
}
void edgeTxResume()
@@ -1387,14 +1366,13 @@ void edgeTxInit()
#endif
// Load radio.yml so radio settings can be used
bool radioSettingsValid = false;
#if defined(RTC_BACKUP_RAM)
// Skip loading if EM startup and radio has RTC backup data
if (!UNEXPECTED_SHUTDOWN())
radioSettingsValid = storageReadRadioSettings(false);
storageReadRadioSettings(false);
#else
// No RTC backup - try and load even for EM startup
radioSettingsValid = storageReadRadioSettings(false);
storageReadRadioSettings(false);
#endif
#if defined(GUI) && !defined(COLORLCD)
@@ -1419,7 +1397,6 @@ void edgeTxInit()
#endif
#endif
#if defined(SDCARD)
// SDCARD related stuff, only enable if normal boot
if (!UNEXPECTED_SHUTDOWN()) {
@@ -1450,16 +1427,6 @@ void edgeTxInit()
logsInit();
}
#endif // defined(SDCARD)
#if defined(EEPROM)
if (!radioSettingsValid) {
storageReadRadioSettings();
}
storageReadCurrentModel();
#else
(void)radioSettingsValid;
#endif
#if defined(COLORLCD) && defined(LUA)
if (!UNEXPECTED_SHUTDOWN()) {
@@ -1468,8 +1435,7 @@ void edgeTxInit()
}
#endif
// handling of storage for radios that have no EEPROM
#if !defined(EEPROM)
// handling of storage for radios
#if defined(RTC_BACKUP_RAM) && !defined(SIMU)
if (UNEXPECTED_SHUTDOWN()) {
// SDCARD not available, try to restore last model from RAM
@@ -1483,7 +1449,6 @@ void edgeTxInit()
#else
storageReadAll();
#endif
#endif // #if !defined(EEPROM)
initSerialPorts();
@@ -1639,10 +1604,6 @@ int main()
runFatalErrorScreen(STR_NO_SDCARD);
}
#endif
#if defined(EEPROM) && defined(EEPROM_RLC)
eepromInit();
#endif
tasksStart();
}
+1 -12
View File
@@ -447,9 +447,7 @@ enum FunctionsActive {
FUNCTION_TRAINER_CHANNELS = FUNCTION_TRAINER_STICK1 + MAX_STICKS,
FUNCTION_INSTANT_TRIM,
FUNCTION_VARIO,
#if defined(SDCARD)
FUNCTION_LOGS,
#endif
FUNCTION_BACKGND_MUSIC,
FUNCTION_BACKGND_MUSIC_PAUSE,
FUNCTION_BACKLIGHT,
@@ -586,9 +584,7 @@ enum AUDIO_SOUNDS {
#include "haptic.h"
#endif
#if defined(SDCARD)
#include "sdcard.h"
#endif
#if defined(RTCLOCK)
#include "rtc.h"
@@ -639,10 +635,7 @@ constexpr uint8_t TEXT_FILENAME_MAXLEN = 40;
union ReusableBuffer
{
struct {
#if defined(EEPROM_RLC) && LCD_W < 212
uint16_t eepromfree;
#endif
#if defined(SDCARD) && !defined(COLORLCD)
#if !defined(COLORLCD)
char menu_bss[POPUP_MENU_MAX_LINES][MENU_LINE_LENGTH];
char mainname[45]; // because reused for SD backup / restore, max backup filename 44 chars: "/MODELS/MODEL0134353-2014-06-19-04-51-27.bin"
#elif !defined(COLORLCD)
@@ -685,7 +678,6 @@ union ReusableBuffer
} inputs[MAX_ANALOG_INPUTS];
} calib;
#if defined(SDCARD)
struct {
#if defined(NUM_BODY_LINES)
char lines[NUM_BODY_LINES][SD_SCREEN_FILE_LENGTH+1+1]; // the last char is used to store the flags (directory) of the line
@@ -699,7 +691,6 @@ union ReusableBuffer
char otaReceiverVersion[sizeof(TR_CURRENT_VERSION) + 12];
#endif
} sdManager;
#endif
struct
{
@@ -874,7 +865,6 @@ void varioWakeup();
#include "lua/lua_api.h"
#if defined(SDCARD)
enum ClipboardType {
CLIPBOARD_TYPE_NONE,
CLIPBOARD_TYPE_CUSTOM_SWITCH,
@@ -901,7 +891,6 @@ struct Clipboard {
};
extern Clipboard clipboard;
#endif
#if defined(INTERNAL_GPS)
#include "gps.h"
-41
View File
@@ -311,7 +311,6 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext
}
#endif
#if defined(SDCARD)
case FUNC_PLAY_SOUND:
case FUNC_PLAY_TRACK:
case FUNC_PLAY_VALUE:
@@ -352,51 +351,12 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext
newActiveFunctions |= (1 << FUNCTION_BACKGND_MUSIC_PAUSE);
break;
#else
case FUNC_PLAY_SOUND:
case FUNC_PLAY_TRACK:
case FUNC_PLAY_BOTH:
case FUNC_PLAY_VALUE: {
tmr10ms_t tmr10ms = get_tmr10ms();
uint8_t repeatParam = CFN_PLAY_REPEAT(cfn);
if (!functionsContext.lastFunctionTime[i] ||
(CFN_FUNC(cfn) == FUNC_PLAY_BOTH &&
active !=
(bool)(functionsContext.activeSwitches & switch_mask)) ||
(repeatParam &&
(signed)(tmr10ms - functionsContext.lastFunctionTime[i]) >=
1000 * repeatParam)) {
functionsContext.lastFunctionTime[i] = tmr10ms;
uint8_t param = CFN_PARAM(cfn);
if (CFN_FUNC(cfn) == FUNC_PLAY_SOUND) {
AUDIO_PLAY(AU_SPECIAL_SOUND_FIRST + param);
} else if (CFN_FUNC(cfn) == FUNC_PLAY_VALUE) {
PLAY_VALUE(param, PLAY_INDEX);
} else {
#if defined(GVARS)
if (CFN_FUNC(cfn) == FUNC_PLAY_TRACK && param > 250)
param = GVAR_VALUE(
param - 251,
getGVarFlightMode(mixerCurrentFlightMode, param - 251));
#endif
PUSH_CUSTOM_PROMPT(active ? param : param + 1, PLAY_INDEX);
}
}
if (!active) {
// PLAY_BOTH would change activeFnSwitches otherwise
switch_mask = 0;
}
break;
}
#endif
#if defined(VARIO)
case FUNC_VARIO:
newActiveFunctions |= (1u << FUNCTION_VARIO);
break;
#endif
#if defined(SDCARD)
case FUNC_LOGS:
if (CFN_PARAM(cfn)) {
newActiveFunctions |= (1u << FUNCTION_LOGS);
@@ -404,7 +364,6 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext
cfn); // logging period is 0..25.5s in 100ms increments
}
break;
#endif
case FUNC_BACKLIGHT: {
newActiveFunctions |= (1u << FUNCTION_BACKLIGHT);
-4
View File
@@ -139,14 +139,10 @@ extern uint8_t s_copySrcCh;
extern int8_t s_currCh;
extern uint8_t s_maxLines;
#if defined(SDCARD)
#define STATUS_LINE_LENGTH 32
extern char statusLineMsg[STATUS_LINE_LENGTH];
void showStatusLine();
void drawStatusLine();
#else
#define drawStatusLine()
#endif
void menuTextView(event_t event);
void pushMenuTextView(const char *filename);
-2
View File
@@ -25,9 +25,7 @@ const MenuHandler menuTabGeneral[MENU_RADIO_PAGES_COUNT] = {
#if defined(RADIO_TOOLS)
{ menuRadioTools, nullptr },
#endif
#if defined(SDCARD)
{ menuRadioSdManager, nullptr },
#endif
{ menuRadioSetup, nullptr },
{ menuRadioSpecialFunctions, radioGFEnabled },
{ menuRadioTrainer, radioTrainerEnabled },
+1 -1
View File
@@ -54,7 +54,7 @@ enum MenuRadioIndexes
#if defined(RADIO_TOOLS)
MENU_RADIO_TOOLS,
#endif
CASE_SDCARD(MENU_RADIO_SD_MANAGER)
MENU_RADIO_SD_MANAGER,
MENU_RADIO_SETUP,
MENU_RADIO_SPECIAL_FUNCTIONS,
MENU_RADIO_TRAINER,
+2 -21
View File
@@ -53,7 +53,6 @@ void onModelSelectMenu(const char * result)
s_copyTgtOfs = 0;
s_copySrcRow = -1;
}
#if defined(SDCARD)
else if (result == STR_BACKUP_MODEL) {
storageCheck(true); // force writing of current model data before this is changed
POPUP_WARNING(backupModel(sub));
@@ -61,24 +60,17 @@ void onModelSelectMenu(const char * result)
else if (result == STR_RESTORE_MODEL || result == STR_UPDATE_LIST) {
const char* ext = nullptr;
const char* path = nullptr;
#if defined(SDCARD_YAML)
ext = STR_YAML_EXT;
path = STR_BACKUP_PATH;
#else
ext = STR_MODELS_EXT;
path = STR_MODELS_PATH;
#endif
if (sdListFiles(path, ext, MENU_LINE_LENGTH-1, nullptr))
POPUP_MENU_START(onModelSelectMenu);
else
POPUP_WARNING(STR_NO_MODELS_ON_SD);
}
#endif
else if (result == STR_DELETE_MODEL) {
POPUP_CONFIRMATION(STR_DELETEMODEL, onDeleteModelConfirm);
SET_WARNING_INFO(modelHeaders[sub].name, sizeof(g_model.header.name), 0);
}
#if defined(SDCARD)
else if (result != STR_EXIT) {
// The user choosed a file on SD to restore
storageCheck(true);
@@ -87,7 +79,6 @@ void onModelSelectMenu(const char * result)
loadModel(sub);
}
}
#endif
}
static void moveToFreeModelSlot(bool forward, int8_t& sub, int8_t oldSub)
@@ -206,22 +197,18 @@ void menuModelSelect(event_t event)
if (g_eeGeneral.currModel != sub) {
if (modelExists(sub)) {
POPUP_MENU_ADD_ITEM(STR_SELECT_MODEL);
POPUP_MENU_ADD_SD_ITEM(STR_BACKUP_MODEL);
POPUP_MENU_ADD_ITEM(STR_BACKUP_MODEL);
POPUP_MENU_ADD_ITEM(STR_COPY_MODEL);
POPUP_MENU_ADD_ITEM(STR_MOVE_MODEL);
POPUP_MENU_ADD_ITEM(STR_DELETE_MODEL);
}
else {
#if defined(SDCARD)
POPUP_MENU_ADD_ITEM(STR_CREATE_MODEL);
POPUP_MENU_ADD_ITEM(STR_RESTORE_MODEL);
#else
selectModel(sub);
#endif
}
}
else {
POPUP_MENU_ADD_SD_ITEM(STR_BACKUP_MODEL);
POPUP_MENU_ADD_ITEM(STR_BACKUP_MODEL);
POPUP_MENU_ADD_ITEM(STR_COPY_MODEL);
POPUP_MENU_ADD_ITEM(STR_MOVE_MODEL);
}
@@ -265,12 +252,6 @@ void menuModelSelect(event_t event)
}
}
#if defined(EEPROM)
lcdDrawText(9*FW-(LEN_FREE-4)*FW-4, 0, STR_FREE);
if (event) reusableBuffer.modelsel.eepromfree = EeFsGetFree();
lcdDrawNumber(lcdLastRightPos+3, 0, reusableBuffer.modelsel.eepromfree, LEFT);
#endif
extern uint8_t menuSize(const MenuHandler*, uint8_t);
uint8_t sz = menuSize(menuTabModel, DIM(menuTabModel));
#if defined(NAVIGATION_X7)
-2
View File
@@ -30,10 +30,8 @@
#include "usb_joystick.h"
#endif
#if !defined(EEPROM)
#include "storage/sdcard_common.h"
#include "storage/modelslist.h"
#endif
#if defined(CROSSFIRE)
#include "telemetry/crossfire.h"
@@ -28,7 +28,6 @@
#define MODEL_SPECIAL_FUNC_4TH_COLUMN_ONOFF (19 * FW - 3)
#define MODEL_SPECIAL_FUNC_5TH_COLUMN_ONOFF (20 * FW + 1)
#if defined(SDCARD)
#define SD_LOGS_PERIOD_MIN 1 // 0.1s fastest period
#define SD_LOGS_PERIOD_MAX 255 // 25.5s slowest period
#define SD_LOGS_PERIOD_DEFAULT 10 // 1s default period for newly created SF
@@ -75,7 +74,6 @@ void onCustomFunctionsFileSelectionMenu(const char * result)
}
}
}
#endif // SDCARD
#if defined(PCBTARANIS)
void onAdjustGvarSourceLongEnterPress(const char * result)
@@ -316,7 +314,6 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
lcdDrawNumber(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
}
#endif
#if defined(SDCARD)
else if (func == FUNC_PLAY_TRACK || func == FUNC_BACKGND_MUSIC || func == FUNC_PLAY_SCRIPT || func == FUNC_RGB_LED) {
coord_t x = MODEL_SPECIAL_FUNC_3RD_COLUMN - 6;
if (func == FUNC_PLAY_SCRIPT)
@@ -359,7 +356,6 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
INCDEC_ENABLE_CHECK(functionsContext == &globalFunctionsContext ? isSourceAvailableInGlobalFunctions : isSourceAvailable);
}
}
#endif // SDCARD
else if (func == FUNC_VOLUME) {
val_max = MIXSRC_LAST_CH;
drawSource(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr);
@@ -376,7 +372,6 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
INCDEC_ENABLE_CHECK(isSourceAvailable);
}
}
#if defined(SDCARD)
else if (func == FUNC_LOGS) {
val_min = SD_LOGS_PERIOD_MIN;
val_max = SD_LOGS_PERIOD_MAX;
@@ -388,7 +383,6 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
lcdDrawNumber(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|PREC1|LEFT);
lcdDrawChar(lcdLastRightPos, y, 's');
}
#endif
#if defined(GVARS)
else if (func == FUNC_ADJUST_GVAR) {
switch (CFN_GVAR_MODE(cfn)) {
-2
View File
@@ -243,7 +243,6 @@ int16_t editGVarFieldValue(coord_t x, coord_t y, int16_t value, int16_t min, int
}
#endif
#if defined(SDCARD)
char statusLineMsg[STATUS_LINE_LENGTH];
tmr10ms_t statusLineTime = 0;
uint8_t statusLineHeight = 0;
@@ -272,4 +271,3 @@ void drawStatusLine()
lcdDrawFilledRect(0, LCD_H-statusLineHeight, LCD_W, FH, SOLID);
}
}
#endif
+2 -16
View File
@@ -51,13 +51,8 @@ void onModelSelectMenu(const char * result)
else if (result == STR_RESTORE_MODEL || result == STR_UPDATE_LIST) {
const char* ext = nullptr;
const char* path = nullptr;
#if defined(SDCARD_YAML)
ext = STR_YAML_EXT;
path = STR_BACKUP_PATH;
#else
ext = STR_MODELS_EXT;
path = STR_MODELS_PATH;
#endif
if (sdListFiles(path, ext, MENU_LINE_LENGTH-1, nullptr))
POPUP_MENU_START(onModelSelectMenu);
else
@@ -201,7 +196,7 @@ void menuModelSelect(event_t event)
if (g_eeGeneral.currModel != sub) {
if (modelExists(sub)) {
POPUP_MENU_ADD_ITEM(STR_SELECT_MODEL);
POPUP_MENU_ADD_SD_ITEM(STR_BACKUP_MODEL);
POPUP_MENU_ADD_ITEM(STR_BACKUP_MODEL);
POPUP_MENU_ADD_ITEM(STR_COPY_MODEL);
POPUP_MENU_ADD_ITEM(STR_MOVE_MODEL);
POPUP_MENU_ADD_ITEM(STR_DELETE_MODEL);
@@ -212,7 +207,7 @@ void menuModelSelect(event_t event)
}
}
else {
POPUP_MENU_ADD_SD_ITEM(STR_BACKUP_MODEL);
POPUP_MENU_ADD_ITEM(STR_BACKUP_MODEL);
POPUP_MENU_ADD_ITEM(STR_COPY_MODEL);
POPUP_MENU_ADD_ITEM(STR_MOVE_MODEL);
}
@@ -241,12 +236,6 @@ void menuModelSelect(event_t event)
}
}
#if defined(EEPROM)
lcdDrawNumber(19*FW, 0, EeFsGetFree(), RIGHT);
lcdDrawText(19*FW + 3, 0, STR_BYTES);
lcdDrawText(lcdLastRightPos + 3, 0, STR_FREE);
#endif
extern uint8_t menuSize(const MenuHandler*, uint8_t);
drawScreenIndex(MENU_MODEL_SELECT, menuSize(menuTabModel, DIM(menuTabModel)), 0);
lcdDrawFilledRect(0, 0, LCD_W, FH, SOLID, FILL_WHITE|GREY_DEFAULT);
@@ -279,9 +268,6 @@ void menuModelSelect(event_t event)
if (modelExists(k)) {
drawModelName(4*FW, y, modelHeaders[k].name, k, 0);
#if defined(EEPROM)
lcdDrawNumber(20*FW, y, eeModelSize(k), RIGHT);
#endif
if (k==g_eeGeneral.currModel && (s_copyMode!=COPY_MODE || s_copySrcRow<0 || i+menuVerticalOffset!=(vertpos_t)sub))
lcdDrawChar(1, y, '*');
}
@@ -304,7 +304,6 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
lcdDrawNumber(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
}
#endif
#if defined(SDCARD)
else if (func == FUNC_PLAY_TRACK || func == FUNC_BACKGND_MUSIC || func == FUNC_PLAY_SCRIPT) {
coord_t x = MODEL_SPECIAL_FUNC_3RD_COLUMN;
if (ZEXIST(cfn->play.name))
@@ -338,7 +337,6 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
INCDEC_ENABLE_CHECK(functionsContext == &globalFunctionsContext ? isSourceAvailableInGlobalFunctions : isSourceAvailable);
}
}
#endif
else if (func == FUNC_VOLUME) {
val_max = MIXSRC_LAST_CH;
drawSource(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr);
-2
View File
@@ -203,7 +203,6 @@ int16_t editGVarFieldValue(coord_t x, coord_t y, int16_t value, int16_t min, int
}
#endif
#if defined(SDCARD)
char statusLineMsg[STATUS_LINE_LENGTH];
tmr10ms_t statusLineTime = 0;
uint8_t statusLineHeight = 0;
@@ -232,4 +231,3 @@ void drawStatusLine()
lcdDrawFilledRect(0, LCD_H-statusLineHeight, LCD_W, FH, SOLID);
}
}
#endif
@@ -425,11 +425,7 @@ static void replaceSpaceWithUnderscore(std::string& name)
} while (index != std::string::npos);
}
#if defined(SDCARD_YAML)
#define MODEL_FILE_EXT YAML_EXT
#else
#define MODEL_FILE_EXT MODELS_EXT
#endif
static bool checkNotesFile(std::string modelNotesName)
{
@@ -449,7 +445,6 @@ static std::string getModelNotesFile()
if (checkNotesFile(modelNotesName))
return modelNotesName;
#if !defined(EEPROM)
modelNotesName.assign(g_eeGeneral.currModelFilename);
size_t index = modelNotesName.find(MODEL_FILE_EXT);
if (index != std::string::npos) {
@@ -461,7 +456,6 @@ static std::string getModelNotesFile()
replaceSpaceWithUnderscore(modelNotesName);
if (checkNotesFile(modelNotesName))
return modelNotesName;
#endif
return std::string("");
}
+1 -7
View File
@@ -16,6 +16,7 @@ set(GUI_SRC
../common/stdlcd/view_telemetry.cpp
../common/stdlcd/calibration.cpp
../common/stdlcd/splash.cpp
../common/stdlcd/radio_sdmanager.cpp
model_curve_edit.cpp
)
@@ -27,13 +28,6 @@ if(HELI)
set(GUI_SRC ${GUI_SRC} ../common/stdlcd/model_heli.cpp)
endif()
if(SDCARD)
set(GUI_SRC
${GUI_SRC}
../common/stdlcd/radio_sdmanager.cpp
)
endif()
if(PXX2)
set(GUI_SRC
${GUI_SRC}
-6
View File
@@ -131,10 +131,4 @@
#define CASE_PCBX9E_PCBX9DP(x)
#endif
#if defined(SDCARD)
#define CASE_SDCARD(x) x,
#else
#define CASE_SDCARD(x)
#endif
#define CASE_SPLASH_PARAM(x) x,
-8
View File
@@ -111,39 +111,31 @@ const char * runPopupMenu(event_t event)
if (popupMenuSelectedItem > 0) {
popupMenuSelectedItem--;
}
#if defined(SDCARD)
else if (popupMenuOffset > 0) {
popupMenuOffset--;
result = STR_UPDATE_LIST;
}
#endif
else {
popupMenuSelectedItem = min<uint8_t>(display_count, MENU_MAX_DISPLAY_LINES) - 1;
#if defined(SDCARD)
if (popupMenuItemsCount > MENU_MAX_DISPLAY_LINES) {
popupMenuOffset = popupMenuItemsCount - display_count;
result = STR_UPDATE_LIST;
}
#endif
}
} else if (IS_NEXT_EVENT(eventTemp)) {
if (popupMenuSelectedItem < display_count - 1 && popupMenuOffset + popupMenuSelectedItem + 1 < popupMenuItemsCount) {
popupMenuSelectedItem++;
}
#if defined(SDCARD)
else if (popupMenuItemsCount > popupMenuOffset + display_count) {
popupMenuOffset++;
result = STR_UPDATE_LIST;
}
#endif
else {
popupMenuSelectedItem = 0;
#if defined(SDCARD)
if (popupMenuOffset) {
popupMenuOffset = 0;
result = STR_UPDATE_LIST;
}
#endif
}
} else if (eventTemp == EVT_KEY_BREAK(KEY_ENTER)) {
result = popupMenuItems[popupMenuSelectedItem + (popupMenuOffsetType == MENU_OFFSET_INTERNAL ? popupMenuOffset : 0)];
-6
View File
@@ -92,12 +92,6 @@ enum WarningType
extern void POPUP_MENU_ADD_ITEM(const char * s);
#if defined(SDCARD)
#define POPUP_MENU_ADD_SD_ITEM(s) POPUP_MENU_ADD_ITEM(s)
#else
#define POPUP_MENU_ADD_SD_ITEM(s)
#endif
extern void POPUP_MENU_SELECT_ITEM(uint8_t index);
extern void POPUP_MENU_TITLE(const char * s);
@@ -87,10 +87,6 @@ enum {
ITEM_RADIO_HARDWARE_DEBUG,
#if defined(FUNCTION_SWITCHES)
ITEM_RADIO_HARDWARE_DEBUG_FS,
#endif
#if defined(EEPROM)
ITEM_RADIO_BACKUP_EEPROM,
ITEM_RADIO_FACTORY_RESET,
#endif
ITEM_RADIO_HARDWARE_MAX
};
@@ -124,17 +120,6 @@ static const IsValueAvailable _isSerialModeAvailable[MAX_SERIAL_PORTS] = {
_isAux1ModeAvailable, _isAux2ModeAvailable, _isVCPModeAvailable
};
#if defined(EEPROM)
void onFactoryResetConfirm(const char* result)
{
if (result == STR_OK) {
showMessageBox(STR_STORAGE_FORMAT);
storageEraseAll(false);
NVIC_SystemReset();
}
}
#endif
static void _init_menu_tab_array(uint8_t* tab, size_t len)
{
memset((void*)tab, READONLY_ROW, sizeof(MENU_TAB_ARRAY_TYPE) * len);
@@ -224,10 +209,6 @@ static void _init_menu_tab_array(uint8_t* tab, size_t len)
#if defined(FUNCTION_SWITCHES)
tab[ITEM_RADIO_HARDWARE_DEBUG_FS] = 0;
#endif
#if defined(EEPROM)
tab[ITEM_RADIO_BACKUP_EEPROM] = 0;
tab[ITEM_RADIO_FACTORY_RESET] = 0;
#endif
}
void menuRadioHardware(event_t event)
@@ -469,30 +450,6 @@ void menuRadioHardware(event_t event)
break;
#endif
#if defined(EEPROM)
case ITEM_RADIO_BACKUP_EEPROM:
if (LCD_W < 212)
lcdDrawText(LCD_W / 2, y, BUTTON(STR_EEBACKUP), attr | CENTERED);
else
lcdDrawText(HW_SETTINGS_COLUMN2, y, BUTTON(STR_EEBACKUP), attr);
if (attr && event == EVT_KEY_BREAK(KEY_ENTER)) {
s_editMode = EDIT_SELECT_FIELD;
eepromBackup();
}
break;
case ITEM_RADIO_FACTORY_RESET:
if (LCD_W < 212)
lcdDrawText(LCD_W / 2, y, BUTTON(STR_FACTORYRESET), attr | CENTERED);
else
lcdDrawText(HW_SETTINGS_COLUMN2, y, BUTTON(STR_FACTORYRESET), attr);
if (attr && event == EVT_KEY_BREAK(KEY_ENTER)) {
s_editMode = EDIT_SELECT_FIELD;
POPUP_CONFIRMATION(STR_CONFIRMRESET, onFactoryResetConfirm);
}
break;
#endif
default:
if (k <= ITEM_RADIO_HARDWARE_STICK_END) {
// Sticks
+1 -1
View File
@@ -153,7 +153,7 @@ void check(event_t event, uint8_t curr, const MenuHandler *menuTab,
case EVT_KEY_LONG(KEY_MODEL):
if (menuTab == menuTabModel) {
if (modelHasNotes()) {
POPUP_MENU_ADD_SD_ITEM(STR_VIEW_CHANNELS);
POPUP_MENU_ADD_ITEM(STR_VIEW_CHANNELS);
POPUP_MENU_ADD_ITEM(STR_VIEW_NOTES);
POPUP_MENU_START(onLongMenuPress);
}
-4
View File
@@ -135,12 +135,8 @@ const char * logsOpen()
if (g_model.header.name[0]) {
tmp = strAppend(tmp, sanitizeForFilename(g_model.header.name, LEN_MODEL_NAME));
} else {
#if defined(EEPROM)
uint8_t num = g_eeGeneral.currModel + 1;
#else
// TODO
uint8_t num = 1;
#endif
tmp = strAppend(tmp, STR_MODEL);
tmp = strAppendUnsigned(tmp, num, 2);
}
-8
View File
@@ -30,9 +30,7 @@
#include "gvars.h"
#include "mixes.h"
#if defined(SDCARD_YAML)
#include <storage/sdcard_yaml.h>
#endif
#if defined(MULTIMODULE)
#include "pulses/multi.h"
@@ -97,9 +95,6 @@ static int luaModelSetInfo(lua_State *L)
if (!strcmp(key, "name")) {
const char * name = luaL_checkstring(L, -1);
strncpy(g_model.header.name, name, sizeof(g_model.header.name));
#if defined(EEPROM)
memcpy(modelHeaders[g_eeGeneral.currModel].name, g_model.header.name, sizeof(g_model.header.name));
#endif
}
else if (!strcmp(key, "extendedLimits")) {
g_model.extendedLimits = lua_toboolean(L, -1);
@@ -238,9 +233,6 @@ static int luaModelSetModule(lua_State *L)
}
else if (!strcmp(key, "modelId")) {
g_model.header.modelId[idx] = luaL_checkinteger(L, -1);
#if defined(EEPROM)
modelHeaders[g_eeGeneral.currModel].modelId[idx] = g_model.header.modelId[idx];
#endif
}
else if (!strcmp(key, "firstChannel")) {
module.channelsStart = luaL_checkinteger(L, -1);
+2 -14
View File
@@ -283,16 +283,7 @@ void checkHatsAsKeys()
}
#endif
#if defined(EEPROM)
void checkEeprom()
{
if (eepromIsWriting())
eepromWriteProcess();
else if (TIME_TO_WRITE())
storageCheck(false);
}
#else
void checkEeprom()
void checkStorageUpdate()
{
#if defined(RTC_BACKUP_RAM) && !defined(SIMU)
if (TIME_TO_BACKUP_RAM()) {
@@ -306,7 +297,6 @@ void checkEeprom()
storageCheck(false);
}
}
#endif
#define BAT_AVG_SAMPLES 8
@@ -524,7 +514,7 @@ void perMain()
checkSpeakerVolume();
if (!usbPlugged() || (getSelectedUsbMode() == USB_UNSELECTED_MODE)) {
checkEeprom();
checkStorageUpdate();
#if !defined(SIMU) // use FreeRTOS software timer if radio firmware
initLoggingTimer(); // initialize software timer for logging
@@ -567,7 +557,6 @@ void perMain()
sdMount();
}
#if !defined(EEPROM)
// In case the SD card is removed during the session
if ((!usbPlugged() || (getSelectedUsbMode() == USB_UNSELECTED_MODE)) &&
!SD_CARD_PRESENT() && !UNEXPECTED_SHUTDOWN()) {
@@ -577,7 +566,6 @@ void perMain()
return;
#endif
}
#endif
if (usbPlugged() && getSelectedUsbMode() == USB_MASS_STORAGE_MODE) {
#if defined(LIBOPENUI)
-7
View File
@@ -27,13 +27,6 @@
#include "storage/yaml/yaml_defs.h"
#include "hal/switch_driver.h"
#if defined(SDCARD_YAML)
#define EEPROM_VER 221
#else
#define EEPROM_VER 220
#endif
#define FIRST_CONV_EEPROM_VER 219
#define GET_MODULE_PPM_POLARITY(idx) g_model.moduleData[idx].ppm.pulsePol
#define GET_TRAINER_PPM_POLARITY() g_model.trainerData.pulsePol
#define GET_SBUS_POLARITY(idx) g_model.moduleData[idx].sbus.noninverted
-4
View File
@@ -348,7 +348,6 @@ bool sdListFiles(const char * path, const char * extension, const uint8_t maxlen
#endif // !LIBOPENUI
#if defined(SDCARD)
const char * sdCopyFile(const char * srcPath, const char * destPath)
{
FIL srcFile;
@@ -436,9 +435,6 @@ const char * sdMoveFile(const char * srcFilename, const char * srcDir, const cha
return nullptr;
}
#endif // defined(SDCARD)
#if !defined(SIMU) || defined(SIMU_DISKIO)
uint32_t sdGetNoSectors()
{
-7
View File
@@ -46,7 +46,6 @@ extern FIL g_oLogFile;
#define BITMAPS_PATH ROOT_PATH "IMAGES"
#define FIRMWARES_PATH ROOT_PATH "FIRMWARE"
#define AUTOUPDATE_FILENAME FIRMWARES_PATH PATH_SEPARATOR "autoupdate.frsk"
#define EEPROMS_PATH ROOT_PATH "EEPROM"
#define BACKUP_PATH ROOT_PATH "BACKUP"
#define SCRIPTS_PATH ROOT_PATH "SCRIPTS"
#define WIZARD_PATH SCRIPTS_PATH PATH_SEPARATOR "WIZARD"
@@ -62,11 +61,8 @@ extern FIL g_oLogFile;
#define LEN_FILE_PATH_MAX (sizeof(SCRIPTS_TELEM_PATH)+1) // longest + "/"
#if defined(SDCARD_YAML) || defined(SDCARD_RAW)
#define RADIO_FILENAME "radio.bin"
const char RADIO_MODELSLIST_PATH[] = RADIO_PATH PATH_SEPARATOR "models.txt";
const char RADIO_SETTINGS_PATH[] = RADIO_PATH PATH_SEPARATOR RADIO_FILENAME;
#if defined(SDCARD_YAML)
#define LABELS_FILENAME "labels.yml"
#define MODELS_FILENAME "models.yml"
const char MODELSLIST_YAML_PATH[] = MODELS_PATH PATH_SEPARATOR MODELS_FILENAME;
@@ -77,10 +73,8 @@ const char RADIO_SETTINGS_TMPFILE_YAML_PATH[] = RADIO_PATH PATH_SEPARATOR "radio
const char RADIO_SETTINGS_ERRORFILE_YAML_PATH[] = RADIO_PATH PATH_SEPARATOR "radio_error.yml";
const char YAMLFILE_CHECKSUM_TAG_NAME[] = "checksum";
#endif
#define SPLASH_FILE "splash.png"
#define SHUTDOWN_SPLASH_FILE "shutdown.png"
#endif
#define MODELS_EXT ".bin"
#define LOGS_EXT ".csv"
@@ -92,7 +86,6 @@ const char YAMLFILE_CHECKSUM_TAG_NAME[] = "checksum";
#define SCRIPT_BIN_EXT ".luac"
#define TEXT_EXT ".txt"
#define FIRMWARE_EXT ".bin"
#define EEPROM_EXT ".bin"
#define SPORT_FIRMWARE_EXT ".frk"
#define FRSKY_FIRMWARE_EXT ".frsk"
#define MULTI_FIRMWARE_EXT ".bin"
-9
View File
@@ -168,10 +168,6 @@ OpenTxSim::~OpenTxSim()
simuStop();
stopAudioThread();
#if defined(EEPROM)
stopEepromThread();
#endif
delete bmp;
delete sliders[0];
delete sliders[1];
@@ -645,13 +641,8 @@ int main(int argc, char ** argv)
opentxSim->show(); // Otherwise the main window gets centred across my two monitors, split down the middle.
#endif
printf("Model size = %d\n", (int)sizeof(g_model));
#if defined(EEPROM) || defined(EEPROM_RLC)
startEepromThread(argc >= 2 ? argv[1] : "eeprom.bin");
#endif
#if !defined(SIMU_BOOTLOADER)
startAudioThread();
#endif
+2 -97
View File
@@ -25,7 +25,6 @@
using std::list;
#if defined(SDCARD_YAML)
#include "edgetx.h"
#include "storage/sdcard_yaml.h"
#include "yaml/yaml_datastructs.h"
@@ -33,8 +32,6 @@ using std::list;
#include "yaml/yaml_modelslist.h"
#include "yaml/yaml_parser.h"
#endif
#if defined(USBJ_EX)
#include "usb_joystick.h"
#endif
@@ -920,44 +917,6 @@ void ModelsList::clear()
init();
}
/**
* @brief Load and parse the models.txt file
*
* @return true On Success
* @return false On Failure
*/
bool ModelsList::loadTxt()
{
char line[LEN_MODELS_IDX_LINE + 1];
ModelCell *model = nullptr;
FRESULT result =
f_open(&file, RADIO_MODELSLIST_PATH, FA_OPEN_EXISTING | FA_READ);
if (result == FR_OK) {
// TXT reader
while (readNextLine(line, LEN_MODELS_IDX_LINE)) {
int len = strlen(line); // TODO could be returned by readNextLine
if (len > 2 && line[0] == '[' && line[len - 1] == ']') {
line[len - 1] = '\0';
} else if (len > 0) {
model = new ModelCell(line);
push_back(model);
if (!strncmp(line, g_eeGeneral.currModelFilename, LEN_MODEL_FILENAME)) {
currentModel = model;
}
}
}
f_close(&file);
return true;
}
return false;
}
#if defined(SDCARD_YAML)
/**
* @brief Opens a YAML file, reads the data and updates the ModelCell
*
@@ -1222,35 +1181,19 @@ bool ModelsList::loadYaml()
return true;
}
#endif
/**
* @brief Called to load the model data from file
*
* @param fmt Format::txt - Opens models.txt file, Format::yaml_txt - Opens
* labels.yml
* @return true on success
* @return false on failure
*/
bool ModelsList::load(Format fmt)
bool ModelsList::load()
{
if (loaded) return true;
bool res = false;
#if !defined(SDCARD_YAML)
(void)fmt;
res = loadTxt();
#else
FILINFO fno;
if (fmt == Format::txt ||
(fmt == Format::yaml_txt && f_stat(MODELSLIST_YAML_PATH, &fno) != FR_OK &&
f_stat(FALLBACK_MODELSLIST_YAML_PATH, &fno) != FR_OK)) {
res = loadTxt();
} else {
res = loadYaml();
}
#endif
bool res = loadYaml();
if (!currentModel) {
TRACE("ERROR no Current Model Found");
@@ -1283,13 +1226,8 @@ bool ModelsList::load(Format fmt)
const char *ModelsList::save(LabelsVector newOrder)
{
#if !defined(SDCARD_YAML)
FRESULT result =
f_open(&file, RADIO_MODELSLIST_PATH, FA_CREATE_ALWAYS | FA_WRITE);
#else
FRESULT result =
f_open(&file, LABELSLIST_YAML_PATH, FA_CREATE_ALWAYS | FA_WRITE);
#endif
if (result != FR_OK) return "Couldn't open labels.yml for writing";
// Save current selection
@@ -1393,39 +1331,6 @@ void ModelsList::updateCurrentModelCell()
}
}
/**
* @brief Reads a line from a file. Used by loadTxt
*
* @param line Storage for the read line
* @param maxlen maximum read length
* @return true Success
* @return false Failure
*/
bool ModelsList::readNextLine(char *line, int maxlen)
{
while (maxlen > 0) {
unsigned int br;
FRESULT res = f_read(&file, line, 1, &br);
if (res == FR_OK && br == 1) {
// Return if line read
if (*line == 0 || *line == '\n') {
*line = 0;
return true;
}
// Move to next char unless '\r' read
if (*line != '\r') {
line += 1;
maxlen -= 1;
}
} else {
return false;
}
}
*line = 0;
return true;
}
/**
* @brief Creates a new ModelCell
*
+1 -21
View File
@@ -34,10 +34,6 @@
#include "sdcard.h"
#if !defined(SDCARD_YAML)
#include "sdcard_raw.h"
#endif
#include "dataconstants.h"
#include "rtc.h"
@@ -221,21 +217,10 @@ class ModelsList : public ModelsVector
void init();
public:
enum class Format {
txt,
#if defined(SDCARD_YAML)
yaml,
yaml_txt,
load_default = yaml,
#else
load_default = txt,
#endif
};
ModelsList();
~ModelsList();
bool load(Format fmt = Format::load_default);
bool load();
const char *save(LabelsVector newOrder=LabelsVector());
void clear();
@@ -249,8 +234,6 @@ class ModelsList : public ModelsVector
return std::vector<ModelCell *>::size();
}
bool readNextLine(char *line, int maxlen);
ModelCell *addModel(const char *name, bool save = true, ModelCell *copyCell = nullptr);
bool removeModel(ModelCell *model);
bool moveModelTo(unsigned curindex, unsigned toindex);
@@ -269,11 +252,8 @@ class ModelsList : public ModelsVector
protected:
FIL file;
bool loadTxt();
#if defined(SDCARD_YAML)
bool loadYaml();
bool loadYamlDirScanner();
#endif
};
ModelLabelsVector getUniqueLabels();
+2 -19
View File
@@ -25,29 +25,10 @@
#include "translations.h"
#define MODEL_FILENAME_PREFIX "model"
#if defined(SDCARD_RAW)
#define MODEL_FILENAME_SUFFIX ".bin"
#elif defined(SDCARD_YAML)
#define MODEL_FILENAME_SUFFIX ".yml"
#endif
#define DEFAULT_MODEL_FILENAME MODEL_FILENAME_PREFIX "1" MODEL_FILENAME_SUFFIX
#define MODEL_FILENAME_PATTERN MODEL_FILENAME_PREFIX MODEL_FILENAME_SUFFIX
#if !defined(STORAGE_MODELSLIST)
extern ModelHeader modelHeaders[MAX_MODELS];
#endif
// opens radio.bin or model file
const char* openFileBin(const char* fullpath, FIL* file, uint16_t* size,
uint8_t* version);
const char* writeFileBin(const char* fullpath, const uint8_t* data,
uint16_t size, uint8_t version = EEPROM_VER);
// open, read, and close the file
const char *loadFileBin(const char *fullpath, uint8_t *data,
uint16_t maxsize, uint8_t *version);
// writes a complete YAML file
struct YamlNode;
const char* writeFileYaml(const char* path, const YamlNode* root_node, uint8_t* data, uint16_t checksum);
@@ -62,6 +43,8 @@ const char * writeModel();
#if !defined(STORAGE_MODELSLIST)
extern ModelHeader modelHeaders[MAX_MODELS];
// index storage vs modelslist
void selectModel(uint8_t idx);
const char* loadModel(uint8_t idx, bool alarms=true);
-45
View File
@@ -1,45 +0,0 @@
/*
* Copyright (C) EdgeTX
*
* Based on code named
* opentx - https://github.com/opentx/opentx
* 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.
*/
#pragma once
#include "FatFs/ff.h"
#if defined(SDCARD_RAW)
#define writeModel writeModelBin
#define loadRadioSettings loadRadioSettingsBin
#define writeGeneralSettings writeGeneralSettingsBin
const char* readModel(const char* filename, uint8_t* buffer, uint32_t size);
#endif
const char* loadRadioSettingsBin();
const char * writeGeneralSettingsBin();
const char* openFileBin(const char* fullpath, FIL* file, uint16_t* size,
uint8_t* version);
const char* readModelBin(const char* filename, uint8_t* buffer, uint32_t size,
uint8_t* version);
const char* writeModelBin();
-7
View File
@@ -25,7 +25,6 @@
#include "edgetx_helpers.h"
#include "storage.h"
#include "sdcard_common.h"
#include "sdcard_raw.h"
#include "sdcard_yaml.h"
#include "modelslist.h"
@@ -34,12 +33,6 @@
#include "yaml/yaml_datastructs.h"
#include "yaml/yaml_bits.h"
#if defined(EEPROM_RLC)
#include "storage/eeprom_common.h"
#include "storage/eeprom_rlc.h"
#endif
const char * readYamlFile(const char* fullpath, const YamlParserCalls* calls, void* parser_ctx, ChecksumResult* checksum_result)
{
FIL file;
-7
View File
@@ -58,7 +58,6 @@ void storageFlushCurrentModel();
void postRadioSettingsLoad();
void preModelLoad();
void postModelLoad(bool alarms);
void checkExternalAntenna();
#if !defined(STORAGE_MODELSLIST)
extern ModelHeader modelHeaders[MAX_MODELS];
@@ -69,13 +68,7 @@ void loadModelHeaders();
uint8_t findNextUnusedModelId(uint8_t index, uint8_t module);
#endif
#if defined(EEPROM)
#include "eeprom_common.h"
#endif
#if defined(SDCARD_RAW) || defined(SDCARD_YAML)
#include "sdcard_common.h"
#endif
#if defined(RTC_BACKUP_RAM)
#include "rtc_backup.h"
-4
View File
@@ -63,9 +63,7 @@ void preModelLoad()
{
watchdogSuspend(500/*5s*/);
#if defined(SDCARD)
logsClose();
#endif
bool needDelay = false;
if (mixerTaskStarted()) {
@@ -285,9 +283,7 @@ if(g_model.rssiSource) {
pulsesStart();
}
#if defined(SDCARD)
referenceModelAudioFiles();
#endif
#if defined(COLORLCD)
LayoutFactory::loadCustomScreens();
@@ -32,11 +32,7 @@ enum MemoryType {
MEM_EEPROM
};
#if defined(EEPROM)
#define getBinaryPath(mt) ((mt == MEM_FLASH) ? FIRMWARES_PATH : EEPROMS_PATH)
#else
#define getBinaryPath(mt) (FIRMWARES_PATH)
#endif
#if LCD_H == 480
#define MAX_NAMES_ON_SCREEN 13
@@ -48,7 +48,7 @@
#include "thirdparty/Segger_RTT/RTT/SEGGER_RTT.h"
#endif
#if defined(EEPROM) || defined(SPI_FLASH)
#if defined(SPI_FLASH)
#define MAIN_MENU_LEN 3
#else
#define MAIN_MENU_LEN 2
@@ -79,11 +79,6 @@ uint32_t firmwareSize;
uint32_t firmwareAddress = FIRMWARE_ADDRESS;
uint32_t firmwareWritten = 0;
#if defined(EEPROM)
uint32_t eepromAddress = 0;
uint32_t eepromWritten = 0;
#endif
FlashCheckRes valid;
MemoryType memoryType;
uint32_t unlocked = 0;
@@ -112,14 +107,7 @@ void per10ms()
uint32_t isValidBufferStart(const uint8_t * buffer)
{
#if !defined(SIMU)
#if defined(EEPROM)
if (memoryType == MEM_FLASH)
return isFirmwareStart(buffer);
else
return isEepromStart(buffer);
#else
return isFirmwareStart(buffer);
#endif
#else
return 1;
#endif
@@ -182,14 +170,6 @@ void flashWriteBlock()
#endif // SIMU
}
#if defined(EEPROM)
void writeEepromBlock()
{
eepromWriteBlock(Block_buffer, eepromAddress, BlockCount);
eepromAddress += BlockCount;
}
#endif
#if !defined(SIMU)
typedef void (*fctptr_t)(void);
@@ -249,17 +229,13 @@ void bootloaderInitApp()
TRACE("\nBootloader started :)");
// TODO: move BT & EEPROM into board specifics
// TODO: move BT into board specifics
#if defined(BLUETOOTH)
// we shutdown the bluetooth module now to be sure it will be detected on
// firmware start
bluetoothInit(BLUETOOTH_DEFAULT_BAUDRATE, false);
#endif
#if defined(EEPROM) && defined(EEPROM_RLC)
eepromInit();
#endif
timersInit();
// SD card detect pin
@@ -346,12 +322,7 @@ int bootloaderMain()
memoryType = MEM_FLASH;
state = ST_DIR_CHECK;
break;
#if defined(EEPROM)
case 1:
memoryType = MEM_EEPROM;
state = ST_DIR_CHECK;
break;
#elif defined(SPI_FLASH)
#if defined(SPI_FLASH)
case 1:
state = ST_CLEAR_FLASH_CHECK;
break;
@@ -454,12 +425,6 @@ int bootloaderMain()
firmwareAddress = APP_START_ADDRESS;
firmwareWritten = 0;
}
#if defined(EEPROM)
else {
eepromAddress = 0;
eepromWritten = 0;
}
#endif
state = ST_FLASHING;
}
}
@@ -476,13 +441,6 @@ int bootloaderMain()
firmwareWritten += sizeof(Block_buffer);
progress = (100 * firmwareWritten) / firmwareSize;
}
#if defined(EEPROM)
else {
writeEepromBlock();
eepromWritten += sizeof(Block_buffer);
progress = (100 * eepromWritten) / EEPROM_SIZE;
}
#endif
bootloaderDrawScreen(state, progress);
@@ -493,11 +451,6 @@ int bootloaderMain()
else if (memoryType == MEM_FLASH && firmwareWritten >= FIRMWARE_MAX_LEN) {
state = ST_FLASH_DONE; // Backstop
}
#if defined(EEPROM)
else if (memoryType == MEM_EEPROM && eepromWritten >= EEPROM_SIZE) {
state = ST_FLASH_DONE; // Backstop
}
#endif
#if defined(SPI_FLASH)
} else if (state == ST_CLEAR_FLASH_CHECK) {
bootloaderDrawScreen(state, vpos);
@@ -152,11 +152,7 @@ int8_t STORAGE_GetCapacity_FS(uint8_t lun, uint32_t *block_num, uint16_t *block_
#if defined(FWDRIVE)
if (lun == STORAGE_EEPROM_LUN) {
*block_size = BLOCK_SIZE;
#if defined(EEPROM)
*block_num = RESERVED_SECTORS + EEPROM_SIZE/BLOCK_SIZE + FLASHSIZE/BLOCK_SIZE;
#else
*block_num = RESERVED_SECTORS + FLASHSIZE/BLOCK_SIZE;
#endif
return 0;
}
#endif
@@ -196,11 +192,6 @@ void usbInitLUNs()
*/
int8_t STORAGE_IsReady_FS(uint8_t lun)
{
#if defined(FWDRIVE) && defined(EEPROM)
if (lun == STORAGE_EEPROM_LUN) {
return (lunReady[STORAGE_EEPROM_LUN] != 0) ? 0 : -1;
}
#endif
return (lunReady[STORAGE_SDCARD_LUN] != 0 && storageIsPresent()) ? USBD_OK : USBD_FAIL;
}
@@ -300,11 +291,7 @@ const char firmware_txt[] =
/**
* FAT12 boot sector partition.
*/
#if defined(EEPROM)
#define TOTALSECTORS (RESERVED_SECTORS + (EEPROM_SIZE/BLOCK_SIZE) + (FLASHSIZE/BLOCK_SIZE))
#else
#define TOTALSECTORS (RESERVED_SECTORS + (FLASHSIZE/BLOCK_SIZE))
#endif
#define TOTALSECTORS (RESERVED_SECTORS + (FLASHSIZE/BLOCK_SIZE))
const char g_FATboot[BLOCK_SIZE] =
{
0xeb, 0x3c, 0x90, // Jump instruction.
@@ -443,23 +430,6 @@ const FATDirEntry_t g_DIRroot[] =
0x0003,
FLASHSIZE
},
#if defined(EEPROM)
{
{ 'E', 'E', 'P', 'R', 'O', 'M', ' ', ' '},
{ 'B', 'I', 'N'},
0x20, // Archive
0x00,
0x3E,
0xA301,
0x3D55,
0x3D55,
0x0000,
0xA302,
0x3D55,
0x0003 + (FLASHSIZE/BLOCK_SIZE)/8,
EEPROM_SIZE
},
#endif
// Emty entries are 0x00, omitted here. Up to 16 entries can be defined here
};
@@ -511,13 +481,6 @@ int32_t fat12Read(uint8_t * buffer, uint16_t sector, uint16_t count)
pushCluster (buffer, sector, cluster, rest, cluster+1);
pushCluster (buffer, sector, cluster, rest, (uint16_t) 0xFFF);
#if defined(EEPROM)
// Entry for eeprom.bin
for (int i=0;i<EEPROM_SIZE/BLOCK_SIZE/8 -1;i++)
pushCluster (buffer, sector, cluster, rest, cluster+1);
pushCluster (buffer, sector, cluster, rest, (uint16_t) 0xFFF);
#endif
// Ensure last cluster is written if it is the first half
pushCluster (buffer, sector, cluster, rest, (uint16_t) 0x000);
@@ -540,11 +503,6 @@ int32_t fat12Read(uint8_t * buffer, uint16_t sector, uint16_t count)
address += FIRMWARE_ADDRESS;
memcpy(buffer, (uint8_t *)address, BLOCK_SIZE);
}
#if defined(EEPROM)
else if (sector < RESERVED_SECTORS + (EEPROM_SIZE/BLOCK_SIZE) + (FLASHSIZE/BLOCK_SIZE)) {
eepromReadBlock(buffer, (sector - RESERVED_SECTORS - (FLASHSIZE/BLOCK_SIZE))*BLOCK_SIZE, BLOCK_SIZE);
}
#endif
buffer += BLOCK_SIZE ;
sector++ ;
count-- ;
@@ -602,27 +560,6 @@ int32_t fat12Write(const uint8_t * buffer, uint16_t sector, uint16_t count)
}
#endif
}
#if defined(EEPROM)
else if (sector < RESERVED_SECTORS + (EEPROM_SIZE/BLOCK_SIZE) + (FLASHSIZE/BLOCK_SIZE)) {
// eeprom
while (count) {
if (operation == FATWRITE_NONE && isEepromStart(buffer)) {
TRACE("EEPROM start found in sector %d", sector);
operation = FATWRITE_EEPROM;
}
if (operation == FATWRITE_EEPROM) {
eepromWriteBlock((uint8_t *)buffer, (sector-RESERVED_SECTORS-(FLASHSIZE/BLOCK_SIZE))*BLOCK_SIZE, BLOCK_SIZE);
}
buffer += BLOCK_SIZE;
sector++;
count--;
if (sector-RESERVED_SECTORS >= (EEPROM_SIZE/BLOCK_SIZE)+(FLASHSIZE/BLOCK_SIZE)) {
TRACE("EEPROM end written at sector %d", sector-1);
operation = FATWRITE_NONE;
}
}
}
#endif
return 0 ;
}
#endif
+1 -2
View File
@@ -12,7 +12,6 @@ option(MODULE_SIZE_STD "Standard size TX Module" ON)
set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)")
set(CPU_TYPE STM32F4)
set(HSE_VALUE 12000000)
set(SDCARD YES)
set(STORAGE_MODELSLIST YES)
set(HAPTIC YES)
set(GUI_DIR colorlcd)
@@ -174,7 +173,7 @@ set(RADIO_DEPENDENCIES
)
add_definitions(-DPCBHORUS -DSTM32F429_439xx -DSTM32F429xx -DSDRAM -DCCMRAM -DCOLORLCD -DHARDWARE_KEYS)
add_definitions(-DEEPROM_VARIANT=0 -DAUDIO -DVOICE -DRTCLOCK)
add_definitions(-DAUDIO -DVOICE -DRTCLOCK)
add_definitions(-DGPS_USART_BAUDRATE=${INTERNAL_GPS_BAUDRATE})
add_definitions(-DPWR_BUTTON_${PWR_BUTTON})
add_definitions(-DSTM32_SUPPORT_32BIT_TIMERS)
-1
View File
@@ -10,7 +10,6 @@ option(MODULE_SIZE_STD "Standard size TX Module" ON)
set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)")
set(CPU_TYPE STM32F4)
set(HSE_VALUE 12000000)
set(SDCARD YES)
set(STORAGE_MODELSLIST YES)
set(HAPTIC YES)
set(GUI_DIR colorlcd)
-1
View File
@@ -9,7 +9,6 @@ option(MODULE_SIZE_STD "Standard size TX Module" ON)
set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)")
set(CPU_TYPE STM32F4)
set(HSE_VALUE 12000000)
set(SDCARD YES)
set(STORAGE_MODELSLIST YES)
set(HAPTIC YES)
set(GUI_DIR colorlcd)
+1 -1
View File
@@ -72,7 +72,7 @@ void simuMain();
#define configure_pins(...)
#if defined(SDCARD) && !defined(SKIP_FATFS_DECLARATION) && !defined(SIMU_DISKIO)
#if !defined(SKIP_FATFS_DECLARATION) && !defined(SIMU_DISKIO)
#define SIMU_USE_SDCARD
#endif
-8
View File
@@ -124,20 +124,12 @@ bool redirectToSettingsDirectory(const std::string & path)
* model (*.bin) files in /MODELS directory
*/
if (!simuSettingsDirectory.empty()) {
#if defined(SDCARD_RAW) || defined(SDCARD_YAML)
if (path == MODELS_PATH || path == RADIO_PATH) return true;
#if !defined(EEPROM_RLC)
if (path == RADIO_MODELSLIST_PATH || path == RADIO_SETTINGS_PATH)
return true;
if (startsWith(path, MODELS_PATH) && endsWith(path, MODELS_EXT))
return true;
#endif
#endif
#if defined(SDCARD_YAML)
if (path == MODELSLIST_YAML_PATH || path == RADIO_SETTINGS_YAML_PATH || path == RADIO_SETTINGS_TMPFILE_YAML_PATH || path == RADIO_SETTINGS_ERRORFILE_YAML_PATH)
return true;
if (startsWith(path, MODELS_PATH) && endsWith(path, YAML_EXT)) return true;
#endif
}
return false;
}
-19
View File
@@ -13,7 +13,6 @@ set(HARDWARE_EXTERNAL_MODULE YES)
set(TARGET_DIR taranis)
set(HSE_VALUE 12000000)
set(SDCARD YES)
set(TARGET_DIR taranis)
set(PPM_LIMITS_SYMETRICAL YES)
@@ -27,7 +26,6 @@ if(PCB STREQUAL X9E)
set(HAPTIC YES)
set(FLAVOUR x9e)
add_definitions(-DPCBX9E -DPCBX9)
add_definitions(-DEEPROM_VARIANT=0x8000)
add_definitions(-DPWR_BUTTON_${PWR_BUTTON})
set(FIRMWARE_TARGET_SRC
${FIRMWARE_TARGET_SRC}
@@ -50,7 +48,6 @@ if(PCB STREQUAL X9E)
elseif(PCB STREQUAL X9D+)
set(HAPTIC YES)
add_definitions(-DPCBX9DP -DPCBX9)
add_definitions(-DEEPROM_VARIANT=0)
set(GUI_DIR 212x64)
set(BITMAPS_DIR 212x64)
set(BITMAPS_TARGET taranis_bitmaps)
@@ -89,7 +86,6 @@ elseif(PCB STREQUAL X9D)
set(CPU_TYPE_FULL STM32F205xE)
option(HAPTIC "Haptic support" ON) # While the X9D doesn't have haptic OOTB, it can be added
add_definitions(-DPCBX9D -DPCBX9)
add_definitions(-DEEPROM_VARIANT=0)
set(GUI_DIR 212x64)
set(BITMAPS_DIR 212x64)
set(BITMAPS_TARGET taranis_bitmaps)
@@ -118,7 +114,6 @@ elseif(PCB STREQUAL X7)
set(CPU_TYPE_FULL STM32F205xE)
add_definitions(-DRADIO_T12)
add_definitions(-DRADIO_FAMILY_JUMPER_T12)
add_definitions(-DEEPROM_VARIANT=0x4001)
add_definitions(-DMANUFACTURER_JUMPER)
elseif(PCBREV STREQUAL TPRO)
set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module")
@@ -129,7 +124,6 @@ elseif(PCB STREQUAL X7)
set(CPU_TYPE_FULL STM32F205xE)
add_definitions(-DFUNCTION_SWITCHES)
add_definitions(-DRADIO_TPRO)
add_definitions(-DEEPROM_VARIANT=0x4005)
add_definitions(-DMANUFACTURER_JUMPER)
set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough")
elseif(PCBREV STREQUAL TPROV2)
@@ -211,7 +205,6 @@ elseif(PCB STREQUAL X7)
set(CPU_TYPE_FULL STM32F205xE)
add_definitions(-DRADIO_TLITE)
add_definitions(-DRADIO_FAMILY_JUMPER_T12)
add_definitions(-DEEPROM_VARIANT=0x4003)
add_definitions(-DMANUFACTURER_JUMPER)
set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough")
elseif(PCBREV STREQUAL TLITEF4)
@@ -222,7 +215,6 @@ elseif(PCB STREQUAL X7)
set(CPU_TYPE_FULL STM32F407xE) # for size report
add_definitions(-DRADIO_TLITE)
add_definitions(-DRADIO_FAMILY_JUMPER_T12)
add_definitions(-DEEPROM_VARIANT=0x4003)
add_definitions(-DMANUFACTURER_JUMPER)
set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough")
elseif(PCBREV STREQUAL LR3PRO)
@@ -245,7 +237,6 @@ elseif(PCB STREQUAL X7)
set(BLUETOOTH NO)
set(USB_CHARGER YES)
add_definitions(-DRADIO_TX12)
add_definitions(-DEEPROM_VARIANT=0x4002)
add_definitions(-DMANUFACTURER_RADIOMASTER)
elseif(PCBREV STREQUAL TX12MK2)
set(DEFAULT_INTERNAL_MODULE CROSSFIRE CACHE STRING "Default internal module")
@@ -259,7 +250,6 @@ elseif(PCB STREQUAL X7)
set(AUX_SERIAL ON)
endif()
add_definitions(-DRADIO_TX12MK2)
add_definitions(-DEEPROM_VARIANT=0x4008)
add_definitions(-DMANUFACTURER_RADIOMASTER)
set(PXX2 ON)
set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough")
@@ -306,7 +296,6 @@ elseif(PCB STREQUAL X7)
set(ROTARY_ENCODER YES)
set(USB_CHARGER YES)
add_definitions(-DRADIO_ZORRO)
add_definitions(-DEEPROM_VARIANT=0x4006)
add_definitions(-DMANUFACTURER_RADIOMASTER)
set(PXX2 ON)
set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough")
@@ -340,7 +329,6 @@ elseif(PCB STREQUAL X7)
set(BIND_KEY YES)
endif()
add_definitions(-DRADIO_T8)
add_definitions(-DEEPROM_VARIANT=0x4004)
add_definitions(-DMANUFACTURER_RADIOMASTER)
elseif(PCBREV STREQUAL COMMANDO8)
set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module")
@@ -362,7 +350,6 @@ elseif(PCB STREQUAL X7)
set(FLAVOUR x7access)
set(CPU_TYPE_FULL STM32F407xE)
add_definitions(-DRADIO_X7ACCESS)
add_definitions(-DEEPROM_VARIANT=0x4000)
add_definitions(-DPCBREV=${PCBREV})
add_definitions(-DPCBX7ACCESS)
add_definitions(-DHARDWARE_POWER_MANAGEMENT_UNIT)
@@ -376,7 +363,6 @@ elseif(PCB STREQUAL X7)
set(FLAVOUR x7)
set(CPU_TYPE_FULL STM32F205xE)
add_definitions(-DRADIO_X7)
add_definitions(-DEEPROM_VARIANT=0x4000)
set(BLUETOOTH YES)
add_definitions(-DBLUETOOTH_PROBE)
set(ROTARY_ENCODER YES)
@@ -402,7 +388,6 @@ elseif(PCB STREQUAL X9LITE)
set(FLAVOUR x9lite)
add_definitions(-DBOARD_NAME="x9lite")
add_definitions(-DPCBX9LITE -DPCBX9 -DSOFTWARE_VOLUME -DHARDWARE_POWER_MANAGEMENT_UNIT)
add_definitions(-DEEPROM_VARIANT=0x0800)
add_definitions(-DPWR_BUTTON_${PWR_BUTTON})
set(PXX2 ON)
set(GUI_DIR 128x64)
@@ -424,7 +409,6 @@ elseif(PCB STREQUAL X9LITES)
set(FLAVOUR x9lites)
add_definitions(-DBOARD_NAME="x9lites")
add_definitions(-DPCBX9LITES -DPCBX9LITE -DPCBX9 -DSOFTWARE_VOLUME -DHARDWARE_POWER_MANAGEMENT_UNIT)
add_definitions(-DEEPROM_VARIANT=0x0801)
add_definitions(-DPWR_BUTTON_${PWR_BUTTON})
set(PXX2 ON)
set(GUI_DIR 128x64)
@@ -446,7 +430,6 @@ elseif(PCB STREQUAL XLITE)
set(HAPTIC YES)
set(FLAVOUR xlite)
add_definitions(-DPCBXLITE -DSOFTWARE_VOLUME)
add_definitions(-DEEPROM_VARIANT=0x2000)
add_definitions(-DPWR_BUTTON_${PWR_BUTTON})
set(PXX2 ON)
set(GUI_DIR 128x64)
@@ -467,7 +450,6 @@ elseif(PCB STREQUAL XLITES)
set(HAPTIC YES)
set(FLAVOUR xlites)
add_definitions(-DPCBXLITES -DPCBXLITE -DSOFTWARE_VOLUME -DHARDWARE_POWER_MANAGEMENT_UNIT)
add_definitions(-DEEPROM_VARIANT=0x1000)
add_definitions(-DPWR_BUTTON_${PWR_BUTTON})
set(GUI_DIR 128x64)
set(BITMAPS_DIR 128x64)
@@ -572,7 +554,6 @@ set(BOOTLOADER_SRC ${BOOTLOADER_SRC} $<TARGET_OBJECTS:board_bl>)
add_library(board OBJECT EXCLUDE_FROM_ALL
${BOARD_COMMON_SRC}
${TARGET_SRC_DIR}/volume_i2c.cpp
${TARGET_SRC_DIR}/eeprom_driver.cpp
targets/common/arm/stm32/audio_dac_driver.cpp
targets/common/arm/stm32/delays_driver.cpp
targets/common/arm/stm32/heartbeat_driver.cpp
@@ -77,12 +77,7 @@ void bootloaderDrawScreen(BootloaderState st, int opt, const char *str)
if (st == ST_START) {
lcdDrawText(3*FW, 2*FH, TR_BL_WRITE_FW, opt == 0 ? INVERS : 0);
#if defined(EEPROM)
lcdDrawText(3*FW, 3*FH, TR_BL_RESTORE_EEPROM, opt == 1 ? INVERS : 0);
lcdDrawText(3*FW, 4*FH, TR_BL_EXIT, opt == 2 ? INVERS : 0);
#else
lcdDrawText(3*FW, 3*FH, TR_BL_EXIT, opt == 1 ? INVERS : 0);
#endif
lcdDrawText(LCD_W / 2, 5 * FH + FH / 2, TR_BL_OR_PLUGIN_USB_CABLE, CENTERED);
-21
View File
@@ -15,24 +15,6 @@ if(Qt5Widgets_FOUND)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS_DEBUG} -O0 -fsanitize=address")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_DEBUG} -O0 ${WARNING_FLAGS} -fsanitize=address")
if(PCB STREQUAL X12S OR PCB STREQUAL X10)
set(EXTRACT_MODEL_FILES model_23_x12s model_23_x10 model_25_tx16s)
foreach(model_file ${EXTRACT_MODEL_FILES})
add_custom_command(
DEPENDS ${TESTS_PATH}/${model_file}.otx
OUTPUT ${TESTS_BUILD_PATH}/${model_file}/RADIO/radio.bin
COMMAND mkdir -p ${model_file} && cd ${model_file} && unzip -o -q -DD ${TESTS_PATH}/${model_file}.otx >/dev/null
WORKING_DIRECTORY ${TESTS_BUILD_PATH}
)
add_custom_target(${model_file}_files
DEPENDS ${TESTS_BUILD_PATH}/${model_file}/RADIO/radio.bin
)
set(HORUS_MODEL_FILES ${HORUS_MODEL_FILES} ${model_file}_files)
endforeach()
endif()
if(WIN32)
target_include_directories(gtests-radio-lib PUBLIC ${WIN_INCLUDE_DIRS})
target_link_libraries(gtests-radio-lib PRIVATE ${WIN_LINK_LIBRARIES})
@@ -63,9 +45,6 @@ if(Qt5Widgets_FOUND)
target_compile_options(gtests-radio PRIVATE ${SIMU_SRC_OPTIONS})
add_dependencies(gtests-radio gtests-radio-lib)
if(PCB STREQUAL X12S OR PCB STREQUAL X10)
add_dependencies(gtests-radio ${HORUS_MODEL_FILES})
endif()
target_link_libraries(gtests-radio gtests-radio-lib pthread Qt5::Core Qt5::Widgets)
message(STATUS "Added optional gtests target")
endif()
-550
View File
@@ -1,550 +0,0 @@
/*
* Copyright (C) EdgeTX
*
* Based on code named
* opentx - https://github.com/opentx/opentx
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include "gtests.h"
#include "location.h"
// TODO: Remove this file, and the eeprom_*.bin and model_*.otx files.
#if 0
#if defined(SDCARD_YAML)
#include <storage/sdcard_yaml.h>
#endif
#if defined(PCBX9DP)
TEST(Conversions, ConversionX9DPFrom23)
{
#if defined(SDCARD_YAML)
simuFatfsSetPaths(TESTS_BUILD_PATH "/", TESTS_BUILD_PATH "/");
sdCheckAndCreateDirectory(RADIO_PATH);
sdCheckAndCreateDirectory(MODELS_PATH);
#endif
loadEEPROMFile(TESTS_PATH "/eeprom_23_x9d+.bin");
eepromOpen();
#if defined(EEPROM)
eeLoadGeneralSettingsData();
convertRadioData_219_to_220(g_eeGeneral);
#else
convertRadioData_219_to_220();
convertRadioData_220_to_221();
EXPECT_EQ(nullptr, loadRadioSettings());
#endif
eeConvertModel(0, 219);
loadModel((uint8_t)0);
EXPECT_EQ(-30, g_eeGeneral.vBatMin);
EXPECT_EQ(8, g_eeGeneral.speakerVolume);
EXPECT_EQ('e', g_eeGeneral.ttsLanguage[0]);
EXPECT_EQ('n', g_eeGeneral.ttsLanguage[1]);
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_eeGeneral.customFn[0].swtch);
EXPECT_EQ(FUNC_LOGS, g_eeGeneral.customFn[0].func);
EXPECT_EQ(20, g_eeGeneral.customFn[0].all.val);
EXPECT_STRNEQ("Tes", g_eeGeneral.switchNames[0]); // ZSTREQ
EXPECT_EQ(SWITCH_3POS, SWITCH_CONFIG(0));
swarnstate_t state =
(0x01) | // SA up
(0x03 << (3 * 1)) | // SB down
(0x02 << (3 * 2)) | // SC middle
(0x01 << (3 * 3)) | // SD up
(0x02 << (3 * 4)) | // SE middle
(0x03 << (3 * 5)) | // SF down
(0x02 << (3 * 6)); // SG middle
// check only the "allowed switches"
EXPECT_EQ(state, g_model.switchWarning & 0xFFFFF);
EXPECT_STRNEQ("Test", g_model.header.name); // ZSTREQ
EXPECT_EQ(TMRMODE_ON, g_model.timers[0].mode); // new!
EXPECT_EQ(SWSRC_SA0, g_model.timers[0].swtch); // new!
EXPECT_EQ(80, g_model.mixData[0].weight);
EXPECT_EQ(-100, g_model.limitData[0].max); // 90.0
EXPECT_EQ(80, g_model.expoData[0].weight);
EXPECT_EQ(10, g_model.flightModeData[0].gvars[0]);
EXPECT_STRNEQ("Tes", g_model.gvars[0].name); // ZSTREQ
EXPECT_STRNEQ("Test", g_model.flightModeData[0].name); // ZSTREQ
// Please note: we don't wipe the model's module settings
// in case the module is not supported anymore.
//
// #if defined(INTERNAL_MODULE_PXX2)
EXPECT_EQ(MODULE_TYPE_ISRM_PXX2, g_model.moduleData[INTERNAL_MODULE].type);
EXPECT_EQ(MODULE_SUBTYPE_ISRM_PXX2_ACCST_D16, g_model.moduleData[INTERNAL_MODULE].subType);
// #else
// EXPECT_EQ(MODULE_TYPE_NONE, g_model.moduleData[INTERNAL_MODULE].type);
// #endif
EXPECT_EQ(MODULE_TYPE_R9M_PXX1, g_model.moduleData[EXTERNAL_MODULE].type);
EXPECT_EQ(MODULE_SUBTYPE_R9M_FCC, g_model.moduleData[EXTERNAL_MODULE].subType);
EXPECT_STRNEQ("Rud", g_model.inputNames[0]); // ZSTREQ
EXPECT_STRNEQ("Tes", g_model.telemetrySensors[0].label); // ZSTREQ
EXPECT_EQ(10, g_model.telemetrySensors[0].id);
EXPECT_EQ(10, g_model.telemetrySensors[0].frskyInstance.physID);
EXPECT_EQ(MIXSRC_FIRST_TELEM, g_model.logicalSw[0].v1);
EXPECT_STRNEQ("abc.wav", g_model.customFn[1].play.name);
#if defined(SDCARD_YAML)
simuFatfsSetPaths("","");
#endif
}
TEST(Conversions, ConversionX9DPFrom23_2)
{
#if defined(SDCARD_YAML)
simuFatfsSetPaths(TESTS_BUILD_PATH "/", TESTS_BUILD_PATH "/");
sdCheckAndCreateDirectory(RADIO_PATH);
sdCheckAndCreateDirectory(MODELS_PATH);
#endif
loadEEPROMFile(TESTS_PATH "/eeprom_23_x9d+2.bin");
eepromOpen();
#if defined(EEPROM)
eeLoadGeneralSettingsData();
convertRadioData_219_to_220(g_eeGeneral);
#else
convertRadioData_219_to_220();
convertRadioData_220_to_221();
EXPECT_EQ(nullptr, loadRadioSettings());
#endif
eeConvertModel(6, 219);
loadModel((uint8_t)6);
EXPECT_EQ(710, g_eeGeneral.calib[0].spanNeg);
EXPECT_EQ(944, g_eeGeneral.calib[0].mid);
EXPECT_EQ(770, g_eeGeneral.calib[0].spanPos);
EXPECT_EQ(TMRMODE_ON, g_model.timers[0].mode); // new!
EXPECT_EQ(-SWSRC_SA0, g_model.timers[0].swtch); // new!
#if defined(SDCARD_YAML)
simuFatfsSetPaths("","");
#endif
}
#endif
#if defined(PCBXLITE) && !defined(PCBXLITES)
TEST(Conversions, ConversionXLiteFrom23)
{
#if defined(SDCARD_YAML)
simuFatfsSetPaths(TESTS_BUILD_PATH "/", TESTS_BUILD_PATH "/");
sdCheckAndCreateDirectory(RADIO_PATH);
sdCheckAndCreateDirectory(MODELS_PATH);
#endif
loadEEPROMFile(TESTS_PATH "/eeprom_23_xlite.bin");
eepromOpen();
#if defined(EEPROM)
eeLoadGeneralSettingsData();
convertRadioData_219_to_220(g_eeGeneral);
#else
convertRadioData_219_to_220();
convertRadioData_220_to_221();
EXPECT_EQ(nullptr, loadRadioSettings());
#endif
eeConvertModel(0, 219);
loadModel((uint8_t)0);
EXPECT_EQ(-30, g_eeGeneral.vBatMin);
EXPECT_EQ(8, g_eeGeneral.speakerVolume);
EXPECT_EQ('e', g_eeGeneral.ttsLanguage[0]);
EXPECT_EQ('n', g_eeGeneral.ttsLanguage[1]);
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_eeGeneral.customFn[0].swtch);
EXPECT_EQ(FUNC_LOGS, g_eeGeneral.customFn[0].func);
EXPECT_EQ(20, g_eeGeneral.customFn[0].all.val);
EXPECT_STRNEQ("Tes", g_eeGeneral.switchNames[0]);
EXPECT_EQ(SWITCH_3POS, SWITCH_CONFIG(0));
EXPECT_STRNEQ("Test", g_model.header.name);
EXPECT_EQ(MODULE_TYPE_R9M_PXX1, g_model.moduleData[EXTERNAL_MODULE].type);
EXPECT_EQ(MODULE_SUBTYPE_R9M_EU, g_model.moduleData[EXTERNAL_MODULE].subType);
EXPECT_EQ(80, g_model.mixData[0].weight);
EXPECT_EQ(80, g_model.expoData[0].weight);
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.mixData[4].srcRaw);
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_model.mixData[4].swtch);
EXPECT_EQ(SWASH_TYPE_120X, g_model.swashR.type);
EXPECT_STRNEQ("Thr", g_model.inputNames[0]);
EXPECT_STRNEQ("Tes", g_model.telemetrySensors[0].label);
EXPECT_EQ(10, g_model.telemetrySensors[0].id);
EXPECT_EQ(8, g_model.telemetrySensors[0].frskyInstance.physID);
EXPECT_EQ(-100, g_model.limitData[0].max); // 90.0
EXPECT_EQ(LS_FUNC_VPOS, g_model.logicalSw[0].func);
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.logicalSw[0].v1);
EXPECT_EQ(0, g_model.logicalSw[0].v2);
EXPECT_EQ(TELEMETRY_SCREEN_TYPE_VALUES, g_model.screensType & 0x03);
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.screens[0].lines[0].sources[0]);
EXPECT_EQ(MIXSRC_TIMER3, g_model.screens[0].lines[0].sources[1]);
#if defined(SDCARD_YAML)
simuFatfsSetPaths("","");
#endif
}
#endif
#if defined(RADIO_X7) && (STORAGE_CONVERSIONS <= 219)
static swarnstate_t get_configured_switch_warn_mask()
{
swarnstate_t mask = 0;
for (uint8_t i=0; i<NUM_SWITCHES; i++) {
if (SWITCH_CONFIG(i) != 0)
mask |= 7 << (3 * i);
}
return mask;
}
TEST(Conversions, ConversionX7From23)
{
#if defined(SDCARD_YAML)
simuFatfsSetPaths(TESTS_BUILD_PATH "/", TESTS_BUILD_PATH "/");
sdCheckAndCreateDirectory(RADIO_PATH);
sdCheckAndCreateDirectory(MODELS_PATH);
#endif
loadEEPROMFile(TESTS_PATH "/eeprom_23_x7.bin");
eepromOpen();
#if defined(EEPROM)
eeLoadGeneralSettingsData();
convertRadioData_218_to_219(g_eeGeneral);
#else
convertRadioData_219_to_220();
convertRadioData_220_to_221();
EXPECT_EQ(nullptr, loadRadioSettings());
#endif
eeConvertModel(0, 219);
loadModel((uint8_t)0);
EXPECT_EQ(-30, g_eeGeneral.vBatMin);
EXPECT_EQ(8, g_eeGeneral.speakerVolume);
EXPECT_EQ('e', g_eeGeneral.ttsLanguage[0]);
EXPECT_EQ('n', g_eeGeneral.ttsLanguage[1]);
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_eeGeneral.customFn[0].swtch);
EXPECT_EQ(FUNC_LOGS, g_eeGeneral.customFn[0].func);
EXPECT_EQ(20, g_eeGeneral.customFn[0].all.val);
EXPECT_STRNEQ("Tes", g_eeGeneral.switchNames[0]);
EXPECT_EQ(SWITCH_3POS, SWITCH_CONFIG(0));
swarnstate_t state =
(0x02) | // SA middle
(0x01 << (3 * 1)) | // SB up
(0x03 << (3 * 2)) | // SC down
(0x03 << (3 * 4)) | // SF down
(0x01 << (3 * 5)); // SH up
// check only configured switches (as the code does)
swarnstate_t sw_mask = get_configured_switch_warn_mask();
EXPECT_EQ(state & sw_mask, g_model.switchWarning & sw_mask);
EXPECT_STRNEQ("Test", g_model.header.name);
EXPECT_EQ(MODULE_TYPE_R9M_PXX1, g_model.moduleData[EXTERNAL_MODULE].type);
EXPECT_EQ(MODULE_SUBTYPE_R9M_EU, g_model.moduleData[EXTERNAL_MODULE].subType);
EXPECT_EQ(80, g_model.mixData[0].weight);
EXPECT_EQ(80, g_model.expoData[0].weight);
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.mixData[4].srcRaw);
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_model.mixData[4].swtch);
EXPECT_EQ(SWASH_TYPE_120X, g_model.swashR.type);
EXPECT_STRNEQ("Thr", g_model.inputNames[0]);
EXPECT_STRNEQ("Tes", g_model.telemetrySensors[0].label);
EXPECT_EQ(10, g_model.telemetrySensors[0].id);
EXPECT_EQ(9, g_model.telemetrySensors[0].frskyInstance.physID);
EXPECT_EQ(-100, g_model.limitData[0].max); // 90.0
EXPECT_EQ(10, g_model.flightModeData[0].gvars[0]);
EXPECT_STRNEQ("FMtest", g_model.flightModeData[1].name);
EXPECT_EQ(45, g_model.flightModeData[1].swtch);
EXPECT_STRNEQ("Tes", g_model.gvars[0].name);
EXPECT_EQ(LS_FUNC_VPOS, g_model.logicalSw[0].func);
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.logicalSw[0].v1);
EXPECT_EQ(0, g_model.logicalSw[0].v2);
EXPECT_EQ(TELEMETRY_SCREEN_TYPE_VALUES, g_model.screensType & 0x03);
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.screens[0].lines[0].sources[0]);
EXPECT_EQ(MIXSRC_TIMER3, g_model.screens[0].lines[0].sources[1]);
#if defined(SDCARD_YAML)
simuFatfsSetPaths("","");
#endif
}
#endif
#if defined(PCBX10) && !defined(RADIO_FAMILY_T16)
TEST(Conversions, ConversionX10From23)
{
simuFatfsSetPaths(TESTS_BUILD_PATH "/model_23_x10/", TESTS_BUILD_PATH "/model_23_x10/");
convertRadioData_219_to_220("/RADIO/radio.bin");
convertRadioData_220_to_221("/RADIO/radio.bin");
EXPECT_EQ(nullptr, loadRadioSettings());
char modelname[] = "model1.bin";
convertBinModelData(modelname, 219);
EXPECT_EQ(nullptr, readModel(modelname,(uint8_t*)&g_model, sizeof(g_model)));
EXPECT_EQ(100, g_eeGeneral.calib[CALIBRATED_SLIDER_REAR_LEFT].spanNeg);
EXPECT_EQ(500, g_eeGeneral.calib[CALIBRATED_SLIDER_REAR_LEFT].mid);
EXPECT_EQ(900, g_eeGeneral.calib[CALIBRATED_SLIDER_REAR_LEFT].spanPos);
EXPECT_EQ(200, g_eeGeneral.calib[CALIBRATED_SLIDER_REAR_RIGHT].spanNeg);
EXPECT_EQ(400, g_eeGeneral.calib[CALIBRATED_SLIDER_REAR_RIGHT].mid);
EXPECT_EQ(600, g_eeGeneral.calib[CALIBRATED_SLIDER_REAR_RIGHT].spanPos);
EXPECT_EQ(-23, g_eeGeneral.vBatMin);
EXPECT_EQ(8, g_eeGeneral.speakerVolume);
EXPECT_STRNEQ("en", g_eeGeneral.ttsLanguage);
EXPECT_STRNEQ("model1.yml", g_eeGeneral.currModelFilename);
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_eeGeneral.customFn[0].swtch);
EXPECT_EQ(FUNC_LOGS, g_eeGeneral.customFn[0].func);
EXPECT_EQ(20, g_eeGeneral.customFn[0].all.val);
EXPECT_EQ(SWSRC_ON, g_eeGeneral.customFn[1].swtch);
EXPECT_EQ(FUNC_VOLUME, g_eeGeneral.customFn[1].func);
EXPECT_EQ(MIXSRC_RS, g_eeGeneral.customFn[1].all.val);
EXPECT_STRNEQ("Tes", g_eeGeneral.switchNames[0]);
EXPECT_EQ(SWITCH_3POS, SWITCH_CONFIG(0));
EXPECT_STRNEQ("BT_X10", g_eeGeneral.bluetoothName);
EXPECT_STREQ("EdgeTX", g_eeGeneral.themeName);
EXPECT_STRNEQ("Test", g_model.header.name);
EXPECT_EQ(0, g_model.noGlobalFunctions);
EXPECT_EQ(0, g_model.beepANACenter);
EXPECT_EQ(80, g_model.mixData[0].weight);
EXPECT_EQ(MIXSRC_MAX, g_model.mixData[2].srcRaw); // MAX
EXPECT_EQ(MIXSRC_LS, g_model.mixData[3].srcRaw); // LS
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.mixData[5].srcRaw);
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_model.mixData[5].swtch);
EXPECT_EQ(-100, g_model.limitData[0].max); // 90.0
EXPECT_EQ(80, g_model.expoData[0].weight);
EXPECT_EQ(LS_FUNC_VPOS, g_model.logicalSw[0].func);
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.logicalSw[0].v1);
EXPECT_EQ(0, g_model.logicalSw[0].v2);
EXPECT_EQ(MIXSRC_FIRST_TELEM+19*3, g_model.logicalSw[1].v1); // TELE:20
EXPECT_EQ(20, g_model.logicalSw[1].v2);
EXPECT_EQ(SWSRC_FIRST_LOGICAL_SWITCH, g_model.logicalSw[1].andsw);
EXPECT_EQ(SWASH_TYPE_120X, g_model.swashR.type);
EXPECT_STRNEQ("Tes", g_model.flightModeData[0].name);
EXPECT_EQ(10, g_model.flightModeData[0].gvars[0]);
EXPECT_STRNEQ("Tes", g_model.gvars[0].name);
EXPECT_EQ(MODULE_TYPE_R9M_PXX1, g_model.moduleData[EXTERNAL_MODULE].type);
EXPECT_EQ(MODULE_SUBTYPE_R9M_EU, g_model.moduleData[EXTERNAL_MODULE].subType);
EXPECT_STRNEQ("Rud", g_model.inputNames[0]);
EXPECT_STRNEQ("Tes", g_model.telemetrySensors[0].label);
EXPECT_EQ(10, g_model.telemetrySensors[0].id);
EXPECT_EQ(9, g_model.telemetrySensors[0].frskyInstance.physID);
EXPECT_EQ(source2ThrottleSource(MIXSRC_CH3), g_model.thrTraceSrc); // CH3
simuFatfsSetPaths("","");
}
#endif
#if defined(PCBX12S)
TEST(Conversions, ConversionX12SFrom23)
{
simuFatfsSetPaths(TESTS_BUILD_PATH "/model_23_x12s/", TESTS_BUILD_PATH "/model_23_x12s/");
convertRadioData_219_to_220("/RADIO/radio.bin");
convertRadioData_220_to_221("/RADIO/radio.bin");
EXPECT_EQ(nullptr, loadRadioSettings());
char modelname[] = "model1.bin";
convertBinModelData(modelname, 219);
EXPECT_EQ(nullptr, readModel(modelname,(uint8_t*)&g_model, sizeof(g_model)));
EXPECT_EQ(-30, g_eeGeneral.vBatMin);
EXPECT_EQ(8, g_eeGeneral.speakerVolume);
EXPECT_STRNEQ("en", g_eeGeneral.ttsLanguage);
EXPECT_STRNEQ("model1.yml", g_eeGeneral.currModelFilename);
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_eeGeneral.customFn[0].swtch);
EXPECT_EQ(FUNC_LOGS, g_eeGeneral.customFn[0].func);
EXPECT_EQ(20, g_eeGeneral.customFn[0].all.val);
EXPECT_EQ(SWSRC_ON, g_eeGeneral.customFn[1].swtch);
EXPECT_EQ(FUNC_VOLUME, g_eeGeneral.customFn[1].func);
EXPECT_EQ(MIXSRC_RS, g_eeGeneral.customFn[1].all.val);
EXPECT_STRNEQ("Tes", g_eeGeneral.switchNames[0]);
EXPECT_EQ(SWITCH_3POS, SWITCH_CONFIG(0));
EXPECT_STRNEQ("BT", g_eeGeneral.bluetoothName);
EXPECT_STREQ("EdgeTX", g_eeGeneral.themeName);
EXPECT_STRNEQ("Test", g_model.header.name);
EXPECT_EQ(0, g_model.noGlobalFunctions);
EXPECT_EQ(0, g_model.beepANACenter);
EXPECT_EQ(80, g_model.mixData[0].weight);
EXPECT_EQ(MIXSRC_MAX, g_model.mixData[2].srcRaw); // MAX
EXPECT_EQ(MIXSRC_LS, g_model.mixData[3].srcRaw); // LS
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.mixData[5].srcRaw);
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_model.mixData[5].swtch);
EXPECT_EQ(-100, g_model.limitData[0].max); // 90.0
EXPECT_EQ(80, g_model.expoData[0].weight);
EXPECT_EQ(LS_FUNC_VPOS, g_model.logicalSw[0].func);
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.logicalSw[0].v1);
EXPECT_EQ(0, g_model.logicalSw[0].v2);
EXPECT_EQ(MIXSRC_FIRST_TELEM+19*3, g_model.logicalSw[1].v1); // TELE:20
EXPECT_EQ(20, g_model.logicalSw[1].v2);
EXPECT_EQ(SWSRC_FIRST_LOGICAL_SWITCH, g_model.logicalSw[1].andsw);
EXPECT_EQ(SWASH_TYPE_120X, g_model.swashR.type);
EXPECT_STRNEQ("Test", g_model.flightModeData[0].name);
EXPECT_EQ(10, g_model.flightModeData[0].gvars[0]);
EXPECT_STRNEQ("Tes", g_model.gvars[0].name);
EXPECT_EQ(MODULE_TYPE_R9M_PXX1, g_model.moduleData[EXTERNAL_MODULE].type);
EXPECT_EQ(MODULE_SUBTYPE_R9M_EU, g_model.moduleData[EXTERNAL_MODULE].subType);
EXPECT_STRNEQ("Rud", g_model.inputNames[0]);
EXPECT_STRNEQ("Tes", g_model.telemetrySensors[0].label);
EXPECT_EQ(10, g_model.telemetrySensors[0].id);
EXPECT_EQ(9, g_model.telemetrySensors[0].frskyInstance.physID);
EXPECT_EQ(source2ThrottleSource(MIXSRC_CH3), g_model.thrTraceSrc); // CH3
simuFatfsSetPaths("","");
}
#endif
#if defined(RADIO_TX16S)
TEST(Conversions, ConversionTX16SFrom25)
{
simuFatfsSetPaths(TESTS_BUILD_PATH "/model_25_tx16s/", TESTS_BUILD_PATH "/model_25_tx16s/");
convertRadioData_219_to_220("/RADIO/radio.bin");
convertRadioData_220_to_221("/RADIO/radio.bin");
EXPECT_EQ(nullptr, loadRadioSettings());
char modelname[] = "model1.bin";
convertBinModelData(modelname, 220);
EXPECT_EQ(nullptr, readModel(modelname,(uint8_t*)&g_model, sizeof(g_model)));
EXPECT_EQ(-23, g_eeGeneral.vBatMin);
EXPECT_EQ(0, g_eeGeneral.speakerVolume);
EXPECT_STRNEQ("en", g_eeGeneral.ttsLanguage);
EXPECT_STRNEQ("model1.yml", g_eeGeneral.currModelFilename);
EXPECT_STRNEQ("Model", g_model.header.name);
EXPECT_EQ(MODULE_SUBTYPE_MULTI_FRSKY, g_model.moduleData[0].multi.rfProtocol);
EXPECT_EQ(MM_RF_FRSKY_SUBTYPE_D8_CLONED, g_model.moduleData[0].subType);
EXPECT_EQ(-12, g_model.moduleData[0].multi.optionValue);
EXPECT_EQ(MODULE_TYPE_XJT_PXX1, g_model.moduleData[1].type);
EXPECT_EQ(MODULE_SUBTYPE_PXX1_ACCST_LR12, g_model.moduleData[1].subType);
EXPECT_EQ(4, g_model.moduleData[1].channelsCount); // 4 + 8 = 12
EXPECT_EQ(-SWSRC_SE0, g_model.customFn[0].swtch);
EXPECT_EQ(FUNC_OVERRIDE_CHANNEL, g_model.customFn[0].func);
EXPECT_EQ(-100, CFN_PARAM(&(g_model.customFn[0])));
EXPECT_EQ(SWSRC_TrimThrUp, g_model.customFn[1].swtch);
EXPECT_EQ(FUNC_ADJUST_GVAR, g_model.customFn[1].func);
EXPECT_EQ(FUNC_ADJUST_GVAR_INCDEC, CFN_GVAR_MODE(&(g_model.customFn[1])));
EXPECT_EQ(5, CFN_PARAM(&(g_model.customFn[1])));
EXPECT_EQ(g_model.disableTelemetryWarning, 0);
EXPECT_EQ(g_model.rfAlarms.warning, 45);
EXPECT_EQ(g_model.rfAlarms.critical, 42);
const auto& top_widget = g_model.topbarData.zones[3];
EXPECT_STRNEQ("Value", top_widget.widgetName);
const auto& top_option = top_widget.widgetData.options[0];
EXPECT_EQ(ZOV_Source, top_option.type);
EXPECT_EQ(MIXSRC_TX_VOLTAGE, top_option.value.unsignedValue);
const auto& color_option = top_widget.widgetData.options[1];
EXPECT_EQ(ZOV_Color, color_option.type);
EXPECT_EQ(0xFFFF, color_option.value.unsignedValue);
char modelname2[] = "model2.bin";
convertBinModelData(modelname2, 220);
EXPECT_EQ(nullptr, readModel(modelname2,(uint8_t*)&g_model, sizeof(g_model)));
writeModelYaml(modelname2);
EXPECT_EQ(nullptr, readModel(modelname2,(uint8_t*)&g_model, sizeof(g_model)));
constexpr swarnstate_t swWarnState =
(0x01) |// SA up
(0x02 << (3 * 2)) | // SB middle
(0x03 << (3 * 5)); // SF down
EXPECT_EQ(swWarnState, g_model.switchWarning);
EXPECT_EQ(MIXSRC_FIRST_LOGICAL_SWITCH + 4, g_model.mixData[4].srcRaw);
EXPECT_EQ(MIXSRC_SC, g_model.mixData[5].srcRaw);
EXPECT_EQ(MIXSRC_SB, g_model.mixData[6].srcRaw);
EXPECT_EQ(MIXSRC_SD, g_model.mixData[7].srcRaw);
EXPECT_EQ(LS_FUNC_EDGE, g_model.logicalSw[0].func);
EXPECT_EQ(SWSRC_SF2, g_model.logicalSw[0].v1);
EXPECT_EQ(-129, g_model.logicalSw[0].v2);
EXPECT_EQ(-1, g_model.logicalSw[0].v3);
EXPECT_EQ(SWSRC_SF2, g_model.logicalSw[0].andsw);
EXPECT_EQ(LS_FUNC_VNEG, g_model.logicalSw[1].func);
EXPECT_EQ(MIXSRC_FIRST_INPUT, g_model.logicalSw[1].v1);
EXPECT_EQ(-98, g_model.logicalSw[1].v2);
EXPECT_EQ(SWSRC_NONE, g_model.logicalSw[1].andsw);
EXPECT_EQ(LS_FUNC_AND, g_model.logicalSw[2].func);
EXPECT_EQ(SWSRC_FIRST_LOGICAL_SWITCH, g_model.logicalSw[2].v1);
EXPECT_EQ(SWSRC_FIRST_LOGICAL_SWITCH + 1, g_model.logicalSw[2].v2);
EXPECT_EQ(SWSRC_NONE, g_model.logicalSw[2].andsw);
EXPECT_EQ(LS_FUNC_AND, g_model.logicalSw[3].func);
EXPECT_EQ(SWSRC_FIRST_LOGICAL_SWITCH + 1, g_model.logicalSw[3].v1);
EXPECT_EQ(SWSRC_SF0, g_model.logicalSw[3].v2);
EXPECT_EQ(SWSRC_NONE, g_model.logicalSw[3].andsw);
EXPECT_EQ(LS_FUNC_STICKY, g_model.logicalSw[4].func);
EXPECT_EQ(SWSRC_FIRST_LOGICAL_SWITCH + 2, g_model.logicalSw[4].v1);
EXPECT_EQ(SWSRC_FIRST_LOGICAL_SWITCH + 3, g_model.logicalSw[4].v2);
EXPECT_EQ(SWSRC_NONE, g_model.logicalSw[4].andsw);
EXPECT_EQ(LS_FUNC_AND, g_model.logicalSw[5].func);
EXPECT_EQ(-(SWSRC_FIRST_LOGICAL_SWITCH + 1), g_model.logicalSw[5].v1);
EXPECT_EQ(SWSRC_FIRST_LOGICAL_SWITCH + 4, g_model.logicalSw[5].v2);
EXPECT_EQ(SWSRC_NONE, g_model.logicalSw[5].andsw);
f_unlink("/RADIO/radio.bin");
f_unlink("/MODELS/model1.bin");
f_unlink("/MODELS/model2.bin");
simuFatfsSetPaths("","");
}
#endif
#endif
-143
View File
@@ -21,8 +21,6 @@
#include "gtests.h"
extern const char * eepromFile;
#if defined(RTC_BACKUP_RAM)
#include "storage/rtc_backup.h"
namespace Backup {
@@ -45,144 +43,3 @@ TEST(Storage, BackupAndRestore)
TRACE("ERROR restore");
}
#endif
#if defined(EEPROM) && defined(EEPROM_RLC)
#include "storage/eeprom_rlc.h"
TEST(Eeprom, 100_random_writes)
{
eepromFile = NULL; // in memory
RlcFile f;
uint8_t buf[1000];
uint8_t buf2[1000];
storageFormat();
for (int i = 0; i < 100; i++) {
int size = rand() % 800;
for (int j = 0; j < size; j++) {
buf[j] = rand() < (RAND_MAX / 10000 * i) ? 0 : (j & 0xff);
}
f.writeRlc(5, 5, buf, size, 100);
// printf("size=%4d red=%4d\n\n\n", size, f.size());
f.openRd(5);
uint16_t n = f.readRlc(buf2,size+1);
EXPECT_EQ(n, size);
EXPECT_EQ(memcmp(buf, buf2, size), 0);
}
}
TEST(Eeprom, test2)
{
eepromFile = NULL; // in memory
RlcFile f;
uint8_t buf[1000];
storageFormat();
for (int i = 0; i < 1000; i++)
buf[i] = '6' + i % 4;
f.writeRlc(6, 6, buf, 300, 100);
f.openRd(6);
uint16_t sz=0;
for(int i=0; i<500; i++){
uint8_t b;
uint16_t n=f.readRlc(&b,1);
if (n) {
EXPECT_EQ(b, ('6' + sz % 4));
}
sz+=n;
}
EXPECT_EQ(sz, 300);
}
TEST(Eeprom, storageCheckImmediately)
{
eepromFile = NULL; // in memory
// RlcFile f;
uint8_t buf[1000];
storageFormat();
for (int i = 0; i < 1000; i++)
buf[i]='6'+i%4;
theFile.writeRlc(6, 6, buf, 300, false);
storageCheck(true);
theFile.openRd(6);
uint16_t sz=0;
for (int i = 0; i < 500; i++) {
uint8_t b;
uint16_t n = theFile.readRlc(&b, 1);
if (n) {
EXPECT_EQ(b, ('6' + sz % 4));
}
sz += n;
}
EXPECT_EQ(sz, 300);
}
TEST(Eeprom, copy)
{
eepromFile = NULL; // in memory
uint8_t buf[1000];
storageFormat();
for (int i = 0; i < 1000; i++)
buf[i] = '6' + i % 4;
theFile.writeRlc(5, 6, buf, 300, true);
theFile.copy(6, 5);
theFile.openRd(6);
uint16_t sz = 0;
for (int i = 0; i < 500; i++) {
uint8_t b;
uint16_t n = theFile.readRlc(&b, 1);
if (n) {
EXPECT_EQ(b, ('6' + sz % 4));
}
sz += n;
}
EXPECT_EQ(sz, 300);
}
TEST(Eeprom, rm)
{
eepromFile = NULL; // in memory
uint8_t buf[1000];
storageFormat();
for (int i = 0; i < 1000; i++)
buf[i] = '6' + i % 4;
theFile.writeRlc(5, 6, buf, 300, true);
EXPECT_EQ(EFile::exists(5), true);
EFile::rm(5);
EXPECT_EQ(EFile::exists(5), false);
theFile.openRd(5);
uint16_t sz=0;
for(int i=0; i<500; i++){
uint8_t b;
uint16_t n = theFile.readRlc(&b, 1);
if (n) {
EXPECT_EQ(b, ('6' + sz % 4));
}
sz += n;
}
EXPECT_EQ(sz, 0);
}
#endif
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -31,7 +31,7 @@
#include "bitmaps.h"
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h"
#include "stb/stb_image_write.h"
void convert_RGB565_to_RGB888(uint8_t* dst, const BitmapBuffer* src, coord_t w,
coord_t h)
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
-4
View File
@@ -114,11 +114,7 @@ TEST(evalLogicalSwitches, playFile)
extern BitField<(MAX_LOGICAL_SWITCHES * 2/*on, off*/)> sdAvailableLogicalSwitchAudioFiles;
char filename[AUDIO_FILENAME_MAXLEN+1];
//#if defined(EEPROM)
#define MODELNAME TR_MODEL "01"
/*#else
#define MODELNAME "Model00"
#endif*/
sdAvailableLogicalSwitchAudioFiles.setBit(INDEX_LOGICAL_SWITCH_AUDIO_FILE(0,AUDIO_EVENT_OFF));
sdAvailableLogicalSwitchAudioFiles.setBit(INDEX_LOGICAL_SWITCH_AUDIO_FILE(0,AUDIO_EVENT_ON));
-2
View File
@@ -11,9 +11,7 @@
#include <limits.h>
#include <stddef.h>
#if defined(SDCARD)
#define USE_FATFS
#endif
// force ANSI mode: lua_number2integer() behaves the same way on all platforms (#3826)
#define LUA_ANSI
-10
View File
@@ -858,22 +858,12 @@ const char STR_PITCH_AT_ZERO[] = TR_PITCH_AT_ZERO;
const char STR_PITCH_AT_MAX[] = TR_PITCH_AT_MAX;
const char STR_REPEAT_AT_ZERO[] = TR_REPEAT_AT_ZERO;
#if defined(EEPROM)
const char STR_BAD_RADIO_DATA[] = TR_BADEEPROMDATA;
const char STR_STORAGE_FORMAT[] = TR_EEPROMFORMATTING;
const char STR_STORAGE_WARNING[] = TR_EEPROMWARN;
const char STR_EEPROMLOWMEM[] = TR_EEPROMLOWMEM;
#else
const char STR_BAD_RADIO_DATA[] = TR_BAD_RADIO_DATA;
const char STR_STORAGE_WARNING[] = TR_STORAGE_WARNING;
const char STR_STORAGE_FORMAT[] = TR_STORAGE_FORMAT;
const char STR_SDCARD_CONVERSION_REQUIRE[] = TR_SDCARD_CONVERSION_REQUIRE;
const char STR_CONVERTING[] = TR_CONVERTING;
const char STR_RADIO_DATA_UNRECOVERABLE[] = TR_RADIO_DATA_UNRECOVERABLE;
const char STR_RADIO_DATA_RECOVERED[] = TR_RADIO_DATA_RECOVERED;
#endif
const char STR_EEPROMOVERFLOW[] = TR_EEPROMOVERFLOW;
const char STR_EEPROM_CONVERTING[] = TR_EEPROM_CONVERTING;
#if defined(LUA)
const char STR_MENUCUSTOMSCRIPTS[] = TR_MENUCUSTOMSCRIPTS;
-3
View File
@@ -725,9 +725,6 @@ extern const char STR_EXT_MULTI_SPEC[];
extern const char STR_INT_MULTI_SPEC[];
extern const char STR_WARNING[];
extern const char STR_STORAGE_WARNING[];
extern const char STR_EEPROM_CONVERTING[];
extern const char STR_SDCARD_CONVERSION_REQUIRE[];
extern const char STR_CONVERTING[];
extern const char STR_THROTTLE_UPPERCASE[];
extern const char STR_ALARMSWARN[];
extern const char STR_SWITCHWARN[];
-4
View File
@@ -655,11 +655,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "不兼容"
#define TR_WARNING "警告"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "存储"
#define TR_EEPROM_CONVERTING "转换数据"
#define TR_SDCARD_CONVERSION_REQUIRE "需要转换SD卡"
#define TR_CONVERTING "转换:"
#define TR_THROTTLE_UPPERCASE "油门"
#define TR_ALARMSWARN "警告"
#define TR_SWITCHWARN TR("开关", "开关位置")
-4
View File
@@ -667,11 +667,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "Nekompatibilní"
#define TR_WARNING "KONTROLA"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "ÚLOŽIŠTĚ"
#define TR_EEPROM_CONVERTING "Aktualizuji EEPROM"
#define TR_SDCARD_CONVERSION_REQUIRE "SD karta vyžaduje konverzi"
#define TR_CONVERTING "Konverze: "
#define TR_THROTTLE_UPPERCASE "PLYNU"
#define TR_ALARMSWARN "ALARMU"
#define TR_SWITCHWARN "POZICE"
-4
View File
@@ -659,11 +659,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "Inkompatibel"
#define TR_WARNING "ADVARSEL"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "LAGER"
#define TR_EEPROM_CONVERTING "Konverterer EEPROM"
#define TR_SDCARD_CONVERSION_REQUIRE "SD kort konvertering krævet"
#define TR_CONVERTING "Konvertering: "
#define TR_THROTTLE_UPPERCASE "GAS"
#define TR_ALARMSWARN "ALARMER"
#define TR_SWITCHWARN TR("KONTAKT", "KONTROL")
-4
View File
@@ -654,11 +654,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "Nicht kompatibel"
#define TR_WARNING "WARNUNG"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "SPEICHER"
#define TR_EEPROM_CONVERTING "EEPROM Konvertierung"
#define TR_SDCARD_CONVERSION_REQUIRE "SD Karte muss konvertiert werden"
#define TR_CONVERTING "konvertiere: "
#define TR_THROTTLE_UPPERCASE "GAS"
#define TR_ALARMSWARN "ALARM"
#define TR_SWITCHWARN "SCHALTER"
-4
View File
@@ -657,11 +657,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "Incompatible"
#define TR_WARNING "WARNING"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "STORAGE"
#define TR_EEPROM_CONVERTING "Converting EEPROM"
#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required"
#define TR_CONVERTING "Converting: "
#define TR_THROTTLE_UPPERCASE "THROTTLE"
#define TR_ALARMSWARN "ALARMS"
#define TR_SWITCHWARN TR("SWITCH", "CONTROL")
-4
View File
@@ -650,11 +650,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "Incompatible"
#define TR_WARNING "AVISO"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "ALMAC."
#define TR_EEPROM_CONVERTING "Convirtiendo EEPROM"
#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required"
#define TR_CONVERTING "Converting: "
#define TR_THROTTLE_UPPERCASE TR("ACELERAD.", "ACELERADOR")
#define TR_ALARMSWARN "ALARMAS"
#define TR_SWITCHWARN TR("INTERRUP.", "INTERRUPTOR")
-4
View File
@@ -665,11 +665,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "Incompatible"
#define TR_WARNING "WARNING"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "STORAGE"
#define TR_EEPROM_CONVERTING "EEPROM Converting"
#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required"
#define TR_CONVERTING "Converting: "
#define TR_THROTTLE_UPPERCASE "KAASU"
#define TR_ALARMSWARN "HÄLYTYKSET"
#define TR_SWITCHWARN TR("KYTKIN","CONTROL")
-4
View File
@@ -656,11 +656,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "Incompatible"
#define TR_WARNING "ALERTE"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "STOCKAGE"
#define TR_EEPROM_CONVERTING "Conversion EEPROM"
#define TR_SDCARD_CONVERSION_REQUIRE "Conversion carte SD exigée"
#define TR_CONVERTING "Convertit: "
#define TR_THROTTLE_UPPERCASE "GAZ"
#define TR_ALARMSWARN "SON"
#define TR_SWITCHWARN TR("INTERS","CONTRÔLES")
-4
View File
@@ -658,11 +658,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "Incompatible"
#define TR_WARNING "אזהרה"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "איחסון"
#define TR_EEPROM_CONVERTING "Converting EEPROM"
#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required"
#define TR_CONVERTING ":ממיר "
#define TR_THROTTLE_UPPERCASE "מצערת"
#define TR_ALARMSWARN "התראות"
#define TR_SWITCHWARN TR("SWITCH", "CONTROL")
-4
View File
@@ -653,11 +653,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "Incompatibile"
#define TR_WARNING "AVVISO"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "STORAGE"
#define TR_EEPROM_CONVERTING "Conversione EEPROM"
#define TR_SDCARD_CONVERSION_REQUIRE "Conversione SD richiesta"
#define TR_CONVERTING "Conversione: "
#define TR_THROTTLE_UPPERCASE "MOTORE"
#define TR_ALARMSWARN "ALLARMI"
#define TR_SWITCHWARN "CONTROLLI"
-4
View File
@@ -658,11 +658,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "非対応"
#define TR_WARNING "警告"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "ストレージ"
#define TR_EEPROM_CONVERTING "EEPROM変換"
#define TR_SDCARD_CONVERSION_REQUIRE "SDカードの変換が必要です"
#define TR_CONVERTING "変換: "
#define TR_THROTTLE_UPPERCASE "THROTTLE"
#define TR_ALARMSWARN "アラーム"
#define TR_SWITCHWARN TR("スイッチ", "コントロール")
-4
View File
@@ -651,11 +651,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "Niet compatibel"
#define TR_WARNING "MELDING"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "STORAGE"
#define TR_EEPROM_CONVERTING "EEPROM Converteren"
#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required"
#define TR_CONVERTING "Converting: "
#define TR_THROTTLE_UPPERCASE "GAS"
#define TR_ALARMSWARN "ALARM"
#define TR_SWITCHWARN "SCHAKELAAR"
-4
View File
@@ -652,11 +652,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "Niekompatybilne"
#define TR_WARNING "UWAGA"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "STORAGE"
#define TR_EEPROM_CONVERTING "Konwersja EEPROM"
#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required"
#define TR_CONVERTING "Konwertuję: "
#define TR_THROTTLE_UPPERCASE "GAZ"
#define TR_ALARMSWARN "ALARM"
#define TR_SWITCHWARN TR("Przełą","Kontrola")
-4
View File
@@ -662,11 +662,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "Incompativel"
#define TR_WARNING "AVISO"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "STORAGE"
#define TR_EEPROM_CONVERTING "Convertendo EEPROM"
#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required"
#define TR_CONVERTING "Convertendo: "
#define TR_THROTTLE_UPPERCASE "ACELERAD"
#define TR_ALARMSWARN "ALARMS"
#define TR_SWITCHWARN TR("SWITCH", "CONTROL")
-4
View File
@@ -661,11 +661,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "Несовмес"
#define TR_WARNING "ВНИМАНИЕ"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "ПАМЯТЬ"
#define TR_EEPROM_CONVERTING "Преобр EEPROM"
#define TR_SDCARD_CONVERSION_REQUIRE "Треб конверт SD карты"
#define TR_CONVERTING "Преобр: "
#define TR_THROTTLE_UPPERCASE "Газ"
#define TR_ALARMSWARN "СИГНАЛЫ"
#define TR_SWITCHWARN TR("ТУМБЛЕРЫ", "ТУМБЛЕРЫ")
-4
View File
@@ -670,11 +670,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "Inkompatibel"
#define TR_WARNING "VARNING"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "LAGRINGS-"
#define TR_EEPROM_CONVERTING "EEPROM konvertering"
#define TR_SDCARD_CONVERSION_REQUIRE "SD-kortet behöver konverteras"
#define TR_CONVERTING "Konverteras: "
#define TR_THROTTLE_UPPERCASE "GAS-"
#define TR_ALARMSWARN "ALARM"
#define TR_SWITCHWARN "BRYTAR-"
-4
View File
@@ -660,11 +660,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv"
#define TR_INCOMPATIBLE "不兼容"
#define TR_WARNING "警告"
#define TR_EEPROMWARN "EEPROM"
#define TR_STORAGE_WARNING "存儲"
#define TR_EEPROM_CONVERTING "轉換數據"
#define TR_SDCARD_CONVERSION_REQUIRE "需要轉換SD卡"
#define TR_CONVERTING "轉換: "
#define TR_THROTTLE_UPPERCASE "油門"
#define TR_ALARMSWARN "警告"
#define TR_SWITCHWARN TR("開關", "開關位置")
-4
View File
@@ -661,11 +661,7 @@
#define TR_INT_MULTI_SPEC "stm-opentx-noinv" /*need to be clarified by context*/
#define TR_INCOMPATIBLE "Несумісне"
#define TR_WARNING "ПОПЕРЕДЖЕННЯ"
#define TR_EEPROMWARN "EEPROM" /*use english*/
#define TR_STORAGE_WARNING "СХОВИЩЕ"
#define TR_EEPROM_CONVERTING "Перетворюю EEPROM"
#define TR_SDCARD_CONVERSION_REQUIRE "Потрібне перетворення SD карти"
#define TR_CONVERTING "Перетворення: "
#define TR_THROTTLE_UPPERCASE "ГАЗ"
#define TR_ALARMSWARN "АВАРІЇ"
#define TR_SWITCHWARN TR("ПЕРЕМИКАЧ", "УПРАВЛІННЯ")