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:
daniele
Date:
Fri May 24 15:25:25 2013 +0000
Revision:
3:b4047e8a0123
Updated from main repo + fixed Mutexes;

Who changed what in which revision?

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