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 26 09:56:31 2011 +0000
Revision:
7:8e12f7357b9f
Parent:
1:f4040665bc61
Added IPv4 global broadcast address to processed frames inside IPv4 layer.

Who changed what in which revision?

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