Files
@ 48ae84f03494
Branch filter:
Location: protofuse-firmware/src/error.c - annotation
48ae84f03494
2.1 KiB
text/plain
Update to new HAL library, add some ADC code
ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d ad3725832a9d | //
// 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;
}
|