BlueSCSI_log.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // Helpers for log messages.
  2. #pragma once
  3. #include <stdint.h>
  4. #include <stddef.h>
  5. // Get total number of bytes that have been written to log
  6. uint32_t log_get_buffer_len();
  7. // Get log as a string.
  8. // If startpos is given, continues log reading from previous position and updates the position.
  9. // If available is given, number of bytes available is written there.
  10. const char *log_get_buffer(uint32_t *startpos, uint32_t *available = nullptr);
  11. // Whether to enable debug messages
  12. extern bool g_log_debug;
  13. // Firmware version string
  14. extern const char *g_log_firmwareversion;
  15. // Log string
  16. void log_raw(const char *str);
  17. // Log byte as hex
  18. void log_raw(uint8_t value);
  19. // Log integer as hex
  20. void log_raw(uint32_t value);
  21. // Log integer as hex
  22. void log_raw(uint64_t value);
  23. // Log integer as decimal
  24. void log_raw(int value);
  25. // Log double
  26. void log_raw(double value);
  27. // Log bool
  28. void log_raw(bool value);
  29. // Log array of bytes
  30. struct bytearray {
  31. bytearray(const uint8_t *data, size_t len): data(data), len(len) {}
  32. const uint8_t *data;
  33. size_t len;
  34. };
  35. void log_raw(bytearray array);
  36. inline void log_raw()
  37. {
  38. // End of template recursion
  39. }
  40. extern "C" unsigned long millis();
  41. // Variadic template for printing multiple items
  42. template<typename T, typename T2, typename... Rest>
  43. inline void log_raw(T first, T2 second, Rest... rest)
  44. {
  45. log_raw(first);
  46. log_raw(second);
  47. log_raw(rest...);
  48. }
  49. // Format a complete log message
  50. template<typename... Params>
  51. inline void log(Params... params)
  52. {
  53. if (g_log_debug)
  54. {
  55. log_raw("[", (int)millis(), "ms] ");
  56. }
  57. log_raw(params...);
  58. log_raw("\n");
  59. }
  60. // Format a complete debug message
  61. template<typename... Params>
  62. inline void debuglog(Params... params)
  63. {
  64. if (g_log_debug)
  65. {
  66. log_raw("[", (int)millis(), "ms] DBG ");
  67. log_raw(params...);
  68. log_raw("\n");
  69. }
  70. }