void _logf(const char *fmt, ...) { #ifdef USB_ENABLE_SERIAL int old_logfindex = logfindex; #endif va_list ap; va_start(ap, fmt); #if (CONFIG_PLATFORM & PLATFORM_HOSTED) char buf[1024]; vsnprintf(buf, sizeof buf, fmt, ap); DEBUGF("%s\n", buf); /* restart va_list otherwise the result if undefined when vuprintf is called */ va_end(ap); va_start(ap, fmt); #endif vuprintf(logf_push, NULL, fmt, ap); va_end(ap); /* add trailing zero */ logf_push(NULL, '\0'); #if defined(HAVE_SERIAL) && !defined(SIMULATOR) && defined(LOGF_SERIAL) serial_tx("\r\n"); #endif #ifdef USB_ENABLE_SERIAL if(logfindex < old_logfindex) { usb_serial_send(logfbuffer + old_logfindex, MAX_LOGF_SIZE - old_logfindex); usb_serial_send(logfbuffer, logfindex - 1); } else usb_serial_send(logfbuffer + old_logfindex, logfindex - old_logfindex - 1); usb_serial_send("\r\n", 2); #endif displayremote(); }
void logf(const char *format, ...) { int len; unsigned char *ptr; va_list ap; va_start(ap, format); if(logfindex >= MAX_LOGF_LINES) { /* wrap */ logfwrap = true; logfindex = 0; } ptr = logfbuffer[logfindex]; len = vsnprintf(ptr, MAX_LOGF_ENTRY, format, ap); va_end(ap); if(len < MAX_LOGF_ENTRY) /* pad with spaces up to the MAX_LOGF_ENTRY byte border */ memset(ptr+len, ' ', MAX_LOGF_ENTRY-len); logfindex++; /* leave it where we write the next time */ displayremote(); }