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.

Files at this revision

API Documentation at this revision

Comitter:
tass picotcp@tass.be
Date:
Wed Apr 09 15:43:37 2014 +0200
Parent:
149:5f4cb161cec3
Child:
151:dbbb7e41f583
Commit message:
Fixed some warnings

Changed in this revision

modules/pico_mm.h Show annotated file Show diff for this revision Revisions of this file
modules/pico_socket_tcp.c Show annotated file Show diff for this revision Revisions of this file
stack/pico_socket.c Show annotated file Show diff for this revision Revisions of this file
stack/pico_stack.c Show annotated file Show diff for this revision Revisions of this file
--- a/modules/pico_mm.h	Wed Apr 09 14:31:41 2014 +0200
+++ b/modules/pico_mm.h	Wed Apr 09 15:43:37 2014 +0200
@@ -23,7 +23,7 @@
  * Memory deinit function, this will free all memory occupied by the current
  * memory manager instance.
  */
-void pico_mem_deinit();
+void pico_mem_deinit(void);
 /*
  * Zero-initialized malloc function, will reserve a memory segment of length uint32_t len
  * This memory will be quickly allocated in a slab of fixed size if possible
@@ -71,7 +71,7 @@
  * This function prints the general structure of the memory manager
  * Printf in this function can be rerouted to send this data over a serial port, or to write it away to memory
  */
-void pico_mem_profile_scan_data();
+void pico_mem_profile_scan_data(void);
 
 /*
  * This function returns the total size that the manager has received from the system
@@ -80,14 +80,14 @@
  * Together with pico_mem_profile_collect_data, this can give a good estimation of the total
  * resource commitment
  */
-uint32_t pico_mem_profile_used_size();
+uint32_t pico_mem_profile_used_size(void);
 
 /*
  * This function returns a pointer to page 0, the main memory manager housekeeping (struct pico_mem_manager).
  * This can be used to collect data about the memory in user defined functions.
  * Use with care!
  */
-void*pico_mem_profile_manager();
+void*pico_mem_profile_manager(void);
 
 /*
  * paramter manager is a pointer to a struct pico_mem_manager
--- a/modules/pico_socket_tcp.c	Wed Apr 09 14:31:41 2014 +0200
+++ b/modules/pico_socket_tcp.c	Wed Apr 09 15:43:37 2014 +0200
@@ -199,8 +199,9 @@
         return (int)(pico_tcp_read(s, buf, (uint32_t)len));
     }
 
+#else
+    return 0;
 #endif
-    return 0;
 }
 
 void transport_flags_update(struct pico_frame *f, struct pico_socket *s)
--- a/stack/pico_socket.c	Wed Apr 09 14:31:41 2014 +0200
+++ b/stack/pico_socket.c	Wed Apr 09 15:43:37 2014 +0200
@@ -91,10 +91,10 @@
     int ret = 0;
     (void)a;
     (void)b;
+#ifdef PICO_SUPPORT_IPV6
     if (!is_sock_ipv6(a) || !is_sock_ipv6(b))
         return 0;
 
-#ifdef PICO_SUPPORT_IPV6
     if ((memcmp(a->local_addr.ip6.addr, PICO_IP6_ANY, PICO_SIZE_IP6) == 0) || (memcmp(b->local_addr.ip6.addr, PICO_IP6_ANY, PICO_SIZE_IP6) == 0))
         ret = 0;
     else
--- a/stack/pico_stack.c	Wed Apr 09 14:31:41 2014 +0200
+++ b/stack/pico_stack.c	Wed Apr 09 15:43:37 2014 +0200
@@ -260,20 +260,17 @@
 {
     struct pico_eth_hdr *hdr = (struct pico_eth_hdr *) f->datalink_hdr;
     f->net_hdr = f->datalink_hdr + sizeof(struct pico_eth_hdr);
-    if (0) { }
 
 #if (defined PICO_SUPPORT_IPV4) && (defined PICO_SUPPORT_ETH)
-    else if (hdr->proto == PICO_IDETH_ARP)
+    if (hdr->proto == PICO_IDETH_ARP)
         return pico_arp_receive(f);
 #endif
 #if defined (PICO_SUPPORT_IPV4) || defined (PICO_SUPPORT_IPV6)
-    else if ((hdr->proto == PICO_IDETH_IPV4) || (hdr->proto == PICO_IDETH_IPV6))
+    if ((hdr->proto == PICO_IDETH_IPV4) || (hdr->proto == PICO_IDETH_IPV6))
         return pico_network_receive(f);
 #endif
-    else {
-        pico_frame_discard(f);
-        return -1;
-    }
+    pico_frame_discard(f);
+    return -1;
 }
 
 static void pico_ll_check_bcast(struct pico_frame *f)