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_FRAME
daniele 2:540f6e142d59 7 #define _INCLUDE_PICO_FRAME
daniele 2:540f6e142d59 8 #include "pico_config.h"
daniele 2:540f6e142d59 9
daniele 2:540f6e142d59 10
daniele 2:540f6e142d59 11 #define PICO_FRAME_FLAG_BCAST (0x01)
daniele 2:540f6e142d59 12 #define PICO_FRAME_FLAG_SACKED (0x80)
daniele 2:540f6e142d59 13 #define IS_BCAST(f) ((f->flags & PICO_FRAME_FLAG_BCAST) == PICO_FRAME_FLAG_BCAST)
daniele 2:540f6e142d59 14
daniele 2:540f6e142d59 15
daniele 2:540f6e142d59 16 struct pico_socket;
daniele 2:540f6e142d59 17
daniele 2:540f6e142d59 18
daniele 2:540f6e142d59 19 struct pico_frame {
daniele 2:540f6e142d59 20
daniele 2:540f6e142d59 21 /* Connector for queues */
daniele 2:540f6e142d59 22 struct pico_frame *next;
daniele 2:540f6e142d59 23
daniele 2:540f6e142d59 24 /* Start of the whole buffer, total frame length. */
daniele 2:540f6e142d59 25 unsigned char *buffer;
daniele 2:540f6e142d59 26 uint32_t buffer_len;
daniele 2:540f6e142d59 27
daniele 2:540f6e142d59 28 /* For outgoing packets: this is the meaningful buffer. */
daniele 2:540f6e142d59 29 unsigned char *start;
daniele 2:540f6e142d59 30 uint32_t len;
daniele 2:540f6e142d59 31
daniele 2:540f6e142d59 32 /* Pointer to usage counter */
daniele 2:540f6e142d59 33 uint32_t *usage_count;
daniele 2:540f6e142d59 34
daniele 2:540f6e142d59 35 /* Pointer to protocol headers */
daniele 2:540f6e142d59 36 uint8_t *datalink_hdr;
daniele 2:540f6e142d59 37
daniele 2:540f6e142d59 38 uint8_t *net_hdr;
daniele 2:540f6e142d59 39 int net_len;
daniele 2:540f6e142d59 40 uint8_t *transport_hdr;
daniele 2:540f6e142d59 41 int transport_len;
daniele 2:540f6e142d59 42 uint8_t *app_hdr;
daniele 2:540f6e142d59 43 int app_len;
daniele 2:540f6e142d59 44
daniele 2:540f6e142d59 45 /* Pointer to the phisical device this packet belongs to.
daniele 2:540f6e142d59 46 * Should be valid in both routing directions
daniele 2:540f6e142d59 47 */
daniele 2:540f6e142d59 48 struct pico_device *dev;
daniele 2:540f6e142d59 49
daniele 2:540f6e142d59 50 unsigned long timestamp;
daniele 2:540f6e142d59 51
daniele 2:540f6e142d59 52 /* Failures due to bad datalink addressing. */
daniele 2:540f6e142d59 53 uint16_t failure_count;
daniele 2:540f6e142d59 54
daniele 2:540f6e142d59 55 /* Protocol over IP */
daniele 2:540f6e142d59 56 uint8_t proto;
daniele 2:540f6e142d59 57
daniele 2:540f6e142d59 58 /* PICO_FRAME_FLAG_* */
daniele 2:540f6e142d59 59 uint8_t flags;
daniele 2:540f6e142d59 60
daniele 2:540f6e142d59 61 /* Pointer to payload */
daniele 2:540f6e142d59 62 unsigned char *payload;
daniele 2:540f6e142d59 63 int payload_len;
daniele 2:540f6e142d59 64
daniele 2:540f6e142d59 65 #ifdef PICO_SUPPORT_IPFRAG
daniele 2:540f6e142d59 66 /* Payload fragmentation info (big endian)*/
daniele 2:540f6e142d59 67 uint16_t frag;
daniele 2:540f6e142d59 68 #endif
daniele 2:540f6e142d59 69
daniele 2:540f6e142d59 70 /* Pointer to socket */
daniele 2:540f6e142d59 71 struct pico_socket *sock;
daniele 2:540f6e142d59 72
daniele 2:540f6e142d59 73 /* Pointer to transport info, used to store remote UDP duple (IP + port) */
daniele 2:540f6e142d59 74 void *info;
daniele 2:540f6e142d59 75
daniele 2:540f6e142d59 76 /*Priority. "best-effort" priority, the default value is 0. Priority can be in between -10 and +10*/
daniele 2:540f6e142d59 77 int8_t priority;
daniele 2:540f6e142d59 78 };
daniele 2:540f6e142d59 79
daniele 2:540f6e142d59 80 /** frame alloc/dealloc/copy **/
daniele 2:540f6e142d59 81 void pico_frame_discard(struct pico_frame *f);
daniele 2:540f6e142d59 82 struct pico_frame *pico_frame_copy(struct pico_frame *f);
daniele 2:540f6e142d59 83 struct pico_frame *pico_frame_deepcopy(struct pico_frame *f);
daniele 2:540f6e142d59 84 struct pico_frame *pico_frame_alloc(int size);
daniele 2:540f6e142d59 85 uint16_t pico_checksum(void *inbuf, int len);
daniele 2:540f6e142d59 86 uint16_t pico_dualbuffer_checksum(void *b1, int len1, void *b2, int len2);
daniele 2:540f6e142d59 87
daniele 2:540f6e142d59 88 static inline int pico_is_digit(char c)
daniele 2:540f6e142d59 89 {
daniele 2:540f6e142d59 90 if (c < '0' || c > '9')
daniele 2:540f6e142d59 91 return 0;
daniele 2:540f6e142d59 92 return 1;
daniele 2:540f6e142d59 93 }
daniele 2:540f6e142d59 94
daniele 2:540f6e142d59 95 #endif