static void s_osal_cfg_on_fatal_error(void* task, osal_fatalerror_t errorcode, const char * errormsg) { uint8_t tskid = 0; char str[64]; osal_task_id_get((osal_task_t*)task, &tskid); snprintf(str, sizeof(str), "osalerror %d taskid %d: %s", errorcode, tskid, errormsg); if(eobool_true == eo_errman_IsErrorHandlerConfigured(eo_errman_GetHandle())) { // ok ... use the error manager, either in its simple form or in its networked form eOerrmanDescriptor_t errdes = {0}; errdes.code = eoerror_code_get(eoerror_category_System, eoerror_value_SYS_osalerror); errdes.par16 = errorcode; errdes.par64 = 0; errdes.sourcedevice = eo_errman_sourcedevice_localboard; errdes.sourceaddress = 0; eo_errman_Error(eo_errman_GetHandle(), eo_errortype_fatal, str, "OSAL", &errdes); } else { if(NULL != errormsg) { hal_trace_puts(errormsg); } // in case of fatal error we blink all leds but led1 hal_led_init(hal_led0, NULL); hal_led_init(hal_led1, NULL); hal_led_init(hal_led2, NULL); hal_led_init(hal_led3, NULL); hal_led_init(hal_led4, NULL); hal_led_init(hal_led5, NULL); hal_led_off(hal_led0); hal_led_off(hal_led1); hal_led_off(hal_led2); hal_led_off(hal_led3); hal_led_off(hal_led4); hal_led_off(hal_led5); for(;;) { hal_sys_delay(100); hal_led_toggle(hal_led0); //hal_led_toggle(hal_led1); hal_led_toggle(hal_led2); hal_led_toggle(hal_led3); hal_led_toggle(hal_led4); hal_led_toggle(hal_led5); } } }
static void s_hal_core_cfg_on_fatalerror(hal_fatalerror_t errorcode, const char * errormsg) { if(eobool_true == eo_errman_IsErrorHandlerConfigured(eo_errman_GetHandle())) { // ok ... use the error manager, either in its simple form or in its networked form eOerrmanDescriptor_t errdes = {0}; errdes.code = eoerror_code_get(eoerror_category_System, eoerror_value_SYS_halerror); errdes.par16 = errorcode; errdes.par64 = 0; errdes.sourcedevice = eo_errman_sourcedevice_localboard; errdes.sourceaddress = 0; eo_errman_Error(eo_errman_GetHandle(), (hal_fatalerror_warning == errorcode) ? eo_errortype_warning : eo_errortype_fatal, errormsg, "HAL", &errdes); } else { if(NULL != errormsg) { hal_trace_puts(errormsg); } if(hal_fatalerror_warning == errorcode) { return; } // in case of fatal error we blink all leds but led0 hal_led_init(hal_led0, NULL); hal_led_init(hal_led1, NULL); hal_led_init(hal_led2, NULL); hal_led_init(hal_led3, NULL); hal_led_init(hal_led4, NULL); hal_led_init(hal_led5, NULL); hal_led_off(hal_led0); hal_led_off(hal_led1); hal_led_off(hal_led2); hal_led_off(hal_led3); hal_led_off(hal_led4); hal_led_off(hal_led5); for(;;) { hal_sys_delay(100); //hal_led_toggle(hal_led0); hal_led_toggle(hal_led1); hal_led_toggle(hal_led2); hal_led_toggle(hal_led3); hal_led_toggle(hal_led4); hal_led_toggle(hal_led5); } } }