CDC/ECM driver for mbed, based on USBDevice by mbed-official. Uses PicoTCP to access Ethernet USB device. License: GPLv2
Fork of USB_Ethernet by
include/pico_constants.h@2:540f6e142d59, 2013-08-03 (annotated)
- Committer:
- daniele
- Date:
- Sat Aug 03 13:16:14 2013 +0000
- Revision:
- 2:540f6e142d59
Moved to single package
Who changed what in which revision?
User | Revision | Line number | New 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 *)≤ |
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 |