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