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_frame.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_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 |