chore(radio): remove EEPROM macros and related code (#5461)
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 },
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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("");
|
||||
}
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)];
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
*
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
@@ -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;
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
@@ -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.
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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[];
|
||||
|
||||
@@ -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("开关", "开关位置")
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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("スイッチ", "コントロール")
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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("ТУМБЛЕРЫ", "ТУМБЛЕРЫ")
|
||||
|
||||
@@ -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-"
|
||||
|
||||
@@ -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("開關", "開關位置")
|
||||
|
||||
@@ -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("ПЕРЕМИКАЧ", "УПРАВЛІННЯ")
|
||||
|
||||
Reference in New Issue
Block a user