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

Committer:
etherealflaim
Date:
Tue Oct 12 06:21:05 2010 +0000
Revision:
4:88fc7fa58931
Parent:
0:d494b853ce97
Child:
6:66c4cd9073aa
More documentation updates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
etherealflaim 0:d494b853ce97 1 #ifndef LOG_H
etherealflaim 0:d494b853ce97 2 #define LOG_H
etherealflaim 0:d494b853ce97 3
etherealflaim 0:d494b853ce97 4 #include "mbed.h"
etherealflaim 0:d494b853ce97 5
etherealflaim 0:d494b853ce97 6 #include "stdarg.h"
etherealflaim 0:d494b853ce97 7 #include "stdio.h"
etherealflaim 0:d494b853ce97 8
etherealflaim 0:d494b853ce97 9 #define LOG_BUFSIZE 4096
etherealflaim 0:d494b853ce97 10
etherealflaim 4:88fc7fa58931 11 /// Enumeration used to enable/disable various serial lines in the logger
etherealflaim 0:d494b853ce97 12 typedef enum {
etherealflaim 0:d494b853ce97 13 LOG_USB = 0,
etherealflaim 0:d494b853ce97 14 LOG_SER_9_10,
etherealflaim 0:d494b853ce97 15 LOG_SER_13_14,
etherealflaim 0:d494b853ce97 16 LOG_SER_28_27,
etherealflaim 0:d494b853ce97 17 LOG_MAX
etherealflaim 0:d494b853ce97 18 } SerialLines;
etherealflaim 0:d494b853ce97 19
etherealflaim 4:88fc7fa58931 20 /// Combination serial/file logger
etherealflaim 0:d494b853ce97 21 class Log {
etherealflaim 0:d494b853ce97 22 private:
etherealflaim 0:d494b853ce97 23 // Accomodate all 3 serial ports and USB
etherealflaim 0:d494b853ce97 24 Serial *m_serial[4];
etherealflaim 0:d494b853ce97 25 bool m_enable[4];
etherealflaim 0:d494b853ce97 26
etherealflaim 0:d494b853ce97 27 // File log
etherealflaim 0:d494b853ce97 28 LocalFileSystem local;
etherealflaim 0:d494b853ce97 29
etherealflaim 0:d494b853ce97 30 public:
etherealflaim 4:88fc7fa58931 31 /// Constructor
etherealflaim 0:d494b853ce97 32 inline Log() : local("local")
etherealflaim 0:d494b853ce97 33 {
etherealflaim 0:d494b853ce97 34 // Write to file
etherealflaim 0:d494b853ce97 35 FILE *logfile = fopen("/local/NetTool.log", "w");
etherealflaim 0:d494b853ce97 36 fputs("NetTool - Welcome!", logfile);
etherealflaim 0:d494b853ce97 37 fclose(logfile);
etherealflaim 0:d494b853ce97 38
etherealflaim 0:d494b853ce97 39 // Set up the serial classes
etherealflaim 0:d494b853ce97 40 m_serial[LOG_USB] = new Serial(USBTX,USBRX);
etherealflaim 0:d494b853ce97 41 m_serial[LOG_SER_9_10] = new Serial(p9,p10);
etherealflaim 0:d494b853ce97 42 m_serial[LOG_SER_13_14] = new Serial(p13,p14);
etherealflaim 0:d494b853ce97 43 m_serial[LOG_SER_28_27] = new Serial(p28,p27);
etherealflaim 0:d494b853ce97 44
etherealflaim 0:d494b853ce97 45 // Disable logging to all of them by default
etherealflaim 0:d494b853ce97 46 for (int idx = 0; idx < LOG_MAX; ++idx)
etherealflaim 0:d494b853ce97 47 {
etherealflaim 0:d494b853ce97 48 m_enable[idx] = false;
etherealflaim 0:d494b853ce97 49 }
etherealflaim 0:d494b853ce97 50 }
etherealflaim 0:d494b853ce97 51
etherealflaim 4:88fc7fa58931 52 /// Enable logging to the given serial line
etherealflaim 0:d494b853ce97 53 inline void enable(SerialLines idx)
etherealflaim 0:d494b853ce97 54 {
etherealflaim 0:d494b853ce97 55 m_enable[idx] = true;
etherealflaim 0:d494b853ce97 56 }
etherealflaim 0:d494b853ce97 57
etherealflaim 4:88fc7fa58931 58 /// Disable logging to the given serial line
etherealflaim 0:d494b853ce97 59 inline void disable(SerialLines idx)
etherealflaim 0:d494b853ce97 60 {
etherealflaim 0:d494b853ce97 61 m_enable[idx] = false;
etherealflaim 0:d494b853ce97 62 }
etherealflaim 0:d494b853ce97 63
etherealflaim 4:88fc7fa58931 64 /// This can log messages up to 4095 characters and has printf semantics
etherealflaim 4:88fc7fa58931 65 /// All log messages include an implicit \r\n at the end
etherealflaim 0:d494b853ce97 66 inline bool printf(char *format, ...)
etherealflaim 0:d494b853ce97 67 {
etherealflaim 0:d494b853ce97 68 static char buffer[LOG_BUFSIZE];
etherealflaim 0:d494b853ce97 69 static int count;
etherealflaim 0:d494b853ce97 70 static va_list va;
etherealflaim 0:d494b853ce97 71
etherealflaim 0:d494b853ce97 72 va_start(va, format);
etherealflaim 0:d494b853ce97 73 count = vsnprintf(buffer, LOG_BUFSIZE, format, va);
etherealflaim 0:d494b853ce97 74
etherealflaim 0:d494b853ce97 75 // Ensure that the log message fit
etherealflaim 0:d494b853ce97 76 if (count > LOG_BUFSIZE-1)
etherealflaim 0:d494b853ce97 77 {
etherealflaim 0:d494b853ce97 78 // Log an error message if it didn't
etherealflaim 0:d494b853ce97 79 Log::printf("Log message too long: %4d", count);
etherealflaim 0:d494b853ce97 80 }
etherealflaim 0:d494b853ce97 81 else
etherealflaim 0:d494b853ce97 82 {
etherealflaim 0:d494b853ce97 83 // Write all characters from the message
etherealflaim 0:d494b853ce97 84 puts(buffer);
etherealflaim 0:d494b853ce97 85 // Send the EOM (\r\n)
etherealflaim 0:d494b853ce97 86 puts("\r\n");
etherealflaim 0:d494b853ce97 87 }
etherealflaim 0:d494b853ce97 88 va_end(va);
etherealflaim 0:d494b853ce97 89 return true;
etherealflaim 0:d494b853ce97 90 } // printf
etherealflaim 0:d494b853ce97 91
etherealflaim 4:88fc7fa58931 92 /// Put the given string (no implicit \r\n) on all enabled serial lines and to the logfile
etherealflaim 0:d494b853ce97 93 bool puts(const char *str)
etherealflaim 0:d494b853ce97 94 {
etherealflaim 0:d494b853ce97 95 // Write to file
etherealflaim 0:d494b853ce97 96 FILE *logfile = fopen("/local/NetTool.log", "a");
etherealflaim 0:d494b853ce97 97 fputs(str, logfile);
etherealflaim 0:d494b853ce97 98 fclose(logfile);
etherealflaim 0:d494b853ce97 99
etherealflaim 0:d494b853ce97 100 // Write all characters from the message
etherealflaim 0:d494b853ce97 101 while (*str)
etherealflaim 0:d494b853ce97 102 {
etherealflaim 0:d494b853ce97 103 // Write to all serial devices
etherealflaim 0:d494b853ce97 104 for (int s = 0; s < LOG_MAX; ++s)
etherealflaim 0:d494b853ce97 105 {
etherealflaim 0:d494b853ce97 106 // Only write if enabled
etherealflaim 0:d494b853ce97 107 if (m_enable[s])
etherealflaim 0:d494b853ce97 108 s[*m_serial].putc(*str++);
etherealflaim 0:d494b853ce97 109 }
etherealflaim 0:d494b853ce97 110 }
etherealflaim 0:d494b853ce97 111 return true;
etherealflaim 0:d494b853ce97 112 }
etherealflaim 0:d494b853ce97 113
etherealflaim 0:d494b853ce97 114 };
etherealflaim 0:d494b853ce97 115
etherealflaim 0:d494b853ce97 116 #endif