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
W5500.h
00001 #pragma once 00002 00003 #include "mbed.h" 00004 #include "mbed_debug.h" 00005 00006 00007 #define TEST_ASSERT(A) while(!(A)){debug("\n\n%s@%d %s ASSERT!\n\n",__PRETTY_FUNCTION__,__LINE__,#A);exit(1);}; 00008 00009 #define DEFAULT_WAIT_RESP_TIMEOUT 500 00010 00011 00012 00013 #define SOCK_OK 1 ///< Result is OK about socket process. 00014 #define SOCK_BUSY 0 ///< Socket is busy on processing the operation. Valid only Non-block IO Mode. 00015 #define SOCK_FATAL -1000 ///< Result is fatal error about socket process. 00016 00017 #define SOCK_ERROR 0 00018 #define SOCKERR_SOCKNUM (SOCK_ERROR - 1) ///< Invalid socket number 00019 #define SOCKERR_SOCKOPT (SOCK_ERROR - 2) ///< Invalid socket option 00020 #define SOCKERR_SOCKINIT (SOCK_ERROR - 3) ///< Socket is not initialized 00021 #define SOCKERR_SOCKCLOSED (SOCK_ERROR - 4) ///< Socket unexpectedly closed. 00022 #define SOCKERR_SOCKMODE (SOCK_ERROR - 5) ///< Invalid socket mode for socket operation. 00023 #define SOCKERR_SOCKFLAG (SOCK_ERROR - 6) ///< Invalid socket flag 00024 #define SOCKERR_SOCKSTATUS (SOCK_ERROR - 7) ///< Invalid socket status for socket operation. 00025 #define SOCKERR_ARG (SOCK_ERROR - 10) ///< Invalid argrument. 00026 #define SOCKERR_PORTZERO (SOCK_ERROR - 11) ///< Port number is zero 00027 #define SOCKERR_IPINVALID (SOCK_ERROR - 12) ///< Invalid IP address 00028 #define SOCKERR_TIMEOUT (SOCK_ERROR - 13) ///< Timeout occurred 00029 #define SOCKERR_DATALEN (SOCK_ERROR - 14) ///< Data length is zero or greater than buffer max size. 00030 #define SOCKERR_BUFFER (SOCK_ERROR - 15) ///< Socket buffer is not enough for data communication. 00031 00032 #define SOCK_ANY_PORT_NUM 0xC000; 00033 00034 00035 #define MAX_SOCK_NUM 8 00036 00037 #define MR 0x0000 00038 #define GAR 0x0001 00039 #define SUBR 0x0005 00040 #define SHAR 0x0009 00041 #define SIPR 0x000f 00042 #define INTLEVEL 0x0013 00043 #define IR 0x0015 00044 #define IMR 0x0016 00045 #define SIR 0x0017 00046 #define SIMR 0x0018 00047 #define RTR 0x0019 00048 #define RCR 0x001b 00049 #define PTIMER 0x001c 00050 #define PMAGIC 0x001d 00051 #define PHAR 0x001e 00052 #define PSID 0x0024 00053 #define PMRU 0x0026 00054 #define UIPR 0x0028 00055 #define UPORTR 0x002c 00056 #define PHYCFGR 0x002e 00057 #define VERSIONR 0x0039 00058 00059 // W5500 socket register 00060 #define Sn_MR 0x0000 00061 #define Sn_CR 0x0001 00062 #define Sn_IR 0x0002 00063 #define Sn_SR 0x0003 00064 #define Sn_PORT 0x0004 00065 #define Sn_DHAR 0x0006 00066 #define Sn_DIPR 0x000c 00067 #define Sn_DPORT 0x0010 00068 #define Sn_MSSR 0x0012 00069 #define Sn_TOS 0x0015 00070 #define Sn_TTL 0x0016 00071 #define Sn_RXBUF_SIZE 0x001e 00072 #define Sn_TXBUF_SIZE 0x001f 00073 #define Sn_TX_FSR 0x0020 00074 #define Sn_TX_RD 0x0022 00075 #define Sn_TX_WR 0x0024 00076 #define Sn_RX_RSR 0x0026 00077 #define Sn_RX_RD 0x0028 00078 #define Sn_RX_WR 0x002a 00079 #define Sn_IMR 0x002c 00080 #define Sn_FRAG 0x002d 00081 #define Sn_KPALVTR 0x002f 00082 00083 //define for Mode Register option value 00084 #define MR_PPPOE 0x08 00085 #define MR_RST 0x80 00086 00087 //Define for Socket Command register option value 00088 #define Sn_CR_OPEN 0x01 00089 #define Sn_CR_LISTEN 0x02 00090 #define Sn_CR_CONNECT 0x04 00091 #define Sn_CR_DISCON 0x08 00092 #define Sn_CR_CLOSE 0x10 00093 #define Sn_CR_SEND 0x20 00094 #define Sn_CR_SEND_MAC 0x21 00095 #define Sn_CR_SEND_KEEP 0x22 00096 #define Sn_CR_RECV 0x40 00097 00098 00099 //Define for Socket Mode register option value 00100 #define Sn_MR_CLOSE 0x00 00101 #define Sn_MR_TCP 0x01 00102 #define Sn_MR_UDP 0x02 00103 #define Sn_MR_MACRAW 0x04 00104 #define Sn_MR_UCASTB 0x10 00105 #define Sn_MR_ND 0x20 00106 #define Sn_MR_BCASTB 0x40 00107 #define Sn_MR_MULTI 0x80 00108 00109 #define Sn_IR_SENDOK 0x10 00110 00111 //Sn_IR values 00112 00113 #define Sn_IR_TIMEOUT 0x08 00114 #define Sn_IR_RECV 0x04 00115 #define Sn_IR_DISCON 0x02 00116 #define Sn_IR_CON 0x01 00117 00118 /* 00119 * SOCKET FLAG 00120 */ 00121 #define SF_ETHER_OWN (Sn_MR_MFEN) ///< In \ref Sn_MR_MACRAW, Receive only the packet as broadcast, multicast and own packet 00122 #define SF_IGMP_VER2 (Sn_MR_ND) ///< In \ref Sn_MR_UDP with \ref SF_MULTI_ENABLE, Select IGMP version 2. 00123 #define SF_TCP_NODELAY (Sn_MR_ND) ///< In \ref Sn_MR_TCP, Use to nodelayed ack. 00124 #define SF_MULTI_ENABLE (Sn_MR_MULTI) ///< In \ref Sn_MR_UDP, Enable multicast mode. 00125 #define SF_IO_NONBLOCK 0x01 ///< Socket nonblock io mode. It used parameter in \ref socket(). 00126 #define SF_BROAD_BLOCK (Sn_MR_BCASTB) ///< In \ref Sn_MR_UDP or \ref Sn_MR_MACRAW, Block broadcast packet. Valid only in W5500 00127 #define SF_MULTI_BLOCK (Sn_MR_MMB) ///< In \ref Sn_MR_MACRAW, Block multicast packet. Valid only in W5500 00128 #define SF_IPv6_BLOCK (Sn_MR_MIP6B) ///< In \ref Sn_MR_MACRAW, Block IPv6 packet. Valid only in W5500 00129 #define SF_UNI_BLOCK (Sn_MR_UCASTB) ///< In \ref Sn_MR_UDP with \ref SF_MULTI_ENABLE. Valid only in W5500 00130 00131 #define SOCK_MACRAW 0x42 00132 00133 00134 /* PHYCFGR register value */ 00135 #define PHYCFGR_RST ~(1<<7) //< For PHY reset, must operate AND mask. 00136 #define PHYCFGR_OPMD (1<<6) // Configre PHY with OPMDC value 00137 #define PHYCFGR_OPMDC_ALLA (7<<3) 00138 #define PHYCFGR_OPMDC_PDOWN (6<<3) 00139 #define PHYCFGR_OPMDC_NA (5<<3) 00140 #define PHYCFGR_OPMDC_100FA (4<<3) 00141 #define PHYCFGR_OPMDC_100F (3<<3) 00142 #define PHYCFGR_OPMDC_100H (2<<3) 00143 #define PHYCFGR_OPMDC_10F (1<<3) 00144 #define PHYCFGR_OPMDC_10H (0<<3) 00145 #define PHYCFGR_DPX_FULL (1<<2) 00146 #define PHYCFGR_DPX_HALF (0<<2) 00147 #define PHYCFGR_SPD_100 (1<<1) 00148 #define PHYCFGR_SPD_10 (0<<1) 00149 #define PHYCFGR_LNK_ON (1<<0) 00150 #define PHYCFGR_LNK_OFF (0<<0) 00151 00152 //PHY status define 00153 #define PHY_CONFBY_HW 0 ///< Configured PHY operation mode by HW pin 00154 #define PHY_CONFBY_SW 1 ///< Configured PHY operation mode by SW register 00155 #define PHY_MODE_MANUAL 0 ///< Configured PHY operation mode with user setting. 00156 #define PHY_MODE_AUTONEGO 1 ///< Configured PHY operation mode with auto-negotiation 00157 #define PHY_SPEED_10 0 ///< Link Speed 10 00158 #define PHY_SPEED_100 1 ///< Link Speed 100 00159 #define PHY_DUPLEX_HALF 0 ///< Link Half-Duplex 00160 #define PHY_DUPLEX_FULL 1 ///< Link Full-Duplex 00161 #define PHY_LINK_OFF 0 ///< Link Off 00162 #define PHY_LINK_ON 1 ///< Link On 00163 #define PHY_POWER_NORM 0 ///< PHY power normal mode 00164 #define PHY_POWER_DOWN 1 ///< PHY power down mode 00165 00166 class WIZnet_Chip { 00167 public: 00168 00169 enum Protocol { CLOSED = 0, TCP = 1, UDP = 2,}; 00170 enum Command { OPEN = 0x01, LISTEN = 0x02, CONNECT = 0x04, DISCON = 0x08, CLOSE = 0x10, SEND = 0x20, \ 00171 SEND_MAC = 0x21, SEND_KEEP = 0x22, RECV = 0x40, }; 00172 enum Interrupt { INT_CON = 0x01, INT_DISCON = 0x02, INT_RECV = 0x04, INT_TIMEOUT = 0x08, INT_SEND_OK = 0x10,}; 00173 00174 enum Status { SOCK_CLOSED = 0x00, SOCK_INIT = 0x13, SOCK_LISTEN = 0x14, SOCK_SYNSENT = 0x15, SOCK_ESTABLISHED = 0x17, \ 00175 SOCK_CLOSE_WAIT = 0x1c, SOCK_UDP = 0x22, }; 00176 00177 00178 uint16_t sock_any_port; 00179 00180 /* 00181 * Constructor 00182 * 00183 * @param spi spi class 00184 * @param cs cs of the W5500 00185 * @param reset reset pin of the W5500 00186 */ 00187 WIZnet_Chip(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset); 00188 WIZnet_Chip(SPI* spi, PinName cs, PinName reset); 00189 00190 /* 00191 * Set MAC Address to W5500 00192 * 00193 * @return true if connected, false otherwise 00194 */ 00195 bool setmac(); 00196 00197 /* 00198 * Set Network Informations (SrcIP, Netmask, Gataway) 00199 * 00200 * @return true if connected, false otherwise 00201 */ 00202 bool setip(); 00203 00204 /* 00205 * Get Link Status 00206 * 00207 * @return true if Link up, false Link down 00208 */ 00209 bool linkstatus(); 00210 00211 /* 00212 * Disconnect the connection 00213 * 00214 * @ returns true 00215 */ 00216 bool disconnect(); 00217 00218 /* 00219 * Open a tcp connection with the specified host on the specified port 00220 * 00221 * @param host host (can be either an ip address or a name. If a name is provided, a dns request will be established) 00222 * @param port port 00223 * @ returns true if successful 00224 */ 00225 bool connect(int socket, const char * host, int port, int timeout_ms = 10*1000); 00226 00227 /* 00228 * Set the protocol (UDP or TCP) 00229 * 00230 * @param p protocol 00231 * @ returns true if successful 00232 */ 00233 bool setProtocol(int socket, Protocol p); 00234 00235 /* 00236 * Reset the W5500 00237 */ 00238 void reset(); 00239 00240 int wait_readable(int socket, int wait_time_ms, int req_size = 0); 00241 00242 int wait_writeable(int socket, int wait_time_ms, int req_size = 0); 00243 00244 /* 00245 * Check if a tcp link is active 00246 * 00247 * @returns true if successful 00248 */ 00249 bool is_connected(int socket); 00250 00251 int8_t Socket_macraw(uint8_t sn, uint16_t port, uint8_t flag) 00252 { 00253 //CHECK_SOCKNUM(); 00254 00255 if((flag & 0x06) != 0) return SOCKERR_SOCKFLAG; 00256 00257 close(sn); 00258 setSn_MR(sn, (Sn_MR_MACRAW | (flag & 0xF0))); 00259 if(!port) 00260 { 00261 port = sock_any_port++; 00262 if(sock_any_port == 0xFFF0) sock_any_port = SOCK_ANY_PORT_NUM; 00263 } 00264 setSn_PORT(sn,port); 00265 setSn_CR(sn,Sn_CR_OPEN); 00266 while(getSn_CR(sn)); 00267 //sock_io_mode |= ((flag & SF_IO_NONBLOCK) << sn); 00268 //sock_is_sending &= ~(1<<sn); 00269 //sock_remained_size[sn] = 0; 00270 //sock_pack_info[sn] = 0; 00271 while(getSn_SR(sn) == SOCK_CLOSED); 00272 return (int8_t)sn; 00273 } 00274 00275 /* 00276 * Close a tcp connection 00277 * 00278 * @ returns true if successful 00279 */ 00280 bool close(int socket); 00281 00282 /* 00283 * @param str string to be sent 00284 * @param len string length 00285 */ 00286 int send(int socket, const char * str, int len); 00287 00288 int recv(int socket, char* buf, int len); 00289 00290 /* 00291 * Return true if the module is using dhcp 00292 * 00293 * @returns true if the module is using dhcp 00294 */ 00295 bool isDHCP() { 00296 return dhcp; 00297 } 00298 00299 bool gethostbyname(const char* host, uint32_t* ip); 00300 00301 static WIZnet_Chip * getInstance() { 00302 return inst; 00303 }; 00304 00305 int new_socket(); 00306 uint16_t new_port(); 00307 void scmd(int socket, Command cmd); 00308 00309 template<typename T> 00310 void sreg(int socket, uint16_t addr, T data) { 00311 reg_wr<T>(addr, (0x0C + (socket << 5)), data); 00312 } 00313 00314 template<typename T> 00315 T sreg(int socket, uint16_t addr) { 00316 return reg_rd<T>(addr, (0x08 + (socket << 5))); 00317 } 00318 00319 template<typename T> 00320 void reg_wr(uint16_t addr, T data) { 00321 return reg_wr(addr, 0x04, data); 00322 } 00323 00324 template<typename T> 00325 void reg_wr(uint16_t addr, uint8_t cb, T data) { 00326 uint8_t buf[sizeof(T)]; 00327 *reinterpret_cast<T*>(buf) = data; 00328 for(int i = 0; i < sizeof(buf)/2; i++) { // Little Endian to Big Endian 00329 uint8_t t = buf[i]; 00330 buf[i] = buf[sizeof(buf)-1-i]; 00331 buf[sizeof(buf)-1-i] = t; 00332 } 00333 spi_write(addr, cb, buf, sizeof(buf)); 00334 } 00335 00336 template<typename T> 00337 T reg_rd(uint16_t addr) { 00338 return reg_rd<T>(addr, 0x00); 00339 } 00340 00341 template<typename T> 00342 T reg_rd(uint16_t addr, uint8_t cb) { 00343 uint8_t buf[sizeof(T)]; 00344 spi_read(addr, cb, buf, sizeof(buf)); 00345 for(int i = 0; i < sizeof(buf)/2; i++) { // Big Endian to Little Endian 00346 uint8_t t = buf[i]; 00347 buf[i] = buf[sizeof(buf)-1-i]; 00348 buf[sizeof(buf)-1-i] = t; 00349 } 00350 return *reinterpret_cast<T*>(buf); 00351 } 00352 00353 void reg_rd_mac(uint16_t addr, uint8_t* data) { 00354 spi_read(addr, 0x00, data, 6); 00355 } 00356 00357 void reg_wr_ip(uint16_t addr, uint8_t cb, const char* ip) { 00358 uint8_t buf[4]; 00359 char* p = (char*)ip; 00360 for(int i = 0; i < 4; i++) { 00361 buf[i] = atoi(p); 00362 p = strchr(p, '.'); 00363 if (p == NULL) { 00364 break; 00365 } 00366 p++; 00367 } 00368 spi_write(addr, cb, buf, sizeof(buf)); 00369 } 00370 00371 void sreg_ip(int socket, uint16_t addr, const char* ip) { 00372 reg_wr_ip(addr, (0x0C + (socket << 5)), ip); 00373 } 00374 00375 void reg_rd_ip_byte(uint16_t addr, uint8_t* data) { 00376 spi_read(addr, 0x00, data, 4); 00377 } 00378 00379 void reg_wr_ip_byte(uint16_t addr, uint8_t* data) { 00380 spi_write(addr, 0x04, data, 4); 00381 } 00382 00383 ///////////////////////////////// 00384 // Common Register I/O function // 00385 ///////////////////////////////// 00386 /** 00387 * @ingroup Common_register_access_function 00388 * @brief Set Mode Register 00389 * @param (uint8_t)mr The value to be set. 00390 * @sa getMR() 00391 */ 00392 void setMR(uint8_t mr) { 00393 reg_wr<uint8_t>(MR,mr); 00394 } 00395 00396 00397 /** 00398 * @ingroup Common_register_access_function 00399 * @brief Get Mode Register 00400 * @return uint8_t. The value of Mode register. 00401 * @sa setMR() 00402 */ 00403 uint8_t getMR() { 00404 return reg_rd<uint8_t>(MR); 00405 } 00406 00407 /** 00408 * @ingroup Common_register_access_function 00409 * @brief Set gateway IP address 00410 * @param (uint8_t*)gar Pointer variable to set gateway IP address. It should be allocated 4 bytes. 00411 * @sa getGAR() 00412 */ 00413 void setGAR(uint8_t * gar) { 00414 reg_wr_ip_byte(GAR,gar); 00415 } 00416 00417 /** 00418 * @ingroup Common_register_access_function 00419 * @brief Get gateway IP address 00420 * @param (uint8_t*)gar Pointer variable to get gateway IP address. It should be allocated 4 bytes. 00421 * @sa setGAR() 00422 */ 00423 void getGAR(uint8_t * gar) { 00424 reg_rd_ip_byte(GAR,gar); 00425 } 00426 00427 /** 00428 * @ingroup Common_register_access_function 00429 * @brief Set subnet mask address 00430 * @param (uint8_t*)subr Pointer variable to set subnet mask address. It should be allocated 4 bytes. 00431 * @sa getSUBR() 00432 */ 00433 void setSUBR(uint8_t * subr) { 00434 reg_wr_ip_byte(SUBR, subr); 00435 } 00436 00437 00438 /** 00439 * @ingroup Common_register_access_function 00440 * @brief Get subnet mask address 00441 * @param (uint8_t*)subr Pointer variable to get subnet mask address. It should be allocated 4 bytes. 00442 * @sa setSUBR() 00443 */ 00444 void getSUBR(uint8_t * subr) { 00445 reg_rd_ip_byte(SUBR, subr); 00446 } 00447 00448 /** 00449 * @ingroup Common_register_access_function 00450 * @brief Set local MAC address 00451 * @param (uint8_t*)shar Pointer variable to set local MAC address. It should be allocated 6 bytes. 00452 * @sa getSHAR() 00453 */ 00454 void setSHAR(uint8_t * shar) { 00455 reg_wr_mac(SHAR, shar); 00456 } 00457 00458 /** 00459 * @ingroup Common_register_access_function 00460 * @brief Get local MAC address 00461 * @param (uint8_t*)shar Pointer variable to get local MAC address. It should be allocated 6 bytes. 00462 * @sa setSHAR() 00463 */ 00464 void getSHAR(uint8_t * shar) { 00465 reg_rd_mac(SHAR, shar); 00466 } 00467 00468 /** 00469 * @ingroup Common_register_access_function 00470 * @brief Set local IP address 00471 * @param (uint8_t*)sipr Pointer variable to set local IP address. It should be allocated 4 bytes. 00472 * @sa getSIPR() 00473 */ 00474 void setSIPR(uint8_t * sipr) { 00475 reg_wr_ip_byte(SIPR, sipr); 00476 } 00477 00478 /** 00479 * @ingroup Common_register_access_function 00480 * @brief Get local IP address 00481 * @param (uint8_t*)sipr Pointer variable to get local IP address. It should be allocated 4 bytes. 00482 * @sa setSIPR() 00483 */ 00484 void getSIPR(uint8_t * sipr) { 00485 reg_rd_ip_byte(SIPR, sipr); 00486 } 00487 00488 /** 00489 * @ingroup Common_register_access_function 00490 * @brief Set INTLEVEL register 00491 * @param (uint16_t)intlevel Value to set @ref INTLEVEL register. 00492 * @sa getINTLEVEL() 00493 */ 00494 void setINTLEVEL(uint16_t intlevel) { 00495 reg_wr<uint16_t>(INTLEVEL, intlevel); 00496 } 00497 00498 00499 /** 00500 * @ingroup Common_register_access_function 00501 * @brief Get INTLEVEL register 00502 * @return uint16_t. Value of @ref INTLEVEL register. 00503 * @sa setINTLEVEL() 00504 */ 00505 uint16_t getINTLEVEL() { 00506 return reg_rd<uint16_t>(INTLEVEL); 00507 } 00508 00509 /** 00510 * @ingroup Common_register_access_function 00511 * @brief Set @ref IR register 00512 * @param (uint8_t)ir Value to set @ref IR register. 00513 * @sa getIR() 00514 */ 00515 void setIR(uint8_t ir) { 00516 reg_wr<uint8_t>(IR, (ir & 0xF0)); 00517 } 00518 00519 /** 00520 * @ingroup Common_register_access_function 00521 * @brief Get @ref IR register 00522 * @return uint8_t. Value of @ref IR register. 00523 * @sa setIR() 00524 */ 00525 uint8_t getIR() { 00526 return reg_rd<uint8_t>(IR & 0xF0); 00527 } 00528 00529 /** 00530 * @ingroup Common_register_access_function 00531 * @brief Set @ref IMR register 00532 * @param (uint8_t)imr Value to set @ref IMR register. 00533 * @sa getIMR() 00534 */ 00535 void setIMR(uint8_t imr) { 00536 reg_wr<uint8_t>(IMR, imr); 00537 } 00538 00539 /** 00540 * @ingroup Common_register_access_function 00541 * @brief Get @ref IMR register 00542 * @return uint8_t. Value of @ref IMR register. 00543 * @sa setIMR() 00544 */ 00545 uint8_t getIMR() { 00546 return reg_rd<uint8_t>(IMR); 00547 } 00548 00549 00550 /** 00551 * @ingroup Common_register_access_function 00552 * @brief Set @ref SIR register 00553 * @param (uint8_t)sir Value to set @ref SIR register. 00554 * @sa getSIR() 00555 */ 00556 void setSIR(uint8_t sir) { 00557 reg_wr<uint8_t>(SIR, sir); 00558 } 00559 00560 /** 00561 * @ingroup Common_register_access_function 00562 * @brief Get @ref SIR register 00563 * @return uint8_t. Value of @ref SIR register. 00564 * @sa setSIR() 00565 */ 00566 uint8_t getSIR() { 00567 return reg_rd<uint8_t>(SIR); 00568 } 00569 /** 00570 * @ingroup Common_register_access_function 00571 * @brief Set @ref SIMR register 00572 * @param (uint8_t)simr Value to set @ref SIMR register. 00573 * @sa getSIMR() 00574 */ 00575 void setSIMR(uint8_t simr) { 00576 reg_wr<uint8_t>(SIMR, simr); 00577 } 00578 00579 /** 00580 * @ingroup Common_register_access_function 00581 * @brief Get @ref SIMR register 00582 * @return uint8_t. Value of @ref SIMR register. 00583 * @sa setSIMR() 00584 */ 00585 uint8_t getSIMR() { 00586 return reg_rd<uint8_t>(SIMR); 00587 } 00588 00589 /** 00590 * @ingroup Common_register_access_function 00591 * @brief Set @ref RTR register 00592 * @param (uint16_t)rtr Value to set @ref RTR register. 00593 * @sa getRTR() 00594 */ 00595 void setRTR(uint16_t rtr) { 00596 reg_wr<uint16_t>(RTR, rtr); 00597 } 00598 00599 /** 00600 * @ingroup Common_register_access_function 00601 * @brief Get @ref RTR register 00602 * @return uint16_t. Value of @ref RTR register. 00603 * @sa setRTR() 00604 */ 00605 uint16_t getRTR() { 00606 return reg_rd<uint16_t>(RTR); 00607 } 00608 00609 /** 00610 * @ingroup Common_register_access_function 00611 * @brief Set @ref RCR register 00612 * @param (uint8_t)rcr Value to set @ref RCR register. 00613 * @sa getRCR() 00614 */ 00615 void setRCR(uint8_t rcr) { 00616 reg_wr<uint8_t>(RCR, rcr); 00617 } 00618 00619 /** 00620 * @ingroup Common_register_access_function 00621 * @brief Get @ref RCR register 00622 * @return uint8_t. Value of @ref RCR register. 00623 * @sa setRCR() 00624 */ 00625 uint8_t getRCR() { 00626 return reg_rd<uint8_t>(RCR); 00627 } 00628 00629 //================================================== test done =========================================================== 00630 00631 /** 00632 * @ingroup Common_register_access_function 00633 * @brief Set @ref PTIMER register 00634 * @param (uint8_t)ptimer Value to set @ref PTIMER register. 00635 * @sa getPTIMER() 00636 */ 00637 void setPTIMER(uint8_t ptimer) { 00638 reg_wr<uint8_t>(PTIMER, ptimer); 00639 } 00640 00641 /** 00642 * @ingroup Common_register_access_function 00643 * @brief Get @ref PTIMER register 00644 * @return uint8_t. Value of @ref PTIMER register. 00645 * @sa setPTIMER() 00646 */ 00647 uint8_t getPTIMER() { 00648 return reg_rd<uint8_t>(PTIMER); 00649 } 00650 00651 /** 00652 * @ingroup Common_register_access_function 00653 * @brief Set @ref PMAGIC register 00654 * @param (uint8_t)pmagic Value to set @ref PMAGIC register. 00655 * @sa getPMAGIC() 00656 */ 00657 /* 00658 #define setPMAGIC(pmagic) \ 00659 WIZCHIP_WRITE(PMAGIC, pmagic) 00660 */ 00661 void setPMAGIC(uint8_t pmagic) { 00662 reg_wr<uint8_t>(PMAGIC, pmagic ); 00663 } 00664 /** 00665 * @ingroup Common_register_access_function 00666 * @brief Get @ref PMAGIC register 00667 * @return uint8_t. Value of @ref PMAGIC register. 00668 * @sa setPMAGIC() 00669 */ 00670 /* 00671 #define getPMAGIC() \ 00672 WIZCHIP_READ(PMAGIC) 00673 */ 00674 uint8_t getPMAGIC(uint8_t pmagic) { 00675 return reg_rd<uint8_t>(PMAGIC, pmagic); 00676 } 00677 /** 00678 * @ingroup Common_register_access_function 00679 * @brief Set PHAR address 00680 * @param (uint8_t*)phar Pointer variable to set PPP destination MAC register address. It should be allocated 6 bytes. 00681 * @sa getPHAR() 00682 */ 00683 void setPHAR(uint8_t * phar) { 00684 reg_wr_mac(PHAR, phar); 00685 } 00686 00687 /** 00688 * @ingroup Common_register_access_function 00689 * @brief Get local IP address 00690 * @param (uint8_t*)phar Pointer variable to PPP destination MAC register address. It should be allocated 6 bytes. 00691 * @sa setPHAR() 00692 */ 00693 void getPHAR(uint8_t * phar) { 00694 reg_rd_mac(PHAR, phar); 00695 } 00696 00697 /** 00698 * @ingroup Common_register_access_function 00699 * @brief Set @ref PSID register 00700 * @param (uint16_t)psid Value to set @ref PSID register. 00701 * @sa getPSID() 00702 */ 00703 void setPSID(uint16_t psid) { 00704 reg_wr<uint16_t>(PSID, psid ); 00705 } 00706 00707 /** 00708 * @ingroup Common_register_access_function 00709 * @brief Get @ref PSID register 00710 * @return uint16_t. Value of @ref PSID register. 00711 * @sa setPSID() 00712 */ 00713 //uint16_t getPSID(void); 00714 uint16_t getPSID() { 00715 return reg_rd<uint16_t>(PSID); 00716 } 00717 00718 /** 00719 * @ingroup Common_register_access_function 00720 * @brief Set @ref PMRU register 00721 * @param (uint16_t)pmru Value to set @ref PMRU register. 00722 * @sa getPMRU() 00723 */ 00724 void setPMRU(uint16_t pmru) { 00725 reg_wr<uint16_t>(PMRU, pmru); 00726 } 00727 00728 /** 00729 * @ingroup Common_register_access_function 00730 * @brief Get @ref PMRU register 00731 * @return uint16_t. Value of @ref PMRU register. 00732 * @sa setPMRU() 00733 */ 00734 uint16_t getPMRU() { 00735 return reg_rd<uint16_t>(PMRU); 00736 } 00737 00738 /** 00739 * @ingroup Common_register_access_function 00740 * @brief Get unreachable IP address 00741 * @param (uint8_t*)uipr Pointer variable to get unreachable IP address. It should be allocated 4 bytes. 00742 */ 00743 void getUIPR(uint8_t * uipr) { 00744 reg_rd_ip_byte(UIPR,uipr); 00745 } 00746 00747 /** 00748 * @ingroup Common_register_access_function 00749 * @brief Get @ref UPORTR register 00750 * @return uint16_t. Value of @ref UPORTR register. 00751 */ 00752 uint16_t getUPORTR() { 00753 return reg_rd<uint16_t>(UPORTR); 00754 } 00755 00756 /** 00757 * @ingroup Common_register_access_function 00758 * @brief Set @ref PHYCFGR register 00759 * @param (uint8_t)phycfgr Value to set @ref PHYCFGR register. 00760 * @sa getPHYCFGR() 00761 */ 00762 void setPHYCFGR(uint8_t phycfgr) { 00763 reg_wr<uint8_t>(PHYCFGR, phycfgr); 00764 } 00765 00766 /** 00767 * @ingroup Common_register_access_function 00768 * @brief Get @ref PHYCFGR register 00769 * @return uint8_t. Value of @ref PHYCFGR register. 00770 * @sa setPHYCFGR() 00771 */ 00772 uint8_t getPHYCFGR() { 00773 return reg_rd<uint8_t>(PHYCFGR); 00774 } 00775 00776 /** 00777 * @ingroup Common_register_access_function 00778 * @brief Get @ref VERSIONR register 00779 * @return uint8_t. Value of @ref VERSIONR register. 00780 */ 00781 uint8_t getVERSIONR() { 00782 return reg_rd<uint8_t>(VERSIONR); 00783 } 00784 00785 ///////////////////////////////////// 00786 00787 /////////////////////////////////// 00788 // Socket N register I/O function // 00789 /////////////////////////////////// 00790 /** 00791 * @ingroup Socket_register_access_function 00792 * @brief Set @ref Sn_MR register 00793 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00794 * @param (uint8_t)mr Value to set @ref Sn_MR 00795 * @sa getSn_MR() 00796 */ 00797 void setSn_MR(uint8_t sn, uint8_t mr) { 00798 sreg<uint8_t>(sn, MR, mr); 00799 } 00800 00801 /** 00802 * @ingroup Socket_register_access_function 00803 * @brief Get @ref Sn_MR register 00804 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00805 * @return uint8_t. Value of @ref Sn_MR. 00806 * @sa setSn_MR() 00807 */ 00808 uint8_t getSn_MR(uint8_t sn) { 00809 return sreg<uint8_t>(sn, Sn_MR); 00810 } 00811 00812 /** 00813 * @ingroup Socket_register_access_function 00814 * @brief Set @ref Sn_CR register 00815 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00816 * @param (uint8_t)cr Value to set @ref Sn_CR 00817 * @sa getSn_CR() 00818 */ 00819 void setSn_CR(uint8_t sn, uint8_t cr) { 00820 sreg<uint8_t>(sn, Sn_CR, cr); 00821 } 00822 00823 /** 00824 * @ingroup Socket_register_access_function 00825 * @brief Get @ref Sn_CR register 00826 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00827 * @return uint8_t. Value of @ref Sn_CR. 00828 * @sa setSn_CR() 00829 */ 00830 uint8_t getSn_CR(uint8_t sn) { 00831 return sreg<uint8_t>(sn, Sn_CR); 00832 } 00833 00834 /** 00835 * @ingroup Socket_register_access_function 00836 * @brief Set @ref Sn_IR register 00837 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00838 * @param (uint8_t)ir Value to set @ref Sn_IR 00839 * @sa getSn_IR() 00840 */ 00841 void setSn_IR(uint8_t sn, uint8_t ir) { 00842 sreg<uint8_t>(sn, Sn_IR, (ir & 0x1F)); 00843 } 00844 00845 /** 00846 * @ingroup Socket_register_access_function 00847 * @brief Get @ref Sn_IR register 00848 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00849 * @return uint8_t. Value of @ref Sn_IR. 00850 * @sa setSn_IR() 00851 */ 00852 uint8_t getSn_IR(uint8_t sn) { 00853 return (sreg<uint8_t>(sn, Sn_IR)) & 0x1F; 00854 } 00855 00856 /** 00857 * @ingroup Socket_register_access_function 00858 * @brief Set @ref Sn_IMR register 00859 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00860 * @param (uint8_t)imr Value to set @ref Sn_IMR 00861 * @sa getSn_IMR() 00862 */ 00863 void setSn_IMR(uint8_t sn, uint8_t imr) { 00864 sreg<uint8_t>(sn, Sn_IMR, (imr & 0x1F)); 00865 } 00866 00867 /** 00868 * @ingroup Socket_register_access_function 00869 * @brief Get @ref Sn_IMR register 00870 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00871 * @return uint8_t. Value of @ref Sn_IMR. 00872 * @sa setSn_IMR() 00873 */ 00874 uint8_t getSn_IMR(uint8_t sn) { 00875 return (sreg<uint8_t>(sn, Sn_IMR)) & 0x1F; 00876 } 00877 00878 /** 00879 * @ingroup Socket_register_access_function 00880 * @brief Get @ref Sn_SR register 00881 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00882 * @return uint8_t. Value of @ref Sn_SR. 00883 */ 00884 uint8_t getSn_SR(uint8_t sn) { 00885 return sreg<uint8_t>(sn, Sn_SR); 00886 } 00887 00888 /** 00889 * @ingroup Socket_register_access_function 00890 * @brief Set @ref Sn_PORT register 00891 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00892 * @param (uint16_t)port Value to set @ref Sn_PORT. 00893 * @sa getSn_PORT() 00894 */ 00895 void setSn_PORT(uint8_t sn, uint16_t port) { 00896 sreg<uint16_t>(sn, Sn_PORT, port ); 00897 } 00898 00899 /** 00900 * @ingroup Socket_register_access_function 00901 * @brief Get @ref Sn_PORT register 00902 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00903 * @return uint16_t. Value of @ref Sn_PORT. 00904 * @sa setSn_PORT() 00905 */ 00906 uint16_t getSn_PORT(uint8_t sn) { 00907 return sreg<uint16_t>(sn, Sn_PORT); 00908 } 00909 00910 /** 00911 * @ingroup Socket_register_access_function 00912 * @brief Set @ref Sn_DHAR register 00913 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00914 * @param (uint8_t*)dhar Pointer variable to set socket n destination hardware address. It should be allocated 6 bytes. 00915 * @sa getSn_DHAR() 00916 */ 00917 void setSn_DHAR(uint8_t sn, uint8_t * dhar) { 00918 spi_write(Sn_DHAR, (0x0C + (sn << 5)), dhar, 6); 00919 } 00920 00921 /** 00922 * @ingroup Socket_register_access_function 00923 * @brief Get @ref Sn_MR register 00924 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00925 * @param (uint8_t*)dhar Pointer variable to get socket n destination hardware address. It should be allocated 6 bytes. 00926 * @sa setSn_DHAR() 00927 */ 00928 void getSn_DHAR(uint8_t sn, uint8_t * dhar) { 00929 spi_read(Sn_DHAR, (0x08 + (sn << 5)), dhar, 6); 00930 } 00931 00932 /** 00933 * @ingroup Socket_register_access_function 00934 * @brief Set @ref Sn_DIPR register 00935 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00936 * @param (uint8_t*)dipr Pointer variable to set socket n destination IP address. It should be allocated 4 bytes. 00937 * @sa getSn_DIPR() 00938 */ 00939 void setSn_DIPR(uint8_t sn, uint8_t * dipr) { 00940 spi_write(Sn_DIPR, (0x0C + (sn << 5)), dipr, 4); 00941 } 00942 00943 /** 00944 * @ingroup Socket_register_access_function 00945 * @brief Get @ref Sn_DIPR register 00946 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00947 * @param (uint8_t*)dipr Pointer variable to get socket n destination IP address. It should be allocated 4 bytes. 00948 * @sa SetSn_DIPR() 00949 */ 00950 void getSn_DIPR(uint8_t sn, uint8_t * dipr) { 00951 spi_read(Sn_DIPR, (0x08 + (sn << 5)), dipr, 4); 00952 } 00953 00954 /** 00955 * @ingroup Socket_register_access_function 00956 * @brief Set @ref Sn_DPORT register 00957 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00958 * @param (uint16_t)dport Value to set @ref Sn_DPORT 00959 * @sa getSn_DPORT() 00960 */ 00961 void setSn_DPORT(uint8_t sn, uint16_t dport) { 00962 sreg<uint16_t>(sn, Sn_DPORT, dport); 00963 } 00964 00965 /** 00966 * @ingroup Socket_register_access_function 00967 * @brief Get @ref Sn_DPORT register 00968 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00969 * @return uint16_t. Value of @ref Sn_DPORT. 00970 * @sa setSn_DPORT() 00971 */ 00972 uint16_t getSn_DPORT(uint8_t sn) { 00973 return sreg<uint16_t>(sn, Sn_DPORT); 00974 } 00975 00976 /** 00977 * @ingroup Socket_register_access_function 00978 * @brief Set @ref Sn_MSSR register 00979 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00980 * @param (uint16_t)mss Value to set @ref Sn_MSSR 00981 * @sa setSn_MSSR() 00982 */ 00983 void setSn_MSSR(uint8_t sn, uint16_t mss) { 00984 sreg<uint16_t>(sn, Sn_MSSR, mss); 00985 } 00986 00987 /** 00988 * @ingroup Socket_register_access_function 00989 * @brief Get @ref Sn_MSSR register 00990 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 00991 * @return uint16_t. Value of @ref Sn_MSSR. 00992 * @sa setSn_MSSR() 00993 */ 00994 uint16_t getSn_MSSR(uint16_t sn) { 00995 return sreg<uint16_t>(sn, Sn_MSSR); 00996 } 00997 00998 /** 00999 * @ingroup Socket_register_access_function 01000 * @brief Set @ref Sn_TOS register 01001 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01002 * @param (uint8_t)tos Value to set @ref Sn_TOS 01003 * @sa getSn_TOS() 01004 */ 01005 void setSn_TOS(uint8_t sn, uint8_t tos) { 01006 sreg<uint8_t>(sn, Sn_TOS, tos); 01007 } 01008 01009 /** 01010 * @ingroup Socket_register_access_function 01011 * @brief Get @ref Sn_TOS register 01012 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01013 * @return uint8_t. Value of Sn_TOS. 01014 * @sa setSn_TOS() 01015 */ 01016 uint8_t getSn_TOS(uint8_t sn) { 01017 return sreg<uint8_t>(sn, Sn_TOS); 01018 } 01019 01020 /** 01021 * @ingroup Socket_register_access_function 01022 * @brief Set @ref Sn_TTL register 01023 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01024 * @param (uint8_t)ttl Value to set @ref Sn_TTL 01025 * @sa getSn_TTL() 01026 */ 01027 void setSn_TTL(uint8_t sn, uint8_t ttl) { 01028 sreg<uint8_t>(sn, Sn_TTL, ttl); 01029 } 01030 01031 01032 /** 01033 * @ingroup Socket_register_access_function 01034 * @brief Get @ref Sn_TTL register 01035 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01036 * @return uint8_t. Value of @ref Sn_TTL. 01037 * @sa setSn_TTL() 01038 */ 01039 uint8_t getSn_TTL(uint8_t sn) { 01040 return sreg<uint8_t>(sn, Sn_TTL); 01041 } 01042 01043 01044 /** 01045 * @ingroup Socket_register_access_function 01046 * @brief Set @ref Sn_RXBUF_SIZE register 01047 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01048 * @param (uint8_t)rxbufsize Value to set @ref Sn_RXBUF_SIZE 01049 * @sa getSn_RXBUF_SIZE() 01050 */ 01051 void setSn_RXBUF_SIZE(uint8_t sn, uint8_t rxbufsize) { 01052 sreg<uint8_t>(sn, Sn_RXBUF_SIZE ,rxbufsize); 01053 } 01054 01055 01056 /** 01057 * @ingroup Socket_register_access_function 01058 * @brief Get @ref Sn_RXBUF_SIZE register 01059 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01060 * @return uint8_t. Value of @ref Sn_RXBUF_SIZE. 01061 * @sa setSn_RXBUF_SIZE() 01062 */ 01063 uint8_t getSn_RXBUF_SIZE(uint8_t sn) { 01064 return sreg<uint8_t>(sn, Sn_RXBUF_SIZE); 01065 } 01066 01067 /** 01068 * @ingroup Socket_register_access_function 01069 * @brief Set @ref Sn_TXBUF_SIZE register 01070 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01071 * @param (uint8_t)txbufsize Value to set @ref Sn_TXBUF_SIZE 01072 * @sa getSn_TXBUF_SIZE() 01073 */ 01074 void setSn_TXBUF_SIZE(uint8_t sn, uint8_t txbufsize) { 01075 sreg<uint8_t>(sn, Sn_TXBUF_SIZE, txbufsize); 01076 } 01077 01078 /** 01079 * @ingroup Socket_register_access_function 01080 * @brief Get @ref Sn_TXBUF_SIZE register 01081 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01082 * @return uint8_t. Value of @ref Sn_TXBUF_SIZE. 01083 * @sa setSn_TXBUF_SIZE() 01084 */ 01085 uint8_t getSn_TXBUF_SIZE(uint8_t sn) { 01086 return sreg<uint8_t>(sn, Sn_TXBUF_SIZE); 01087 } 01088 01089 /** 01090 * @ingroup Socket_register_access_function 01091 * @brief Get @ref Sn_TX_FSR register 01092 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01093 * @return uint16_t. Value of @ref Sn_TX_FSR. 01094 */ 01095 uint16_t getSn_TX_FSR(uint8_t sn) { 01096 return sreg<uint16_t>(sn, Sn_TX_FSR); 01097 } 01098 01099 01100 /** 01101 * @ingroup Socket_register_access_function 01102 * @brief Get @ref Sn_TX_RD register 01103 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01104 * @return uint16_t. Value of @ref Sn_TX_RD. 01105 */ 01106 uint16_t getSn_TX_RD(uint8_t sn) { 01107 return sreg<uint16_t>(sn, Sn_TX_RD); 01108 } 01109 01110 /** 01111 * @ingroup Socket_register_access_function 01112 * @brief Set @ref Sn_TX_WR register 01113 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01114 * @param (uint16_t)txwr Value to set @ref Sn_TX_WR 01115 * @sa GetSn_TX_WR() 01116 */ 01117 void setSn_TX_WR(uint8_t sn, uint16_t txwr) { 01118 sreg<uint16_t>(sn, Sn_TX_WR, txwr); 01119 } 01120 01121 /** 01122 * @ingroup Socket_register_access_function 01123 * @brief Get @ref Sn_TX_WR register 01124 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01125 * @return uint16_t. Value of @ref Sn_TX_WR. 01126 * @sa setSn_TX_WR() 01127 */ 01128 uint16_t getSn_TX_WR(uint8_t sn) { 01129 return sreg<uint16_t>(sn, Sn_TX_WR); 01130 } 01131 01132 01133 /** 01134 * @ingroup Socket_register_access_function 01135 * @brief Get @ref Sn_RX_RSR register 01136 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01137 * @return uint16_t. Value of @ref Sn_RX_RSR. 01138 */ 01139 uint16_t getSn_RX_RSR(uint8_t sn) { 01140 return sreg<uint16_t>(sn, Sn_RX_RSR); 01141 } 01142 01143 01144 /** 01145 * @ingroup Socket_register_access_function 01146 * @brief Set @ref Sn_RX_RD register 01147 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01148 * @param (uint16_t)rxrd Value to set @ref Sn_RX_RD 01149 * @sa getSn_RX_RD() 01150 */ 01151 void setSn_RX_RD(uint8_t sn, uint16_t rxrd) { 01152 sreg<uint16_t>(sn, Sn_RX_RD, rxrd); 01153 } 01154 01155 /** 01156 * @ingroup Socket_register_access_function 01157 * @brief Get @ref Sn_RX_RD register 01158 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01159 * @regurn uint16_t. Value of @ref Sn_RX_RD. 01160 * @sa setSn_RX_RD() 01161 */ 01162 uint16_t getSn_RX_RD(uint8_t sn) { 01163 return sreg<uint16_t>(sn, Sn_RX_RD); 01164 } 01165 01166 /** 01167 * @ingroup Socket_register_access_function 01168 * @brief Get @ref Sn_RX_WR register 01169 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01170 * @return uint16_t. Value of @ref Sn_RX_WR. 01171 */ 01172 uint16_t getSn_RX_WR(uint8_t sn) { 01173 return sreg<uint16_t>(sn, Sn_RX_WR); 01174 } 01175 01176 01177 /** 01178 * @ingroup Socket_register_access_function 01179 * @brief Set @ref Sn_FRAG register 01180 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01181 * @param (uint16_t)frag Value to set @ref Sn_FRAG 01182 * @sa getSn_FRAD() 01183 */ 01184 void setSn_FRAG(uint8_t sn, uint16_t frag) { 01185 sreg<uint16_t>(sn, Sn_FRAG, frag ); 01186 } 01187 01188 /** 01189 * @ingroup Socket_register_access_function 01190 * @brief Get @ref Sn_FRAG register 01191 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01192 * @return uint16_t. Value of @ref Sn_FRAG. 01193 * @sa setSn_FRAG() 01194 */ 01195 uint16_t getSn_FRAG(uint8_t sn) { 01196 return sreg<uint16_t>(sn, Sn_FRAG); 01197 } 01198 01199 /** 01200 * @ingroup Socket_register_access_function 01201 * @brief Set @ref Sn_KPALVTR register 01202 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01203 * @param (uint8_t)kpalvt Value to set @ref Sn_KPALVTR 01204 * @sa getSn_KPALVTR() 01205 */ 01206 void setSn_KPALVTR(uint8_t sn, uint8_t kpalvt) { 01207 sreg<uint8_t>(sn, Sn_KPALVTR, kpalvt); 01208 } 01209 01210 /** 01211 * @ingroup Socket_register_access_function 01212 * @brief Get @ref Sn_KPALVTR register 01213 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01214 * @return uint8_t. Value of @ref Sn_KPALVTR. 01215 * @sa setSn_KPALVTR() 01216 */ 01217 uint8_t getSn_KPALVTR(uint8_t sn) { 01218 return sreg<uint8_t>(sn, Sn_KPALVTR); 01219 } 01220 01221 ////////////////////////////////////// 01222 01223 ///////////////////////////////////// 01224 // Sn_TXBUF & Sn_RXBUF IO function // 01225 ///////////////////////////////////// 01226 /** 01227 * @brief Gets the max buffer size of socket sn passed as parameter. 01228 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01229 * @return uint16_t. Value of Socket n RX max buffer size. 01230 */ 01231 uint16_t getSn_RxMAX(uint8_t sn) { 01232 return (getSn_RXBUF_SIZE(sn) << 10); 01233 } 01234 01235 /** 01236 * @brief Gets the max buffer size of socket sn passed as parameters. 01237 * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>. 01238 * @return uint16_t. Value of Socket n TX max buffer size. 01239 */ 01240 //uint16_t getSn_TxMAX(uint8_t sn); 01241 uint16_t getSn_TxMAX(uint8_t sn) { 01242 return (getSn_TXBUF_SIZE(sn) << 10); 01243 } 01244 01245 01246 protected: 01247 uint8_t mac[6]; 01248 uint32_t ip; 01249 uint32_t netmask; 01250 uint32_t gateway; 01251 uint32_t dnsaddr; 01252 bool dhcp; 01253 01254 01255 01256 static WIZnet_Chip* inst; 01257 01258 void reg_wr_mac(uint16_t addr, uint8_t* data) { 01259 spi_write(addr, 0x04, data, 6); 01260 } 01261 01262 void spi_write(uint16_t addr, uint8_t cb, const uint8_t *buf, uint16_t len); 01263 void spi_read(uint16_t addr, uint8_t cb, uint8_t *buf, uint16_t len); 01264 SPI* spi; 01265 DigitalOut cs; 01266 DigitalOut reset_pin; 01267 }; 01268 01269 extern uint32_t str_to_ip(const char* str); 01270 extern void printfBytes(char* str, uint8_t* buf, int len); 01271 extern void printHex(uint8_t* buf, int len); 01272 extern void debug_hex(uint8_t* buf, int len);
Generated on Thu Jul 14 2022 02:02:03 by 1.7.2