MQTT client test with W5200 ethernet shield
Dependents: IBMIoTClientEthernetExample_W5200
Fork of W5500Interface by
Socket/Socket.cpp
- Committer:
- hjjeon
- Date:
- 2014-10-15
- Revision:
- 9:dfffa4d6f022
- Parent:
- 4:af0ed4fbca02
- Child:
- 10:713b6d2aaefb
File content as of revision 9:dfffa4d6f022:
/* Copyright (C) 2012 mbed.org, MIT License * * 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. */ #include "Socket.h" static uint16_t sock_any_port = SOCK_ANY_PORT_NUM; Socket::Socket() : _sock_fd(-1),_blocking(true), _timeout(1500) { eth = WIZnet_Chip::getInstance(); if (eth == NULL) { error("Socket constructor error: no W5500 instance available!\r\n"); } } void Socket::set_blocking(bool blocking, unsigned int timeout) { _blocking = blocking; _timeout = timeout; } int Socket::close() { // add this code refer from EthernetInterface. // update by Patrick Pollet int res; res = eth->close(_sock_fd); _sock_fd = -1; return (res)? 0: -1; } Socket::~Socket() { close(); //Don't want to leak } int8_t Socket::Socket_macraw(uint8_t sn, uint16_t port, uint8_t flag) { //CHECK_SOCKNUM(); if((flag & 0x06) != 0) return SOCKERR_SOCKFLAG; eth->close(sn); eth->setSn_MR(sn, (Sn_MR_MACRAW | (flag & 0xF0))); if(!port) { port = sock_any_port++; if(sock_any_port == 0xFFF0) sock_any_port = SOCK_ANY_PORT_NUM; } eth->setSn_PORT(sn,port); eth->setSn_CR(sn,Sn_CR_OPEN); while(eth->getSn_CR(sn)); //sock_io_mode |= ((flag & SF_IO_NONBLOCK) << sn); //sock_is_sending &= ~(1<<sn); //sock_remained_size[sn] = 0; //sock_pack_info[sn] = 0; while(eth->getSn_SR(sn) == SOCK_CLOSED); return (int8_t)sn; } /* int8_t Socket::close(uint8_t sn) { //CHECK_SOCKNUM(); eth->setSn_CR(sn,Sn_CR_CLOSE); // wait to process the command... while( eth->getSn_CR(sn) ); // clear all interrupt of the socket. eth->setSn_IR(sn, 0xFF); //sock_is_sending &= ~(1<<sn); //sock_remained_size[sn] = 0; //sock_pack_info[sn] = 0; while(eth->getSn_SR(sn) != SOCK_CLOSED); return SOCK_OK; } */