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/
UIPClient.h@9:312e0937630f, 2016-12-29 (annotated)
- 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?
User | Revision | Line number | New 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 |