1
0
Fork 0
mirror of https://github.com/EdgeTX/edgetx.git synced 2025-07-25 01:05:08 +03:00

Bootloader can now be flashed from the SD Manager

This commit is contained in:
bsongis 2014-04-08 21:06:58 +02:00
parent fd92c3877b
commit ff7a4599e9
20 changed files with 66 additions and 10 deletions

View file

@ -19,3 +19,4 @@
/BMP /BMP
/traces /traces
/MODELS /MODELS
/FIRMWARES

View file

@ -635,7 +635,7 @@ ifeq ($(PCB), TARANIS)
EXTRAINCDIRS += targets/taranis/STM32_USB-Host-Device_Lib_V2.1.0/Libraries/STM32_USB_OTG_Driver/inc targets/taranis/STM32_USB-Host-Device_Lib_V2.1.0/Libraries/STM32_USB_Device_Library/Core/inc EXTRAINCDIRS += targets/taranis/STM32_USB-Host-Device_Lib_V2.1.0/Libraries/STM32_USB_OTG_Driver/inc targets/taranis/STM32_USB-Host-Device_Lib_V2.1.0/Libraries/STM32_USB_Device_Library/Core/inc
EXTRAINCDIRS += targets/taranis/STM32_USB-Host-Device_Lib_V2.1.0/Libraries/STM32_USB_Device_Library/Class/msc/inc targets/taranis/STM32_USB-Host-Device_Lib_V2.1.0/Libraries/STM32_USB_Device_Library/Class/hid/inc EXTRAINCDIRS += targets/taranis/STM32_USB-Host-Device_Lib_V2.1.0/Libraries/STM32_USB_Device_Library/Class/msc/inc targets/taranis/STM32_USB-Host-Device_Lib_V2.1.0/Libraries/STM32_USB_Device_Library/Class/hid/inc
BOARDSRC = targets/taranis/board_taranis.cpp BOARDSRC = targets/taranis/board_taranis.cpp
EXTRABOARDSRC += targets/taranis/lcd_driver.cpp targets/taranis/aspi.c targets/taranis/i2c.c targets/taranis/delays.c EXTRABOARDSRC += targets/taranis/lcd_driver.cpp targets/taranis/flash_driver.cpp targets/taranis/aspi.c targets/taranis/i2c.c targets/taranis/delays.c
SRC += CoOS/kernel/core.c CoOS/kernel/hook.c CoOS/kernel/task.c CoOS/kernel/event.c CoOS/kernel/time.c CoOS/kernel/timer.c CoOS/kernel/flag.c CoOS/kernel/mutex.c CoOS/kernel/serviceReq.c CoOS/portable/GCC/port.c CoOS/portable/arch.c SRC += CoOS/kernel/core.c CoOS/kernel/hook.c CoOS/kernel/task.c CoOS/kernel/event.c CoOS/kernel/time.c CoOS/kernel/timer.c CoOS/kernel/flag.c CoOS/kernel/mutex.c CoOS/kernel/serviceReq.c CoOS/portable/GCC/port.c CoOS/portable/arch.c
SRC += targets/taranis/pwr_driver.c targets/taranis/usb_driver.c SRC += targets/taranis/pwr_driver.c targets/taranis/usb_driver.c
EEPROMSRC = eeprom_common.cpp eeprom_rlc.cpp eeprom_conversions.cpp EEPROMSRC = eeprom_common.cpp eeprom_rlc.cpp eeprom_conversions.cpp

View file

@ -63,7 +63,7 @@
#include "../translations/en.h" #include "../translations/en.h"
#if defined(PCBTARANIS) #if defined(PCBTARANIS)
#define BOOTLOADER_TITLE "Taranis Boot Loader - v1.0" #define BOOTLOADER_TITLE " Taranis Boot Loader - v1.0"
#define BOOT_KEY_UP KEY_PLUS #define BOOT_KEY_UP KEY_PLUS
#define BOOT_KEY_DOWN KEY_MINUS #define BOOT_KEY_DOWN KEY_MINUS
#define BOOT_KEY_LEFT KEY_MENU #define BOOT_KEY_LEFT KEY_MENU

View file

@ -685,6 +685,31 @@ inline bool isFilenameLower(bool isfile, const char * fn, const char * line)
return (!isfile && line[SD_SCREEN_FILE_LENGTH+1]) || (isfile==(bool)line[SD_SCREEN_FILE_LENGTH+1] && strcasecmp(fn, line) < 0); return (!isfile && line[SD_SCREEN_FILE_LENGTH+1]) || (isfile==(bool)line[SD_SCREEN_FILE_LENGTH+1] && strcasecmp(fn, line) < 0);
} }
#if defined(PCBTARANIS)
void flashBootloader(const char * filename)
{
FIL file;
f_open(&file, filename, FA_READ);
uint8_t buffer[FLASH_PAGESIZE];
UINT count;
lcd_rect( 3, 6*FH+4, 204, 7);
watchdogSetTimeout(1000/*10s*/);
unlockFlash();
for (int i=0; i<BOOTLOADER_SIZE; i+=FLASH_PAGESIZE) {
if (f_read(&file, buffer, FLASH_PAGESIZE, &count) != FR_OK || count != FLASH_PAGESIZE) {
// TODO popup error
break;
}
writeFlash((uint32_t*)(uint64_t)(FIRMWARE_ADDRESS+i), (uint32_t *)buffer);
lcd_hline(5, 6*FH+6, (200*i)/BOOTLOADER_SIZE, FORCE);
lcd_hline(5, 6*FH+7, (200*i)/BOOTLOADER_SIZE, FORCE);
lcd_hline(5, 6*FH+8, (200*i)/BOOTLOADER_SIZE, FORCE);
lcdRefresh();
}
f_close(&file);
}
#endif
void onSdManagerMenu(const char *result) void onSdManagerMenu(const char *result)
{ {
TCHAR lfn[_MAX_LFN + 1]; TCHAR lfn[_MAX_LFN + 1];
@ -733,6 +758,19 @@ void onSdManagerMenu(const char *result)
memcpy(modelHeaders[g_eeGeneral.currModel].bitmap, g_model.header.bitmap, sizeof(g_model.header.bitmap)); memcpy(modelHeaders[g_eeGeneral.currModel].bitmap, g_model.header.bitmap, sizeof(g_model.header.bitmap));
eeDirty(EE_MODEL); eeDirty(EE_MODEL);
} }
else if (result == STR_VIEW_TEXT) {
f_getcwd(lfn, _MAX_LFN);
strcat(lfn, "/");
strcat(lfn, reusableBuffer.sdmanager.lines[index]);
pushMenuTextView(lfn);
}
else if (result == STR_FLASH_BOOTLOADER) {
f_getcwd(lfn, _MAX_LFN);
strcat(lfn, "/");
strcat(lfn, reusableBuffer.sdmanager.lines[index]);
flashBootloader(lfn);
}
#endif
#if defined(LUA) #if defined(LUA)
else if (result == STR_EXECUTE_FILE) { else if (result == STR_EXECUTE_FILE) {
f_getcwd(lfn, _MAX_LFN); f_getcwd(lfn, _MAX_LFN);
@ -740,13 +778,6 @@ void onSdManagerMenu(const char *result)
strcat(lfn, reusableBuffer.sdmanager.lines[index]); strcat(lfn, reusableBuffer.sdmanager.lines[index]);
luaExec(lfn); luaExec(lfn);
} }
#endif
else if (result == STR_VIEW_TEXT) {
f_getcwd(lfn, _MAX_LFN);
strcat(lfn, "/");
strcat(lfn, reusableBuffer.sdmanager.lines[index]);
pushMenuTextView(lfn);
}
#endif #endif
} }
@ -847,6 +878,7 @@ void menuGeneralSdManager(uint8_t _event)
else */ if (!strcasecmp(ext, SOUNDS_EXT)) { else */ if (!strcasecmp(ext, SOUNDS_EXT)) {
MENU_ADD_ITEM(STR_PLAY_FILE); MENU_ADD_ITEM(STR_PLAY_FILE);
} }
#endif
#if defined(PCBTARANIS) #if defined(PCBTARANIS)
else if (!strcasecmp(ext, BITMAPS_EXT) && !READ_ONLY()) { else if (!strcasecmp(ext, BITMAPS_EXT) && !READ_ONLY()) {
MENU_ADD_ITEM(STR_ASSIGN_BITMAP); MENU_ADD_ITEM(STR_ASSIGN_BITMAP);
@ -854,12 +886,14 @@ void menuGeneralSdManager(uint8_t _event)
else if (!strcasecmp(ext, TEXT_EXT)) { else if (!strcasecmp(ext, TEXT_EXT)) {
MENU_ADD_ITEM(STR_VIEW_TEXT); MENU_ADD_ITEM(STR_VIEW_TEXT);
} }
else if (!strcasecmp(ext, FIRMWARE_EXT) && !READ_ONLY()) {
MENU_ADD_ITEM(STR_FLASH_BOOTLOADER);
}
#endif #endif
#if defined(LUA) #if defined(LUA)
else if (!strcasecmp(ext, SCRIPTS_EXT)) { else if (!strcasecmp(ext, SCRIPTS_EXT)) {
MENU_ADD_ITEM(STR_EXECUTE_FILE); MENU_ADD_ITEM(STR_EXECUTE_FILE);
} }
#endif
#endif #endif
if (!READ_ONLY()) { if (!READ_ONLY()) {
MENU_ADD_ITEM(STR_DELETE_FILE); MENU_ADD_ITEM(STR_DELETE_FILE);

View file

@ -55,6 +55,7 @@
#define BITMAPS_EXT ".bmp" #define BITMAPS_EXT ".bmp"
#define SCRIPTS_EXT ".lua" #define SCRIPTS_EXT ".lua"
#define TEXT_EXT ".txt" #define TEXT_EXT ".txt"
#define FIRMWARE_EXT ".bin"
extern FATFS g_FATFS_Obj; extern FATFS g_FATFS_Obj;

View file

@ -672,5 +672,6 @@ void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState New
void RCC_LSEConfig(uint8_t RCC_LSE) { } void RCC_LSEConfig(uint8_t RCC_LSE) { }
FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG) { return RESET; } FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG) { return RESET; }
ErrorStatus RTC_WaitForSynchro(void) { return SUCCESS; } ErrorStatus RTC_WaitForSynchro(void) { return SUCCESS; }
void writeFlash(uint32_t *address, uint32_t *buffer) { SIMU_SLEEP(100); }
#endif #endif

View file

@ -146,6 +146,7 @@ void delay_01us(uint16_t nb);
void unlockFlash(); void unlockFlash();
void writeFlash(uint32_t * address, uint32_t * buffer); void writeFlash(uint32_t * address, uint32_t * buffer);
uint32_t isFirmwareStart(uint32_t *block); uint32_t isFirmwareStart(uint32_t *block);
uint32_t isBootloaderStart(uint32_t *block);
// Pulses driver // Pulses driver
void init_no_pulses(uint32_t port); void init_no_pulses(uint32_t port);

View file

@ -111,3 +111,9 @@ uint32_t isFirmwareStart(uint32_t *block)
} }
return 1; return 1;
} }
uint32_t isBootloaderStart(uint32_t *block)
{
// TODO search for "BOOT" inside the block
return 1;
}

View file

@ -465,6 +465,7 @@ const pm_char STR_DATE[] PROGMEM = TR_DATE;
const pm_char STR_CHANNELS_MONITOR[] PROGMEM = TR_CHANNELS_MONITOR; const pm_char STR_CHANNELS_MONITOR[] PROGMEM = TR_CHANNELS_MONITOR;
const pm_char STR_PATH_TOO_LONG[] PROGMEM = TR_PATH_TOO_LONG; const pm_char STR_PATH_TOO_LONG[] PROGMEM = TR_PATH_TOO_LONG;
const pm_char STR_VIEW_TEXT[] PROGMEM = TR_VIEW_TEXT; const pm_char STR_VIEW_TEXT[] PROGMEM = TR_VIEW_TEXT;
const pm_char STR_FLASH_BOOTLOADER[] PROGMEM = TR_FLASH_BOOTLOADER;
#if LCD_W >= 212 #if LCD_W >= 212
const pm_char STR_MODELNAME[] PROGMEM = TR_MODELNAME; const pm_char STR_MODELNAME[] PROGMEM = TR_MODELNAME;

View file

@ -616,6 +616,7 @@ extern const pm_char STR_DATE[];
extern const pm_char STR_CHANNELS_MONITOR[]; extern const pm_char STR_CHANNELS_MONITOR[];
extern const pm_char STR_PATH_TOO_LONG[]; extern const pm_char STR_PATH_TOO_LONG[];
extern const pm_char STR_VIEW_TEXT[]; extern const pm_char STR_VIEW_TEXT[];
extern const pm_char STR_FLASH_BOOTLOADER[];
#if defined(VOICE) && defined(CPUARM) #if defined(VOICE) && defined(CPUARM)
struct LanguagePack { struct LanguagePack {

View file

@ -712,6 +712,7 @@
#define TR_CHANNELS_MONITOR "MONITOR KANÁLU" #define TR_CHANNELS_MONITOR "MONITOR KANÁLU"
#define TR_PATH_TOO_LONG "Cesta je moc dlouhá" #define TR_PATH_TOO_LONG "Cesta je moc dlouhá"
#define TR_VIEW_TEXT "Zobrazit text" #define TR_VIEW_TEXT "Zobrazit text"
#define TR_FLASH_BOOTLOADER "Flash BootLoader"
#define TR_INTERNALRF "Vnitřní RF modul" #define TR_INTERNALRF "Vnitřní RF modul"
#define TR_EXTERNALRF "Externí RF modul" #define TR_EXTERNALRF "Externí RF modul"
#define TR_FAILSAFE "Mód Failsafe" #define TR_FAILSAFE "Mód Failsafe"

View file

@ -712,6 +712,7 @@
#define TR_CHANNELS_MONITOR "Kanal Monitor" #define TR_CHANNELS_MONITOR "Kanal Monitor"
#define TR_PATH_TOO_LONG "Path too long" #define TR_PATH_TOO_LONG "Path too long"
#define TR_VIEW_TEXT "View text" #define TR_VIEW_TEXT "View text"
#define TR_FLASH_BOOTLOADER "Flash BootLoader"
#define TR_INTERNALRF "----Internes HF Modul----------" #define TR_INTERNALRF "----Internes HF Modul----------"
#define TR_EXTERNALRF "----Externes HF Modul----------" #define TR_EXTERNALRF "----Externes HF Modul----------"
#define TR_FAILSAFE "Failsafe Mode" #define TR_FAILSAFE "Failsafe Mode"

View file

@ -716,6 +716,7 @@
#define TR_CHANNELS_MONITOR "CHANNEL MONITOR" #define TR_CHANNELS_MONITOR "CHANNEL MONITOR"
#define TR_PATH_TOO_LONG "Path too long" #define TR_PATH_TOO_LONG "Path too long"
#define TR_VIEW_TEXT "View text" #define TR_VIEW_TEXT "View text"
#define TR_FLASH_BOOTLOADER "Flash BootLoader"
#define TR_INTERNALRF "Internal RF" #define TR_INTERNALRF "Internal RF"
#define TR_EXTERNALRF "External RF" #define TR_EXTERNALRF "External RF"
#define TR_FAILSAFE INDENT "Failsafe mode" #define TR_FAILSAFE INDENT "Failsafe mode"

View file

@ -712,6 +712,7 @@
#define TR_CHANNELS_MONITOR "MONITOR CANALES" #define TR_CHANNELS_MONITOR "MONITOR CANALES"
#define TR_PATH_TOO_LONG "Path too long" #define TR_PATH_TOO_LONG "Path too long"
#define TR_VIEW_TEXT "View text" #define TR_VIEW_TEXT "View text"
#define TR_FLASH_BOOTLOADER "Flash BootLoader"
#define TR_INTERNALRF "Interna RF" #define TR_INTERNALRF "Interna RF"
#define TR_EXTERNALRF "Externa RF" #define TR_EXTERNALRF "Externa RF"
#define TR_FAILSAFE INDENT"Modo sgdad." #define TR_FAILSAFE INDENT"Modo sgdad."

View file

@ -712,6 +712,7 @@
#define TR_CHANNELS_MONITOR "CHANNEL MONITOR" #define TR_CHANNELS_MONITOR "CHANNEL MONITOR"
#define TR_PATH_TOO_LONG "Path too long" #define TR_PATH_TOO_LONG "Path too long"
#define TR_VIEW_TEXT "View text" #define TR_VIEW_TEXT "View text"
#define TR_FLASH_BOOTLOADER "Flash BootLoader"
#define TR_INTERNALRF "Internal RF" #define TR_INTERNALRF "Internal RF"
#define TR_EXTERNALRF "External RF" #define TR_EXTERNALRF "External RF"
#define TR_FAILSAFE INDENT "Failsafe mode" #define TR_FAILSAFE INDENT "Failsafe mode"

View file

@ -712,6 +712,7 @@
#define TR_CHANNELS_MONITOR "MONITEUR CANAUX" #define TR_CHANNELS_MONITOR "MONITEUR CANAUX"
#define TR_PATH_TOO_LONG "Chemin trop long" #define TR_PATH_TOO_LONG "Chemin trop long"
#define TR_VIEW_TEXT "Voir texte" #define TR_VIEW_TEXT "Voir texte"
#define TR_FLASH_BOOTLOADER "Flash BootLoader"
#define TR_INTERNALRF "HF interne" #define TR_INTERNALRF "HF interne"
#define TR_EXTERNALRF "HF externe" #define TR_EXTERNALRF "HF externe"
#define TR_FAILSAFE INDENT "Type failsafe" #define TR_FAILSAFE INDENT "Type failsafe"

View file

@ -712,6 +712,7 @@
#define TR_CHANNELS_MONITOR "CHANNELS MONITOR" #define TR_CHANNELS_MONITOR "CHANNELS MONITOR"
#define TR_PATH_TOO_LONG "Path too long" #define TR_PATH_TOO_LONG "Path too long"
#define TR_VIEW_TEXT "View text" #define TR_VIEW_TEXT "View text"
#define TR_FLASH_BOOTLOADER "Flash BootLoader"
#define TR_INTERNALRF "Modulo Interno" #define TR_INTERNALRF "Modulo Interno"
#define TR_EXTERNALRF "Modulo esterno" #define TR_EXTERNALRF "Modulo esterno"
#define TR_FAILSAFE "Modo failsafe" #define TR_FAILSAFE "Modo failsafe"

View file

@ -712,6 +712,7 @@
#define TR_CHANNELS_MONITOR "MONITOR KANAŁÓW" #define TR_CHANNELS_MONITOR "MONITOR KANAŁÓW"
#define TR_PATH_TOO_LONG "Ścieżka za długa" #define TR_PATH_TOO_LONG "Ścieżka za długa"
#define TR_VIEW_TEXT "Pokaż tekst" #define TR_VIEW_TEXT "Pokaż tekst"
#define TR_FLASH_BOOTLOADER "Flash BootLoader"
#define TR_INTERNALRF "Wewnętrzny moduł RF" #define TR_INTERNALRF "Wewnętrzny moduł RF"
#define TR_EXTERNALRF "Zewnętrzny moduł RF" #define TR_EXTERNALRF "Zewnętrzny moduł RF"
#define TR_FAILSAFE "Tryb Failsafe" #define TR_FAILSAFE "Tryb Failsafe"

View file

@ -712,6 +712,7 @@
#define TR_CHANNELS_MONITOR "CHANNELS MONITOR" #define TR_CHANNELS_MONITOR "CHANNELS MONITOR"
#define TR_PATH_TOO_LONG "Path too long" #define TR_PATH_TOO_LONG "Path too long"
#define TR_VIEW_TEXT "View text" #define TR_VIEW_TEXT "View text"
#define TR_FLASH_BOOTLOADER "Flash BootLoader"
#define TR_INTERNALRF "Internal RF" #define TR_INTERNALRF "Internal RF"
#define TR_EXTERNALRF "External RF" #define TR_EXTERNALRF "External RF"
#define TR_FAILSAFE "Failsafe mode" #define TR_FAILSAFE "Failsafe mode"

View file

@ -712,6 +712,7 @@
#define TR_CHANNELS_MONITOR "Kanalöversikt" #define TR_CHANNELS_MONITOR "Kanalöversikt"
#define TR_PATH_TOO_LONG "För lång sökväg" #define TR_PATH_TOO_LONG "För lång sökväg"
#define TR_VIEW_TEXT "Visa Text" #define TR_VIEW_TEXT "Visa Text"
#define TR_FLASH_BOOTLOADER "Flash BootLoader"
#define TR_INTERNALRF "Intern Radio" #define TR_INTERNALRF "Intern Radio"
#define TR_EXTERNALRF "Extern Radiomodul" #define TR_EXTERNALRF "Extern Radiomodul"
#define TR_FAILSAFE "Failsafeläge" #define TR_FAILSAFE "Failsafeläge"