- /**
- * Output a variable argument list log string with the specified priority level.
- * Only defined for Arduino as depicted below.
- *
- * @param level - DEBUG, INFO, WARNING, ERROR, FATAL
- * @param tag - Module name
- * @param format - variadic log string
- */
- void OCLogv(LogLevel level, PROGMEM const char * tag, const __FlashStringHelper *format, ...)
- {
- char buffer[LINE_BUFFER_SIZE];
- va_list ap;
- va_start(ap, format);
-
- GET_PROGMEM_BUFFER(buffer, &(LEVEL[level]));
- Serial.print(buffer);
-
- char c;
- Serial.print(F(": "));
-
- while ((c = pgm_read_byte(tag))) {
- Serial.write(c);
- tag++;
- }
- Serial.print(F(": "));
-
- #ifdef __AVR__
- vsnprintf_P(buffer, sizeof(buffer), (const char *)format, ap); // progmem for AVR
- #else
- vsnprintf(buffer, sizeof(buffer), (const char *)format, ap); // for the rest of the world
- #endif
- for(char *p = &buffer[0]; *p; p++) // emulate cooked mode for newlines
- {
- if(*p == '\n')
- {
- Serial.write('\r');
- }
- Serial.write(*p);
- }
- Serial.println();
- va_end(ap);
- }
-