logger.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include <stdio.h>
  2. #include <stdarg.h>
  3. #include "bsp/bsp.h"
  4. #include "logger.h"
  5. static uint32_t level_data[2];
  6. static int _get_level(int mod){
  7. int index = mod_bit_start(mod)/(32+1);
  8. mod = mod_bit_start(mod) % 32;
  9. return (level_data[index] >> mod) & LEVEL_MASK;
  10. }
  11. void set_log_level(int mod, int l){
  12. int index = mod_bit_start(mod)/(32+1);
  13. mod = mod_bit_start(mod) % 32;
  14. level_data[index] = (level_data[index] & (~(LEVEL_MASK<<mod))) | ((l & LEVEL_MASK)<<mod);
  15. }
  16. static void log_out(char *fmt, va_list args){
  17. vprintf(fmt, args);
  18. if (fmt[strlen(fmt) - 1] != '\n'){
  19. printf("\n");
  20. }
  21. }
  22. void log_debug(int mod, char *fmt, ...){
  23. if (_get_level(mod) >= L_debug){
  24. va_list args;
  25. va_start(args, fmt);
  26. log_out(fmt, args);
  27. va_end(args);
  28. }
  29. }
  30. void log_warning(int mod, char *fmt, ...){
  31. if (_get_level(mod) >= L_warning){
  32. va_list args;
  33. va_start(args, fmt);
  34. log_out(fmt, args);
  35. va_end(args);
  36. }
  37. }
  38. void log_error(int mod, char *fmt, ...){
  39. if (_get_level(mod) >= L_error){
  40. va_list args;
  41. va_start(args, fmt);
  42. log_out(fmt, args);
  43. va_end(args);
  44. }
  45. }
  46. //rewrite the fputc, so that the printf,vprintf can log the info the can
  47. #if LOG_UART==0
  48. static char log_buffer[8];
  49. static int log_index = 0;
  50. int fputc(int c, FILE *fp){
  51. can_id_t frame_id;
  52. frame_id.id=0;
  53. frame_id.src = CAN_MY_ADDRESS;
  54. frame_id.type = ptype_indicater;
  55. if (c == '\n'){ //don't send '\n'
  56. if (log_index != 0){
  57. frame_id.dest = 0x72;
  58. shark_can0_send_message(frame_id.id, log_buffer, log_index);
  59. }
  60. log_index = 0;
  61. }else if (log_index == sizeof(log_buffer)){
  62. frame_id.dest = 0x70;
  63. shark_can0_send_message(frame_id.id, log_buffer, log_index);
  64. log_index = 0;
  65. log_buffer[log_index++] = c;
  66. }else{
  67. log_buffer[log_index++] = c;
  68. }
  69. return 1;
  70. }
  71. #endif