BlueSCSI_log.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 array of bytes
  28. struct bytearray {
  29. bytearray(const uint8_t *data, size_t len): data(data), len(len) {}
  30. const uint8_t *data;
  31. size_t len;
  32. };
  33. void log_raw(bytearray array);
  34. inline void log_raw()
  35. {
  36. // End of template recursion
  37. }
  38. extern "C" unsigned long millis();
  39. // Variadic template for printing multiple items
  40. template<typename T, typename T2, typename... Rest>
  41. inline void log_raw(T first, T2 second, Rest... rest)
  42. {
  43. log_raw(first);
  44. log_raw(second);
  45. log_raw(rest...);
  46. }
  47. // Format a complete log message
  48. template<typename... Params>
  49. inline void log(Params... params)
  50. {
  51. if (g_log_debug)
  52. {
  53. log_raw("[", (int)millis(), "ms] ");
  54. }
  55. log_raw(params...);
  56. log_raw("\n");
  57. }
  58. // Format a complete debug message
  59. template<typename... Params>
  60. inline void debuglog(Params... params)
  61. {
  62. if (g_log_debug)
  63. {
  64. log_raw("[", (int)millis(), "ms] DBG ");
  65. log_raw(params...);
  66. log_raw("\n");
  67. }
  68. }