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:
Tue Jan 23 15:08:43 2018 +0100
Revision:
39:deeb00b81cc9
Parent:
33:7ba5d53df0f2
Release: 2.0.4

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 33:7ba5d53df0f2 26 #if defined(__STM32F3__) || defined(STM32F3) || defined(__RFduino__)
cassyarduino 19:e416943f7119 27 #include "mbed/Client.h"
cassyarduino 19:e416943f7119 28 #else
cassyarduino 19:e416943f7119 29 #include "Client.h"
cassyarduino 19:e416943f7119 30 #endif
cassyarduino 0:e3fb1267e3c3 31 #endif
cassyarduino 0:e3fb1267e3c3 32 #if defined(__MBED__)
cassyarduino 9:312e0937630f 33 #include "mbed/Print.h"
cassyarduino 9:312e0937630f 34 #include "mbed/Client.h"
cassyarduino 0:e3fb1267e3c3 35 #endif
cassyarduino 0:e3fb1267e3c3 36 #include "utility/mempool.h"
cassyarduino 0:e3fb1267e3c3 37 #include "utility/logging.h"
cassyarduino 0:e3fb1267e3c3 38
cassyarduino 0:e3fb1267e3c3 39 extern "C" {
cassyarduino 0:e3fb1267e3c3 40 #include "utility/uip.h"
cassyarduino 0:e3fb1267e3c3 41 }
cassyarduino 0:e3fb1267e3c3 42
cassyarduino 0:e3fb1267e3c3 43 #define UIP_SOCKET_DATALEN UIP_TCP_MSS
cassyarduino 0:e3fb1267e3c3 44 //#define UIP_SOCKET_NUMPACKETS UIP_RECEIVE_WINDOW/UIP_TCP_MSS+1
cassyarduino 0:e3fb1267e3c3 45 #ifndef UIP_SOCKET_NUMPACKETS
cassyarduino 0:e3fb1267e3c3 46 #define UIP_SOCKET_NUMPACKETS 5
cassyarduino 0:e3fb1267e3c3 47 #endif
cassyarduino 0:e3fb1267e3c3 48
cassyarduino 0:e3fb1267e3c3 49 #define UIP_CLIENT_CONNECTED 0x10
cassyarduino 0:e3fb1267e3c3 50 #define UIP_CLIENT_CLOSE 0x20
cassyarduino 0:e3fb1267e3c3 51 #define UIP_CLIENT_REMOTECLOSED 0x40
cassyarduino 0:e3fb1267e3c3 52 #define UIP_CLIENT_RESTART 0x80
cassyarduino 0:e3fb1267e3c3 53 #define UIP_CLIENT_STATEFLAGS (UIP_CLIENT_CONNECTED | UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED | UIP_CLIENT_RESTART)
cassyarduino 0:e3fb1267e3c3 54 #define UIP_CLIENT_SOCKETS ~UIP_CLIENT_STATEFLAGS
cassyarduino 0:e3fb1267e3c3 55
cassyarduino 0:e3fb1267e3c3 56 typedef uint8_t uip_socket_ptr;
cassyarduino 0:e3fb1267e3c3 57
cassyarduino 0:e3fb1267e3c3 58 typedef struct {
cassyarduino 0:e3fb1267e3c3 59 uint8_t state;
cassyarduino 0:e3fb1267e3c3 60 memhandle packets_in[UIP_SOCKET_NUMPACKETS];
cassyarduino 0:e3fb1267e3c3 61 uint16_t lport; /**< The local TCP port, in network byte order. */
cassyarduino 0:e3fb1267e3c3 62 } uip_userdata_closed_t;
cassyarduino 0:e3fb1267e3c3 63
cassyarduino 0:e3fb1267e3c3 64 typedef struct {
cassyarduino 0:e3fb1267e3c3 65 uint8_t state;
cassyarduino 0:e3fb1267e3c3 66 memhandle packets_in[UIP_SOCKET_NUMPACKETS];
cassyarduino 0:e3fb1267e3c3 67 memhandle packets_out[UIP_SOCKET_NUMPACKETS];
cassyarduino 0:e3fb1267e3c3 68 memaddress out_pos;
cassyarduino 0:e3fb1267e3c3 69 #if UIP_CLIENT_TIMER >= 0
cassyarduino 0:e3fb1267e3c3 70 unsigned long timer;
cassyarduino 0:e3fb1267e3c3 71 #endif
cassyarduino 0:e3fb1267e3c3 72 } uip_userdata_t;
cassyarduino 0:e3fb1267e3c3 73
cassyarduino 33:7ba5d53df0f2 74 #if defined(ARDUINO) && !defined(STM32F3) && !defined(__RFduino__)
cassyarduino 10:cd62b2205c2a 75 class UIPClient : public Client {
cassyarduino 10:cd62b2205c2a 76 #endif
cassyarduino 33:7ba5d53df0f2 77 #if defined(__MBED__) || defined(STM32F3) || defined(__RFduino__)
cassyarduino 10:cd62b2205c2a 78 class UIPClient : public Print, public Client {
cassyarduino 10:cd62b2205c2a 79 #endif
cassyarduino 0:e3fb1267e3c3 80 public:
cassyarduino 0:e3fb1267e3c3 81 UIPClient();
cassyarduino 5:f9a2b1916a8d 82 virtual int connect(IPAddress ip, uint16_t port);
cassyarduino 5:f9a2b1916a8d 83 virtual int connect(const char *host, uint16_t port);
cassyarduino 5:f9a2b1916a8d 84 virtual int read(uint8_t *buf, size_t size);
cassyarduino 5:f9a2b1916a8d 85 virtual void stop();
cassyarduino 5:f9a2b1916a8d 86 virtual uint8_t connected();
cassyarduino 5:f9a2b1916a8d 87 virtual operator bool();
cassyarduino 0:e3fb1267e3c3 88 virtual bool operator==(const EthernetClient&);
cassyarduino 0:e3fb1267e3c3 89 virtual bool operator!=(const EthernetClient& rhs) { return !this->operator==(rhs); };
cassyarduino 0:e3fb1267e3c3 90
cassyarduino 5:f9a2b1916a8d 91 virtual size_t write(uint8_t);
cassyarduino 5:f9a2b1916a8d 92 virtual size_t write(const uint8_t *buf, size_t size);
cassyarduino 5:f9a2b1916a8d 93 virtual int available();
cassyarduino 5:f9a2b1916a8d 94 virtual int read();
cassyarduino 5:f9a2b1916a8d 95 virtual int peek();
cassyarduino 5:f9a2b1916a8d 96 virtual void flush();
cassyarduino 0:e3fb1267e3c3 97
cassyarduino 8:b9332109461d 98 using Print::write;
cassyarduino 0:e3fb1267e3c3 99
cassyarduino 0:e3fb1267e3c3 100 private:
cassyarduino 0:e3fb1267e3c3 101 UIPClient(struct uip_conn *_conn);
cassyarduino 0:e3fb1267e3c3 102 UIPClient(uip_userdata_t* conn_data);
cassyarduino 0:e3fb1267e3c3 103
cassyarduino 0:e3fb1267e3c3 104 uip_userdata_t* data;
cassyarduino 0:e3fb1267e3c3 105
cassyarduino 0:e3fb1267e3c3 106 static uip_userdata_t all_data[UIP_CONNS];
cassyarduino 0:e3fb1267e3c3 107 static uip_userdata_t* _allocateData();
cassyarduino 0:e3fb1267e3c3 108
cassyarduino 18:904e3130a30c 109 static uint16_t _write(uip_userdata_t *,const uint8_t *buf, size_t size);
cassyarduino 0:e3fb1267e3c3 110 static int _available(uip_userdata_t *);
cassyarduino 0:e3fb1267e3c3 111
cassyarduino 0:e3fb1267e3c3 112 static uint8_t _currentBlock(memhandle* blocks);
cassyarduino 0:e3fb1267e3c3 113 static void _eatBlock(memhandle* blocks);
cassyarduino 0:e3fb1267e3c3 114 static void _flushBlocks(memhandle* blocks);
cassyarduino 0:e3fb1267e3c3 115
cassyarduino 0:e3fb1267e3c3 116 #if ACTLOGLEVEL>=LOG_DEBUG_V2
cassyarduino 0:e3fb1267e3c3 117 static void _dumpAllData(void);
cassyarduino 0:e3fb1267e3c3 118 #endif
cassyarduino 0:e3fb1267e3c3 119
cassyarduino 0:e3fb1267e3c3 120 friend class UIPEthernetClass;
cassyarduino 0:e3fb1267e3c3 121 friend class UIPServer;
cassyarduino 0:e3fb1267e3c3 122
cassyarduino 0:e3fb1267e3c3 123 friend void uipclient_appcall(void);
cassyarduino 0:e3fb1267e3c3 124
cassyarduino 0:e3fb1267e3c3 125 };
cassyarduino 0:e3fb1267e3c3 126
cassyarduino 0:e3fb1267e3c3 127 #endif