Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: W5500-SNTPClient-example
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 Wed Jul 13 2022 07:54:50 by
1.7.2