WIZnetInterface

Dependents:   Smart_LED_WIZwiki-W7500

Fork of WIZnetInterface by WIZnet

Committer:
Soohwan Kim
Date:
Mon Jun 15 22:44:54 2015 +0900
Revision:
6:94a81e80c675
Parent:
5:f432ae8f8708
Child:
8:4c02de1dbf3a
remove detail func

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