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_tree.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 Author: Andrei Carp <andrei.carp@tass.be>
daniele 0:d7f2341ab245 6 *********************************************************************/
daniele 0:d7f2341ab245 7
daniele 0:d7f2341ab245 8 #ifndef __PICO_RBTREE_H__
daniele 0:d7f2341ab245 9 #define __PICO_RBTREE_H__
daniele 0:d7f2341ab245 10
daniele 0:d7f2341ab245 11 #include <stdint.h>
daniele 0:d7f2341ab245 12 #include "pico_config.h"
daniele 0:d7f2341ab245 13
daniele 0:d7f2341ab245 14 // This is used to declare a new tree, leaf root by default
daniele 0:d7f2341ab245 15 #define PICO_TREE_DECLARE(name,compareFunction) \
daniele 0:d7f2341ab245 16 struct pico_tree name =\
daniele 0:d7f2341ab245 17 { \
daniele 0:d7f2341ab245 18 &LEAF, \
daniele 0:d7f2341ab245 19 compareFunction \
daniele 0:d7f2341ab245 20 }
daniele 0:d7f2341ab245 21
daniele 0:d7f2341ab245 22
daniele 0:d7f2341ab245 23 struct pico_tree_node
daniele 0:d7f2341ab245 24 {
daniele 0:d7f2341ab245 25 void* keyValue; // generic key
daniele 0:d7f2341ab245 26 struct pico_tree_node* parent;
daniele 0:d7f2341ab245 27 struct pico_tree_node* leftChild;
daniele 0:d7f2341ab245 28 struct pico_tree_node* rightChild;
daniele 0:d7f2341ab245 29 uint8_t color;
daniele 0:d7f2341ab245 30 };
daniele 0:d7f2341ab245 31
daniele 0:d7f2341ab245 32 struct pico_tree
daniele 0:d7f2341ab245 33 {
daniele 0:d7f2341ab245 34 struct pico_tree_node * root; // root of the tree
daniele 0:d7f2341ab245 35
daniele 0:d7f2341ab245 36 // this function directly provides the keys as parameters not the nodes.
daniele 0:d7f2341ab245 37 int (*compare)(void* keyA, void* keyB);
daniele 0:d7f2341ab245 38 };
daniele 0:d7f2341ab245 39
daniele 0:d7f2341ab245 40 extern struct pico_tree_node LEAF; // generic leaf node
daniele 0:d7f2341ab245 41 /*
daniele 0:d7f2341ab245 42 * Manipulation functions
daniele 0:d7f2341ab245 43 */
daniele 0:d7f2341ab245 44 void * pico_tree_insert(struct pico_tree * tree, void * key);
daniele 0:d7f2341ab245 45 void * pico_tree_delete(struct pico_tree * tree, void * key);
daniele 0:d7f2341ab245 46 void * pico_tree_findKey(struct pico_tree * tree, void * key);
daniele 0:d7f2341ab245 47 void pico_tree_drop(struct pico_tree * tree);
daniele 0:d7f2341ab245 48 int pico_tree_empty(struct pico_tree * tree);
daniele 0:d7f2341ab245 49 struct pico_tree_node * pico_tree_findNode(struct pico_tree * tree, void * key);
daniele 0:d7f2341ab245 50
daniele 0:d7f2341ab245 51 void * pico_tree_first(struct pico_tree * tree);
daniele 0:d7f2341ab245 52 void * pico_tree_last(struct pico_tree * tree);
daniele 0:d7f2341ab245 53 /*
daniele 0:d7f2341ab245 54 * Traverse functions
daniele 0:d7f2341ab245 55 */
daniele 0:d7f2341ab245 56 struct pico_tree_node * pico_tree_lastNode(struct pico_tree_node * node);
daniele 0:d7f2341ab245 57 struct pico_tree_node * pico_tree_firstNode(struct pico_tree_node * node);
daniele 0:d7f2341ab245 58 struct pico_tree_node * pico_tree_next(struct pico_tree_node * node);
daniele 0:d7f2341ab245 59 struct pico_tree_node * pico_tree_prev(struct pico_tree_node * node);
daniele 0:d7f2341ab245 60
daniele 0:d7f2341ab245 61 /*
daniele 0:d7f2341ab245 62 * For each macros
daniele 0:d7f2341ab245 63 */
daniele 0:d7f2341ab245 64
daniele 0:d7f2341ab245 65 #define pico_tree_foreach(idx,tree) \
daniele 0:d7f2341ab245 66 for ((idx) = pico_tree_firstNode((tree)->root); \
daniele 0:d7f2341ab245 67 (idx) != &LEAF; \
daniele 0:d7f2341ab245 68 (idx) = pico_tree_next(idx))
daniele 0:d7f2341ab245 69
daniele 0:d7f2341ab245 70 #define pico_tree_foreach_reverse(idx,tree) \
daniele 0:d7f2341ab245 71 for ((idx) = pico_tree_lastNode((tree)->root); \
daniele 0:d7f2341ab245 72 (idx) != &LEAF; \
daniele 0:d7f2341ab245 73 (idx) = pico_tree_prev(idx))
daniele 0:d7f2341ab245 74
daniele 0:d7f2341ab245 75 #define pico_tree_foreach_safe(idx,tree,idx2) \
daniele 0:d7f2341ab245 76 for ((idx) = pico_tree_firstNode((tree)->root); \
daniele 0:d7f2341ab245 77 ((idx) != &LEAF) && ((idx2) = pico_tree_next(idx), 1); \
daniele 0:d7f2341ab245 78 (idx) = (idx2))
daniele 0:d7f2341ab245 79
daniele 0:d7f2341ab245 80 #define pico_tree_foreach_reverse_safe(idx,tree,idx2) \
daniele 0:d7f2341ab245 81 for ((idx) = pico_tree_lastNode((tree)->root); \
daniele 0:d7f2341ab245 82 ((idx) != &LEAF) && ((idx2) = pico_tree_prev(idx), 1); \
daniele 0:d7f2341ab245 83 (idx) = (idx2))
daniele 0:d7f2341ab245 84
daniele 0:d7f2341ab245 85 #endif