Free (GPLv2) TCP/IP stack developed by TASS Belgium

Dependents:   lpc1768-picotcp-demo ZeroMQ_PicoTCP_Publisher_demo TCPSocket_HelloWorld_PicoTCP Pico_TCP_UDP_Test ... more

PicoTCP. Copyright (c) 2013 TASS Belgium NV.

Released under the GNU General Public License, version 2.

Different licensing models may exist, at the sole discretion of the Copyright holders.

Official homepage: http://www.picotcp.com

Bug tracker: https://github.com/tass-belgium/picotcp/issues

Development steps:

  • initial integration with mbed RTOS
  • generic mbed Ethernet driver
  • high performance NXP LPC1768 specific Ethernet driver
  • Multi-threading support for mbed RTOS
  • Berkeley sockets and integration with the New Socket API
  • Fork of the apps running on top of the New Socket API
  • Scheduling optimizations
  • Debugging/benchmarking/testing

Demo application (measuring TCP sender performance):

Import programlpc1768-picotcp-demo

A PicoTCP demo app testing the ethernet throughput on the lpc1768 mbed board.

Committer:
tass
Date:
Fri May 17 12:09:59 2013 +0000
Revision:
1:cfe8984a32b4
Parent:
libraries/picotcp/include/pico_constants.h@0:d7f2341ab245
Update for smaller SOCKETQ

Who changed what in which revision?

UserRevisionLine numberNew contents of line
daniele 0:d7f2341ab245 1 /*********************************************************************
daniele 0:d7f2341ab245 2 PicoTCP. Copyright (c) 2012 TASS Belgium NV. Some rights reserved.
daniele 0:d7f2341ab245 3 See LICENSE and COPYING for usage.
daniele 0:d7f2341ab245 4
daniele 0:d7f2341ab245 5 *********************************************************************/
daniele 0:d7f2341ab245 6 #ifndef _INCLUDE_PICO_CONST
daniele 0:d7f2341ab245 7 #define _INCLUDE_PICO_CONST
daniele 0:d7f2341ab245 8 /* Included from pico_config.h */
daniele 0:d7f2341ab245 9 /** Endian-dependant constants **/
daniele 0:d7f2341ab245 10
daniele 0:d7f2341ab245 11 extern volatile unsigned long pico_tick;
daniele 0:d7f2341ab245 12
daniele 0:d7f2341ab245 13 #ifdef PICO_BIGENDIAN
daniele 0:d7f2341ab245 14
daniele 0:d7f2341ab245 15 # define PICO_IDETH_IPV4 0x0800
daniele 0:d7f2341ab245 16 # define PICO_IDETH_ARP 0x0806
daniele 0:d7f2341ab245 17 # define PICO_IDETH_IPV6 0x86DD
daniele 0:d7f2341ab245 18
daniele 0:d7f2341ab245 19 # define PICO_ARP_REQUEST 0x0001
daniele 0:d7f2341ab245 20 # define PICO_ARP_REPLY 0x0002
daniele 0:d7f2341ab245 21 # define PICO_ARP_HTYPE_ETH 0x0001
daniele 0:d7f2341ab245 22
daniele 0:d7f2341ab245 23 #define short_be(x) (x)
daniele 0:d7f2341ab245 24 #define long_be(x) (x)
daniele 0:d7f2341ab245 25
daniele 0:d7f2341ab245 26 #else
daniele 0:d7f2341ab245 27
daniele 0:d7f2341ab245 28 # define PICO_IDETH_IPV4 0x0008
daniele 0:d7f2341ab245 29 # define PICO_IDETH_ARP 0x0608
daniele 0:d7f2341ab245 30 # define PICO_IDETH_IPV6 0xDD86
daniele 0:d7f2341ab245 31
daniele 0:d7f2341ab245 32 # define PICO_ARP_REQUEST 0x0100
daniele 0:d7f2341ab245 33 # define PICO_ARP_REPLY 0x0200
daniele 0:d7f2341ab245 34 # define PICO_ARP_HTYPE_ETH 0x0100
daniele 0:d7f2341ab245 35
daniele 0:d7f2341ab245 36 static inline uint16_t short_be(uint16_t le)
daniele 0:d7f2341ab245 37 {
daniele 0:d7f2341ab245 38 return ((le & 0xFF) << 8) | ((le >> 8) & 0xFF);
daniele 0:d7f2341ab245 39 }
daniele 0:d7f2341ab245 40
daniele 0:d7f2341ab245 41 static inline uint32_t long_be(uint32_t le)
daniele 0:d7f2341ab245 42 {
daniele 0:d7f2341ab245 43 uint8_t *b = (uint8_t *)&le;
daniele 0:d7f2341ab245 44 uint32_t be = 0;
daniele 0:d7f2341ab245 45 uint32_t b0, b1, b2;
daniele 0:d7f2341ab245 46 b0 = b[0];
daniele 0:d7f2341ab245 47 b1 = b[1];
daniele 0:d7f2341ab245 48 b2 = b[2];
daniele 0:d7f2341ab245 49 be = b[3] + (b2 << 8) + (b1 << 16) + (b0 << 24);
daniele 0:d7f2341ab245 50 return be;
daniele 0:d7f2341ab245 51 }
daniele 0:d7f2341ab245 52 #endif
daniele 0:d7f2341ab245 53
daniele 0:d7f2341ab245 54
daniele 0:d7f2341ab245 55 /* Add well-known host numbers here. (bigendian constants only beyond this point) */
daniele 0:d7f2341ab245 56 #define PICO_IP4_ANY (0x00000000U)
daniele 0:d7f2341ab245 57 #define PICO_IP4_BCAST (0xffffffffU)
daniele 0:d7f2341ab245 58
daniele 0:d7f2341ab245 59 /* defined in modules/pico_ipv6.c */
daniele 0:d7f2341ab245 60 #ifdef PICO_SUPPORT_IPV6
daniele 0:d7f2341ab245 61 extern const uint8_t PICO_IPV6_ANY[PICO_SIZE_IP6];
daniele 0:d7f2341ab245 62 #endif
daniele 0:d7f2341ab245 63
daniele 0:d7f2341ab245 64 static inline uint32_t pico_hash(char *name)
daniele 0:d7f2341ab245 65 {
daniele 0:d7f2341ab245 66 unsigned long hash = 5381;
daniele 0:d7f2341ab245 67 int c;
daniele 0:d7f2341ab245 68 while ((c = *name++))
daniele 0:d7f2341ab245 69 hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
daniele 0:d7f2341ab245 70 return hash;
daniele 0:d7f2341ab245 71 }
daniele 0:d7f2341ab245 72
daniele 0:d7f2341ab245 73 /* Debug */
daniele 0:d7f2341ab245 74 //#define PICO_SUPPORT_DEBUG_MEMORY
daniele 0:d7f2341ab245 75 //#define PICO_SUPPORT_DEBUG_TOOLS
daniele 0:d7f2341ab245 76 #endif