CDC/ECM driver for mbed, based on USBDevice by mbed-official. Uses PicoTCP to access Ethernet USB device. License: GPLv2

Dependents:   USBEthernet_TEST

Fork of USB_Ethernet by Daniele Lacamera

Committer:
daniele
Date:
Sat Aug 03 13:16:14 2013 +0000
Revision:
2:540f6e142d59
Moved to single package

Who changed what in which revision?

UserRevisionLine numberNew contents of line
daniele 2:540f6e142d59 1 /*********************************************************************
daniele 2:540f6e142d59 2 PicoTCP. Copyright (c) 2012 TASS Belgium NV. Some rights reserved.
daniele 2:540f6e142d59 3 See LICENSE and COPYING for usage.
daniele 2:540f6e142d59 4
daniele 2:540f6e142d59 5 *********************************************************************/
daniele 2:540f6e142d59 6 #ifndef _INCLUDE_PICO_CONST
daniele 2:540f6e142d59 7 #define _INCLUDE_PICO_CONST
daniele 2:540f6e142d59 8 /* Included from pico_config.h */
daniele 2:540f6e142d59 9 /** Endian-dependant constants **/
daniele 2:540f6e142d59 10
daniele 2:540f6e142d59 11 extern volatile unsigned long pico_tick;
daniele 2:540f6e142d59 12
daniele 2:540f6e142d59 13 #ifdef PICO_BIGENDIAN
daniele 2:540f6e142d59 14
daniele 2:540f6e142d59 15 # define PICO_IDETH_IPV4 0x0800
daniele 2:540f6e142d59 16 # define PICO_IDETH_ARP 0x0806
daniele 2:540f6e142d59 17 # define PICO_IDETH_IPV6 0x86DD
daniele 2:540f6e142d59 18
daniele 2:540f6e142d59 19 # define PICO_ARP_REQUEST 0x0001
daniele 2:540f6e142d59 20 # define PICO_ARP_REPLY 0x0002
daniele 2:540f6e142d59 21 # define PICO_ARP_HTYPE_ETH 0x0001
daniele 2:540f6e142d59 22
daniele 2:540f6e142d59 23 #define short_be(x) (x)
daniele 2:540f6e142d59 24 #define long_be(x) (x)
daniele 2:540f6e142d59 25
daniele 2:540f6e142d59 26 static inline uint16_t short_from(void *_p)
daniele 2:540f6e142d59 27 {
daniele 2:540f6e142d59 28 unsigned char *p = (unsigned char *)_p;
daniele 2:540f6e142d59 29 uint16_t r, p0, p1;
daniele 2:540f6e142d59 30 p0 = p[0];
daniele 2:540f6e142d59 31 p1 = p[1];
daniele 2:540f6e142d59 32 r = (p0 << 8) + p1;
daniele 2:540f6e142d59 33 return r;
daniele 2:540f6e142d59 34 }
daniele 2:540f6e142d59 35
daniele 2:540f6e142d59 36 static inline uint32_t long_from(void *_p)
daniele 2:540f6e142d59 37 {
daniele 2:540f6e142d59 38 unsigned char *p = (unsigned char *)_p;
daniele 2:540f6e142d59 39 uint32_t r, p0, p1, p2, p3;
daniele 2:540f6e142d59 40 p0 = p[0];
daniele 2:540f6e142d59 41 p1 = p[1];
daniele 2:540f6e142d59 42 p2 = p[2];
daniele 2:540f6e142d59 43 p3 = p[3];
daniele 2:540f6e142d59 44 r = (p0 << 24) + (p1 << 16) + (p2 << 8) + p3;
daniele 2:540f6e142d59 45 return r;
daniele 2:540f6e142d59 46 }
daniele 2:540f6e142d59 47
daniele 2:540f6e142d59 48 #else
daniele 2:540f6e142d59 49
daniele 2:540f6e142d59 50 static inline uint16_t short_from(void *_p)
daniele 2:540f6e142d59 51 {
daniele 2:540f6e142d59 52 unsigned char *p = (unsigned char *)_p;
daniele 2:540f6e142d59 53 uint16_t r, p0, p1;
daniele 2:540f6e142d59 54 p0 = p[0];
daniele 2:540f6e142d59 55 p1 = p[1];
daniele 2:540f6e142d59 56 r = (p1 << 8) + p0;
daniele 2:540f6e142d59 57 return r;
daniele 2:540f6e142d59 58 }
daniele 2:540f6e142d59 59
daniele 2:540f6e142d59 60 static inline uint32_t long_from(void *_p)
daniele 2:540f6e142d59 61 {
daniele 2:540f6e142d59 62 unsigned char *p = (unsigned char *)_p;
daniele 2:540f6e142d59 63 uint32_t r, p0, p1, p2, p3;
daniele 2:540f6e142d59 64 p0 = p[0];
daniele 2:540f6e142d59 65 p1 = p[1];
daniele 2:540f6e142d59 66 p2 = p[2];
daniele 2:540f6e142d59 67 p3 = p[3];
daniele 2:540f6e142d59 68 r = (p3 << 24) + (p2 << 16) + (p1 << 8) + p0;
daniele 2:540f6e142d59 69 return r;
daniele 2:540f6e142d59 70 }
daniele 2:540f6e142d59 71
daniele 2:540f6e142d59 72
daniele 2:540f6e142d59 73 # define PICO_IDETH_IPV4 0x0008
daniele 2:540f6e142d59 74 # define PICO_IDETH_ARP 0x0608
daniele 2:540f6e142d59 75 # define PICO_IDETH_IPV6 0xDD86
daniele 2:540f6e142d59 76
daniele 2:540f6e142d59 77 # define PICO_ARP_REQUEST 0x0100
daniele 2:540f6e142d59 78 # define PICO_ARP_REPLY 0x0200
daniele 2:540f6e142d59 79 # define PICO_ARP_HTYPE_ETH 0x0100
daniele 2:540f6e142d59 80
daniele 2:540f6e142d59 81 static inline uint16_t short_be(uint16_t le)
daniele 2:540f6e142d59 82 {
daniele 2:540f6e142d59 83 return ((le & 0xFF) << 8) | ((le >> 8) & 0xFF);
daniele 2:540f6e142d59 84 }
daniele 2:540f6e142d59 85
daniele 2:540f6e142d59 86 static inline uint32_t long_be(uint32_t le)
daniele 2:540f6e142d59 87 {
daniele 2:540f6e142d59 88 uint8_t *b = (uint8_t *)&le;
daniele 2:540f6e142d59 89 uint32_t be = 0;
daniele 2:540f6e142d59 90 uint32_t b0, b1, b2;
daniele 2:540f6e142d59 91 b0 = b[0];
daniele 2:540f6e142d59 92 b1 = b[1];
daniele 2:540f6e142d59 93 b2 = b[2];
daniele 2:540f6e142d59 94 be = b[3] + (b2 << 8) + (b1 << 16) + (b0 << 24);
daniele 2:540f6e142d59 95 return be;
daniele 2:540f6e142d59 96 }
daniele 2:540f6e142d59 97 #endif
daniele 2:540f6e142d59 98
daniele 2:540f6e142d59 99
daniele 2:540f6e142d59 100 /* Add well-known host numbers here. (bigendian constants only beyond this point) */
daniele 2:540f6e142d59 101 #define PICO_IP4_ANY (0x00000000U)
daniele 2:540f6e142d59 102 #define PICO_IP4_BCAST (0xffffffffU)
daniele 2:540f6e142d59 103
daniele 2:540f6e142d59 104 /* defined in modules/pico_ipv6.c */
daniele 2:540f6e142d59 105 #ifdef PICO_SUPPORT_IPV6
daniele 2:540f6e142d59 106 extern const uint8_t PICO_IPV6_ANY[PICO_SIZE_IP6];
daniele 2:540f6e142d59 107 #endif
daniele 2:540f6e142d59 108
daniele 2:540f6e142d59 109 static inline uint32_t pico_hash(char *name)
daniele 2:540f6e142d59 110 {
daniele 2:540f6e142d59 111 unsigned long hash = 5381;
daniele 2:540f6e142d59 112 int c;
daniele 2:540f6e142d59 113 while ((c = *name++))
daniele 2:540f6e142d59 114 hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
daniele 2:540f6e142d59 115 return hash;
daniele 2:540f6e142d59 116 }
daniele 2:540f6e142d59 117
daniele 2:540f6e142d59 118 /* Debug */
daniele 2:540f6e142d59 119 //#define PICO_SUPPORT_DEBUG_MEMORY
daniele 2:540f6e142d59 120 //#define PICO_SUPPORT_DEBUG_TOOLS
daniele 2:540f6e142d59 121 #endif