#include "xerror.h"



/*
#pragma CODE_SECTION(xassert,".fast_run");
int xassert(unsigned int er, unsigned int er_ID, void *CallBackRef){
  if(er)
    return xerror(er_ID, CallBackRef);
  return 0;    
}
*/

int xerror(unsigned int er_ID, void *CallBackRef)
{

  switch(er_ID){


//main

    // error test Xilinx. Xilinx dead.
    case main_er_ID(1):  XERROR_DEBUG_MODE;  break;

//  ошибка в настройках проекта, размерность массива например
    case main_er_ID(2):  XERROR_DEBUG_MODE;  break;

//  ошибка на линии err0
    case main_er_ID(3):  XERROR_DEBUG_MODE;  break;

//xtools

	//  error load Xilinx. faulse level on line INIT
    case xtools_er_ID(1): XERROR_DEBUG_MODE; break;

	// error load Xilinx. faulse level on line DONE
    case xtools_er_ID(2): XERROR_DEBUG_MODE; break;



//xseeprom

    //error write to serial eeprom. xseeprom_write_all
    case xseeprom_er_ID(1): XERROR_DEBUG_MODE; break;

	// error read from serial eeprom. xseeprom_read_all
    case xseeprom_er_ID(2): XERROR_DEBUG_MODE; break;

	// error compare serial eeprom.
    case xseeprom_er_ID(3): XERROR_DEBUG_MODE; break;


//serialBus

	//error write to serial bus
	case xserial_bus_er_ID(1): XERROR_DEBUG_MODE; break; 
	//error find plates on serial bus
	case xserial_bus_er_ID(2): XERROR_DEBUG_MODE; break; 
	
//PBus

    //error setup to parall bus, overfull size pbus array!
    case xparall_bus_er_ID(1): XERROR_DEBUG_MODE; break;
    //error run parall bus!
    case xparall_bus_er_ID(2): XERROR_DEBUG_MODE; break;
    
	default: XERROR_DEBUG_MODE;   break;

  }



  return 1;

}





/*
int xerror(unsigned int er_ID, void *CallBackRef){

  unsigned int er=1;
  unsigned int Value;
  static int count_error=0;

 //  XIn_Plane  XIn_Plane0;

//  if(x_mask_er)
//    return 0;

//  asm ("   ESTOP0");

  switch(er_ID){
   
    // error write/read
    case main_er_ID(1):  XERROR_DEBUG_MODE;  xReady_reg_reset(); break;

  // error in write/read 
    //case xinput_new_er_ID(1): XERROR_DEBUG_MODE; break;

	// structure is NOT READY
//    case xinput_new_er_ID(2): XERROR_DEBUG_MODE; break;
    case xinput_new_er_ID(2): XERROR_DEBUG_MODE_INPUT_NEW_NOT_READY; if (XERROR_DEBUG_LEVEL==1) {er=0;} break;

  // config information is empty
    case xinput_new_er_ID(3): XERROR_DEBUG_MODE; break;

	// bad input parameter
    case xinput_new_er_ID(4): XERROR_DEBUG_MODE; break;

	// too large parameter max,high or low
    case xinput_new_er_ID(5): XERROR_DEBUG_MODE; break;

	// High_value must be more 0
    case xinput_new_er_ID(6): XERROR_DEBUG_MODE; break;

	// too large parameter Max_value
    case xinput_new_er_ID(7): XERROR_DEBUG_MODE; break;

	// triggeing data is NOT READY
    case xinput_new_er_ID(8): XERROR_DEBUG_MODE; break;

	// test write/read is failure
    case xinput_new_er_ID(9): XERROR_DEBUG_MODE; break;



    // error in write/read 
    //case xintc_er_ID(1): XERROR_DEBUG_MODE; break;

	// structure is NOT READY
    case xintc_er_ID(2): XERROR_DEBUG_MODE; break;

    // unknown mode
    case xintc_er_ID(3): XERROR_DEBUG_MODE; break;

    // Id is not exist
    case xintc_er_ID(4): XERROR_DEBUG_MODE; break;

    // Handle is Null
    case xintc_er_ID(5): XERROR_DEBUG_MODE; break;

	//self-test is failure because mode is Real or
	//simulate of interrupt is failure because mode is Real
    case xintc_er_ID(6): XERROR_DEBUG_MODE; break;

	//self-test is failure
    case xintc_er_ID(7): XERROR_DEBUG_MODE; break;



    // error in write/read 
    case xserial_bus_er_ID(1): //XERROR_DEBUG_MODE;
  	  count_error++;
	  Value=((XSerial_bus *)CallBackRef)->Adr.bit.AdrPlane;
	  break;

	// structure is NOT READY
    case xserial_bus_er_ID(2): XERROR_DEBUG_MODE; break;

  // config information is empty
    case xserial_bus_er_ID(3): XERROR_DEBUG_MODE; break;

  // PicoBlaze is not found in hardware
    case xserial_bus_er_ID(4): XERROR_DEBUG_MODE; break;

  // serial bus is hang up
    case xserial_bus_er_ID(5): XERROR_DEBUG_MODE;  write_memory(((XSerial_bus *)CallBackRef)->BaseAddress+adr_Xserial_iar_ipr,0xffff); break;



    // error in write/read 
    case xserial_bus_simple_er_ID(1): XERROR_DEBUG_MODE; break;

	// structure is NOT READY
    case xserial_bus_simple_er_ID(2): XERROR_DEBUG_MODE; break;

  // config information is empty
    case xserial_bus_simple_er_ID(3): XERROR_DEBUG_MODE; break;

  // self-test is failure
    case xserial_bus_simple_er_ID(4): XERROR_DEBUG_MODE; break;

  // tune is failure
    case xserial_bus_simple_er_ID(5): XERROR_DEBUG_MODE; break;



    // error in write/read 
    //case xsoft_fifo_er_ID(1): XERROR_DEBUG_MODE; break;

	// structure is NOT READY
    case xsoft_fifo_er_ID(2): XERROR_DEBUG_MODE; break;



    // error in write/read 
    //case xtimer_er_ID(1): XERROR_DEBUG_MODE; break;

	// structure is NOT READY
    case xtimer_er_ID(2): XERROR_DEBUG_MODE; break;

  // config information is empty
    case xtimer_er_ID(3): XERROR_DEBUG_MODE; break;

  // self-test is failure
    case xtimer_er_ID(4): XERROR_DEBUG_MODE; break;

  // start is failure
    case xtimer_er_ID(5): XERROR_DEBUG_MODE; break;

     // value_us must be more 0
    case xtimer_er_ID(6): XERROR_DEBUG_MODE; break;

     // hw is't compatible with software: RangeCount_Is too small or time_us too large
    case xtimer_er_ID(7): XERROR_DEBUG_MODE; break;



    // error in write/read 
    //case xplane_hwp_er_ID(1): XERROR_DEBUG_MODE; break;

	// structure is NOT READY
    case xplane_hwp_er_ID(2): XERROR_DEBUG_MODE_HWP_NOT_READY; if (XERROR_DEBUG_LEVEL==1) {er=0;} break;

  // config information is empty or bad
    case xplane_hwp_er_ID(3): XERROR_DEBUG_MODE; break;

  // test er_line is failure
    case xplane_hwp_er_ID(4): XERROR_DEBUG_MODE; break;

  // error in write/read in dac
    case xplane_hwp_er_ID(5): XERROR_DEBUG_MODE; break;

     // no error test is failure
    case xplane_hwp_er_ID(6): XERROR_DEBUG_MODE; break;

     // watch timer test is failure
    case xplane_hwp_er_ID(7): XERROR_DEBUG_MODE; break;

     // reference test is failure
    case xplane_hwp_er_ID(8): XERROR_DEBUG_MODE; break;

     // define voltage test is failure
    case xplane_hwp_er_ID(9): XERROR_DEBUG_MODE; break;

     // voltage test is failure
    case xplane_hwp_er_ID(10): XERROR_DEBUG_MODE; break;



    // error in write/read 
    //case xtools_er_ID(1): XERROR_DEBUG_MODE; break;

	// structure is NOT READY
    //case xtools_er_ID(2): XERROR_DEBUG_MODE; break;

    // config information is empty
    //case xtools_er_ID(3): XERROR_DEBUG_MODE; break;

     // bad input parameter Time_Unit_Is
    case xtools_er_ID(4): XERROR_DEBUG_MODE; break;

     // bad input parameter Time_Unit_Is
    case xtools_er_ID(5): XERROR_DEBUG_MODE; break;

  // too large parameter Value
    case xtools_er_ID(6): XERROR_DEBUG_MODE; break;

	// faulse level on line INIT
    case xtools_er_ID(7): XERROR_DEBUG_MODE; break;

	// faulse level on line DONE
    case xtools_er_ID(8): XERROR_DEBUG_MODE; break;




    // error in write/read
    //case xtk_plane_er_ID(1): XERROR_DEBUG_MODE; break;

	// structure is NOT READY
    case xtk_plane_er_ID(2): XERROR_DEBUG_MODE_TK_NOT_READY; if (XERROR_DEBUG_LEVEL==1) {er=0;} break;

    // config information is empty
    case xtk_plane_er_ID(3): XERROR_DEBUG_MODE; ((XTk_Plane *)CallBackRef)->IsReady=0; break;

    // self-test is failure
    case xtk_plane_er_ID(4): XERROR_DEBUG_MODE; ((XTk_Plane *)CallBackRef)->IsReady=0; break;

     // no connection on serial bus
    case xtk_plane_er_ID(5): XERROR_DEBUG_MODE; ((XTk_Plane *)CallBackRef)->IsReady=0; if (XERROR_DEBUG_LEVEL==1) {er=0;} break;

     // test Tk_Bus is failure
    case xtk_plane_er_ID(6): XERROR_DEBUG_MODE; ((XTk_Plane *)CallBackRef)->IsReady=0; break;



    // error in write/read 
    //case xtk_plane_er_ID(1): XERROR_DEBUG_MODE; break;

	// structure is NOT READY
    case xin_plane_er_ID(2): XERROR_DEBUG_MODE_IN_NOT_READY; if (XERROR_DEBUG_LEVEL==1) {er=0;} break;

    // config information is empty
    case xin_plane_er_ID(3): XERROR_DEBUG_MODE; ((XIn_Plane *)CallBackRef)->IsReady=0; break;

  // self-test is failure
    case xin_plane_er_ID(4): XERROR_DEBUG_MODE; ((XIn_Plane *)CallBackRef)->IsReady=0; break;

     // no connection on serial bus
    case xin_plane_er_ID(5): XERROR_DEBUG_MODE; ((XIn_Plane *)CallBackRef)->IsReady=0; if (XERROR_DEBUG_LEVEL==1) {er=0;}; break;

     // bad configuration of InputNew
    case xin_plane_er_ID(6): XERROR_DEBUG_MODE; ((XIn_Plane *)CallBackRef)->IsReady=0;  break;

    // error in set Real mode
    case xin_plane_er_ID(7): XERROR_DEBUG_MODE; ((XIn_Plane *)CallBackRef)->IsReady=0; break;



    // error in write/read 
    //case xtk_plane_er_ID(1): XERROR_DEBUG_MODE; break;

	// structure is NOT READY
    case xout_plane_er_ID(2): XERROR_DEBUG_MODE_OUT_NOT_READY; if (XERROR_DEBUG_LEVEL==1) {er=0;} break;

    // config information is empty
    case xout_plane_er_ID(3): XERROR_DEBUG_MODE; ((XOut_Plane *)CallBackRef)->IsReady=0; break;

  // self-test is failure
    case xout_plane_er_ID(4): XERROR_DEBUG_MODE; ((XOut_Plane *)CallBackRef)->IsReady=0; break;

     // no connection on serial bus
    case xout_plane_er_ID(5): XERROR_DEBUG_MODE; ((XOut_Plane *)CallBackRef)->IsReady=0; if (XERROR_DEBUG_LEVEL==1) {er=0;}; break;

     // bad configuration of InputNew
    //case xout_plane_er_ID(6): XERROR_DEBUG_MODE; break;

    // error in set Real mode
    //case xout_plane_er_ID(7): XERROR_DEBUG_MODE; break;



    // error in write/read 
    //case xspeed_sensor_er_ID(1): XERROR_DEBUG_MODE; break;

	// structure is NOT READY
    //case xspeed_sensor_er_ID(2): XERROR_DEBUG_MODE; break;

    // config information is empty
    //case xspeed_sensor_er_ID(3): XERROR_DEBUG_MODE; break;

    // self-test is failure
    //case xspeed_sensor_er_ID(4): XERROR_DEBUG_MODE; break;

     // bad configuration of InputNew
    case xspeed_sensor_er_ID(5): XERROR_DEBUG_MODE; break;

	// too large parameter Filtr_Max
    case xspeed_sensor_er_ID(6): XERROR_DEBUG_MODE; break;

	// too large parameter Lenth_Min
    //case xspeed_sensor_er_ID(7): XERROR_DEBUG_MODE; break;

	// compare predefine macros is failure
    case xspeed_sensor_er_ID(8): XERROR_DEBUG_MODE; break;

	// maximum of reriod is small
    case xspeed_sensor_er_ID(9): XERROR_DEBUG_MODE; break;

	// maximum of reriod is small => overrun count_max_by_hw
    case xspeed_sensor_er_ID(10): XERROR_DEBUG_MODE; break;

	// count_max_by_sw must be less count_max_by_hw
    case xspeed_sensor_er_ID(11): XERROR_DEBUG_MODE; break;




    // error in write/read 
    //case xcontroller_plane_er_ID(1): XERROR_DEBUG_MODE; break;

	// structure is NOT READY
    //case xcontroller_plane_er_ID(2): XERROR_DEBUG_MODE; break;

    // config information is failure
    case xcontroller_plane_er_ID(3): XERROR_DEBUG_MODE; break;

    // self-test is failure
    //case xcontroller_plane_er_ID(4): XERROR_DEBUG_MODE; break;





    // error in write/read 
    //case xplane_analog_er_ID(1): XERROR_DEBUG_MODE; break;

	// structure is NOT READY
    case xplane_analog_er_ID(2): XERROR_DEBUG_MODE_ANALOG_NOT_READY; if (XERROR_DEBUG_LEVEL==1) {er=0;} break;

  // config information is empty or bad
    case xplane_analog_er_ID(3): XERROR_DEBUG_MODE; break;

  // test er_line is failure
  //  case xplane_analog_er_ID(4): XERROR_DEBUG_MODE; break;

  // error in write/read in dac
    case xplane_analog_er_ID(5): XERROR_DEBUG_MODE_ANALOG;  break; // xplane_analog_chanals_init(&XPlane_Analog_Chanals0); break;




	default: break;
  }

  x_er|=er;	 
  xReady_reg_update();

  return 1;
}

*/


