This is the Interface library for WIZnet W5500 chip which forked of EthernetInterfaceW5500, WIZnetInterface and WIZ550ioInterface. This library has simple name as "W5500Interface". and can be used for Wiz550io users also.

Dependents:   EvrythngApi Websocket_Ethernet_HelloWorld_W5500 Websocket_Ethernet_W5500 CurrentWeatherData_W5500 ... more

Information

It has EthernetInterface class like official EthernetInterface , but uses Wiznet chip driver codes.

So this library can use only the WIZnet W5500 or WIZ550io users.

This library has referred to many project such as WIZ550ioInterface, WiflyInterface and WIZnet Library.

Thanks all.

Committer:
embeddist
Date:
Tue Apr 28 13:52:23 2015 +0000
Revision:
11:5499fa2d8898
Parent:
10:713b6d2aaefb
Remove the setting of tx/rx buffer in SWReset

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Bongjun 0:e11e8793c3ce 1 #pragma once
Bongjun 0:e11e8793c3ce 2
Bongjun 0:e11e8793c3ce 3 #include "mbed.h"
Bongjun 0:e11e8793c3ce 4 #include "mbed_debug.h"
Bongjun 0:e11e8793c3ce 5
hjjeon 10:713b6d2aaefb 6
Bongjun 0:e11e8793c3ce 7 #define TEST_ASSERT(A) while(!(A)){debug("\n\n%s@%d %s ASSERT!\n\n",__PRETTY_FUNCTION__,__LINE__,#A);exit(1);};
Bongjun 0:e11e8793c3ce 8
Bongjun 0:e11e8793c3ce 9 #define DEFAULT_WAIT_RESP_TIMEOUT 500
Bongjun 0:e11e8793c3ce 10
hjjeon 10:713b6d2aaefb 11
hjjeon 9:dfffa4d6f022 12
hjjeon 10:713b6d2aaefb 13 #define SOCK_OK 1 ///< Result is OK about socket process.
hjjeon 10:713b6d2aaefb 14 #define SOCK_BUSY 0 ///< Socket is busy on processing the operation. Valid only Non-block IO Mode.
hjjeon 10:713b6d2aaefb 15 #define SOCK_FATAL -1000 ///< Result is fatal error about socket process.
hjjeon 9:dfffa4d6f022 16
hjjeon 10:713b6d2aaefb 17 #define SOCK_ERROR 0
hjjeon 10:713b6d2aaefb 18 #define SOCKERR_SOCKNUM (SOCK_ERROR - 1) ///< Invalid socket number
hjjeon 10:713b6d2aaefb 19 #define SOCKERR_SOCKOPT (SOCK_ERROR - 2) ///< Invalid socket option
hjjeon 10:713b6d2aaefb 20 #define SOCKERR_SOCKINIT (SOCK_ERROR - 3) ///< Socket is not initialized
hjjeon 10:713b6d2aaefb 21 #define SOCKERR_SOCKCLOSED (SOCK_ERROR - 4) ///< Socket unexpectedly closed.
hjjeon 10:713b6d2aaefb 22 #define SOCKERR_SOCKMODE (SOCK_ERROR - 5) ///< Invalid socket mode for socket operation.
hjjeon 10:713b6d2aaefb 23 #define SOCKERR_SOCKFLAG (SOCK_ERROR - 6) ///< Invalid socket flag
hjjeon 10:713b6d2aaefb 24 #define SOCKERR_SOCKSTATUS (SOCK_ERROR - 7) ///< Invalid socket status for socket operation.
hjjeon 10:713b6d2aaefb 25 #define SOCKERR_ARG (SOCK_ERROR - 10) ///< Invalid argrument.
hjjeon 10:713b6d2aaefb 26 #define SOCKERR_PORTZERO (SOCK_ERROR - 11) ///< Port number is zero
hjjeon 10:713b6d2aaefb 27 #define SOCKERR_IPINVALID (SOCK_ERROR - 12) ///< Invalid IP address
hjjeon 10:713b6d2aaefb 28 #define SOCKERR_TIMEOUT (SOCK_ERROR - 13) ///< Timeout occurred
hjjeon 10:713b6d2aaefb 29 #define SOCKERR_DATALEN (SOCK_ERROR - 14) ///< Data length is zero or greater than buffer max size.
hjjeon 10:713b6d2aaefb 30 #define SOCKERR_BUFFER (SOCK_ERROR - 15) ///< Socket buffer is not enough for data communication.
hjjeon 9:dfffa4d6f022 31
hjjeon 10:713b6d2aaefb 32 #define SOCK_ANY_PORT_NUM 0xC000;
hjjeon 9:dfffa4d6f022 33
Bongjun 0:e11e8793c3ce 34
Bongjun 0:e11e8793c3ce 35 #define MAX_SOCK_NUM 8
Bongjun 0:e11e8793c3ce 36
Bongjun 0:e11e8793c3ce 37 #define MR 0x0000
Bongjun 0:e11e8793c3ce 38 #define GAR 0x0001
Bongjun 0:e11e8793c3ce 39 #define SUBR 0x0005
Bongjun 0:e11e8793c3ce 40 #define SHAR 0x0009
Bongjun 0:e11e8793c3ce 41 #define SIPR 0x000f
hjjeon 9:dfffa4d6f022 42 #define INTLEVEL 0x0013
hjjeon 9:dfffa4d6f022 43 #define IR 0x0015
hjjeon 9:dfffa4d6f022 44 #define IMR 0x0016
hjjeon 9:dfffa4d6f022 45 #define SIR 0x0017
hjjeon 9:dfffa4d6f022 46 #define SIMR 0x0018
hjjeon 9:dfffa4d6f022 47 #define RTR 0x0019
hjjeon 9:dfffa4d6f022 48 #define RCR 0x001b
hjjeon 9:dfffa4d6f022 49 #define PTIMER 0x001c
hjjeon 9:dfffa4d6f022 50 #define PMAGIC 0x001d
hjjeon 9:dfffa4d6f022 51 #define PHAR 0x001e
hjjeon 9:dfffa4d6f022 52 #define PSID 0x0024
hjjeon 9:dfffa4d6f022 53 #define PMRU 0x0026
hjjeon 9:dfffa4d6f022 54 #define UIPR 0x0028
hjjeon 9:dfffa4d6f022 55 #define UPORTR 0x002c
kaizen 5:8aefaef88f79 56 #define PHYCFGR 0x002e
hjjeon 9:dfffa4d6f022 57 #define VERSIONR 0x0039
hjjeon 9:dfffa4d6f022 58
Bongjun 0:e11e8793c3ce 59 // W5500 socket register
Bongjun 0:e11e8793c3ce 60 #define Sn_MR 0x0000
Bongjun 0:e11e8793c3ce 61 #define Sn_CR 0x0001
Bongjun 0:e11e8793c3ce 62 #define Sn_IR 0x0002
Bongjun 0:e11e8793c3ce 63 #define Sn_SR 0x0003
Bongjun 0:e11e8793c3ce 64 #define Sn_PORT 0x0004
hjjeon 9:dfffa4d6f022 65 #define Sn_DHAR 0x0006
Bongjun 0:e11e8793c3ce 66 #define Sn_DIPR 0x000c
Bongjun 0:e11e8793c3ce 67 #define Sn_DPORT 0x0010
hjjeon 9:dfffa4d6f022 68 #define Sn_MSSR 0x0012
hjjeon 9:dfffa4d6f022 69 #define Sn_TOS 0x0015
hjjeon 9:dfffa4d6f022 70 #define Sn_TTL 0x0016
Bongjun 0:e11e8793c3ce 71 #define Sn_RXBUF_SIZE 0x001e
Bongjun 0:e11e8793c3ce 72 #define Sn_TXBUF_SIZE 0x001f
Bongjun 0:e11e8793c3ce 73 #define Sn_TX_FSR 0x0020
hjjeon 9:dfffa4d6f022 74 #define Sn_TX_RD 0x0022
Bongjun 0:e11e8793c3ce 75 #define Sn_TX_WR 0x0024
Bongjun 0:e11e8793c3ce 76 #define Sn_RX_RSR 0x0026
Bongjun 0:e11e8793c3ce 77 #define Sn_RX_RD 0x0028
hjjeon 9:dfffa4d6f022 78 #define Sn_RX_WR 0x002a
hjjeon 9:dfffa4d6f022 79 #define Sn_IMR 0x002c
hjjeon 9:dfffa4d6f022 80 #define Sn_FRAG 0x002d
hjjeon 9:dfffa4d6f022 81 #define Sn_KPALVTR 0x002f
hjjeon 9:dfffa4d6f022 82
hjjeon 9:dfffa4d6f022 83 //define for Mode Register option value
hjjeon 9:dfffa4d6f022 84 #define MR_PPPOE 0x08
hjjeon 9:dfffa4d6f022 85 #define MR_RST 0x80
hjjeon 9:dfffa4d6f022 86
hjjeon 9:dfffa4d6f022 87 //Define for Socket Command register option value
hjjeon 9:dfffa4d6f022 88 #define Sn_CR_OPEN 0x01
hjjeon 9:dfffa4d6f022 89 #define Sn_CR_LISTEN 0x02
hjjeon 9:dfffa4d6f022 90 #define Sn_CR_CONNECT 0x04
hjjeon 9:dfffa4d6f022 91 #define Sn_CR_DISCON 0x08
hjjeon 9:dfffa4d6f022 92 #define Sn_CR_CLOSE 0x10
hjjeon 9:dfffa4d6f022 93 #define Sn_CR_SEND 0x20
hjjeon 9:dfffa4d6f022 94 #define Sn_CR_SEND_MAC 0x21
hjjeon 9:dfffa4d6f022 95 #define Sn_CR_SEND_KEEP 0x22
hjjeon 9:dfffa4d6f022 96 #define Sn_CR_RECV 0x40
hjjeon 9:dfffa4d6f022 97
hjjeon 9:dfffa4d6f022 98
hjjeon 9:dfffa4d6f022 99 //Define for Socket Mode register option value
hjjeon 9:dfffa4d6f022 100 #define Sn_MR_CLOSE 0x00
hjjeon 9:dfffa4d6f022 101 #define Sn_MR_TCP 0x01
hjjeon 9:dfffa4d6f022 102 #define Sn_MR_UDP 0x02
hjjeon 9:dfffa4d6f022 103 #define Sn_MR_MACRAW 0x04
hjjeon 9:dfffa4d6f022 104 #define Sn_MR_UCASTB 0x10
hjjeon 9:dfffa4d6f022 105 #define Sn_MR_ND 0x20
hjjeon 9:dfffa4d6f022 106 #define Sn_MR_BCASTB 0x40
hjjeon 9:dfffa4d6f022 107 #define Sn_MR_MULTI 0x80
hjjeon 9:dfffa4d6f022 108
hjjeon 9:dfffa4d6f022 109 #define Sn_IR_SENDOK 0x10
hjjeon 9:dfffa4d6f022 110
hjjeon 9:dfffa4d6f022 111 //Sn_IR values
hjjeon 9:dfffa4d6f022 112
hjjeon 9:dfffa4d6f022 113 #define Sn_IR_TIMEOUT 0x08
hjjeon 9:dfffa4d6f022 114 #define Sn_IR_RECV 0x04
hjjeon 9:dfffa4d6f022 115 #define Sn_IR_DISCON 0x02
hjjeon 9:dfffa4d6f022 116 #define Sn_IR_CON 0x01
hjjeon 9:dfffa4d6f022 117
hjjeon 9:dfffa4d6f022 118 /*
hjjeon 9:dfffa4d6f022 119 * SOCKET FLAG
hjjeon 9:dfffa4d6f022 120 */
hjjeon 9:dfffa4d6f022 121 #define SF_ETHER_OWN (Sn_MR_MFEN) ///< In \ref Sn_MR_MACRAW, Receive only the packet as broadcast, multicast and own packet
hjjeon 9:dfffa4d6f022 122 #define SF_IGMP_VER2 (Sn_MR_ND) ///< In \ref Sn_MR_UDP with \ref SF_MULTI_ENABLE, Select IGMP version 2.
hjjeon 9:dfffa4d6f022 123 #define SF_TCP_NODELAY (Sn_MR_ND) ///< In \ref Sn_MR_TCP, Use to nodelayed ack.
hjjeon 9:dfffa4d6f022 124 #define SF_MULTI_ENABLE (Sn_MR_MULTI) ///< In \ref Sn_MR_UDP, Enable multicast mode.
hjjeon 9:dfffa4d6f022 125 #define SF_IO_NONBLOCK 0x01 ///< Socket nonblock io mode. It used parameter in \ref socket().
hjjeon 9:dfffa4d6f022 126 #define SF_BROAD_BLOCK (Sn_MR_BCASTB) ///< In \ref Sn_MR_UDP or \ref Sn_MR_MACRAW, Block broadcast packet. Valid only in W5500
hjjeon 9:dfffa4d6f022 127 #define SF_MULTI_BLOCK (Sn_MR_MMB) ///< In \ref Sn_MR_MACRAW, Block multicast packet. Valid only in W5500
hjjeon 9:dfffa4d6f022 128 #define SF_IPv6_BLOCK (Sn_MR_MIP6B) ///< In \ref Sn_MR_MACRAW, Block IPv6 packet. Valid only in W5500
hjjeon 9:dfffa4d6f022 129 #define SF_UNI_BLOCK (Sn_MR_UCASTB) ///< In \ref Sn_MR_UDP with \ref SF_MULTI_ENABLE. Valid only in W5500
hjjeon 9:dfffa4d6f022 130
hjjeon 9:dfffa4d6f022 131 #define SOCK_MACRAW 0x42
hjjeon 9:dfffa4d6f022 132
hjjeon 9:dfffa4d6f022 133
hjjeon 9:dfffa4d6f022 134 /* PHYCFGR register value */
hjjeon 9:dfffa4d6f022 135 #define PHYCFGR_RST ~(1<<7) //< For PHY reset, must operate AND mask.
hjjeon 9:dfffa4d6f022 136 #define PHYCFGR_OPMD (1<<6) // Configre PHY with OPMDC value
hjjeon 9:dfffa4d6f022 137 #define PHYCFGR_OPMDC_ALLA (7<<3)
hjjeon 9:dfffa4d6f022 138 #define PHYCFGR_OPMDC_PDOWN (6<<3)
hjjeon 9:dfffa4d6f022 139 #define PHYCFGR_OPMDC_NA (5<<3)
hjjeon 9:dfffa4d6f022 140 #define PHYCFGR_OPMDC_100FA (4<<3)
hjjeon 9:dfffa4d6f022 141 #define PHYCFGR_OPMDC_100F (3<<3)
hjjeon 9:dfffa4d6f022 142 #define PHYCFGR_OPMDC_100H (2<<3)
hjjeon 9:dfffa4d6f022 143 #define PHYCFGR_OPMDC_10F (1<<3)
hjjeon 9:dfffa4d6f022 144 #define PHYCFGR_OPMDC_10H (0<<3)
hjjeon 9:dfffa4d6f022 145 #define PHYCFGR_DPX_FULL (1<<2)
hjjeon 9:dfffa4d6f022 146 #define PHYCFGR_DPX_HALF (0<<2)
hjjeon 9:dfffa4d6f022 147 #define PHYCFGR_SPD_100 (1<<1)
hjjeon 9:dfffa4d6f022 148 #define PHYCFGR_SPD_10 (0<<1)
hjjeon 9:dfffa4d6f022 149 #define PHYCFGR_LNK_ON (1<<0)
hjjeon 9:dfffa4d6f022 150 #define PHYCFGR_LNK_OFF (0<<0)
hjjeon 9:dfffa4d6f022 151
hjjeon 9:dfffa4d6f022 152 //PHY status define
hjjeon 9:dfffa4d6f022 153 #define PHY_CONFBY_HW 0 ///< Configured PHY operation mode by HW pin
hjjeon 9:dfffa4d6f022 154 #define PHY_CONFBY_SW 1 ///< Configured PHY operation mode by SW register
hjjeon 9:dfffa4d6f022 155 #define PHY_MODE_MANUAL 0 ///< Configured PHY operation mode with user setting.
hjjeon 9:dfffa4d6f022 156 #define PHY_MODE_AUTONEGO 1 ///< Configured PHY operation mode with auto-negotiation
hjjeon 9:dfffa4d6f022 157 #define PHY_SPEED_10 0 ///< Link Speed 10
hjjeon 9:dfffa4d6f022 158 #define PHY_SPEED_100 1 ///< Link Speed 100
hjjeon 9:dfffa4d6f022 159 #define PHY_DUPLEX_HALF 0 ///< Link Half-Duplex
hjjeon 9:dfffa4d6f022 160 #define PHY_DUPLEX_FULL 1 ///< Link Full-Duplex
hjjeon 9:dfffa4d6f022 161 #define PHY_LINK_OFF 0 ///< Link Off
hjjeon 9:dfffa4d6f022 162 #define PHY_LINK_ON 1 ///< Link On
hjjeon 9:dfffa4d6f022 163 #define PHY_POWER_NORM 0 ///< PHY power normal mode
hjjeon 9:dfffa4d6f022 164 #define PHY_POWER_DOWN 1 ///< PHY power down mode
Bongjun 0:e11e8793c3ce 165
Bongjun 0:e11e8793c3ce 166 class WIZnet_Chip {
Bongjun 0:e11e8793c3ce 167 public:
kaizen 5:8aefaef88f79 168
kaizen 5:8aefaef88f79 169 enum Protocol { CLOSED = 0, TCP = 1, UDP = 2,};
kaizen 5:8aefaef88f79 170 enum Command { OPEN = 0x01, LISTEN = 0x02, CONNECT = 0x04, DISCON = 0x08, CLOSE = 0x10, SEND = 0x20, \
kaizen 5:8aefaef88f79 171 SEND_MAC = 0x21, SEND_KEEP = 0x22, RECV = 0x40, };
kaizen 5:8aefaef88f79 172 enum Interrupt { INT_CON = 0x01, INT_DISCON = 0x02, INT_RECV = 0x04, INT_TIMEOUT = 0x08, INT_SEND_OK = 0x10,};
kaizen 5:8aefaef88f79 173
kaizen 5:8aefaef88f79 174 enum Status { SOCK_CLOSED = 0x00, SOCK_INIT = 0x13, SOCK_LISTEN = 0x14, SOCK_SYNSENT = 0x15, SOCK_ESTABLISHED = 0x17, \
kaizen 5:8aefaef88f79 175 SOCK_CLOSE_WAIT = 0x1c, SOCK_UDP = 0x22, };
kaizen 5:8aefaef88f79 176
hjjeon 10:713b6d2aaefb 177
hjjeon 10:713b6d2aaefb 178 uint16_t sock_any_port;
hjjeon 10:713b6d2aaefb 179
Bongjun 0:e11e8793c3ce 180 /*
Bongjun 0:e11e8793c3ce 181 * Constructor
Bongjun 0:e11e8793c3ce 182 *
Bongjun 0:e11e8793c3ce 183 * @param spi spi class
Bongjun 0:e11e8793c3ce 184 * @param cs cs of the W5500
Bongjun 0:e11e8793c3ce 185 * @param reset reset pin of the W5500
Bongjun 0:e11e8793c3ce 186 */
Bongjun 0:e11e8793c3ce 187 WIZnet_Chip(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset);
Bongjun 0:e11e8793c3ce 188 WIZnet_Chip(SPI* spi, PinName cs, PinName reset);
Bongjun 0:e11e8793c3ce 189
Bongjun 0:e11e8793c3ce 190 /*
Bongjun 0:e11e8793c3ce 191 * Set MAC Address to W5500
Bongjun 0:e11e8793c3ce 192 *
Bongjun 0:e11e8793c3ce 193 * @return true if connected, false otherwise
Bongjun 0:e11e8793c3ce 194 */
Bongjun 0:e11e8793c3ce 195 bool setmac();
Bongjun 0:e11e8793c3ce 196
Bongjun 0:e11e8793c3ce 197 /*
Bongjun 0:e11e8793c3ce 198 * Set Network Informations (SrcIP, Netmask, Gataway)
Bongjun 0:e11e8793c3ce 199 *
Bongjun 0:e11e8793c3ce 200 * @return true if connected, false otherwise
Bongjun 0:e11e8793c3ce 201 */
Bongjun 0:e11e8793c3ce 202 bool setip();
Bongjun 0:e11e8793c3ce 203
Bongjun 0:e11e8793c3ce 204 /*
kaizen 5:8aefaef88f79 205 * Get Link Status
kaizen 5:8aefaef88f79 206 *
kaizen 5:8aefaef88f79 207 * @return true if Link up, false Link down
kaizen 5:8aefaef88f79 208 */
kaizen 5:8aefaef88f79 209 bool linkstatus();
kaizen 5:8aefaef88f79 210
kaizen 5:8aefaef88f79 211 /*
Bongjun 0:e11e8793c3ce 212 * Disconnect the connection
Bongjun 0:e11e8793c3ce 213 *
Bongjun 0:e11e8793c3ce 214 * @ returns true
Bongjun 0:e11e8793c3ce 215 */
Bongjun 0:e11e8793c3ce 216 bool disconnect();
Bongjun 0:e11e8793c3ce 217
Bongjun 0:e11e8793c3ce 218 /*
Bongjun 0:e11e8793c3ce 219 * Open a tcp connection with the specified host on the specified port
Bongjun 0:e11e8793c3ce 220 *
Bongjun 0:e11e8793c3ce 221 * @param host host (can be either an ip address or a name. If a name is provided, a dns request will be established)
Bongjun 0:e11e8793c3ce 222 * @param port port
Bongjun 0:e11e8793c3ce 223 * @ returns true if successful
Bongjun 0:e11e8793c3ce 224 */
Bongjun 0:e11e8793c3ce 225 bool connect(int socket, const char * host, int port, int timeout_ms = 10*1000);
Bongjun 0:e11e8793c3ce 226
Bongjun 0:e11e8793c3ce 227 /*
Bongjun 0:e11e8793c3ce 228 * Set the protocol (UDP or TCP)
Bongjun 0:e11e8793c3ce 229 *
Bongjun 0:e11e8793c3ce 230 * @param p protocol
Bongjun 0:e11e8793c3ce 231 * @ returns true if successful
Bongjun 0:e11e8793c3ce 232 */
Bongjun 0:e11e8793c3ce 233 bool setProtocol(int socket, Protocol p);
Bongjun 0:e11e8793c3ce 234
Bongjun 0:e11e8793c3ce 235 /*
Bongjun 0:e11e8793c3ce 236 * Reset the W5500
Bongjun 0:e11e8793c3ce 237 */
Bongjun 0:e11e8793c3ce 238 void reset();
Bongjun 0:e11e8793c3ce 239
Bongjun 0:e11e8793c3ce 240 int wait_readable(int socket, int wait_time_ms, int req_size = 0);
Bongjun 0:e11e8793c3ce 241
Bongjun 0:e11e8793c3ce 242 int wait_writeable(int socket, int wait_time_ms, int req_size = 0);
Bongjun 0:e11e8793c3ce 243
Bongjun 0:e11e8793c3ce 244 /*
Bongjun 0:e11e8793c3ce 245 * Check if a tcp link is active
Bongjun 0:e11e8793c3ce 246 *
Bongjun 0:e11e8793c3ce 247 * @returns true if successful
Bongjun 0:e11e8793c3ce 248 */
Bongjun 0:e11e8793c3ce 249 bool is_connected(int socket);
hjjeon 9:dfffa4d6f022 250
hjjeon 9:dfffa4d6f022 251 int8_t Socket_macraw(uint8_t sn, uint16_t port, uint8_t flag)
hjjeon 9:dfffa4d6f022 252 {
hjjeon 9:dfffa4d6f022 253 //CHECK_SOCKNUM();
hjjeon 10:713b6d2aaefb 254
hjjeon 9:dfffa4d6f022 255 if((flag & 0x06) != 0) return SOCKERR_SOCKFLAG;
hjjeon 9:dfffa4d6f022 256
hjjeon 9:dfffa4d6f022 257 close(sn);
hjjeon 9:dfffa4d6f022 258 setSn_MR(sn, (Sn_MR_MACRAW | (flag & 0xF0)));
hjjeon 9:dfffa4d6f022 259 if(!port)
hjjeon 9:dfffa4d6f022 260 {
hjjeon 9:dfffa4d6f022 261 port = sock_any_port++;
hjjeon 9:dfffa4d6f022 262 if(sock_any_port == 0xFFF0) sock_any_port = SOCK_ANY_PORT_NUM;
hjjeon 9:dfffa4d6f022 263 }
hjjeon 9:dfffa4d6f022 264 setSn_PORT(sn,port);
hjjeon 9:dfffa4d6f022 265 setSn_CR(sn,Sn_CR_OPEN);
hjjeon 10:713b6d2aaefb 266 while(getSn_CR(sn));
hjjeon 9:dfffa4d6f022 267 //sock_io_mode |= ((flag & SF_IO_NONBLOCK) << sn);
hjjeon 9:dfffa4d6f022 268 //sock_is_sending &= ~(1<<sn);
hjjeon 9:dfffa4d6f022 269 //sock_remained_size[sn] = 0;
hjjeon 9:dfffa4d6f022 270 //sock_pack_info[sn] = 0;
hjjeon 9:dfffa4d6f022 271 while(getSn_SR(sn) == SOCK_CLOSED);
hjjeon 9:dfffa4d6f022 272 return (int8_t)sn;
hjjeon 9:dfffa4d6f022 273 }
Bongjun 0:e11e8793c3ce 274
Bongjun 0:e11e8793c3ce 275 /*
Bongjun 0:e11e8793c3ce 276 * Close a tcp connection
Bongjun 0:e11e8793c3ce 277 *
Bongjun 0:e11e8793c3ce 278 * @ returns true if successful
Bongjun 0:e11e8793c3ce 279 */
Bongjun 0:e11e8793c3ce 280 bool close(int socket);
Bongjun 0:e11e8793c3ce 281
Bongjun 0:e11e8793c3ce 282 /*
Bongjun 0:e11e8793c3ce 283 * @param str string to be sent
Bongjun 0:e11e8793c3ce 284 * @param len string length
Bongjun 0:e11e8793c3ce 285 */
Bongjun 0:e11e8793c3ce 286 int send(int socket, const char * str, int len);
Bongjun 0:e11e8793c3ce 287
Bongjun 0:e11e8793c3ce 288 int recv(int socket, char* buf, int len);
Bongjun 0:e11e8793c3ce 289
Bongjun 0:e11e8793c3ce 290 /*
Bongjun 0:e11e8793c3ce 291 * Return true if the module is using dhcp
Bongjun 0:e11e8793c3ce 292 *
Bongjun 0:e11e8793c3ce 293 * @returns true if the module is using dhcp
Bongjun 0:e11e8793c3ce 294 */
Bongjun 0:e11e8793c3ce 295 bool isDHCP() {
Bongjun 0:e11e8793c3ce 296 return dhcp;
Bongjun 0:e11e8793c3ce 297 }
Bongjun 0:e11e8793c3ce 298
Bongjun 0:e11e8793c3ce 299 bool gethostbyname(const char* host, uint32_t* ip);
Bongjun 0:e11e8793c3ce 300
Bongjun 0:e11e8793c3ce 301 static WIZnet_Chip * getInstance() {
Bongjun 0:e11e8793c3ce 302 return inst;
Bongjun 0:e11e8793c3ce 303 };
Bongjun 0:e11e8793c3ce 304
Bongjun 0:e11e8793c3ce 305 int new_socket();
Bongjun 0:e11e8793c3ce 306 uint16_t new_port();
Bongjun 0:e11e8793c3ce 307 void scmd(int socket, Command cmd);
Bongjun 0:e11e8793c3ce 308
Bongjun 0:e11e8793c3ce 309 template<typename T>
Bongjun 0:e11e8793c3ce 310 void sreg(int socket, uint16_t addr, T data) {
Bongjun 0:e11e8793c3ce 311 reg_wr<T>(addr, (0x0C + (socket << 5)), data);
Bongjun 0:e11e8793c3ce 312 }
Bongjun 0:e11e8793c3ce 313
Bongjun 0:e11e8793c3ce 314 template<typename T>
Bongjun 0:e11e8793c3ce 315 T sreg(int socket, uint16_t addr) {
Bongjun 0:e11e8793c3ce 316 return reg_rd<T>(addr, (0x08 + (socket << 5)));
Bongjun 0:e11e8793c3ce 317 }
Bongjun 0:e11e8793c3ce 318
Bongjun 0:e11e8793c3ce 319 template<typename T>
Bongjun 0:e11e8793c3ce 320 void reg_wr(uint16_t addr, T data) {
Bongjun 0:e11e8793c3ce 321 return reg_wr(addr, 0x04, data);
Bongjun 0:e11e8793c3ce 322 }
Bongjun 0:e11e8793c3ce 323
Bongjun 0:e11e8793c3ce 324 template<typename T>
Bongjun 0:e11e8793c3ce 325 void reg_wr(uint16_t addr, uint8_t cb, T data) {
Bongjun 0:e11e8793c3ce 326 uint8_t buf[sizeof(T)];
Bongjun 0:e11e8793c3ce 327 *reinterpret_cast<T*>(buf) = data;
Bongjun 0:e11e8793c3ce 328 for(int i = 0; i < sizeof(buf)/2; i++) { // Little Endian to Big Endian
Bongjun 0:e11e8793c3ce 329 uint8_t t = buf[i];
Bongjun 0:e11e8793c3ce 330 buf[i] = buf[sizeof(buf)-1-i];
Bongjun 0:e11e8793c3ce 331 buf[sizeof(buf)-1-i] = t;
Bongjun 0:e11e8793c3ce 332 }
Bongjun 0:e11e8793c3ce 333 spi_write(addr, cb, buf, sizeof(buf));
Bongjun 0:e11e8793c3ce 334 }
Bongjun 0:e11e8793c3ce 335
Bongjun 0:e11e8793c3ce 336 template<typename T>
Bongjun 0:e11e8793c3ce 337 T reg_rd(uint16_t addr) {
Bongjun 0:e11e8793c3ce 338 return reg_rd<T>(addr, 0x00);
Bongjun 0:e11e8793c3ce 339 }
Bongjun 0:e11e8793c3ce 340
Bongjun 0:e11e8793c3ce 341 template<typename T>
Bongjun 0:e11e8793c3ce 342 T reg_rd(uint16_t addr, uint8_t cb) {
Bongjun 0:e11e8793c3ce 343 uint8_t buf[sizeof(T)];
Bongjun 0:e11e8793c3ce 344 spi_read(addr, cb, buf, sizeof(buf));
Bongjun 0:e11e8793c3ce 345 for(int i = 0; i < sizeof(buf)/2; i++) { // Big Endian to Little Endian
Bongjun 0:e11e8793c3ce 346 uint8_t t = buf[i];
Bongjun 0:e11e8793c3ce 347 buf[i] = buf[sizeof(buf)-1-i];
Bongjun 0:e11e8793c3ce 348 buf[sizeof(buf)-1-i] = t;
Bongjun 0:e11e8793c3ce 349 }
Bongjun 0:e11e8793c3ce 350 return *reinterpret_cast<T*>(buf);
Bongjun 0:e11e8793c3ce 351 }
Bongjun 0:e11e8793c3ce 352
Bongjun 0:e11e8793c3ce 353 void reg_rd_mac(uint16_t addr, uint8_t* data) {
Bongjun 0:e11e8793c3ce 354 spi_read(addr, 0x00, data, 6);
Bongjun 0:e11e8793c3ce 355 }
Bongjun 0:e11e8793c3ce 356
Bongjun 0:e11e8793c3ce 357 void reg_wr_ip(uint16_t addr, uint8_t cb, const char* ip) {
Bongjun 0:e11e8793c3ce 358 uint8_t buf[4];
Bongjun 0:e11e8793c3ce 359 char* p = (char*)ip;
Bongjun 0:e11e8793c3ce 360 for(int i = 0; i < 4; i++) {
Bongjun 0:e11e8793c3ce 361 buf[i] = atoi(p);
Bongjun 0:e11e8793c3ce 362 p = strchr(p, '.');
Bongjun 0:e11e8793c3ce 363 if (p == NULL) {
Bongjun 0:e11e8793c3ce 364 break;
Bongjun 0:e11e8793c3ce 365 }
Bongjun 0:e11e8793c3ce 366 p++;
Bongjun 0:e11e8793c3ce 367 }
Bongjun 0:e11e8793c3ce 368 spi_write(addr, cb, buf, sizeof(buf));
Bongjun 0:e11e8793c3ce 369 }
hjjeon 10:713b6d2aaefb 370
hjjeon 10:713b6d2aaefb 371 void sreg_ip(int socket, uint16_t addr, const char* ip) {
hjjeon 10:713b6d2aaefb 372 reg_wr_ip(addr, (0x0C + (socket << 5)), ip);
hjjeon 10:713b6d2aaefb 373 }
hjjeon 10:713b6d2aaefb 374
hjjeon 9:dfffa4d6f022 375 void reg_rd_ip_byte(uint16_t addr, uint8_t* data) {
hjjeon 9:dfffa4d6f022 376 spi_read(addr, 0x00, data, 4);
hjjeon 9:dfffa4d6f022 377 }
hjjeon 9:dfffa4d6f022 378
hjjeon 9:dfffa4d6f022 379 void reg_wr_ip_byte(uint16_t addr, uint8_t* data) {
hjjeon 9:dfffa4d6f022 380 spi_write(addr, 0x04, data, 4);
hjjeon 9:dfffa4d6f022 381 }
hjjeon 10:713b6d2aaefb 382
hjjeon 9:dfffa4d6f022 383 /////////////////////////////////
hjjeon 9:dfffa4d6f022 384 // Common Register I/O function //
hjjeon 9:dfffa4d6f022 385 /////////////////////////////////
hjjeon 9:dfffa4d6f022 386 /**
hjjeon 9:dfffa4d6f022 387 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 388 * @brief Set Mode Register
hjjeon 9:dfffa4d6f022 389 * @param (uint8_t)mr The value to be set.
hjjeon 9:dfffa4d6f022 390 * @sa getMR()
hjjeon 9:dfffa4d6f022 391 */
hjjeon 9:dfffa4d6f022 392 void setMR(uint8_t mr) {
hjjeon 9:dfffa4d6f022 393 reg_wr<uint8_t>(MR,mr);
hjjeon 9:dfffa4d6f022 394 }
hjjeon 9:dfffa4d6f022 395
hjjeon 9:dfffa4d6f022 396
hjjeon 9:dfffa4d6f022 397 /**
hjjeon 9:dfffa4d6f022 398 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 399 * @brief Get Mode Register
hjjeon 9:dfffa4d6f022 400 * @return uint8_t. The value of Mode register.
hjjeon 9:dfffa4d6f022 401 * @sa setMR()
hjjeon 9:dfffa4d6f022 402 */
hjjeon 9:dfffa4d6f022 403 uint8_t getMR() {
hjjeon 9:dfffa4d6f022 404 return reg_rd<uint8_t>(MR);
hjjeon 9:dfffa4d6f022 405 }
hjjeon 9:dfffa4d6f022 406
hjjeon 9:dfffa4d6f022 407 /**
hjjeon 9:dfffa4d6f022 408 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 409 * @brief Set gateway IP address
hjjeon 9:dfffa4d6f022 410 * @param (uint8_t*)gar Pointer variable to set gateway IP address. It should be allocated 4 bytes.
hjjeon 9:dfffa4d6f022 411 * @sa getGAR()
hjjeon 9:dfffa4d6f022 412 */
hjjeon 9:dfffa4d6f022 413 void setGAR(uint8_t * gar) {
hjjeon 9:dfffa4d6f022 414 reg_wr_ip_byte(GAR,gar);
hjjeon 9:dfffa4d6f022 415 }
hjjeon 9:dfffa4d6f022 416
hjjeon 9:dfffa4d6f022 417 /**
hjjeon 9:dfffa4d6f022 418 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 419 * @brief Get gateway IP address
hjjeon 9:dfffa4d6f022 420 * @param (uint8_t*)gar Pointer variable to get gateway IP address. It should be allocated 4 bytes.
hjjeon 9:dfffa4d6f022 421 * @sa setGAR()
hjjeon 9:dfffa4d6f022 422 */
hjjeon 9:dfffa4d6f022 423 void getGAR(uint8_t * gar) {
hjjeon 9:dfffa4d6f022 424 reg_rd_ip_byte(GAR,gar);
hjjeon 9:dfffa4d6f022 425 }
hjjeon 9:dfffa4d6f022 426
hjjeon 9:dfffa4d6f022 427 /**
hjjeon 9:dfffa4d6f022 428 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 429 * @brief Set subnet mask address
hjjeon 9:dfffa4d6f022 430 * @param (uint8_t*)subr Pointer variable to set subnet mask address. It should be allocated 4 bytes.
hjjeon 9:dfffa4d6f022 431 * @sa getSUBR()
hjjeon 9:dfffa4d6f022 432 */
hjjeon 9:dfffa4d6f022 433 void setSUBR(uint8_t * subr) {
hjjeon 9:dfffa4d6f022 434 reg_wr_ip_byte(SUBR, subr);
hjjeon 9:dfffa4d6f022 435 }
hjjeon 9:dfffa4d6f022 436
hjjeon 9:dfffa4d6f022 437
hjjeon 9:dfffa4d6f022 438 /**
hjjeon 9:dfffa4d6f022 439 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 440 * @brief Get subnet mask address
hjjeon 9:dfffa4d6f022 441 * @param (uint8_t*)subr Pointer variable to get subnet mask address. It should be allocated 4 bytes.
hjjeon 9:dfffa4d6f022 442 * @sa setSUBR()
hjjeon 9:dfffa4d6f022 443 */
hjjeon 9:dfffa4d6f022 444 void getSUBR(uint8_t * subr) {
hjjeon 9:dfffa4d6f022 445 reg_rd_ip_byte(SUBR, subr);
hjjeon 9:dfffa4d6f022 446 }
hjjeon 9:dfffa4d6f022 447
hjjeon 9:dfffa4d6f022 448 /**
hjjeon 9:dfffa4d6f022 449 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 450 * @brief Set local MAC address
hjjeon 9:dfffa4d6f022 451 * @param (uint8_t*)shar Pointer variable to set local MAC address. It should be allocated 6 bytes.
hjjeon 9:dfffa4d6f022 452 * @sa getSHAR()
hjjeon 9:dfffa4d6f022 453 */
hjjeon 9:dfffa4d6f022 454 void setSHAR(uint8_t * shar) {
hjjeon 9:dfffa4d6f022 455 reg_wr_mac(SHAR, shar);
hjjeon 9:dfffa4d6f022 456 }
hjjeon 9:dfffa4d6f022 457
hjjeon 9:dfffa4d6f022 458 /**
hjjeon 9:dfffa4d6f022 459 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 460 * @brief Get local MAC address
hjjeon 9:dfffa4d6f022 461 * @param (uint8_t*)shar Pointer variable to get local MAC address. It should be allocated 6 bytes.
hjjeon 9:dfffa4d6f022 462 * @sa setSHAR()
hjjeon 9:dfffa4d6f022 463 */
hjjeon 9:dfffa4d6f022 464 void getSHAR(uint8_t * shar) {
hjjeon 9:dfffa4d6f022 465 reg_rd_mac(SHAR, shar);
hjjeon 9:dfffa4d6f022 466 }
hjjeon 9:dfffa4d6f022 467
hjjeon 9:dfffa4d6f022 468 /**
hjjeon 9:dfffa4d6f022 469 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 470 * @brief Set local IP address
hjjeon 9:dfffa4d6f022 471 * @param (uint8_t*)sipr Pointer variable to set local IP address. It should be allocated 4 bytes.
hjjeon 9:dfffa4d6f022 472 * @sa getSIPR()
hjjeon 9:dfffa4d6f022 473 */
hjjeon 9:dfffa4d6f022 474 void setSIPR(uint8_t * sipr) {
hjjeon 9:dfffa4d6f022 475 reg_wr_ip_byte(SIPR, sipr);
hjjeon 9:dfffa4d6f022 476 }
hjjeon 9:dfffa4d6f022 477
hjjeon 9:dfffa4d6f022 478 /**
hjjeon 9:dfffa4d6f022 479 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 480 * @brief Get local IP address
hjjeon 9:dfffa4d6f022 481 * @param (uint8_t*)sipr Pointer variable to get local IP address. It should be allocated 4 bytes.
hjjeon 9:dfffa4d6f022 482 * @sa setSIPR()
hjjeon 9:dfffa4d6f022 483 */
hjjeon 9:dfffa4d6f022 484 void getSIPR(uint8_t * sipr) {
hjjeon 9:dfffa4d6f022 485 reg_rd_ip_byte(SIPR, sipr);
hjjeon 9:dfffa4d6f022 486 }
hjjeon 9:dfffa4d6f022 487
hjjeon 9:dfffa4d6f022 488 /**
hjjeon 9:dfffa4d6f022 489 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 490 * @brief Set INTLEVEL register
hjjeon 9:dfffa4d6f022 491 * @param (uint16_t)intlevel Value to set @ref INTLEVEL register.
hjjeon 9:dfffa4d6f022 492 * @sa getINTLEVEL()
hjjeon 9:dfffa4d6f022 493 */
hjjeon 9:dfffa4d6f022 494 void setINTLEVEL(uint16_t intlevel) {
hjjeon 9:dfffa4d6f022 495 reg_wr<uint16_t>(INTLEVEL, intlevel);
hjjeon 9:dfffa4d6f022 496 }
hjjeon 9:dfffa4d6f022 497
hjjeon 9:dfffa4d6f022 498
hjjeon 9:dfffa4d6f022 499 /**
hjjeon 9:dfffa4d6f022 500 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 501 * @brief Get INTLEVEL register
hjjeon 9:dfffa4d6f022 502 * @return uint16_t. Value of @ref INTLEVEL register.
hjjeon 9:dfffa4d6f022 503 * @sa setINTLEVEL()
hjjeon 9:dfffa4d6f022 504 */
hjjeon 9:dfffa4d6f022 505 uint16_t getINTLEVEL() {
hjjeon 9:dfffa4d6f022 506 return reg_rd<uint16_t>(INTLEVEL);
hjjeon 9:dfffa4d6f022 507 }
hjjeon 9:dfffa4d6f022 508
hjjeon 9:dfffa4d6f022 509 /**
hjjeon 9:dfffa4d6f022 510 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 511 * @brief Set @ref IR register
hjjeon 9:dfffa4d6f022 512 * @param (uint8_t)ir Value to set @ref IR register.
hjjeon 9:dfffa4d6f022 513 * @sa getIR()
hjjeon 9:dfffa4d6f022 514 */
hjjeon 9:dfffa4d6f022 515 void setIR(uint8_t ir) {
hjjeon 9:dfffa4d6f022 516 reg_wr<uint8_t>(IR, (ir & 0xF0));
hjjeon 9:dfffa4d6f022 517 }
hjjeon 9:dfffa4d6f022 518
hjjeon 9:dfffa4d6f022 519 /**
hjjeon 9:dfffa4d6f022 520 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 521 * @brief Get @ref IR register
hjjeon 9:dfffa4d6f022 522 * @return uint8_t. Value of @ref IR register.
hjjeon 9:dfffa4d6f022 523 * @sa setIR()
hjjeon 9:dfffa4d6f022 524 */
hjjeon 9:dfffa4d6f022 525 uint8_t getIR() {
hjjeon 9:dfffa4d6f022 526 return reg_rd<uint8_t>(IR & 0xF0);
hjjeon 9:dfffa4d6f022 527 }
hjjeon 9:dfffa4d6f022 528
hjjeon 9:dfffa4d6f022 529 /**
hjjeon 9:dfffa4d6f022 530 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 531 * @brief Set @ref IMR register
hjjeon 9:dfffa4d6f022 532 * @param (uint8_t)imr Value to set @ref IMR register.
hjjeon 9:dfffa4d6f022 533 * @sa getIMR()
hjjeon 9:dfffa4d6f022 534 */
hjjeon 9:dfffa4d6f022 535 void setIMR(uint8_t imr) {
hjjeon 9:dfffa4d6f022 536 reg_wr<uint8_t>(IMR, imr);
hjjeon 9:dfffa4d6f022 537 }
hjjeon 9:dfffa4d6f022 538
hjjeon 9:dfffa4d6f022 539 /**
hjjeon 9:dfffa4d6f022 540 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 541 * @brief Get @ref IMR register
hjjeon 9:dfffa4d6f022 542 * @return uint8_t. Value of @ref IMR register.
hjjeon 9:dfffa4d6f022 543 * @sa setIMR()
hjjeon 9:dfffa4d6f022 544 */
hjjeon 9:dfffa4d6f022 545 uint8_t getIMR() {
hjjeon 9:dfffa4d6f022 546 return reg_rd<uint8_t>(IMR);
hjjeon 9:dfffa4d6f022 547 }
hjjeon 9:dfffa4d6f022 548
hjjeon 9:dfffa4d6f022 549
hjjeon 9:dfffa4d6f022 550 /**
hjjeon 9:dfffa4d6f022 551 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 552 * @brief Set @ref SIR register
hjjeon 9:dfffa4d6f022 553 * @param (uint8_t)sir Value to set @ref SIR register.
hjjeon 9:dfffa4d6f022 554 * @sa getSIR()
hjjeon 9:dfffa4d6f022 555 */
hjjeon 9:dfffa4d6f022 556 void setSIR(uint8_t sir) {
hjjeon 9:dfffa4d6f022 557 reg_wr<uint8_t>(SIR, sir);
hjjeon 9:dfffa4d6f022 558 }
hjjeon 9:dfffa4d6f022 559
hjjeon 9:dfffa4d6f022 560 /**
hjjeon 9:dfffa4d6f022 561 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 562 * @brief Get @ref SIR register
hjjeon 9:dfffa4d6f022 563 * @return uint8_t. Value of @ref SIR register.
hjjeon 9:dfffa4d6f022 564 * @sa setSIR()
hjjeon 9:dfffa4d6f022 565 */
hjjeon 9:dfffa4d6f022 566 uint8_t getSIR() {
hjjeon 9:dfffa4d6f022 567 return reg_rd<uint8_t>(SIR);
hjjeon 9:dfffa4d6f022 568 }
hjjeon 9:dfffa4d6f022 569 /**
hjjeon 9:dfffa4d6f022 570 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 571 * @brief Set @ref SIMR register
hjjeon 9:dfffa4d6f022 572 * @param (uint8_t)simr Value to set @ref SIMR register.
hjjeon 9:dfffa4d6f022 573 * @sa getSIMR()
hjjeon 9:dfffa4d6f022 574 */
hjjeon 9:dfffa4d6f022 575 void setSIMR(uint8_t simr) {
hjjeon 9:dfffa4d6f022 576 reg_wr<uint8_t>(SIMR, simr);
hjjeon 9:dfffa4d6f022 577 }
hjjeon 9:dfffa4d6f022 578
hjjeon 9:dfffa4d6f022 579 /**
hjjeon 9:dfffa4d6f022 580 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 581 * @brief Get @ref SIMR register
hjjeon 9:dfffa4d6f022 582 * @return uint8_t. Value of @ref SIMR register.
hjjeon 9:dfffa4d6f022 583 * @sa setSIMR()
hjjeon 9:dfffa4d6f022 584 */
hjjeon 9:dfffa4d6f022 585 uint8_t getSIMR() {
hjjeon 9:dfffa4d6f022 586 return reg_rd<uint8_t>(SIMR);
hjjeon 9:dfffa4d6f022 587 }
hjjeon 9:dfffa4d6f022 588
hjjeon 9:dfffa4d6f022 589 /**
hjjeon 9:dfffa4d6f022 590 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 591 * @brief Set @ref RTR register
hjjeon 9:dfffa4d6f022 592 * @param (uint16_t)rtr Value to set @ref RTR register.
hjjeon 9:dfffa4d6f022 593 * @sa getRTR()
hjjeon 9:dfffa4d6f022 594 */
hjjeon 9:dfffa4d6f022 595 void setRTR(uint16_t rtr) {
hjjeon 9:dfffa4d6f022 596 reg_wr<uint16_t>(RTR, rtr);
hjjeon 9:dfffa4d6f022 597 }
hjjeon 9:dfffa4d6f022 598
hjjeon 9:dfffa4d6f022 599 /**
hjjeon 9:dfffa4d6f022 600 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 601 * @brief Get @ref RTR register
hjjeon 9:dfffa4d6f022 602 * @return uint16_t. Value of @ref RTR register.
hjjeon 9:dfffa4d6f022 603 * @sa setRTR()
hjjeon 9:dfffa4d6f022 604 */
hjjeon 9:dfffa4d6f022 605 uint16_t getRTR() {
hjjeon 9:dfffa4d6f022 606 return reg_rd<uint16_t>(RTR);
hjjeon 9:dfffa4d6f022 607 }
hjjeon 9:dfffa4d6f022 608
hjjeon 9:dfffa4d6f022 609 /**
hjjeon 9:dfffa4d6f022 610 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 611 * @brief Set @ref RCR register
hjjeon 9:dfffa4d6f022 612 * @param (uint8_t)rcr Value to set @ref RCR register.
hjjeon 9:dfffa4d6f022 613 * @sa getRCR()
hjjeon 9:dfffa4d6f022 614 */
hjjeon 9:dfffa4d6f022 615 void setRCR(uint8_t rcr) {
hjjeon 9:dfffa4d6f022 616 reg_wr<uint8_t>(RCR, rcr);
hjjeon 9:dfffa4d6f022 617 }
hjjeon 9:dfffa4d6f022 618
hjjeon 9:dfffa4d6f022 619 /**
hjjeon 9:dfffa4d6f022 620 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 621 * @brief Get @ref RCR register
hjjeon 9:dfffa4d6f022 622 * @return uint8_t. Value of @ref RCR register.
hjjeon 9:dfffa4d6f022 623 * @sa setRCR()
hjjeon 9:dfffa4d6f022 624 */
hjjeon 9:dfffa4d6f022 625 uint8_t getRCR() {
hjjeon 9:dfffa4d6f022 626 return reg_rd<uint8_t>(RCR);
hjjeon 9:dfffa4d6f022 627 }
hjjeon 9:dfffa4d6f022 628
hjjeon 9:dfffa4d6f022 629 //================================================== test done ===========================================================
hjjeon 9:dfffa4d6f022 630
hjjeon 9:dfffa4d6f022 631 /**
hjjeon 9:dfffa4d6f022 632 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 633 * @brief Set @ref PTIMER register
hjjeon 9:dfffa4d6f022 634 * @param (uint8_t)ptimer Value to set @ref PTIMER register.
hjjeon 9:dfffa4d6f022 635 * @sa getPTIMER()
hjjeon 9:dfffa4d6f022 636 */
hjjeon 9:dfffa4d6f022 637 void setPTIMER(uint8_t ptimer) {
hjjeon 9:dfffa4d6f022 638 reg_wr<uint8_t>(PTIMER, ptimer);
hjjeon 9:dfffa4d6f022 639 }
hjjeon 9:dfffa4d6f022 640
hjjeon 9:dfffa4d6f022 641 /**
hjjeon 9:dfffa4d6f022 642 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 643 * @brief Get @ref PTIMER register
hjjeon 9:dfffa4d6f022 644 * @return uint8_t. Value of @ref PTIMER register.
hjjeon 9:dfffa4d6f022 645 * @sa setPTIMER()
hjjeon 9:dfffa4d6f022 646 */
hjjeon 9:dfffa4d6f022 647 uint8_t getPTIMER() {
hjjeon 9:dfffa4d6f022 648 return reg_rd<uint8_t>(PTIMER);
hjjeon 9:dfffa4d6f022 649 }
hjjeon 9:dfffa4d6f022 650
hjjeon 9:dfffa4d6f022 651 /**
hjjeon 9:dfffa4d6f022 652 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 653 * @brief Set @ref PMAGIC register
hjjeon 9:dfffa4d6f022 654 * @param (uint8_t)pmagic Value to set @ref PMAGIC register.
hjjeon 9:dfffa4d6f022 655 * @sa getPMAGIC()
hjjeon 9:dfffa4d6f022 656 */
hjjeon 9:dfffa4d6f022 657 /*
hjjeon 9:dfffa4d6f022 658 #define setPMAGIC(pmagic) \
hjjeon 9:dfffa4d6f022 659 WIZCHIP_WRITE(PMAGIC, pmagic)
hjjeon 9:dfffa4d6f022 660 */
hjjeon 9:dfffa4d6f022 661 void setPMAGIC(uint8_t pmagic) {
hjjeon 9:dfffa4d6f022 662 reg_wr<uint8_t>(PMAGIC, pmagic );
hjjeon 9:dfffa4d6f022 663 }
hjjeon 9:dfffa4d6f022 664 /**
hjjeon 9:dfffa4d6f022 665 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 666 * @brief Get @ref PMAGIC register
hjjeon 9:dfffa4d6f022 667 * @return uint8_t. Value of @ref PMAGIC register.
hjjeon 9:dfffa4d6f022 668 * @sa setPMAGIC()
hjjeon 9:dfffa4d6f022 669 */
hjjeon 9:dfffa4d6f022 670 /*
hjjeon 9:dfffa4d6f022 671 #define getPMAGIC() \
hjjeon 9:dfffa4d6f022 672 WIZCHIP_READ(PMAGIC)
hjjeon 9:dfffa4d6f022 673 */
hjjeon 9:dfffa4d6f022 674 uint8_t getPMAGIC(uint8_t pmagic) {
hjjeon 9:dfffa4d6f022 675 return reg_rd<uint8_t>(PMAGIC, pmagic);
hjjeon 9:dfffa4d6f022 676 }
hjjeon 9:dfffa4d6f022 677 /**
hjjeon 9:dfffa4d6f022 678 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 679 * @brief Set PHAR address
hjjeon 9:dfffa4d6f022 680 * @param (uint8_t*)phar Pointer variable to set PPP destination MAC register address. It should be allocated 6 bytes.
hjjeon 9:dfffa4d6f022 681 * @sa getPHAR()
hjjeon 9:dfffa4d6f022 682 */
hjjeon 9:dfffa4d6f022 683 void setPHAR(uint8_t * phar) {
hjjeon 9:dfffa4d6f022 684 reg_wr_mac(PHAR, phar);
hjjeon 9:dfffa4d6f022 685 }
hjjeon 9:dfffa4d6f022 686
hjjeon 9:dfffa4d6f022 687 /**
hjjeon 9:dfffa4d6f022 688 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 689 * @brief Get local IP address
hjjeon 9:dfffa4d6f022 690 * @param (uint8_t*)phar Pointer variable to PPP destination MAC register address. It should be allocated 6 bytes.
hjjeon 9:dfffa4d6f022 691 * @sa setPHAR()
hjjeon 9:dfffa4d6f022 692 */
hjjeon 9:dfffa4d6f022 693 void getPHAR(uint8_t * phar) {
hjjeon 9:dfffa4d6f022 694 reg_rd_mac(PHAR, phar);
hjjeon 9:dfffa4d6f022 695 }
hjjeon 9:dfffa4d6f022 696
hjjeon 9:dfffa4d6f022 697 /**
hjjeon 9:dfffa4d6f022 698 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 699 * @brief Set @ref PSID register
hjjeon 9:dfffa4d6f022 700 * @param (uint16_t)psid Value to set @ref PSID register.
hjjeon 9:dfffa4d6f022 701 * @sa getPSID()
hjjeon 9:dfffa4d6f022 702 */
hjjeon 9:dfffa4d6f022 703 void setPSID(uint16_t psid) {
hjjeon 9:dfffa4d6f022 704 reg_wr<uint16_t>(PSID, psid );
hjjeon 9:dfffa4d6f022 705 }
hjjeon 9:dfffa4d6f022 706
hjjeon 9:dfffa4d6f022 707 /**
hjjeon 9:dfffa4d6f022 708 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 709 * @brief Get @ref PSID register
hjjeon 9:dfffa4d6f022 710 * @return uint16_t. Value of @ref PSID register.
hjjeon 9:dfffa4d6f022 711 * @sa setPSID()
hjjeon 9:dfffa4d6f022 712 */
hjjeon 9:dfffa4d6f022 713 //uint16_t getPSID(void);
hjjeon 9:dfffa4d6f022 714 uint16_t getPSID() {
hjjeon 9:dfffa4d6f022 715 return reg_rd<uint16_t>(PSID);
hjjeon 9:dfffa4d6f022 716 }
hjjeon 9:dfffa4d6f022 717
hjjeon 9:dfffa4d6f022 718 /**
hjjeon 9:dfffa4d6f022 719 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 720 * @brief Set @ref PMRU register
hjjeon 9:dfffa4d6f022 721 * @param (uint16_t)pmru Value to set @ref PMRU register.
hjjeon 9:dfffa4d6f022 722 * @sa getPMRU()
hjjeon 9:dfffa4d6f022 723 */
hjjeon 9:dfffa4d6f022 724 void setPMRU(uint16_t pmru) {
hjjeon 9:dfffa4d6f022 725 reg_wr<uint16_t>(PMRU, pmru);
hjjeon 9:dfffa4d6f022 726 }
hjjeon 9:dfffa4d6f022 727
hjjeon 9:dfffa4d6f022 728 /**
hjjeon 9:dfffa4d6f022 729 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 730 * @brief Get @ref PMRU register
hjjeon 9:dfffa4d6f022 731 * @return uint16_t. Value of @ref PMRU register.
hjjeon 9:dfffa4d6f022 732 * @sa setPMRU()
hjjeon 9:dfffa4d6f022 733 */
hjjeon 9:dfffa4d6f022 734 uint16_t getPMRU() {
hjjeon 9:dfffa4d6f022 735 return reg_rd<uint16_t>(PMRU);
hjjeon 9:dfffa4d6f022 736 }
hjjeon 9:dfffa4d6f022 737
hjjeon 9:dfffa4d6f022 738 /**
hjjeon 9:dfffa4d6f022 739 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 740 * @brief Get unreachable IP address
hjjeon 9:dfffa4d6f022 741 * @param (uint8_t*)uipr Pointer variable to get unreachable IP address. It should be allocated 4 bytes.
hjjeon 9:dfffa4d6f022 742 */
hjjeon 9:dfffa4d6f022 743 void getUIPR(uint8_t * uipr) {
hjjeon 9:dfffa4d6f022 744 reg_rd_ip_byte(UIPR,uipr);
hjjeon 9:dfffa4d6f022 745 }
hjjeon 9:dfffa4d6f022 746
hjjeon 9:dfffa4d6f022 747 /**
hjjeon 9:dfffa4d6f022 748 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 749 * @brief Get @ref UPORTR register
hjjeon 9:dfffa4d6f022 750 * @return uint16_t. Value of @ref UPORTR register.
hjjeon 9:dfffa4d6f022 751 */
hjjeon 9:dfffa4d6f022 752 uint16_t getUPORTR() {
hjjeon 9:dfffa4d6f022 753 return reg_rd<uint16_t>(UPORTR);
hjjeon 9:dfffa4d6f022 754 }
hjjeon 9:dfffa4d6f022 755
hjjeon 9:dfffa4d6f022 756 /**
hjjeon 9:dfffa4d6f022 757 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 758 * @brief Set @ref PHYCFGR register
hjjeon 9:dfffa4d6f022 759 * @param (uint8_t)phycfgr Value to set @ref PHYCFGR register.
hjjeon 9:dfffa4d6f022 760 * @sa getPHYCFGR()
hjjeon 9:dfffa4d6f022 761 */
hjjeon 9:dfffa4d6f022 762 void setPHYCFGR(uint8_t phycfgr) {
hjjeon 9:dfffa4d6f022 763 reg_wr<uint8_t>(PHYCFGR, phycfgr);
hjjeon 9:dfffa4d6f022 764 }
hjjeon 9:dfffa4d6f022 765
hjjeon 9:dfffa4d6f022 766 /**
hjjeon 9:dfffa4d6f022 767 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 768 * @brief Get @ref PHYCFGR register
hjjeon 9:dfffa4d6f022 769 * @return uint8_t. Value of @ref PHYCFGR register.
hjjeon 9:dfffa4d6f022 770 * @sa setPHYCFGR()
hjjeon 9:dfffa4d6f022 771 */
hjjeon 9:dfffa4d6f022 772 uint8_t getPHYCFGR() {
hjjeon 9:dfffa4d6f022 773 return reg_rd<uint8_t>(PHYCFGR);
hjjeon 9:dfffa4d6f022 774 }
hjjeon 9:dfffa4d6f022 775
hjjeon 9:dfffa4d6f022 776 /**
hjjeon 9:dfffa4d6f022 777 * @ingroup Common_register_access_function
hjjeon 9:dfffa4d6f022 778 * @brief Get @ref VERSIONR register
hjjeon 9:dfffa4d6f022 779 * @return uint8_t. Value of @ref VERSIONR register.
hjjeon 9:dfffa4d6f022 780 */
hjjeon 9:dfffa4d6f022 781 uint8_t getVERSIONR() {
hjjeon 9:dfffa4d6f022 782 return reg_rd<uint8_t>(VERSIONR);
hjjeon 9:dfffa4d6f022 783 }
hjjeon 9:dfffa4d6f022 784
hjjeon 9:dfffa4d6f022 785 /////////////////////////////////////
hjjeon 9:dfffa4d6f022 786
hjjeon 9:dfffa4d6f022 787 ///////////////////////////////////
hjjeon 9:dfffa4d6f022 788 // Socket N register I/O function //
hjjeon 9:dfffa4d6f022 789 ///////////////////////////////////
hjjeon 9:dfffa4d6f022 790 /**
hjjeon 9:dfffa4d6f022 791 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 792 * @brief Set @ref Sn_MR register
hjjeon 9:dfffa4d6f022 793 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 794 * @param (uint8_t)mr Value to set @ref Sn_MR
hjjeon 9:dfffa4d6f022 795 * @sa getSn_MR()
hjjeon 9:dfffa4d6f022 796 */
hjjeon 9:dfffa4d6f022 797 void setSn_MR(uint8_t sn, uint8_t mr) {
hjjeon 9:dfffa4d6f022 798 sreg<uint8_t>(sn, MR, mr);
hjjeon 9:dfffa4d6f022 799 }
hjjeon 9:dfffa4d6f022 800
hjjeon 9:dfffa4d6f022 801 /**
hjjeon 9:dfffa4d6f022 802 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 803 * @brief Get @ref Sn_MR register
hjjeon 9:dfffa4d6f022 804 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 805 * @return uint8_t. Value of @ref Sn_MR.
hjjeon 9:dfffa4d6f022 806 * @sa setSn_MR()
hjjeon 9:dfffa4d6f022 807 */
hjjeon 9:dfffa4d6f022 808 uint8_t getSn_MR(uint8_t sn) {
hjjeon 9:dfffa4d6f022 809 return sreg<uint8_t>(sn, Sn_MR);
hjjeon 9:dfffa4d6f022 810 }
hjjeon 9:dfffa4d6f022 811
hjjeon 9:dfffa4d6f022 812 /**
hjjeon 9:dfffa4d6f022 813 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 814 * @brief Set @ref Sn_CR register
hjjeon 9:dfffa4d6f022 815 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 816 * @param (uint8_t)cr Value to set @ref Sn_CR
hjjeon 9:dfffa4d6f022 817 * @sa getSn_CR()
hjjeon 9:dfffa4d6f022 818 */
hjjeon 9:dfffa4d6f022 819 void setSn_CR(uint8_t sn, uint8_t cr) {
hjjeon 9:dfffa4d6f022 820 sreg<uint8_t>(sn, Sn_CR, cr);
hjjeon 9:dfffa4d6f022 821 }
hjjeon 9:dfffa4d6f022 822
hjjeon 9:dfffa4d6f022 823 /**
hjjeon 9:dfffa4d6f022 824 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 825 * @brief Get @ref Sn_CR register
hjjeon 9:dfffa4d6f022 826 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 827 * @return uint8_t. Value of @ref Sn_CR.
hjjeon 9:dfffa4d6f022 828 * @sa setSn_CR()
hjjeon 9:dfffa4d6f022 829 */
hjjeon 9:dfffa4d6f022 830 uint8_t getSn_CR(uint8_t sn) {
hjjeon 9:dfffa4d6f022 831 return sreg<uint8_t>(sn, Sn_CR);
hjjeon 9:dfffa4d6f022 832 }
hjjeon 9:dfffa4d6f022 833
hjjeon 9:dfffa4d6f022 834 /**
hjjeon 9:dfffa4d6f022 835 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 836 * @brief Set @ref Sn_IR register
hjjeon 9:dfffa4d6f022 837 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 838 * @param (uint8_t)ir Value to set @ref Sn_IR
hjjeon 9:dfffa4d6f022 839 * @sa getSn_IR()
hjjeon 9:dfffa4d6f022 840 */
hjjeon 9:dfffa4d6f022 841 void setSn_IR(uint8_t sn, uint8_t ir) {
hjjeon 9:dfffa4d6f022 842 sreg<uint8_t>(sn, Sn_IR, (ir & 0x1F));
hjjeon 9:dfffa4d6f022 843 }
hjjeon 9:dfffa4d6f022 844
hjjeon 9:dfffa4d6f022 845 /**
hjjeon 9:dfffa4d6f022 846 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 847 * @brief Get @ref Sn_IR register
hjjeon 9:dfffa4d6f022 848 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 849 * @return uint8_t. Value of @ref Sn_IR.
hjjeon 9:dfffa4d6f022 850 * @sa setSn_IR()
hjjeon 9:dfffa4d6f022 851 */
hjjeon 9:dfffa4d6f022 852 uint8_t getSn_IR(uint8_t sn) {
hjjeon 9:dfffa4d6f022 853 return (sreg<uint8_t>(sn, Sn_IR)) & 0x1F;
hjjeon 9:dfffa4d6f022 854 }
hjjeon 9:dfffa4d6f022 855
hjjeon 9:dfffa4d6f022 856 /**
hjjeon 9:dfffa4d6f022 857 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 858 * @brief Set @ref Sn_IMR register
hjjeon 9:dfffa4d6f022 859 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 860 * @param (uint8_t)imr Value to set @ref Sn_IMR
hjjeon 9:dfffa4d6f022 861 * @sa getSn_IMR()
hjjeon 9:dfffa4d6f022 862 */
hjjeon 9:dfffa4d6f022 863 void setSn_IMR(uint8_t sn, uint8_t imr) {
hjjeon 9:dfffa4d6f022 864 sreg<uint8_t>(sn, Sn_IMR, (imr & 0x1F));
hjjeon 9:dfffa4d6f022 865 }
hjjeon 9:dfffa4d6f022 866
hjjeon 9:dfffa4d6f022 867 /**
hjjeon 9:dfffa4d6f022 868 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 869 * @brief Get @ref Sn_IMR register
hjjeon 9:dfffa4d6f022 870 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 871 * @return uint8_t. Value of @ref Sn_IMR.
hjjeon 9:dfffa4d6f022 872 * @sa setSn_IMR()
hjjeon 9:dfffa4d6f022 873 */
hjjeon 9:dfffa4d6f022 874 uint8_t getSn_IMR(uint8_t sn) {
hjjeon 9:dfffa4d6f022 875 return (sreg<uint8_t>(sn, Sn_IMR)) & 0x1F;
hjjeon 9:dfffa4d6f022 876 }
hjjeon 9:dfffa4d6f022 877
hjjeon 9:dfffa4d6f022 878 /**
hjjeon 9:dfffa4d6f022 879 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 880 * @brief Get @ref Sn_SR register
hjjeon 9:dfffa4d6f022 881 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 882 * @return uint8_t. Value of @ref Sn_SR.
hjjeon 9:dfffa4d6f022 883 */
hjjeon 9:dfffa4d6f022 884 uint8_t getSn_SR(uint8_t sn) {
hjjeon 9:dfffa4d6f022 885 return sreg<uint8_t>(sn, Sn_SR);
hjjeon 9:dfffa4d6f022 886 }
hjjeon 9:dfffa4d6f022 887
hjjeon 9:dfffa4d6f022 888 /**
hjjeon 9:dfffa4d6f022 889 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 890 * @brief Set @ref Sn_PORT register
hjjeon 9:dfffa4d6f022 891 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 892 * @param (uint16_t)port Value to set @ref Sn_PORT.
hjjeon 9:dfffa4d6f022 893 * @sa getSn_PORT()
hjjeon 9:dfffa4d6f022 894 */
hjjeon 9:dfffa4d6f022 895 void setSn_PORT(uint8_t sn, uint16_t port) {
hjjeon 9:dfffa4d6f022 896 sreg<uint16_t>(sn, Sn_PORT, port );
hjjeon 9:dfffa4d6f022 897 }
hjjeon 9:dfffa4d6f022 898
hjjeon 9:dfffa4d6f022 899 /**
hjjeon 9:dfffa4d6f022 900 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 901 * @brief Get @ref Sn_PORT register
hjjeon 9:dfffa4d6f022 902 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 903 * @return uint16_t. Value of @ref Sn_PORT.
hjjeon 9:dfffa4d6f022 904 * @sa setSn_PORT()
hjjeon 9:dfffa4d6f022 905 */
hjjeon 9:dfffa4d6f022 906 uint16_t getSn_PORT(uint8_t sn) {
hjjeon 9:dfffa4d6f022 907 return sreg<uint16_t>(sn, Sn_PORT);
hjjeon 9:dfffa4d6f022 908 }
hjjeon 9:dfffa4d6f022 909
hjjeon 9:dfffa4d6f022 910 /**
hjjeon 9:dfffa4d6f022 911 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 912 * @brief Set @ref Sn_DHAR register
hjjeon 9:dfffa4d6f022 913 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 914 * @param (uint8_t*)dhar Pointer variable to set socket n destination hardware address. It should be allocated 6 bytes.
hjjeon 9:dfffa4d6f022 915 * @sa getSn_DHAR()
hjjeon 9:dfffa4d6f022 916 */
hjjeon 9:dfffa4d6f022 917 void setSn_DHAR(uint8_t sn, uint8_t * dhar) {
hjjeon 9:dfffa4d6f022 918 spi_write(Sn_DHAR, (0x0C + (sn << 5)), dhar, 6);
hjjeon 9:dfffa4d6f022 919 }
hjjeon 9:dfffa4d6f022 920
hjjeon 9:dfffa4d6f022 921 /**
hjjeon 9:dfffa4d6f022 922 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 923 * @brief Get @ref Sn_MR register
hjjeon 9:dfffa4d6f022 924 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 925 * @param (uint8_t*)dhar Pointer variable to get socket n destination hardware address. It should be allocated 6 bytes.
hjjeon 9:dfffa4d6f022 926 * @sa setSn_DHAR()
hjjeon 9:dfffa4d6f022 927 */
hjjeon 9:dfffa4d6f022 928 void getSn_DHAR(uint8_t sn, uint8_t * dhar) {
hjjeon 9:dfffa4d6f022 929 spi_read(Sn_DHAR, (0x08 + (sn << 5)), dhar, 6);
hjjeon 9:dfffa4d6f022 930 }
hjjeon 9:dfffa4d6f022 931
hjjeon 9:dfffa4d6f022 932 /**
hjjeon 9:dfffa4d6f022 933 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 934 * @brief Set @ref Sn_DIPR register
hjjeon 9:dfffa4d6f022 935 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 936 * @param (uint8_t*)dipr Pointer variable to set socket n destination IP address. It should be allocated 4 bytes.
hjjeon 9:dfffa4d6f022 937 * @sa getSn_DIPR()
hjjeon 9:dfffa4d6f022 938 */
hjjeon 9:dfffa4d6f022 939 void setSn_DIPR(uint8_t sn, uint8_t * dipr) {
hjjeon 9:dfffa4d6f022 940 spi_write(Sn_DIPR, (0x0C + (sn << 5)), dipr, 4);
hjjeon 9:dfffa4d6f022 941 }
hjjeon 9:dfffa4d6f022 942
hjjeon 9:dfffa4d6f022 943 /**
hjjeon 9:dfffa4d6f022 944 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 945 * @brief Get @ref Sn_DIPR register
hjjeon 9:dfffa4d6f022 946 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 947 * @param (uint8_t*)dipr Pointer variable to get socket n destination IP address. It should be allocated 4 bytes.
hjjeon 9:dfffa4d6f022 948 * @sa SetSn_DIPR()
hjjeon 9:dfffa4d6f022 949 */
hjjeon 9:dfffa4d6f022 950 void getSn_DIPR(uint8_t sn, uint8_t * dipr) {
hjjeon 9:dfffa4d6f022 951 spi_read(Sn_DIPR, (0x08 + (sn << 5)), dipr, 4);
hjjeon 9:dfffa4d6f022 952 }
hjjeon 9:dfffa4d6f022 953
hjjeon 9:dfffa4d6f022 954 /**
hjjeon 9:dfffa4d6f022 955 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 956 * @brief Set @ref Sn_DPORT register
hjjeon 9:dfffa4d6f022 957 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 958 * @param (uint16_t)dport Value to set @ref Sn_DPORT
hjjeon 9:dfffa4d6f022 959 * @sa getSn_DPORT()
hjjeon 9:dfffa4d6f022 960 */
hjjeon 9:dfffa4d6f022 961 void setSn_DPORT(uint8_t sn, uint16_t dport) {
hjjeon 9:dfffa4d6f022 962 sreg<uint16_t>(sn, Sn_DPORT, dport);
hjjeon 9:dfffa4d6f022 963 }
hjjeon 9:dfffa4d6f022 964
hjjeon 9:dfffa4d6f022 965 /**
hjjeon 9:dfffa4d6f022 966 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 967 * @brief Get @ref Sn_DPORT register
hjjeon 9:dfffa4d6f022 968 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 969 * @return uint16_t. Value of @ref Sn_DPORT.
hjjeon 9:dfffa4d6f022 970 * @sa setSn_DPORT()
hjjeon 9:dfffa4d6f022 971 */
hjjeon 9:dfffa4d6f022 972 uint16_t getSn_DPORT(uint8_t sn) {
hjjeon 9:dfffa4d6f022 973 return sreg<uint16_t>(sn, Sn_DPORT);
hjjeon 9:dfffa4d6f022 974 }
hjjeon 9:dfffa4d6f022 975
hjjeon 9:dfffa4d6f022 976 /**
hjjeon 9:dfffa4d6f022 977 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 978 * @brief Set @ref Sn_MSSR register
hjjeon 9:dfffa4d6f022 979 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 980 * @param (uint16_t)mss Value to set @ref Sn_MSSR
hjjeon 9:dfffa4d6f022 981 * @sa setSn_MSSR()
hjjeon 9:dfffa4d6f022 982 */
hjjeon 9:dfffa4d6f022 983 void setSn_MSSR(uint8_t sn, uint16_t mss) {
hjjeon 9:dfffa4d6f022 984 sreg<uint16_t>(sn, Sn_MSSR, mss);
hjjeon 9:dfffa4d6f022 985 }
hjjeon 9:dfffa4d6f022 986
hjjeon 9:dfffa4d6f022 987 /**
hjjeon 9:dfffa4d6f022 988 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 989 * @brief Get @ref Sn_MSSR register
hjjeon 9:dfffa4d6f022 990 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 991 * @return uint16_t. Value of @ref Sn_MSSR.
hjjeon 9:dfffa4d6f022 992 * @sa setSn_MSSR()
hjjeon 9:dfffa4d6f022 993 */
hjjeon 9:dfffa4d6f022 994 uint16_t getSn_MSSR(uint16_t sn) {
hjjeon 9:dfffa4d6f022 995 return sreg<uint16_t>(sn, Sn_MSSR);
hjjeon 9:dfffa4d6f022 996 }
hjjeon 9:dfffa4d6f022 997
hjjeon 9:dfffa4d6f022 998 /**
hjjeon 9:dfffa4d6f022 999 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1000 * @brief Set @ref Sn_TOS register
hjjeon 9:dfffa4d6f022 1001 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1002 * @param (uint8_t)tos Value to set @ref Sn_TOS
hjjeon 9:dfffa4d6f022 1003 * @sa getSn_TOS()
hjjeon 9:dfffa4d6f022 1004 */
hjjeon 9:dfffa4d6f022 1005 void setSn_TOS(uint8_t sn, uint8_t tos) {
hjjeon 9:dfffa4d6f022 1006 sreg<uint8_t>(sn, Sn_TOS, tos);
hjjeon 9:dfffa4d6f022 1007 }
hjjeon 9:dfffa4d6f022 1008
hjjeon 9:dfffa4d6f022 1009 /**
hjjeon 9:dfffa4d6f022 1010 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1011 * @brief Get @ref Sn_TOS register
hjjeon 9:dfffa4d6f022 1012 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1013 * @return uint8_t. Value of Sn_TOS.
hjjeon 9:dfffa4d6f022 1014 * @sa setSn_TOS()
hjjeon 9:dfffa4d6f022 1015 */
hjjeon 9:dfffa4d6f022 1016 uint8_t getSn_TOS(uint8_t sn) {
hjjeon 9:dfffa4d6f022 1017 return sreg<uint8_t>(sn, Sn_TOS);
hjjeon 9:dfffa4d6f022 1018 }
hjjeon 9:dfffa4d6f022 1019
hjjeon 9:dfffa4d6f022 1020 /**
hjjeon 9:dfffa4d6f022 1021 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1022 * @brief Set @ref Sn_TTL register
hjjeon 9:dfffa4d6f022 1023 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1024 * @param (uint8_t)ttl Value to set @ref Sn_TTL
hjjeon 9:dfffa4d6f022 1025 * @sa getSn_TTL()
hjjeon 9:dfffa4d6f022 1026 */
hjjeon 9:dfffa4d6f022 1027 void setSn_TTL(uint8_t sn, uint8_t ttl) {
hjjeon 9:dfffa4d6f022 1028 sreg<uint8_t>(sn, Sn_TTL, ttl);
hjjeon 9:dfffa4d6f022 1029 }
hjjeon 9:dfffa4d6f022 1030
hjjeon 9:dfffa4d6f022 1031
hjjeon 9:dfffa4d6f022 1032 /**
hjjeon 9:dfffa4d6f022 1033 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1034 * @brief Get @ref Sn_TTL register
hjjeon 9:dfffa4d6f022 1035 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1036 * @return uint8_t. Value of @ref Sn_TTL.
hjjeon 9:dfffa4d6f022 1037 * @sa setSn_TTL()
hjjeon 9:dfffa4d6f022 1038 */
hjjeon 9:dfffa4d6f022 1039 uint8_t getSn_TTL(uint8_t sn) {
hjjeon 9:dfffa4d6f022 1040 return sreg<uint8_t>(sn, Sn_TTL);
hjjeon 9:dfffa4d6f022 1041 }
hjjeon 9:dfffa4d6f022 1042
hjjeon 9:dfffa4d6f022 1043
hjjeon 9:dfffa4d6f022 1044 /**
hjjeon 9:dfffa4d6f022 1045 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1046 * @brief Set @ref Sn_RXBUF_SIZE register
hjjeon 9:dfffa4d6f022 1047 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1048 * @param (uint8_t)rxbufsize Value to set @ref Sn_RXBUF_SIZE
hjjeon 9:dfffa4d6f022 1049 * @sa getSn_RXBUF_SIZE()
hjjeon 9:dfffa4d6f022 1050 */
hjjeon 9:dfffa4d6f022 1051 void setSn_RXBUF_SIZE(uint8_t sn, uint8_t rxbufsize) {
hjjeon 9:dfffa4d6f022 1052 sreg<uint8_t>(sn, Sn_RXBUF_SIZE ,rxbufsize);
hjjeon 9:dfffa4d6f022 1053 }
hjjeon 9:dfffa4d6f022 1054
hjjeon 9:dfffa4d6f022 1055
hjjeon 9:dfffa4d6f022 1056 /**
hjjeon 9:dfffa4d6f022 1057 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1058 * @brief Get @ref Sn_RXBUF_SIZE register
hjjeon 9:dfffa4d6f022 1059 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1060 * @return uint8_t. Value of @ref Sn_RXBUF_SIZE.
hjjeon 9:dfffa4d6f022 1061 * @sa setSn_RXBUF_SIZE()
hjjeon 9:dfffa4d6f022 1062 */
hjjeon 9:dfffa4d6f022 1063 uint8_t getSn_RXBUF_SIZE(uint8_t sn) {
hjjeon 9:dfffa4d6f022 1064 return sreg<uint8_t>(sn, Sn_RXBUF_SIZE);
hjjeon 9:dfffa4d6f022 1065 }
hjjeon 9:dfffa4d6f022 1066
hjjeon 9:dfffa4d6f022 1067 /**
hjjeon 9:dfffa4d6f022 1068 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1069 * @brief Set @ref Sn_TXBUF_SIZE register
hjjeon 9:dfffa4d6f022 1070 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1071 * @param (uint8_t)txbufsize Value to set @ref Sn_TXBUF_SIZE
hjjeon 9:dfffa4d6f022 1072 * @sa getSn_TXBUF_SIZE()
hjjeon 9:dfffa4d6f022 1073 */
hjjeon 9:dfffa4d6f022 1074 void setSn_TXBUF_SIZE(uint8_t sn, uint8_t txbufsize) {
hjjeon 9:dfffa4d6f022 1075 sreg<uint8_t>(sn, Sn_TXBUF_SIZE, txbufsize);
hjjeon 9:dfffa4d6f022 1076 }
hjjeon 9:dfffa4d6f022 1077
hjjeon 9:dfffa4d6f022 1078 /**
hjjeon 9:dfffa4d6f022 1079 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1080 * @brief Get @ref Sn_TXBUF_SIZE register
hjjeon 9:dfffa4d6f022 1081 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1082 * @return uint8_t. Value of @ref Sn_TXBUF_SIZE.
hjjeon 9:dfffa4d6f022 1083 * @sa setSn_TXBUF_SIZE()
hjjeon 9:dfffa4d6f022 1084 */
hjjeon 9:dfffa4d6f022 1085 uint8_t getSn_TXBUF_SIZE(uint8_t sn) {
hjjeon 9:dfffa4d6f022 1086 return sreg<uint8_t>(sn, Sn_TXBUF_SIZE);
hjjeon 9:dfffa4d6f022 1087 }
hjjeon 9:dfffa4d6f022 1088
hjjeon 9:dfffa4d6f022 1089 /**
hjjeon 9:dfffa4d6f022 1090 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1091 * @brief Get @ref Sn_TX_FSR register
hjjeon 9:dfffa4d6f022 1092 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1093 * @return uint16_t. Value of @ref Sn_TX_FSR.
hjjeon 9:dfffa4d6f022 1094 */
hjjeon 9:dfffa4d6f022 1095 uint16_t getSn_TX_FSR(uint8_t sn) {
hjjeon 9:dfffa4d6f022 1096 return sreg<uint16_t>(sn, Sn_TX_FSR);
hjjeon 9:dfffa4d6f022 1097 }
hjjeon 9:dfffa4d6f022 1098
hjjeon 9:dfffa4d6f022 1099
hjjeon 9:dfffa4d6f022 1100 /**
hjjeon 9:dfffa4d6f022 1101 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1102 * @brief Get @ref Sn_TX_RD register
hjjeon 9:dfffa4d6f022 1103 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1104 * @return uint16_t. Value of @ref Sn_TX_RD.
hjjeon 9:dfffa4d6f022 1105 */
hjjeon 9:dfffa4d6f022 1106 uint16_t getSn_TX_RD(uint8_t sn) {
hjjeon 9:dfffa4d6f022 1107 return sreg<uint16_t>(sn, Sn_TX_RD);
hjjeon 9:dfffa4d6f022 1108 }
hjjeon 9:dfffa4d6f022 1109
hjjeon 9:dfffa4d6f022 1110 /**
hjjeon 9:dfffa4d6f022 1111 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1112 * @brief Set @ref Sn_TX_WR register
hjjeon 9:dfffa4d6f022 1113 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1114 * @param (uint16_t)txwr Value to set @ref Sn_TX_WR
hjjeon 9:dfffa4d6f022 1115 * @sa GetSn_TX_WR()
hjjeon 9:dfffa4d6f022 1116 */
hjjeon 9:dfffa4d6f022 1117 void setSn_TX_WR(uint8_t sn, uint16_t txwr) {
hjjeon 9:dfffa4d6f022 1118 sreg<uint16_t>(sn, Sn_TX_WR, txwr);
hjjeon 9:dfffa4d6f022 1119 }
hjjeon 9:dfffa4d6f022 1120
hjjeon 9:dfffa4d6f022 1121 /**
hjjeon 9:dfffa4d6f022 1122 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1123 * @brief Get @ref Sn_TX_WR register
hjjeon 9:dfffa4d6f022 1124 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1125 * @return uint16_t. Value of @ref Sn_TX_WR.
hjjeon 9:dfffa4d6f022 1126 * @sa setSn_TX_WR()
hjjeon 9:dfffa4d6f022 1127 */
hjjeon 9:dfffa4d6f022 1128 uint16_t getSn_TX_WR(uint8_t sn) {
hjjeon 9:dfffa4d6f022 1129 return sreg<uint16_t>(sn, Sn_TX_WR);
hjjeon 9:dfffa4d6f022 1130 }
hjjeon 9:dfffa4d6f022 1131
hjjeon 9:dfffa4d6f022 1132
hjjeon 9:dfffa4d6f022 1133 /**
hjjeon 9:dfffa4d6f022 1134 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1135 * @brief Get @ref Sn_RX_RSR register
hjjeon 9:dfffa4d6f022 1136 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1137 * @return uint16_t. Value of @ref Sn_RX_RSR.
hjjeon 9:dfffa4d6f022 1138 */
hjjeon 9:dfffa4d6f022 1139 uint16_t getSn_RX_RSR(uint8_t sn) {
hjjeon 9:dfffa4d6f022 1140 return sreg<uint16_t>(sn, Sn_RX_RSR);
hjjeon 9:dfffa4d6f022 1141 }
hjjeon 9:dfffa4d6f022 1142
hjjeon 9:dfffa4d6f022 1143
hjjeon 9:dfffa4d6f022 1144 /**
hjjeon 9:dfffa4d6f022 1145 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1146 * @brief Set @ref Sn_RX_RD register
hjjeon 9:dfffa4d6f022 1147 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1148 * @param (uint16_t)rxrd Value to set @ref Sn_RX_RD
hjjeon 9:dfffa4d6f022 1149 * @sa getSn_RX_RD()
hjjeon 9:dfffa4d6f022 1150 */
hjjeon 9:dfffa4d6f022 1151 void setSn_RX_RD(uint8_t sn, uint16_t rxrd) {
hjjeon 9:dfffa4d6f022 1152 sreg<uint16_t>(sn, Sn_RX_RD, rxrd);
hjjeon 9:dfffa4d6f022 1153 }
hjjeon 9:dfffa4d6f022 1154
hjjeon 9:dfffa4d6f022 1155 /**
hjjeon 9:dfffa4d6f022 1156 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1157 * @brief Get @ref Sn_RX_RD register
hjjeon 9:dfffa4d6f022 1158 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1159 * @regurn uint16_t. Value of @ref Sn_RX_RD.
hjjeon 9:dfffa4d6f022 1160 * @sa setSn_RX_RD()
hjjeon 9:dfffa4d6f022 1161 */
hjjeon 9:dfffa4d6f022 1162 uint16_t getSn_RX_RD(uint8_t sn) {
hjjeon 9:dfffa4d6f022 1163 return sreg<uint16_t>(sn, Sn_RX_RD);
hjjeon 9:dfffa4d6f022 1164 }
hjjeon 9:dfffa4d6f022 1165
hjjeon 9:dfffa4d6f022 1166 /**
hjjeon 9:dfffa4d6f022 1167 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1168 * @brief Get @ref Sn_RX_WR register
hjjeon 9:dfffa4d6f022 1169 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1170 * @return uint16_t. Value of @ref Sn_RX_WR.
hjjeon 9:dfffa4d6f022 1171 */
hjjeon 9:dfffa4d6f022 1172 uint16_t getSn_RX_WR(uint8_t sn) {
hjjeon 9:dfffa4d6f022 1173 return sreg<uint16_t>(sn, Sn_RX_WR);
hjjeon 9:dfffa4d6f022 1174 }
hjjeon 9:dfffa4d6f022 1175
hjjeon 9:dfffa4d6f022 1176
hjjeon 9:dfffa4d6f022 1177 /**
hjjeon 9:dfffa4d6f022 1178 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1179 * @brief Set @ref Sn_FRAG register
hjjeon 9:dfffa4d6f022 1180 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1181 * @param (uint16_t)frag Value to set @ref Sn_FRAG
hjjeon 9:dfffa4d6f022 1182 * @sa getSn_FRAD()
hjjeon 9:dfffa4d6f022 1183 */
hjjeon 9:dfffa4d6f022 1184 void setSn_FRAG(uint8_t sn, uint16_t frag) {
hjjeon 9:dfffa4d6f022 1185 sreg<uint16_t>(sn, Sn_FRAG, frag );
hjjeon 9:dfffa4d6f022 1186 }
hjjeon 9:dfffa4d6f022 1187
hjjeon 9:dfffa4d6f022 1188 /**
hjjeon 9:dfffa4d6f022 1189 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1190 * @brief Get @ref Sn_FRAG register
hjjeon 9:dfffa4d6f022 1191 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1192 * @return uint16_t. Value of @ref Sn_FRAG.
hjjeon 9:dfffa4d6f022 1193 * @sa setSn_FRAG()
hjjeon 9:dfffa4d6f022 1194 */
hjjeon 9:dfffa4d6f022 1195 uint16_t getSn_FRAG(uint8_t sn) {
hjjeon 9:dfffa4d6f022 1196 return sreg<uint16_t>(sn, Sn_FRAG);
hjjeon 9:dfffa4d6f022 1197 }
hjjeon 9:dfffa4d6f022 1198
hjjeon 9:dfffa4d6f022 1199 /**
hjjeon 9:dfffa4d6f022 1200 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1201 * @brief Set @ref Sn_KPALVTR register
hjjeon 9:dfffa4d6f022 1202 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1203 * @param (uint8_t)kpalvt Value to set @ref Sn_KPALVTR
hjjeon 9:dfffa4d6f022 1204 * @sa getSn_KPALVTR()
hjjeon 9:dfffa4d6f022 1205 */
hjjeon 9:dfffa4d6f022 1206 void setSn_KPALVTR(uint8_t sn, uint8_t kpalvt) {
hjjeon 9:dfffa4d6f022 1207 sreg<uint8_t>(sn, Sn_KPALVTR, kpalvt);
hjjeon 9:dfffa4d6f022 1208 }
hjjeon 9:dfffa4d6f022 1209
hjjeon 9:dfffa4d6f022 1210 /**
hjjeon 9:dfffa4d6f022 1211 * @ingroup Socket_register_access_function
hjjeon 9:dfffa4d6f022 1212 * @brief Get @ref Sn_KPALVTR register
hjjeon 9:dfffa4d6f022 1213 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1214 * @return uint8_t. Value of @ref Sn_KPALVTR.
hjjeon 9:dfffa4d6f022 1215 * @sa setSn_KPALVTR()
hjjeon 9:dfffa4d6f022 1216 */
hjjeon 9:dfffa4d6f022 1217 uint8_t getSn_KPALVTR(uint8_t sn) {
hjjeon 9:dfffa4d6f022 1218 return sreg<uint8_t>(sn, Sn_KPALVTR);
hjjeon 9:dfffa4d6f022 1219 }
hjjeon 9:dfffa4d6f022 1220
hjjeon 9:dfffa4d6f022 1221 //////////////////////////////////////
hjjeon 9:dfffa4d6f022 1222
hjjeon 9:dfffa4d6f022 1223 /////////////////////////////////////
hjjeon 9:dfffa4d6f022 1224 // Sn_TXBUF & Sn_RXBUF IO function //
hjjeon 9:dfffa4d6f022 1225 /////////////////////////////////////
hjjeon 9:dfffa4d6f022 1226 /**
hjjeon 9:dfffa4d6f022 1227 * @brief Gets the max buffer size of socket sn passed as parameter.
hjjeon 9:dfffa4d6f022 1228 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1229 * @return uint16_t. Value of Socket n RX max buffer size.
hjjeon 9:dfffa4d6f022 1230 */
hjjeon 9:dfffa4d6f022 1231 uint16_t getSn_RxMAX(uint8_t sn) {
hjjeon 9:dfffa4d6f022 1232 return (getSn_RXBUF_SIZE(sn) << 10);
hjjeon 9:dfffa4d6f022 1233 }
hjjeon 9:dfffa4d6f022 1234
hjjeon 9:dfffa4d6f022 1235 /**
hjjeon 9:dfffa4d6f022 1236 * @brief Gets the max buffer size of socket sn passed as parameters.
hjjeon 9:dfffa4d6f022 1237 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
hjjeon 9:dfffa4d6f022 1238 * @return uint16_t. Value of Socket n TX max buffer size.
hjjeon 9:dfffa4d6f022 1239 */
hjjeon 9:dfffa4d6f022 1240 //uint16_t getSn_TxMAX(uint8_t sn);
hjjeon 9:dfffa4d6f022 1241 uint16_t getSn_TxMAX(uint8_t sn) {
hjjeon 9:dfffa4d6f022 1242 return (getSn_TXBUF_SIZE(sn) << 10);
hjjeon 9:dfffa4d6f022 1243 }
Bongjun 0:e11e8793c3ce 1244
hjjeon 10:713b6d2aaefb 1245
Bongjun 0:e11e8793c3ce 1246 protected:
Bongjun 0:e11e8793c3ce 1247 uint8_t mac[6];
Bongjun 0:e11e8793c3ce 1248 uint32_t ip;
Bongjun 0:e11e8793c3ce 1249 uint32_t netmask;
Bongjun 0:e11e8793c3ce 1250 uint32_t gateway;
Bongjun 0:e11e8793c3ce 1251 uint32_t dnsaddr;
Bongjun 0:e11e8793c3ce 1252 bool dhcp;
hjjeon 10:713b6d2aaefb 1253
hjjeon 10:713b6d2aaefb 1254
Bongjun 0:e11e8793c3ce 1255
Bongjun 0:e11e8793c3ce 1256 static WIZnet_Chip* inst;
Bongjun 0:e11e8793c3ce 1257
Bongjun 0:e11e8793c3ce 1258 void reg_wr_mac(uint16_t addr, uint8_t* data) {
Bongjun 0:e11e8793c3ce 1259 spi_write(addr, 0x04, data, 6);
Bongjun 0:e11e8793c3ce 1260 }
Bongjun 0:e11e8793c3ce 1261
Bongjun 0:e11e8793c3ce 1262 void spi_write(uint16_t addr, uint8_t cb, const uint8_t *buf, uint16_t len);
Bongjun 0:e11e8793c3ce 1263 void spi_read(uint16_t addr, uint8_t cb, uint8_t *buf, uint16_t len);
Bongjun 0:e11e8793c3ce 1264 SPI* spi;
Bongjun 0:e11e8793c3ce 1265 DigitalOut cs;
Bongjun 0:e11e8793c3ce 1266 DigitalOut reset_pin;
Bongjun 0:e11e8793c3ce 1267 };
Bongjun 0:e11e8793c3ce 1268
Bongjun 0:e11e8793c3ce 1269 extern uint32_t str_to_ip(const char* str);
Bongjun 0:e11e8793c3ce 1270 extern void printfBytes(char* str, uint8_t* buf, int len);
Bongjun 0:e11e8793c3ce 1271 extern void printHex(uint8_t* buf, int len);
Bongjun 0:e11e8793c3ce 1272 extern void debug_hex(uint8_t* buf, int len);