#include #include #include #include "logger.h" #include "app/protocol.h" static uint32_t level_data[2]; static int _get_level(int mod){ int index = mod_bit_start(mod)/(32+1); mod = mod_bit_start(mod) % 32; return (level_data[index] >> mod) & LEVEL_MASK; } void set_log_level(int mod, int l){ int index = mod_bit_start(mod)/(32+1); mod = mod_bit_start(mod) % 32; level_data[index] = (level_data[index] & (~(LEVEL_MASK<= L_debug){ va_list args; va_start(args, fmt); log_out(fmt, args); va_end(args); } } void log_warning(int mod, char *fmt, ...){ if (_get_level(mod) >= L_warning){ va_list args; va_start(args, fmt); log_out(fmt, args); va_end(args); } } void log_error(int mod, char *fmt, ...){ if (_get_level(mod) >= L_error){ va_list args; va_start(args, fmt); log_out(fmt, args); va_end(args); } } //rewrite the fputc, so that the printf,vprintf can log the info the can static char log_buffer[64]; static int log_index = sizeof(can_head_t); int fputc(int c, FILE *fp){ if (c == '\n'){ //don't send '\n' if ((log_index - sizeof(can_head_t)) != 0){ protocol_send_debug_info(0x72, log_buffer, log_index); } log_index = sizeof(can_head_t); }else if (log_index == sizeof(log_buffer)){ protocol_send_debug_info(0x70 ,log_buffer, log_index); log_index = sizeof(can_head_t); log_buffer[log_index++] = c; }else{ log_buffer[log_index++] = c; } return 1; }