REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
flasher.cpp File Reference
#include <Arduino.h>
#include <malloc.h>
#include <stdint.h>
#include <string.h>
#include "ota/flasher.h"
#include "utils/etl_base64.h"
#include "utils/logging.h"
Include dependency graph for flasher.cpp:

Go to the source code of this file.

Macros

#define FLASH_ID   "fw_teensy41"
 
#define FLASH_ID_LEN   (11)
 
#define FLASH_SIZE   (0x800000)
 
#define FLASH_SECTOR_SIZE   (0x1000)
 
#define FLASH_WRITE_SIZE   (4)
 
#define FLASH_RESERVE   (80 * FLASH_SECTOR_SIZE)
 
#define FLASH_BASE_ADDR   (0x60000000)
 
#define IN_FLASH(a)
 
#define CPU_RESTART_ADDR   ((uint32_t *)0xE000ED0C)
 
#define CPU_RESTART_VAL   (0x5FA0004)
 
#define REBOOT   (*CPU_RESTART_ADDR = CPU_RESTART_VAL)
 
#define RAMFUNC   __attribute__((section(".fastrun"), noinline, noclone, optimize("Os")))
 
#define return_err(code, msg)
 
#define return_errf(code, msg, ...)
 
#define RETURN_IF_FLASHING_NOT_ENABLED   return_err(0, "OTA Flashing is disabled in this firmware build")
 

Functions

 __attribute__ ((section(".fastrun"), noinline, noclone, optimize("Os"))) int flash_sector_not_erased(uint32_t address)
 
void eepromemu_flash_write (void *addr, const void *data, uint32_t len)
 
void eepromemu_flash_erase_sector (void *addr)
 
void eepromemu_flash_erase_32K_block (void *addr)
 
void eepromemu_flash_erase_64K_block (void *addr)
 
void firmware_buffer_free (uint32_t buffer_addr, uint32_t buffer_size)
 
int flash_write_block (uint32_t addr, char *data, uint32_t count)
 
int flash_erase_block (uint32_t address, uint32_t size)
 
void firmware_buffer_init (uint32_t *buffer_addr, uint32_t *buffer_size)
 
 while (offset< size &&error==0)
 
 if (((src) >=(0x60000000) &&(src)<(0x60000000)+(0x800000)))
 
 for (;;)
 
FLASHMEM int flash_write_block (uint32_t addr, uint8_t *data, uint32_t count)
 

Variables

uint32_t src
 
uint32_t uint32_t size
 
static int leave_interrupts_disabled = 0
 
 uint32_t = (0x5FA0004) )
 
static constexpr int success = 0
 
constexpr static size_t json_overhead = 0xff
 
constexpr static size_t base64_chunk_size = 4096 / 2
 
constexpr static size_t bin_chunk_size = base64_chunk_size * 3 / 4
 

Macro Definition Documentation

◆ CPU_RESTART_ADDR

#define CPU_RESTART_ADDR   ((uint32_t *)0xE000ED0C)

Definition at line 44 of file flasher.cpp.

◆ CPU_RESTART_VAL

#define CPU_RESTART_VAL   (0x5FA0004)

Definition at line 45 of file flasher.cpp.

◆ FLASH_BASE_ADDR

#define FLASH_BASE_ADDR   (0x60000000)

Definition at line 39 of file flasher.cpp.

Referenced by loader::FirmwareFlasher::complete(), and firmware_buffer_init().

◆ FLASH_ID

#define FLASH_ID   "fw_teensy41"

Definition at line 31 of file flasher.cpp.

◆ FLASH_ID_LEN

#define FLASH_ID_LEN   (11)

Definition at line 32 of file flasher.cpp.

◆ FLASH_RESERVE

#define FLASH_RESERVE   (80 * FLASH_SECTOR_SIZE)

Definition at line 38 of file flasher.cpp.

Referenced by firmware_buffer_init(), and if().

◆ FLASH_SECTOR_SIZE

#define FLASH_SECTOR_SIZE   (0x1000)

Definition at line 34 of file flasher.cpp.

Referenced by __attribute__(), firmware_buffer_init(), flash_erase_block(), if(), and while().

◆ FLASH_SIZE

#define FLASH_SIZE   (0x800000)

Definition at line 33 of file flasher.cpp.

Referenced by firmware_buffer_init(), and if().

◆ FLASH_WRITE_SIZE

#define FLASH_WRITE_SIZE   (4)

Definition at line 35 of file flasher.cpp.

Referenced by flash_write_block(), if(), and while().

◆ IN_FLASH

#define IN_FLASH ( a)
Value:
#define FLASH_BASE_ADDR
Definition flasher.cpp:39
#define FLASH_SIZE
Definition flasher.cpp:33

Definition at line 41 of file flasher.cpp.

Referenced by flash_write_block().

◆ RAMFUNC

#define RAMFUNC   __attribute__((section(".fastrun"), noinline, noclone, optimize("Os")))

Definition at line 50 of file flasher.cpp.

◆ REBOOT

#define REBOOT   (*CPU_RESTART_ADDR = CPU_RESTART_VAL)

Definition at line 46 of file flasher.cpp.

Referenced by loader::reboot().

◆ return_err

◆ return_errf

#define return_errf ( code,
msg,
... )
Value:
{ \
char msgbuf[1000]; \
snprintf(msgbuf, sizeof(msgbuf), msg, __VA_ARGS__); \
msg_out["error"] = msgbuf; \
return code; \
}

Definition at line 281 of file flasher.cpp.

Referenced by loader::FirmwareFlasher::init(), and loader::FirmwareFlasher::stream().

◆ RETURN_IF_FLASHING_NOT_ENABLED

#define RETURN_IF_FLASHING_NOT_ENABLED   return_err(0, "OTA Flashing is disabled in this firmware build")

Function Documentation

◆ __attribute__()

__attribute__ ( (section(".fastrun"), noinline, noclone, optimize("Os")) )

Definition at line 114 of file flasher.cpp.

References FLASH_SECTOR_SIZE, and uint32_t.

Referenced by flash_write_block(), and loader::FirmwareFlasher::stream().

◆ eepromemu_flash_erase_32K_block()

void eepromemu_flash_erase_32K_block ( void * addr)

◆ eepromemu_flash_erase_64K_block()

void eepromemu_flash_erase_64K_block ( void * addr)

◆ eepromemu_flash_erase_sector()

void eepromemu_flash_erase_sector ( void * addr)

Referenced by flash_erase_block(), if(), and while().

◆ eepromemu_flash_write()

void eepromemu_flash_write ( void * addr,
const void * data,
uint32_t len )

Referenced by flash_write_block(), and while().

◆ firmware_buffer_free()

void firmware_buffer_free ( uint32_t buffer_addr,
uint32_t buffer_size )

Definition at line 107 of file flasher.cpp.

References flash_erase_block().

Referenced by loader::FirmwareBuffer::~FirmwareBuffer().

◆ firmware_buffer_init()

void firmware_buffer_init ( uint32_t * buffer_addr,
uint32_t * buffer_size )

◆ flash_erase_block()

FLASHMEM int flash_erase_block ( uint32_t address,
uint32_t size )

Definition at line 204 of file flasher.cpp.

References eepromemu_flash_erase_sector(), FLASH_SECTOR_SIZE, size, and uint32_t.

Referenced by firmware_buffer_free().

◆ flash_write_block() [1/2]

int flash_write_block ( uint32_t addr,
char * data,
uint32_t count )

◆ flash_write_block() [2/2]

FLASHMEM int flash_write_block ( uint32_t addr,
uint8_t * data,
uint32_t count )

Definition at line 225 of file flasher.cpp.

References __attribute__(), eepromemu_flash_write(), FLASH_WRITE_SIZE, IN_FLASH, and uint32_t.

◆ for()

for ( ;; )

Definition at line 197 of file flasher.cpp.

◆ if()

if ( ((src) >=(0x60000000) &&(src)<(0x60000000)+(0x800000)) )

◆ while()

Variable Documentation

◆ base64_chunk_size

static size_t base64_chunk_size = 4096 / 2
staticconstexpr

Definition at line 294 of file flasher.cpp.

◆ bin_chunk_size

static size_t bin_chunk_size = base64_chunk_size * 3 / 4
staticconstexpr

Definition at line 295 of file flasher.cpp.

Referenced by loader::FirmwareFlasher::init(), and loader::FirmwareFlasher::stream().

◆ json_overhead

static size_t json_overhead = 0xff
staticconstexpr

Definition at line 293 of file flasher.cpp.

◆ leave_interrupts_disabled

leave_interrupts_disabled = 0
static

Definition at line 70 of file flasher.cpp.

◆ size

◆ src

◆ success

◆ uint32_t