34#if defined(STM32F4) || defined(STM32F7) || defined(STM32H7)
36 uint32_t *uid = ((uint32_t *)UID_BASE);
38 efiPrintf(
"********************** UID=%lx:%lx:%lx crc=%d ******************************", uid[0], uid[1], uid[2],
engine->
outputChannels.
deviceUid);
57 efiPrintf(PROTOCOL_HELLO_PREFIX
" rusEFI LLC (c) 2012-2024. All rights reserved.");
59 efiPrintf(PROTOCOL_HELLO_PREFIX
" Chibios Kernel: %s", CH_KERNEL_VERSION);
60 efiPrintf(PROTOCOL_HELLO_PREFIX
" Compiled: " __DATE__
" - " __TIME__
"");
61 efiPrintf(PROTOCOL_HELLO_PREFIX
" COMPILER=%s", __VERSION__);
63 efiPrintf(PROTOCOL_HELLO_PREFIX
" with OPENBLT");
69#if EFI_PROD_CODE && ENABLE_AUTO_DETECT_HSE
77#if defined(STM32F4) || defined(STM32F7) || defined(STM32H7)
80#if defined(STM32F4) && !defined(AT32F4XX)
89#define MIN_FLASH_SIZE 1024
95 criticalError(
"rusEFI expected at least %dK of flash", MIN_FLASH_SIZE);
99 int mcuRevision = DBGMCU->SERID & 0x07;
100 int mcuSerId = (DBGMCU->SERID >> 8) & 0xff;
101 const char *partNumber, *package;
102 uint32_t pnFlashSize;
103 int ret =
at32GetMcuType(DBGMCU->IDCODE, &partNumber, &package, &pnFlashSize);
105 efiPrintf(
"MCU IDCODE %s in %s with %ld KB flash",
106 partNumber, package, pnFlashSize);
108 efiPrintf(
"MCU IDCODE unknown 0x%lx", DBGMCU->IDCODE);
110 efiPrintf(
"MCU SER_ID %s rev %c",
111 (mcuSerId == 0x0d) ?
"AT32F435" : ((mcuSerId == 0x0e) ?
"AT32F437" :
"UNKNOWN"),
113 efiPrintf(
"MCU F_SIZE %d KB",
flashSize);
116#define MCU_REVISION_MASK 0xfff
117 int mcuRevision = DBGMCU->IDCODE & MCU_REVISION_MASK;
118 efiPrintf(
"MCU rev=%x flashSize=%d", mcuRevision,
flashSize);
122#ifdef CH_CFG_ST_FREQUENCY
123 efiPrintf(
"CH_CFG_ST_FREQUENCY=%d", CH_CFG_ST_FREQUENCY);
126#ifdef ENABLE_PERF_TRACE
127 efiPrintf(
"ENABLE_PERF_TRACE=%d", ENABLE_PERF_TRACE);
131 efiPrintf(
"STM32_ADCCLK=%d", STM32_ADCCLK);
132 efiPrintf(
"STM32_TIMCLK1=%d", STM32_TIMCLK1);
133 efiPrintf(
"STM32_TIMCLK2=%d", STM32_TIMCLK2);
136 efiPrintf(
"STM32_PCLK1=%d", STM32_PCLK1);
137 efiPrintf(
"STM32_PCLK2=%d", STM32_PCLK2);
141 #define STM32_RTCSEL_SHIFT 8
142 const char * rtcsel_names[4] = {
"no clock",
"LSE",
"LSI",
"HSE"};
144 int rtcsel = (RCC->BDCR & STM32_RTCSEL_MASK) >> STM32_RTCSEL_SHIFT;
145 efiPrintf(
"STM32_RTCSEL=%d %s actual=%d %s",
146 STM32_RTCSEL >> STM32_RTCSEL_SHIFT, rtcsel_names[STM32_RTCSEL >> STM32_RTCSEL_SHIFT], rtcsel, rtcsel_names[rtcsel]);
147#ifdef RUSEFI_STM32_LSE_WAIT_MAX_RTCSEL
148 efiPrintf(
"RUSEFI_STM32_LSE_WAIT_MAX_RTCSEL=%d %s",
149 RUSEFI_STM32_LSE_WAIT_MAX_RTCSEL >> STM32_RTCSEL_SHIFT, rtcsel_names[RUSEFI_STM32_LSE_WAIT_MAX_RTCSEL >> STM32_RTCSEL_SHIFT]);
154 efiPrintf(
"PORT_IDLE_THREAD_STACK_SIZE=%d", PORT_IDLE_THREAD_STACK_SIZE);
156 efiPrintf(
"CH_DBG_ENABLE_ASSERTS=%d", CH_DBG_ENABLE_ASSERTS);
158 efiPrintf(
"CH_DBG_ENABLED=%d", CH_DBG_ENABLED);
160 efiPrintf(
"CH_DBG_SYSTEM_STATE_CHECK=%d", CH_DBG_SYSTEM_STATE_CHECK);
161 efiPrintf(
"CH_DBG_ENABLE_STACK_CHECK=%d", CH_DBG_ENABLE_STACK_CHECK);
167 chThdSleepMilliseconds(5);
170#if CH_DBG_THREADS_PROFILING && CH_DBG_FILL_THREADS
172 const uint8_t* stackBase =
reinterpret_cast<const uint8_t*
>(wabase);
173 const uint8_t* stackUsage = stackBase;
177 while (*stackUsage == CH_DBG_STACK_FILL_VALUE) {
181 return (
int)(stackUsage - stackBase);
189#if CH_DBG_THREADS_PROFILING && CH_DBG_FILL_THREADS
190 thread_t* tp = chRegFirstThread();
192 efiPrintf(
"name\twabase\ttime\tfree stack");
196 efiPrintf(
"%s\t%08x\t%lu\t%d", tp->name, (
unsigned int)tp->wabase, tp->time, freeBytes);
198 if (freeBytes < 100) {
199 criticalError(
"Ran out of stack on thread %s, %d bytes remain", tp->name, freeBytes);
202 tp = chRegNextThread(tp);
210 efiPrintf(
"isr\t0\t0\t%d", isrSpace);
215 efiPrintf(
"CH_DBG_THREADS_PROFILING && CH_DBG_FILL_THREADS is not enabled");
224 efiPrintf(
"got value: %d", value);
249#if defined(STM32F4) || defined(STM32F7) || defined(STM32H7)
259 uint32_t bltBinVersion = getOpenBltVersion();
260 efiPrintf(
"********************** blt=%lx %s version", bltBinVersion, bltBinVersion == BLT_CURRENT_VERSION ?
"CURRENT" :
"UNEXPECTED");
void setWatchdogResetPeriod(int)
uint32_t __main_stack_base__
int at32GetMcuType(uint32_t id, const char **pn, const char **package, uint32_t *flashSize)
int at32GetRamSizeKb(void)
static bool call_board_override(std::optional< setup_custom_board_overrides_type > board_override)
TunerStudioOutputChannels outputChannels
void handleConsoleLine(char *line)
This function takes care of one command line once we have it.
void addConsoleAction(const char *token, Void callback)
Register console action without parameters.
void addConsoleActionI(const char *token, VoidInt callback)
Register a console command with one Integer parameter.
void startConsole(CommandHandler console_line_callback_p)
void onCliOverflowError()
void checkStackAndHandleConsoleLine(char *line)
std::optional< setup_custom_board_overrides_type > custom_board_boardSayHello
PUBLIC_API_WEAK void boardSayHello()
void onCliDuplicateError(const char *token)
void onCliCaseError(const char *token)
static void echo(int value)
This is just a test function.
int CountFreeStackSpace(const void *wabase)
static void cmd_threads()
Console package entry point header.
const char * boolToString(bool value)
efitimems_t getTimeNowMs()
Returns the 32 bit number of milliseconds since the board initialization.
static EngineAccessor engine
static constexpr engine_configuration_s * engineConfiguration
void firmwareError(ObdCode code, const char *fmt,...)
@ CUSTOM_ERR_COMMAND_LOWER_CASE_EXPECTED
@ CUSTOM_CONSOLE_TOO_MANY
uint8_t autoDetectedRoundedMhz
static uint16_t flashSize()