Skip to content
Snippets Groups Projects
errors.c 2.17 KiB
Newer Older
/* 
 * File:   errors.c
 * Author: Carlo Alessandro Nicolau @ INFN
 * 
 * Firmware for BPD board.
 * Error-related functions.
 */

#include "errors.h"
#include "hardware.h"
#include "errorcodes.h"
#include "generated/sources/variables.h"
#include "spurious.h"

err_t errors_last_error = NOERR;

void error_notify(err_t _err) {
    // do nothing special, just set the value to be remembered
    // notify one error (probably to remove on final version)
    errors_last_error = _err;
    
    // Signal with some LED flashes
    // TODO COMMENT OUT error_notify
    INTERRUPT_GlobalInterruptDisable();
    for(int k=0; k<8; k++) {
        userpin_SWITCH_LED_D9_set_high();
        userpin_SWITCH_LED_D10_set_high();
        __delay_ms(50);
        userpin_SWITCH_LED_D9_set_low();
        userpin_SWITCH_LED_D10_set_low();
        __delay_ms(50);        
    }
    for(int k=0; k<8; k++) {
        userpin_SWITCH_LED_D9_set_high();
        userpin_SWITCH_LED_D10_set_low();
        __delay_ms(50);
        userpin_SWITCH_LED_D9_set_low();
        userpin_SWITCH_LED_D10_set_high();
        __delay_ms(50);        
    }
    userpin_SWITCH_LED_D9_set_low();    
    userpin_SWITCH_LED_D10_set_low();
    INTERRUPT_GlobalInterruptEnable();
    
}

void error_die_forever(void) {    
    // THIS SHOULD NEVE HAPPEN, PLEASE UNCOMMENT DURING DEVELOPMENT
    // TODO COMMENT OUT error_die_forever
    INTERRUPT_GlobalInterruptDisable();
    while(1) {
        userpin_SWITCH_LED_D9_set_high();
        userpin_SWITCH_LED_D10_set_high();
        __delay_ms(250);
        userpin_SWITCH_LED_D9_set_low();
        userpin_SWITCH_LED_D10_set_low();
        __delay_ms(250);
    }    
}

// ... see .h
void error_die_forever_fromIRQ(void) {    
    // THIS SHOULD NEVE HAPPEN, PLEASE UNCOMMENT DURING DEVELOPMENT
    // TODO COMMENT OUT error_die_forever_fromIRQ
    INTERRUPT_GlobalInterruptDisable();
    while(1) {
        userpin_SWITCH_LED_D9_set_high_fromIRQ();
        userpin_SWITCH_LED_D10_set_low_fromIRQ();
        userpin_SWITCH_LED_D9_set_low_fromIRQ();
        userpin_SWITCH_LED_D10_set_high_fromIRQ();