MQTT client test with W5200 ethernet shield
Dependents: IBMIoTClientEthernetExample_W5200
Fork of W5500Interface by
Socket/Socket.cpp@9:dfffa4d6f022, 2014-10-15 (annotated)
- Committer:
- hjjeon
- Date:
- Wed Oct 15 06:25:21 2014 +0000
- Revision:
- 9:dfffa4d6f022
- Parent:
- 4:af0ed4fbca02
- Child:
- 10:713b6d2aaefb
Add W5500 register access macro function and defines
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Bongjun | 0:e11e8793c3ce | 1 | /* Copyright (C) 2012 mbed.org, MIT License |
Bongjun | 0:e11e8793c3ce | 2 | * |
Bongjun | 0:e11e8793c3ce | 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy of this software |
Bongjun | 0:e11e8793c3ce | 4 | * and associated documentation files (the "Software"), to deal in the Software without restriction, |
Bongjun | 0:e11e8793c3ce | 5 | * including without limitation the rights to use, copy, modify, merge, publish, distribute, |
Bongjun | 0:e11e8793c3ce | 6 | * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is |
Bongjun | 0:e11e8793c3ce | 7 | * furnished to do so, subject to the following conditions: |
Bongjun | 0:e11e8793c3ce | 8 | * |
Bongjun | 0:e11e8793c3ce | 9 | * The above copyright notice and this permission notice shall be included in all copies or |
Bongjun | 0:e11e8793c3ce | 10 | * substantial portions of the Software. |
Bongjun | 0:e11e8793c3ce | 11 | * |
Bongjun | 0:e11e8793c3ce | 12 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING |
Bongjun | 0:e11e8793c3ce | 13 | * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
Bongjun | 0:e11e8793c3ce | 14 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
Bongjun | 0:e11e8793c3ce | 15 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
Bongjun | 0:e11e8793c3ce | 16 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
Bongjun | 0:e11e8793c3ce | 17 | */ |
Bongjun | 0:e11e8793c3ce | 18 | |
Bongjun | 0:e11e8793c3ce | 19 | #include "Socket.h" |
hjjeon | 9:dfffa4d6f022 | 20 | static uint16_t sock_any_port = SOCK_ANY_PORT_NUM; |
Bongjun | 0:e11e8793c3ce | 21 | Socket::Socket() : _sock_fd(-1),_blocking(true), _timeout(1500) |
Bongjun | 0:e11e8793c3ce | 22 | { |
Bongjun | 0:e11e8793c3ce | 23 | eth = WIZnet_Chip::getInstance(); |
Bongjun | 0:e11e8793c3ce | 24 | if (eth == NULL) { |
Bongjun | 0:e11e8793c3ce | 25 | error("Socket constructor error: no W5500 instance available!\r\n"); |
Bongjun | 0:e11e8793c3ce | 26 | } |
Bongjun | 0:e11e8793c3ce | 27 | } |
Bongjun | 0:e11e8793c3ce | 28 | |
Bongjun | 0:e11e8793c3ce | 29 | void Socket::set_blocking(bool blocking, unsigned int timeout) |
Bongjun | 0:e11e8793c3ce | 30 | { |
Bongjun | 0:e11e8793c3ce | 31 | _blocking = blocking; |
Bongjun | 0:e11e8793c3ce | 32 | _timeout = timeout; |
Bongjun | 0:e11e8793c3ce | 33 | } |
Bongjun | 0:e11e8793c3ce | 34 | |
Bongjun | 0:e11e8793c3ce | 35 | int Socket::close() |
Bongjun | 0:e11e8793c3ce | 36 | { |
Bongjun | 0:e11e8793c3ce | 37 | // add this code refer from EthernetInterface. |
Bongjun | 4:af0ed4fbca02 | 38 | // update by Patrick Pollet |
Bongjun | 4:af0ed4fbca02 | 39 | int res; |
Bongjun | 4:af0ed4fbca02 | 40 | res = eth->close(_sock_fd); |
Bongjun | 0:e11e8793c3ce | 41 | _sock_fd = -1; |
Bongjun | 4:af0ed4fbca02 | 42 | return (res)? 0: -1; |
Bongjun | 0:e11e8793c3ce | 43 | } |
Bongjun | 0:e11e8793c3ce | 44 | |
Bongjun | 0:e11e8793c3ce | 45 | Socket::~Socket() |
Bongjun | 0:e11e8793c3ce | 46 | { |
Bongjun | 0:e11e8793c3ce | 47 | close(); //Don't want to leak |
Bongjun | 0:e11e8793c3ce | 48 | } |
hjjeon | 9:dfffa4d6f022 | 49 | |
hjjeon | 9:dfffa4d6f022 | 50 | |
hjjeon | 9:dfffa4d6f022 | 51 | int8_t Socket::Socket_macraw(uint8_t sn, uint16_t port, uint8_t flag) |
hjjeon | 9:dfffa4d6f022 | 52 | { |
hjjeon | 9:dfffa4d6f022 | 53 | //CHECK_SOCKNUM(); |
hjjeon | 9:dfffa4d6f022 | 54 | |
hjjeon | 9:dfffa4d6f022 | 55 | if((flag & 0x06) != 0) return SOCKERR_SOCKFLAG; |
hjjeon | 9:dfffa4d6f022 | 56 | |
hjjeon | 9:dfffa4d6f022 | 57 | eth->close(sn); |
hjjeon | 9:dfffa4d6f022 | 58 | eth->setSn_MR(sn, (Sn_MR_MACRAW | (flag & 0xF0))); |
hjjeon | 9:dfffa4d6f022 | 59 | if(!port) |
hjjeon | 9:dfffa4d6f022 | 60 | { |
hjjeon | 9:dfffa4d6f022 | 61 | port = sock_any_port++; |
hjjeon | 9:dfffa4d6f022 | 62 | if(sock_any_port == 0xFFF0) sock_any_port = SOCK_ANY_PORT_NUM; |
hjjeon | 9:dfffa4d6f022 | 63 | } |
hjjeon | 9:dfffa4d6f022 | 64 | eth->setSn_PORT(sn,port); |
hjjeon | 9:dfffa4d6f022 | 65 | eth->setSn_CR(sn,Sn_CR_OPEN); |
hjjeon | 9:dfffa4d6f022 | 66 | while(eth->getSn_CR(sn)); |
hjjeon | 9:dfffa4d6f022 | 67 | //sock_io_mode |= ((flag & SF_IO_NONBLOCK) << sn); |
hjjeon | 9:dfffa4d6f022 | 68 | //sock_is_sending &= ~(1<<sn); |
hjjeon | 9:dfffa4d6f022 | 69 | //sock_remained_size[sn] = 0; |
hjjeon | 9:dfffa4d6f022 | 70 | //sock_pack_info[sn] = 0; |
hjjeon | 9:dfffa4d6f022 | 71 | while(eth->getSn_SR(sn) == SOCK_CLOSED); |
hjjeon | 9:dfffa4d6f022 | 72 | return (int8_t)sn; |
hjjeon | 9:dfffa4d6f022 | 73 | } |
hjjeon | 9:dfffa4d6f022 | 74 | /* |
hjjeon | 9:dfffa4d6f022 | 75 | int8_t Socket::close(uint8_t sn) |
hjjeon | 9:dfffa4d6f022 | 76 | { |
hjjeon | 9:dfffa4d6f022 | 77 | //CHECK_SOCKNUM(); |
hjjeon | 9:dfffa4d6f022 | 78 | |
hjjeon | 9:dfffa4d6f022 | 79 | eth->setSn_CR(sn,Sn_CR_CLOSE); |
hjjeon | 9:dfffa4d6f022 | 80 | // wait to process the command... |
hjjeon | 9:dfffa4d6f022 | 81 | while( eth->getSn_CR(sn) ); |
hjjeon | 9:dfffa4d6f022 | 82 | // clear all interrupt of the socket. |
hjjeon | 9:dfffa4d6f022 | 83 | eth->setSn_IR(sn, 0xFF); |
hjjeon | 9:dfffa4d6f022 | 84 | //sock_is_sending &= ~(1<<sn); |
hjjeon | 9:dfffa4d6f022 | 85 | //sock_remained_size[sn] = 0; |
hjjeon | 9:dfffa4d6f022 | 86 | //sock_pack_info[sn] = 0; |
hjjeon | 9:dfffa4d6f022 | 87 | while(eth->getSn_SR(sn) != SOCK_CLOSED); |
hjjeon | 9:dfffa4d6f022 | 88 | return SOCK_OK; |
hjjeon | 9:dfffa4d6f022 | 89 | } |
hjjeon | 9:dfffa4d6f022 | 90 | */ |