WIZNet W5500 with additional enhancements

Fork of WIZnetInterface by WIZnet

Committer:
Helmut Tschemernjak
Date:
Tue Oct 10 20:56:13 2017 +0200
Revision:
35:fe3028eda085
Parent:
33:879cfe51e66e
Child:
38:67e763cdde02
Added support for DHCP lease time and domain name
Enhance DHCP code to use opcode defines to make it easier to
understand and maintain.

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;
Helmut Tschemernjak 32:f6d76a55a50b 327 for(int i = 0; i < (int)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));
Helmut Tschemernjak 32:f6d76a55a50b 344 for(int i = 0; i < (int)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);
Helmut Tschemernjak 33:879cfe51e66e 986 int ethernet_speed(void);
Helmut Tschemernjak 33:879cfe51e66e 987 bool ethernet_fullduplex(void);
embeddist 14:2101ab5ee40f 988 void ethernet_set_link(int speed, int duplex);
Helmut Tschemernjak 33:879cfe51e66e 989
Helmut Tschemernjak 33:879cfe51e66e 990 uint32_t getDNSAddr(void) {
Helmut Tschemernjak 33:879cfe51e66e 991 return dnsaddr;
Helmut Tschemernjak 33:879cfe51e66e 992 };
Soohwan Kim 0:6f28332c466f 993 protected:
Soohwan Kim 0:6f28332c466f 994 uint8_t mac[6];
Soohwan Kim 0:6f28332c466f 995 uint32_t ip;
Soohwan Kim 0:6f28332c466f 996 uint32_t netmask;
Soohwan Kim 0:6f28332c466f 997 uint32_t gateway;
Soohwan Kim 0:6f28332c466f 998 uint32_t dnsaddr;
Helmut Tschemernjak 35:fe3028eda085 999 uint32_t timesrv;
Helmut Tschemernjak 35:fe3028eda085 1000 uint32_t leaseTime;
Soohwan Kim 0:6f28332c466f 1001 bool dhcp;
Soohwan Kim 4:4930f81bbe98 1002
embeddist 14:2101ab5ee40f 1003 void spi_write(uint16_t addr, uint8_t cb, const uint8_t *buf, uint16_t len);
embeddist 14:2101ab5ee40f 1004 void spi_read(uint16_t addr, uint8_t cb, uint8_t *buf, uint16_t len);
embeddist 14:2101ab5ee40f 1005 SPI* spi;
embeddist 14:2101ab5ee40f 1006 DigitalOut cs;
embeddist 14:2101ab5ee40f 1007 DigitalOut reset_pin;
Soohwan Kim 0:6f28332c466f 1008 static WIZnet_Chip* inst;
Soohwan Kim 0:6f28332c466f 1009
Soohwan Kim 0:6f28332c466f 1010 void reg_wr_mac(uint16_t addr, uint8_t* data) {
Soohwan Kim 0:6f28332c466f 1011 spi_write(addr, 0x04, data, 6);
Soohwan Kim 0:6f28332c466f 1012 }
Soohwan Kim 0:6f28332c466f 1013
Soohwan Kim 0:6f28332c466f 1014 };
embeddist 14:2101ab5ee40f 1015
Soohwan Kim 0:6f28332c466f 1016
Soohwan Kim 0:6f28332c466f 1017 extern uint32_t str_to_ip(const char* str);
Soohwan Kim 0:6f28332c466f 1018 extern void printfBytes(char* str, uint8_t* buf, int len);
Soohwan Kim 0:6f28332c466f 1019 extern void printHex(uint8_t* buf, int len);
Soohwan Kim 0:6f28332c466f 1020 extern void debug_hex(uint8_t* buf, int len);