add getsock(), setsock()

Fork of WIZnetInterface by IOP

Committer:
embeddist
Date:
Wed Jun 17 00:24:45 2015 +0000
Revision:
14:2101ab5ee40f
Parent:
12:99e8386ba225
- arch/int/W5500.c - fixed reset() for WIZ550io; - tested arch/in/W5500 on LPC824 / NUCLEOF103RB / FRDM-KL25Z

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Soohwan Kim 0:6f28332c466f 1 /* Copyright (C) 2012 mbed.org, MIT License
Soohwan Kim 0:6f28332c466f 2 *
Soohwan Kim 0:6f28332c466f 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
Soohwan Kim 0:6f28332c466f 4 * and associated documentation files (the "Software"), to deal in the Software without restriction,
Soohwan Kim 0:6f28332c466f 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
Soohwan Kim 0:6f28332c466f 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
Soohwan Kim 0:6f28332c466f 7 * furnished to do so, subject to the following conditions:
Soohwan Kim 0:6f28332c466f 8 *
Soohwan Kim 0:6f28332c466f 9 * The above copyright notice and this permission notice shall be included in all copies or
Soohwan Kim 0:6f28332c466f 10 * substantial portions of the Software.
Soohwan Kim 0:6f28332c466f 11 *
Soohwan Kim 0:6f28332c466f 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
Soohwan Kim 0:6f28332c466f 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Soohwan Kim 0:6f28332c466f 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
Soohwan Kim 0:6f28332c466f 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Soohwan Kim 0:6f28332c466f 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Soohwan Kim 0:6f28332c466f 17 *
Soohwan Kim 0:6f28332c466f 18 */
Soohwan Kim 0:6f28332c466f 19
Soohwan Kim 0:6f28332c466f 20 #pragma once
Soohwan Kim 0:6f28332c466f 21
Soohwan Kim 0:6f28332c466f 22 #include "mbed.h"
Soohwan Kim 0:6f28332c466f 23 #include "mbed_debug.h"
Soohwan Kim 0:6f28332c466f 24
Soohwan Kim 0:6f28332c466f 25 #define TEST_ASSERT(A) while(!(A)){debug("\n\n%s@%d %s ASSERT!\n\n",__PRETTY_FUNCTION__,__LINE__,#A);exit(1);};
Soohwan Kim 0:6f28332c466f 26
Soohwan Kim 0:6f28332c466f 27 #define DEFAULT_WAIT_RESP_TIMEOUT 500
Soohwan Kim 0:6f28332c466f 28
Soohwan Kim 4:4930f81bbe98 29 #define SOCK_ERROR 0
Soohwan Kim 4:4930f81bbe98 30 #define SOCKERR_SOCKNUM (SOCK_ERROR - 1) ///< Invalid socket number
Soohwan Kim 4:4930f81bbe98 31 #define SOCKERR_SOCKOPT (SOCK_ERROR - 2) ///< Invalid socket option
Soohwan Kim 4:4930f81bbe98 32 #define SOCKERR_SOCKINIT (SOCK_ERROR - 3) ///< Socket is not initialized
Soohwan Kim 4:4930f81bbe98 33 #define SOCKERR_SOCKCLOSED (SOCK_ERROR - 4) ///< Socket unexpectedly closed.
Soohwan Kim 4:4930f81bbe98 34 #define SOCKERR_SOCKMODE (SOCK_ERROR - 5) ///< Invalid socket mode for socket operation.
Soohwan Kim 4:4930f81bbe98 35 #define SOCKERR_SOCKFLAG (SOCK_ERROR - 6) ///< Invalid socket flag
Soohwan Kim 4:4930f81bbe98 36 #define SOCKERR_SOCKSTATUS (SOCK_ERROR - 7) ///< Invalid socket status for socket operation.
Soohwan Kim 4:4930f81bbe98 37 #define SOCKERR_ARG (SOCK_ERROR - 10) ///< Invalid argrument.
Soohwan Kim 4:4930f81bbe98 38 #define SOCKERR_PORTZERO (SOCK_ERROR - 11) ///< Port number is zero
Soohwan Kim 4:4930f81bbe98 39 #define SOCKERR_IPINVALID (SOCK_ERROR - 12) ///< Invalid IP address
Soohwan Kim 4:4930f81bbe98 40 #define SOCKERR_TIMEOUT (SOCK_ERROR - 13) ///< Timeout occurred
Soohwan Kim 4:4930f81bbe98 41 #define SOCKERR_DATALEN (SOCK_ERROR - 14) ///< Data length is zero or greater than buffer max size.
Soohwan Kim 4:4930f81bbe98 42 #define SOCKERR_BUFFER (SOCK_ERROR - 15) ///< Socket buffer is not enough for data communication.
Soohwan Kim 4:4930f81bbe98 43
Soohwan Kim 4:4930f81bbe98 44 #define SOCK_ANY_PORT_NUM 0xC000;
Soohwan Kim 4:4930f81bbe98 45
Soohwan Kim 0:6f28332c466f 46
Soohwan Kim 0:6f28332c466f 47 #define MAX_SOCK_NUM 8
Soohwan Kim 0:6f28332c466f 48
Soohwan Kim 0:6f28332c466f 49 #define MR 0x0000
Soohwan Kim 0:6f28332c466f 50 #define GAR 0x0001
Soohwan Kim 0:6f28332c466f 51 #define SUBR 0x0005
Soohwan Kim 0:6f28332c466f 52 #define SHAR 0x0009
Soohwan Kim 0:6f28332c466f 53 #define SIPR 0x000f
Soohwan Kim 4:4930f81bbe98 54 #define IR 0x0015
Soohwan Kim 4:4930f81bbe98 55 #define IMR 0x0016
Soohwan Kim 4:4930f81bbe98 56 #define SIR 0x0017
Soohwan Kim 4:4930f81bbe98 57 #define SIMR 0x0018
Soohwan Kim 4:4930f81bbe98 58 #define RTR 0x0019
Soohwan Kim 4:4930f81bbe98 59 #define RCR 0x001b
Soohwan Kim 4:4930f81bbe98 60 #define UIPR 0x0028
Soohwan Kim 4:4930f81bbe98 61 #define UPORTR 0x002c
Soohwan Kim 4:4930f81bbe98 62 #define PHYCFGR 0x002e
Soohwan Kim 0:6f28332c466f 63
Soohwan Kim 0:6f28332c466f 64 // W5500 socket register
Soohwan Kim 0:6f28332c466f 65 #define Sn_MR 0x0000
Soohwan Kim 0:6f28332c466f 66 #define Sn_CR 0x0001
Soohwan Kim 0:6f28332c466f 67 #define Sn_IR 0x0002
Soohwan Kim 0:6f28332c466f 68 #define Sn_SR 0x0003
Soohwan Kim 0:6f28332c466f 69 #define Sn_PORT 0x0004
Soohwan Kim 4:4930f81bbe98 70 #define Sn_DHAR 0x0006
Soohwan Kim 0:6f28332c466f 71 #define Sn_DIPR 0x000c
Soohwan Kim 0:6f28332c466f 72 #define Sn_DPORT 0x0010
Soohwan Kim 0:6f28332c466f 73 #define Sn_RXBUF_SIZE 0x001e
Soohwan Kim 0:6f28332c466f 74 #define Sn_TXBUF_SIZE 0x001f
Soohwan Kim 0:6f28332c466f 75 #define Sn_TX_FSR 0x0020
Soohwan Kim 4:4930f81bbe98 76 #define Sn_TX_RD 0x0022
Soohwan Kim 0:6f28332c466f 77 #define Sn_TX_WR 0x0024
Soohwan Kim 0:6f28332c466f 78 #define Sn_RX_RSR 0x0026
Soohwan Kim 0:6f28332c466f 79 #define Sn_RX_RD 0x0028
Soohwan Kim 4:4930f81bbe98 80 #define Sn_RX_WR 0x002a
Soohwan Kim 4:4930f81bbe98 81 #define Sn_IMR 0x002c
Soohwan Kim 4:4930f81bbe98 82
Soohwan Kim 4:4930f81bbe98 83
Soohwan Kim 4:4930f81bbe98 84 //Define for Socket Command register option value
Soohwan Kim 4:4930f81bbe98 85 #define Sn_CR_OPEN 0x01
Soohwan Kim 4:4930f81bbe98 86 #define Sn_CR_LISTEN 0x02
Soohwan Kim 4:4930f81bbe98 87 #define Sn_CR_CONNECT 0x04
Soohwan Kim 4:4930f81bbe98 88 #define Sn_CR_DISCON 0x08
Soohwan Kim 4:4930f81bbe98 89 #define Sn_CR_CLOSE 0x10
Soohwan Kim 4:4930f81bbe98 90 #define Sn_CR_SEND 0x20
Soohwan Kim 4:4930f81bbe98 91 #define Sn_CR_SEND_MAC 0x21
Soohwan Kim 4:4930f81bbe98 92 #define Sn_CR_SEND_KEEP 0x22
Soohwan Kim 4:4930f81bbe98 93 #define Sn_CR_RECV 0x40
Soohwan Kim 4:4930f81bbe98 94
Soohwan Kim 4:4930f81bbe98 95
Soohwan Kim 4:4930f81bbe98 96 //Define for Socket Mode register option value
Soohwan Kim 4:4930f81bbe98 97 #define Sn_MR_CLOSE 0x00
Soohwan Kim 4:4930f81bbe98 98 #define Sn_MR_TCP 0x01
Soohwan Kim 4:4930f81bbe98 99 #define Sn_MR_UDP 0x02
Soohwan Kim 4:4930f81bbe98 100 #define Sn_MR_MACRAW 0x04
Soohwan Kim 4:4930f81bbe98 101 #define Sn_MR_UCASTB 0x10
Soohwan Kim 4:4930f81bbe98 102 #define Sn_MR_ND 0x20
Soohwan Kim 4:4930f81bbe98 103 #define Sn_MR_BCASTB 0x40
Soohwan Kim 4:4930f81bbe98 104 #define Sn_MR_MULTI 0x80
Soohwan Kim 4:4930f81bbe98 105
Soohwan Kim 4:4930f81bbe98 106 #define Sn_IR_SENDOK 0x10
Soohwan Kim 4:4930f81bbe98 107
Soohwan Kim 4:4930f81bbe98 108 //Sn_IR values
Soohwan Kim 4:4930f81bbe98 109
Soohwan Kim 4:4930f81bbe98 110 #define Sn_IR_TIMEOUT 0x08
Soohwan Kim 4:4930f81bbe98 111 #define Sn_IR_RECV 0x04
Soohwan Kim 4:4930f81bbe98 112 #define Sn_IR_DISCON 0x02
Soohwan Kim 4:4930f81bbe98 113 #define Sn_IR_CON 0x01
Soohwan Kim 4:4930f81bbe98 114
Soohwan Kim 4:4930f81bbe98 115 /* PHYCFGR register value */
Soohwan Kim 4:4930f81bbe98 116 #define PHYCFGR_RST ~(1<<7) //< For PHY reset, must operate AND mask.
Soohwan Kim 4:4930f81bbe98 117 #define PHYCFGR_OPMD (1<<6) // Configre PHY with OPMDC value
Soohwan Kim 4:4930f81bbe98 118 #define PHYCFGR_OPMDC_ALLA (7<<3)
Soohwan Kim 4:4930f81bbe98 119 #define PHYCFGR_OPMDC_PDOWN (6<<3)
Soohwan Kim 4:4930f81bbe98 120 #define PHYCFGR_OPMDC_NA (5<<3)
Soohwan Kim 4:4930f81bbe98 121 #define PHYCFGR_OPMDC_100FA (4<<3)
Soohwan Kim 4:4930f81bbe98 122 #define PHYCFGR_OPMDC_100F (3<<3)
Soohwan Kim 4:4930f81bbe98 123 #define PHYCFGR_OPMDC_100H (2<<3)
Soohwan Kim 4:4930f81bbe98 124 #define PHYCFGR_OPMDC_10F (1<<3)
Soohwan Kim 4:4930f81bbe98 125 #define PHYCFGR_OPMDC_10H (0<<3)
Soohwan Kim 4:4930f81bbe98 126 #define PHYCFGR_DPX_FULL (1<<2)
Soohwan Kim 4:4930f81bbe98 127 #define PHYCFGR_DPX_HALF (0<<2)
Soohwan Kim 4:4930f81bbe98 128 #define PHYCFGR_SPD_100 (1<<1)
Soohwan Kim 4:4930f81bbe98 129 #define PHYCFGR_SPD_10 (0<<1)
Soohwan Kim 4:4930f81bbe98 130 #define PHYCFGR_LNK_ON (1<<0)
Soohwan Kim 4:4930f81bbe98 131 #define PHYCFGR_LNK_OFF (0<<0)
Soohwan Kim 4:4930f81bbe98 132
Soohwan Kim 4:4930f81bbe98 133 //PHY status define
Soohwan Kim 4:4930f81bbe98 134 #define PHY_CONFBY_HW 0 ///< Configured PHY operation mode by HW pin
Soohwan Kim 4:4930f81bbe98 135 #define PHY_CONFBY_SW 1 ///< Configured PHY operation mode by SW register
Soohwan Kim 4:4930f81bbe98 136 #define PHY_MODE_MANUAL 0 ///< Configured PHY operation mode with user setting.
Soohwan Kim 4:4930f81bbe98 137 #define PHY_MODE_AUTONEGO 1 ///< Configured PHY operation mode with auto-negotiation
Soohwan Kim 4:4930f81bbe98 138 #define PHY_SPEED_10 0 ///< Link Speed 10
Soohwan Kim 4:4930f81bbe98 139 #define PHY_SPEED_100 1 ///< Link Speed 100
Soohwan Kim 4:4930f81bbe98 140 #define PHY_DUPLEX_HALF 0 ///< Link Half-Duplex
Soohwan Kim 4:4930f81bbe98 141 #define PHY_DUPLEX_FULL 1 ///< Link Full-Duplex
Soohwan Kim 4:4930f81bbe98 142 #define PHY_LINK_OFF 0 ///< Link Off
Soohwan Kim 4:4930f81bbe98 143 #define PHY_LINK_ON 1 ///< Link On
Soohwan Kim 4:4930f81bbe98 144 #define PHY_POWER_NORM 0 ///< PHY power normal mode
Soohwan Kim 4:4930f81bbe98 145 #define PHY_POWER_DOWN 1 ///< PHY power down mode
Soohwan Kim 0:6f28332c466f 146
Soohwan Kim 8:4c02de1dbf3a 147 enum PHYMode {
Soohwan Kim 8:4c02de1dbf3a 148 AutoNegotiate = 0,
Soohwan Kim 8:4c02de1dbf3a 149 HalfDuplex10 = 1,
Soohwan Kim 8:4c02de1dbf3a 150 FullDuplex10 = 2,
Soohwan Kim 8:4c02de1dbf3a 151 HalfDuplex100 = 3,
Soohwan Kim 8:4c02de1dbf3a 152 FullDuplex100 = 4,
Soohwan Kim 8:4c02de1dbf3a 153 };
Soohwan Kim 0:6f28332c466f 154 class WIZnet_Chip {
Soohwan Kim 0:6f28332c466f 155 public:
embeddist 3:f8c6efc8bf83 156 enum Protocol {
embeddist 3:f8c6efc8bf83 157 CLOSED = 0,
embeddist 3:f8c6efc8bf83 158 TCP = 1,
embeddist 3:f8c6efc8bf83 159 UDP = 2,
embeddist 3:f8c6efc8bf83 160 };
embeddist 3:f8c6efc8bf83 161
embeddist 3:f8c6efc8bf83 162 enum Command {
embeddist 3:f8c6efc8bf83 163 OPEN = 0x01,
embeddist 3:f8c6efc8bf83 164 LISTEN = 0x02,
embeddist 3:f8c6efc8bf83 165 CONNECT = 0x04,
embeddist 3:f8c6efc8bf83 166 DISCON = 0x08,
embeddist 3:f8c6efc8bf83 167 CLOSE = 0x10,
embeddist 3:f8c6efc8bf83 168 SEND = 0x20,
embeddist 3:f8c6efc8bf83 169 SEND_MAC = 0x21,
embeddist 3:f8c6efc8bf83 170 SEND_KEEP = 0x22,
embeddist 3:f8c6efc8bf83 171 RECV = 0x40,
embeddist 3:f8c6efc8bf83 172
embeddist 3:f8c6efc8bf83 173 };
embeddist 3:f8c6efc8bf83 174
embeddist 3:f8c6efc8bf83 175 enum Interrupt {
embeddist 3:f8c6efc8bf83 176 INT_CON = 0x01,
embeddist 3:f8c6efc8bf83 177 INT_DISCON = 0x02,
embeddist 3:f8c6efc8bf83 178 INT_RECV = 0x04,
embeddist 3:f8c6efc8bf83 179 INT_TIMEOUT = 0x08,
embeddist 3:f8c6efc8bf83 180 INT_SEND_OK = 0x10,
embeddist 3:f8c6efc8bf83 181 };
embeddist 3:f8c6efc8bf83 182
Soohwan Kim 5:f432ae8f8708 183 enum Status {
Soohwan Kim 5:f432ae8f8708 184 SOCK_CLOSED = 0x00,
Soohwan Kim 5:f432ae8f8708 185 SOCK_INIT = 0x13,
Soohwan Kim 5:f432ae8f8708 186 SOCK_LISTEN = 0x14,
Soohwan Kim 5:f432ae8f8708 187 SOCK_SYNSENT = 0x15,
Soohwan Kim 5:f432ae8f8708 188 SOCK_ESTABLISHED = 0x17,
Soohwan Kim 5:f432ae8f8708 189 SOCK_CLOSE_WAIT = 0x1c,
Soohwan Kim 5:f432ae8f8708 190 SOCK_UDP = 0x22,
Soohwan Kim 5:f432ae8f8708 191 };
Soohwan Kim 5:f432ae8f8708 192
Soohwan Kim 4:4930f81bbe98 193
Soohwan Kim 4:4930f81bbe98 194 uint16_t sock_any_port;
Soohwan Kim 4:4930f81bbe98 195
Soohwan Kim 0:6f28332c466f 196 /*
Soohwan Kim 0:6f28332c466f 197 * Constructor
Soohwan Kim 0:6f28332c466f 198 *
Soohwan Kim 0:6f28332c466f 199 * @param spi spi class
Soohwan Kim 0:6f28332c466f 200 * @param cs cs of the W5500
Soohwan Kim 0:6f28332c466f 201 * @param reset reset pin of the W5500
Soohwan Kim 0:6f28332c466f 202 */
Soohwan Kim 4:4930f81bbe98 203 WIZnet_Chip(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset);
Soohwan Kim 4:4930f81bbe98 204 WIZnet_Chip(SPI* spi, PinName cs, PinName reset);
Soohwan Kim 0:6f28332c466f 205
Soohwan Kim 0:6f28332c466f 206 /*
Soohwan Kim 4:4930f81bbe98 207 * Set MAC Address to W5500
Soohwan Kim 4:4930f81bbe98 208 *
Soohwan Kim 4:4930f81bbe98 209 * @return true if connected, false otherwise
Soohwan Kim 4:4930f81bbe98 210 */
Soohwan Kim 4:4930f81bbe98 211 bool setmac();
Soohwan Kim 4:4930f81bbe98 212
Soohwan Kim 4:4930f81bbe98 213 /*
Soohwan Kim 4:4930f81bbe98 214 * Set Network Informations (SrcIP, Netmask, Gataway)
Soohwan Kim 0:6f28332c466f 215 *
Soohwan Kim 0:6f28332c466f 216 * @return true if connected, false otherwise
Soohwan Kim 0:6f28332c466f 217 */
Soohwan Kim 0:6f28332c466f 218 bool setip();
Soohwan Kim 0:6f28332c466f 219
Soohwan Kim 0:6f28332c466f 220 /*
Soohwan Kim 0:6f28332c466f 221 * Disconnect the connection
Soohwan Kim 0:6f28332c466f 222 *
Soohwan Kim 0:6f28332c466f 223 * @ returns true
Soohwan Kim 0:6f28332c466f 224 */
Soohwan Kim 0:6f28332c466f 225 bool disconnect();
Soohwan Kim 0:6f28332c466f 226
Soohwan Kim 0:6f28332c466f 227 /*
Soohwan Kim 0:6f28332c466f 228 * Open a tcp connection with the specified host on the specified port
Soohwan Kim 0:6f28332c466f 229 *
Soohwan Kim 0:6f28332c466f 230 * @param host host (can be either an ip address or a name. If a name is provided, a dns request will be established)
Soohwan Kim 0:6f28332c466f 231 * @param port port
Soohwan Kim 0:6f28332c466f 232 * @ returns true if successful
Soohwan Kim 0:6f28332c466f 233 */
Soohwan Kim 0:6f28332c466f 234 bool connect(int socket, const char * host, int port, int timeout_ms = 10*1000);
Soohwan Kim 0:6f28332c466f 235
Soohwan Kim 0:6f28332c466f 236 /*
Soohwan Kim 0:6f28332c466f 237 * Set the protocol (UDP or TCP)
Soohwan Kim 0:6f28332c466f 238 *
Soohwan Kim 0:6f28332c466f 239 * @param p protocol
Soohwan Kim 0:6f28332c466f 240 * @ returns true if successful
Soohwan Kim 0:6f28332c466f 241 */
Soohwan Kim 0:6f28332c466f 242 bool setProtocol(int socket, Protocol p);
Soohwan Kim 0:6f28332c466f 243
Soohwan Kim 0:6f28332c466f 244 /*
Soohwan Kim 0:6f28332c466f 245 * Reset the W5500
Soohwan Kim 0:6f28332c466f 246 */
Soohwan Kim 0:6f28332c466f 247 void reset();
Soohwan Kim 0:6f28332c466f 248
Soohwan Kim 0:6f28332c466f 249 int wait_readable(int socket, int wait_time_ms, int req_size = 0);
Soohwan Kim 0:6f28332c466f 250
Soohwan Kim 0:6f28332c466f 251 int wait_writeable(int socket, int wait_time_ms, int req_size = 0);
Soohwan Kim 0:6f28332c466f 252
Soohwan Kim 0:6f28332c466f 253 /*
Soohwan Kim 8:4c02de1dbf3a 254 * Check if an ethernet link is pressent or not.
Soohwan Kim 8:4c02de1dbf3a 255 *
Soohwan Kim 8:4c02de1dbf3a 256 * @returns true if successful
Soohwan Kim 8:4c02de1dbf3a 257 */
Soohwan Kim 8:4c02de1dbf3a 258 bool link(int wait_time_ms= 3*1000);
Soohwan Kim 8:4c02de1dbf3a 259
Soohwan Kim 8:4c02de1dbf3a 260 /*
Soohwan Kim 8:4c02de1dbf3a 261 * Sets the speed and duplex parameters of an ethernet link.
Soohwan Kim 8:4c02de1dbf3a 262 *
Soohwan Kim 8:4c02de1dbf3a 263 * @returns true if successful
Soohwan Kim 8:4c02de1dbf3a 264 */
Soohwan Kim 8:4c02de1dbf3a 265 void set_link(PHYMode phymode);
Soohwan Kim 8:4c02de1dbf3a 266
Soohwan Kim 8:4c02de1dbf3a 267 /*
Soohwan Kim 0:6f28332c466f 268 * Check if a tcp link is active
Soohwan Kim 0:6f28332c466f 269 *
Soohwan Kim 0:6f28332c466f 270 * @returns true if successful
Soohwan Kim 0:6f28332c466f 271 */
Soohwan Kim 0:6f28332c466f 272 bool is_connected(int socket);
Soohwan Kim 0:6f28332c466f 273
Soohwan Kim 0:6f28332c466f 274 /*
Soohwan Kim 0:6f28332c466f 275 * Close a tcp connection
Soohwan Kim 0:6f28332c466f 276 *
Soohwan Kim 0:6f28332c466f 277 * @ returns true if successful
Soohwan Kim 0:6f28332c466f 278 */
Soohwan Kim 0:6f28332c466f 279 bool close(int socket);
Soohwan Kim 0:6f28332c466f 280
Soohwan Kim 0:6f28332c466f 281 /*
Soohwan Kim 0:6f28332c466f 282 * @param str string to be sent
Soohwan Kim 0:6f28332c466f 283 * @param len string length
Soohwan Kim 0:6f28332c466f 284 */
Soohwan Kim 0:6f28332c466f 285 int send(int socket, const char * str, int len);
Soohwan Kim 0:6f28332c466f 286
Soohwan Kim 0:6f28332c466f 287 int recv(int socket, char* buf, int len);
Soohwan Kim 0:6f28332c466f 288
Soohwan Kim 0:6f28332c466f 289 /*
Soohwan Kim 0:6f28332c466f 290 * Return true if the module is using dhcp
Soohwan Kim 0:6f28332c466f 291 *
Soohwan Kim 0:6f28332c466f 292 * @returns true if the module is using dhcp
Soohwan Kim 0:6f28332c466f 293 */
Soohwan Kim 0:6f28332c466f 294 bool isDHCP() {
Soohwan Kim 0:6f28332c466f 295 return dhcp;
Soohwan Kim 0:6f28332c466f 296 }
Soohwan Kim 0:6f28332c466f 297
Soohwan Kim 0:6f28332c466f 298 bool gethostbyname(const char* host, uint32_t* ip);
Soohwan Kim 0:6f28332c466f 299
Soohwan Kim 0:6f28332c466f 300 static WIZnet_Chip * getInstance() {
Soohwan Kim 0:6f28332c466f 301 return inst;
Soohwan Kim 0:6f28332c466f 302 };
Soohwan Kim 0:6f28332c466f 303
Soohwan Kim 0:6f28332c466f 304 int new_socket();
Soohwan Kim 0:6f28332c466f 305 uint16_t new_port();
Soohwan Kim 0:6f28332c466f 306 void scmd(int socket, Command cmd);
Soohwan Kim 0:6f28332c466f 307
Soohwan Kim 0:6f28332c466f 308 template<typename T>
Soohwan Kim 0:6f28332c466f 309 void sreg(int socket, uint16_t addr, T data) {
Soohwan Kim 0:6f28332c466f 310 reg_wr<T>(addr, (0x0C + (socket << 5)), data);
Soohwan Kim 0:6f28332c466f 311 }
Soohwan Kim 0:6f28332c466f 312
Soohwan Kim 0:6f28332c466f 313 template<typename T>
Soohwan Kim 0:6f28332c466f 314 T sreg(int socket, uint16_t addr) {
Soohwan Kim 0:6f28332c466f 315 return reg_rd<T>(addr, (0x08 + (socket << 5)));
Soohwan Kim 0:6f28332c466f 316 }
Soohwan Kim 0:6f28332c466f 317
Soohwan Kim 0:6f28332c466f 318 template<typename T>
Soohwan Kim 0:6f28332c466f 319 void reg_wr(uint16_t addr, T data) {
Soohwan Kim 0:6f28332c466f 320 return reg_wr(addr, 0x04, data);
Soohwan Kim 0:6f28332c466f 321 }
Soohwan Kim 0:6f28332c466f 322
Soohwan Kim 0:6f28332c466f 323 template<typename T>
Soohwan Kim 0:6f28332c466f 324 void reg_wr(uint16_t addr, uint8_t cb, T data) {
Soohwan Kim 0:6f28332c466f 325 uint8_t buf[sizeof(T)];
Soohwan Kim 0:6f28332c466f 326 *reinterpret_cast<T*>(buf) = data;
Soohwan Kim 0:6f28332c466f 327 for(int i = 0; i < sizeof(buf)/2; i++) { // Little Endian to Big Endian
Soohwan Kim 0:6f28332c466f 328 uint8_t t = buf[i];
Soohwan Kim 0:6f28332c466f 329 buf[i] = buf[sizeof(buf)-1-i];
Soohwan Kim 0:6f28332c466f 330 buf[sizeof(buf)-1-i] = t;
Soohwan Kim 0:6f28332c466f 331 }
Soohwan Kim 0:6f28332c466f 332 spi_write(addr, cb, buf, sizeof(buf));
Soohwan Kim 0:6f28332c466f 333 }
Soohwan Kim 0:6f28332c466f 334
Soohwan Kim 0:6f28332c466f 335 template<typename T>
Soohwan Kim 0:6f28332c466f 336 T reg_rd(uint16_t addr) {
Soohwan Kim 0:6f28332c466f 337 return reg_rd<T>(addr, 0x00);
Soohwan Kim 0:6f28332c466f 338 }
Soohwan Kim 0:6f28332c466f 339
Soohwan Kim 0:6f28332c466f 340 template<typename T>
Soohwan Kim 0:6f28332c466f 341 T reg_rd(uint16_t addr, uint8_t cb) {
Soohwan Kim 0:6f28332c466f 342 uint8_t buf[sizeof(T)];
Soohwan Kim 0:6f28332c466f 343 spi_read(addr, cb, buf, sizeof(buf));
Soohwan Kim 0:6f28332c466f 344 for(int i = 0; i < sizeof(buf)/2; i++) { // Big Endian to Little Endian
Soohwan Kim 0:6f28332c466f 345 uint8_t t = buf[i];
Soohwan Kim 0:6f28332c466f 346 buf[i] = buf[sizeof(buf)-1-i];
Soohwan Kim 0:6f28332c466f 347 buf[sizeof(buf)-1-i] = t;
Soohwan Kim 0:6f28332c466f 348 }
Soohwan Kim 0:6f28332c466f 349 return *reinterpret_cast<T*>(buf);
Soohwan Kim 0:6f28332c466f 350 }
Soohwan Kim 0:6f28332c466f 351
embeddist 14:2101ab5ee40f 352 void reg_rd_mac(uint16_t addr, uint8_t* data);
embeddist 14:2101ab5ee40f 353 /* {
Soohwan Kim 0:6f28332c466f 354 spi_read(addr, 0x00, data, 6);
embeddist 14:2101ab5ee40f 355 }*/
Soohwan Kim 0:6f28332c466f 356
embeddist 14:2101ab5ee40f 357 void reg_wr_ip(uint16_t addr, uint8_t cb, const char* ip);
embeddist 14:2101ab5ee40f 358 /* {
Soohwan Kim 0:6f28332c466f 359 uint8_t buf[4];
Soohwan Kim 0:6f28332c466f 360 char* p = (char*)ip;
Soohwan Kim 0:6f28332c466f 361 for(int i = 0; i < 4; i++) {
Soohwan Kim 0:6f28332c466f 362 buf[i] = atoi(p);
Soohwan Kim 0:6f28332c466f 363 p = strchr(p, '.');
Soohwan Kim 0:6f28332c466f 364 if (p == NULL) {
Soohwan Kim 0:6f28332c466f 365 break;
Soohwan Kim 0:6f28332c466f 366 }
Soohwan Kim 0:6f28332c466f 367 p++;
Soohwan Kim 0:6f28332c466f 368 }
Soohwan Kim 0:6f28332c466f 369 spi_write(addr, cb, buf, sizeof(buf));
Soohwan Kim 0:6f28332c466f 370 }
embeddist 14:2101ab5ee40f 371 */
embeddist 14:2101ab5ee40f 372 void sreg_ip(int socket, uint16_t addr, const char* ip);
embeddist 14:2101ab5ee40f 373 /* {
Soohwan Kim 0:6f28332c466f 374 reg_wr_ip(addr, (0x0C + (socket << 5)), ip);
embeddist 14:2101ab5ee40f 375 }*/
Soohwan Kim 4:4930f81bbe98 376
embeddist 14:2101ab5ee40f 377 void reg_rd_ip_byte(uint16_t addr, uint8_t* data);
embeddist 14:2101ab5ee40f 378 /* {
Soohwan Kim 4:4930f81bbe98 379 spi_read(addr, 0x00, data, 4);
embeddist 14:2101ab5ee40f 380 }*/
Soohwan Kim 4:4930f81bbe98 381
embeddist 14:2101ab5ee40f 382 void reg_wr_ip_byte(uint16_t addr, uint8_t* data);
embeddist 14:2101ab5ee40f 383 /* {
Soohwan Kim 4:4930f81bbe98 384 spi_write(addr, 0x04, data, 4);
embeddist 14:2101ab5ee40f 385 }*/
Soohwan Kim 4:4930f81bbe98 386
Soohwan Kim 4:4930f81bbe98 387 /////////////////////////////////
Soohwan Kim 4:4930f81bbe98 388 // Common Register I/O function //
Soohwan Kim 4:4930f81bbe98 389 /////////////////////////////////
Soohwan Kim 4:4930f81bbe98 390 /**
Soohwan Kim 4:4930f81bbe98 391 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 392 * @brief Set Mode Register
Soohwan Kim 4:4930f81bbe98 393 * @param (uint8_t)mr The value to be set.
Soohwan Kim 4:4930f81bbe98 394 * @sa getMR()
Soohwan Kim 4:4930f81bbe98 395 */
Soohwan Kim 4:4930f81bbe98 396 void setMR(uint8_t mr) {
Soohwan Kim 4:4930f81bbe98 397 reg_wr<uint8_t>(MR,mr);
Soohwan Kim 4:4930f81bbe98 398 }
Soohwan Kim 4:4930f81bbe98 399
Soohwan Kim 4:4930f81bbe98 400
Soohwan Kim 4:4930f81bbe98 401 /**
Soohwan Kim 4:4930f81bbe98 402 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 403 * @brief Get Mode Register
Soohwan Kim 4:4930f81bbe98 404 * @return uint8_t. The value of Mode register.
Soohwan Kim 4:4930f81bbe98 405 * @sa setMR()
Soohwan Kim 4:4930f81bbe98 406 */
Soohwan Kim 4:4930f81bbe98 407 uint8_t getMR() {
Soohwan Kim 4:4930f81bbe98 408 return reg_rd<uint8_t>(MR);
Soohwan Kim 4:4930f81bbe98 409 }
Soohwan Kim 4:4930f81bbe98 410
Soohwan Kim 4:4930f81bbe98 411 /**
Soohwan Kim 4:4930f81bbe98 412 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 413 * @brief Set gateway IP address
Soohwan Kim 4:4930f81bbe98 414 * @param (uint8_t*)gar Pointer variable to set gateway IP address. It should be allocated 4 bytes.
Soohwan Kim 4:4930f81bbe98 415 * @sa getGAR()
Soohwan Kim 4:4930f81bbe98 416 */
Soohwan Kim 4:4930f81bbe98 417 void setGAR(uint8_t * gar) {
Soohwan Kim 4:4930f81bbe98 418 reg_wr_ip_byte(GAR,gar);
Soohwan Kim 4:4930f81bbe98 419 }
Soohwan Kim 4:4930f81bbe98 420
Soohwan Kim 4:4930f81bbe98 421 /**
Soohwan Kim 4:4930f81bbe98 422 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 423 * @brief Get gateway IP address
Soohwan Kim 4:4930f81bbe98 424 * @param (uint8_t*)gar Pointer variable to get gateway IP address. It should be allocated 4 bytes.
Soohwan Kim 4:4930f81bbe98 425 * @sa setGAR()
Soohwan Kim 4:4930f81bbe98 426 */
Soohwan Kim 4:4930f81bbe98 427 void getGAR(uint8_t * gar) {
Soohwan Kim 4:4930f81bbe98 428 reg_rd_ip_byte(GAR,gar);
Soohwan Kim 4:4930f81bbe98 429 }
Soohwan Kim 4:4930f81bbe98 430
Soohwan Kim 4:4930f81bbe98 431 /**
Soohwan Kim 4:4930f81bbe98 432 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 433 * @brief Set subnet mask address
Soohwan Kim 4:4930f81bbe98 434 * @param (uint8_t*)subr Pointer variable to set subnet mask address. It should be allocated 4 bytes.
Soohwan Kim 4:4930f81bbe98 435 * @sa getSUBR()
Soohwan Kim 4:4930f81bbe98 436 */
Soohwan Kim 4:4930f81bbe98 437 void setSUBR(uint8_t * subr) {
Soohwan Kim 4:4930f81bbe98 438 reg_wr_ip_byte(SUBR, subr);
Soohwan Kim 4:4930f81bbe98 439 }
Soohwan Kim 4:4930f81bbe98 440
Soohwan Kim 4:4930f81bbe98 441
Soohwan Kim 4:4930f81bbe98 442 /**
Soohwan Kim 4:4930f81bbe98 443 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 444 * @brief Get subnet mask address
Soohwan Kim 4:4930f81bbe98 445 * @param (uint8_t*)subr Pointer variable to get subnet mask address. It should be allocated 4 bytes.
Soohwan Kim 4:4930f81bbe98 446 * @sa setSUBR()
Soohwan Kim 4:4930f81bbe98 447 */
Soohwan Kim 4:4930f81bbe98 448 void getSUBR(uint8_t * subr) {
Soohwan Kim 4:4930f81bbe98 449 reg_rd_ip_byte(SUBR, subr);
Soohwan Kim 4:4930f81bbe98 450 }
Soohwan Kim 4:4930f81bbe98 451
Soohwan Kim 4:4930f81bbe98 452 /**
Soohwan Kim 4:4930f81bbe98 453 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 454 * @brief Set local MAC address
Soohwan Kim 4:4930f81bbe98 455 * @param (uint8_t*)shar Pointer variable to set local MAC address. It should be allocated 6 bytes.
Soohwan Kim 4:4930f81bbe98 456 * @sa getSHAR()
Soohwan Kim 4:4930f81bbe98 457 */
Soohwan Kim 4:4930f81bbe98 458 void setSHAR(uint8_t * shar) {
Soohwan Kim 4:4930f81bbe98 459 reg_wr_mac(SHAR, shar);
Soohwan Kim 4:4930f81bbe98 460 }
Soohwan Kim 4:4930f81bbe98 461
Soohwan Kim 4:4930f81bbe98 462 /**
Soohwan Kim 4:4930f81bbe98 463 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 464 * @brief Get local MAC address
Soohwan Kim 4:4930f81bbe98 465 * @param (uint8_t*)shar Pointer variable to get local MAC address. It should be allocated 6 bytes.
Soohwan Kim 4:4930f81bbe98 466 * @sa setSHAR()
Soohwan Kim 4:4930f81bbe98 467 */
Soohwan Kim 4:4930f81bbe98 468 void getSHAR(uint8_t * shar) {
Soohwan Kim 4:4930f81bbe98 469 reg_rd_mac(SHAR, shar);
Soohwan Kim 4:4930f81bbe98 470 }
Soohwan Kim 4:4930f81bbe98 471
Soohwan Kim 4:4930f81bbe98 472 /**
Soohwan Kim 4:4930f81bbe98 473 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 474 * @brief Set local IP address
Soohwan Kim 4:4930f81bbe98 475 * @param (uint8_t*)sipr Pointer variable to set local IP address. It should be allocated 4 bytes.
Soohwan Kim 4:4930f81bbe98 476 * @sa getSIPR()
Soohwan Kim 4:4930f81bbe98 477 */
Soohwan Kim 4:4930f81bbe98 478 void setSIPR(uint8_t * sipr) {
Soohwan Kim 4:4930f81bbe98 479 reg_wr_ip_byte(SIPR, sipr);
Soohwan Kim 4:4930f81bbe98 480 }
Soohwan Kim 4:4930f81bbe98 481
Soohwan Kim 4:4930f81bbe98 482 /**
Soohwan Kim 4:4930f81bbe98 483 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 484 * @brief Get local IP address
Soohwan Kim 4:4930f81bbe98 485 * @param (uint8_t*)sipr Pointer variable to get local IP address. It should be allocated 4 bytes.
Soohwan Kim 4:4930f81bbe98 486 * @sa setSIPR()
Soohwan Kim 4:4930f81bbe98 487 */
Soohwan Kim 4:4930f81bbe98 488 void getSIPR(uint8_t * sipr) {
Soohwan Kim 4:4930f81bbe98 489 reg_rd_ip_byte(SIPR, sipr);
Soohwan Kim 4:4930f81bbe98 490 }
Soohwan Kim 4:4930f81bbe98 491
Soohwan Kim 4:4930f81bbe98 492 /**
Soohwan Kim 4:4930f81bbe98 493 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 494 * @brief Set @ref IR register
Soohwan Kim 4:4930f81bbe98 495 * @param (uint8_t)ir Value to set @ref IR register.
Soohwan Kim 4:4930f81bbe98 496 * @sa getIR()
Soohwan Kim 4:4930f81bbe98 497 */
Soohwan Kim 4:4930f81bbe98 498 void setIR(uint8_t ir) {
Soohwan Kim 4:4930f81bbe98 499 reg_wr<uint8_t>(IR, (ir & 0xF0));
Soohwan Kim 4:4930f81bbe98 500 }
Soohwan Kim 4:4930f81bbe98 501
Soohwan Kim 4:4930f81bbe98 502 /**
Soohwan Kim 4:4930f81bbe98 503 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 504 * @brief Get @ref IR register
Soohwan Kim 4:4930f81bbe98 505 * @return uint8_t. Value of @ref IR register.
Soohwan Kim 4:4930f81bbe98 506 * @sa setIR()
Soohwan Kim 4:4930f81bbe98 507 */
Soohwan Kim 4:4930f81bbe98 508 uint8_t getIR() {
Soohwan Kim 4:4930f81bbe98 509 return reg_rd<uint8_t>(IR & 0xF0);
Soohwan Kim 4:4930f81bbe98 510 }
Soohwan Kim 4:4930f81bbe98 511
Soohwan Kim 4:4930f81bbe98 512 /**
Soohwan Kim 4:4930f81bbe98 513 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 514 * @brief Set @ref IMR register
Soohwan Kim 4:4930f81bbe98 515 * @param (uint8_t)imr Value to set @ref IMR register.
Soohwan Kim 4:4930f81bbe98 516 * @sa getIMR()
Soohwan Kim 4:4930f81bbe98 517 */
Soohwan Kim 4:4930f81bbe98 518 void setIMR(uint8_t imr) {
Soohwan Kim 4:4930f81bbe98 519 reg_wr<uint8_t>(IMR, imr);
Soohwan Kim 4:4930f81bbe98 520 }
Soohwan Kim 4:4930f81bbe98 521
Soohwan Kim 4:4930f81bbe98 522 /**
Soohwan Kim 4:4930f81bbe98 523 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 524 * @brief Get @ref IMR register
Soohwan Kim 4:4930f81bbe98 525 * @return uint8_t. Value of @ref IMR register.
Soohwan Kim 4:4930f81bbe98 526 * @sa setIMR()
Soohwan Kim 4:4930f81bbe98 527 */
Soohwan Kim 4:4930f81bbe98 528 uint8_t getIMR() {
Soohwan Kim 4:4930f81bbe98 529 return reg_rd<uint8_t>(IMR);
Soohwan Kim 4:4930f81bbe98 530 }
Soohwan Kim 4:4930f81bbe98 531
Soohwan Kim 4:4930f81bbe98 532
Soohwan Kim 4:4930f81bbe98 533 /**
Soohwan Kim 4:4930f81bbe98 534 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 535 * @brief Set @ref SIR register
Soohwan Kim 4:4930f81bbe98 536 * @param (uint8_t)sir Value to set @ref SIR register.
Soohwan Kim 4:4930f81bbe98 537 * @sa getSIR()
Soohwan Kim 4:4930f81bbe98 538 */
Soohwan Kim 4:4930f81bbe98 539 void setSIR(uint8_t sir) {
Soohwan Kim 4:4930f81bbe98 540 reg_wr<uint8_t>(SIR, sir);
Soohwan Kim 4:4930f81bbe98 541 }
Soohwan Kim 4:4930f81bbe98 542
Soohwan Kim 4:4930f81bbe98 543 /**
Soohwan Kim 4:4930f81bbe98 544 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 545 * @brief Get @ref SIR register
Soohwan Kim 4:4930f81bbe98 546 * @return uint8_t. Value of @ref SIR register.
Soohwan Kim 4:4930f81bbe98 547 * @sa setSIR()
Soohwan Kim 4:4930f81bbe98 548 */
Soohwan Kim 4:4930f81bbe98 549 uint8_t getSIR() {
Soohwan Kim 4:4930f81bbe98 550 return reg_rd<uint8_t>(SIR);
Soohwan Kim 4:4930f81bbe98 551 }
Soohwan Kim 4:4930f81bbe98 552 /**
Soohwan Kim 4:4930f81bbe98 553 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 554 * @brief Set @ref SIMR register
Soohwan Kim 4:4930f81bbe98 555 * @param (uint8_t)simr Value to set @ref SIMR register.
Soohwan Kim 4:4930f81bbe98 556 * @sa getSIMR()
Soohwan Kim 4:4930f81bbe98 557 */
Soohwan Kim 4:4930f81bbe98 558 void setSIMR(uint8_t simr) {
Soohwan Kim 4:4930f81bbe98 559 reg_wr<uint8_t>(SIMR, simr);
Soohwan Kim 4:4930f81bbe98 560 }
Soohwan Kim 4:4930f81bbe98 561
Soohwan Kim 4:4930f81bbe98 562 /**
Soohwan Kim 4:4930f81bbe98 563 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 564 * @brief Get @ref SIMR register
Soohwan Kim 4:4930f81bbe98 565 * @return uint8_t. Value of @ref SIMR register.
Soohwan Kim 4:4930f81bbe98 566 * @sa setSIMR()
Soohwan Kim 4:4930f81bbe98 567 */
Soohwan Kim 4:4930f81bbe98 568 uint8_t getSIMR() {
Soohwan Kim 4:4930f81bbe98 569 return reg_rd<uint8_t>(SIMR);
Soohwan Kim 4:4930f81bbe98 570 }
Soohwan Kim 4:4930f81bbe98 571
Soohwan Kim 4:4930f81bbe98 572 /**
Soohwan Kim 4:4930f81bbe98 573 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 574 * @brief Set @ref RTR register
Soohwan Kim 4:4930f81bbe98 575 * @param (uint16_t)rtr Value to set @ref RTR register.
Soohwan Kim 4:4930f81bbe98 576 * @sa getRTR()
Soohwan Kim 4:4930f81bbe98 577 */
Soohwan Kim 4:4930f81bbe98 578 void setRTR(uint16_t rtr) {
Soohwan Kim 4:4930f81bbe98 579 reg_wr<uint16_t>(RTR, rtr);
Soohwan Kim 4:4930f81bbe98 580 }
Soohwan Kim 4:4930f81bbe98 581
Soohwan Kim 4:4930f81bbe98 582 /**
Soohwan Kim 4:4930f81bbe98 583 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 584 * @brief Get @ref RTR register
Soohwan Kim 4:4930f81bbe98 585 * @return uint16_t. Value of @ref RTR register.
Soohwan Kim 4:4930f81bbe98 586 * @sa setRTR()
Soohwan Kim 4:4930f81bbe98 587 */
Soohwan Kim 4:4930f81bbe98 588 uint16_t getRTR() {
Soohwan Kim 4:4930f81bbe98 589 return reg_rd<uint16_t>(RTR);
Soohwan Kim 4:4930f81bbe98 590 }
Soohwan Kim 4:4930f81bbe98 591
Soohwan Kim 4:4930f81bbe98 592 /**
Soohwan Kim 4:4930f81bbe98 593 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 594 * @brief Set @ref RCR register
Soohwan Kim 4:4930f81bbe98 595 * @param (uint8_t)rcr Value to set @ref RCR register.
Soohwan Kim 4:4930f81bbe98 596 * @sa getRCR()
Soohwan Kim 4:4930f81bbe98 597 */
Soohwan Kim 4:4930f81bbe98 598 void setRCR(uint8_t rcr) {
Soohwan Kim 4:4930f81bbe98 599 reg_wr<uint8_t>(RCR, rcr);
Soohwan Kim 4:4930f81bbe98 600 }
Soohwan Kim 4:4930f81bbe98 601
Soohwan Kim 4:4930f81bbe98 602 /**
Soohwan Kim 4:4930f81bbe98 603 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 604 * @brief Get @ref RCR register
Soohwan Kim 4:4930f81bbe98 605 * @return uint8_t. Value of @ref RCR register.
Soohwan Kim 4:4930f81bbe98 606 * @sa setRCR()
Soohwan Kim 4:4930f81bbe98 607 */
Soohwan Kim 4:4930f81bbe98 608 uint8_t getRCR() {
Soohwan Kim 4:4930f81bbe98 609 return reg_rd<uint8_t>(RCR);
Soohwan Kim 4:4930f81bbe98 610 }
Soohwan Kim 4:4930f81bbe98 611
Soohwan Kim 4:4930f81bbe98 612 //================================================== test done ===========================================================
Soohwan Kim 4:4930f81bbe98 613
Soohwan Kim 4:4930f81bbe98 614 /**
Soohwan Kim 4:4930f81bbe98 615 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 616 * @brief Set @ref PHYCFGR register
Soohwan Kim 4:4930f81bbe98 617 * @param (uint8_t)phycfgr Value to set @ref PHYCFGR register.
Soohwan Kim 12:99e8386ba225 618 * @sa setPHYCFGR()
Soohwan Kim 4:4930f81bbe98 619 */
Soohwan Kim 4:4930f81bbe98 620 void setPHYCFGR(uint8_t phycfgr) {
Soohwan Kim 4:4930f81bbe98 621 reg_wr<uint8_t>(PHYCFGR, phycfgr);
Soohwan Kim 4:4930f81bbe98 622 }
Soohwan Kim 4:4930f81bbe98 623
Soohwan Kim 4:4930f81bbe98 624 /**
Soohwan Kim 4:4930f81bbe98 625 * @ingroup Common_register_access_function
Soohwan Kim 4:4930f81bbe98 626 * @brief Get @ref PHYCFGR register
Soohwan Kim 4:4930f81bbe98 627 * @return uint8_t. Value of @ref PHYCFGR register.
Soohwan Kim 12:99e8386ba225 628 * @sa getPHYCFGR()
Soohwan Kim 4:4930f81bbe98 629 */
embeddist 14:2101ab5ee40f 630 uint8_t getPHYCFGR() {
Soohwan Kim 4:4930f81bbe98 631 return reg_rd<uint8_t>(PHYCFGR);
Soohwan Kim 4:4930f81bbe98 632 }
Soohwan Kim 4:4930f81bbe98 633
Soohwan Kim 4:4930f81bbe98 634
Soohwan Kim 4:4930f81bbe98 635 /////////////////////////////////////
Soohwan Kim 4:4930f81bbe98 636
Soohwan Kim 4:4930f81bbe98 637 ///////////////////////////////////
Soohwan Kim 4:4930f81bbe98 638 // Socket N register I/O function //
Soohwan Kim 4:4930f81bbe98 639 ///////////////////////////////////
Soohwan Kim 4:4930f81bbe98 640 /**
Soohwan Kim 4:4930f81bbe98 641 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 642 * @brief Set @ref Sn_MR register
Soohwan Kim 4:4930f81bbe98 643 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 644 * @param (uint8_t)mr Value to set @ref Sn_MR
Soohwan Kim 4:4930f81bbe98 645 * @sa getSn_MR()
Soohwan Kim 4:4930f81bbe98 646 */
Soohwan Kim 4:4930f81bbe98 647 void setSn_MR(uint8_t sn, uint8_t mr) {
Soohwan Kim 4:4930f81bbe98 648 sreg<uint8_t>(sn, MR, mr);
Soohwan Kim 4:4930f81bbe98 649 }
Soohwan Kim 4:4930f81bbe98 650
Soohwan Kim 4:4930f81bbe98 651 /**
Soohwan Kim 4:4930f81bbe98 652 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 653 * @brief Get @ref Sn_MR register
Soohwan Kim 4:4930f81bbe98 654 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 655 * @return uint8_t. Value of @ref Sn_MR.
Soohwan Kim 4:4930f81bbe98 656 * @sa setSn_MR()
Soohwan Kim 4:4930f81bbe98 657 */
Soohwan Kim 4:4930f81bbe98 658 uint8_t getSn_MR(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 659 return sreg<uint8_t>(sn, Sn_MR);
Soohwan Kim 4:4930f81bbe98 660 }
Soohwan Kim 4:4930f81bbe98 661
Soohwan Kim 4:4930f81bbe98 662 /**
Soohwan Kim 4:4930f81bbe98 663 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 664 * @brief Set @ref Sn_CR register
Soohwan Kim 4:4930f81bbe98 665 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 666 * @param (uint8_t)cr Value to set @ref Sn_CR
Soohwan Kim 4:4930f81bbe98 667 * @sa getSn_CR()
Soohwan Kim 4:4930f81bbe98 668 */
Soohwan Kim 4:4930f81bbe98 669 void setSn_CR(uint8_t sn, uint8_t cr) {
Soohwan Kim 4:4930f81bbe98 670 sreg<uint8_t>(sn, Sn_CR, cr);
Soohwan Kim 4:4930f81bbe98 671 }
Soohwan Kim 4:4930f81bbe98 672
Soohwan Kim 4:4930f81bbe98 673 /**
Soohwan Kim 4:4930f81bbe98 674 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 675 * @brief Get @ref Sn_CR register
Soohwan Kim 4:4930f81bbe98 676 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 677 * @return uint8_t. Value of @ref Sn_CR.
Soohwan Kim 4:4930f81bbe98 678 * @sa setSn_CR()
Soohwan Kim 4:4930f81bbe98 679 */
Soohwan Kim 4:4930f81bbe98 680 uint8_t getSn_CR(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 681 return sreg<uint8_t>(sn, Sn_CR);
Soohwan Kim 4:4930f81bbe98 682 }
Soohwan Kim 4:4930f81bbe98 683
Soohwan Kim 4:4930f81bbe98 684 /**
Soohwan Kim 4:4930f81bbe98 685 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 686 * @brief Set @ref Sn_IR register
Soohwan Kim 4:4930f81bbe98 687 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 688 * @param (uint8_t)ir Value to set @ref Sn_IR
Soohwan Kim 4:4930f81bbe98 689 * @sa getSn_IR()
Soohwan Kim 4:4930f81bbe98 690 */
Soohwan Kim 4:4930f81bbe98 691 void setSn_IR(uint8_t sn, uint8_t ir) {
Soohwan Kim 4:4930f81bbe98 692 sreg<uint8_t>(sn, Sn_IR, (ir & 0x1F));
Soohwan Kim 4:4930f81bbe98 693 }
Soohwan Kim 4:4930f81bbe98 694
Soohwan Kim 4:4930f81bbe98 695 /**
Soohwan Kim 4:4930f81bbe98 696 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 697 * @brief Get @ref Sn_IR register
Soohwan Kim 4:4930f81bbe98 698 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 699 * @return uint8_t. Value of @ref Sn_IR.
Soohwan Kim 4:4930f81bbe98 700 * @sa setSn_IR()
Soohwan Kim 4:4930f81bbe98 701 */
Soohwan Kim 4:4930f81bbe98 702 uint8_t getSn_IR(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 703 return (sreg<uint8_t>(sn, Sn_IR)) & 0x1F;
Soohwan Kim 4:4930f81bbe98 704 }
Soohwan Kim 4:4930f81bbe98 705
Soohwan Kim 4:4930f81bbe98 706 /**
Soohwan Kim 4:4930f81bbe98 707 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 708 * @brief Set @ref Sn_IMR register
Soohwan Kim 4:4930f81bbe98 709 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 710 * @param (uint8_t)imr Value to set @ref Sn_IMR
Soohwan Kim 4:4930f81bbe98 711 * @sa getSn_IMR()
Soohwan Kim 4:4930f81bbe98 712 */
Soohwan Kim 4:4930f81bbe98 713 void setSn_IMR(uint8_t sn, uint8_t imr) {
Soohwan Kim 4:4930f81bbe98 714 sreg<uint8_t>(sn, Sn_IMR, (imr & 0x1F));
Soohwan Kim 4:4930f81bbe98 715 }
Soohwan Kim 4:4930f81bbe98 716
Soohwan Kim 4:4930f81bbe98 717 /**
Soohwan Kim 4:4930f81bbe98 718 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 719 * @brief Get @ref Sn_IMR register
Soohwan Kim 4:4930f81bbe98 720 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 721 * @return uint8_t. Value of @ref Sn_IMR.
Soohwan Kim 4:4930f81bbe98 722 * @sa setSn_IMR()
Soohwan Kim 4:4930f81bbe98 723 */
Soohwan Kim 4:4930f81bbe98 724 uint8_t getSn_IMR(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 725 return (sreg<uint8_t>(sn, Sn_IMR)) & 0x1F;
Soohwan Kim 4:4930f81bbe98 726 }
Soohwan Kim 4:4930f81bbe98 727
Soohwan Kim 4:4930f81bbe98 728 /**
Soohwan Kim 4:4930f81bbe98 729 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 730 * @brief Get @ref Sn_SR register
Soohwan Kim 4:4930f81bbe98 731 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 732 * @return uint8_t. Value of @ref Sn_SR.
Soohwan Kim 4:4930f81bbe98 733 */
Soohwan Kim 4:4930f81bbe98 734 uint8_t getSn_SR(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 735 return sreg<uint8_t>(sn, Sn_SR);
Soohwan Kim 4:4930f81bbe98 736 }
Soohwan Kim 4:4930f81bbe98 737
Soohwan Kim 4:4930f81bbe98 738 /**
Soohwan Kim 4:4930f81bbe98 739 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 740 * @brief Set @ref Sn_PORT register
Soohwan Kim 4:4930f81bbe98 741 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 742 * @param (uint16_t)port Value to set @ref Sn_PORT.
Soohwan Kim 4:4930f81bbe98 743 * @sa getSn_PORT()
Soohwan Kim 4:4930f81bbe98 744 */
Soohwan Kim 4:4930f81bbe98 745 void setSn_PORT(uint8_t sn, uint16_t port) {
Soohwan Kim 4:4930f81bbe98 746 sreg<uint16_t>(sn, Sn_PORT, port );
Soohwan Kim 4:4930f81bbe98 747 }
Soohwan Kim 4:4930f81bbe98 748
Soohwan Kim 4:4930f81bbe98 749 /**
Soohwan Kim 4:4930f81bbe98 750 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 751 * @brief Get @ref Sn_PORT register
Soohwan Kim 4:4930f81bbe98 752 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 753 * @return uint16_t. Value of @ref Sn_PORT.
Soohwan Kim 4:4930f81bbe98 754 * @sa setSn_PORT()
Soohwan Kim 4:4930f81bbe98 755 */
Soohwan Kim 4:4930f81bbe98 756 uint16_t getSn_PORT(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 757 return sreg<uint16_t>(sn, Sn_PORT);
Soohwan Kim 4:4930f81bbe98 758 }
Soohwan Kim 4:4930f81bbe98 759
Soohwan Kim 4:4930f81bbe98 760 /**
Soohwan Kim 4:4930f81bbe98 761 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 762 * @brief Set @ref Sn_DHAR register
Soohwan Kim 4:4930f81bbe98 763 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 764 * @param (uint8_t*)dhar Pointer variable to set socket n destination hardware address. It should be allocated 6 bytes.
Soohwan Kim 4:4930f81bbe98 765 * @sa getSn_DHAR()
Soohwan Kim 4:4930f81bbe98 766 */
Soohwan Kim 4:4930f81bbe98 767 void setSn_DHAR(uint8_t sn, uint8_t * dhar) {
Soohwan Kim 4:4930f81bbe98 768 spi_write(Sn_DHAR, (0x0C + (sn << 5)), dhar, 6);
Soohwan Kim 4:4930f81bbe98 769 }
Soohwan Kim 4:4930f81bbe98 770
Soohwan Kim 4:4930f81bbe98 771 /**
Soohwan Kim 4:4930f81bbe98 772 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 773 * @brief Get @ref Sn_MR register
Soohwan Kim 4:4930f81bbe98 774 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 775 * @param (uint8_t*)dhar Pointer variable to get socket n destination hardware address. It should be allocated 6 bytes.
Soohwan Kim 4:4930f81bbe98 776 * @sa setSn_DHAR()
Soohwan Kim 4:4930f81bbe98 777 */
Soohwan Kim 4:4930f81bbe98 778 void getSn_DHAR(uint8_t sn, uint8_t * dhar) {
Soohwan Kim 4:4930f81bbe98 779 spi_read(Sn_DHAR, (0x08 + (sn << 5)), dhar, 6);
Soohwan Kim 4:4930f81bbe98 780 }
Soohwan Kim 4:4930f81bbe98 781
Soohwan Kim 4:4930f81bbe98 782 /**
Soohwan Kim 4:4930f81bbe98 783 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 784 * @brief Set @ref Sn_DIPR register
Soohwan Kim 4:4930f81bbe98 785 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 786 * @param (uint8_t*)dipr Pointer variable to set socket n destination IP address. It should be allocated 4 bytes.
Soohwan Kim 4:4930f81bbe98 787 * @sa getSn_DIPR()
Soohwan Kim 4:4930f81bbe98 788 */
Soohwan Kim 4:4930f81bbe98 789 void setSn_DIPR(uint8_t sn, uint8_t * dipr) {
Soohwan Kim 4:4930f81bbe98 790 spi_write(Sn_DIPR, (0x0C + (sn << 5)), dipr, 4);
Soohwan Kim 4:4930f81bbe98 791 }
Soohwan Kim 4:4930f81bbe98 792
Soohwan Kim 4:4930f81bbe98 793 /**
Soohwan Kim 4:4930f81bbe98 794 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 795 * @brief Get @ref Sn_DIPR register
Soohwan Kim 4:4930f81bbe98 796 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 797 * @param (uint8_t*)dipr Pointer variable to get socket n destination IP address. It should be allocated 4 bytes.
Soohwan Kim 4:4930f81bbe98 798 * @sa SetSn_DIPR()
Soohwan Kim 4:4930f81bbe98 799 */
Soohwan Kim 4:4930f81bbe98 800 void getSn_DIPR(uint8_t sn, uint8_t * dipr) {
Soohwan Kim 4:4930f81bbe98 801 spi_read(Sn_DIPR, (0x08 + (sn << 5)), dipr, 4);
Soohwan Kim 4:4930f81bbe98 802 }
Soohwan Kim 4:4930f81bbe98 803
Soohwan Kim 4:4930f81bbe98 804 /**
Soohwan Kim 4:4930f81bbe98 805 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 806 * @brief Set @ref Sn_DPORT register
Soohwan Kim 4:4930f81bbe98 807 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 808 * @param (uint16_t)dport Value to set @ref Sn_DPORT
Soohwan Kim 4:4930f81bbe98 809 * @sa getSn_DPORT()
Soohwan Kim 4:4930f81bbe98 810 */
Soohwan Kim 4:4930f81bbe98 811 void setSn_DPORT(uint8_t sn, uint16_t dport) {
Soohwan Kim 4:4930f81bbe98 812 sreg<uint16_t>(sn, Sn_DPORT, dport);
Soohwan Kim 4:4930f81bbe98 813 }
Soohwan Kim 4:4930f81bbe98 814
Soohwan Kim 4:4930f81bbe98 815 /**
Soohwan Kim 4:4930f81bbe98 816 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 817 * @brief Get @ref Sn_DPORT register
Soohwan Kim 4:4930f81bbe98 818 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 819 * @return uint16_t. Value of @ref Sn_DPORT.
Soohwan Kim 4:4930f81bbe98 820 * @sa setSn_DPORT()
Soohwan Kim 4:4930f81bbe98 821 */
Soohwan Kim 4:4930f81bbe98 822 uint16_t getSn_DPORT(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 823 return sreg<uint16_t>(sn, Sn_DPORT);
Soohwan Kim 4:4930f81bbe98 824 }
Soohwan Kim 4:4930f81bbe98 825
Soohwan Kim 4:4930f81bbe98 826
Soohwan Kim 4:4930f81bbe98 827 /**
Soohwan Kim 4:4930f81bbe98 828 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 829 * @brief Set @ref Sn_RXBUF_SIZE register
Soohwan Kim 4:4930f81bbe98 830 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 831 * @param (uint8_t)rxbufsize Value to set @ref Sn_RXBUF_SIZE
Soohwan Kim 4:4930f81bbe98 832 * @sa getSn_RXBUF_SIZE()
Soohwan Kim 4:4930f81bbe98 833 */
Soohwan Kim 4:4930f81bbe98 834 void setSn_RXBUF_SIZE(uint8_t sn, uint8_t rxbufsize) {
Soohwan Kim 4:4930f81bbe98 835 sreg<uint8_t>(sn, Sn_RXBUF_SIZE ,rxbufsize);
Soohwan Kim 4:4930f81bbe98 836 }
Soohwan Kim 4:4930f81bbe98 837
Soohwan Kim 4:4930f81bbe98 838
Soohwan Kim 4:4930f81bbe98 839 /**
Soohwan Kim 4:4930f81bbe98 840 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 841 * @brief Get @ref Sn_RXBUF_SIZE register
Soohwan Kim 4:4930f81bbe98 842 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 843 * @return uint8_t. Value of @ref Sn_RXBUF_SIZE.
Soohwan Kim 4:4930f81bbe98 844 * @sa setSn_RXBUF_SIZE()
Soohwan Kim 4:4930f81bbe98 845 */
Soohwan Kim 4:4930f81bbe98 846 uint8_t getSn_RXBUF_SIZE(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 847 return sreg<uint8_t>(sn, Sn_RXBUF_SIZE);
Soohwan Kim 4:4930f81bbe98 848 }
Soohwan Kim 4:4930f81bbe98 849
Soohwan Kim 4:4930f81bbe98 850 /**
Soohwan Kim 4:4930f81bbe98 851 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 852 * @brief Set @ref Sn_TXBUF_SIZE register
Soohwan Kim 4:4930f81bbe98 853 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 854 * @param (uint8_t)txbufsize Value to set @ref Sn_TXBUF_SIZE
Soohwan Kim 4:4930f81bbe98 855 * @sa getSn_TXBUF_SIZE()
Soohwan Kim 4:4930f81bbe98 856 */
Soohwan Kim 4:4930f81bbe98 857 void setSn_TXBUF_SIZE(uint8_t sn, uint8_t txbufsize) {
Soohwan Kim 4:4930f81bbe98 858 sreg<uint8_t>(sn, Sn_TXBUF_SIZE, txbufsize);
Soohwan Kim 4:4930f81bbe98 859 }
Soohwan Kim 4:4930f81bbe98 860
Soohwan Kim 4:4930f81bbe98 861 /**
Soohwan Kim 4:4930f81bbe98 862 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 863 * @brief Get @ref Sn_TXBUF_SIZE register
Soohwan Kim 4:4930f81bbe98 864 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 865 * @return uint8_t. Value of @ref Sn_TXBUF_SIZE.
Soohwan Kim 4:4930f81bbe98 866 * @sa setSn_TXBUF_SIZE()
Soohwan Kim 4:4930f81bbe98 867 */
Soohwan Kim 4:4930f81bbe98 868 uint8_t getSn_TXBUF_SIZE(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 869 return sreg<uint8_t>(sn, Sn_TXBUF_SIZE);
Soohwan Kim 4:4930f81bbe98 870 }
Soohwan Kim 4:4930f81bbe98 871
Soohwan Kim 4:4930f81bbe98 872 /**
Soohwan Kim 4:4930f81bbe98 873 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 874 * @brief Get @ref Sn_TX_FSR register
Soohwan Kim 4:4930f81bbe98 875 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 876 * @return uint16_t. Value of @ref Sn_TX_FSR.
Soohwan Kim 4:4930f81bbe98 877 */
Soohwan Kim 4:4930f81bbe98 878 uint16_t getSn_TX_FSR(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 879 return sreg<uint16_t>(sn, Sn_TX_FSR);
Soohwan Kim 4:4930f81bbe98 880 }
Soohwan Kim 4:4930f81bbe98 881
Soohwan Kim 4:4930f81bbe98 882
Soohwan Kim 4:4930f81bbe98 883 /**
Soohwan Kim 4:4930f81bbe98 884 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 885 * @brief Get @ref Sn_TX_RD register
Soohwan Kim 4:4930f81bbe98 886 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 887 * @return uint16_t. Value of @ref Sn_TX_RD.
Soohwan Kim 4:4930f81bbe98 888 */
Soohwan Kim 4:4930f81bbe98 889 uint16_t getSn_TX_RD(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 890 return sreg<uint16_t>(sn, Sn_TX_RD);
Soohwan Kim 4:4930f81bbe98 891 }
Soohwan Kim 4:4930f81bbe98 892
Soohwan Kim 4:4930f81bbe98 893 /**
Soohwan Kim 4:4930f81bbe98 894 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 895 * @brief Set @ref Sn_TX_WR register
Soohwan Kim 4:4930f81bbe98 896 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 897 * @param (uint16_t)txwr Value to set @ref Sn_TX_WR
Soohwan Kim 4:4930f81bbe98 898 * @sa GetSn_TX_WR()
Soohwan Kim 4:4930f81bbe98 899 */
Soohwan Kim 4:4930f81bbe98 900 void setSn_TX_WR(uint8_t sn, uint16_t txwr) {
Soohwan Kim 4:4930f81bbe98 901 sreg<uint16_t>(sn, Sn_TX_WR, txwr);
Soohwan Kim 4:4930f81bbe98 902 }
Soohwan Kim 4:4930f81bbe98 903
Soohwan Kim 4:4930f81bbe98 904 /**
Soohwan Kim 4:4930f81bbe98 905 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 906 * @brief Get @ref Sn_TX_WR register
Soohwan Kim 4:4930f81bbe98 907 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 908 * @return uint16_t. Value of @ref Sn_TX_WR.
Soohwan Kim 4:4930f81bbe98 909 * @sa setSn_TX_WR()
Soohwan Kim 4:4930f81bbe98 910 */
Soohwan Kim 4:4930f81bbe98 911 uint16_t getSn_TX_WR(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 912 return sreg<uint16_t>(sn, Sn_TX_WR);
Soohwan Kim 4:4930f81bbe98 913 }
Soohwan Kim 4:4930f81bbe98 914
Soohwan Kim 4:4930f81bbe98 915
Soohwan Kim 4:4930f81bbe98 916 /**
Soohwan Kim 4:4930f81bbe98 917 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 918 * @brief Get @ref Sn_RX_RSR register
Soohwan Kim 4:4930f81bbe98 919 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 920 * @return uint16_t. Value of @ref Sn_RX_RSR.
Soohwan Kim 4:4930f81bbe98 921 */
Soohwan Kim 4:4930f81bbe98 922 uint16_t getSn_RX_RSR(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 923 return sreg<uint16_t>(sn, Sn_RX_RSR);
Soohwan Kim 4:4930f81bbe98 924 }
Soohwan Kim 4:4930f81bbe98 925
Soohwan Kim 4:4930f81bbe98 926
Soohwan Kim 4:4930f81bbe98 927 /**
Soohwan Kim 4:4930f81bbe98 928 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 929 * @brief Set @ref Sn_RX_RD register
Soohwan Kim 4:4930f81bbe98 930 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 931 * @param (uint16_t)rxrd Value to set @ref Sn_RX_RD
Soohwan Kim 4:4930f81bbe98 932 * @sa getSn_RX_RD()
Soohwan Kim 4:4930f81bbe98 933 */
Soohwan Kim 4:4930f81bbe98 934 void setSn_RX_RD(uint8_t sn, uint16_t rxrd) {
Soohwan Kim 4:4930f81bbe98 935 sreg<uint16_t>(sn, Sn_RX_RD, rxrd);
Soohwan Kim 4:4930f81bbe98 936 }
Soohwan Kim 4:4930f81bbe98 937
Soohwan Kim 4:4930f81bbe98 938 /**
Soohwan Kim 4:4930f81bbe98 939 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 940 * @brief Get @ref Sn_RX_RD register
Soohwan Kim 4:4930f81bbe98 941 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 942 * @regurn uint16_t. Value of @ref Sn_RX_RD.
Soohwan Kim 4:4930f81bbe98 943 * @sa setSn_RX_RD()
Soohwan Kim 4:4930f81bbe98 944 */
Soohwan Kim 4:4930f81bbe98 945 uint16_t getSn_RX_RD(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 946 return sreg<uint16_t>(sn, Sn_RX_RD);
Soohwan Kim 4:4930f81bbe98 947 }
Soohwan Kim 4:4930f81bbe98 948
Soohwan Kim 4:4930f81bbe98 949 /**
Soohwan Kim 4:4930f81bbe98 950 * @ingroup Socket_register_access_function
Soohwan Kim 4:4930f81bbe98 951 * @brief Get @ref Sn_RX_WR register
Soohwan Kim 4:4930f81bbe98 952 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 953 * @return uint16_t. Value of @ref Sn_RX_WR.
Soohwan Kim 4:4930f81bbe98 954 */
Soohwan Kim 4:4930f81bbe98 955 uint16_t getSn_RX_WR(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 956 return sreg<uint16_t>(sn, Sn_RX_WR);
Soohwan Kim 4:4930f81bbe98 957 }
Soohwan Kim 4:4930f81bbe98 958
Soohwan Kim 4:4930f81bbe98 959
Soohwan Kim 4:4930f81bbe98 960 //////////////////////////////////////
Soohwan Kim 4:4930f81bbe98 961
Soohwan Kim 4:4930f81bbe98 962 /////////////////////////////////////
Soohwan Kim 4:4930f81bbe98 963 // Sn_TXBUF & Sn_RXBUF IO function //
Soohwan Kim 4:4930f81bbe98 964 /////////////////////////////////////
Soohwan Kim 4:4930f81bbe98 965 /**
Soohwan Kim 4:4930f81bbe98 966 * @brief Gets the max buffer size of socket sn passed as parameter.
Soohwan Kim 4:4930f81bbe98 967 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 968 * @return uint16_t. Value of Socket n RX max buffer size.
Soohwan Kim 4:4930f81bbe98 969 */
Soohwan Kim 4:4930f81bbe98 970 uint16_t getSn_RxMAX(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 971 return (getSn_RXBUF_SIZE(sn) << 10);
Soohwan Kim 4:4930f81bbe98 972 }
Soohwan Kim 4:4930f81bbe98 973
Soohwan Kim 4:4930f81bbe98 974 /**
Soohwan Kim 4:4930f81bbe98 975 * @brief Gets the max buffer size of socket sn passed as parameters.
Soohwan Kim 4:4930f81bbe98 976 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
Soohwan Kim 4:4930f81bbe98 977 * @return uint16_t. Value of Socket n TX max buffer size.
Soohwan Kim 4:4930f81bbe98 978 */
Soohwan Kim 4:4930f81bbe98 979 //uint16_t getSn_TxMAX(uint8_t sn);
Soohwan Kim 4:4930f81bbe98 980 uint16_t getSn_TxMAX(uint8_t sn) {
Soohwan Kim 4:4930f81bbe98 981 return (getSn_TXBUF_SIZE(sn) << 10);
Soohwan Kim 4:4930f81bbe98 982 }
Soohwan Kim 4:4930f81bbe98 983
Soohwan Kim 0:6f28332c466f 984
embeddist 14:2101ab5ee40f 985 int ethernet_link(void);
embeddist 14:2101ab5ee40f 986 void ethernet_set_link(int speed, int duplex);
Soohwan Kim 0:6f28332c466f 987 protected:
Soohwan Kim 0:6f28332c466f 988 uint8_t mac[6];
Soohwan Kim 0:6f28332c466f 989 uint32_t ip;
Soohwan Kim 0:6f28332c466f 990 uint32_t netmask;
Soohwan Kim 0:6f28332c466f 991 uint32_t gateway;
Soohwan Kim 0:6f28332c466f 992 uint32_t dnsaddr;
Soohwan Kim 0:6f28332c466f 993 bool dhcp;
Soohwan Kim 4:4930f81bbe98 994
embeddist 14:2101ab5ee40f 995 void spi_write(uint16_t addr, uint8_t cb, const uint8_t *buf, uint16_t len);
embeddist 14:2101ab5ee40f 996 void spi_read(uint16_t addr, uint8_t cb, uint8_t *buf, uint16_t len);
embeddist 14:2101ab5ee40f 997 SPI* spi;
embeddist 14:2101ab5ee40f 998 DigitalOut cs;
embeddist 14:2101ab5ee40f 999 DigitalOut reset_pin;
Soohwan Kim 0:6f28332c466f 1000 static WIZnet_Chip* inst;
Soohwan Kim 0:6f28332c466f 1001
Soohwan Kim 0:6f28332c466f 1002 void reg_wr_mac(uint16_t addr, uint8_t* data) {
Soohwan Kim 0:6f28332c466f 1003 spi_write(addr, 0x04, data, 6);
Soohwan Kim 0:6f28332c466f 1004 }
Soohwan Kim 0:6f28332c466f 1005
Soohwan Kim 0:6f28332c466f 1006 };
embeddist 14:2101ab5ee40f 1007
Soohwan Kim 0:6f28332c466f 1008
Soohwan Kim 0:6f28332c466f 1009 extern uint32_t str_to_ip(const char* str);
Soohwan Kim 0:6f28332c466f 1010 extern void printfBytes(char* str, uint8_t* buf, int len);
Soohwan Kim 0:6f28332c466f 1011 extern void printHex(uint8_t* buf, int len);
Soohwan Kim 0:6f28332c466f 1012 extern void debug_hex(uint8_t* buf, int len);