[X7] EEPROM Variant introduced for Companion import (#4245)

* [X7] EEPROM Variant introduced for Companion import
* [X7] Also different FourCC needed if we want to use .otx files
* Allow early version of X7 firmware Eeprom to migrate to new variant (#4246)
* Allow early version of X7 firmware Eeprom to migrate to new variant
This commit is contained in:
Bertrand Songis
2017-01-16 21:52:34 +01:00
committed by GitHub
parent 979de6bfa2
commit 4d4a7471f3
5 changed files with 44 additions and 16 deletions
@@ -28,10 +28,10 @@
#define GVARS_VARIANT 0x0001
#define FRSKY_VARIANT 0x0002
#define POS3_VARIANT 0x0004
#define MAVLINK_VARIANT 0x0008
#define M128_VARIANT 0x8000
#define TARANIS_X9E_VARIANT 0x8000
#define TARANIS_X7_VARIANT 0x4000
#define SIMU_STOCK_VARIANTS (GVARS_VARIANT|FRSKY_VARIANT)
#define SIMU_M128_VARIANTS (M128_VARIANT|SIMU_STOCK_VARIANTS)
@@ -96,9 +96,11 @@ uint32_t OpenTxEepromInterface::getFourCC()
case BOARD_HORUS:
return 0x3478746F;
case BOARD_TARANIS_X7:
return 0x3678746F;
case BOARD_TARANIS_X9E:
return 0x3578746F;
case BOARD_TARANIS_X9D:
case BOARD_TARANIS_X9DP:
case BOARD_TARANIS_X9E:
return 0x3378746F;
case BOARD_SKY9X:
case BOARD_AR9X:
@@ -339,9 +341,12 @@ int OpenTxEepromInterface::save(uint8_t * eeprom, const RadioData & radioData, u
if (board == BOARD_M128) {
variant |= M128_VARIANT;
}
else if (board == BOARD_TARANIS_X9E) {
else if (IS_TARANIS_X9E(board)) {
variant |= TARANIS_X9E_VARIANT;
}
else if (IS_TARANIS_X7(board)) {
variant |= TARANIS_X7_VARIANT;
}
int result = saveRadioSettings<OpenTxGeneralData>((GeneralSettings &)radioData.generalSettings, board, version, variant);
if (!result) {
@@ -737,8 +742,10 @@ int OpenTxFirmware::getCapability(Capability capability)
return SIMU_STOCK_VARIANTS;
else if (board == BOARD_M128)
return SIMU_M128_VARIANTS;
else if (board == BOARD_TARANIS_X9E)
else if (IS_TARANIS_X9E(board))
return TARANIS_X9E_VARIANT;
else if (IS_TARANIS_X7(board))
return TARANIS_X7_VARIANT;
else
return 0;
case MavlinkTelemetry:
@@ -1054,6 +1061,12 @@ bool OpenTxEepromInterface::checkVariant(unsigned int version, unsigned int vari
return false;
}
}
else if (IS_TARANIS_X7(board)) {
if (variant != TARANIS_X7_VARIANT) {
std::cout << " wrong variant (" << variant << ")";
return false;
}
}
else if (IS_TARANIS(board)) {
if (variant != 0) {
std::cout << " wrong variant (" << variant << ")";
+8 -2
View File
@@ -117,9 +117,15 @@ const char * getFileExtension(const char * filename, uint8_t size=0, uint8_t ext
#if defined(PCBHORUS)
#define OTX_FOURCC 0x3478746F // otx for Horus
#define O9X_FOURCC 0x3178396F // we forgot it in 2.2 RC ..
#elif defined(PCBX9E)
#define OTX_FOURCC 0x3578746F // otx for Taranis X9E
#define O9X_FOURCC 0x3378396F // o9x for Taranis X9E
#elif defined(PCBX7)
#define OTX_FOURCC 0x3678746F // otx for Taranis X7
#define O9X_FOURCC 0x3378396F // o9x for Taranis X7
#elif defined(PCBTARANIS)
#define OTX_FOURCC 0x3378746F // otx for Taranis
#define O9X_FOURCC 0x3378396F // o9x for Taranis
#define OTX_FOURCC 0x3378746F // otx for Taranis X9D
#define O9X_FOURCC 0x3378396F // o9x for Taranis X9D
#elif defined(PCBSKY9X)
#define OTX_FOURCC 0x3278746F // otx for sky9x
#define O9X_FOURCC 0x3278396F // o9x for sky9x
+17 -8
View File
@@ -826,6 +826,15 @@ bool eeLoadGeneral()
}
}
#if defined(PCBX7)
if (g_eeGeneral.variant == 0) {
TRACE("Pre release EEPROM detected, variant %d instead of %d for X7 radio. Loading anyway", g_eeGeneral.variant, EEPROM_VARIANT);
g_eeGeneral.variant = EEPROM_VARIANT;
storageDirty(EE_GENERAL);
return true;
}
#endif
#if defined(PCBTARANIS)
if (g_eeGeneral.variant != EEPROM_VARIANT) {
TRACE("EEPROM variant %d instead of %d", g_eeGeneral.variant, EEPROM_VARIANT);
@@ -922,32 +931,32 @@ void eepromBackup()
char filename[60];
uint8_t buffer[1024];
FIL file;
lcdClear();
drawProgressBar(STR_WRITING);
// reset unexpectedShutdown to prevent warning when user restores EEPROM backup
g_eeGeneral.unexpectedShutdown = 0;
storageDirty(EE_GENERAL);
storageCheck(true);
// create the directory if needed...
const char * error = sdCheckAndCreateDirectory(EEPROMS_PATH);
if (error) {
POPUP_WARNING(error);
return;
}
// prepare the filename...
char * tmp = strAppend(filename, EEPROMS_PATH "/eeprom");
#if defined(RTCLOCK)
tmp = strAppendDate(tmp, true);
#endif
strAppend(tmp, EEPROM_EXT);
// open the file for writing...
f_open(&file, filename, FA_WRITE | FA_CREATE_ALWAYS);
for (int i=0; i<EEPROM_SIZE; i+=1024) {
UINT count;
eepromReadBlock(buffer, i, 1024);
@@ -955,9 +964,9 @@ void eepromBackup()
updateProgressBar(i, EEPROM_SIZE);
SIMU_SLEEP(100/*ms*/);
}
f_close(&file);
//set back unexpectedShutdown
g_eeGeneral.unexpectedShutdown = 1;
storageDirty(EE_GENERAL);
+2 -2
View File
@@ -11,7 +11,7 @@ if(PCB STREQUAL X9E)
set(LUA_EXPORT lua_export_x9e)
set(FLAVOUR x9e)
add_definitions(-DSTM32F40_41xxx -DPCBX9E)
add_definitions(-DEEPROM_VARIANT=32768)
add_definitions(-DEEPROM_VARIANT=0x8000)
set(FIRMWARE_TARGET_SRC
${FIRMWARE_TARGET_SRC}
top_lcd_driver.cpp
@@ -65,7 +65,7 @@ elseif(PCB STREQUAL X7)
set(LUA_EXPORT lua_export_x7)
set(FLAVOUR x7)
add_definitions(-DPCBX7 -DSOFTWARE_VOLUME)
add_definitions(-DEEPROM_VARIANT=0)
add_definitions(-DEEPROM_VARIANT=0x4000)
set(FIRMWARE_TARGET_SRC
${FIRMWARE_TARGET_SRC}
bluetooth_driver.cpp