Files
@ a710d1e0fc2a
Branch filter:
Location: therm-ng/src/error.c - annotation
a710d1e0fc2a
2.1 KiB
text/plain
Import from old therm: menus working
f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d | //
// Error: Provides a simple interface for asserting and checking errors
//
#include "stm32f3xx_hal.h"
#include <stdio.h>
#include "config.h"
#include "error.h"
static volatile uint32_t err_reg;
static volatile uint8_t num_errors_asserted = 0;
// Moderately detailed messages corresponding to each error enum
//static const char * error_message[] =
//{
// "Info",
// "General",
//};
// Set the passed error flag
void error_assert(const uint8_t errno)
{
// Errno invalid: exceeds bit length of error register
if(errno >= 32)
return;
// Don't count info messages as true errors
if(errno > ERR_INFO)
{
// Set error flag
err_reg |= (1<<errno);
// Count how many errors have occurred
num_errors_asserted++;
}
// Dispatch error message over IRdA and/or debug port
#ifdef DEBUG_ERROUT_ENABLE
char outbuf[256];
snprintf(outbuf, 256, "[%lu\] %s (no details) \r\n", HAL_GetTick(), error_message[errno]);
#endif
}
// Set the passed error flag with details about the error
void error_assert_info(const uint8_t errno, const char* details)
{
// Errno invalid: exceeds bit length of error register
if(errno >= 32)
return;
// Don't count info messages as true errors
if(errno > ERR_INFO)
{
// Set error flag
err_reg |= (1<<errno);
// Count how many errors have occurred
num_errors_asserted++;
}
// Dispatch error message over IRdA and/or debug port
#ifdef DEBUG_ERROUT_ENABLE
char outbuf[256];
if(errno == ERR_INFO)
snprintf(outbuf, 256, "Info: %s \r\n", details);
else
snprintf(outbuf, 256, "[%lu\] %s (%s) \r\n", HAL_GetTick(), error_message[errno], details);
usb_send_debug(outbuf);
if(errno > ERR_INFO)
{
ir_efs_send(outbuf);
error_sidechannel_addmsg(outbuf);
}
#endif
}
// Check if the passed error flag has been asserted
inline uint8_t error_check(const uint8_t errno)
{
return (err_reg & (1<<errno)) > 0;
}
// Return 1 if any error has occurred
inline uint8_t error_occurred(void)
{
return err_reg > 0;
}
// Return the number of errors that have occurred
inline uint8_t error_count(void)
{
return num_errors_asserted;
}
|