This is WIZnet Ethernet Interface using Hardware TCP/IP chip, W5500, W5200 and W5100. One of them can be selected by enabling it in wiznet.h.

Dependents:   Embedded_web EmailButton EmailButton HTTPClient_Weather ... more

other drivers

for only W5500 / WIZ550io user, you could use

Import libraryW5500Interface

This is the Interface library for WIZnet W5500 chip which forked of EthernetInterfaceW5500, WIZnetInterface and WIZ550ioInterface. This library has simple name as "W5500Interface". and can be used for Wiz550io users also.

Committer:
bangbh
Date:
Fri Apr 24 08:19:14 2015 +0000
Revision:
6:ca8405b9564d
Parent:
0:b72d22e10709
Child:
7:7c67a8922ec5
"bool is_fin_received()" method added.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bangbh 6:ca8405b9564d 1 /* Copyright (C) 2012 mbed.org, MIT License
bangbh 6:ca8405b9564d 2 *
bangbh 6:ca8405b9564d 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
bangbh 6:ca8405b9564d 4 * and associated documentation files (the "Software"), to deal in the Software without restriction,
bangbh 6:ca8405b9564d 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
bangbh 6:ca8405b9564d 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
bangbh 6:ca8405b9564d 7 * furnished to do so, subject to the following conditions:
bangbh 6:ca8405b9564d 8 *
bangbh 6:ca8405b9564d 9 * The above copyright notice and this permission notice shall be included in all copies or
bangbh 6:ca8405b9564d 10 * substantial portions of the Software.
bangbh 6:ca8405b9564d 11 *
bangbh 6:ca8405b9564d 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
bangbh 6:ca8405b9564d 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
bangbh 6:ca8405b9564d 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
bangbh 6:ca8405b9564d 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
bangbh 6:ca8405b9564d 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
bangbh 6:ca8405b9564d 17 */
bangbh 6:ca8405b9564d 18
bangbh 6:ca8405b9564d 19 #include "TCPSocketConnection.h"
bangbh 6:ca8405b9564d 20
bangbh 6:ca8405b9564d 21 TCPSocketConnection::TCPSocketConnection()
bangbh 6:ca8405b9564d 22 {
bangbh 6:ca8405b9564d 23 }
bangbh 6:ca8405b9564d 24
bangbh 6:ca8405b9564d 25 int TCPSocketConnection::connect(const char* host, const int port)
bangbh 6:ca8405b9564d 26 {
bangbh 6:ca8405b9564d 27 if (_sock_fd < 0) {
bangbh 6:ca8405b9564d 28 _sock_fd = eth->new_socket();
bangbh 6:ca8405b9564d 29 if (_sock_fd < 0) {
bangbh 6:ca8405b9564d 30 return -1;
bangbh 6:ca8405b9564d 31 }
bangbh 6:ca8405b9564d 32 }
bangbh 6:ca8405b9564d 33 if (set_address(host, port) != 0) {
bangbh 6:ca8405b9564d 34 return -1;
bangbh 6:ca8405b9564d 35 }
bangbh 6:ca8405b9564d 36 if (!eth->connect(_sock_fd, get_address(), port)) {
bangbh 6:ca8405b9564d 37 return -1;
bangbh 6:ca8405b9564d 38 }
bangbh 6:ca8405b9564d 39 return 0;
bangbh 6:ca8405b9564d 40 }
bangbh 6:ca8405b9564d 41
bangbh 6:ca8405b9564d 42 bool TCPSocketConnection::is_connected(void)
bangbh 6:ca8405b9564d 43 {
bangbh 6:ca8405b9564d 44 return eth->is_connected(_sock_fd);
bangbh 6:ca8405b9564d 45 }
bangbh 6:ca8405b9564d 46
bangbh 6:ca8405b9564d 47
bangbh 6:ca8405b9564d 48 bool TCPSocketConnection::is_fin_received(void)
bangbh 6:ca8405b9564d 49 {
bangbh 6:ca8405b9564d 50 return eth->is_fin_received(_sock_fd);
bangbh 6:ca8405b9564d 51 }
jbkim 0:b72d22e10709 52
bangbh 6:ca8405b9564d 53 int TCPSocketConnection::send(char* data, int length)
bangbh 6:ca8405b9564d 54 {
bangbh 6:ca8405b9564d 55 int size = eth->wait_writeable(_sock_fd, _blocking ? -1 : _timeout);
bangbh 6:ca8405b9564d 56 if (size < 0) {
bangbh 6:ca8405b9564d 57 return -1;
bangbh 6:ca8405b9564d 58 }
bangbh 6:ca8405b9564d 59 if (size > length) {
bangbh 6:ca8405b9564d 60 size = length;
bangbh 6:ca8405b9564d 61 }
bangbh 6:ca8405b9564d 62 return eth->send(_sock_fd, data, size);
bangbh 6:ca8405b9564d 63 }
bangbh 6:ca8405b9564d 64
bangbh 6:ca8405b9564d 65 // -1 if unsuccessful, else number of bytes written
bangbh 6:ca8405b9564d 66 int TCPSocketConnection::send_all(char* data, int length)
bangbh 6:ca8405b9564d 67 {
bangbh 6:ca8405b9564d 68 int writtenLen = 0;
bangbh 6:ca8405b9564d 69 while (writtenLen < length) {
bangbh 6:ca8405b9564d 70 int size = eth->wait_writeable(_sock_fd, _blocking ? -1 : _timeout);
bangbh 6:ca8405b9564d 71 if (size < 0) {
bangbh 6:ca8405b9564d 72 return -1;
bangbh 6:ca8405b9564d 73 }
bangbh 6:ca8405b9564d 74 if (size > (length-writtenLen)) {
bangbh 6:ca8405b9564d 75 size = (length-writtenLen);
bangbh 6:ca8405b9564d 76 }
bangbh 6:ca8405b9564d 77 int ret = eth->send(_sock_fd, data + writtenLen, size);
bangbh 6:ca8405b9564d 78 if (ret < 0) {
bangbh 6:ca8405b9564d 79 return -1;
bangbh 6:ca8405b9564d 80 }
bangbh 6:ca8405b9564d 81 writtenLen += ret;
bangbh 6:ca8405b9564d 82 }
bangbh 6:ca8405b9564d 83 return writtenLen;
bangbh 6:ca8405b9564d 84 }
bangbh 6:ca8405b9564d 85
bangbh 6:ca8405b9564d 86 // -1 if unsuccessful, else number of bytes received
bangbh 6:ca8405b9564d 87 int TCPSocketConnection::receive(char* data, int length)
bangbh 6:ca8405b9564d 88 {
bangbh 6:ca8405b9564d 89 int size = eth->wait_readable(_sock_fd, _blocking ? -1 : _timeout);
bangbh 6:ca8405b9564d 90 if (size < 0) {
bangbh 6:ca8405b9564d 91 return -1;
bangbh 6:ca8405b9564d 92 }
bangbh 6:ca8405b9564d 93 if (size > length) {
bangbh 6:ca8405b9564d 94 size = length;
bangbh 6:ca8405b9564d 95 }
bangbh 6:ca8405b9564d 96 return eth->recv(_sock_fd, data, size);
bangbh 6:ca8405b9564d 97 }
bangbh 6:ca8405b9564d 98
bangbh 6:ca8405b9564d 99 // -1 if unsuccessful, else number of bytes received
bangbh 6:ca8405b9564d 100 int TCPSocketConnection::receive_all(char* data, int length)
bangbh 6:ca8405b9564d 101 {
bangbh 6:ca8405b9564d 102 int readLen = 0;
bangbh 6:ca8405b9564d 103 while (readLen < length) {
bangbh 6:ca8405b9564d 104 int size = eth->wait_readable(_sock_fd, _blocking ? -1 :_timeout);
bangbh 6:ca8405b9564d 105 if (size <= 0) {
bangbh 6:ca8405b9564d 106 break;
bangbh 6:ca8405b9564d 107 }
bangbh 6:ca8405b9564d 108 if (size > (length - readLen)) {
bangbh 6:ca8405b9564d 109 size = length - readLen;
bangbh 6:ca8405b9564d 110 }
bangbh 6:ca8405b9564d 111 int ret = eth->recv(_sock_fd, data + readLen, size);
bangbh 6:ca8405b9564d 112 if (ret < 0) {
bangbh 6:ca8405b9564d 113 return -1;
bangbh 6:ca8405b9564d 114 }
bangbh 6:ca8405b9564d 115 readLen += ret;
bangbh 6:ca8405b9564d 116 }
bangbh 6:ca8405b9564d 117 return readLen;
bangbh 6:ca8405b9564d 118 }
bangbh 6:ca8405b9564d 119