Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 3:e02ec42cf9c8, committed 2010-08-06
- Comitter:
- donatien
- Date:
- Fri Aug 06 10:42:05 2010 +0000
- Parent:
- 2:1f10f8ab527b
- Commit message:
Changed in this revision
Binary file LPC1768/ZG2100NetIf.ar has changed
--- a/LPC1768/api/DNSRequest.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/api/DNSRequest.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,44 +21,83 @@ THE SOFTWARE. */ +/** \file +DNS Request header file +*/ + #ifndef DNSREQUEST_H #define DNSREQUEST_H -#include "if/net/net.h" +#include "core/net.h" +#include "core/ipaddr.h" +#include "core/host.h" //Essentially it is a safe interface to NetDnsRequest +///DNS Request error codes enum DNSRequestErr { __DNS_MIN = -0xFFFF, - DNS_SETUP, //NetDnsRequest not properly configured - DNS_IF, //If has problems, does not exist or is not initialized - DNS_MEM, //Not enough mem - DNS_INUSE, //If/Port is in use - DNS_PROCESSING, //Req has not completed + DNS_SETUP, ///<DNSRequest not properly configured + DNS_IF, ///<Interface has problems, does not exist or is not initialized + DNS_MEM, ///<Not enough mem + DNS_INUSE, ///<Interface / Port is in use + DNS_PROCESSING, ///<Request has not completed //... - DNS_OK = 0 + DNS_OK = 0 ///<Success }; +///DNS Request Result Events enum DNSReply { DNS_PRTCL, - DNS_NOTFOUND, //Hostname is unknown - DNS_ERROR, //Problem with DNS Service + DNS_NOTFOUND, ///Hostname is unknown + DNS_ERROR, ///Problem with DNS Service //... DNS_FOUND, }; +class NetDnsRequest; +enum NetDnsReply; + +///This is a simple DNS Request class +/** + This class exposes an API to deal with DNS Requests +*/ class DNSRequest { public: + ///Creates a new request DNSRequest(); + + ///Terminates and closes request ~DNSRequest(); + ///Resolves an hostname + /** + @param hostname : hostname to resolve + */ DNSRequestErr resolve(const char* hostname); + + ///Resolves an hostname + /** + @param host : hostname to resolve, the result will be stored in the IpAddr field of this object + */ DNSRequestErr resolve(Host* pHost); + ///Setups callback + /** + The callback function will be called on result. + @param pMethod : callback function + */ + void setOnReply( void (*pMethod)(DNSReply) ); + class CDummy; - void setOnReply( void (*pMethod)(DNSReply) ); + ///Setups callback + /** + The callback function will be called on result. + @param pItem : instance of class on which to execute the callback method + @param pMethod : callback method + */ template<class T> void setOnReply( T* pItem, void (T::*pMethod)(DNSReply) ) { @@ -66,8 +105,13 @@ m_pCbMeth = (void (CDummy::*)(DNSReply)) pMethod; } + ///Gets IP address once it has been resolved + /** + @param pIp : pointer to an IpAddr instance in which to store the resolved IP address + */ DNSRequestErr getResult(IpAddr* pIp); + ///Closes DNS Request before completion DNSRequestErr close(); protected:
--- a/LPC1768/api/TCPSocket.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/api/TCPSocket.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,64 +21,106 @@ THE SOFTWARE. */ +/** \file +TCP Socket header file +*/ + #ifndef TCPSOCKET_H #define TCPSOCKET_H -#include "if/net/net.h" +#include "core/net.h" +#include "core/host.h" //Essentially it is a safe interface to NetTcpSocket +///TCP Socket error codes enum TCPSocketErr { __TCPSOCKET_MIN = -0xFFFF, - TCPSOCKET_SETUP, //NetTcpSocket not properly configured - TCPSOCKET_TIMEOUT, - TCPSOCKET_IF, //If has problems, does not exist or is not initialized - TCPSOCKET_MEM, //Not enough mem - TCPSOCKET_INUSE, //If/Port is in use - TCPSOCKET_EMPTY, //Connections queue is empty - TCPSOCKET_RST, // Connection was reset by remote host + TCPSOCKET_SETUP, ///<TCPSocket not properly configured + TCPSOCKET_TIMEOUT, ///<Connection timed out + TCPSOCKET_IF, ///<Interface has problems, does not exist or is not initialized + TCPSOCKET_MEM, ///<Not enough mem + TCPSOCKET_INUSE, ///<Interface / Port is in use + TCPSOCKET_EMPTY, ///<Connections queue is empty + TCPSOCKET_RST, ///<Connection was reset by remote host //... - TCPSOCKET_OK = 0 + TCPSOCKET_OK = 0 ///<Success }; +///TCP Socket Events enum TCPSocketEvent { - TCPSOCKET_CONNECTED, //Connected to host, must call accept() if we were listening - TCPSOCKET_ACCEPT, //Connected to client - TCPSOCKET_READABLE, //Data in buf - TCPSOCKET_WRITEABLE, //Can write data to buf - TCPSOCKET_CONTIMEOUT, - TCPSOCKET_CONRST, - TCPSOCKET_CONABRT, - TCPSOCKET_ERROR, - TCPSOCKET_DISCONNECTED + TCPSOCKET_CONNECTED, ///<Connected to host + TCPSOCKET_ACCEPT, ///<Client is connected, must call accept() to get a new Socket + TCPSOCKET_READABLE, ///<Data in buf + TCPSOCKET_WRITEABLE, ///<Can write data to buf + TCPSOCKET_CONTIMEOUT, ///<Connection timed out + TCPSOCKET_CONRST, ///<Connection was reset by remote host + TCPSOCKET_CONABRT, ///<Connection was aborted + TCPSOCKET_ERROR, ///<Unknown error + TCPSOCKET_DISCONNECTED ///<Disconnected }; +class NetTcpSocket; +enum NetTcpSocketEvent; +///This is a simple TCP Socket class +/** + This class exposes an API to deal with TCP Sockets +*/ class TCPSocket { public: + ///Creates a new socket TCPSocket(); protected: TCPSocket(NetTcpSocket* pNetTcpSocket); public: + ///Closes if needed and destroys the socket ~TCPSocket(); //close() + ///Binds the socket to (local) host TCPSocketErr bind(const Host& me); + + ///Starts listening TCPSocketErr listen(); + + ///Connects socket to host TCPSocketErr connect(const Host& host); + + ///Accepts connection from client and gets connected socket TCPSocketErr accept(Host* pClient, TCPSocket** ppNewTcpSocket); + ///Sends data + /* + @return a negative error code or the number of bytes transmitted + */ int /*if < 0 : TCPSocketErr*/ send(const char* buf, int len); + + ///Receives data + /* + @return a negative error code or the number of bytes received + */ int /*if < 0 : TCPSocketErr*/ recv(char* buf, int len); /* TODO NTH : printf / scanf helpers that call send/recv */ + ///Closes socket TCPSocketErr close(); + //Callbacks + ///Setups callback + /** + @param pMethod : callback function + */ + void setOnEvent( void (*pMethod)(TCPSocketEvent) ); + class CDummy; - //Callbacks - void setOnEvent( void (*pMethod)(TCPSocketEvent) ); + ///Setups callback + /** + @param pItem : instance of class on which to execute the callback method + @param pMethod : callback method + */ template<class T> void setOnEvent( T* pItem, void (T::*pMethod)(TCPSocketEvent) ) { @@ -86,7 +128,8 @@ m_pCbMeth = (void (CDummy::*)(TCPSocketEvent)) pMethod; } - void resetOnEvent(); //Disable callback + ///Disables callback + void resetOnEvent(); protected: void onNetTcpSocketEvent(NetTcpSocketEvent e);
--- a/LPC1768/api/UDPSocket.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/api/UDPSocket.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,47 +21,86 @@ THE SOFTWARE. */ +/** \file +UDP Socket header file +*/ + #ifndef UDPSOCKET_H #define UDPSOCKET_H -#include "if/net/net.h" +#include "core/net.h" +#include "core/host.h" //Essentially it is a safe interface to NetUdpSocket +///UDP Socket error codes enum UDPSocketErr { __UDPSOCKET_MIN = -0xFFFF, - UDPSOCKET_SETUP, //NetUdpSocket not properly configured - UDPSOCKET_IF, //If has problems, does not exist or is not initialized - UDPSOCKET_MEM, //Not enough mem - UDPSOCKET_INUSE, //If/Port is in use + UDPSOCKET_SETUP, ///<UDPSocket not properly configured + UDPSOCKET_IF, ///<Interface has problems, does not exist or is not initialized + UDPSOCKET_MEM, ///<Not enough mem + UDPSOCKET_INUSE, ///<Interface / Port is in use //... - UDPSOCKET_OK = 0 + UDPSOCKET_OK = 0 ///<Success }; -enum UDPSocketEvent //Only one lonely event here... but who knows, maybe some day there'll be another one! +///UDP Socket Event(s) +enum UDPSocketEvent //Only one event here for now, but keeps that model in case we need to implement some others { - UDPSOCKET_READABLE, //Data in buf + UDPSOCKET_READABLE, ///<Data in buf }; +class NetUdpSocket; +enum NetUdpSocketEvent; +///This is a simple UDP Socket class +/** + This class exposes an API to deal with UDP Sockets +*/ class UDPSocket { public: + ///Creates a new socket UDPSocket(); + + ///Closes and destroys socket ~UDPSocket(); //close() + ///Binds the socket to local host or a multicast address UDPSocketErr bind(const Host& me); + ///Sends data + /* + @param pHost : host to send data to + @return a negative error code or the number of bytes transmitted + */ int /*if < 0 : UDPSocketErr*/ sendto(const char* buf, int len, Host* pHost); + + ///Receives data + /* + @param pHost : host from which this piece of data comes from + @return a negative error code or the number of bytes received + */ int /*if < 0 : UDPSocketErr*/ recvfrom(char* buf, int len, Host* pHost); /* TODO NTH : printf / scanf helpers that call send/recv */ + ///Closes socket UDPSocketErr close(); + //Callbacks + ///Setups callback + /** + @param pMethod : callback function + */ + void setOnEvent( void (*pMethod)(UDPSocketEvent) ); + class CDummy; - //Callbacks - void setOnEvent( void (*pMethod)(UDPSocketEvent) ); + ///Setups callback + /** + @param pItem : instance of class on which to execute the callback method + @param pMethod : callback method + */ template<class T> void setOnEvent( T* pItem, void (T::*pMethod)(UDPSocketEvent) ) { @@ -69,7 +108,8 @@ m_pCbMeth = (void (CDummy::*)(UDPSocketEvent)) pMethod; } - void resetOnEvent(); //Disable callback + ///Disables callback + void resetOnEvent(); protected: void onNetUdpSocketEvent(NetUdpSocketEvent e);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LPC1768/core/host.h Fri Aug 06 10:42:05 2010 +0000 @@ -0,0 +1,109 @@ + +/* +Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#ifndef HOST_H +#define HOST_H + +#include "ipaddr.h" +#include <string.h> + +///Host information container +/** +This class is a container for data relative to a connection: +- IP Address +- Port number +- Host Name +*/ +class Host +{ +public: + ///Initiliazes host with null values + Host() : m_ip(0,0,0,0), m_port(0), m_name(NULL) + { + + } + + ///Initializes host + Host(const IpAddr& ip, const int& port, const char* name="" ) : m_ip(ip), m_port(port), m_name(NULL) + { + setName(name); + } + + ~Host() + { + if(m_name) + { + delete[] m_name; + } + } + + ///Returns IP address + const IpAddr& getIp() const + { + return m_ip; + } + + ///Returns port number + const int& getPort() const + { + return m_port; + } + + ///Returns host name + const char* getName() const + { + return m_name; + } + + ///Sets IP address + void setIp(const IpAddr& ip) + { + m_ip = ip; + } + + ///Sets port number + void setPort(int port) + { + m_port = port; + } + + ///Sets host name + void setName(const char* name) + { + if(m_name) + delete[] m_name; + int len = strlen(name); + if(len) + { + m_name = new char[len+1]; + strcpy(m_name, name); + } + } + +private: + IpAddr m_ip; + int m_port; + char* m_name; +}; + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LPC1768/core/ipaddr.h Fri Aug 06 10:42:05 2010 +0000 @@ -0,0 +1,98 @@ + +/* +Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#ifndef IPADDR_H +#define IPADDR_H + +#include "netCfg.h" +#if NET_LWIP_STACK +typedef struct ip_addr ip_addr_t; +#endif + +#include "stdint.h" + +///IP Address container +/** +This class is a container for an IPv4 address. +*/ +class IpAddr //Basically a C++ frontend to ip_addr_t +{ +public: + #if NET_LWIP_STACK + IpAddr(ip_addr_t* pIp); + #endif + + ///Initializes IP address with provided values + IpAddr(uint8_t ip0, uint8_t ip1, uint8_t ip2, uint8_t ip3); + + ///Initializes IP address with null values + IpAddr(); + + #if NET_LWIP_STACK + ip_addr_t getStruct() const; + #endif + + ///Returns IP address byte # + uint8_t operator[](unsigned int i) const; + + ///Compares too addresses + /** + @return true if the two addresses are equal + */ + bool isEq(const IpAddr& b) const; + + ///Compares too addresses + /** + @return true if the two addresses are equal + */ + bool operator==(const IpAddr& b) const; + + ///Compares too addresses + /** + @return true if the two addresses are different + */ + bool operator!=(const IpAddr& b) const; + + ///Checks whether the address is null + /** + @return true if the address is null + */ + bool isNull() const; + + ///Checks whether the address is a broadcast address + /** + @return true if the address is a broadcast address + */ + bool isBroadcast() const; + + ///Checks whether the address is a multicast address + /** + @return true if the address is a multicast address + */ + bool isMulticast() const; + +private: + uint8_t m_ip[4]; +}; + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LPC1768/core/net.h Fri Aug 06 10:42:05 2010 +0000 @@ -0,0 +1,101 @@ + +/* +Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#ifndef NET_H +#define NET_H + +class NetIf; +class NetTcpSocket; +class NetUdpSocket; +class NetDnsRequest; + +#include <list> +using std::list; + +/* +#include "host.h" +#include "ipaddr.h" +#include "netservice.h" +#include "if/net/netif.h" +#include "if/net/nettcpsocket.h" +#include "if/net/netudpsocket.h" +#include "if/net/netdnsrequest.h" +*/ + +class Host; +class NetIf; +class NetTcpSocket; +class NetUdpSocket; +class NetDnsRequest; + +class Net +{ +private: + Net(); + ~Net(); +public: + static void poll(); //Poll every if & socket + + static NetTcpSocket* tcpSocket(NetIf& netif); + static NetTcpSocket* tcpSocket(); //Socket on default if + static void releaseTcpSocket(NetTcpSocket* pNetTcpSocket); + + static NetUdpSocket* udpSocket(NetIf& netif); + static NetUdpSocket* udpSocket(); //Socket on default if + static void releaseUdpSocket(NetUdpSocket* pNetUdpSocket); + + static NetDnsRequest* dnsRequest(const char* hostname, NetIf& netif); + static NetDnsRequest* dnsRequest(const char* hostname); //Create a new NetDnsRequest object from default if + + static NetDnsRequest* dnsRequest(Host* pHost, NetIf& netif); + static NetDnsRequest* dnsRequest(Host* pHost); //Create a new NetDnsRequest object from default if + + static void setDefaultIf(NetIf& netif); //Deprecated + static void setDefaultIf(NetIf* pIf); + static NetIf* getDefaultIf(); + +protected: + friend class NetIf; + friend class NetTcpSocket; + friend class NetUdpSocket; + + static void registerIf(NetIf* pIf); + static void unregisterIf(NetIf* pIf); + + static void registerNetTcpSocket(NetTcpSocket* pNetTcpSocket); + static void unregisterNetTcpSocket(NetTcpSocket* pNetTcpSocket); + + static void registerNetUdpSocket(NetUdpSocket* pNetUdpSocket); + static void unregisterNetUdpSocket(NetUdpSocket* pNetUdpSocket); + +private: + static Net& net(); //Return inst of singleton + + NetIf* m_defaultIf; + + list<NetIf*> m_lpIf; + list<NetTcpSocket*> m_lpNetTcpSocket; + list<NetUdpSocket*> m_lpNetUdpSocket; +}; + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LPC1768/core/netservice.h Fri Aug 06 10:42:05 2010 +0000 @@ -0,0 +1,67 @@ + +/* +Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +/** +\file Net Service base class header file +*/ + +#ifndef NETSERVICE_H +#define NETSERVICE_H + +#include <list> +using std::list; + +///Net Service base class +/** +Each connection-oriented object can register as service (by inheriting this class), so that it is polled regularly. +It notifies the pool when the connection is terminated so that it can be destroyed. +*/ +class NetService +{ +public: + ///Instantiates a new service + /** + @param owned If true the object is owned by the pool and will be destroyed on closure. + */ + NetService(bool owned = true); //Is owned by the pool? + virtual ~NetService(); + + ///This method can be inherited so that it is called on each @a Net::poll() call. + virtual void poll(); + + static void servicesPoll(); //Poll all registered services & destroy closed ones + +protected: + ///This flags the service as to be destructed if owned by the pool. + void close(); + +private: + bool m_closed; + bool m_removed; + bool m_owned; + + static list<NetService*>& lpServices(); //Helper to prevent static initialization fiasco + +}; + +#endif
--- a/LPC1768/dbg/dbg.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/dbg/dbg.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,6 +21,10 @@ THE SOFTWARE. */ +/** \file +Debugging helpers header file +*/ + //#ifdef DBG_H //#define DBG_H @@ -28,6 +32,11 @@ #define __DEBUG #endif +/*! + \def __DEBUG + To define to enable debugging in one file +*/ + #ifdef __DEBUG #ifndef __DEBUGSTREAM @@ -47,9 +56,15 @@ #undef DBG #undef DBG_END #undef BREAK + +///Debug output (if enabled), same syntax as printf, with heading info #define DBG(...) do{ DebugStream::debug("[%s:%s@%d] ", __FILE__, __FUNCTION__, __LINE__); DebugStream::debug(__VA_ARGS__); } while(0); + +///Debug output (if enabled), same syntax as printf, no heading info #define DBGL(...) do{ DebugStream::debug(__VA_ARGS__); } while(0); #define DBG_END DebugStream::release + +///Break point usin serial debug interface (if debug enbaled) #define BREAK() DebugStream::breakPoint(__FILE__, __LINE__) #endif
--- a/LPC1768/drv/zg2100/zg_com.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/drv/zg2100/zg_com.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,7 +21,10 @@ THE SOFTWARE. */ -//ZG2100 Low-level communication functions (SPI, CS, Interrupt) +/** +@file +ZG2100 Low-level communication functions (SPI, CS, Interrupt) +*/ //Donatien Garnier 2010 #ifndef ZG_COM_H @@ -44,41 +47,46 @@ class DigitalOut; class InterruptIn; */ +///Opens SPI interface with pins void zg_com_init(SPI* pSpi, DigitalOut* pCs, /*InterruptIn*/ DigitalIn* pInt, DigitalOut* pNrst); //Registers Access - +///Reads register uint32_t zg_register_read(uint32_t addr); +///Writes register void zg_register_write(uint32_t addr, uint32_t reg); //Indexed Registers Access - +///Reads indexed register uint32_t zg_indexed_register_read(uint32_t addr); +///writes indexed register void zg_indexed_register_write(uint32_t addr, uint32_t reg); //Fifos - +///Reads FIFO void zg_fifo_read( byte fifo, byte* pType, byte* pSubtype, byte* buf, int len ); +///Writes FIFO (can be chunked) void zg_fifo_write( byte fifo, byte type, byte subtype, byte* buf, int len, bool start = true, bool stop = true ); //Write by chunks //Spi +///SPI transfers directions typedef enum __ZG_SPI_DIR { - ZG_SPI_READ, - ZG_SPI_WRITE, - ZG_SPI_TRF //Read & Write + ZG_SPI_READ, ///Read + ZG_SPI_WRITE, ///Write + ZG_SPI_TRF ///Read & Write } ZG_SPI_DIR; - +///Transfers SPI frame void zg_spi_trf(byte* buf, int len, bool resetCs = true, ZG_SPI_DIR dir = ZG_SPI_TRF); +///Is there an interrupt to serve? bool zg_is_int(); - //Callbacks, must be implemented in zg_drv.c void zg_on_int(); //On data available interrupt
--- a/LPC1768/drv/zg2100/zg_defs.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/drv/zg2100/zg_defs.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,14 +21,15 @@ THE SOFTWARE. */ -//ZG2100 Low-level driver definitions +/** +@file +ZG2100 Low-level driver definitions +*/ //Donatien Garnier 2010 #ifndef ZG_DEFS_H #define ZG_DEFS_H -#include "zg_err.h" //Error codes - /* Parameters */ #define ZG_HEAD_BUF_SIZE 64//16 @@ -188,6 +189,21 @@ #define ZG_INT_MASK_F0 0x40 #define ZG_INT_MASK_F1 0x80 +/* Internal Error Codes */ + +typedef enum __ZG_INT_ERR +{ + ZG_INT_OK = 1, + ZG_INT_RESOURCES = 12, //Not enough resources + ZG_INT_TIMEOUT, + ZG_INT_FRAME_ERROR, + ZG_INT_AUTH_REFUSED, + ZG_INT_ASSOC_REFUSED, + ZG_INT_IN_PROGRESS, + ZG_INT_SUPPLICANT_FAILED = 21 + +} ZG_INT_ERR; + /* F0 / F1 helpers */ #define ZG_REG_F_CTRL0(n) ((n==0)?ZG_REG_F0_CTRL0:ZG_REG_F1_CTRL0) #define ZG_REG_F_CTRL1(n) ((n==0)?ZG_REG_F0_CTRL1:ZG_REG_F1_CTRL1) @@ -236,11 +252,12 @@ byte revision; } ZG_SYSV; +///BSS types typedef enum __ZG_BSS_TYPE { - ZG_BSS_INFRA = 1, - ZG_BSS_ADHOC = 2, - ZG_BSS_ANY = 3 + ZG_BSS_INFRA = 1, ///< Infrastructure + ZG_BSS_ADHOC = 2, ///< Ad-Hoc + ZG_BSS_ANY = 3 ///< Either } ZG_BSS_TYPE; typedef enum __ZG_PROBE_TYPE @@ -333,13 +350,14 @@ byte key[ZG_PMK_LEN]; //PSK key returned } ZG_PMK_REQ; +///Security type typedef enum __ZG_SECURITY { - ZG_SECURITY_NONE = 0x00, - ZG_SECURITY_WEP = 0x01, - ZG_SECURITY_WPA = 0x02, - ZG_SECURITY_WPA2 = 0x03, - ZG_SECURITY_TRY = 0xFF + ZG_SECURITY_NONE = 0x00, ///< None + ZG_SECURITY_WEP = 0x01, ///< WEP + ZG_SECURITY_WPA = 0x02, ///< WPA + ZG_SECURITY_WPA2 = 0x03, ///< WPA2 + ZG_SECURITY_TRY = 0xFF ///< Try all (not recommanded) } ZG_SECURITY; typedef __packed struct __ZG_CONNECT_REQ
--- a/LPC1768/drv/zg2100/zg_drv.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/drv/zg2100/zg_drv.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,21 +21,27 @@ THE SOFTWARE. */ -//ZG2100 Low-level driver +/** +@file +ZG2100 Low-level driver +*/ //Donatien Garnier 2010 #ifndef ZG_DRV_H #define ZG_DRV_H #include "zg_defs.h" +#include "zg_err.h" +//Stores relevant data typedef struct _ZG_DATA { byte mac_addr[6]; ZG_SYSV sys_version; - + } ZG_DATA; +//Stores which data is actually available typedef struct _ZG_DATA_MASK { bool mac_addr; @@ -49,34 +55,53 @@ extern ZG_DATA_MASK zg_data_mask; //Flags valid data //Spi intf, Chip Select pin, Interrupt pin +///Initializes driver (zg_com_init must be called before). zg_err zg_drv_init(); +//FIXME: Not implemented, not used (to be deleted?) void zg_on_data_attach( void (*on_data)() ); +///Must be called regularly to process interrupts. void zg_process(); //Must be called regularly by user +///Processes interrupt. (Called by zg_process if needed) void zg_int_process(); //Process interrupt +///Can a management request be sent? bool zg_mgmt_is_busy(); +///Sends management request void zg_mgmt_req(byte subtype, byte* buf, int len, bool close = true); + +///Writes additional management data void zg_mgmt_data(byte* buf, int len, bool close = true); +///Gets parameter void zg_mgmt_get_param(byte param); + +///Sets parameter void zg_mgmt_set_param(byte param, byte* buf, int len); +///Called on management request result void zg_on_mgmt_avl(byte subtype, byte* buf, int len); //Data is available + +///Called on management event void zg_on_mgmt_evt(byte subtype, byte* buf, int len); //Management event +///Called when get parameter request completes void zg_on_mgmt_get_param(byte* buf, int len); //Get param completed //uint32_t zg_fifo_room(); //Useful to be split in several function because Lwip stores buffers in chunks +///Sends Data (start) void zg_send_start(); +///Sends Data (main) void zg_send(byte* buf, int len); +///Sends Data (end) void zg_send_end(); +///Can more data be sent? bool zg_send_is_busy(); //Callbacks implemented in zg_if @@ -85,6 +110,7 @@ void zg_on_connect(zg_err result); //Handled by zg_net +///Data received void zg_on_input(byte* buf, int len); //Callbacks from zg_com
--- a/LPC1768/drv/zg2100/zg_err.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/drv/zg2100/zg_err.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,23 +21,33 @@ THE SOFTWARE. */ -//ZG2100 Low-level driver definitions +/** +@file +ZG2100 driver errors +*/ //Donatien Garnier 2010 #ifndef ZG_ERR_H #define ZG_ERR_H +#include "zg_defs.h" + +///ZG2100 Wi-Fi Module driver error codes typedef enum __zg_err { - ZG_OK = 1, - ZG_RESOURCES = 12, //Not enough resources - ZG_TIMEOUT, - ZG_FRAME_ERROR, - ZG_AUTH_REFUSED, - ZG_ASSOC_REFUSED, - ZG_IN_PROGRESS, - ZG_SUPPLICANT_FAILED = 21 + __ZG_MIN = -0xFFFF, + ZG_RESOURCES, ///< Not enough resources + ZG_TIMEOUT, ///< Timeout + ZG_FRAME_ERROR, ///< Framing error + ZG_AUTH_REFUSED, ///< Authentication refused + ZG_ASSOC_REFUSED, ///< Association refused + ZG_IN_PROGRESS, ///< Command is being processed + ZG_SUPPLICANT_FAILED, ///< Error with WPA-handling + ZG_UNKNOWN, ///< Unknown error + ZG_OK = 0 ///< Success } zg_err; +zg_err zg_errcode(ZG_INT_ERR int_err); //Errcodes conversion + #endif
--- a/LPC1768/drv/zg2100/zg_if.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/drv/zg2100/zg_if.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,7 +21,10 @@ THE SOFTWARE. */ -//ZG2100 NetServices high-level interface : configuration & setup +/** +@file +ZG2100 NetServices high-level interface : configuration & setup +*/ //Donatien Garnier 2010 #ifndef ZG_IF_H @@ -29,26 +32,37 @@ #include "zg_defs.h" +///Scans for available networks on given \a channel. void zg_scan(byte channel); +///Will be called on scan completion, for now it is just a debug dump. void zg_on_scan_results(byte* buf, int len); +///Sets the SSID of the network to be joined. void zg_set_ssid(const char* ssid); +///Sets WEP key. void zg_set_wep_key(const byte* key, int len); +///Sets WPA passphrase (will compute PSK key and set it). void zg_set_wpa_pass(const char* pass); +///On completion of the passphrase computation. void zg_on_psk_key(byte* buf, int len); +///Sets PSK key (preferred to be called directly than recomputing it every time using \a zg_set_wpa_pass). void zg_set_psk_key(const byte* key, int len); +///Connects to network. void zg_connect(ZG_BSS_TYPE type, ZG_SECURITY security); +///On connection result. void zg_on_connect(zg_err result); +///Gets connection result. zg_err zg_get_connection_result(); +///Disconnects from network. void zg_disconnect(); void hexdump(byte* buffer, int size);
--- a/LPC1768/drv/zg2100/zg_net.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/drv/zg2100/zg_net.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,7 +21,10 @@ THE SOFTWARE. */ -//ZG2100 Lwip Driver +/** +@file +ZG2100 LwIP Driver +*/ //Donatien Garnier 2010 #ifndef ZG_NET_H @@ -32,12 +35,14 @@ typedef signed char err_t; //To be called by Lwip -static err_t zg_output(struct netif *netif, struct pbuf *p); //Transfer an ethernet frame : convert into ZG frame & TX it +///Transfers an ethernet frame: converts into ZG frame & TXs it +static err_t zg_output(struct netif *netif, struct pbuf *p); //Callback from zg_drv -void zg_on_input(byte* buf, int len); //On reception of a ZG frame : convert into Eth frame & feed lwip +///On reception of a ZG frame: converts into Eth frame & feeds lwip +void zg_on_input(byte* buf, int len); - +///Initializes network interface err_t zg_net_init(struct netif *netif); #endif
--- a/LPC1768/if/lwip/LwipNetIf.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/if/lwip/LwipNetIf.h Fri Aug 06 10:42:05 2010 +0000 @@ -28,10 +28,13 @@ #include "mbed.h" #define NET_LWIP_STACK 1 -#include "if/net/net.h" +#include "core/net.h" +#include "if/net/netif.h" +/* #include "lwipNetTcpSocket.h" #include "lwipNetUdpSocket.h" #include "lwipNetDnsRequest.h" +*/ class LwipNetIf : public NetIf {
--- a/LPC1768/if/lwip/lwipNetTcpSocket.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/if/lwip/lwipNetTcpSocket.h Fri Aug 06 10:42:05 2010 +0000 @@ -25,16 +25,18 @@ #define LWIPNETTCPSOCKET_H #define NET_LWIP_STACK 1 -#include "lwip/ip_addr.h" -#include "if/net/net.h" +#include "if/net/nettcpsocket.h" #include "LwipNetIf.h" +#include "stdint.h" + //Implements NetTcpSockets over lwIP raw API struct tcp_pcb; //Represents a Tcp Connection, "Protocol Control Block", see rawapi.txt & tcp.h struct pbuf; //Lwip Buffer Container typedef signed char err_t; +typedef uint16_t u16_t; class LwipNetTcpSocket: public NetTcpSocket {
--- a/LPC1768/if/lwip/lwipNetUdpSocket.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/if/lwip/lwipNetUdpSocket.h Fri Aug 06 10:42:05 2010 +0000 @@ -25,10 +25,12 @@ #define LWIPNETUDPSOCKET_H #define NET_LWIP_STACK 1 -#include "lwip/ip_addr.h" -#include "if/net/net.h" +//#include "lwip/ip_addr.h" +#include "if/net/netudpsocket.h" #include "LwipNetIf.h" +#include "stdint.h" + #include <list> using std::list; @@ -36,8 +38,10 @@ struct udp_pcb; //Represents a Udp Connection, "Protocol Control Block", see rawapi.txt & udp.h struct pbuf; //Lwip Buffer Container +typedef struct ip_addr ip_addr_t; -typedef signed char err_t; +//typedef signed char err_t; +typedef uint16_t u16_t; class LwipNetUdpSocket: public NetUdpSocket { @@ -70,6 +74,7 @@ }; list<InPacket> m_lInPkt; + IpAddr m_multicastGroup; //Static callback : Transforms into a C++ callback static void sRecvCb(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port);
--- a/LPC1768/if/net/host.h Thu Jul 22 11:31:59 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ - -/* -Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef HOST_H -#define HOST_H - -class NetDnsRequest; - -#include "ipaddr.h" -#include "netdnsrequest.h" -#include <string.h> - -class Host -{ -public: - Host() : m_ip(0,0,0,0), m_port(0), m_name(NULL) - { - - } - Host(const IpAddr& ip, const int& port, const char* name="" ) : m_ip(ip), m_port(port), m_name(NULL) - { - setName(name); - } - - ~Host() - { - if(m_name) - { - delete[] m_name; - } - } - - const IpAddr& getIp() const - { - return m_ip; - } - - const int& getPort() const - { - return m_port; - } - - const char* getName() const - { - return m_name; - } - - void setIp(const IpAddr& ip) - { - m_ip = ip; - } - - void setPort(int port) - { - m_port = port; - } - - void setName(const char* name) - { - if(m_name) - delete[] m_name; - int len = strlen(name); - if(len) - { - m_name = new char[len+1]; - strcpy(m_name, name); - } - } - -private: - friend class NetDnsRequest; - IpAddr m_ip; - int m_port; - char* m_name; -}; - -#endif
--- a/LPC1768/if/net/ipaddr.h Thu Jul 22 11:31:59 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,108 +0,0 @@ - -/* -Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef IPADDR_H -#define IPADDR_H - -#include "mbed.h" - -#include "netCfg.h" -#if NET_LWIP_STACK -#include "lwip/ip_addr.h" - -#ifdef __LWIP_DEBUG -#undef __LWIP_DEBUG -#endif -#endif - -class IpAddr; - -class IpAddr //Basically a C++ frontend to ip_addr_t -{ -public: - #if NET_LWIP_STACK - IpAddr(ip_addr_t* pIp) - { - *((uint32_t*)m_ip) = pIp->addr; - } - #endif - - IpAddr(uint8_t ip0, uint8_t ip1, uint8_t ip2, uint8_t ip3) - { - //We are in LE - m_ip[0] = ip0; - m_ip[1] = ip1; - m_ip[2] = ip2; - m_ip[3] = ip3; - } - - IpAddr() - { - m_ip[0] = 0; - m_ip[1] = 0; - m_ip[2] = 0; - m_ip[3] = 0; - } - - #if NET_LWIP_STACK - ip_addr_t getStruct() const - { - ip_addr_t ip_struct; - ip_struct.addr = *((uint32_t*)m_ip); - return ip_struct; - } - #endif - - uint8_t operator[](unsigned int i) const - { - uint8_t null = 0; - if( i > 3 ) - return null; - return m_ip[i]; - } - - bool isEq(const IpAddr& b) const - { - return (*((uint32_t*)m_ip) == *((uint32_t*)(b.m_ip))); - } - - bool operator==(const IpAddr& b) const - { - return isEq(b); - } - - bool operator!=(const IpAddr& b) const - { - return !(operator==(b)); - } - - bool isNull() const - { - return (*((uint32_t*)m_ip) == 0); - } - -private: - uint8_t m_ip[4]; -}; - -#endif
--- a/LPC1768/if/net/net.h Thu Jul 22 11:31:59 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ - -/* -Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef NET_H -#define NET_H - -class NetIf; -class NetTcpSocket; -class NetUdpSocket; -class NetDnsRequest; - -#include <list> -using std::list; - -#include "host.h" -#include "ipaddr.h" -#include "netif.h" -#include "nettcpsocket.h" -#include "netudpsocket.h" -#include "netservice.h" -#include "netdnsrequest.h" - -class Net -{ -private: - Net(); - ~Net(); -public: - static void poll(); //Poll every if & socket - - static NetTcpSocket* tcpSocket(NetIf& netif); - static NetTcpSocket* tcpSocket(); //Socket on default if - static void releaseTcpSocket(NetTcpSocket* pNetTcpSocket); - - static NetUdpSocket* udpSocket(NetIf& netif); - static NetUdpSocket* udpSocket(); //Socket on default if - static void releaseUdpSocket(NetUdpSocket* pNetUdpSocket); - - static NetDnsRequest* dnsRequest(const char* hostname, NetIf& netif); - static NetDnsRequest* dnsRequest(const char* hostname); //Create a new NetDnsRequest object from default if - - static NetDnsRequest* dnsRequest(Host* pHost, NetIf& netif); - static NetDnsRequest* dnsRequest(Host* pHost); //Create a new NetDnsRequest object from default if - - static void setDefaultIf(NetIf& netif); //Deprecated - static void setDefaultIf(NetIf* pIf); - static NetIf* getDefaultIf(); - - //TODO: Factory functions like 'setupEthernet', 'setupPPP', 'setupTelit' ... - #if 0 - enum NetErr //Generic errors - { - __NET_MIN = -0xFFFF; - NET_OPEN, //Could not open if - NET_CONNECT, //Could not connect - NET_AUTH, //Could not auth - NET_HW, //HW problem - - NET_OK = 0 - }; - - static NetErr Ethernet(); - static NetErr PPPoverSerial(int Tx, int Rx, const char* apn, const char* user, const char* password); - static NetErr Telit(int pwrSetPin, int pwrMonPin, int Tx, int Rx); - #endif - -protected: - friend class NetIf; - friend class NetTcpSocket; - friend class NetUdpSocket; - - static void registerIf(NetIf* pIf); - static void unregisterIf(NetIf* pIf); - - static void registerNetTcpSocket(NetTcpSocket* pNetTcpSocket); - static void unregisterNetTcpSocket(NetTcpSocket* pNetTcpSocket); - - static void registerNetUdpSocket(NetUdpSocket* pNetUdpSocket); - static void unregisterNetUdpSocket(NetUdpSocket* pNetUdpSocket); - -private: - static Net& net(); //Return inst of singleton - - NetIf* m_defaultIf; - - list<NetIf*> m_lpIf; - list<NetTcpSocket*> m_lpNetTcpSocket; - list<NetUdpSocket*> m_lpNetUdpSocket; -}; - -#endif
--- a/LPC1768/if/net/netif.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/if/net/netif.h Fri Aug 06 10:42:05 2010 +0000 @@ -24,10 +24,15 @@ #ifndef NETIF_H #define NETIF_H -#include "ipaddr.h" +#include "core/ipaddr.h" +/* #include "nettcpsocket.h" #include "netudpsocket.h" #include "netdnsrequest.h" +*/ +class NetTcpSocket; +class NetUdpSocket; +class NetDnsRequest; #if 0 enum NetifEvent @@ -48,6 +53,8 @@ virtual void poll() = 0; virtual NetDnsRequest* dnsRequest(const char* hostname) = 0; //Create a new NetDnsRequest object virtual NetDnsRequest* dnsRequest(Host* pHost) = 0; //Create a new NetDnsRequest object + + //!Returns the IP of the interface once it's connected IpAddr getIp() const; protected:
--- a/LPC1768/if/net/netservice.h Thu Jul 22 11:31:59 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ - -/* -Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef NETSERVICE_H -#define NETSERVICE_H - -//class NetDnsRequest; -//#include "net.h" - -//Each connection-oriented object can register as service (by inheriting this class), so that it is polled regularly -//It notifies the pool when the connection is terminated so that it can be destroyed - -#include <list> -using std::list; - -class NetService -{ -public: - NetService(bool owned = true); //Is owned by the pool? - virtual ~NetService(); - - virtual void poll(); - - static void servicesPoll(); //Poll all registered services & destroy closed ones - -protected: - void close(); - -private: - bool m_closed; - bool m_removed; - bool m_owned; - - static list<NetService*>& lpServices(); //Helper to prevent static initialization fiasco - -}; - -#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LPC1768/if/zg2100/ZG2100NetIf.h Fri Aug 06 10:42:05 2010 +0000 @@ -0,0 +1,117 @@ + +/* +Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +/** \file +ZG2100 Wi-Fi Module network interface header file +*/ + +#ifndef ZG2100NETIF_H +#define ZG2100NETIF_H + +struct netif; + +#include "mbed.h" + +#include "if/lwip/LwipNetIf.h" +#include "core/net.h" + +#include "drv/zg2100/zg_defs.h" +#include "drv/zg2100/zg_err.h" + +///ZG2100 Wi-Fi Module network interface error codes +typedef zg_err ZG2100Err; + +///ZG2100 Wi-Fi Module network interface +/** +This class provides Wi-Fi connectivity to the stack +*/ +class ZG2100NetIf : public LwipNetIf +{ +public: + ///Instantiates the Interface and register it against the stack, DHCP will be used + ZG2100NetIf( PinName mosi, PinName miso, PinName sclk, PinName cs, PinName intp, PinName nrst ); //W/ DHCP + ///Instantiates the Interface and register it against the stack, DHCP will not be used + /** + IpAddr is a container class that can be constructed with either 4 bytes or no parameters for a null IP address. + */ + ZG2100NetIf( PinName mosi, PinName miso, PinName sclk, PinName cs, PinName intp, PinName nrst, + IpAddr ip, IpAddr netmask, IpAddr gateway, IpAddr dns ); //W/o DHCP + virtual ~ZG2100NetIf(); + + ///Initializes module + void init(); + + ///Sets network's SSID + void setSsid(const char* ssid); + + ///Sets network's WEP key + void setWepKey(const byte* key, int len); + + ///Sets network's WPA passphrase (can last up to 30s) + void setWpaPass(const char* pass); + + ///Sets network's PSK key (preferred when using WPA to avoid computing it each time) + void setPskKey(const byte* key, int len); + + ///Connects to network + ZG2100Err connect(ZG_BSS_TYPE type, ZG_SECURITY security); + + ///Disconnects from network + void disconnect(); + + ///Brings the interface up (must be connected to a network first) + /** + Uses DHCP if necessary + @param timeout_ms : You can set the timeout parameter in milliseconds, if not it defaults to 15s + @return : ZG_OK on success or ZG_TIMEOUT on timeout + */ + ZG2100Err setup(int timeout_ms = 15000); + + virtual void poll(); + +private: + void waitReady(); + + SPI m_spi; + DigitalOut m_cs; + /*InterruptIn*/ DigitalIn m_intp; + DigitalOut m_nrst; + + Timer m_ethArpTimer; + Timer m_dhcpCoarseTimer; + Timer m_dhcpFineTimer; + Timer m_igmpTimer; + + bool m_useDhcp; + + netif* m_pNetIf; + + IpAddr m_netmask; + IpAddr m_gateway; + + const char* m_hostname; + +}; + +#endif +
--- a/LPC1768/if/zg2100/zg2100NetIf.h Thu Jul 22 11:31:59 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,88 +0,0 @@ - -/* -Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef ZG2100NETIF_H -#define ZG2100NETIF_H - -struct netif; - -#include "mbed.h" - -#include "if/lwip/LwipNetIf.h" -#include "if/net/net.h" - -#include "drv/zg2100/zg_defs.h" - -typedef zg_err ZG2100Err; - -class ZG2100NetIf : public LwipNetIf -{ -public: - ZG2100NetIf( PinName mosi, PinName miso, PinName sclk, PinName cs, PinName intp, PinName nrst ); //W/ DHCP - ZG2100NetIf( PinName mosi, PinName miso, PinName sclk, PinName cs, PinName intp, PinName nrst, - IpAddr ip, IpAddr netmask, IpAddr gateway, IpAddr dns ); //W/o DHCP - virtual ~ZG2100NetIf(); - - void init(); - - void setSsid(const char* ssid); - - void setWepKey(const byte* key, int len); - - void setWpaPass(const char* pass); - - void setPskKey(const byte* key, int len); - - ZG2100Err connect(ZG_BSS_TYPE type, ZG_SECURITY security); - - void disconnect(); - - ZG2100Err setup(int timeout_ms = 15000); - - virtual void poll(); - -private: - void waitReady(); - - SPI m_spi; - DigitalOut m_cs; - /*InterruptIn*/ DigitalIn m_intp; - DigitalOut m_nrst; - - Timer m_ethArpTimer; - Timer m_dhcpCoarseTimer; - Timer m_dhcpFineTimer; - - bool m_useDhcp; - - netif* m_pNetIf; - - IpAddr m_netmask; - IpAddr m_gateway; - - const char* m_hostname; - -}; - -#endif -
--- a/LPC1768/lwip/arch/cc.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/lwip/arch/cc.h Fri Aug 06 10:42:05 2010 +0000 @@ -29,9 +29,8 @@ #define FALSE 0 #endif -#ifndef DBG -//#error -#endif +#include <stdlib.h> +#define LWIP_RAND rand #define LWIP_PLATFORM_DIAG(x) DBG x #define LWIP_PLATFORM_ASSERT(x) DBG(x)
--- a/LPC1768/lwip/include/ipv4/lwip/icmp.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/lwip/include/ipv4/lwip/icmp.h Fri Aug 06 10:42:05 2010 +0000 @@ -70,7 +70,7 @@ #ifdef PACK_STRUCT_USE_INCLUDES # include "arch/bpstruct.h" #endif -/** This is the standard ICMP header only that the u32_t data +/* This is the standard ICMP header only that the u32_t data * is splitted to two u16_t like ICMP echo needs it. * This header is also used for other ICMP types that do not * use the data part. @@ -91,7 +91,7 @@ #define ICMPH_TYPE(hdr) ((hdr)->type) #define ICMPH_CODE(hdr) ((hdr)->code) -/** Combines type and code to an u16_t */ +/* Combines type and code to an u16_t */ #define ICMPH_TYPE_SET(hdr, t) ((hdr)->type = (t)) #define ICMPH_CODE_SET(hdr, c) ((hdr)->code = (c))
--- a/LPC1768/lwip/include/ipv4/lwip/inet.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/lwip/include/ipv4/lwip/inet.h Fri Aug 06 10:42:05 2010 +0000 @@ -40,7 +40,7 @@ extern "C" { #endif -/** For compatibility with BSD code */ +/* For compatibility with BSD code */ struct in_addr { u32_t s_addr; };
--- a/LPC1768/lwip/include/lwip/netif.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/lwip/include/lwip/netif.h Fri Aug 06 10:42:05 2010 +0000 @@ -56,58 +56,58 @@ /* Throughout this file, IP addresses are expected to be in * the same byte order as in IP_PCB. */ -/** must be the maximum of all used hardware address lengths +/* must be the maximum of all used hardware address lengths across all types of interfaces in use */ #define NETIF_MAX_HWADDR_LEN 6U -/** Whether the network interface is 'up'. This is +/* Whether the network interface is 'up'. This is * a software flag used to control whether this network * interface is enabled and processes traffic. * It is set by the startup code (for static IP configuration) or * by dhcp/autoip when an address has been assigned. */ #define NETIF_FLAG_UP 0x01U -/** If set, the netif has broadcast capability. +/* If set, the netif has broadcast capability. * Set by the netif driver in its init function. */ #define NETIF_FLAG_BROADCAST 0x02U -/** If set, the netif is one end of a point-to-point connection. +/* If set, the netif is one end of a point-to-point connection. * Set by the netif driver in its init function. */ #define NETIF_FLAG_POINTTOPOINT 0x04U -/** If set, the interface is configured using DHCP. +/* If set, the interface is configured using DHCP. * Set by the DHCP code when starting or stopping DHCP. */ #define NETIF_FLAG_DHCP 0x08U -/** If set, the interface has an active link +/* If set, the interface has an active link * (set by the network interface driver). * Either set by the netif driver in its init function (if the link * is up at that time) or at a later point once the link comes up * (if link detection is supported by the hardware). */ #define NETIF_FLAG_LINK_UP 0x10U -/** If set, the netif is an ethernet device using ARP. +/* If set, the netif is an ethernet device using ARP. * Set by the netif driver in its init function. * Used to check input packet types and use of DHCP. */ #define NETIF_FLAG_ETHARP 0x20U -/** If set, the netif is an ethernet device. It might not use +/* If set, the netif is an ethernet device. It might not use * ARP or TCP/IP if it is used for PPPoE only. */ #define NETIF_FLAG_ETHERNET 0x40U -/** If set, the netif has IGMP capability. +/* If set, the netif has IGMP capability. * Set by the netif driver in its init function. */ #define NETIF_FLAG_IGMP 0x80U -/** Function prototype for netif init functions. Set up flags and output/linkoutput +/* Function prototype for netif init functions. Set up flags and output/linkoutput * callback functions in this function. * * @param netif The netif to initialize */ typedef err_t (*netif_init_fn)(struct netif *netif); -/** Function prototype for netif->input functions. This function is saved as 'input' +/* Function prototype for netif->input functions. This function is saved as 'input' * callback function in the netif struct. Call it when a packet has been received. * * @param p The received packet, copied into a pbuf * @param inp The netif which received the packet */ typedef err_t (*netif_input_fn)(struct pbuf *p, struct netif *inp); -/** Function prototype for netif->output functions. Called by lwIP when a packet +/* Function prototype for netif->output functions. Called by lwIP when a packet * shall be sent. For ethernet netif, set this to 'etharp_output' and set * 'linkoutput'. * @@ -117,87 +117,87 @@ */ typedef err_t (*netif_output_fn)(struct netif *netif, struct pbuf *p, ip_addr_t *ipaddr); -/** Function prototype for netif->linkoutput functions. Only used for ethernet +/* Function prototype for netif->linkoutput functions. Only used for ethernet * netifs. This function is called by ARP when a packet shall be sent. * * @param netif The netif which shall send a packet * @param p The packet to send (raw ethernet packet) */ typedef err_t (*netif_linkoutput_fn)(struct netif *netif, struct pbuf *p); -/** Function prototype for netif status- or link-callback functions. */ +/* Function prototype for netif status- or link-callback functions. */ typedef void (*netif_status_callback_fn)(struct netif *netif); -/** Function prototype for netif igmp_mac_filter functions */ +/* Function prototype for netif igmp_mac_filter functions */ typedef err_t (*netif_igmp_mac_filter_fn)(struct netif *netif, ip_addr_t *group, u8_t action); -/** Generic data structure used for all lwIP network interfaces. +/* Generic data structure used for all lwIP network interfaces. * The following fields should be filled in by the initialization * function for the device driver: hwaddr_len, hwaddr[], mtu, flags */ struct netif { - /** pointer to next in linked list */ + /* pointer to next in linked list */ struct netif *next; - /** IP address configuration in network byte order */ + /* IP address configuration in network byte order */ ip_addr_t ip_addr; ip_addr_t netmask; ip_addr_t gw; - /** This function is called by the network device driver + /* This function is called by the network device driver * to pass a packet up the TCP/IP stack. */ netif_input_fn input; - /** This function is called by the IP module when it wants + /* This function is called by the IP module when it wants * to send a packet on the interface. This function typically * first resolves the hardware address, then sends the packet. */ netif_output_fn output; - /** This function is called by the ARP module when it wants + /* This function is called by the ARP module when it wants * to send a packet on the interface. This function outputs * the pbuf as-is on the link medium. */ netif_linkoutput_fn linkoutput; #if LWIP_NETIF_STATUS_CALLBACK - /** This function is called when the netif state is set to up or down + /* This function is called when the netif state is set to up or down */ netif_status_callback_fn status_callback; #endif /* LWIP_NETIF_STATUS_CALLBACK */ #if LWIP_NETIF_LINK_CALLBACK - /** This function is called when the netif link is set to up or down + /* This function is called when the netif link is set to up or down */ netif_status_callback_fn link_callback; #endif /* LWIP_NETIF_LINK_CALLBACK */ - /** This field can be set by the device driver and could point + /* This field can be set by the device driver and could point * to state information for the device. */ void *state; #if LWIP_DHCP - /** the DHCP client state information for this netif */ + /* the DHCP client state information for this netif */ struct dhcp *dhcp; #endif /* LWIP_DHCP */ #if LWIP_AUTOIP - /** the AutoIP client state information for this netif */ + /* the AutoIP client state information for this netif */ struct autoip *autoip; #endif #if LWIP_NETIF_HOSTNAME /* the hostname for this netif, NULL is a valid value */ char* hostname; #endif /* LWIP_NETIF_HOSTNAME */ - /** maximum transfer unit (in bytes) */ + /* maximum transfer unit (in bytes) */ u16_t mtu; - /** number of bytes used in hwaddr */ + /* number of bytes used in hwaddr */ u8_t hwaddr_len; - /** link level hardware address of this interface */ + /* link level hardware address of this interface */ u8_t hwaddr[NETIF_MAX_HWADDR_LEN]; - /** flags (see NETIF_FLAG_ above) */ + /* flags (see NETIF_FLAG_ above) */ u8_t flags; - /** descriptive abbreviation */ + /* descriptive abbreviation */ char name[2]; - /** number of this interface */ + /* number of this interface */ u8_t num; #if LWIP_SNMP - /** link type (from "snmp_ifType" enum from snmp.h) */ + /* link type (from "snmp_ifType" enum from snmp.h) */ u8_t link_type; - /** (estimate) link speed */ + /* (estimate) link speed */ u32_t link_speed; - /** timestamp at last change made (up/down) */ + /* timestamp at last change made (up/down) */ u32_t ts; - /** counters */ + /* counters */ u32_t ifinoctets; u32_t ifinucastpkts; u32_t ifinnucastpkts; @@ -208,7 +208,7 @@ u32_t ifoutdiscards; #endif /* LWIP_SNMP */ #if LWIP_IGMP - /** This function could be called to add or delete a entry in the multicast + /* This function could be called to add or delete a entry in the multicast filter table of the ethernet MAC.*/ netif_igmp_mac_filter_fn igmp_mac_filter; #endif /* LWIP_IGMP */ @@ -245,9 +245,9 @@ #endif /* LWIP_SNMP */ -/** The list of network interfaces. */ +/* The list of network interfaces. */ extern struct netif *netif_list; -/** The default network interface. */ +/* The default network interface. */ extern struct netif *netif_default; void netif_init(void); @@ -274,7 +274,7 @@ void netif_set_up(struct netif *netif); void netif_set_down(struct netif *netif); -/** Ask if an interface is up */ +/* Ask if an interface is up */ #define netif_is_up(netif) (((netif)->flags & NETIF_FLAG_UP) ? (u8_t)1 : (u8_t)0) #if LWIP_NETIF_STATUS_CALLBACK @@ -283,7 +283,7 @@ void netif_set_link_up(struct netif *netif); void netif_set_link_down(struct netif *netif); -/** Ask if a link is up */ +/* Ask if a link is up */ #define netif_is_link_up(netif) (((netif)->flags & NETIF_FLAG_LINK_UP) ? (u8_t)1 : (u8_t)0) #if LWIP_NETIF_LINK_CALLBACK
--- a/LPC1768/lwip/include/lwip/pbuf.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/lwip/include/lwip/pbuf.h Fri Aug 06 10:42:05 2010 +0000 @@ -40,7 +40,7 @@ extern "C" { #endif -/** Currently, the pbuf_custom code is only needed for one specific configuration +/* Currently, the pbuf_custom code is only needed for one specific configuration * of IP_FRAG */ #define LWIP_SUPPORT_CUSTOM_PBUF (IP_FRAG && !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF) @@ -62,19 +62,19 @@ } pbuf_type; -/** indicates this packet's data should be immediately passed to the application */ +/* indicates this packet's data should be immediately passed to the application */ #define PBUF_FLAG_PUSH 0x01U -/** indicates this is a custom pbuf: pbuf_free and pbuf_header handle such a +/* indicates this is a custom pbuf: pbuf_free and pbuf_header handle such a a pbuf differently */ #define PBUF_FLAG_IS_CUSTOM 0x02U -/** indicates this pbuf is UDP multicast to be looped back */ +/* indicates this pbuf is UDP multicast to be looped back */ #define PBUF_FLAG_MCASTLOOP 0x04U struct pbuf { - /** next pbuf in singly linked pbuf chain */ + /* next pbuf in singly linked pbuf chain */ struct pbuf *next; - /** pointer to the actual data in the buffer */ + /* pointer to the actual data in the buffer */ void *payload; /** @@ -86,13 +86,13 @@ */ u16_t tot_len; - /** length of this buffer */ + /* length of this buffer */ u16_t len; - /** pbuf_type as u8_t instead of enum to save space */ + /* pbuf_type as u8_t instead of enum to save space */ u8_t /*pbuf_type*/ type; - /** misc flags */ + /* misc flags */ u8_t flags; /** @@ -104,14 +104,14 @@ }; #if LWIP_SUPPORT_CUSTOM_PBUF -/** Prototype for a function to free a custom pbuf */ +/* Prototype for a function to free a custom pbuf */ typedef void (*pbuf_free_custom_fn)(struct pbuf *p); -/** A custom pbuf: like a pbuf, but following a function pointer to free it. */ +/* A custom pbuf: like a pbuf, but following a function pointer to free it. */ struct pbuf_custom { - /** The actual pbuf */ + /* The actual pbuf */ struct pbuf pbuf; - /** This function is called when pbuf_free deallocates this pbuf(_custom) */ + /* This function is called when pbuf_free deallocates this pbuf(_custom) */ pbuf_free_custom_fn custom_free_function; }; #endif /* LWIP_SUPPORT_CUSTOM_PBUF */
--- a/LPC1768/lwip/include/netif/etharp.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/lwip/include/netif/etharp.h Fri Aug 06 10:42:05 2010 +0000 @@ -68,7 +68,7 @@ # include "arch/bpstruct.h" #endif PACK_STRUCT_BEGIN -/** Ethernet header */ +/* Ethernet header */ struct eth_hdr { #if ETH_PAD_SIZE PACK_STRUCT_FIELD(u8_t padding[ETH_PAD_SIZE]); @@ -90,7 +90,7 @@ # include "arch/bpstruct.h" #endif PACK_STRUCT_BEGIN -/** VLAN header inserted between ethernet header and payload +/* VLAN header inserted between ethernet header and payload * if 'type' in ethernet header is ETHTYPE_VLAN. * See IEEE802.Q */ struct eth_vlan_hdr { @@ -111,7 +111,7 @@ # include "arch/bpstruct.h" #endif PACK_STRUCT_BEGIN -/** the ARP message, see RFC 826 ("Packet format") */ +/* the ARP message, see RFC 826 ("Packet format") */ struct etharp_hdr { PACK_STRUCT_FIELD(u16_t hwtype); PACK_STRUCT_FIELD(u16_t proto); @@ -131,7 +131,7 @@ #define SIZEOF_ETHARP_HDR 28 #define SIZEOF_ETHARP_PACKET (SIZEOF_ETH_HDR + SIZEOF_ETHARP_HDR) -/** 5 seconds period */ +/* 5 seconds period */ #define ARP_TMR_INTERVAL 5000 #define ETHTYPE_ARP 0x0806 @@ -140,13 +140,13 @@ #define ETHTYPE_PPPOEDISC 0x8863 /* PPP Over Ethernet Discovery Stage */ #define ETHTYPE_PPPOE 0x8864 /* PPP Over Ethernet Session Stage */ -/** MEMCPY-like macro to copy to/from struct eth_addr's that are local variables +/* MEMCPY-like macro to copy to/from struct eth_addr's that are local variables * or known to be 32-bit aligned within the protocol header. */ #ifndef ETHADDR32_COPY #define ETHADDR32_COPY(src, dst) SMEMCPY(src, dst, ETHARP_HWADDR_LEN) #endif -/** MEMCPY-like macro to copy to/from struct eth_addr's that are no local +/* MEMCPY-like macro to copy to/from struct eth_addr's that are no local * variables and known to be 16-bit aligned within the protocol header. */ #ifndef ETHADDR16_COPY #define ETHADDR16_COPY(src, dst) SMEMCPY(src, dst, ETHARP_HWADDR_LEN) @@ -154,11 +154,11 @@ #if LWIP_ARP /* don't build if not configured for use in lwipopts.h */ -/** ARP message types (opcodes) */ +/* ARP message types (opcodes) */ #define ARP_REQUEST 1 #define ARP_REPLY 2 -/** Define this to 1 and define LWIP_ARP_FILTER_NETIF_FN(pbuf, netif, type) +/* Define this to 1 and define LWIP_ARP_FILTER_NETIF_FN(pbuf, netif, type) * to a filter function that returns the correct netif when using multiple * netifs on one hardware interface where the netif's low-level receive * routine cannot decide for the correct netif (e.g. when mapping multiple @@ -169,7 +169,7 @@ #endif #if ARP_QUEUEING -/** struct for queueing outgoing packets for unknown address +/* struct for queueing outgoing packets for unknown address * defined here to be accessed by memp.h */ struct etharp_q_entry { @@ -185,7 +185,7 @@ err_t etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr); err_t etharp_query(struct netif *netif, ip_addr_t *ipaddr, struct pbuf *q); err_t etharp_request(struct netif *netif, ip_addr_t *ipaddr); -/** For Ethernet network interfaces, we might want to send "gratuitous ARP"; +/* For Ethernet network interfaces, we might want to send "gratuitous ARP"; * this is an ARP packet sent by a node in order to spontaneously cause other * nodes to update an entry in their ARP cache. * From RFC 3220 "IP Mobility Support for IPv4" section 4.6. */ @@ -212,10 +212,10 @@ extern const struct eth_addr ethbroadcast, ethzero; -#endif /* LWIP_ARP || LWIP_ETHERNET */ - #ifdef __cplusplus } #endif +#endif /* LWIP_ARP || LWIP_ETHERNET */ + #endif /* __NETIF_ARP_H__ */
--- a/LPC1768/lwip/lwipopts.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC1768/lwip/lwipopts.h Fri Aug 06 10:42:05 2010 +0000 @@ -53,7 +53,7 @@ #define TUNIF_DEBUG LWIP_DBG_OFF #define UNIXIF_DEBUG LWIP_DBG_OFF #define DELIF_DEBUG LWIP_DBG_OFF -#define SIO_FIFO_DEBUG LWIP_DBG_OFF +#define SIO_FIFO_DEBUG LWIP_DBG_ON #define TCPDUMP_DEBUG LWIP_DBG_ON #define PPP_DEBUG LWIP_DBG_OFF @@ -62,26 +62,27 @@ #define PBUF_DEBUG LWIP_DBG_OFF #define API_LIB_DEBUG LWIP_DBG_OFF #define API_MSG_DEBUG LWIP_DBG_OFF -#define TCPIP_DEBUG LWIP_DBG_ON -#define NETIF_DEBUG LWIP_DBG_ON +#define TCPIP_DEBUG LWIP_DBG_OFF +#define NETIF_DEBUG LWIP_DBG_OFF #define SOCKETS_DEBUG LWIP_DBG_OFF #define DEMO_DEBUG LWIP_DBG_OFF -#define IP_DEBUG LWIP_DBG_ON -#define IP_REASS_DEBUG LWIP_DBG_ON +#define IP_DEBUG LWIP_DBG_OFF +#define IP_REASS_DEBUG LWIP_DBG_OFF #define RAW_DEBUG LWIP_DBG_OFF -#define ICMP_DEBUG LWIP_DBG_ON -#define UDP_DEBUG LWIP_DBG_ON -#define TCP_DEBUG LWIP_DBG_ON -#define TCP_INPUT_DEBUG LWIP_DBG_ON -#define TCP_OUTPUT_DEBUG LWIP_DBG_ON -#define TCP_RTO_DEBUG LWIP_DBG_ON -#define TCP_CWND_DEBUG LWIP_DBG_ON -#define TCP_WND_DEBUG LWIP_DBG_ON -#define TCP_FR_DEBUG LWIP_DBG_ON -#define TCP_QLEN_DEBUG LWIP_DBG_ON -#define TCP_RST_DEBUG LWIP_DBG_ON -#define ETHARP_DEBUG LWIP_DBG_ON -#define DNS_DEBUG LWIP_DBG_ON +#define ICMP_DEBUG LWIP_DBG_OFF +#define IGMP_DEBUG LWIP_DBG_OFF +#define UDP_DEBUG LWIP_DBG_OFF +#define TCP_DEBUG LWIP_DBG_OFF +#define TCP_INPUT_DEBUG LWIP_DBG_OFF +#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF +#define TCP_RTO_DEBUG LWIP_DBG_OFF +#define TCP_CWND_DEBUG LWIP_DBG_OFF +#define TCP_WND_DEBUG LWIP_DBG_OFF +#define TCP_FR_DEBUG LWIP_DBG_OFF +#define TCP_QLEN_DEBUG LWIP_DBG_OFF +#define TCP_RST_DEBUG LWIP_DBG_OFF +#define ETHARP_DEBUG LWIP_DBG_OFF +#define DNS_DEBUG LWIP_DBG_OFF #endif @@ -276,10 +277,10 @@ /* TCP Maximum segment size. */ //#define TCP_MSS 1024 -#define TCP_MSS 1024//0x276//536//0x276 +#define TCP_MSS 536//0x276//536//0x276 /* TCP sender buffer space (bytes). */ -#define TCP_SND_BUF 2048 +#define TCP_SND_BUF (3 * TCP_MSS) /* TCP sender buffer space (pbufs). This must be at least = 2 * TCP_SND_BUF/TCP_MSS for things to work. */ @@ -291,7 +292,7 @@ #define TCP_SNDLOWAT (TCP_SND_BUF/2) /* TCP receive window. */ -#define TCP_WND 1024 //8096 +#define TCP_WND (3 * TCP_MSS) //8096 /* Maximum number of retransmissions of data segments. */ //#define TCP_MAXRTX 12 @@ -325,6 +326,9 @@ /* ---------- ICMP options ---------- */ #define ICMP_TTL 255 +/* ---------- IGMP options ---------- */ +#define LWIP_IGMP (NET_ETH | NET_ZG2100) + /* ---------- DHCP options ---------- */ /* Define LWIP_DHCP to 1 if you want DHCP configuration of interfaces. */
Binary file LPC2368/ZG2100NetIf.ar has changed
--- a/LPC2368/api/DNSRequest.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/api/DNSRequest.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,44 +21,83 @@ THE SOFTWARE. */ +/** \file +DNS Request header file +*/ + #ifndef DNSREQUEST_H #define DNSREQUEST_H -#include "if/net/net.h" +#include "core/net.h" +#include "core/ipaddr.h" +#include "core/host.h" //Essentially it is a safe interface to NetDnsRequest +///DNS Request error codes enum DNSRequestErr { __DNS_MIN = -0xFFFF, - DNS_SETUP, //NetDnsRequest not properly configured - DNS_IF, //If has problems, does not exist or is not initialized - DNS_MEM, //Not enough mem - DNS_INUSE, //If/Port is in use - DNS_PROCESSING, //Req has not completed + DNS_SETUP, ///<DNSRequest not properly configured + DNS_IF, ///<Interface has problems, does not exist or is not initialized + DNS_MEM, ///<Not enough mem + DNS_INUSE, ///<Interface / Port is in use + DNS_PROCESSING, ///<Request has not completed //... - DNS_OK = 0 + DNS_OK = 0 ///<Success }; +///DNS Request Result Events enum DNSReply { DNS_PRTCL, - DNS_NOTFOUND, //Hostname is unknown - DNS_ERROR, //Problem with DNS Service + DNS_NOTFOUND, ///Hostname is unknown + DNS_ERROR, ///Problem with DNS Service //... DNS_FOUND, }; +class NetDnsRequest; +enum NetDnsReply; + +///This is a simple DNS Request class +/** + This class exposes an API to deal with DNS Requests +*/ class DNSRequest { public: + ///Creates a new request DNSRequest(); + + ///Terminates and closes request ~DNSRequest(); + ///Resolves an hostname + /** + @param hostname : hostname to resolve + */ DNSRequestErr resolve(const char* hostname); + + ///Resolves an hostname + /** + @param host : hostname to resolve, the result will be stored in the IpAddr field of this object + */ DNSRequestErr resolve(Host* pHost); + ///Setups callback + /** + The callback function will be called on result. + @param pMethod : callback function + */ + void setOnReply( void (*pMethod)(DNSReply) ); + class CDummy; - void setOnReply( void (*pMethod)(DNSReply) ); + ///Setups callback + /** + The callback function will be called on result. + @param pItem : instance of class on which to execute the callback method + @param pMethod : callback method + */ template<class T> void setOnReply( T* pItem, void (T::*pMethod)(DNSReply) ) { @@ -66,8 +105,13 @@ m_pCbMeth = (void (CDummy::*)(DNSReply)) pMethod; } + ///Gets IP address once it has been resolved + /** + @param pIp : pointer to an IpAddr instance in which to store the resolved IP address + */ DNSRequestErr getResult(IpAddr* pIp); + ///Closes DNS Request before completion DNSRequestErr close(); protected:
--- a/LPC2368/api/TCPSocket.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/api/TCPSocket.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,64 +21,106 @@ THE SOFTWARE. */ +/** \file +TCP Socket header file +*/ + #ifndef TCPSOCKET_H #define TCPSOCKET_H -#include "if/net/net.h" +#include "core/net.h" +#include "core/host.h" //Essentially it is a safe interface to NetTcpSocket +///TCP Socket error codes enum TCPSocketErr { __TCPSOCKET_MIN = -0xFFFF, - TCPSOCKET_SETUP, //NetTcpSocket not properly configured - TCPSOCKET_TIMEOUT, - TCPSOCKET_IF, //If has problems, does not exist or is not initialized - TCPSOCKET_MEM, //Not enough mem - TCPSOCKET_INUSE, //If/Port is in use - TCPSOCKET_EMPTY, //Connections queue is empty - TCPSOCKET_RST, // Connection was reset by remote host + TCPSOCKET_SETUP, ///<TCPSocket not properly configured + TCPSOCKET_TIMEOUT, ///<Connection timed out + TCPSOCKET_IF, ///<Interface has problems, does not exist or is not initialized + TCPSOCKET_MEM, ///<Not enough mem + TCPSOCKET_INUSE, ///<Interface / Port is in use + TCPSOCKET_EMPTY, ///<Connections queue is empty + TCPSOCKET_RST, ///<Connection was reset by remote host //... - TCPSOCKET_OK = 0 + TCPSOCKET_OK = 0 ///<Success }; +///TCP Socket Events enum TCPSocketEvent { - TCPSOCKET_CONNECTED, //Connected to host, must call accept() if we were listening - TCPSOCKET_ACCEPT, //Connected to client - TCPSOCKET_READABLE, //Data in buf - TCPSOCKET_WRITEABLE, //Can write data to buf - TCPSOCKET_CONTIMEOUT, - TCPSOCKET_CONRST, - TCPSOCKET_CONABRT, - TCPSOCKET_ERROR, - TCPSOCKET_DISCONNECTED + TCPSOCKET_CONNECTED, ///<Connected to host + TCPSOCKET_ACCEPT, ///<Client is connected, must call accept() to get a new Socket + TCPSOCKET_READABLE, ///<Data in buf + TCPSOCKET_WRITEABLE, ///<Can write data to buf + TCPSOCKET_CONTIMEOUT, ///<Connection timed out + TCPSOCKET_CONRST, ///<Connection was reset by remote host + TCPSOCKET_CONABRT, ///<Connection was aborted + TCPSOCKET_ERROR, ///<Unknown error + TCPSOCKET_DISCONNECTED ///<Disconnected }; +class NetTcpSocket; +enum NetTcpSocketEvent; +///This is a simple TCP Socket class +/** + This class exposes an API to deal with TCP Sockets +*/ class TCPSocket { public: + ///Creates a new socket TCPSocket(); protected: TCPSocket(NetTcpSocket* pNetTcpSocket); public: + ///Closes if needed and destroys the socket ~TCPSocket(); //close() + ///Binds the socket to (local) host TCPSocketErr bind(const Host& me); + + ///Starts listening TCPSocketErr listen(); + + ///Connects socket to host TCPSocketErr connect(const Host& host); + + ///Accepts connection from client and gets connected socket TCPSocketErr accept(Host* pClient, TCPSocket** ppNewTcpSocket); + ///Sends data + /* + @return a negative error code or the number of bytes transmitted + */ int /*if < 0 : TCPSocketErr*/ send(const char* buf, int len); + + ///Receives data + /* + @return a negative error code or the number of bytes received + */ int /*if < 0 : TCPSocketErr*/ recv(char* buf, int len); /* TODO NTH : printf / scanf helpers that call send/recv */ + ///Closes socket TCPSocketErr close(); + //Callbacks + ///Setups callback + /** + @param pMethod : callback function + */ + void setOnEvent( void (*pMethod)(TCPSocketEvent) ); + class CDummy; - //Callbacks - void setOnEvent( void (*pMethod)(TCPSocketEvent) ); + ///Setups callback + /** + @param pItem : instance of class on which to execute the callback method + @param pMethod : callback method + */ template<class T> void setOnEvent( T* pItem, void (T::*pMethod)(TCPSocketEvent) ) { @@ -86,7 +128,8 @@ m_pCbMeth = (void (CDummy::*)(TCPSocketEvent)) pMethod; } - void resetOnEvent(); //Disable callback + ///Disables callback + void resetOnEvent(); protected: void onNetTcpSocketEvent(NetTcpSocketEvent e);
--- a/LPC2368/api/UDPSocket.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/api/UDPSocket.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,47 +21,86 @@ THE SOFTWARE. */ +/** \file +UDP Socket header file +*/ + #ifndef UDPSOCKET_H #define UDPSOCKET_H -#include "if/net/net.h" +#include "core/net.h" +#include "core/host.h" //Essentially it is a safe interface to NetUdpSocket +///UDP Socket error codes enum UDPSocketErr { __UDPSOCKET_MIN = -0xFFFF, - UDPSOCKET_SETUP, //NetUdpSocket not properly configured - UDPSOCKET_IF, //If has problems, does not exist or is not initialized - UDPSOCKET_MEM, //Not enough mem - UDPSOCKET_INUSE, //If/Port is in use + UDPSOCKET_SETUP, ///<UDPSocket not properly configured + UDPSOCKET_IF, ///<Interface has problems, does not exist or is not initialized + UDPSOCKET_MEM, ///<Not enough mem + UDPSOCKET_INUSE, ///<Interface / Port is in use //... - UDPSOCKET_OK = 0 + UDPSOCKET_OK = 0 ///<Success }; -enum UDPSocketEvent //Only one lonely event here... but who knows, maybe some day there'll be another one! +///UDP Socket Event(s) +enum UDPSocketEvent //Only one event here for now, but keeps that model in case we need to implement some others { - UDPSOCKET_READABLE, //Data in buf + UDPSOCKET_READABLE, ///<Data in buf }; +class NetUdpSocket; +enum NetUdpSocketEvent; +///This is a simple UDP Socket class +/** + This class exposes an API to deal with UDP Sockets +*/ class UDPSocket { public: + ///Creates a new socket UDPSocket(); + + ///Closes and destroys socket ~UDPSocket(); //close() + ///Binds the socket to local host or a multicast address UDPSocketErr bind(const Host& me); + ///Sends data + /* + @param pHost : host to send data to + @return a negative error code or the number of bytes transmitted + */ int /*if < 0 : UDPSocketErr*/ sendto(const char* buf, int len, Host* pHost); + + ///Receives data + /* + @param pHost : host from which this piece of data comes from + @return a negative error code or the number of bytes received + */ int /*if < 0 : UDPSocketErr*/ recvfrom(char* buf, int len, Host* pHost); /* TODO NTH : printf / scanf helpers that call send/recv */ + ///Closes socket UDPSocketErr close(); + //Callbacks + ///Setups callback + /** + @param pMethod : callback function + */ + void setOnEvent( void (*pMethod)(UDPSocketEvent) ); + class CDummy; - //Callbacks - void setOnEvent( void (*pMethod)(UDPSocketEvent) ); + ///Setups callback + /** + @param pItem : instance of class on which to execute the callback method + @param pMethod : callback method + */ template<class T> void setOnEvent( T* pItem, void (T::*pMethod)(UDPSocketEvent) ) { @@ -69,7 +108,8 @@ m_pCbMeth = (void (CDummy::*)(UDPSocketEvent)) pMethod; } - void resetOnEvent(); //Disable callback + ///Disables callback + void resetOnEvent(); protected: void onNetUdpSocketEvent(NetUdpSocketEvent e);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LPC2368/core/host.h Fri Aug 06 10:42:05 2010 +0000 @@ -0,0 +1,109 @@ + +/* +Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#ifndef HOST_H +#define HOST_H + +#include "ipaddr.h" +#include <string.h> + +///Host information container +/** +This class is a container for data relative to a connection: +- IP Address +- Port number +- Host Name +*/ +class Host +{ +public: + ///Initiliazes host with null values + Host() : m_ip(0,0,0,0), m_port(0), m_name(NULL) + { + + } + + ///Initializes host + Host(const IpAddr& ip, const int& port, const char* name="" ) : m_ip(ip), m_port(port), m_name(NULL) + { + setName(name); + } + + ~Host() + { + if(m_name) + { + delete[] m_name; + } + } + + ///Returns IP address + const IpAddr& getIp() const + { + return m_ip; + } + + ///Returns port number + const int& getPort() const + { + return m_port; + } + + ///Returns host name + const char* getName() const + { + return m_name; + } + + ///Sets IP address + void setIp(const IpAddr& ip) + { + m_ip = ip; + } + + ///Sets port number + void setPort(int port) + { + m_port = port; + } + + ///Sets host name + void setName(const char* name) + { + if(m_name) + delete[] m_name; + int len = strlen(name); + if(len) + { + m_name = new char[len+1]; + strcpy(m_name, name); + } + } + +private: + IpAddr m_ip; + int m_port; + char* m_name; +}; + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LPC2368/core/ipaddr.h Fri Aug 06 10:42:05 2010 +0000 @@ -0,0 +1,98 @@ + +/* +Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#ifndef IPADDR_H +#define IPADDR_H + +#include "netCfg.h" +#if NET_LWIP_STACK +typedef struct ip_addr ip_addr_t; +#endif + +#include "stdint.h" + +///IP Address container +/** +This class is a container for an IPv4 address. +*/ +class IpAddr //Basically a C++ frontend to ip_addr_t +{ +public: + #if NET_LWIP_STACK + IpAddr(ip_addr_t* pIp); + #endif + + ///Initializes IP address with provided values + IpAddr(uint8_t ip0, uint8_t ip1, uint8_t ip2, uint8_t ip3); + + ///Initializes IP address with null values + IpAddr(); + + #if NET_LWIP_STACK + ip_addr_t getStruct() const; + #endif + + ///Returns IP address byte # + uint8_t operator[](unsigned int i) const; + + ///Compares too addresses + /** + @return true if the two addresses are equal + */ + bool isEq(const IpAddr& b) const; + + ///Compares too addresses + /** + @return true if the two addresses are equal + */ + bool operator==(const IpAddr& b) const; + + ///Compares too addresses + /** + @return true if the two addresses are different + */ + bool operator!=(const IpAddr& b) const; + + ///Checks whether the address is null + /** + @return true if the address is null + */ + bool isNull() const; + + ///Checks whether the address is a broadcast address + /** + @return true if the address is a broadcast address + */ + bool isBroadcast() const; + + ///Checks whether the address is a multicast address + /** + @return true if the address is a multicast address + */ + bool isMulticast() const; + +private: + uint8_t m_ip[4]; +}; + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LPC2368/core/net.h Fri Aug 06 10:42:05 2010 +0000 @@ -0,0 +1,101 @@ + +/* +Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#ifndef NET_H +#define NET_H + +class NetIf; +class NetTcpSocket; +class NetUdpSocket; +class NetDnsRequest; + +#include <list> +using std::list; + +/* +#include "host.h" +#include "ipaddr.h" +#include "netservice.h" +#include "if/net/netif.h" +#include "if/net/nettcpsocket.h" +#include "if/net/netudpsocket.h" +#include "if/net/netdnsrequest.h" +*/ + +class Host; +class NetIf; +class NetTcpSocket; +class NetUdpSocket; +class NetDnsRequest; + +class Net +{ +private: + Net(); + ~Net(); +public: + static void poll(); //Poll every if & socket + + static NetTcpSocket* tcpSocket(NetIf& netif); + static NetTcpSocket* tcpSocket(); //Socket on default if + static void releaseTcpSocket(NetTcpSocket* pNetTcpSocket); + + static NetUdpSocket* udpSocket(NetIf& netif); + static NetUdpSocket* udpSocket(); //Socket on default if + static void releaseUdpSocket(NetUdpSocket* pNetUdpSocket); + + static NetDnsRequest* dnsRequest(const char* hostname, NetIf& netif); + static NetDnsRequest* dnsRequest(const char* hostname); //Create a new NetDnsRequest object from default if + + static NetDnsRequest* dnsRequest(Host* pHost, NetIf& netif); + static NetDnsRequest* dnsRequest(Host* pHost); //Create a new NetDnsRequest object from default if + + static void setDefaultIf(NetIf& netif); //Deprecated + static void setDefaultIf(NetIf* pIf); + static NetIf* getDefaultIf(); + +protected: + friend class NetIf; + friend class NetTcpSocket; + friend class NetUdpSocket; + + static void registerIf(NetIf* pIf); + static void unregisterIf(NetIf* pIf); + + static void registerNetTcpSocket(NetTcpSocket* pNetTcpSocket); + static void unregisterNetTcpSocket(NetTcpSocket* pNetTcpSocket); + + static void registerNetUdpSocket(NetUdpSocket* pNetUdpSocket); + static void unregisterNetUdpSocket(NetUdpSocket* pNetUdpSocket); + +private: + static Net& net(); //Return inst of singleton + + NetIf* m_defaultIf; + + list<NetIf*> m_lpIf; + list<NetTcpSocket*> m_lpNetTcpSocket; + list<NetUdpSocket*> m_lpNetUdpSocket; +}; + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LPC2368/core/netservice.h Fri Aug 06 10:42:05 2010 +0000 @@ -0,0 +1,67 @@ + +/* +Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +/** +\file Net Service base class header file +*/ + +#ifndef NETSERVICE_H +#define NETSERVICE_H + +#include <list> +using std::list; + +///Net Service base class +/** +Each connection-oriented object can register as service (by inheriting this class), so that it is polled regularly. +It notifies the pool when the connection is terminated so that it can be destroyed. +*/ +class NetService +{ +public: + ///Instantiates a new service + /** + @param owned If true the object is owned by the pool and will be destroyed on closure. + */ + NetService(bool owned = true); //Is owned by the pool? + virtual ~NetService(); + + ///This method can be inherited so that it is called on each @a Net::poll() call. + virtual void poll(); + + static void servicesPoll(); //Poll all registered services & destroy closed ones + +protected: + ///This flags the service as to be destructed if owned by the pool. + void close(); + +private: + bool m_closed; + bool m_removed; + bool m_owned; + + static list<NetService*>& lpServices(); //Helper to prevent static initialization fiasco + +}; + +#endif
--- a/LPC2368/dbg/dbg.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/dbg/dbg.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,6 +21,10 @@ THE SOFTWARE. */ +/** \file +Debugging helpers header file +*/ + //#ifdef DBG_H //#define DBG_H @@ -28,6 +32,11 @@ #define __DEBUG #endif +/*! + \def __DEBUG + To define to enable debugging in one file +*/ + #ifdef __DEBUG #ifndef __DEBUGSTREAM @@ -47,9 +56,15 @@ #undef DBG #undef DBG_END #undef BREAK + +///Debug output (if enabled), same syntax as printf, with heading info #define DBG(...) do{ DebugStream::debug("[%s:%s@%d] ", __FILE__, __FUNCTION__, __LINE__); DebugStream::debug(__VA_ARGS__); } while(0); + +///Debug output (if enabled), same syntax as printf, no heading info #define DBGL(...) do{ DebugStream::debug(__VA_ARGS__); } while(0); #define DBG_END DebugStream::release + +///Break point usin serial debug interface (if debug enbaled) #define BREAK() DebugStream::breakPoint(__FILE__, __LINE__) #endif
--- a/LPC2368/drv/zg2100/zg_com.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/drv/zg2100/zg_com.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,7 +21,10 @@ THE SOFTWARE. */ -//ZG2100 Low-level communication functions (SPI, CS, Interrupt) +/** +@file +ZG2100 Low-level communication functions (SPI, CS, Interrupt) +*/ //Donatien Garnier 2010 #ifndef ZG_COM_H @@ -44,41 +47,46 @@ class DigitalOut; class InterruptIn; */ +///Opens SPI interface with pins void zg_com_init(SPI* pSpi, DigitalOut* pCs, /*InterruptIn*/ DigitalIn* pInt, DigitalOut* pNrst); //Registers Access - +///Reads register uint32_t zg_register_read(uint32_t addr); +///Writes register void zg_register_write(uint32_t addr, uint32_t reg); //Indexed Registers Access - +///Reads indexed register uint32_t zg_indexed_register_read(uint32_t addr); +///writes indexed register void zg_indexed_register_write(uint32_t addr, uint32_t reg); //Fifos - +///Reads FIFO void zg_fifo_read( byte fifo, byte* pType, byte* pSubtype, byte* buf, int len ); +///Writes FIFO (can be chunked) void zg_fifo_write( byte fifo, byte type, byte subtype, byte* buf, int len, bool start = true, bool stop = true ); //Write by chunks //Spi +///SPI transfers directions typedef enum __ZG_SPI_DIR { - ZG_SPI_READ, - ZG_SPI_WRITE, - ZG_SPI_TRF //Read & Write + ZG_SPI_READ, ///Read + ZG_SPI_WRITE, ///Write + ZG_SPI_TRF ///Read & Write } ZG_SPI_DIR; - +///Transfers SPI frame void zg_spi_trf(byte* buf, int len, bool resetCs = true, ZG_SPI_DIR dir = ZG_SPI_TRF); +///Is there an interrupt to serve? bool zg_is_int(); - //Callbacks, must be implemented in zg_drv.c void zg_on_int(); //On data available interrupt
--- a/LPC2368/drv/zg2100/zg_defs.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/drv/zg2100/zg_defs.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,14 +21,15 @@ THE SOFTWARE. */ -//ZG2100 Low-level driver definitions +/** +@file +ZG2100 Low-level driver definitions +*/ //Donatien Garnier 2010 #ifndef ZG_DEFS_H #define ZG_DEFS_H -#include "zg_err.h" //Error codes - /* Parameters */ #define ZG_HEAD_BUF_SIZE 64//16 @@ -188,6 +189,21 @@ #define ZG_INT_MASK_F0 0x40 #define ZG_INT_MASK_F1 0x80 +/* Internal Error Codes */ + +typedef enum __ZG_INT_ERR +{ + ZG_INT_OK = 1, + ZG_INT_RESOURCES = 12, //Not enough resources + ZG_INT_TIMEOUT, + ZG_INT_FRAME_ERROR, + ZG_INT_AUTH_REFUSED, + ZG_INT_ASSOC_REFUSED, + ZG_INT_IN_PROGRESS, + ZG_INT_SUPPLICANT_FAILED = 21 + +} ZG_INT_ERR; + /* F0 / F1 helpers */ #define ZG_REG_F_CTRL0(n) ((n==0)?ZG_REG_F0_CTRL0:ZG_REG_F1_CTRL0) #define ZG_REG_F_CTRL1(n) ((n==0)?ZG_REG_F0_CTRL1:ZG_REG_F1_CTRL1) @@ -236,11 +252,12 @@ byte revision; } ZG_SYSV; +///BSS types typedef enum __ZG_BSS_TYPE { - ZG_BSS_INFRA = 1, - ZG_BSS_ADHOC = 2, - ZG_BSS_ANY = 3 + ZG_BSS_INFRA = 1, ///< Infrastructure + ZG_BSS_ADHOC = 2, ///< Ad-Hoc + ZG_BSS_ANY = 3 ///< Either } ZG_BSS_TYPE; typedef enum __ZG_PROBE_TYPE @@ -333,13 +350,14 @@ byte key[ZG_PMK_LEN]; //PSK key returned } ZG_PMK_REQ; +///Security type typedef enum __ZG_SECURITY { - ZG_SECURITY_NONE = 0x00, - ZG_SECURITY_WEP = 0x01, - ZG_SECURITY_WPA = 0x02, - ZG_SECURITY_WPA2 = 0x03, - ZG_SECURITY_TRY = 0xFF + ZG_SECURITY_NONE = 0x00, ///< None + ZG_SECURITY_WEP = 0x01, ///< WEP + ZG_SECURITY_WPA = 0x02, ///< WPA + ZG_SECURITY_WPA2 = 0x03, ///< WPA2 + ZG_SECURITY_TRY = 0xFF ///< Try all (not recommanded) } ZG_SECURITY; typedef __packed struct __ZG_CONNECT_REQ
--- a/LPC2368/drv/zg2100/zg_drv.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/drv/zg2100/zg_drv.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,21 +21,27 @@ THE SOFTWARE. */ -//ZG2100 Low-level driver +/** +@file +ZG2100 Low-level driver +*/ //Donatien Garnier 2010 #ifndef ZG_DRV_H #define ZG_DRV_H #include "zg_defs.h" +#include "zg_err.h" +//Stores relevant data typedef struct _ZG_DATA { byte mac_addr[6]; ZG_SYSV sys_version; - + } ZG_DATA; +//Stores which data is actually available typedef struct _ZG_DATA_MASK { bool mac_addr; @@ -49,34 +55,53 @@ extern ZG_DATA_MASK zg_data_mask; //Flags valid data //Spi intf, Chip Select pin, Interrupt pin +///Initializes driver (zg_com_init must be called before). zg_err zg_drv_init(); +//FIXME: Not implemented, not used (to be deleted?) void zg_on_data_attach( void (*on_data)() ); +///Must be called regularly to process interrupts. void zg_process(); //Must be called regularly by user +///Processes interrupt. (Called by zg_process if needed) void zg_int_process(); //Process interrupt +///Can a management request be sent? bool zg_mgmt_is_busy(); +///Sends management request void zg_mgmt_req(byte subtype, byte* buf, int len, bool close = true); + +///Writes additional management data void zg_mgmt_data(byte* buf, int len, bool close = true); +///Gets parameter void zg_mgmt_get_param(byte param); + +///Sets parameter void zg_mgmt_set_param(byte param, byte* buf, int len); +///Called on management request result void zg_on_mgmt_avl(byte subtype, byte* buf, int len); //Data is available + +///Called on management event void zg_on_mgmt_evt(byte subtype, byte* buf, int len); //Management event +///Called when get parameter request completes void zg_on_mgmt_get_param(byte* buf, int len); //Get param completed //uint32_t zg_fifo_room(); //Useful to be split in several function because Lwip stores buffers in chunks +///Sends Data (start) void zg_send_start(); +///Sends Data (main) void zg_send(byte* buf, int len); +///Sends Data (end) void zg_send_end(); +///Can more data be sent? bool zg_send_is_busy(); //Callbacks implemented in zg_if @@ -85,6 +110,7 @@ void zg_on_connect(zg_err result); //Handled by zg_net +///Data received void zg_on_input(byte* buf, int len); //Callbacks from zg_com
--- a/LPC2368/drv/zg2100/zg_err.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/drv/zg2100/zg_err.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,23 +21,33 @@ THE SOFTWARE. */ -//ZG2100 Low-level driver definitions +/** +@file +ZG2100 driver errors +*/ //Donatien Garnier 2010 #ifndef ZG_ERR_H #define ZG_ERR_H +#include "zg_defs.h" + +///ZG2100 Wi-Fi Module driver error codes typedef enum __zg_err { - ZG_OK = 1, - ZG_RESOURCES = 12, //Not enough resources - ZG_TIMEOUT, - ZG_FRAME_ERROR, - ZG_AUTH_REFUSED, - ZG_ASSOC_REFUSED, - ZG_IN_PROGRESS, - ZG_SUPPLICANT_FAILED = 21 + __ZG_MIN = -0xFFFF, + ZG_RESOURCES, ///< Not enough resources + ZG_TIMEOUT, ///< Timeout + ZG_FRAME_ERROR, ///< Framing error + ZG_AUTH_REFUSED, ///< Authentication refused + ZG_ASSOC_REFUSED, ///< Association refused + ZG_IN_PROGRESS, ///< Command is being processed + ZG_SUPPLICANT_FAILED, ///< Error with WPA-handling + ZG_UNKNOWN, ///< Unknown error + ZG_OK = 0 ///< Success } zg_err; +zg_err zg_errcode(ZG_INT_ERR int_err); //Errcodes conversion + #endif
--- a/LPC2368/drv/zg2100/zg_if.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/drv/zg2100/zg_if.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,7 +21,10 @@ THE SOFTWARE. */ -//ZG2100 NetServices high-level interface : configuration & setup +/** +@file +ZG2100 NetServices high-level interface : configuration & setup +*/ //Donatien Garnier 2010 #ifndef ZG_IF_H @@ -29,26 +32,37 @@ #include "zg_defs.h" +///Scans for available networks on given \a channel. void zg_scan(byte channel); +///Will be called on scan completion, for now it is just a debug dump. void zg_on_scan_results(byte* buf, int len); +///Sets the SSID of the network to be joined. void zg_set_ssid(const char* ssid); +///Sets WEP key. void zg_set_wep_key(const byte* key, int len); +///Sets WPA passphrase (will compute PSK key and set it). void zg_set_wpa_pass(const char* pass); +///On completion of the passphrase computation. void zg_on_psk_key(byte* buf, int len); +///Sets PSK key (preferred to be called directly than recomputing it every time using \a zg_set_wpa_pass). void zg_set_psk_key(const byte* key, int len); +///Connects to network. void zg_connect(ZG_BSS_TYPE type, ZG_SECURITY security); +///On connection result. void zg_on_connect(zg_err result); +///Gets connection result. zg_err zg_get_connection_result(); +///Disconnects from network. void zg_disconnect(); void hexdump(byte* buffer, int size);
--- a/LPC2368/drv/zg2100/zg_net.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/drv/zg2100/zg_net.h Fri Aug 06 10:42:05 2010 +0000 @@ -21,7 +21,10 @@ THE SOFTWARE. */ -//ZG2100 Lwip Driver +/** +@file +ZG2100 LwIP Driver +*/ //Donatien Garnier 2010 #ifndef ZG_NET_H @@ -32,12 +35,14 @@ typedef signed char err_t; //To be called by Lwip -static err_t zg_output(struct netif *netif, struct pbuf *p); //Transfer an ethernet frame : convert into ZG frame & TX it +///Transfers an ethernet frame: converts into ZG frame & TXs it +static err_t zg_output(struct netif *netif, struct pbuf *p); //Callback from zg_drv -void zg_on_input(byte* buf, int len); //On reception of a ZG frame : convert into Eth frame & feed lwip +///On reception of a ZG frame: converts into Eth frame & feeds lwip +void zg_on_input(byte* buf, int len); - +///Initializes network interface err_t zg_net_init(struct netif *netif); #endif
--- a/LPC2368/if/lwip/LwipNetIf.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/if/lwip/LwipNetIf.h Fri Aug 06 10:42:05 2010 +0000 @@ -28,10 +28,13 @@ #include "mbed.h" #define NET_LWIP_STACK 1 -#include "if/net/net.h" +#include "core/net.h" +#include "if/net/netif.h" +/* #include "lwipNetTcpSocket.h" #include "lwipNetUdpSocket.h" #include "lwipNetDnsRequest.h" +*/ class LwipNetIf : public NetIf {
--- a/LPC2368/if/lwip/lwipNetTcpSocket.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/if/lwip/lwipNetTcpSocket.h Fri Aug 06 10:42:05 2010 +0000 @@ -25,16 +25,18 @@ #define LWIPNETTCPSOCKET_H #define NET_LWIP_STACK 1 -#include "lwip/ip_addr.h" -#include "if/net/net.h" +#include "if/net/nettcpsocket.h" #include "LwipNetIf.h" +#include "stdint.h" + //Implements NetTcpSockets over lwIP raw API struct tcp_pcb; //Represents a Tcp Connection, "Protocol Control Block", see rawapi.txt & tcp.h struct pbuf; //Lwip Buffer Container typedef signed char err_t; +typedef uint16_t u16_t; class LwipNetTcpSocket: public NetTcpSocket {
--- a/LPC2368/if/lwip/lwipNetUdpSocket.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/if/lwip/lwipNetUdpSocket.h Fri Aug 06 10:42:05 2010 +0000 @@ -25,10 +25,12 @@ #define LWIPNETUDPSOCKET_H #define NET_LWIP_STACK 1 -#include "lwip/ip_addr.h" -#include "if/net/net.h" +//#include "lwip/ip_addr.h" +#include "if/net/netudpsocket.h" #include "LwipNetIf.h" +#include "stdint.h" + #include <list> using std::list; @@ -36,8 +38,10 @@ struct udp_pcb; //Represents a Udp Connection, "Protocol Control Block", see rawapi.txt & udp.h struct pbuf; //Lwip Buffer Container +typedef struct ip_addr ip_addr_t; -typedef signed char err_t; +//typedef signed char err_t; +typedef uint16_t u16_t; class LwipNetUdpSocket: public NetUdpSocket { @@ -70,6 +74,7 @@ }; list<InPacket> m_lInPkt; + IpAddr m_multicastGroup; //Static callback : Transforms into a C++ callback static void sRecvCb(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port);
--- a/LPC2368/if/net/host.h Thu Jul 22 11:31:59 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ - -/* -Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef HOST_H -#define HOST_H - -class NetDnsRequest; - -#include "ipaddr.h" -#include "netdnsrequest.h" -#include <string.h> - -class Host -{ -public: - Host() : m_ip(0,0,0,0), m_port(0), m_name(NULL) - { - - } - Host(const IpAddr& ip, const int& port, const char* name="" ) : m_ip(ip), m_port(port), m_name(NULL) - { - setName(name); - } - - ~Host() - { - if(m_name) - { - delete[] m_name; - } - } - - const IpAddr& getIp() const - { - return m_ip; - } - - const int& getPort() const - { - return m_port; - } - - const char* getName() const - { - return m_name; - } - - void setIp(const IpAddr& ip) - { - m_ip = ip; - } - - void setPort(int port) - { - m_port = port; - } - - void setName(const char* name) - { - if(m_name) - delete[] m_name; - int len = strlen(name); - if(len) - { - m_name = new char[len+1]; - strcpy(m_name, name); - } - } - -private: - friend class NetDnsRequest; - IpAddr m_ip; - int m_port; - char* m_name; -}; - -#endif
--- a/LPC2368/if/net/ipaddr.h Thu Jul 22 11:31:59 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,108 +0,0 @@ - -/* -Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef IPADDR_H -#define IPADDR_H - -#include "mbed.h" - -#include "netCfg.h" -#if NET_LWIP_STACK -#include "lwip/ip_addr.h" - -#ifdef __LWIP_DEBUG -#undef __LWIP_DEBUG -#endif -#endif - -class IpAddr; - -class IpAddr //Basically a C++ frontend to ip_addr_t -{ -public: - #if NET_LWIP_STACK - IpAddr(ip_addr_t* pIp) - { - *((uint32_t*)m_ip) = pIp->addr; - } - #endif - - IpAddr(uint8_t ip0, uint8_t ip1, uint8_t ip2, uint8_t ip3) - { - //We are in LE - m_ip[0] = ip0; - m_ip[1] = ip1; - m_ip[2] = ip2; - m_ip[3] = ip3; - } - - IpAddr() - { - m_ip[0] = 0; - m_ip[1] = 0; - m_ip[2] = 0; - m_ip[3] = 0; - } - - #if NET_LWIP_STACK - ip_addr_t getStruct() const - { - ip_addr_t ip_struct; - ip_struct.addr = *((uint32_t*)m_ip); - return ip_struct; - } - #endif - - uint8_t operator[](unsigned int i) const - { - uint8_t null = 0; - if( i > 3 ) - return null; - return m_ip[i]; - } - - bool isEq(const IpAddr& b) const - { - return (*((uint32_t*)m_ip) == *((uint32_t*)(b.m_ip))); - } - - bool operator==(const IpAddr& b) const - { - return isEq(b); - } - - bool operator!=(const IpAddr& b) const - { - return !(operator==(b)); - } - - bool isNull() const - { - return (*((uint32_t*)m_ip) == 0); - } - -private: - uint8_t m_ip[4]; -}; - -#endif
--- a/LPC2368/if/net/net.h Thu Jul 22 11:31:59 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ - -/* -Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef NET_H -#define NET_H - -class NetIf; -class NetTcpSocket; -class NetUdpSocket; -class NetDnsRequest; - -#include <list> -using std::list; - -#include "host.h" -#include "ipaddr.h" -#include "netif.h" -#include "nettcpsocket.h" -#include "netudpsocket.h" -#include "netservice.h" -#include "netdnsrequest.h" - -class Net -{ -private: - Net(); - ~Net(); -public: - static void poll(); //Poll every if & socket - - static NetTcpSocket* tcpSocket(NetIf& netif); - static NetTcpSocket* tcpSocket(); //Socket on default if - static void releaseTcpSocket(NetTcpSocket* pNetTcpSocket); - - static NetUdpSocket* udpSocket(NetIf& netif); - static NetUdpSocket* udpSocket(); //Socket on default if - static void releaseUdpSocket(NetUdpSocket* pNetUdpSocket); - - static NetDnsRequest* dnsRequest(const char* hostname, NetIf& netif); - static NetDnsRequest* dnsRequest(const char* hostname); //Create a new NetDnsRequest object from default if - - static NetDnsRequest* dnsRequest(Host* pHost, NetIf& netif); - static NetDnsRequest* dnsRequest(Host* pHost); //Create a new NetDnsRequest object from default if - - static void setDefaultIf(NetIf& netif); //Deprecated - static void setDefaultIf(NetIf* pIf); - static NetIf* getDefaultIf(); - - //TODO: Factory functions like 'setupEthernet', 'setupPPP', 'setupTelit' ... - #if 0 - enum NetErr //Generic errors - { - __NET_MIN = -0xFFFF; - NET_OPEN, //Could not open if - NET_CONNECT, //Could not connect - NET_AUTH, //Could not auth - NET_HW, //HW problem - - NET_OK = 0 - }; - - static NetErr Ethernet(); - static NetErr PPPoverSerial(int Tx, int Rx, const char* apn, const char* user, const char* password); - static NetErr Telit(int pwrSetPin, int pwrMonPin, int Tx, int Rx); - #endif - -protected: - friend class NetIf; - friend class NetTcpSocket; - friend class NetUdpSocket; - - static void registerIf(NetIf* pIf); - static void unregisterIf(NetIf* pIf); - - static void registerNetTcpSocket(NetTcpSocket* pNetTcpSocket); - static void unregisterNetTcpSocket(NetTcpSocket* pNetTcpSocket); - - static void registerNetUdpSocket(NetUdpSocket* pNetUdpSocket); - static void unregisterNetUdpSocket(NetUdpSocket* pNetUdpSocket); - -private: - static Net& net(); //Return inst of singleton - - NetIf* m_defaultIf; - - list<NetIf*> m_lpIf; - list<NetTcpSocket*> m_lpNetTcpSocket; - list<NetUdpSocket*> m_lpNetUdpSocket; -}; - -#endif
--- a/LPC2368/if/net/netif.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/if/net/netif.h Fri Aug 06 10:42:05 2010 +0000 @@ -24,10 +24,15 @@ #ifndef NETIF_H #define NETIF_H -#include "ipaddr.h" +#include "core/ipaddr.h" +/* #include "nettcpsocket.h" #include "netudpsocket.h" #include "netdnsrequest.h" +*/ +class NetTcpSocket; +class NetUdpSocket; +class NetDnsRequest; #if 0 enum NetifEvent @@ -48,6 +53,8 @@ virtual void poll() = 0; virtual NetDnsRequest* dnsRequest(const char* hostname) = 0; //Create a new NetDnsRequest object virtual NetDnsRequest* dnsRequest(Host* pHost) = 0; //Create a new NetDnsRequest object + + //!Returns the IP of the interface once it's connected IpAddr getIp() const; protected:
--- a/LPC2368/if/net/netservice.h Thu Jul 22 11:31:59 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ - -/* -Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef NETSERVICE_H -#define NETSERVICE_H - -//class NetDnsRequest; -//#include "net.h" - -//Each connection-oriented object can register as service (by inheriting this class), so that it is polled regularly -//It notifies the pool when the connection is terminated so that it can be destroyed - -#include <list> -using std::list; - -class NetService -{ -public: - NetService(bool owned = true); //Is owned by the pool? - virtual ~NetService(); - - virtual void poll(); - - static void servicesPoll(); //Poll all registered services & destroy closed ones - -protected: - void close(); - -private: - bool m_closed; - bool m_removed; - bool m_owned; - - static list<NetService*>& lpServices(); //Helper to prevent static initialization fiasco - -}; - -#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LPC2368/if/zg2100/ZG2100NetIf.h Fri Aug 06 10:42:05 2010 +0000 @@ -0,0 +1,117 @@ + +/* +Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +/** \file +ZG2100 Wi-Fi Module network interface header file +*/ + +#ifndef ZG2100NETIF_H +#define ZG2100NETIF_H + +struct netif; + +#include "mbed.h" + +#include "if/lwip/LwipNetIf.h" +#include "core/net.h" + +#include "drv/zg2100/zg_defs.h" +#include "drv/zg2100/zg_err.h" + +///ZG2100 Wi-Fi Module network interface error codes +typedef zg_err ZG2100Err; + +///ZG2100 Wi-Fi Module network interface +/** +This class provides Wi-Fi connectivity to the stack +*/ +class ZG2100NetIf : public LwipNetIf +{ +public: + ///Instantiates the Interface and register it against the stack, DHCP will be used + ZG2100NetIf( PinName mosi, PinName miso, PinName sclk, PinName cs, PinName intp, PinName nrst ); //W/ DHCP + ///Instantiates the Interface and register it against the stack, DHCP will not be used + /** + IpAddr is a container class that can be constructed with either 4 bytes or no parameters for a null IP address. + */ + ZG2100NetIf( PinName mosi, PinName miso, PinName sclk, PinName cs, PinName intp, PinName nrst, + IpAddr ip, IpAddr netmask, IpAddr gateway, IpAddr dns ); //W/o DHCP + virtual ~ZG2100NetIf(); + + ///Initializes module + void init(); + + ///Sets network's SSID + void setSsid(const char* ssid); + + ///Sets network's WEP key + void setWepKey(const byte* key, int len); + + ///Sets network's WPA passphrase (can last up to 30s) + void setWpaPass(const char* pass); + + ///Sets network's PSK key (preferred when using WPA to avoid computing it each time) + void setPskKey(const byte* key, int len); + + ///Connects to network + ZG2100Err connect(ZG_BSS_TYPE type, ZG_SECURITY security); + + ///Disconnects from network + void disconnect(); + + ///Brings the interface up (must be connected to a network first) + /** + Uses DHCP if necessary + @param timeout_ms : You can set the timeout parameter in milliseconds, if not it defaults to 15s + @return : ZG_OK on success or ZG_TIMEOUT on timeout + */ + ZG2100Err setup(int timeout_ms = 15000); + + virtual void poll(); + +private: + void waitReady(); + + SPI m_spi; + DigitalOut m_cs; + /*InterruptIn*/ DigitalIn m_intp; + DigitalOut m_nrst; + + Timer m_ethArpTimer; + Timer m_dhcpCoarseTimer; + Timer m_dhcpFineTimer; + Timer m_igmpTimer; + + bool m_useDhcp; + + netif* m_pNetIf; + + IpAddr m_netmask; + IpAddr m_gateway; + + const char* m_hostname; + +}; + +#endif +
--- a/LPC2368/if/zg2100/zg2100NetIf.h Thu Jul 22 11:31:59 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,88 +0,0 @@ - -/* -Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef ZG2100NETIF_H -#define ZG2100NETIF_H - -struct netif; - -#include "mbed.h" - -#include "if/lwip/LwipNetIf.h" -#include "if/net/net.h" - -#include "drv/zg2100/zg_defs.h" - -typedef zg_err ZG2100Err; - -class ZG2100NetIf : public LwipNetIf -{ -public: - ZG2100NetIf( PinName mosi, PinName miso, PinName sclk, PinName cs, PinName intp, PinName nrst ); //W/ DHCP - ZG2100NetIf( PinName mosi, PinName miso, PinName sclk, PinName cs, PinName intp, PinName nrst, - IpAddr ip, IpAddr netmask, IpAddr gateway, IpAddr dns ); //W/o DHCP - virtual ~ZG2100NetIf(); - - void init(); - - void setSsid(const char* ssid); - - void setWepKey(const byte* key, int len); - - void setWpaPass(const char* pass); - - void setPskKey(const byte* key, int len); - - ZG2100Err connect(ZG_BSS_TYPE type, ZG_SECURITY security); - - void disconnect(); - - ZG2100Err setup(int timeout_ms = 15000); - - virtual void poll(); - -private: - void waitReady(); - - SPI m_spi; - DigitalOut m_cs; - /*InterruptIn*/ DigitalIn m_intp; - DigitalOut m_nrst; - - Timer m_ethArpTimer; - Timer m_dhcpCoarseTimer; - Timer m_dhcpFineTimer; - - bool m_useDhcp; - - netif* m_pNetIf; - - IpAddr m_netmask; - IpAddr m_gateway; - - const char* m_hostname; - -}; - -#endif -
--- a/LPC2368/lwip/arch/cc.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/lwip/arch/cc.h Fri Aug 06 10:42:05 2010 +0000 @@ -29,9 +29,8 @@ #define FALSE 0 #endif -#ifndef DBG -//#error -#endif +#include <stdlib.h> +#define LWIP_RAND rand #define LWIP_PLATFORM_DIAG(x) DBG x #define LWIP_PLATFORM_ASSERT(x) DBG(x)
--- a/LPC2368/lwip/include/ipv4/lwip/icmp.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/lwip/include/ipv4/lwip/icmp.h Fri Aug 06 10:42:05 2010 +0000 @@ -70,7 +70,7 @@ #ifdef PACK_STRUCT_USE_INCLUDES # include "arch/bpstruct.h" #endif -/** This is the standard ICMP header only that the u32_t data +/* This is the standard ICMP header only that the u32_t data * is splitted to two u16_t like ICMP echo needs it. * This header is also used for other ICMP types that do not * use the data part. @@ -91,7 +91,7 @@ #define ICMPH_TYPE(hdr) ((hdr)->type) #define ICMPH_CODE(hdr) ((hdr)->code) -/** Combines type and code to an u16_t */ +/* Combines type and code to an u16_t */ #define ICMPH_TYPE_SET(hdr, t) ((hdr)->type = (t)) #define ICMPH_CODE_SET(hdr, c) ((hdr)->code = (c))
--- a/LPC2368/lwip/include/ipv4/lwip/inet.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/lwip/include/ipv4/lwip/inet.h Fri Aug 06 10:42:05 2010 +0000 @@ -40,7 +40,7 @@ extern "C" { #endif -/** For compatibility with BSD code */ +/* For compatibility with BSD code */ struct in_addr { u32_t s_addr; };
--- a/LPC2368/lwip/include/lwip/netif.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/lwip/include/lwip/netif.h Fri Aug 06 10:42:05 2010 +0000 @@ -56,58 +56,58 @@ /* Throughout this file, IP addresses are expected to be in * the same byte order as in IP_PCB. */ -/** must be the maximum of all used hardware address lengths +/* must be the maximum of all used hardware address lengths across all types of interfaces in use */ #define NETIF_MAX_HWADDR_LEN 6U -/** Whether the network interface is 'up'. This is +/* Whether the network interface is 'up'. This is * a software flag used to control whether this network * interface is enabled and processes traffic. * It is set by the startup code (for static IP configuration) or * by dhcp/autoip when an address has been assigned. */ #define NETIF_FLAG_UP 0x01U -/** If set, the netif has broadcast capability. +/* If set, the netif has broadcast capability. * Set by the netif driver in its init function. */ #define NETIF_FLAG_BROADCAST 0x02U -/** If set, the netif is one end of a point-to-point connection. +/* If set, the netif is one end of a point-to-point connection. * Set by the netif driver in its init function. */ #define NETIF_FLAG_POINTTOPOINT 0x04U -/** If set, the interface is configured using DHCP. +/* If set, the interface is configured using DHCP. * Set by the DHCP code when starting or stopping DHCP. */ #define NETIF_FLAG_DHCP 0x08U -/** If set, the interface has an active link +/* If set, the interface has an active link * (set by the network interface driver). * Either set by the netif driver in its init function (if the link * is up at that time) or at a later point once the link comes up * (if link detection is supported by the hardware). */ #define NETIF_FLAG_LINK_UP 0x10U -/** If set, the netif is an ethernet device using ARP. +/* If set, the netif is an ethernet device using ARP. * Set by the netif driver in its init function. * Used to check input packet types and use of DHCP. */ #define NETIF_FLAG_ETHARP 0x20U -/** If set, the netif is an ethernet device. It might not use +/* If set, the netif is an ethernet device. It might not use * ARP or TCP/IP if it is used for PPPoE only. */ #define NETIF_FLAG_ETHERNET 0x40U -/** If set, the netif has IGMP capability. +/* If set, the netif has IGMP capability. * Set by the netif driver in its init function. */ #define NETIF_FLAG_IGMP 0x80U -/** Function prototype for netif init functions. Set up flags and output/linkoutput +/* Function prototype for netif init functions. Set up flags and output/linkoutput * callback functions in this function. * * @param netif The netif to initialize */ typedef err_t (*netif_init_fn)(struct netif *netif); -/** Function prototype for netif->input functions. This function is saved as 'input' +/* Function prototype for netif->input functions. This function is saved as 'input' * callback function in the netif struct. Call it when a packet has been received. * * @param p The received packet, copied into a pbuf * @param inp The netif which received the packet */ typedef err_t (*netif_input_fn)(struct pbuf *p, struct netif *inp); -/** Function prototype for netif->output functions. Called by lwIP when a packet +/* Function prototype for netif->output functions. Called by lwIP when a packet * shall be sent. For ethernet netif, set this to 'etharp_output' and set * 'linkoutput'. * @@ -117,87 +117,87 @@ */ typedef err_t (*netif_output_fn)(struct netif *netif, struct pbuf *p, ip_addr_t *ipaddr); -/** Function prototype for netif->linkoutput functions. Only used for ethernet +/* Function prototype for netif->linkoutput functions. Only used for ethernet * netifs. This function is called by ARP when a packet shall be sent. * * @param netif The netif which shall send a packet * @param p The packet to send (raw ethernet packet) */ typedef err_t (*netif_linkoutput_fn)(struct netif *netif, struct pbuf *p); -/** Function prototype for netif status- or link-callback functions. */ +/* Function prototype for netif status- or link-callback functions. */ typedef void (*netif_status_callback_fn)(struct netif *netif); -/** Function prototype for netif igmp_mac_filter functions */ +/* Function prototype for netif igmp_mac_filter functions */ typedef err_t (*netif_igmp_mac_filter_fn)(struct netif *netif, ip_addr_t *group, u8_t action); -/** Generic data structure used for all lwIP network interfaces. +/* Generic data structure used for all lwIP network interfaces. * The following fields should be filled in by the initialization * function for the device driver: hwaddr_len, hwaddr[], mtu, flags */ struct netif { - /** pointer to next in linked list */ + /* pointer to next in linked list */ struct netif *next; - /** IP address configuration in network byte order */ + /* IP address configuration in network byte order */ ip_addr_t ip_addr; ip_addr_t netmask; ip_addr_t gw; - /** This function is called by the network device driver + /* This function is called by the network device driver * to pass a packet up the TCP/IP stack. */ netif_input_fn input; - /** This function is called by the IP module when it wants + /* This function is called by the IP module when it wants * to send a packet on the interface. This function typically * first resolves the hardware address, then sends the packet. */ netif_output_fn output; - /** This function is called by the ARP module when it wants + /* This function is called by the ARP module when it wants * to send a packet on the interface. This function outputs * the pbuf as-is on the link medium. */ netif_linkoutput_fn linkoutput; #if LWIP_NETIF_STATUS_CALLBACK - /** This function is called when the netif state is set to up or down + /* This function is called when the netif state is set to up or down */ netif_status_callback_fn status_callback; #endif /* LWIP_NETIF_STATUS_CALLBACK */ #if LWIP_NETIF_LINK_CALLBACK - /** This function is called when the netif link is set to up or down + /* This function is called when the netif link is set to up or down */ netif_status_callback_fn link_callback; #endif /* LWIP_NETIF_LINK_CALLBACK */ - /** This field can be set by the device driver and could point + /* This field can be set by the device driver and could point * to state information for the device. */ void *state; #if LWIP_DHCP - /** the DHCP client state information for this netif */ + /* the DHCP client state information for this netif */ struct dhcp *dhcp; #endif /* LWIP_DHCP */ #if LWIP_AUTOIP - /** the AutoIP client state information for this netif */ + /* the AutoIP client state information for this netif */ struct autoip *autoip; #endif #if LWIP_NETIF_HOSTNAME /* the hostname for this netif, NULL is a valid value */ char* hostname; #endif /* LWIP_NETIF_HOSTNAME */ - /** maximum transfer unit (in bytes) */ + /* maximum transfer unit (in bytes) */ u16_t mtu; - /** number of bytes used in hwaddr */ + /* number of bytes used in hwaddr */ u8_t hwaddr_len; - /** link level hardware address of this interface */ + /* link level hardware address of this interface */ u8_t hwaddr[NETIF_MAX_HWADDR_LEN]; - /** flags (see NETIF_FLAG_ above) */ + /* flags (see NETIF_FLAG_ above) */ u8_t flags; - /** descriptive abbreviation */ + /* descriptive abbreviation */ char name[2]; - /** number of this interface */ + /* number of this interface */ u8_t num; #if LWIP_SNMP - /** link type (from "snmp_ifType" enum from snmp.h) */ + /* link type (from "snmp_ifType" enum from snmp.h) */ u8_t link_type; - /** (estimate) link speed */ + /* (estimate) link speed */ u32_t link_speed; - /** timestamp at last change made (up/down) */ + /* timestamp at last change made (up/down) */ u32_t ts; - /** counters */ + /* counters */ u32_t ifinoctets; u32_t ifinucastpkts; u32_t ifinnucastpkts; @@ -208,7 +208,7 @@ u32_t ifoutdiscards; #endif /* LWIP_SNMP */ #if LWIP_IGMP - /** This function could be called to add or delete a entry in the multicast + /* This function could be called to add or delete a entry in the multicast filter table of the ethernet MAC.*/ netif_igmp_mac_filter_fn igmp_mac_filter; #endif /* LWIP_IGMP */ @@ -245,9 +245,9 @@ #endif /* LWIP_SNMP */ -/** The list of network interfaces. */ +/* The list of network interfaces. */ extern struct netif *netif_list; -/** The default network interface. */ +/* The default network interface. */ extern struct netif *netif_default; void netif_init(void); @@ -274,7 +274,7 @@ void netif_set_up(struct netif *netif); void netif_set_down(struct netif *netif); -/** Ask if an interface is up */ +/* Ask if an interface is up */ #define netif_is_up(netif) (((netif)->flags & NETIF_FLAG_UP) ? (u8_t)1 : (u8_t)0) #if LWIP_NETIF_STATUS_CALLBACK @@ -283,7 +283,7 @@ void netif_set_link_up(struct netif *netif); void netif_set_link_down(struct netif *netif); -/** Ask if a link is up */ +/* Ask if a link is up */ #define netif_is_link_up(netif) (((netif)->flags & NETIF_FLAG_LINK_UP) ? (u8_t)1 : (u8_t)0) #if LWIP_NETIF_LINK_CALLBACK
--- a/LPC2368/lwip/include/lwip/pbuf.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/lwip/include/lwip/pbuf.h Fri Aug 06 10:42:05 2010 +0000 @@ -40,7 +40,7 @@ extern "C" { #endif -/** Currently, the pbuf_custom code is only needed for one specific configuration +/* Currently, the pbuf_custom code is only needed for one specific configuration * of IP_FRAG */ #define LWIP_SUPPORT_CUSTOM_PBUF (IP_FRAG && !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF) @@ -62,19 +62,19 @@ } pbuf_type; -/** indicates this packet's data should be immediately passed to the application */ +/* indicates this packet's data should be immediately passed to the application */ #define PBUF_FLAG_PUSH 0x01U -/** indicates this is a custom pbuf: pbuf_free and pbuf_header handle such a +/* indicates this is a custom pbuf: pbuf_free and pbuf_header handle such a a pbuf differently */ #define PBUF_FLAG_IS_CUSTOM 0x02U -/** indicates this pbuf is UDP multicast to be looped back */ +/* indicates this pbuf is UDP multicast to be looped back */ #define PBUF_FLAG_MCASTLOOP 0x04U struct pbuf { - /** next pbuf in singly linked pbuf chain */ + /* next pbuf in singly linked pbuf chain */ struct pbuf *next; - /** pointer to the actual data in the buffer */ + /* pointer to the actual data in the buffer */ void *payload; /** @@ -86,13 +86,13 @@ */ u16_t tot_len; - /** length of this buffer */ + /* length of this buffer */ u16_t len; - /** pbuf_type as u8_t instead of enum to save space */ + /* pbuf_type as u8_t instead of enum to save space */ u8_t /*pbuf_type*/ type; - /** misc flags */ + /* misc flags */ u8_t flags; /** @@ -104,14 +104,14 @@ }; #if LWIP_SUPPORT_CUSTOM_PBUF -/** Prototype for a function to free a custom pbuf */ +/* Prototype for a function to free a custom pbuf */ typedef void (*pbuf_free_custom_fn)(struct pbuf *p); -/** A custom pbuf: like a pbuf, but following a function pointer to free it. */ +/* A custom pbuf: like a pbuf, but following a function pointer to free it. */ struct pbuf_custom { - /** The actual pbuf */ + /* The actual pbuf */ struct pbuf pbuf; - /** This function is called when pbuf_free deallocates this pbuf(_custom) */ + /* This function is called when pbuf_free deallocates this pbuf(_custom) */ pbuf_free_custom_fn custom_free_function; }; #endif /* LWIP_SUPPORT_CUSTOM_PBUF */
--- a/LPC2368/lwip/include/netif/etharp.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/lwip/include/netif/etharp.h Fri Aug 06 10:42:05 2010 +0000 @@ -68,7 +68,7 @@ # include "arch/bpstruct.h" #endif PACK_STRUCT_BEGIN -/** Ethernet header */ +/* Ethernet header */ struct eth_hdr { #if ETH_PAD_SIZE PACK_STRUCT_FIELD(u8_t padding[ETH_PAD_SIZE]); @@ -90,7 +90,7 @@ # include "arch/bpstruct.h" #endif PACK_STRUCT_BEGIN -/** VLAN header inserted between ethernet header and payload +/* VLAN header inserted between ethernet header and payload * if 'type' in ethernet header is ETHTYPE_VLAN. * See IEEE802.Q */ struct eth_vlan_hdr { @@ -111,7 +111,7 @@ # include "arch/bpstruct.h" #endif PACK_STRUCT_BEGIN -/** the ARP message, see RFC 826 ("Packet format") */ +/* the ARP message, see RFC 826 ("Packet format") */ struct etharp_hdr { PACK_STRUCT_FIELD(u16_t hwtype); PACK_STRUCT_FIELD(u16_t proto); @@ -131,7 +131,7 @@ #define SIZEOF_ETHARP_HDR 28 #define SIZEOF_ETHARP_PACKET (SIZEOF_ETH_HDR + SIZEOF_ETHARP_HDR) -/** 5 seconds period */ +/* 5 seconds period */ #define ARP_TMR_INTERVAL 5000 #define ETHTYPE_ARP 0x0806 @@ -140,13 +140,13 @@ #define ETHTYPE_PPPOEDISC 0x8863 /* PPP Over Ethernet Discovery Stage */ #define ETHTYPE_PPPOE 0x8864 /* PPP Over Ethernet Session Stage */ -/** MEMCPY-like macro to copy to/from struct eth_addr's that are local variables +/* MEMCPY-like macro to copy to/from struct eth_addr's that are local variables * or known to be 32-bit aligned within the protocol header. */ #ifndef ETHADDR32_COPY #define ETHADDR32_COPY(src, dst) SMEMCPY(src, dst, ETHARP_HWADDR_LEN) #endif -/** MEMCPY-like macro to copy to/from struct eth_addr's that are no local +/* MEMCPY-like macro to copy to/from struct eth_addr's that are no local * variables and known to be 16-bit aligned within the protocol header. */ #ifndef ETHADDR16_COPY #define ETHADDR16_COPY(src, dst) SMEMCPY(src, dst, ETHARP_HWADDR_LEN) @@ -154,11 +154,11 @@ #if LWIP_ARP /* don't build if not configured for use in lwipopts.h */ -/** ARP message types (opcodes) */ +/* ARP message types (opcodes) */ #define ARP_REQUEST 1 #define ARP_REPLY 2 -/** Define this to 1 and define LWIP_ARP_FILTER_NETIF_FN(pbuf, netif, type) +/* Define this to 1 and define LWIP_ARP_FILTER_NETIF_FN(pbuf, netif, type) * to a filter function that returns the correct netif when using multiple * netifs on one hardware interface where the netif's low-level receive * routine cannot decide for the correct netif (e.g. when mapping multiple @@ -169,7 +169,7 @@ #endif #if ARP_QUEUEING -/** struct for queueing outgoing packets for unknown address +/* struct for queueing outgoing packets for unknown address * defined here to be accessed by memp.h */ struct etharp_q_entry { @@ -185,7 +185,7 @@ err_t etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr); err_t etharp_query(struct netif *netif, ip_addr_t *ipaddr, struct pbuf *q); err_t etharp_request(struct netif *netif, ip_addr_t *ipaddr); -/** For Ethernet network interfaces, we might want to send "gratuitous ARP"; +/* For Ethernet network interfaces, we might want to send "gratuitous ARP"; * this is an ARP packet sent by a node in order to spontaneously cause other * nodes to update an entry in their ARP cache. * From RFC 3220 "IP Mobility Support for IPv4" section 4.6. */ @@ -212,10 +212,10 @@ extern const struct eth_addr ethbroadcast, ethzero; -#endif /* LWIP_ARP || LWIP_ETHERNET */ - #ifdef __cplusplus } #endif +#endif /* LWIP_ARP || LWIP_ETHERNET */ + #endif /* __NETIF_ARP_H__ */
--- a/LPC2368/lwip/lwipopts.h Thu Jul 22 11:31:59 2010 +0000 +++ b/LPC2368/lwip/lwipopts.h Fri Aug 06 10:42:05 2010 +0000 @@ -53,7 +53,7 @@ #define TUNIF_DEBUG LWIP_DBG_OFF #define UNIXIF_DEBUG LWIP_DBG_OFF #define DELIF_DEBUG LWIP_DBG_OFF -#define SIO_FIFO_DEBUG LWIP_DBG_OFF +#define SIO_FIFO_DEBUG LWIP_DBG_ON #define TCPDUMP_DEBUG LWIP_DBG_ON #define PPP_DEBUG LWIP_DBG_OFF @@ -62,26 +62,27 @@ #define PBUF_DEBUG LWIP_DBG_OFF #define API_LIB_DEBUG LWIP_DBG_OFF #define API_MSG_DEBUG LWIP_DBG_OFF -#define TCPIP_DEBUG LWIP_DBG_ON -#define NETIF_DEBUG LWIP_DBG_ON +#define TCPIP_DEBUG LWIP_DBG_OFF +#define NETIF_DEBUG LWIP_DBG_OFF #define SOCKETS_DEBUG LWIP_DBG_OFF #define DEMO_DEBUG LWIP_DBG_OFF -#define IP_DEBUG LWIP_DBG_ON -#define IP_REASS_DEBUG LWIP_DBG_ON +#define IP_DEBUG LWIP_DBG_OFF +#define IP_REASS_DEBUG LWIP_DBG_OFF #define RAW_DEBUG LWIP_DBG_OFF -#define ICMP_DEBUG LWIP_DBG_ON -#define UDP_DEBUG LWIP_DBG_ON -#define TCP_DEBUG LWIP_DBG_ON -#define TCP_INPUT_DEBUG LWIP_DBG_ON -#define TCP_OUTPUT_DEBUG LWIP_DBG_ON -#define TCP_RTO_DEBUG LWIP_DBG_ON -#define TCP_CWND_DEBUG LWIP_DBG_ON -#define TCP_WND_DEBUG LWIP_DBG_ON -#define TCP_FR_DEBUG LWIP_DBG_ON -#define TCP_QLEN_DEBUG LWIP_DBG_ON -#define TCP_RST_DEBUG LWIP_DBG_ON -#define ETHARP_DEBUG LWIP_DBG_ON -#define DNS_DEBUG LWIP_DBG_ON +#define ICMP_DEBUG LWIP_DBG_OFF +#define IGMP_DEBUG LWIP_DBG_OFF +#define UDP_DEBUG LWIP_DBG_OFF +#define TCP_DEBUG LWIP_DBG_OFF +#define TCP_INPUT_DEBUG LWIP_DBG_OFF +#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF +#define TCP_RTO_DEBUG LWIP_DBG_OFF +#define TCP_CWND_DEBUG LWIP_DBG_OFF +#define TCP_WND_DEBUG LWIP_DBG_OFF +#define TCP_FR_DEBUG LWIP_DBG_OFF +#define TCP_QLEN_DEBUG LWIP_DBG_OFF +#define TCP_RST_DEBUG LWIP_DBG_OFF +#define ETHARP_DEBUG LWIP_DBG_OFF +#define DNS_DEBUG LWIP_DBG_OFF #endif @@ -276,10 +277,10 @@ /* TCP Maximum segment size. */ //#define TCP_MSS 1024 -#define TCP_MSS 1024//0x276//536//0x276 +#define TCP_MSS 536//0x276//536//0x276 /* TCP sender buffer space (bytes). */ -#define TCP_SND_BUF 2048 +#define TCP_SND_BUF (3 * TCP_MSS) /* TCP sender buffer space (pbufs). This must be at least = 2 * TCP_SND_BUF/TCP_MSS for things to work. */ @@ -291,7 +292,7 @@ #define TCP_SNDLOWAT (TCP_SND_BUF/2) /* TCP receive window. */ -#define TCP_WND 1024 //8096 +#define TCP_WND (3 * TCP_MSS) //8096 /* Maximum number of retransmissions of data segments. */ //#define TCP_MAXRTX 12 @@ -325,6 +326,9 @@ /* ---------- ICMP options ---------- */ #define ICMP_TTL 255 +/* ---------- IGMP options ---------- */ +#define LWIP_IGMP (NET_ETH | NET_ZG2100) + /* ---------- DHCP options ---------- */ /* Define LWIP_DHCP to 1 if you want DHCP configuration of interfaces. */