2019-03-18 08:32:42 -03:00
|
|
|
#include "AP_InternalError.h"
|
|
|
|
|
2019-05-09 08:15:00 -03:00
|
|
|
extern const AP_HAL::HAL &hal;
|
|
|
|
|
2019-03-18 08:32:42 -03:00
|
|
|
// actually create the instance:
|
|
|
|
static AP_InternalError instance;
|
|
|
|
|
|
|
|
void AP_InternalError::error(const AP_InternalError::error_t e) {
|
|
|
|
#if CONFIG_HAL_BOARD == HAL_BOARD_SITL
|
2019-05-09 08:15:00 -03:00
|
|
|
switch (e) {
|
|
|
|
case AP_InternalError::error_t::watchdog_reset:
|
|
|
|
case AP_InternalError::error_t::main_loop_stuck:
|
|
|
|
// don't panic on these to facilitate watchdog testing
|
|
|
|
break;
|
|
|
|
default:
|
2019-05-09 05:48:50 -03:00
|
|
|
AP_HAL::panic("internal error %u", unsigned(e));
|
|
|
|
}
|
2019-03-18 08:32:42 -03:00
|
|
|
#endif
|
|
|
|
internal_errors |= uint32_t(e);
|
2019-05-09 08:15:00 -03:00
|
|
|
hal.util->persistent_data.internal_errors = internal_errors;
|
|
|
|
hal.util->persistent_data.internal_error_count++;
|
2019-03-18 08:32:42 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
namespace AP {
|
|
|
|
|
|
|
|
AP_InternalError &internalerror()
|
|
|
|
{
|
|
|
|
return instance;
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|