no upgrade or change at this. move to new Library for WIZ550io, W5500 -> http://mbed.org/teams/EthernetInterfaceW5500-makers/code/W5500Interface/

Dependents:   LPC11U68_NTPClient_HelloWorld_WIZ550io

Fork of WIZ550ioInterface by ban4jp -

please get the new Library for WIZ550io, W5500 (WIZnet) http://mbed.org/teams/EthernetInterfaceW5500-makers/code/W5500Interface/

Import libraryW5500Interface

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.

Committer:
ban4jp
Date:
Mon Dec 23 13:51:35 2013 +0000
Revision:
9:615198a7b82b
Parent:
8:8bdf6aac8cea
Child:
10:4da8370d14da
Use on-board MAC Address.; Fixed compatibility.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
samux 1:fb4494783863 1 /* Copyright (C) 2012 mbed.org, MIT License
samux 1:fb4494783863 2 *
samux 1:fb4494783863 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
samux 1:fb4494783863 4 * and associated documentation files (the "Software"), to deal in the Software without restriction,
samux 1:fb4494783863 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
samux 1:fb4494783863 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
samux 1:fb4494783863 7 * furnished to do so, subject to the following conditions:
samux 1:fb4494783863 8 *
samux 1:fb4494783863 9 * The above copyright notice and this permission notice shall be included in all copies or
samux 1:fb4494783863 10 * substantial portions of the Software.
samux 1:fb4494783863 11 *
samux 1:fb4494783863 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
samux 1:fb4494783863 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
samux 1:fb4494783863 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
samux 1:fb4494783863 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
samux 1:fb4494783863 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
samux 1:fb4494783863 17 */
samux 1:fb4494783863 18
samux 1:fb4494783863 19 #include "mbed.h"
va009039 5:fb15c35d1e28 20 #include "mbed_debug.h"
va009039 5:fb15c35d1e28 21 #include "WIZ820io.h"
va009039 5:fb15c35d1e28 22 #include "DNSClient.h"
samux 1:fb4494783863 23
samux 1:fb4494783863 24 //Debug is disabled by default
va009039 5:fb15c35d1e28 25 #if 0
va009039 5:fb15c35d1e28 26 #define DBG(...) do{debug("%p %d %s ", this,__LINE__,__PRETTY_FUNCTION__); debug(__VA_ARGS__); } while(0);
va009039 5:fb15c35d1e28 27 //#define DBG(x, ...) debug("[WIZ820io:DBG]"x"\r\n", ##__VA_ARGS__);
va009039 5:fb15c35d1e28 28 #define WARN(x, ...) debug("[WIZ820io:WARN]"x"\r\n", ##__VA_ARGS__);
va009039 5:fb15c35d1e28 29 #define ERR(x, ...) debug("[WIZ820io:ERR]"x"\r\n", ##__VA_ARGS__);
samux 1:fb4494783863 30 #else
samux 1:fb4494783863 31 #define DBG(x, ...)
samux 1:fb4494783863 32 #define WARN(x, ...)
samux 1:fb4494783863 33 #define ERR(x, ...)
samux 1:fb4494783863 34 #endif
samux 1:fb4494783863 35
va009039 5:fb15c35d1e28 36 #if 1
va009039 5:fb15c35d1e28 37 #define INFO(x, ...) debug("[WIZ820io:INFO]"x"\r\n", ##__VA_ARGS__);
samux 1:fb4494783863 38 #else
samux 1:fb4494783863 39 #define INFO(x, ...)
samux 1:fb4494783863 40 #endif
samux 1:fb4494783863 41
va009039 5:fb15c35d1e28 42 #define DBG_SPI 0
samux 1:fb4494783863 43
va009039 5:fb15c35d1e28 44 WIZ820io* WIZ820io::inst;
samux 1:fb4494783863 45
va009039 5:fb15c35d1e28 46 WIZ820io::WIZ820io(PinName mosi, PinName miso, PinName sclk, PinName _cs, PinName _reset):
va009039 5:fb15c35d1e28 47 cs(_cs), reset_pin(_reset)
samux 1:fb4494783863 48 {
va009039 5:fb15c35d1e28 49 spi = new SPI(mosi, miso, sclk);
va009039 5:fb15c35d1e28 50 cs = 1;
va009039 5:fb15c35d1e28 51 reset_pin = 1;
va009039 5:fb15c35d1e28 52 inst = this;
va009039 5:fb15c35d1e28 53 }
samux 1:fb4494783863 54
va009039 5:fb15c35d1e28 55 WIZ820io::WIZ820io(SPI* spi, PinName _cs, PinName _reset):
va009039 5:fb15c35d1e28 56 cs(_cs), reset_pin(_reset)
va009039 5:fb15c35d1e28 57 {
va009039 5:fb15c35d1e28 58 this->spi = spi;
va009039 5:fb15c35d1e28 59 cs = 1;
va009039 5:fb15c35d1e28 60 reset_pin = 1;
va009039 5:fb15c35d1e28 61 inst = this;
va009039 5:fb15c35d1e28 62 }
va009039 5:fb15c35d1e28 63
va009039 5:fb15c35d1e28 64 bool WIZ820io::join()
va009039 5:fb15c35d1e28 65 {
va009039 5:fb15c35d1e28 66 reg_wr<uint32_t>(SIPR, ip);
va009039 5:fb15c35d1e28 67 reg_wr<uint32_t>(GAR, gateway);
va009039 5:fb15c35d1e28 68 reg_wr<uint32_t>(SUBR, netmask);
va009039 5:fb15c35d1e28 69 return true;
va009039 5:fb15c35d1e28 70 }
va009039 5:fb15c35d1e28 71
va009039 5:fb15c35d1e28 72 bool WIZ820io::setProtocol(int socket, Protocol p)
va009039 5:fb15c35d1e28 73 {
va009039 5:fb15c35d1e28 74 if (socket < 0) {
va009039 5:fb15c35d1e28 75 return false;
samux 1:fb4494783863 76 }
va009039 5:fb15c35d1e28 77 sreg<uint8_t>(socket, Sn_MR, p);
va009039 5:fb15c35d1e28 78 return true;
samux 1:fb4494783863 79 }
samux 1:fb4494783863 80
va009039 5:fb15c35d1e28 81 bool WIZ820io::connect(int socket, const char * host, int port, int timeout_ms)
samux 1:fb4494783863 82 {
va009039 5:fb15c35d1e28 83 if (socket < 0) {
va009039 5:fb15c35d1e28 84 return false;
va009039 5:fb15c35d1e28 85 }
va009039 5:fb15c35d1e28 86 sreg<uint8_t>(socket, Sn_MR, TCP);
va009039 5:fb15c35d1e28 87 scmd(socket, OPEN);
va009039 5:fb15c35d1e28 88 sreg_ip(socket, Sn_DIPR, host);
va009039 5:fb15c35d1e28 89 sreg<uint16_t>(socket, Sn_DPORT, port);
va009039 5:fb15c35d1e28 90 sreg<uint16_t>(socket, Sn_PORT, new_port());
va009039 5:fb15c35d1e28 91 scmd(socket, CONNECT);
va009039 5:fb15c35d1e28 92 Timer t;
va009039 5:fb15c35d1e28 93 t.reset();
va009039 5:fb15c35d1e28 94 t.start();
va009039 5:fb15c35d1e28 95 while(!is_connected(socket)) {
va009039 5:fb15c35d1e28 96 if (t.read_ms() > timeout_ms) {
va009039 5:fb15c35d1e28 97 return false;
va009039 5:fb15c35d1e28 98 }
va009039 5:fb15c35d1e28 99 }
va009039 5:fb15c35d1e28 100 return true;
va009039 5:fb15c35d1e28 101 }
samux 1:fb4494783863 102
va009039 5:fb15c35d1e28 103 bool WIZ820io::gethostbyname(const char* host, uint32_t* ip)
va009039 5:fb15c35d1e28 104 {
va009039 5:fb15c35d1e28 105 uint32_t addr = str_to_ip(host);
va009039 5:fb15c35d1e28 106 char buf[17];
va009039 5:fb15c35d1e28 107 snprintf(buf, sizeof(buf), "%d.%d.%d.%d", (addr>>24)&0xff, (addr>>16)&0xff, (addr>>8)&0xff, addr&0xff);
va009039 5:fb15c35d1e28 108 if (strcmp(buf, host) == 0) {
va009039 5:fb15c35d1e28 109 *ip = addr;
va009039 5:fb15c35d1e28 110 return true;
va009039 5:fb15c35d1e28 111 }
va009039 5:fb15c35d1e28 112 DNSClient client;
va009039 5:fb15c35d1e28 113 if(client.lookup(host)) {
va009039 5:fb15c35d1e28 114 *ip = client.ip;
va009039 5:fb15c35d1e28 115 return true;
va009039 5:fb15c35d1e28 116 }
va009039 5:fb15c35d1e28 117 return false;
va009039 5:fb15c35d1e28 118 }
samux 1:fb4494783863 119
va009039 5:fb15c35d1e28 120 bool WIZ820io::disconnect()
va009039 5:fb15c35d1e28 121 {
va009039 5:fb15c35d1e28 122 return true;
va009039 5:fb15c35d1e28 123 }
samux 1:fb4494783863 124
va009039 5:fb15c35d1e28 125 bool WIZ820io::is_connected(int socket)
va009039 5:fb15c35d1e28 126 {
va009039 5:fb15c35d1e28 127 if (sreg<uint8_t>(socket, Sn_SR) == SOCK_ESTABLISHED) {
samux 1:fb4494783863 128 return true;
samux 1:fb4494783863 129 }
samux 1:fb4494783863 130 return false;
samux 1:fb4494783863 131 }
samux 1:fb4494783863 132
va009039 5:fb15c35d1e28 133 void WIZ820io::reset()
samux 1:fb4494783863 134 {
va009039 5:fb15c35d1e28 135 reset_pin = 1;
va009039 5:fb15c35d1e28 136 reset_pin = 0;
ban4jp 7:93e358253dd8 137 //wait_us(2); // 2us
ban4jp 8:8bdf6aac8cea 138 wait_us(500); // 500us (w5500)
va009039 5:fb15c35d1e28 139 reset_pin = 1;
ban4jp 7:93e358253dd8 140 //wait_ms(150); // 150ms
ban4jp 8:8bdf6aac8cea 141 wait_ms(300); // 300ms (w5500)
ban4jp 9:615198a7b82b 142
ban4jp 9:615198a7b82b 143 //reg_wr<uint8_t>(MR, 1<<7);
ban4jp 9:615198a7b82b 144
ban4jp 9:615198a7b82b 145 //#ifdef TARGET_LPC1114
ban4jp 9:615198a7b82b 146 // uint8_t mac[6] = {0x00,0x02,0xf7,0xf0,0x00,0x00};
ban4jp 9:615198a7b82b 147 //#else
ban4jp 9:615198a7b82b 148 // uint8_t mac[6];
ban4jp 9:615198a7b82b 149 // mbed_mac_address((char*)mac);
ban4jp 9:615198a7b82b 150 //#endif
ban4jp 9:615198a7b82b 151 // reg_wr_mac(SHAR, mac);
ban4jp 9:615198a7b82b 152
ban4jp 9:615198a7b82b 153 // set RX and TX buffer size
ban4jp 9:615198a7b82b 154 for (int socket = 0; socket < MAX_SOCK_NUM; socket++) {
ban4jp 9:615198a7b82b 155 sreg<uint8_t>(socket, Sn_RXBUF_SIZE, 2);
ban4jp 9:615198a7b82b 156 sreg<uint8_t>(socket, Sn_TXBUF_SIZE, 2);
ban4jp 9:615198a7b82b 157 }
samux 1:fb4494783863 158 }
samux 1:fb4494783863 159
va009039 5:fb15c35d1e28 160 bool WIZ820io::close(int socket)
samux 1:fb4494783863 161 {
va009039 5:fb15c35d1e28 162 if (socket < 0) {
samux 1:fb4494783863 163 return false;
samux 1:fb4494783863 164 }
va009039 5:fb15c35d1e28 165 // if not connected, return
va009039 5:fb15c35d1e28 166 if (sreg<uint8_t>(socket, Sn_SR) == SOCK_CLOSED) {
samux 1:fb4494783863 167 return true;
samux 1:fb4494783863 168 }
va009039 5:fb15c35d1e28 169 if (sreg<uint8_t>(socket, Sn_MR) == TCP) {
va009039 5:fb15c35d1e28 170 scmd(socket, DISCON);
va009039 5:fb15c35d1e28 171 }
va009039 5:fb15c35d1e28 172 scmd(socket, CLOSE);
ban4jp 9:615198a7b82b 173 sreg<uint8_t>(socket, Sn_IR, 0xff);
samux 1:fb4494783863 174 return true;
samux 1:fb4494783863 175 }
samux 1:fb4494783863 176
va009039 5:fb15c35d1e28 177 int WIZ820io::wait_readable(int socket, int wait_time_ms, int req_size)
samux 1:fb4494783863 178 {
va009039 5:fb15c35d1e28 179 if (socket < 0) {
va009039 5:fb15c35d1e28 180 return -1;
va009039 5:fb15c35d1e28 181 }
va009039 5:fb15c35d1e28 182 Timer t;
va009039 5:fb15c35d1e28 183 t.reset();
va009039 5:fb15c35d1e28 184 t.start();
va009039 5:fb15c35d1e28 185 while(1) {
va009039 5:fb15c35d1e28 186 int size = sreg<uint16_t>(socket, Sn_RX_RSR);
va009039 5:fb15c35d1e28 187 if (size > req_size) {
va009039 5:fb15c35d1e28 188 return size;
va009039 5:fb15c35d1e28 189 }
va009039 5:fb15c35d1e28 190 if (wait_time_ms != (-1) && t.read_ms() > wait_time_ms) {
va009039 5:fb15c35d1e28 191 break;
va009039 5:fb15c35d1e28 192 }
va009039 5:fb15c35d1e28 193 }
va009039 5:fb15c35d1e28 194 return -1;
samux 1:fb4494783863 195 }
samux 1:fb4494783863 196
va009039 5:fb15c35d1e28 197 int WIZ820io::wait_writeable(int socket, int wait_time_ms, int req_size)
samux 1:fb4494783863 198 {
va009039 5:fb15c35d1e28 199 if (socket < 0) {
va009039 5:fb15c35d1e28 200 return -1;
va009039 5:fb15c35d1e28 201 }
va009039 5:fb15c35d1e28 202 Timer t;
va009039 5:fb15c35d1e28 203 t.reset();
va009039 5:fb15c35d1e28 204 t.start();
va009039 5:fb15c35d1e28 205 while(1) {
va009039 5:fb15c35d1e28 206 int size = sreg<uint16_t>(socket, Sn_TX_FSR);
va009039 5:fb15c35d1e28 207 if (size > req_size) {
va009039 5:fb15c35d1e28 208 return size;
va009039 5:fb15c35d1e28 209 }
va009039 5:fb15c35d1e28 210 if (wait_time_ms != (-1) && t.read_ms() > wait_time_ms) {
va009039 5:fb15c35d1e28 211 break;
va009039 5:fb15c35d1e28 212 }
va009039 5:fb15c35d1e28 213 }
va009039 5:fb15c35d1e28 214 return -1;
samux 3:9aa05e19c62e 215 }
samux 3:9aa05e19c62e 216
va009039 5:fb15c35d1e28 217 int WIZ820io::send(int socket, const char * str, int len)
samux 1:fb4494783863 218 {
va009039 5:fb15c35d1e28 219 if (socket < 0) {
va009039 5:fb15c35d1e28 220 return -1;
va009039 5:fb15c35d1e28 221 }
va009039 5:fb15c35d1e28 222 uint16_t ptr = sreg<uint16_t>(socket, Sn_TX_WR);
ban4jp 7:93e358253dd8 223 uint8_t cntl_byte = (0x14 + (socket << 5));
ban4jp 7:93e358253dd8 224 spi_write(ptr, cntl_byte, (uint8_t*)str, len);
va009039 5:fb15c35d1e28 225 sreg<uint16_t>(socket, Sn_TX_WR, ptr + len);
va009039 5:fb15c35d1e28 226 scmd(socket, SEND);
ban4jp 9:615198a7b82b 227
ban4jp 9:615198a7b82b 228 while ((sreg<uint8_t>(socket, Sn_IR) & INT_SEND_OK) != INT_SEND_OK) {
ban4jp 9:615198a7b82b 229 if (sreg<uint8_t>(socket, Sn_SR) == CLOSED) {
ban4jp 9:615198a7b82b 230 close(socket);
ban4jp 9:615198a7b82b 231 return 0;
ban4jp 9:615198a7b82b 232 }
ban4jp 9:615198a7b82b 233 }
ban4jp 9:615198a7b82b 234 sreg<uint8_t>(socket, Sn_IR, INT_SEND_OK);
ban4jp 9:615198a7b82b 235
va009039 5:fb15c35d1e28 236 return len;
samux 1:fb4494783863 237 }
samux 1:fb4494783863 238
va009039 5:fb15c35d1e28 239 int WIZ820io::recv(int socket, char* buf, int len)
samux 1:fb4494783863 240 {
va009039 5:fb15c35d1e28 241 if (socket < 0) {
va009039 5:fb15c35d1e28 242 return -1;
va009039 5:fb15c35d1e28 243 }
va009039 5:fb15c35d1e28 244 uint16_t ptr = sreg<uint16_t>(socket, Sn_RX_RD);
ban4jp 7:93e358253dd8 245 uint8_t cntl_byte = (0x18 + (socket << 5));
ban4jp 7:93e358253dd8 246 spi_read(ptr, cntl_byte, (uint8_t*)buf, len);
va009039 5:fb15c35d1e28 247 sreg<uint16_t>(socket, Sn_RX_RD, ptr + len);
va009039 5:fb15c35d1e28 248 scmd(socket, RECV);
va009039 5:fb15c35d1e28 249 return len;
samux 1:fb4494783863 250 }
samux 1:fb4494783863 251
va009039 5:fb15c35d1e28 252 int WIZ820io::new_socket()
samux 1:fb4494783863 253 {
va009039 5:fb15c35d1e28 254 for(int s = 0; s < 8; s++) {
va009039 5:fb15c35d1e28 255 if (sreg<uint8_t>(s, Sn_SR) == SOCK_CLOSED) {
va009039 5:fb15c35d1e28 256 return s;
va009039 5:fb15c35d1e28 257 }
va009039 5:fb15c35d1e28 258 }
va009039 5:fb15c35d1e28 259 return -1;
samux 1:fb4494783863 260 }
samux 1:fb4494783863 261
va009039 5:fb15c35d1e28 262 uint16_t WIZ820io::new_port()
samux 1:fb4494783863 263 {
va009039 5:fb15c35d1e28 264 uint16_t port = rand();
va009039 5:fb15c35d1e28 265 port |= 49152;
va009039 5:fb15c35d1e28 266 return port;
samux 1:fb4494783863 267 }
samux 1:fb4494783863 268
va009039 5:fb15c35d1e28 269 void WIZ820io::scmd(int socket, Command cmd)
samux 1:fb4494783863 270 {
va009039 5:fb15c35d1e28 271 sreg<uint8_t>(socket, Sn_CR, cmd);
ban4jp 7:93e358253dd8 272 while(sreg<uint8_t>(socket, Sn_CR));
samux 1:fb4494783863 273 }
samux 1:fb4494783863 274
ban4jp 7:93e358253dd8 275 void WIZ820io::spi_write(uint16_t addr, uint8_t cb, const uint8_t *buf, uint16_t len)
samux 1:fb4494783863 276 {
va009039 5:fb15c35d1e28 277 cs = 0;
va009039 5:fb15c35d1e28 278 spi->write(addr >> 8);
va009039 5:fb15c35d1e28 279 spi->write(addr & 0xff);
ban4jp 7:93e358253dd8 280 spi->write(cb);
va009039 5:fb15c35d1e28 281 for(int i = 0; i < len; i++) {
va009039 5:fb15c35d1e28 282 spi->write(buf[i]);
va009039 5:fb15c35d1e28 283 }
va009039 5:fb15c35d1e28 284 cs = 1;
va009039 5:fb15c35d1e28 285
va009039 5:fb15c35d1e28 286 #if DBG_SPI
ban4jp 7:93e358253dd8 287 debug("[SPI]W %04x(%02x %d)", addr, cb, len);
va009039 5:fb15c35d1e28 288 for(int i = 0; i < len; i++) {
va009039 5:fb15c35d1e28 289 debug(" %02x", buf[i]);
va009039 5:fb15c35d1e28 290 if (i > 16) {
va009039 5:fb15c35d1e28 291 debug(" ...");
va009039 5:fb15c35d1e28 292 break;
va009039 5:fb15c35d1e28 293 }
va009039 5:fb15c35d1e28 294 }
va009039 5:fb15c35d1e28 295 debug("\r\n");
va009039 5:fb15c35d1e28 296 #endif
va009039 5:fb15c35d1e28 297 }
va009039 5:fb15c35d1e28 298
ban4jp 7:93e358253dd8 299 void WIZ820io::spi_read(uint16_t addr, uint8_t cb, uint8_t *buf, uint16_t len)
va009039 5:fb15c35d1e28 300 {
va009039 5:fb15c35d1e28 301 cs = 0;
va009039 5:fb15c35d1e28 302 spi->write(addr >> 8);
va009039 5:fb15c35d1e28 303 spi->write(addr & 0xff);
ban4jp 7:93e358253dd8 304 spi->write(cb);
va009039 5:fb15c35d1e28 305 for(int i = 0; i < len; i++) {
va009039 5:fb15c35d1e28 306 buf[i] = spi->write(0);
va009039 5:fb15c35d1e28 307 }
va009039 5:fb15c35d1e28 308 cs = 1;
va009039 5:fb15c35d1e28 309
va009039 5:fb15c35d1e28 310 #if DBG_SPI
ban4jp 7:93e358253dd8 311 debug("[SPI]R %04x(%02x %d)", addr, cb, len);
va009039 5:fb15c35d1e28 312 for(int i = 0; i < len; i++) {
va009039 5:fb15c35d1e28 313 debug(" %02x", buf[i]);
va009039 5:fb15c35d1e28 314 if (i > 16) {
va009039 5:fb15c35d1e28 315 debug(" ...");
va009039 5:fb15c35d1e28 316 break;
va009039 5:fb15c35d1e28 317 }
va009039 5:fb15c35d1e28 318 }
va009039 5:fb15c35d1e28 319 debug("\r\n");
va009039 5:fb15c35d1e28 320 if ((addr&0xf0ff)==0x4026 || (addr&0xf0ff)==0x4003) {
va009039 5:fb15c35d1e28 321 wait_ms(200);
va009039 5:fb15c35d1e28 322 }
va009039 5:fb15c35d1e28 323 #endif
samux 1:fb4494783863 324 }
samux 1:fb4494783863 325
va009039 5:fb15c35d1e28 326 uint32_t str_to_ip(const char* str)
samux 1:fb4494783863 327 {
va009039 5:fb15c35d1e28 328 uint32_t ip = 0;
va009039 5:fb15c35d1e28 329 char* p = (char*)str;
va009039 5:fb15c35d1e28 330 for(int i = 0; i < 4; i++) {
va009039 5:fb15c35d1e28 331 ip |= atoi(p);
va009039 5:fb15c35d1e28 332 p = strchr(p, '.');
va009039 5:fb15c35d1e28 333 if (p == NULL) {
va009039 5:fb15c35d1e28 334 break;
va009039 5:fb15c35d1e28 335 }
va009039 5:fb15c35d1e28 336 ip <<= 8;
va009039 5:fb15c35d1e28 337 p++;
va009039 5:fb15c35d1e28 338 }
va009039 5:fb15c35d1e28 339 return ip;
va009039 5:fb15c35d1e28 340 }
samux 1:fb4494783863 341
va009039 5:fb15c35d1e28 342 void printfBytes(char* str, uint8_t* buf, int len)
va009039 5:fb15c35d1e28 343 {
va009039 5:fb15c35d1e28 344 printf("%s %d:", str, len);
va009039 5:fb15c35d1e28 345 for(int i = 0; i < len; i++) {
va009039 5:fb15c35d1e28 346 printf(" %02x", buf[i]);
va009039 5:fb15c35d1e28 347 }
va009039 5:fb15c35d1e28 348 printf("\n");
va009039 5:fb15c35d1e28 349 }
samux 1:fb4494783863 350
va009039 5:fb15c35d1e28 351 void printHex(uint8_t* buf, int len)
va009039 5:fb15c35d1e28 352 {
va009039 5:fb15c35d1e28 353 for(int i = 0; i < len; i++) {
va009039 5:fb15c35d1e28 354 if ((i%16) == 0) {
va009039 5:fb15c35d1e28 355 printf("%p", buf+i);
samux 1:fb4494783863 356 }
va009039 5:fb15c35d1e28 357 printf(" %02x", buf[i]);
va009039 5:fb15c35d1e28 358 if ((i%16) == 15) {
va009039 5:fb15c35d1e28 359 printf("\n");
va009039 5:fb15c35d1e28 360 }
samux 1:fb4494783863 361 }
va009039 5:fb15c35d1e28 362 printf("\n");
va009039 5:fb15c35d1e28 363 }
samux 1:fb4494783863 364
va009039 5:fb15c35d1e28 365 void debug_hex(uint8_t* buf, int len)
va009039 5:fb15c35d1e28 366 {
va009039 5:fb15c35d1e28 367 for(int i = 0; i < len; i++) {
va009039 5:fb15c35d1e28 368 if ((i%16) == 0) {
va009039 5:fb15c35d1e28 369 debug("%p", buf+i);
samux 1:fb4494783863 370 }
va009039 5:fb15c35d1e28 371 debug(" %02x", buf[i]);
va009039 5:fb15c35d1e28 372 if ((i%16) == 15) {
va009039 5:fb15c35d1e28 373 debug("\n");
va009039 5:fb15c35d1e28 374 }
samux 1:fb4494783863 375 }
va009039 5:fb15c35d1e28 376 debug("\n");
va009039 5:fb15c35d1e28 377 }