WIZNet W5500 with additional enhancements
Fork of WIZnetInterface by
arch/int/W7500x_toe.h@37:018436dccfcd, 2017-10-11 (annotated)
- Committer:
- Helmut Tschemernjak
- Date:
- Wed Oct 11 14:25:44 2017 +0200
- Revision:
- 37:018436dccfcd
- Parent:
- 14:2101ab5ee40f
Added more W7500x support, however this does not compile
for some time, when somebody uses the W7500x they need to
spend the time.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Soohwan Kim |
0:6f28332c466f | 1 | /* Copyright (C) 2012 mbed.org, MIT License |
Soohwan Kim |
0:6f28332c466f | 2 | * |
Soohwan Kim |
0:6f28332c466f | 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy of this software |
Soohwan Kim |
0:6f28332c466f | 4 | * and associated documentation files (the "Software"), to deal in the Software without restriction, |
Soohwan Kim |
0:6f28332c466f | 5 | * including without limitation the rights to use, copy, modify, merge, publish, distribute, |
Soohwan Kim |
0:6f28332c466f | 6 | * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is |
Soohwan Kim |
0:6f28332c466f | 7 | * furnished to do so, subject to the following conditions: |
Soohwan Kim |
0:6f28332c466f | 8 | * |
Soohwan Kim |
0:6f28332c466f | 9 | * The above copyright notice and this permission notice shall be included in all copies or |
Soohwan Kim |
0:6f28332c466f | 10 | * substantial portions of the Software. |
Soohwan Kim |
0:6f28332c466f | 11 | * |
Soohwan Kim |
0:6f28332c466f | 12 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING |
Soohwan Kim |
0:6f28332c466f | 13 | * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
Soohwan Kim |
0:6f28332c466f | 14 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
Soohwan Kim |
0:6f28332c466f | 15 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
Soohwan Kim |
0:6f28332c466f | 16 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
Soohwan Kim |
0:6f28332c466f | 17 | * |
Soohwan Kim |
0:6f28332c466f | 18 | */ |
Soohwan Kim |
0:6f28332c466f | 19 | #pragma once |
Soohwan Kim |
0:6f28332c466f | 20 | |
Soohwan Kim |
0:6f28332c466f | 21 | #include "mbed.h" |
Soohwan Kim |
0:6f28332c466f | 22 | #include "mbed_debug.h" |
Soohwan Kim |
0:6f28332c466f | 23 | |
Soohwan Kim |
0:6f28332c466f | 24 | #define TEST_ASSERT(A) while(!(A)){debug("\n\n%s@%d %s ASSERT!\n\n",__PRETTY_FUNCTION__,__LINE__,#A);exit(1);}; |
Soohwan Kim |
0:6f28332c466f | 25 | |
Soohwan Kim |
0:6f28332c466f | 26 | #define DEFAULT_WAIT_RESP_TIMEOUT 500 |
Soohwan Kim |
0:6f28332c466f | 27 | |
Soohwan Kim |
0:6f28332c466f | 28 | |
Soohwan Kim |
0:6f28332c466f | 29 | #define MAX_SOCK_NUM 8 |
Soohwan Kim |
0:6f28332c466f | 30 | |
Soohwan Kim |
0:6f28332c466f | 31 | // Peripheral base address |
Soohwan Kim |
0:6f28332c466f | 32 | #define W7500x_WZTOE_BASE (0x46000000) |
Soohwan Kim |
0:6f28332c466f | 33 | #define W7500x_TXMEM_BASE (W7500x_WZTOE_BASE + 0x00020000) |
Soohwan Kim |
0:6f28332c466f | 34 | #define W7500x_RXMEM_BASE (W7500x_WZTOE_BASE + 0x00030000) |
Soohwan Kim |
0:6f28332c466f | 35 | // Common register |
Soohwan Kim |
0:6f28332c466f | 36 | #define MR (0x2300) |
Soohwan Kim |
0:6f28332c466f | 37 | #define GAR (0x6008) |
Soohwan Kim |
0:6f28332c466f | 38 | #define SUBR (0x600C) |
Soohwan Kim |
0:6f28332c466f | 39 | #define SHAR (0x6000) |
Soohwan Kim |
0:6f28332c466f | 40 | #define SIPR (0x6010) |
Soohwan Kim |
8:4c02de1dbf3a | 41 | |
Soohwan Kim |
0:6f28332c466f | 42 | // Added Common register @W7500 |
Soohwan Kim |
0:6f28332c466f | 43 | #define TIC100US (0x2000) |
Soohwan Kim |
0:6f28332c466f | 44 | |
Soohwan Kim |
0:6f28332c466f | 45 | // Socket register |
Soohwan Kim |
0:6f28332c466f | 46 | #define Sn_MR (0x0000) |
Soohwan Kim |
0:6f28332c466f | 47 | #define Sn_CR (0x0010) |
Soohwan Kim |
0:6f28332c466f | 48 | #define Sn_IR (0x0020) //--Sn_ISR |
Soohwan Kim |
0:6f28332c466f | 49 | #define Sn_SR (0x0030) |
Soohwan Kim |
0:6f28332c466f | 50 | #define Sn_PORT (0x0114) |
Soohwan Kim |
0:6f28332c466f | 51 | #define Sn_DIPR (0x0124) |
Soohwan Kim |
0:6f28332c466f | 52 | #define Sn_DPORT (0x0120) |
Soohwan Kim |
0:6f28332c466f | 53 | #define Sn_RXBUF_SIZE (0x0200) |
Soohwan Kim |
0:6f28332c466f | 54 | #define Sn_TXBUF_SIZE (0x0220) |
Soohwan Kim |
0:6f28332c466f | 55 | #define Sn_TX_FSR (0x0204) |
Soohwan Kim |
0:6f28332c466f | 56 | #define Sn_TX_WR (0x020C) |
Soohwan Kim |
0:6f28332c466f | 57 | #define Sn_RX_RSR (0x0224) |
Soohwan Kim |
0:6f28332c466f | 58 | #define Sn_RX_RD (0x0228) |
Soohwan Kim |
0:6f28332c466f | 59 | // added Socket register @W7500 |
Soohwan Kim |
0:6f28332c466f | 60 | #define Sn_ICR (0x0028) |
Soohwan Kim |
0:6f28332c466f | 61 | enum PHYMode { |
Soohwan Kim |
0:6f28332c466f | 62 | AutoNegotiate = 0, |
Soohwan Kim |
0:6f28332c466f | 63 | HalfDuplex10 = 1, |
Soohwan Kim |
0:6f28332c466f | 64 | FullDuplex10 = 2, |
Soohwan Kim |
0:6f28332c466f | 65 | HalfDuplex100 = 3, |
Soohwan Kim |
0:6f28332c466f | 66 | FullDuplex100 = 4, |
Soohwan Kim |
0:6f28332c466f | 67 | }; |
Soohwan Kim |
0:6f28332c466f | 68 | |
Soohwan Kim |
0:6f28332c466f | 69 | //bool plink(int wait_time_ms= 3*1000); |
Soohwan Kim |
0:6f28332c466f | 70 | |
Soohwan Kim |
0:6f28332c466f | 71 | class WIZnet_Chip { |
Soohwan Kim |
0:6f28332c466f | 72 | public: |
Soohwan Kim |
0:6f28332c466f | 73 | enum Protocol { |
Soohwan Kim |
0:6f28332c466f | 74 | CLOSED = 0, |
Soohwan Kim |
0:6f28332c466f | 75 | TCP = 1, |
Soohwan Kim |
0:6f28332c466f | 76 | UDP = 2, |
Soohwan Kim |
0:6f28332c466f | 77 | }; |
Soohwan Kim |
0:6f28332c466f | 78 | |
Soohwan Kim |
0:6f28332c466f | 79 | enum Command { |
Soohwan Kim |
0:6f28332c466f | 80 | OPEN = 0x01, |
Soohwan Kim |
0:6f28332c466f | 81 | LISTEN = 0x02, |
Soohwan Kim |
0:6f28332c466f | 82 | CONNECT = 0x04, |
Soohwan Kim |
0:6f28332c466f | 83 | DISCON = 0x08, |
Soohwan Kim |
0:6f28332c466f | 84 | CLOSE = 0x10, |
Soohwan Kim |
0:6f28332c466f | 85 | SEND = 0x20, |
Soohwan Kim |
0:6f28332c466f | 86 | SEND_MAC = 0x21, |
Soohwan Kim |
0:6f28332c466f | 87 | SEND_KEEP = 0x22, |
Soohwan Kim |
0:6f28332c466f | 88 | RECV = 0x40, |
Soohwan Kim |
0:6f28332c466f | 89 | |
Soohwan Kim |
0:6f28332c466f | 90 | }; |
Soohwan Kim |
0:6f28332c466f | 91 | |
Soohwan Kim |
0:6f28332c466f | 92 | enum Interrupt { |
Soohwan Kim |
0:6f28332c466f | 93 | INT_CON = 0x01, |
Soohwan Kim |
0:6f28332c466f | 94 | INT_DISCON = 0x02, |
Soohwan Kim |
0:6f28332c466f | 95 | INT_RECV = 0x04, |
Soohwan Kim |
0:6f28332c466f | 96 | INT_TIMEOUT = 0x08, |
Soohwan Kim |
0:6f28332c466f | 97 | INT_SEND_OK = 0x10, |
Soohwan Kim |
0:6f28332c466f | 98 | }; |
Soohwan Kim |
0:6f28332c466f | 99 | enum Status { |
Soohwan Kim |
0:6f28332c466f | 100 | SOCK_CLOSED = 0x00, |
Soohwan Kim |
0:6f28332c466f | 101 | SOCK_INIT = 0x13, |
Soohwan Kim |
0:6f28332c466f | 102 | SOCK_LISTEN = 0x14, |
Soohwan Kim |
0:6f28332c466f | 103 | SOCK_SYNSENT = 0x15, |
Soohwan Kim |
0:6f28332c466f | 104 | SOCK_ESTABLISHED = 0x17, |
Soohwan Kim |
0:6f28332c466f | 105 | SOCK_CLOSE_WAIT = 0x1c, |
Soohwan Kim |
0:6f28332c466f | 106 | SOCK_UDP = 0x22, |
Soohwan Kim |
0:6f28332c466f | 107 | }; |
Soohwan Kim |
0:6f28332c466f | 108 | enum Mode { |
Soohwan Kim |
0:6f28332c466f | 109 | MR_RST = 0x80, |
Soohwan Kim |
0:6f28332c466f | 110 | MR_WOL = 0x20, |
Soohwan Kim |
0:6f28332c466f | 111 | MR_PB = 0x10, |
Soohwan Kim |
0:6f28332c466f | 112 | MR_FARP = 0x02, |
Soohwan Kim |
0:6f28332c466f | 113 | }; |
Soohwan Kim |
0:6f28332c466f | 114 | |
Soohwan Kim |
0:6f28332c466f | 115 | WIZnet_Chip(); |
Soohwan Kim |
0:6f28332c466f | 116 | |
Soohwan Kim |
0:6f28332c466f | 117 | /* |
Soohwan Kim |
8:4c02de1dbf3a | 118 | * Set MAC Address to W7500x_TOE |
Soohwan Kim |
8:4c02de1dbf3a | 119 | * |
Soohwan Kim |
8:4c02de1dbf3a | 120 | * @return true if connected, false otherwise |
Soohwan Kim |
8:4c02de1dbf3a | 121 | */ |
Soohwan Kim |
8:4c02de1dbf3a | 122 | bool setmac(); |
Soohwan Kim |
8:4c02de1dbf3a | 123 | |
Soohwan Kim |
8:4c02de1dbf3a | 124 | /* |
Soohwan Kim |
0:6f28332c466f | 125 | * Connect the W7500 WZTOE to the ssid contained in the constructor. |
Soohwan Kim |
0:6f28332c466f | 126 | * |
Soohwan Kim |
0:6f28332c466f | 127 | * @return true if connected, false otherwise |
Soohwan Kim |
0:6f28332c466f | 128 | */ |
Soohwan Kim |
0:6f28332c466f | 129 | bool setip(); |
Soohwan Kim |
0:6f28332c466f | 130 | |
Soohwan Kim |
0:6f28332c466f | 131 | |
Soohwan Kim |
0:6f28332c466f | 132 | /* |
Soohwan Kim |
0:6f28332c466f | 133 | * Open a tcp connection with the specified host on the specified port |
Soohwan Kim |
0:6f28332c466f | 134 | * |
Soohwan Kim |
0:6f28332c466f | 135 | * @param host host (can be either an ip address or a name. If a name is provided, a dns request will be established) |
Soohwan Kim |
0:6f28332c466f | 136 | * @param port port |
Soohwan Kim |
0:6f28332c466f | 137 | * @ returns true if successful |
Soohwan Kim |
0:6f28332c466f | 138 | */ |
Soohwan Kim |
0:6f28332c466f | 139 | bool connect(int socket, const char * host, int port, int timeout_ms = 10*1000); |
Soohwan Kim |
0:6f28332c466f | 140 | |
Soohwan Kim |
0:6f28332c466f | 141 | /* |
Soohwan Kim |
0:6f28332c466f | 142 | * Set the protocol (UDP or TCP) |
Soohwan Kim |
0:6f28332c466f | 143 | * |
Soohwan Kim |
0:6f28332c466f | 144 | * @param p protocol |
Soohwan Kim |
0:6f28332c466f | 145 | * @ returns true if successful |
Soohwan Kim |
0:6f28332c466f | 146 | */ |
Soohwan Kim |
0:6f28332c466f | 147 | bool setProtocol(int socket, Protocol p); |
Soohwan Kim |
0:6f28332c466f | 148 | |
Soohwan Kim |
0:6f28332c466f | 149 | /* |
Soohwan Kim |
0:6f28332c466f | 150 | * Reset the W7500 WZTOE |
Soohwan Kim |
0:6f28332c466f | 151 | */ |
Soohwan Kim |
0:6f28332c466f | 152 | void reset(); |
Soohwan Kim |
0:6f28332c466f | 153 | |
Soohwan Kim |
0:6f28332c466f | 154 | int wait_readable(int socket, int wait_time_ms, int req_size = 0); |
Soohwan Kim |
0:6f28332c466f | 155 | |
Soohwan Kim |
0:6f28332c466f | 156 | int wait_writeable(int socket, int wait_time_ms, int req_size = 0); |
Soohwan Kim |
0:6f28332c466f | 157 | |
Soohwan Kim |
0:6f28332c466f | 158 | /* |
Soohwan Kim |
0:6f28332c466f | 159 | * Check if an ethernet link is pressent or not. |
Soohwan Kim |
0:6f28332c466f | 160 | * |
Soohwan Kim |
0:6f28332c466f | 161 | * @returns true if successful |
Soohwan Kim |
0:6f28332c466f | 162 | */ |
Soohwan Kim |
0:6f28332c466f | 163 | bool link(int wait_time_ms= 3*1000); |
Soohwan Kim |
0:6f28332c466f | 164 | |
Soohwan Kim |
0:6f28332c466f | 165 | /* |
Soohwan Kim |
0:6f28332c466f | 166 | * Sets the speed and duplex parameters of an ethernet link. |
Soohwan Kim |
0:6f28332c466f | 167 | * |
Soohwan Kim |
0:6f28332c466f | 168 | * @returns true if successful |
Soohwan Kim |
0:6f28332c466f | 169 | */ |
Soohwan Kim |
0:6f28332c466f | 170 | void set_link(PHYMode phymode); |
Soohwan Kim |
0:6f28332c466f | 171 | |
Soohwan Kim |
0:6f28332c466f | 172 | /* |
Soohwan Kim |
0:6f28332c466f | 173 | * Check if a tcp link is active |
Soohwan Kim |
0:6f28332c466f | 174 | * |
Soohwan Kim |
0:6f28332c466f | 175 | * @returns true if successful |
Soohwan Kim |
0:6f28332c466f | 176 | */ |
Soohwan Kim |
0:6f28332c466f | 177 | bool is_connected(int socket); |
Soohwan Kim |
0:6f28332c466f | 178 | |
Soohwan Kim |
0:6f28332c466f | 179 | /* |
Soohwan Kim |
0:6f28332c466f | 180 | * Close a tcp connection |
Soohwan Kim |
0:6f28332c466f | 181 | * |
Soohwan Kim |
0:6f28332c466f | 182 | * @ returns true if successful |
Soohwan Kim |
0:6f28332c466f | 183 | */ |
Soohwan Kim |
0:6f28332c466f | 184 | bool close(int socket); |
Soohwan Kim |
0:6f28332c466f | 185 | |
Soohwan Kim |
0:6f28332c466f | 186 | /* |
Soohwan Kim |
0:6f28332c466f | 187 | * @param str string to be sent |
Soohwan Kim |
0:6f28332c466f | 188 | * @param len string length |
Soohwan Kim |
0:6f28332c466f | 189 | */ |
Soohwan Kim |
0:6f28332c466f | 190 | int send(int socket, const char * str, int len); |
Soohwan Kim |
0:6f28332c466f | 191 | |
Soohwan Kim |
0:6f28332c466f | 192 | int recv(int socket, char* buf, int len); |
Soohwan Kim |
0:6f28332c466f | 193 | |
Soohwan Kim |
0:6f28332c466f | 194 | /* |
Soohwan Kim |
0:6f28332c466f | 195 | * Return true if the module is using dhcp |
Soohwan Kim |
0:6f28332c466f | 196 | * |
Soohwan Kim |
0:6f28332c466f | 197 | * @returns true if the module is using dhcp |
Soohwan Kim |
0:6f28332c466f | 198 | */ |
Soohwan Kim |
0:6f28332c466f | 199 | bool isDHCP() { |
Soohwan Kim |
0:6f28332c466f | 200 | return dhcp; |
Soohwan Kim |
0:6f28332c466f | 201 | } |
Soohwan Kim |
0:6f28332c466f | 202 | |
Soohwan Kim |
0:6f28332c466f | 203 | bool gethostbyname(const char* host, uint32_t* ip); |
Soohwan Kim |
0:6f28332c466f | 204 | |
Soohwan Kim |
0:6f28332c466f | 205 | static WIZnet_Chip * getInstance() { |
Soohwan Kim |
0:6f28332c466f | 206 | return inst; |
Soohwan Kim |
0:6f28332c466f | 207 | }; |
Soohwan Kim |
0:6f28332c466f | 208 | |
Soohwan Kim |
0:6f28332c466f | 209 | int new_socket(); |
Soohwan Kim |
0:6f28332c466f | 210 | uint16_t new_port(); |
Soohwan Kim |
0:6f28332c466f | 211 | |
Soohwan Kim |
0:6f28332c466f | 212 | void scmd(int socket, Command cmd); |
Soohwan Kim |
0:6f28332c466f | 213 | |
Soohwan Kim |
0:6f28332c466f | 214 | template<typename T> |
Soohwan Kim |
0:6f28332c466f | 215 | void sreg(int socket, uint16_t addr, T data) { |
Soohwan Kim |
0:6f28332c466f | 216 | reg_wr<T>(addr, (uint8_t)(0x01+(socket<<2)), data); |
Soohwan Kim |
0:6f28332c466f | 217 | } |
Soohwan Kim |
0:6f28332c466f | 218 | |
Soohwan Kim |
0:6f28332c466f | 219 | template<typename T> |
Soohwan Kim |
0:6f28332c466f | 220 | T sreg(int socket, uint16_t addr) { |
Soohwan Kim |
0:6f28332c466f | 221 | return reg_rd<T>(addr, (uint8_t)(0x01+(socket<<2))); |
Soohwan Kim |
0:6f28332c466f | 222 | } |
Soohwan Kim |
0:6f28332c466f | 223 | |
Soohwan Kim |
0:6f28332c466f | 224 | template<typename T> |
Soohwan Kim |
0:6f28332c466f | 225 | void reg_wr(uint16_t addr, T data) { |
Soohwan Kim |
0:6f28332c466f | 226 | return reg_wr(addr, 0x00, data); |
Soohwan Kim |
0:6f28332c466f | 227 | } |
Soohwan Kim |
0:6f28332c466f | 228 | |
Soohwan Kim |
0:6f28332c466f | 229 | template<typename T> |
Soohwan Kim |
0:6f28332c466f | 230 | void reg_wr(uint16_t addr, uint8_t cb, T data) { |
Soohwan Kim |
0:6f28332c466f | 231 | uint8_t buf[sizeof(T)]; |
Soohwan Kim |
0:6f28332c466f | 232 | *reinterpret_cast<T*>(buf) = data; |
Soohwan Kim |
0:6f28332c466f | 233 | /* |
Soohwan Kim |
0:6f28332c466f | 234 | for(int i = 0; i < sizeof(buf)/2; i++) { // Little Endian to Big Endian |
Soohwan Kim |
0:6f28332c466f | 235 | uint8_t t = buf[i]; |
Soohwan Kim |
0:6f28332c466f | 236 | buf[i] = buf[sizeof(buf)-1-i]; |
Soohwan Kim |
0:6f28332c466f | 237 | buf[sizeof(buf)-1-i] = t; |
Soohwan Kim |
0:6f28332c466f | 238 | } |
Soohwan Kim |
0:6f28332c466f | 239 | */ |
Helmut Tschemernjak | 37:018436dccfcd | 240 | for(int i = 0; i < (int)sizeof(buf); i++) { // Little Endian to Big Endian |
Soohwan Kim |
0:6f28332c466f | 241 | *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)((cb<<16)+addr)+i) = buf[i]; |
Soohwan Kim |
0:6f28332c466f | 242 | } |
Soohwan Kim |
0:6f28332c466f | 243 | } |
Soohwan Kim |
0:6f28332c466f | 244 | |
Soohwan Kim |
0:6f28332c466f | 245 | template<typename T> |
Soohwan Kim |
0:6f28332c466f | 246 | T reg_rd(uint16_t addr) { |
Soohwan Kim |
0:6f28332c466f | 247 | return reg_rd<T>(addr, (uint8_t)(0x00)); |
Soohwan Kim |
0:6f28332c466f | 248 | } |
Soohwan Kim |
0:6f28332c466f | 249 | |
Soohwan Kim |
0:6f28332c466f | 250 | template<typename T> |
Soohwan Kim |
0:6f28332c466f | 251 | T reg_rd(uint16_t addr, uint8_t cb) { |
embeddist | 14:2101ab5ee40f | 252 | uint8_t buf[sizeof(T)] = {0,}; |
Helmut Tschemernjak | 37:018436dccfcd | 253 | for(int i = 0; i < (int)sizeof(buf); i++) { // Little Endian to Big Endian |
Soohwan Kim |
0:6f28332c466f | 254 | buf[i] = *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)((cb<<16)+addr)+i); |
Soohwan Kim |
0:6f28332c466f | 255 | } |
Soohwan Kim |
0:6f28332c466f | 256 | /* |
Soohwan Kim |
0:6f28332c466f | 257 | for(int i = 0; i < sizeof(buf)/2; i++) { // Big Endian to Little Endian |
Soohwan Kim |
0:6f28332c466f | 258 | uint8_t t = buf[i]; |
Soohwan Kim |
0:6f28332c466f | 259 | buf[i] = buf[sizeof(buf)-1-i]; |
Soohwan Kim |
0:6f28332c466f | 260 | buf[sizeof(buf)-1-i] = t; |
Soohwan Kim |
0:6f28332c466f | 261 | } |
Soohwan Kim |
0:6f28332c466f | 262 | */ |
Soohwan Kim |
0:6f28332c466f | 263 | return *reinterpret_cast<T*>(buf); |
Soohwan Kim |
0:6f28332c466f | 264 | } |
Soohwan Kim |
0:6f28332c466f | 265 | |
embeddist | 14:2101ab5ee40f | 266 | void reg_rd_mac(uint16_t addr, uint8_t* data); |
embeddist | 14:2101ab5ee40f | 267 | |
embeddist | 14:2101ab5ee40f | 268 | void reg_wr_ip(uint16_t addr, uint8_t cb, const char* ip); |
Soohwan Kim |
0:6f28332c466f | 269 | |
embeddist | 14:2101ab5ee40f | 270 | void sreg_ip(int socket, uint16_t addr, const char* ip); |
Soohwan Kim |
0:6f28332c466f | 271 | |
embeddist | 14:2101ab5ee40f | 272 | int ethernet_link(void); |
Helmut Tschemernjak | 37:018436dccfcd | 273 | |
Helmut Tschemernjak | 37:018436dccfcd | 274 | int ethernet_speed(void); |
embeddist | 14:2101ab5ee40f | 275 | |
embeddist | 14:2101ab5ee40f | 276 | void ethernet_set_link(int speed, int duplex); |
Helmut Tschemernjak | 37:018436dccfcd | 277 | |
Helmut Tschemernjak | 37:018436dccfcd | 278 | bool ethernet_fullduplex(void); |
Helmut Tschemernjak | 37:018436dccfcd | 279 | |
Helmut Tschemernjak | 37:018436dccfcd | 280 | uint32_t getDNSAddr(void) { |
Helmut Tschemernjak | 37:018436dccfcd | 281 | return dnsaddr; |
Helmut Tschemernjak | 37:018436dccfcd | 282 | }; |
embeddist | 14:2101ab5ee40f | 283 | |
Soohwan Kim |
0:6f28332c466f | 284 | |
Soohwan Kim |
0:6f28332c466f | 285 | protected: |
Soohwan Kim |
0:6f28332c466f | 286 | uint8_t mac[6]; |
Soohwan Kim |
0:6f28332c466f | 287 | uint32_t ip; |
Soohwan Kim |
0:6f28332c466f | 288 | uint32_t netmask; |
Soohwan Kim |
0:6f28332c466f | 289 | uint32_t gateway; |
Soohwan Kim |
0:6f28332c466f | 290 | uint32_t dnsaddr; |
Helmut Tschemernjak | 37:018436dccfcd | 291 | uint32_t timesrv; |
Helmut Tschemernjak | 37:018436dccfcd | 292 | uint32_t leaseTime; |
Soohwan Kim |
0:6f28332c466f | 293 | bool dhcp; |
Soohwan Kim |
0:6f28332c466f | 294 | |
Soohwan Kim |
0:6f28332c466f | 295 | static WIZnet_Chip* inst; |
Soohwan Kim |
0:6f28332c466f | 296 | |
Soohwan Kim |
0:6f28332c466f | 297 | void reg_wr_mac(uint16_t addr, uint8_t* data) { |
Soohwan Kim |
0:6f28332c466f | 298 | *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+3)) = data[0] ; |
Soohwan Kim |
0:6f28332c466f | 299 | *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+2)) = data[1] ; |
Soohwan Kim |
0:6f28332c466f | 300 | *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+1)) = data[2] ; |
Soohwan Kim |
0:6f28332c466f | 301 | *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+0)) = data[3] ; |
Soohwan Kim |
0:6f28332c466f | 302 | *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+7)) = data[4] ; |
Soohwan Kim |
0:6f28332c466f | 303 | *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+6)) = data[5] ; |
Soohwan Kim |
0:6f28332c466f | 304 | } |
Soohwan Kim |
0:6f28332c466f | 305 | }; |
Soohwan Kim |
0:6f28332c466f | 306 | |
Soohwan Kim |
0:6f28332c466f | 307 | extern uint32_t str_to_ip(const char* str); |
Soohwan Kim |
0:6f28332c466f | 308 | extern void printfBytes(char* str, uint8_t* buf, int len); |
Soohwan Kim |
0:6f28332c466f | 309 | extern void printHex(uint8_t* buf, int len); |
Soohwan Kim |
0:6f28332c466f | 310 | extern void debug_hex(uint8_t* buf, int len); |