mirror of
https://github.com/EdgeTX/edgetx.git
synced 2025-07-20 14:55:09 +03:00
Cosmetics on the bootloader
This commit is contained in:
parent
7738aa27bd
commit
1c3ced7222
6 changed files with 282 additions and 318 deletions
|
@ -286,7 +286,7 @@ EXTRAINCDIRS =
|
||||||
|
|
||||||
# MCU name
|
# MCU name
|
||||||
ifneq ($(PCB), $(filter $(PCB), STD 9X 9XR STD128 9X128 9XR128 9X2561 9XR2561 GRUVIN9X MEGA2560 SKY9X TARANIS))
|
ifneq ($(PCB), $(filter $(PCB), STD 9X 9XR STD128 9X128 9XR128 9X2561 9XR2561 GRUVIN9X MEGA2560 SKY9X TARANIS))
|
||||||
$(error Sorry, the PCB $(PCB) is not supported yet in openTx)
|
$(error Sorry, the PCB $(PCB) is not supported yet in OpenTX)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
GVARS_VARIANT = +1
|
GVARS_VARIANT = +1
|
||||||
|
@ -1104,10 +1104,15 @@ else
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# build bootloader
|
# build bootloader
|
||||||
.PHONY bootloader.lbm:
|
# TODO
|
||||||
|
# BL_SIZE=${shell sh -c "wc -c $^ | cut -d\ -f1"}
|
||||||
|
# if $(BL_SIZE)>32768 then $(error Bootloader doesn't fit in 32k flash); fi
|
||||||
|
bootloader.lbm: bootloader/bootloader_ramBoot.bin
|
||||||
|
$(BIN2LBM) $^ $@
|
||||||
|
|
||||||
|
.PHONY bootloader/bootloader_ramBoot.bin:
|
||||||
@echo "Building bootloader..."
|
@echo "Building bootloader..."
|
||||||
$(MAKE) -C bootloader PCB=$(PCB) PCBREV=$(PCBREV)
|
$(MAKE) -C bootloader PCB=$(PCB) PCBREV=$(PCBREV)
|
||||||
$(BIN2LBM) bootloader.lbm bootloader/bootloader_ramBoot.bin
|
|
||||||
|
|
||||||
tra: translations/en.h translations/cz.h translations/de.h translations/es.h translations/fi.h translations/fr.h translations/it.h translations/pl.h translations/pt.h translations/se.h
|
tra: translations/en.h translations/cz.h translations/de.h translations/es.h translations/fi.h translations/fr.h translations/it.h translations/pl.h translations/pt.h translations/se.h
|
||||||
lbm: fonts bitmaps/sticks.lbm
|
lbm: fonts bitmaps/sticks.lbm
|
||||||
|
@ -1260,7 +1265,7 @@ sizeafter:
|
||||||
@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); fi
|
@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); fi
|
||||||
|
|
||||||
# Display compiler version information.
|
# Display compiler version information.
|
||||||
gccversion :
|
gccversion:
|
||||||
@$(CC) --version
|
@$(CC) --version
|
||||||
|
|
||||||
FOXINC=-I/usr/local/include/fox-1.6 -I/usr/include/fox-1.6 \
|
FOXINC=-I/usr/local/include/fox-1.6 -I/usr/include/fox-1.6 \
|
||||||
|
@ -1300,8 +1305,7 @@ endif
|
||||||
%.eep: %.elf
|
%.eep: %.elf
|
||||||
@echo
|
@echo
|
||||||
@echo $(MSG_EEPROM) $@
|
@echo $(MSG_EEPROM) $@
|
||||||
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
|
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
|
||||||
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
|
|
||||||
|
|
||||||
# Create a symbol table from ELF output file.
|
# Create a symbol table from ELF output file.
|
||||||
%.sym: %.elf
|
%.sym: %.elf
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef PCBTARANIS
|
#if defined(PCBTARANIS)
|
||||||
#include "stm32f2xx_flash.h"
|
#include "stm32f2xx_flash.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -61,10 +61,13 @@
|
||||||
#include "../pwr.h"
|
#include "../pwr.h"
|
||||||
#include "../lcd.h"
|
#include "../lcd.h"
|
||||||
#include "../keys.h"
|
#include "../keys.h"
|
||||||
|
#include "../sdcard.h"
|
||||||
#include "../FatFs/ff.h"
|
#include "../FatFs/ff.h"
|
||||||
#include "../FatFs/diskio.h"
|
#include "../FatFs/diskio.h"
|
||||||
|
#include "../translations/en.h"
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
|
#define BOOTLOADER_TITLE "Boot Loader - FrSky Taranis"
|
||||||
#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
|
||||||
|
@ -72,19 +75,30 @@
|
||||||
#define BOOT_KEY_MENU KEY_ENTER
|
#define BOOT_KEY_MENU KEY_ENTER
|
||||||
#define BOOT_KEY_EXIT KEY_EXIT
|
#define BOOT_KEY_EXIT KEY_EXIT
|
||||||
#define DISPLAY_CHAR_WIDTH 35
|
#define DISPLAY_CHAR_WIDTH 35
|
||||||
|
#elif defined(PCBSKY9X)
|
||||||
|
#define BOOTLOADER_TITLE "Boot Loader - Sky9x"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BOOTLOADER_SIZE 0x8000
|
||||||
|
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
|
#define FIRMWARE_ADDRESS 0x08000000
|
||||||
|
#elif defined(PCBSKY9X)
|
||||||
|
#define FIRMWARE_ADDRESS 0x00400000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// states
|
// states
|
||||||
enum BootLoaderStates {
|
enum BootLoaderStates {
|
||||||
ST_START,
|
ST_START,
|
||||||
|
ST_FLASH_MENU,
|
||||||
ST_DIR_CHECK,
|
ST_DIR_CHECK,
|
||||||
ST_OPEN_DIR,
|
ST_OPEN_DIR,
|
||||||
ST_FILE_LIST,
|
ST_FILE_LIST,
|
||||||
ST_FLASH_CHECK,
|
ST_FLASH_CHECK,
|
||||||
ST_FLASHING,
|
ST_FLASHING,
|
||||||
ST_FLASH_DONE,
|
ST_FLASH_DONE,
|
||||||
ST_USB = 10,
|
ST_USB,
|
||||||
ST_REBOOT = 11,
|
ST_REBOOT,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
|
@ -115,7 +129,7 @@ uint32_t LockBits;
|
||||||
uint32_t Block_buffer[1024];
|
uint32_t Block_buffer[1024];
|
||||||
UINT BlockCount;
|
UINT BlockCount;
|
||||||
|
|
||||||
#ifdef PCBSKY
|
#if defined(PCBSKY9X)
|
||||||
extern int32_t EblockAddress;
|
extern int32_t EblockAddress;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -128,7 +142,7 @@ extern void writeBlock(void);
|
||||||
* Global functions
|
* Global functions
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifdef PCBSKY
|
#if defined(PCBSKY9X)
|
||||||
// Starts TIMER0 at full speed (MCK/2) for delay timing
|
// Starts TIMER0 at full speed (MCK/2) for delay timing
|
||||||
// @ 36MHz this is 18MHz
|
// @ 36MHz this is 18MHz
|
||||||
// This was 6 MHz, we may need to slow it to TIMER_CLOCK2 (MCK/8=4.5 MHz)
|
// This was 6 MHz, we may need to slow it to TIMER_CLOCK2 (MCK/8=4.5 MHz)
|
||||||
|
@ -163,8 +177,7 @@ void delay2ms()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PCBTARANIS
|
#if defined(PCBTARANIS)
|
||||||
|
|
||||||
uint32_t isFirmwareStart(uint32_t *block)
|
uint32_t isFirmwareStart(uint32_t *block)
|
||||||
{
|
{
|
||||||
if ((block[0] & 0xFFFC0000) != 0x20000000) {
|
if ((block[0] & 0xFFFC0000) != 0x20000000) {
|
||||||
|
@ -178,28 +191,23 @@ uint32_t isFirmwareStart(uint32_t *block)
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#endif
|
#elif defined(PCBSKY9X)
|
||||||
|
|
||||||
#ifdef PCBSKY
|
|
||||||
uint32_t isFirmwareStart( uint32_t *block )
|
uint32_t isFirmwareStart( uint32_t *block )
|
||||||
{
|
{
|
||||||
if ( ( block[0] & 0xFFFE3000 ) != 0x20000000 )
|
if ((block[0] & 0xFFFE3000) != 0x20000000 ) {
|
||||||
{
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if ( ( block[1] & 0xFFF80000 ) != 0x00400000 )
|
if ((block[1] & 0xFFF80000) != 0x00400000) {
|
||||||
{
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if ( ( block[2] & 0xFFF80000 ) != 0x00400000 )
|
if ((block[2] & 0xFFF80000) != 0x00400000) {
|
||||||
{
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PCBSKY
|
#if defined(PCBSKY9X)
|
||||||
|
|
||||||
uint32_t (*IAP_Function)(uint32_t, uint32_t);
|
uint32_t (*IAP_Function)(uint32_t, uint32_t);
|
||||||
|
|
||||||
|
@ -212,22 +220,17 @@ uint32_t program( uint32_t *address, uint32_t *buffer ) // size is 256 bytes
|
||||||
// uint32_t EFCIndex = 0; // 0:EEFC0, 1: EEFC1
|
// uint32_t EFCIndex = 0; // 0:EEFC0, 1: EEFC1
|
||||||
/* Initialize the function pointer (retrieve function address from NMI vector) */
|
/* Initialize the function pointer (retrieve function address from NMI vector) */
|
||||||
|
|
||||||
if ( (uint32_t) address == 0x00408000 )
|
if ((uint32_t) address == FIRMWARE_START+BOOTLOADER_SIZE) {
|
||||||
{
|
if (isFirmwareStart(buffer))
|
||||||
if ( isFirmwareStart( buffer) )
|
|
||||||
{
|
|
||||||
FlashBlocked = 0;
|
FlashBlocked = 0;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
FlashBlocked = 1;
|
FlashBlocked = 1;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( FlashBlocked )
|
if (FlashBlocked) {
|
||||||
{
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Always initialise this here, setting a default doesn't seem to work
|
// Always initialise this here, setting a default doesn't seem to work
|
||||||
IAP_Function = (uint32_t (*)(uint32_t, uint32_t)) *(( uint32_t *)0x00800008);
|
IAP_Function = (uint32_t (*)(uint32_t, uint32_t)) *(( uint32_t *)0x00800008);
|
||||||
FlashSectorNum = (uint32_t) address;
|
FlashSectorNum = (uint32_t) address;
|
||||||
|
@ -294,7 +297,7 @@ void interrupt10ms(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PCBSKY
|
#if defined(PCBSKY9X)
|
||||||
void init10msTimer()
|
void init10msTimer()
|
||||||
{
|
{
|
||||||
register Tc *ptc;
|
register Tc *ptc;
|
||||||
|
@ -331,7 +334,7 @@ extern "C" void TC2_IRQHandler()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PCBTARANIS
|
#if defined(PCBTARANIS)
|
||||||
void init10msTimer()
|
void init10msTimer()
|
||||||
{
|
{
|
||||||
// Timer14
|
// Timer14
|
||||||
|
@ -558,67 +561,53 @@ uint32_t fillNames(uint32_t index)
|
||||||
|
|
||||||
FRESULT openFirmwareFile(uint32_t index)
|
FRESULT openFirmwareFile(uint32_t index)
|
||||||
{
|
{
|
||||||
cpystr(cpystr((uint8_t *) FlashFilename, (uint8_t *) "\\firmware\\"),
|
cpystr(cpystr((uint8_t *)FlashFilename, (uint8_t *)FIRMWARES_PATH "/"), (uint8_t *) Filenames[index]);
|
||||||
(uint8_t *) Filenames[index]);
|
|
||||||
f_open(&FlashFile, FlashFilename, FA_READ);
|
f_open(&FlashFile, FlashFilename, FA_READ);
|
||||||
f_lseek(&FlashFile, 32768);
|
f_lseek(&FlashFile, BOOTLOADER_SIZE);
|
||||||
return f_read(&FlashFile, (BYTE *) Block_buffer, 4096, &BlockCount);
|
return f_read(&FlashFile, (BYTE *) Block_buffer, 4096, &BlockCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t flashFile(uint32_t index)
|
int menuFlashFile(uint32_t index, uint8_t event)
|
||||||
{
|
{
|
||||||
FRESULT fr;
|
FRESULT fr;
|
||||||
|
|
||||||
lcd_clear();
|
lcd_putsLeft(2*FH, INDENT "Flash file " FIRMWARES_PATH "/");
|
||||||
lcd_putsLeft(0, "\005Flash File");
|
lcd_putsnAtt(lcdLastPos, 2*FH, Filenames[index], DISPLAY_CHAR_WIDTH, 0);
|
||||||
|
|
||||||
if (Valid == 0) {
|
if (Valid == 0) {
|
||||||
// Validate file here
|
// Validate file here
|
||||||
// return 3 if invalid
|
// return 3 if invalid
|
||||||
fr = openFirmwareFile(index);
|
fr = openFirmwareFile(index);
|
||||||
fr = f_close(&FlashFile);
|
fr = f_close(&FlashFile);
|
||||||
|
|
||||||
Valid = 1;
|
Valid = 1;
|
||||||
if (isFirmwareStart(Block_buffer) == 0) {
|
if (isFirmwareStart(Block_buffer) == 0) {
|
||||||
Valid = 2;
|
Valid = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Valid == 2) {
|
if (Valid == 2) {
|
||||||
lcd_putsLeft(3 * FH, "NOT A VALID FIRMWARE");
|
lcd_putsLeft(4*FH, INDENT "Not a valid firmware!");
|
||||||
#ifdef PCBTARANIS
|
if (event == EVT_KEY_FIRST(BOOT_KEY_EXIT) || event == EVT_KEY_FIRST(BOOT_KEY_MENU)) {
|
||||||
lcd_putsLeft(6 * FH, "\015[EXIT]");
|
return 0;
|
||||||
#else
|
|
||||||
lcd_putsLeft( 6*FH,"\007[EXIT]");
|
|
||||||
#endif
|
|
||||||
uint8_t event = getEvent();
|
|
||||||
if (event == EVT_KEY_FIRST(BOOT_KEY_EXIT)) {
|
|
||||||
return 3;
|
|
||||||
}
|
}
|
||||||
return 4; //
|
return -1;
|
||||||
}
|
}
|
||||||
lcd_putsnAtt(0, 2 * FH, Filenames[index], DISPLAY_CHAR_WIDTH, 0);
|
|
||||||
|
|
||||||
#ifdef PCBTARANIS
|
lcd_putsLeft(6*FH, INDENT "[Enter Long] to confirm");
|
||||||
lcd_putsLeft(6 * FH, "\010[ENTER]\021[EXIT]");
|
|
||||||
lcd_putsLeft(5 * FH, "\010YES\021NO");
|
|
||||||
#else
|
|
||||||
lcd_putsLeft( 6*FH,"\003[MENU]\013[EXIT]");
|
|
||||||
lcd_putsLeft( 5*FH,"\003YES\013NO");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
uint8_t event = getEvent();
|
if (event == EVT_KEY_LONG(BOOT_KEY_MENU)) {
|
||||||
|
|
||||||
if (event == EVT_KEY_FIRST(BOOT_KEY_MENU)) {
|
|
||||||
fr = openFirmwareFile(index);
|
fr = openFirmwareFile(index);
|
||||||
FirmwareSize = FileSize[index];
|
FirmwareSize = FileSize[index];
|
||||||
if (fr != FR_OK) {
|
if (fr != FR_OK) {
|
||||||
return 4; // File open error
|
return 0; // File open error
|
||||||
}
|
}
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
if (event == EVT_KEY_FIRST(BOOT_KEY_EXIT)) {
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
else if (event == EVT_KEY_FIRST(BOOT_KEY_EXIT)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern Key keys[];
|
extern Key keys[];
|
||||||
|
@ -629,7 +618,7 @@ int main()
|
||||||
{
|
{
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
uint8_t index = 0;
|
uint8_t index = 0;
|
||||||
#ifdef PCBTARANIS
|
#if defined(PCBTARANIS)
|
||||||
uint8_t TenCount = 2;
|
uint8_t TenCount = 2;
|
||||||
#endif
|
#endif
|
||||||
uint8_t maxhsize = DISPLAY_CHAR_WIDTH;
|
uint8_t maxhsize = DISPLAY_CHAR_WIDTH;
|
||||||
|
@ -638,47 +627,41 @@ int main()
|
||||||
uint32_t nameCount = 0;
|
uint32_t nameCount = 0;
|
||||||
uint32_t vpos = 0;
|
uint32_t vpos = 0;
|
||||||
uint32_t hpos = 0;
|
uint32_t hpos = 0;
|
||||||
#ifdef PCBTARANIS
|
uint32_t firmwareAddress = FIRMWARE_ADDRESS;
|
||||||
uint32_t firmwareAddress = 0x08000000;
|
|
||||||
#endif
|
|
||||||
#ifdef PCBSKY
|
|
||||||
uint32_t firmwareAddress = 0x00400000;
|
|
||||||
#endif
|
|
||||||
uint32_t firmwareWritten = 0;
|
uint32_t firmwareWritten = 0;
|
||||||
|
|
||||||
#ifdef PCBTARANIS
|
#if defined(PCBTARANIS)
|
||||||
wdt_reset();
|
wdt_reset();
|
||||||
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // Enable portA clock
|
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // Enable portA clock
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
pwrInit();
|
pwrInit();
|
||||||
|
|
||||||
#ifdef PCBSKY
|
#if defined(PCBSKY9X)
|
||||||
MATRIX->CCFG_SYSIO |= 0x000000F0L; // Disable syspins, enable B4,5,6,7
|
MATRIX->CCFG_SYSIO |= 0x000000F0L; // Disable syspins, enable B4,5,6,7
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PCBSKY
|
#if defined(PCBSKY9X)
|
||||||
init_SDcard();
|
init_SDcard();
|
||||||
PIOC->PIO_PER = PIO_PC25; // Enable bit C25 (USB-detect)
|
PIOC->PIO_PER = PIO_PC25; // Enable bit C25 (USB-detect)
|
||||||
start_timer0();
|
start_timer0();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
lcdInit();
|
lcdInit();
|
||||||
#ifdef PCBSKY
|
#if defined(PCBSKY9X)
|
||||||
extern uint8_t OptrexDisplay;
|
extern uint8_t OptrexDisplay;
|
||||||
OptrexDisplay = 1;
|
OptrexDisplay = 1;
|
||||||
#endif
|
#endif
|
||||||
lcd_clear();
|
lcd_clear();
|
||||||
#ifdef PCBTARANIS
|
lcd_putsLeft(0, BOOTLOADER_TITLE);
|
||||||
lcd_putsLeft(0, "\006Boot Loader");
|
lcd_hline(0, 10, LCD_W);
|
||||||
#endif
|
|
||||||
lcdRefresh();
|
lcdRefresh();
|
||||||
#ifdef PCBSKY
|
#if defined(PCBSKY9X)
|
||||||
OptrexDisplay = 0;
|
OptrexDisplay = 0;
|
||||||
lcdRefresh();
|
lcdRefresh();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PCBTARANIS
|
#if defined(PCBTARANIS)
|
||||||
keysInit();
|
keysInit();
|
||||||
I2C_EE_Init();
|
I2C_EE_Init();
|
||||||
init_hw_timer();
|
init_hw_timer();
|
||||||
|
@ -687,261 +670,247 @@ int main()
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
init10msTimer();
|
init10msTimer();
|
||||||
|
|
||||||
#ifdef PCBSKY
|
#if defined(PCBSKY9X)
|
||||||
EblockAddress = -1;
|
EblockAddress = -1;
|
||||||
init_spi();
|
init_spi();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PCBSKY
|
#if defined(PCBSKY9X)
|
||||||
uint32_t chip_id = CHIPID->CHIPID_CIDR;
|
uint32_t chip_id = CHIPID->CHIPID_CIDR;
|
||||||
|
|
||||||
FlashSize = ( (chip_id >> 8 ) & 0x000F ) == 9 ? 256 : 512;
|
FlashSize = ( (chip_id >> 8 ) & 0x000F ) == 9 ? 256 : 512;
|
||||||
#endif
|
#elif defined(PCBTARANIS)
|
||||||
|
|
||||||
#ifdef PCBTARANIS
|
|
||||||
FlashSize = 512;
|
FlashSize = 512;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PCBSKY
|
#if defined(PCBSKY9X)
|
||||||
LockBits = readLockBits();
|
LockBits = readLockBits();
|
||||||
if ( LockBits )
|
if (LockBits) {
|
||||||
{
|
|
||||||
clearLockBits();
|
clearLockBits();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PCBTARANIS
|
#if defined(PCBTARANIS)
|
||||||
// SD card detect pin
|
// SD card detect pin
|
||||||
// configure_pins( SD_PRESENT_GPIO_Pin, PIN_PORTD | PIN_INPUT | PIN_PULLUP ) ;
|
|
||||||
sdInit();
|
sdInit();
|
||||||
unlockFlash();
|
unlockFlash();
|
||||||
|
|
||||||
usbInit();
|
usbInit();
|
||||||
usbStart();
|
usbStart();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
#ifdef PCBSKY
|
|
||||||
usbMassStorage();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
wdt_reset();
|
wdt_reset();
|
||||||
|
|
||||||
|
uint8_t event = getEvent();
|
||||||
|
|
||||||
if (Tenms) {
|
if (Tenms) {
|
||||||
wdt_reset(); // Retrigger hardware watchdog
|
wdt_reset(); // Retrigger hardware watchdog
|
||||||
|
|
||||||
if (EE_timer) {
|
if (EE_timer) {
|
||||||
if (--EE_timer == 0) {
|
if (--EE_timer == 0) {
|
||||||
#ifdef PCBSKY
|
#if defined(PCBSKY9X)
|
||||||
writeBlock();
|
writeBlock();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Tenms = 0;
|
Tenms = 0;
|
||||||
|
|
||||||
lcd_clear();
|
lcd_clear();
|
||||||
lcd_putsLeft(0, CENTER "Boot Loader");
|
lcd_putsLeft(0, BOOTLOADER_TITLE);
|
||||||
lcd_invert_line(0);
|
lcd_hline(0, 10, LCD_W);
|
||||||
|
|
||||||
{
|
if (usbPlugged()) {
|
||||||
|
state = ST_USB;
|
||||||
|
}
|
||||||
|
|
||||||
if (usbPlugged()) {
|
if (state == ST_START) {
|
||||||
state = ST_USB;
|
lcd_putsLeft(2*FH, "\004Flash a firmware from the SD card");
|
||||||
|
lcd_putsLeft(3*FH, "\004Exit");
|
||||||
|
lcd_invert_line(2+vpos);
|
||||||
|
lcd_putsLeft(6*FH, INDENT "Or plug a USB cable for Massstorage");
|
||||||
|
if (event == EVT_KEY_FIRST(BOOT_KEY_DOWN) || event == EVT_KEY_FIRST(BOOT_KEY_UP)) {
|
||||||
|
vpos = (vpos+1) & 0x01;
|
||||||
}
|
}
|
||||||
|
else if (event == EVT_KEY_FIRST(BOOT_KEY_MENU)) {
|
||||||
if (state == ST_USB) {
|
if (vpos == 0)
|
||||||
#ifdef PCBSKY
|
state = ST_FLASH_MENU;
|
||||||
lcd_putsLeft( 3*FH, "\010BUSY" );
|
else
|
||||||
#endif
|
state = ST_REBOOT;
|
||||||
#ifdef PCBTARANIS
|
|
||||||
lcd_putsLeft(3 * FH, "\016BUSY");
|
|
||||||
#endif
|
|
||||||
if (usbPlugged() == 0) {
|
|
||||||
state = ST_START;
|
|
||||||
}
|
|
||||||
#ifdef PCBSKY
|
|
||||||
lcd_putc( 0, 6*FH, 'F' );
|
|
||||||
lcd_putc( 6, 6*FH, '0' + FlashBlocked );
|
|
||||||
lcd_putc( 0, 7*FH, 'E' );
|
|
||||||
lcd_putc( 6, 7*FH, '0' + EepromBlocked );
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (state == ST_START) {
|
if (state == ST_USB) {
|
||||||
sdInit();
|
lcd_putsLeft(4*FH, CENTER "\010U S B");
|
||||||
fr = FR_OK;
|
if (usbPlugged() == 0) {
|
||||||
|
vpos = 0;
|
||||||
|
state = ST_START;
|
||||||
|
}
|
||||||
|
#if defined(PCBSKY9X)
|
||||||
|
usbMassStorage();
|
||||||
|
lcd_putc( 0, 6*FH, 'F' );
|
||||||
|
lcd_putc( 6, 6*FH, '0' + FlashBlocked );
|
||||||
|
lcd_putc( 0, 7*FH, 'E' );
|
||||||
|
lcd_putc( 6, 7*FH, '0' + EepromBlocked );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state == ST_FLASH_MENU) {
|
||||||
|
sdInit();
|
||||||
|
state = ST_DIR_CHECK;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (state == ST_DIR_CHECK) {
|
||||||
|
fr = f_chdir(FIRMWARES_PATH);
|
||||||
|
if (fr == FR_OK) {
|
||||||
|
state = ST_OPEN_DIR;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fr = FR_OK;
|
lcd_putsLeft(2*FH, INDENT "No firmware in " FIRMWARES_PATH " directory");
|
||||||
}
|
if (event == EVT_KEY_FIRST(BOOT_KEY_EXIT) || event == EVT_KEY_FIRST(BOOT_KEY_MENU)) {
|
||||||
|
|
||||||
if (fr == FR_OK) {
|
|
||||||
if (state == ST_START) {
|
|
||||||
state = ST_DIR_CHECK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (state == ST_DIR_CHECK) {
|
|
||||||
fr = f_chdir("/firmware");
|
|
||||||
if (fr == FR_OK) {
|
|
||||||
state = ST_OPEN_DIR;
|
|
||||||
index = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (state == ST_DIR_CHECK) {
|
|
||||||
#ifdef PCBSKY
|
|
||||||
lcd_putsLeft( 2*FH, "\005No Firmware" );
|
|
||||||
#endif
|
|
||||||
#ifdef PCBTARANIS
|
|
||||||
lcd_putsLeft(2 * FH, "\013No Firmware");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
if (state == ST_OPEN_DIR) {
|
|
||||||
fr = f_opendir(&Dj, ".");
|
|
||||||
if (fr == FR_OK) {
|
|
||||||
state = ST_FILE_LIST;
|
|
||||||
index = 0;
|
|
||||||
nameCount = fillNames(0);
|
|
||||||
hpos = 0;
|
|
||||||
vpos = 0;
|
vpos = 0;
|
||||||
|
state = ST_START;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (state == ST_FILE_LIST) {
|
}
|
||||||
uint32_t limit = 6;
|
|
||||||
if (nameCount < limit) {
|
|
||||||
limit = nameCount;
|
|
||||||
}
|
|
||||||
maxhsize = 0;
|
|
||||||
for (i = 0; i < limit; i += 1) {
|
|
||||||
uint32_t x;
|
|
||||||
x = strlen(Filenames[i]);
|
|
||||||
if (x > maxhsize) {
|
|
||||||
maxhsize = x;
|
|
||||||
}
|
|
||||||
if (x > DISPLAY_CHAR_WIDTH) {
|
|
||||||
if ((hpos + DISPLAY_CHAR_WIDTH) > x) {
|
|
||||||
x = x - DISPLAY_CHAR_WIDTH;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
x = hpos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
x = 0;
|
|
||||||
}
|
|
||||||
lcd_putsnAtt(0, 16 + FH * i, &Filenames[i][x], DISPLAY_CHAR_WIDTH,
|
|
||||||
0);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
uint8_t event = getEvent();
|
|
||||||
|
|
||||||
if ((event == EVT_KEY_REPT(BOOT_KEY_DOWN))
|
if (state == ST_OPEN_DIR) {
|
||||||
|| event == EVT_KEY_FIRST(BOOT_KEY_DOWN)) {
|
index = 0;
|
||||||
if (vpos < limit - 1) {
|
fr = f_opendir(&Dj, ".");
|
||||||
vpos += 1;
|
if (fr == FR_OK) {
|
||||||
}
|
state = ST_FILE_LIST;
|
||||||
else {
|
nameCount = fillNames(0);
|
||||||
if (nameCount > limit) {
|
hpos = 0;
|
||||||
index += 1;
|
vpos = 0;
|
||||||
nameCount = fillNames(index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((event == EVT_KEY_REPT(BOOT_KEY_UP))
|
|
||||||
|| (event == EVT_KEY_FIRST(BOOT_KEY_UP))) {
|
|
||||||
if (vpos > 0) {
|
|
||||||
vpos -= 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (index) {
|
|
||||||
index -= 1;
|
|
||||||
nameCount = fillNames(index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((event == EVT_KEY_REPT(BOOT_KEY_RIGHT))
|
|
||||||
|| (event == EVT_KEY_FIRST(BOOT_KEY_RIGHT))) {
|
|
||||||
if (hpos + DISPLAY_CHAR_WIDTH < maxhsize) {
|
|
||||||
hpos += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((event == EVT_KEY_REPT(BOOT_KEY_LEFT))
|
|
||||||
|| (event == EVT_KEY_FIRST(BOOT_KEY_LEFT))) {
|
|
||||||
if (hpos) {
|
|
||||||
hpos -= 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (event == EVT_KEY_LONG(BOOT_KEY_MENU)) {
|
|
||||||
// Select file to flash
|
|
||||||
state = ST_FLASH_CHECK;
|
|
||||||
Valid = 0;
|
|
||||||
}
|
|
||||||
if (event == EVT_KEY_LONG(BOOT_KEY_EXIT)) {
|
|
||||||
state = ST_REBOOT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lcd_invert_line(2 + vpos);
|
|
||||||
// lcd_char_inverse( 0, 2*FH+FH*vpos, DISPLAY_CHAR_WIDTH*FW, 0 ) ;
|
|
||||||
}
|
}
|
||||||
if (state == ST_FLASH_CHECK) {
|
}
|
||||||
i = flashFile(vpos);
|
|
||||||
FirmwareSize = FileSize[vpos] - 32768;
|
if (state == ST_FILE_LIST) {
|
||||||
if (i == 1) {
|
uint32_t limit = 6;
|
||||||
state = ST_FILE_LIST; // Canceled
|
if (nameCount < limit) {
|
||||||
}
|
limit = nameCount;
|
||||||
if (i == 2) {
|
|
||||||
#ifdef PCBSKY
|
|
||||||
firmwareAddress = 0x00408000;
|
|
||||||
#endif
|
|
||||||
#ifdef PCBTARANIS
|
|
||||||
firmwareAddress = 0x08008000;
|
|
||||||
#endif
|
|
||||||
firmwareWritten = 0;
|
|
||||||
state = ST_FLASHING; // confirmed
|
|
||||||
}
|
|
||||||
if (i == 3) {
|
|
||||||
// Invalid file
|
|
||||||
state = ST_FILE_LIST; // Canceled
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (state == ST_FLASHING) {
|
maxhsize = 0;
|
||||||
// Commit to flashing
|
for (i = 0; i < limit; i += 1) {
|
||||||
uint32_t blockOffset = 0;
|
uint32_t x;
|
||||||
lcd_putsLeft(3 * FH, "Flashing");
|
x = strlen(Filenames[i]);
|
||||||
while (BlockCount) {
|
if (x > maxhsize) {
|
||||||
program((uint32_t *) firmwareAddress, &Block_buffer[blockOffset]);// size is 256 bytes
|
maxhsize = x;
|
||||||
blockOffset += 64; // 32-bit words (256 bytes)
|
}
|
||||||
firmwareAddress += 256;
|
if (x > DISPLAY_CHAR_WIDTH) {
|
||||||
if (BlockCount > 256) {
|
if (hpos + DISPLAY_CHAR_WIDTH > x) {
|
||||||
BlockCount -= 256;
|
x = x - DISPLAY_CHAR_WIDTH;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
BlockCount = 0;
|
x = hpos;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
firmwareWritten += 1;
|
else {
|
||||||
uint32_t width = FirmwareSize / 4096;
|
x = 0;
|
||||||
lcd_hline(0, 5 * FH - 1, width + 1);
|
|
||||||
lcd_hline(0, 6 * FH, width + 1);
|
|
||||||
lcd_vline(width, 5 * FH, 8);
|
|
||||||
for (i = 0; i < firmwareWritten; i += 1) {
|
|
||||||
lcd_vline(i, 5 * FH, 8);
|
|
||||||
}
|
}
|
||||||
fr = f_read(&FlashFile, (BYTE *) Block_buffer, 4096, &BlockCount);
|
lcd_putsnAtt(INDENT_WIDTH, 16 + FH * i, &Filenames[i][x], DISPLAY_CHAR_WIDTH, 0);
|
||||||
if (BlockCount == 0) {
|
}
|
||||||
state = ST_FLASH_DONE;
|
|
||||||
|
if (event == EVT_KEY_REPT(BOOT_KEY_DOWN) || event == EVT_KEY_FIRST(BOOT_KEY_DOWN)) {
|
||||||
|
if (vpos < limit - 1) {
|
||||||
|
vpos += 1;
|
||||||
}
|
}
|
||||||
if (firmwareWritten > FlashSize / 4 - 9)// (127-8, or 63-8) 4K blocks
|
else {
|
||||||
{
|
if (nameCount > limit) {
|
||||||
state = ST_FLASH_DONE; // Backstop
|
index += 1;
|
||||||
|
nameCount = fillNames(index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (state == ST_FLASH_DONE) {
|
else if (event == EVT_KEY_REPT(BOOT_KEY_UP) || event == EVT_KEY_FIRST(BOOT_KEY_UP)) {
|
||||||
uint8_t event = getEvent();
|
if (vpos > 0) {
|
||||||
lcd_putsLeft(3 * FH, "Flashing Complete");
|
vpos -= 1;
|
||||||
if (event == EVT_KEY_FIRST(BOOT_KEY_EXIT)) {
|
}
|
||||||
state = ST_FILE_LIST;
|
else {
|
||||||
|
if (index) {
|
||||||
|
index -= 1;
|
||||||
|
nameCount = fillNames(index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if !defined(PCBTARANIS)
|
||||||
|
else if (event == EVT_KEY_REPT(BOOT_KEY_RIGHT) || event == EVT_KEY_FIRST(BOOT_KEY_RIGHT)) {
|
||||||
|
if (hpos + DISPLAY_CHAR_WIDTH < maxhsize) {
|
||||||
|
hpos += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event == EVT_KEY_REPT(BOOT_KEY_LEFT) || event == EVT_KEY_FIRST(BOOT_KEY_LEFT)) {
|
||||||
|
if (hpos) {
|
||||||
|
hpos -= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else if (event == EVT_KEY_FIRST(BOOT_KEY_MENU)) {
|
||||||
|
// Select file to flash
|
||||||
|
state = ST_FLASH_CHECK;
|
||||||
|
Valid = 0;
|
||||||
|
}
|
||||||
|
else if (event == EVT_KEY_FIRST(BOOT_KEY_EXIT)) {
|
||||||
|
state = ST_START;
|
||||||
|
vpos = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
lcd_invert_line(2 + vpos);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (state == ST_FLASH_CHECK) {
|
||||||
|
int result = menuFlashFile(vpos, event);
|
||||||
|
FirmwareSize = FileSize[vpos] - BOOTLOADER_SIZE;
|
||||||
|
if (result == 0) {
|
||||||
|
// canceled
|
||||||
|
state = ST_FILE_LIST;
|
||||||
|
}
|
||||||
|
else if (result == 1) {
|
||||||
|
// confirmed
|
||||||
|
firmwareAddress = FIRMWARE_ADDRESS + BOOTLOADER_SIZE;
|
||||||
|
firmwareWritten = 0;
|
||||||
|
state = ST_FLASHING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state == ST_FLASHING) {
|
||||||
|
// Commit to flashing
|
||||||
|
uint32_t blockOffset = 0;
|
||||||
|
lcd_putsLeft(2*FH, INDENT "Flashing...");
|
||||||
|
while (BlockCount) {
|
||||||
|
program((uint32_t *) firmwareAddress, &Block_buffer[blockOffset]); // size is 256 bytes
|
||||||
|
blockOffset += 64; // 32-bit words (256 bytes)
|
||||||
|
firmwareAddress += 256;
|
||||||
|
if (BlockCount > 256) {
|
||||||
|
BlockCount -= 256;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
BlockCount = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
firmwareWritten += 4; // 4K blocks
|
||||||
|
|
||||||
|
lcd_rect(INDENT_WIDTH, 6*FH+4, 202, 3);
|
||||||
|
lcd_hline(INDENT_WIDTH, 6*FH+5, (200*firmwareWritten/(FlashSize-32)), FORCE);
|
||||||
|
|
||||||
|
fr = f_read(&FlashFile, (BYTE *)Block_buffer, sizeof(Block_buffer), &BlockCount);
|
||||||
|
if (BlockCount == 0) {
|
||||||
|
state = ST_FLASH_DONE;
|
||||||
|
}
|
||||||
|
if (firmwareWritten >= FlashSize - 32) {
|
||||||
|
state = ST_FLASH_DONE; // Backstop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state == ST_FLASH_DONE) {
|
||||||
|
lcd_putsLeft(2*FH, INDENT "Flashing Complete");
|
||||||
|
if (event == EVT_KEY_FIRST(BOOT_KEY_EXIT) || event == EVT_KEY_FIRST(BOOT_KEY_MENU)) {
|
||||||
|
state = ST_START;
|
||||||
|
vpos = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event == EVT_KEY_LONG(BOOT_KEY_EXIT)) {
|
||||||
|
state = ST_REBOOT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (--TenCount == 0) {
|
if (--TenCount == 0) {
|
||||||
|
@ -949,34 +918,26 @@ int main()
|
||||||
lcdRefresh();
|
lcdRefresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PowerUpDelay < 20) // 200 mS
|
if (PowerUpDelay < 20) { // 200 mS
|
||||||
{
|
|
||||||
PowerUpDelay += 1;
|
PowerUpDelay += 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sdPoll10ms();
|
sdPoll10ms();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pwrCheck() == e_power_off && state != ST_FLASHING && state != ST_USB) {
|
||||||
|
pwrOff();
|
||||||
|
for (;;) {
|
||||||
|
// Wait for power to go off
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((state < ST_FLASH_CHECK) || (state == ST_FLASH_DONE)) {
|
|
||||||
if (pwrCheck() == e_power_off) {
|
|
||||||
pwrOff();
|
|
||||||
for (;;) {
|
|
||||||
// Wait for power to go off
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (state < ST_FILE_LIST) {
|
|
||||||
if (getEvent() == EVT_KEY_LONG(BOOT_KEY_EXIT)) {
|
|
||||||
state = ST_REBOOT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (state == ST_REBOOT) {
|
if (state == ST_REBOOT) {
|
||||||
if ((~readKeys() & 0x7E) == 0) {
|
if ((~readKeys() & 0x7E) == 0) {
|
||||||
NVIC_SystemReset();
|
NVIC_SystemReset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -800,7 +800,6 @@ void lcd_invert_line(int8_t y)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(BOOT)
|
|
||||||
void lcd_rect(xcoord_t x, uint8_t y, xcoord_t w, uint8_t h, uint8_t pat, LcdFlags att)
|
void lcd_rect(xcoord_t x, uint8_t y, xcoord_t w, uint8_t h, uint8_t pat, LcdFlags att)
|
||||||
{
|
{
|
||||||
lcd_vlineStip(x, y, h, pat);
|
lcd_vlineStip(x, y, h, pat);
|
||||||
|
@ -810,6 +809,7 @@ void lcd_rect(xcoord_t x, uint8_t y, xcoord_t w, uint8_t h, uint8_t pat, LcdFlag
|
||||||
lcd_hlineStip(x, y, w, pat);
|
lcd_hlineStip(x, y, w, pat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(BOOT)
|
||||||
void lcd_filled_rect(xcoord_t x, int8_t y, xcoord_t w, uint8_t h, uint8_t pat, LcdFlags att)
|
void lcd_filled_rect(xcoord_t x, int8_t y, xcoord_t w, uint8_t h, uint8_t pat, LcdFlags att)
|
||||||
{
|
{
|
||||||
#if defined(CPUM64)
|
#if defined(CPUM64)
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
#define SYSTEM_SUBDIR "SYSTEM" // no trailing slash = important
|
#define SYSTEM_SUBDIR "SYSTEM" // no trailing slash = important
|
||||||
#define BITMAPS_PATH ROOT_PATH "BMP"
|
#define BITMAPS_PATH ROOT_PATH "BMP"
|
||||||
#define SCRIPTS_PATH ROOT_PATH "SCRIPTS"
|
#define SCRIPTS_PATH ROOT_PATH "SCRIPTS"
|
||||||
|
#define FIRMWARES_PATH ROOT_PATH "FIRMWARES"
|
||||||
|
|
||||||
#define MODELS_EXT ".bin"
|
#define MODELS_EXT ".bin"
|
||||||
#define LOGS_EXT ".csv"
|
#define LOGS_EXT ".csv"
|
||||||
|
@ -62,6 +63,7 @@ extern const pm_char * openLogs();
|
||||||
extern void closeLogs();
|
extern void closeLogs();
|
||||||
extern void writeLogs();
|
extern void writeLogs();
|
||||||
|
|
||||||
|
#if !defined(BOOT)
|
||||||
inline const pm_char *SDCARD_ERROR(FRESULT result)
|
inline const pm_char *SDCARD_ERROR(FRESULT result)
|
||||||
{
|
{
|
||||||
if (result == FR_NOT_READY)
|
if (result == FR_NOT_READY)
|
||||||
|
@ -69,6 +71,7 @@ inline const pm_char *SDCARD_ERROR(FRESULT result)
|
||||||
else
|
else
|
||||||
return STR_SDCARD_ERROR;
|
return STR_SDCARD_ERROR;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
#define O9X_FOURCC 0x3378396F // o9x for Taranis
|
#define O9X_FOURCC 0x3378396F // o9x for Taranis
|
||||||
|
|
|
@ -433,30 +433,29 @@ void power_on (void)
|
||||||
static
|
static
|
||||||
void power_off (void)
|
void power_off (void)
|
||||||
{
|
{
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStructure;
|
GPIO_InitTypeDef GPIO_InitStructure;
|
||||||
|
|
||||||
if (!(Stat & STA_NOINIT)) {
|
if (!(Stat & STA_NOINIT)) {
|
||||||
SELECT();
|
SELECT();
|
||||||
wait_ready();
|
wait_ready();
|
||||||
release_spi();
|
release_spi();
|
||||||
}
|
}
|
||||||
|
|
||||||
SPI_I2S_DeInit(SPI_SD);
|
SPI_I2S_DeInit(SPI_SD);
|
||||||
SPI_Cmd(SPI_SD, DISABLE);
|
SPI_Cmd(SPI_SD, DISABLE);
|
||||||
RCC_APBPeriphClockCmd_SPI_SD(RCC_APBPeriph_SPI_SD, DISABLE);
|
RCC_APBPeriphClockCmd_SPI_SD(RCC_APBPeriph_SPI_SD, DISABLE);
|
||||||
|
|
||||||
//All SPI-Pins to input with weak internal pull-downs
|
//All SPI-Pins to input with weak internal pull-downs
|
||||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_SPI_SD_SCK | GPIO_Pin_SPI_SD_MISO | GPIO_Pin_SPI_SD_MOSI;
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_SPI_SD_SCK | GPIO_Pin_SPI_SD_MISO
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
|
| GPIO_Pin_SPI_SD_MOSI;
|
||||||
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
|
||||||
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
||||||
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
|
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
|
||||||
GPIO_Init(GPIO_SPI_SD, &GPIO_InitStructure);
|
GPIO_Init(GPIO_SPI_SD, &GPIO_InitStructure);
|
||||||
|
|
||||||
card_power(0);
|
card_power(0);
|
||||||
|
|
||||||
Stat |= STA_NOINIT; /* Set STA_NOINIT */
|
Stat |= STA_NOINIT; /* Set STA_NOINIT */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
|
@ -2,10 +2,8 @@
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
fileout = sys.argv[1]
|
filename = sys.argv[1]
|
||||||
print fileout
|
fileout = sys.argv[2]
|
||||||
filename = sys.argv[2]
|
|
||||||
print filename
|
|
||||||
|
|
||||||
fr = open(filename, "rb")
|
fr = open(filename, "rb")
|
||||||
fw = open(fileout, "w")
|
fw = open(fileout, "w")
|
||||||
|
@ -19,5 +17,4 @@ while st:
|
||||||
st = fr.read(16)
|
st = fr.read(16)
|
||||||
|
|
||||||
fw.write("\n")
|
fw.write("\n")
|
||||||
|
|
||||||
fw.close()
|
fw.close()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue