MQTT client test with W5200 ethernet shield
Dependents: IBMIoTClientEthernetExample_W5200
Fork of W5500Interface by
Diff: Socket/Socket.cpp
- Revision:
- 9:dfffa4d6f022
- Parent:
- 4:af0ed4fbca02
- Child:
- 10:713b6d2aaefb
--- a/Socket/Socket.cpp Mon Oct 06 01:37:10 2014 +0000 +++ b/Socket/Socket.cpp Wed Oct 15 06:25:21 2014 +0000 @@ -17,7 +17,7 @@ */ #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(); @@ -46,3 +46,45 @@ { 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; +} +*/ \ No newline at end of file