00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 #include <string.h>
00024 
00025 #ifndef HOST_VERSION
00026 #include <avr/io.h>
00027 #endif
00028 
00029 #include <aversive.h>
00030 #include <aversive/error.h>
00031 
00032 struct error_fct g_error_fct;
00033 
00035 void error_init(void)
00036 {
00037         uint8_t flags;
00038         IRQ_LOCK(flags);
00039         memset(&g_error_fct, 0, sizeof(g_error_fct));
00040         IRQ_UNLOCK(flags);
00041 }
00042 
00043 
00044 struct error error_generate(uint8_t num, uint8_t severity, PGM_P t, 
00045                             PGM_P f, uint16_t l) {
00046         struct error e;      
00047 
00048         e.err_num = num;
00049         e.severity = severity;
00050 #ifdef ERROR_DUMP_TEXTLOG
00051         e.text = t;
00052 #else
00053         e.text = PSTR("");
00054 #endif
00055 #ifdef ERROR_DUMP_FILE_LINE
00056         e.file = f;
00057         e.line = l;
00058 #else
00059         e.file = PSTR("");
00060         e.line = 0;
00061 #endif
00062         return e;
00063 }
00064 
00065 
00067 void error_register_emerg(void (*f)(struct error *, ...))
00068 {
00069         uint8_t flags;
00070         IRQ_LOCK(flags);
00071         g_error_fct.emerg = f;
00072         IRQ_UNLOCK(flags);
00073 }
00074 
00076 void error_register_error(void (*f)(struct error *, ...))
00077 {
00078         uint8_t flags;
00079         IRQ_LOCK(flags);
00080         g_error_fct.error = f;
00081         IRQ_UNLOCK(flags);
00082 }
00083 
00085 void error_register_warning(void (*f)(struct error *, ...))
00086 {
00087         uint8_t flags;
00088         IRQ_LOCK(flags);
00089         g_error_fct.warning = f;
00090         IRQ_UNLOCK(flags);
00091 }
00092 
00094 void error_register_notice(void (*f)(struct error *, ...))
00095 {
00096         uint8_t flags;
00097         IRQ_LOCK(flags);
00098         g_error_fct.notice = f;
00099         IRQ_UNLOCK(flags);
00100 }
00101 
00103 void error_register_debug(void (*f)(struct error *, ...))
00104 {
00105         uint8_t flags;
00106         IRQ_LOCK(flags);
00107         g_error_fct.debug = f;
00108         IRQ_UNLOCK(flags);
00109 }
00110