This is a low-level network debugging utility that utilizes raw packet i/o to construct and deconstruct tcp, udp, ipv4, arp, and icmp packets over ethernet.

Dependencies:   mbed

Revision:
0:d494b853ce97
Child:
4:88fc7fa58931
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/util/log.h	Tue Oct 12 05:32:59 2010 +0000
@@ -0,0 +1,114 @@
+#ifndef LOG_H
+#define LOG_H
+
+#include "mbed.h"
+
+#include "stdarg.h"
+#include "stdio.h"
+
+#define LOG_BUFSIZE 4096
+
+
+
+typedef enum {
+  LOG_USB = 0,
+  LOG_SER_9_10,
+  LOG_SER_13_14,
+  LOG_SER_28_27,
+  LOG_MAX
+} SerialLines;
+
+class Log {
+private:
+  // Accomodate all 3 serial ports and USB
+  Serial *m_serial[4];
+  bool    m_enable[4];
+  
+  // File log
+  LocalFileSystem local;
+
+public:
+  inline Log() : local("local")
+  {
+    // Write to file
+    FILE *logfile = fopen("/local/NetTool.log", "w");
+    fputs("NetTool - Welcome!", logfile);
+    fclose(logfile);
+  
+    // Set up the serial classes
+    m_serial[LOG_USB]       = new Serial(USBTX,USBRX);
+    m_serial[LOG_SER_9_10]  = new Serial(p9,p10);
+    m_serial[LOG_SER_13_14] = new Serial(p13,p14);
+    m_serial[LOG_SER_28_27] = new Serial(p28,p27);
+    
+    // Disable logging to all of them by default
+    for (int idx = 0; idx < LOG_MAX; ++idx)
+    {
+      m_enable[idx] = false;
+    }
+  }
+
+  // Enable logging to the given serial line
+  inline void enable(SerialLines idx)
+  {
+    m_enable[idx] = true;
+  }
+  
+  // Disable logging to the given serial line
+  inline void disable(SerialLines idx)
+  {
+    m_enable[idx] = false;
+  }
+  
+  // This can log messages up to 4095 characters and has printf semantics
+  // All log messages include an implicit \r\n at the end
+  inline bool printf(char *format, ...)
+  {
+    static char buffer[LOG_BUFSIZE];
+    static int count;
+    static va_list va;
+    
+    va_start(va, format);
+    count = vsnprintf(buffer, LOG_BUFSIZE, format, va);
+    
+    // Ensure that the log message fit
+    if (count > LOG_BUFSIZE-1)
+    {
+      // Log an error message if it didn't
+      Log::printf("Log message too long: %4d", count);
+    }
+    else
+    {
+      // Write all characters from the message
+      puts(buffer);
+      // Send the EOM (\r\n)
+      puts("\r\n");
+    }
+    va_end(va);
+    return true;
+  } // printf
+  
+  bool puts(const char *str)
+  {
+    // Write to file
+    FILE *logfile = fopen("/local/NetTool.log", "a");
+    fputs(str, logfile);
+    fclose(logfile);
+    
+    // Write all characters from the message
+    while (*str)
+    {
+      // Write to all serial devices
+      for (int s = 0; s < LOG_MAX; ++s)
+      {
+        // Only write if enabled
+        if (m_enable[s])
+          s[*m_serial].putc(*str++);
+      }
+    }
+    return true;
+  }
+
+};
+
+#endif
\ No newline at end of file