UIPEthernet library for Arduino IDE, Eclipse with arduino plugin and MBED/SMeshStudio (AVR,STM32F,ESP8266,Intel ARC32,Nordic nRF51,Teensy boards,Realtek Ameba(RTL8195A,RTL8710)), ENC28j60 network chip. Compatible with Wiznet W5100 Ethernet library API. Compiled and tested on Nucleo-F302R8. Master repository is: https://github.com/UIPEthernet/UIPEthernet/

Committer:
cassyarduino
Date:
Thu Dec 29 10:41:59 2016 +0000
Revision:
9:312e0937630f
Parent:
8:b9332109461d
Child:
10:cd62b2205c2a
Corrections for MBED support

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cassyarduino 0:e3fb1267e3c3 1 /*
cassyarduino 0:e3fb1267e3c3 2 UIPClient.h - Arduino implementation of a uIP wrapper class.
cassyarduino 0:e3fb1267e3c3 3 Copyright (c) 2013 Norbert Truchsess <norbert.truchsess@t-online.de>
cassyarduino 0:e3fb1267e3c3 4 All rights reserved.
cassyarduino 0:e3fb1267e3c3 5
cassyarduino 0:e3fb1267e3c3 6 This program is free software: you can redistribute it and/or modify
cassyarduino 0:e3fb1267e3c3 7 it under the terms of the GNU General Public License as published by
cassyarduino 0:e3fb1267e3c3 8 the Free Software Foundation, either version 3 of the License, or
cassyarduino 0:e3fb1267e3c3 9 (at your option) any later version.
cassyarduino 0:e3fb1267e3c3 10
cassyarduino 0:e3fb1267e3c3 11 This program is distributed in the hope that it will be useful,
cassyarduino 0:e3fb1267e3c3 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
cassyarduino 0:e3fb1267e3c3 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cassyarduino 0:e3fb1267e3c3 14 GNU General Public License for more details.
cassyarduino 0:e3fb1267e3c3 15
cassyarduino 0:e3fb1267e3c3 16 You should have received a copy of the GNU General Public License
cassyarduino 0:e3fb1267e3c3 17 along with this program. If not, see <http://www.gnu.org/licenses/>.
cassyarduino 0:e3fb1267e3c3 18 */
cassyarduino 0:e3fb1267e3c3 19
cassyarduino 0:e3fb1267e3c3 20 #ifndef UIPCLIENT_H
cassyarduino 0:e3fb1267e3c3 21 #define UIPCLIENT_H
cassyarduino 0:e3fb1267e3c3 22
cassyarduino 0:e3fb1267e3c3 23 #include "ethernet_comp.h"
cassyarduino 0:e3fb1267e3c3 24 #if defined(ARDUINO)
cassyarduino 9:312e0937630f 25 #include "Print.h"
cassyarduino 9:312e0937630f 26 #include "Client.h"
cassyarduino 0:e3fb1267e3c3 27 #endif
cassyarduino 0:e3fb1267e3c3 28 #if defined(__MBED__)
cassyarduino 9:312e0937630f 29 #include "mbed/Print.h"
cassyarduino 9:312e0937630f 30 #include "mbed/Client.h"
cassyarduino 0:e3fb1267e3c3 31 #endif
cassyarduino 0:e3fb1267e3c3 32 #include "utility/mempool.h"
cassyarduino 0:e3fb1267e3c3 33 #include "utility/logging.h"
cassyarduino 0:e3fb1267e3c3 34
cassyarduino 0:e3fb1267e3c3 35 extern "C" {
cassyarduino 0:e3fb1267e3c3 36 #include "utility/uip.h"
cassyarduino 0:e3fb1267e3c3 37 }
cassyarduino 0:e3fb1267e3c3 38
cassyarduino 0:e3fb1267e3c3 39 #define UIP_SOCKET_DATALEN UIP_TCP_MSS
cassyarduino 0:e3fb1267e3c3 40 //#define UIP_SOCKET_NUMPACKETS UIP_RECEIVE_WINDOW/UIP_TCP_MSS+1
cassyarduino 0:e3fb1267e3c3 41 #ifndef UIP_SOCKET_NUMPACKETS
cassyarduino 0:e3fb1267e3c3 42 #define UIP_SOCKET_NUMPACKETS 5
cassyarduino 0:e3fb1267e3c3 43 #endif
cassyarduino 0:e3fb1267e3c3 44
cassyarduino 0:e3fb1267e3c3 45 #define UIP_CLIENT_CONNECTED 0x10
cassyarduino 0:e3fb1267e3c3 46 #define UIP_CLIENT_CLOSE 0x20
cassyarduino 0:e3fb1267e3c3 47 #define UIP_CLIENT_REMOTECLOSED 0x40
cassyarduino 0:e3fb1267e3c3 48 #define UIP_CLIENT_RESTART 0x80
cassyarduino 0:e3fb1267e3c3 49 #define UIP_CLIENT_STATEFLAGS (UIP_CLIENT_CONNECTED | UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED | UIP_CLIENT_RESTART)
cassyarduino 0:e3fb1267e3c3 50 #define UIP_CLIENT_SOCKETS ~UIP_CLIENT_STATEFLAGS
cassyarduino 0:e3fb1267e3c3 51
cassyarduino 0:e3fb1267e3c3 52 typedef uint8_t uip_socket_ptr;
cassyarduino 0:e3fb1267e3c3 53
cassyarduino 0:e3fb1267e3c3 54 typedef struct {
cassyarduino 0:e3fb1267e3c3 55 uint8_t state;
cassyarduino 0:e3fb1267e3c3 56 memhandle packets_in[UIP_SOCKET_NUMPACKETS];
cassyarduino 0:e3fb1267e3c3 57 uint16_t lport; /**< The local TCP port, in network byte order. */
cassyarduino 0:e3fb1267e3c3 58 } uip_userdata_closed_t;
cassyarduino 0:e3fb1267e3c3 59
cassyarduino 0:e3fb1267e3c3 60 typedef struct {
cassyarduino 0:e3fb1267e3c3 61 uint8_t state;
cassyarduino 0:e3fb1267e3c3 62 memhandle packets_in[UIP_SOCKET_NUMPACKETS];
cassyarduino 0:e3fb1267e3c3 63 memhandle packets_out[UIP_SOCKET_NUMPACKETS];
cassyarduino 0:e3fb1267e3c3 64 memaddress out_pos;
cassyarduino 0:e3fb1267e3c3 65 #if UIP_CLIENT_TIMER >= 0
cassyarduino 0:e3fb1267e3c3 66 unsigned long timer;
cassyarduino 0:e3fb1267e3c3 67 #endif
cassyarduino 0:e3fb1267e3c3 68 } uip_userdata_t;
cassyarduino 0:e3fb1267e3c3 69
cassyarduino 9:312e0937630f 70 class UIPClient : public Print, public Client {
cassyarduino 0:e3fb1267e3c3 71 public:
cassyarduino 0:e3fb1267e3c3 72 UIPClient();
cassyarduino 5:f9a2b1916a8d 73 virtual int connect(IPAddress ip, uint16_t port);
cassyarduino 5:f9a2b1916a8d 74 virtual int connect(const char *host, uint16_t port);
cassyarduino 5:f9a2b1916a8d 75 virtual int read(uint8_t *buf, size_t size);
cassyarduino 5:f9a2b1916a8d 76 virtual void stop();
cassyarduino 5:f9a2b1916a8d 77 virtual uint8_t connected();
cassyarduino 5:f9a2b1916a8d 78 virtual operator bool();
cassyarduino 0:e3fb1267e3c3 79 virtual bool operator==(const EthernetClient&);
cassyarduino 0:e3fb1267e3c3 80 virtual bool operator!=(const EthernetClient& rhs) { return !this->operator==(rhs); };
cassyarduino 0:e3fb1267e3c3 81
cassyarduino 5:f9a2b1916a8d 82 virtual size_t write(uint8_t);
cassyarduino 5:f9a2b1916a8d 83 virtual size_t write(const uint8_t *buf, size_t size);
cassyarduino 5:f9a2b1916a8d 84 virtual int available();
cassyarduino 5:f9a2b1916a8d 85 virtual int read();
cassyarduino 5:f9a2b1916a8d 86 virtual int peek();
cassyarduino 5:f9a2b1916a8d 87 virtual void flush();
cassyarduino 0:e3fb1267e3c3 88
cassyarduino 8:b9332109461d 89 using Print::write;
cassyarduino 0:e3fb1267e3c3 90
cassyarduino 0:e3fb1267e3c3 91 private:
cassyarduino 0:e3fb1267e3c3 92 UIPClient(struct uip_conn *_conn);
cassyarduino 0:e3fb1267e3c3 93 UIPClient(uip_userdata_t* conn_data);
cassyarduino 0:e3fb1267e3c3 94
cassyarduino 0:e3fb1267e3c3 95 uip_userdata_t* data;
cassyarduino 0:e3fb1267e3c3 96
cassyarduino 0:e3fb1267e3c3 97 static uip_userdata_t all_data[UIP_CONNS];
cassyarduino 0:e3fb1267e3c3 98 static uip_userdata_t* _allocateData();
cassyarduino 0:e3fb1267e3c3 99
cassyarduino 9:312e0937630f 100 static int16_t _write(uip_userdata_t *,const uint8_t *buf, size_t size);
cassyarduino 0:e3fb1267e3c3 101 static int _available(uip_userdata_t *);
cassyarduino 0:e3fb1267e3c3 102
cassyarduino 0:e3fb1267e3c3 103 static uint8_t _currentBlock(memhandle* blocks);
cassyarduino 0:e3fb1267e3c3 104 static void _eatBlock(memhandle* blocks);
cassyarduino 0:e3fb1267e3c3 105 static void _flushBlocks(memhandle* blocks);
cassyarduino 0:e3fb1267e3c3 106
cassyarduino 0:e3fb1267e3c3 107 #if ACTLOGLEVEL>=LOG_DEBUG_V2
cassyarduino 0:e3fb1267e3c3 108 static void _dumpAllData(void);
cassyarduino 0:e3fb1267e3c3 109 #endif
cassyarduino 0:e3fb1267e3c3 110
cassyarduino 0:e3fb1267e3c3 111 friend class UIPEthernetClass;
cassyarduino 0:e3fb1267e3c3 112 friend class UIPServer;
cassyarduino 0:e3fb1267e3c3 113
cassyarduino 0:e3fb1267e3c3 114 friend void uipclient_appcall(void);
cassyarduino 0:e3fb1267e3c3 115
cassyarduino 0:e3fb1267e3c3 116 };
cassyarduino 0:e3fb1267e3c3 117
cassyarduino 0:e3fb1267e3c3 118 #endif