Rewrite from scratch a TCP/IP stack for mbed. So far the following parts are usable: Drivers: - EMAC driver (from CMSIS 2.0) Protocols: - Ethernet protocol - ARP over ethernet for IPv4 - IPv4 over Ethernet - ICMPv4 over IPv4 - UDPv4 over IPv4 APIs: - Sockets for UDPv4 The structure of this stack is designed to be very modular. Each protocol can register one or more protocol to handle its payload, and in each protocol, an API can be hooked (like Sockets for example). This is an early release.

Committer:
Benoit
Date:
Sun Jun 12 11:23:03 2011 +0000
Revision:
0:19f5f51584de
Initial release (alpha quality)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Benoit 0:19f5f51584de 1 /*
Benoit 0:19f5f51584de 2 * $Id: Debug.c 26 2011-06-09 10:24:02Z benoit $
Benoit 0:19f5f51584de 3 * $Author: benoit $
Benoit 0:19f5f51584de 4 * $Date: 2011-06-09 12:24:02 +0200 (jeu., 09 juin 2011) $
Benoit 0:19f5f51584de 5 * $Rev: 26 $
Benoit 0:19f5f51584de 6 *
Benoit 0:19f5f51584de 7 *
Benoit 0:19f5f51584de 8 *
Benoit 0:19f5f51584de 9 *
Benoit 0:19f5f51584de 10 *
Benoit 0:19f5f51584de 11 */
Benoit 0:19f5f51584de 12
Benoit 0:19f5f51584de 13 #include "Debug.h"
Benoit 0:19f5f51584de 14
Benoit 0:19f5f51584de 15
Benoit 0:19f5f51584de 16 Debug_LevelMask_t debug_LevelMask = DEBUG_LEVEL_WARNING | DEBUG_LEVEL_ERROR | DEBUG_LEVEL_PANIC;
Benoit 0:19f5f51584de 17 Debug_ModuleMask_t debug_ModuleMask = DEBUG_MODULE_ALL;
Benoit 0:19f5f51584de 18
Benoit 0:19f5f51584de 19
Benoit 0:19f5f51584de 20 void Debug_SetMasks(Debug_ModuleMask_t moduleMask, Debug_LevelMask_t levelMask)
Benoit 0:19f5f51584de 21 {
Benoit 0:19f5f51584de 22 debug_LevelMask = levelMask;
Benoit 0:19f5f51584de 23 debug_ModuleMask = moduleMask;
Benoit 0:19f5f51584de 24 }
Benoit 0:19f5f51584de 25
Benoit 0:19f5f51584de 26 const char *Debug_GetText(uint32_t level)
Benoit 0:19f5f51584de 27 {
Benoit 0:19f5f51584de 28 char *result;
Benoit 0:19f5f51584de 29
Benoit 0:19f5f51584de 30 switch(level)
Benoit 0:19f5f51584de 31 {
Benoit 0:19f5f51584de 32 case DEBUG_LEVEL_INFO:
Benoit 0:19f5f51584de 33 result = "INFO";
Benoit 0:19f5f51584de 34 break;
Benoit 0:19f5f51584de 35
Benoit 0:19f5f51584de 36 case DEBUG_LEVEL_WARNING:
Benoit 0:19f5f51584de 37 result = "WARNING";
Benoit 0:19f5f51584de 38 break;
Benoit 0:19f5f51584de 39
Benoit 0:19f5f51584de 40 case DEBUG_LEVEL_ERROR:
Benoit 0:19f5f51584de 41 result = "ERROR";
Benoit 0:19f5f51584de 42 break;
Benoit 0:19f5f51584de 43
Benoit 0:19f5f51584de 44 case DEBUG_LEVEL_PANIC:
Benoit 0:19f5f51584de 45 result = "PANIC";
Benoit 0:19f5f51584de 46 break;
Benoit 0:19f5f51584de 47
Benoit 0:19f5f51584de 48 case DEBUG_LEVEL_VERBOSE0:
Benoit 0:19f5f51584de 49 result = "VERBOSE0";
Benoit 0:19f5f51584de 50 break;
Benoit 0:19f5f51584de 51
Benoit 0:19f5f51584de 52 case DEBUG_LEVEL_VERBOSE1:
Benoit 0:19f5f51584de 53 result = "VERBOSE1";
Benoit 0:19f5f51584de 54 break;
Benoit 0:19f5f51584de 55
Benoit 0:19f5f51584de 56 case DEBUG_LEVEL_VERBOSE2:
Benoit 0:19f5f51584de 57 result = "VERBOSE2";
Benoit 0:19f5f51584de 58 break;
Benoit 0:19f5f51584de 59
Benoit 0:19f5f51584de 60 default:
Benoit 0:19f5f51584de 61 result = "<unknown>";
Benoit 0:19f5f51584de 62 break;
Benoit 0:19f5f51584de 63 }
Benoit 0:19f5f51584de 64
Benoit 0:19f5f51584de 65 return result;
Benoit 0:19f5f51584de 66 }
Benoit 0:19f5f51584de 67
Benoit 0:19f5f51584de 68
Benoit 0:19f5f51584de 69 void Debug_DumpBufferHex(uint8_t *buffer, int32_t length)
Benoit 0:19f5f51584de 70 {
Benoit 0:19f5f51584de 71 int32_t i, address, index, tmpIndex;
Benoit 0:19f5f51584de 72
Benoit 0:19f5f51584de 73 index = 0;
Benoit 0:19f5f51584de 74 address = 0;
Benoit 0:19f5f51584de 75 while(index < length)
Benoit 0:19f5f51584de 76 {
Benoit 0:19f5f51584de 77 /* Print buffer relative address */
Benoit 0:19f5f51584de 78 DEBUG_RAW_NOCRLF(("%03X ", address));
Benoit 0:19f5f51584de 79
Benoit 0:19f5f51584de 80 /* Print hex bytes */
Benoit 0:19f5f51584de 81 for (i = 0; i < DEBUG_BUFFER_DUMP_LINE_LEN; i++)
Benoit 0:19f5f51584de 82 {
Benoit 0:19f5f51584de 83 tmpIndex = index + i;
Benoit 0:19f5f51584de 84 if (tmpIndex < length)
Benoit 0:19f5f51584de 85 {
Benoit 0:19f5f51584de 86 DEBUG_RAW_NOCRLF(("%02X ", buffer[tmpIndex]));
Benoit 0:19f5f51584de 87 }
Benoit 0:19f5f51584de 88 else
Benoit 0:19f5f51584de 89 {
Benoit 0:19f5f51584de 90 DEBUG_RAW_NOCRLF((" "));
Benoit 0:19f5f51584de 91 }
Benoit 0:19f5f51584de 92 }
Benoit 0:19f5f51584de 93
Benoit 0:19f5f51584de 94 DEBUG_RAW_NOCRLF((" - "));
Benoit 0:19f5f51584de 95
Benoit 0:19f5f51584de 96 /* Print ascii chars */
Benoit 0:19f5f51584de 97 for (i = 0; i < DEBUG_BUFFER_DUMP_LINE_LEN; i++)
Benoit 0:19f5f51584de 98 {
Benoit 0:19f5f51584de 99 tmpIndex = index + i;
Benoit 0:19f5f51584de 100 if (tmpIndex < length)
Benoit 0:19f5f51584de 101 {
Benoit 0:19f5f51584de 102 DEBUG_RAW_NOCRLF(("%c", buffer[tmpIndex] >= 32 ? buffer[tmpIndex] : '.'));
Benoit 0:19f5f51584de 103 }
Benoit 0:19f5f51584de 104 }
Benoit 0:19f5f51584de 105
Benoit 0:19f5f51584de 106 index += DEBUG_BUFFER_DUMP_LINE_LEN;
Benoit 0:19f5f51584de 107 address += DEBUG_BUFFER_DUMP_LINE_LEN;
Benoit 0:19f5f51584de 108
Benoit 0:19f5f51584de 109 DEBUG_RAW_NOCRLF(("\r\n"));
Benoit 0:19f5f51584de 110 }
Benoit 0:19f5f51584de 111
Benoit 0:19f5f51584de 112 }
Benoit 0:19f5f51584de 113