f
Embed:
(wiki syntax)
Show/hide line numbers
arduino-util.cpp
00001 #ifdef ARDUINO 00002 00003 #include <Arduino.h> 00004 #include "arduino-util.h" 00005 #include <cstdarg> 00006 #include <stdio.h> 00007 00008 00009 char tmpbuf[160]; 00010 extern int us_getTicker(void); 00011 extern int s_getTicker(void); 00012 extern Stream *ser; 00013 00014 void 00015 dprintf(const char *format, ...) 00016 { 00017 static volatile bool busy; 00018 if (busy) 00019 return; 00020 busy = true; 00021 00022 int secs = s_getTicker(); 00023 int s = secs % 60; 00024 int m = secs / 60; 00025 int h = secs / 3600; 00026 int us = us_getTicker() % 1000000; 00027 00028 snprintf(tmpbuf, sizeof(tmpbuf)-1, "%02d:%02d:%02d.%.06d ", h, m, s, us); 00029 ser->write(tmpbuf, (int) sizeof "00:00:34.3436868 " -1); 00030 00031 va_list arg; 00032 va_start(arg, format); 00033 int len = vsnprintf(tmpbuf, sizeof(tmpbuf)-3, format, arg); 00034 tmpbuf[len] = '\r'; 00035 tmpbuf[len+1] = '\n'; 00036 tmpbuf[len+2] = 0; 00037 ser->write(tmpbuf, len+3); 00038 va_end(arg); 00039 busy = false; 00040 } 00041 00042 void 00043 rprintf(const char *format, ...) 00044 { 00045 va_list arg; 00046 va_start(arg, format); 00047 int len = vsnprintf(tmpbuf, sizeof(tmpbuf)-3, format, arg); 00048 tmpbuf[len] = 0; 00049 ser->write(tmpbuf, len+1); 00050 va_end(arg); 00051 } 00052 00053 void 00054 dump(const char *title, const void *data, int len) 00055 { 00056 dprintf("dump(\"%s\", 0x%x, %d bytes)", title, data, len); 00057 00058 int i, j, cnt; 00059 unsigned char *u; 00060 const int width = 16; 00061 const int seppos = 7; 00062 00063 cnt = 0; 00064 u = (unsigned char *)data; 00065 while (len > 0) { 00066 rprintf("%08x: ", (unsigned int)data + cnt); 00067 cnt += width; 00068 j = len < width ? len : width; 00069 for (i = 0; i < j; i++) { 00070 rprintf("%2.2x ", *(u + i)); 00071 if (i == seppos) 00072 ser->write(' '); 00073 } 00074 ser->write(' '); 00075 if (j < width) { 00076 i = width - j; 00077 if (i > seppos + 1) 00078 ser->write(' '); 00079 while (i--) { 00080 ser->print(" "); 00081 } 00082 } 00083 for (i = 0; i < j; i++) { 00084 int c = *(u + i); 00085 if (c >= ' ' && c <= '~') 00086 ser->write(c); 00087 else 00088 ser->write('.'); 00089 if (i == seppos) 00090 ser->write(' '); 00091 } 00092 len -= width; 00093 u += width; 00094 ser->print("\r\n"); 00095 } 00096 ser->print("--\r\n"); 00097 00098 } 00099 #endif
Generated on Tue Jul 12 2022 21:55:12 by 1.7.2