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:
va009039
Date:
Tue Aug 27 12:50:11 2013 +0000
Revision:
5:fb15c35d1e28
Parent:
Wifly/Wifly.cpp@4:0bcec6272784
Child:
7:93e358253dd8
WIZ820ioInterface?first commit

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;
va009039 5:fb15c35d1e28 137 wait_us(2); // 2us
va009039 5:fb15c35d1e28 138 reset_pin = 1;
va009039 5:fb15c35d1e28 139 wait_ms(150); // 150ms
va009039 5:fb15c35d1e28 140 reg_wr<uint8_t>(MR, 1<<7);
va009039 5:fb15c35d1e28 141 #ifdef TARGET_LPC1114
va009039 5:fb15c35d1e28 142 uint8_t mac[6] = {0x00,0x02,0xf7,0xf0,0x00,0x00};
va009039 5:fb15c35d1e28 143 #else
va009039 5:fb15c35d1e28 144 uint8_t mac[6];
va009039 5:fb15c35d1e28 145 mbed_mac_address((char*)mac);
va009039 5:fb15c35d1e28 146 #endif
va009039 5:fb15c35d1e28 147 reg_wr_mac(SHAR, mac);
samux 1:fb4494783863 148 }
samux 1:fb4494783863 149
va009039 5:fb15c35d1e28 150 bool WIZ820io::close(int socket)
samux 1:fb4494783863 151 {
va009039 5:fb15c35d1e28 152 if (socket < 0) {
samux 1:fb4494783863 153 return false;
samux 1:fb4494783863 154 }
va009039 5:fb15c35d1e28 155 // if not connected, return
va009039 5:fb15c35d1e28 156 if (sreg<uint8_t>(socket, Sn_SR) == SOCK_CLOSED) {
samux 1:fb4494783863 157 return true;
samux 1:fb4494783863 158 }
va009039 5:fb15c35d1e28 159 if (sreg<uint8_t>(socket, Sn_MR) == TCP) {
va009039 5:fb15c35d1e28 160 scmd(socket, DISCON);
va009039 5:fb15c35d1e28 161 }
va009039 5:fb15c35d1e28 162 scmd(socket, CLOSE);
samux 1:fb4494783863 163 return true;
samux 1:fb4494783863 164 }
samux 1:fb4494783863 165
va009039 5:fb15c35d1e28 166 int WIZ820io::wait_readable(int socket, int wait_time_ms, int req_size)
samux 1:fb4494783863 167 {
va009039 5:fb15c35d1e28 168 if (socket < 0) {
va009039 5:fb15c35d1e28 169 return -1;
va009039 5:fb15c35d1e28 170 }
va009039 5:fb15c35d1e28 171 Timer t;
va009039 5:fb15c35d1e28 172 t.reset();
va009039 5:fb15c35d1e28 173 t.start();
va009039 5:fb15c35d1e28 174 while(1) {
va009039 5:fb15c35d1e28 175 int size = sreg<uint16_t>(socket, Sn_RX_RSR);
va009039 5:fb15c35d1e28 176 if (size > req_size) {
va009039 5:fb15c35d1e28 177 return size;
va009039 5:fb15c35d1e28 178 }
va009039 5:fb15c35d1e28 179 if (wait_time_ms != (-1) && t.read_ms() > wait_time_ms) {
va009039 5:fb15c35d1e28 180 break;
va009039 5:fb15c35d1e28 181 }
va009039 5:fb15c35d1e28 182 }
va009039 5:fb15c35d1e28 183 return -1;
samux 1:fb4494783863 184 }
samux 1:fb4494783863 185
va009039 5:fb15c35d1e28 186 int WIZ820io::wait_writeable(int socket, int wait_time_ms, int req_size)
samux 1:fb4494783863 187 {
va009039 5:fb15c35d1e28 188 if (socket < 0) {
va009039 5:fb15c35d1e28 189 return -1;
va009039 5:fb15c35d1e28 190 }
va009039 5:fb15c35d1e28 191 Timer t;
va009039 5:fb15c35d1e28 192 t.reset();
va009039 5:fb15c35d1e28 193 t.start();
va009039 5:fb15c35d1e28 194 while(1) {
va009039 5:fb15c35d1e28 195 int size = sreg<uint16_t>(socket, Sn_TX_FSR);
va009039 5:fb15c35d1e28 196 if (size > req_size) {
va009039 5:fb15c35d1e28 197 return size;
va009039 5:fb15c35d1e28 198 }
va009039 5:fb15c35d1e28 199 if (wait_time_ms != (-1) && t.read_ms() > wait_time_ms) {
va009039 5:fb15c35d1e28 200 break;
va009039 5:fb15c35d1e28 201 }
va009039 5:fb15c35d1e28 202 }
va009039 5:fb15c35d1e28 203 return -1;
samux 3:9aa05e19c62e 204 }
samux 3:9aa05e19c62e 205
va009039 5:fb15c35d1e28 206 int WIZ820io::send(int socket, const char * str, int len)
samux 1:fb4494783863 207 {
va009039 5:fb15c35d1e28 208 if (socket < 0) {
va009039 5:fb15c35d1e28 209 return -1;
va009039 5:fb15c35d1e28 210 }
va009039 5:fb15c35d1e28 211 uint16_t base = 0x8000 + socket * 0x800;
va009039 5:fb15c35d1e28 212 uint16_t ptr = sreg<uint16_t>(socket, Sn_TX_WR);
va009039 5:fb15c35d1e28 213 uint16_t dst = base + (ptr&(0x800-1));
va009039 5:fb15c35d1e28 214 if ((dst + len) > (base+0x800)) {
va009039 5:fb15c35d1e28 215 int len2 = base + 0x800 - dst;
va009039 5:fb15c35d1e28 216 spi_write(dst, (uint8_t*)str, len2);
va009039 5:fb15c35d1e28 217 spi_write(base, (uint8_t*)str+len2, len-len2);
va009039 5:fb15c35d1e28 218 } else {
va009039 5:fb15c35d1e28 219 spi_write(dst, (uint8_t*)str, len);
va009039 5:fb15c35d1e28 220 }
va009039 5:fb15c35d1e28 221 sreg<uint16_t>(socket, Sn_TX_WR, ptr + len);
va009039 5:fb15c35d1e28 222 scmd(socket, SEND);
va009039 5:fb15c35d1e28 223 return len;
samux 1:fb4494783863 224 }
samux 1:fb4494783863 225
va009039 5:fb15c35d1e28 226 int WIZ820io::recv(int socket, char* buf, int len)
samux 1:fb4494783863 227 {
va009039 5:fb15c35d1e28 228 if (socket < 0) {
va009039 5:fb15c35d1e28 229 return -1;
va009039 5:fb15c35d1e28 230 }
va009039 5:fb15c35d1e28 231 uint16_t base = 0xc000 + socket * 0x800;
va009039 5:fb15c35d1e28 232 uint16_t ptr = sreg<uint16_t>(socket, Sn_RX_RD);
va009039 5:fb15c35d1e28 233 uint16_t src = base + (ptr&(0x800-1));
va009039 5:fb15c35d1e28 234 if ((src + len) > (base+0x800)) {
va009039 5:fb15c35d1e28 235 int len2 = base + 0x800 - src;
va009039 5:fb15c35d1e28 236 spi_read(src, (uint8_t*)buf, len2);
va009039 5:fb15c35d1e28 237 spi_read(base, (uint8_t*)buf+len2, len-len2);
va009039 5:fb15c35d1e28 238 } else {
va009039 5:fb15c35d1e28 239 spi_read(src, (uint8_t*)buf, len);
va009039 5:fb15c35d1e28 240 }
va009039 5:fb15c35d1e28 241 sreg<uint16_t>(socket, Sn_RX_RD, ptr + len);
va009039 5:fb15c35d1e28 242 scmd(socket, RECV);
va009039 5:fb15c35d1e28 243 return len;
samux 1:fb4494783863 244 }
samux 1:fb4494783863 245
va009039 5:fb15c35d1e28 246 int WIZ820io::new_socket()
samux 1:fb4494783863 247 {
va009039 5:fb15c35d1e28 248 for(int s = 0; s < 8; s++) {
va009039 5:fb15c35d1e28 249 if (sreg<uint8_t>(s, Sn_SR) == SOCK_CLOSED) {
va009039 5:fb15c35d1e28 250 return s;
va009039 5:fb15c35d1e28 251 }
va009039 5:fb15c35d1e28 252 }
va009039 5:fb15c35d1e28 253 return -1;
samux 1:fb4494783863 254 }
samux 1:fb4494783863 255
va009039 5:fb15c35d1e28 256 uint16_t WIZ820io::new_port()
samux 1:fb4494783863 257 {
va009039 5:fb15c35d1e28 258 uint16_t port = rand();
va009039 5:fb15c35d1e28 259 port |= 49152;
va009039 5:fb15c35d1e28 260 return port;
samux 1:fb4494783863 261 }
samux 1:fb4494783863 262
va009039 5:fb15c35d1e28 263 void WIZ820io::scmd(int socket, Command cmd)
samux 1:fb4494783863 264 {
va009039 5:fb15c35d1e28 265 sreg<uint8_t>(socket, Sn_CR, cmd);
va009039 5:fb15c35d1e28 266 while(sreg<uint8_t>(socket, Sn_CR))
va009039 5:fb15c35d1e28 267 ;
samux 1:fb4494783863 268 }
samux 1:fb4494783863 269
va009039 5:fb15c35d1e28 270 void WIZ820io::spi_write(uint16_t addr, const uint8_t *buf, uint16_t len)
samux 1:fb4494783863 271 {
va009039 5:fb15c35d1e28 272 cs = 0;
va009039 5:fb15c35d1e28 273 spi->write(addr >> 8);
va009039 5:fb15c35d1e28 274 spi->write(addr & 0xff);
va009039 5:fb15c35d1e28 275 spi->write((0x80 | ((len & 0x7f00) >> 8)));
va009039 5:fb15c35d1e28 276 spi->write(len & 0xff);
va009039 5:fb15c35d1e28 277 for(int i = 0; i < len; i++) {
va009039 5:fb15c35d1e28 278 spi->write(buf[i]);
va009039 5:fb15c35d1e28 279 }
va009039 5:fb15c35d1e28 280 cs = 1;
va009039 5:fb15c35d1e28 281
va009039 5:fb15c35d1e28 282 #if DBG_SPI
va009039 5:fb15c35d1e28 283 debug("[SPI]W %04x(%d)", addr, len);
va009039 5:fb15c35d1e28 284 for(int i = 0; i < len; i++) {
va009039 5:fb15c35d1e28 285 debug(" %02x", buf[i]);
va009039 5:fb15c35d1e28 286 if (i > 16) {
va009039 5:fb15c35d1e28 287 debug(" ...");
va009039 5:fb15c35d1e28 288 break;
va009039 5:fb15c35d1e28 289 }
va009039 5:fb15c35d1e28 290 }
va009039 5:fb15c35d1e28 291 debug("\r\n");
va009039 5:fb15c35d1e28 292 #endif
va009039 5:fb15c35d1e28 293 }
va009039 5:fb15c35d1e28 294
va009039 5:fb15c35d1e28 295 void WIZ820io::spi_read(uint16_t addr, uint8_t *buf, uint16_t len)
va009039 5:fb15c35d1e28 296 {
va009039 5:fb15c35d1e28 297 cs = 0;
va009039 5:fb15c35d1e28 298 spi->write(addr >> 8);
va009039 5:fb15c35d1e28 299 spi->write(addr & 0xff);
va009039 5:fb15c35d1e28 300 spi->write((0x00 | ((len & 0x7f00) >> 8)));
va009039 5:fb15c35d1e28 301 spi->write(len & 0xff);
va009039 5:fb15c35d1e28 302 for(int i = 0; i < len; i++) {
va009039 5:fb15c35d1e28 303 buf[i] = spi->write(0);
va009039 5:fb15c35d1e28 304 }
va009039 5:fb15c35d1e28 305 cs = 1;
va009039 5:fb15c35d1e28 306
va009039 5:fb15c35d1e28 307 #if DBG_SPI
va009039 5:fb15c35d1e28 308 debug("[SPI]R %04x(%d)", addr, len);
va009039 5:fb15c35d1e28 309 for(int i = 0; i < len; i++) {
va009039 5:fb15c35d1e28 310 debug(" %02x", buf[i]);
va009039 5:fb15c35d1e28 311 if (i > 16) {
va009039 5:fb15c35d1e28 312 debug(" ...");
va009039 5:fb15c35d1e28 313 break;
va009039 5:fb15c35d1e28 314 }
va009039 5:fb15c35d1e28 315 }
va009039 5:fb15c35d1e28 316 debug("\r\n");
va009039 5:fb15c35d1e28 317 if ((addr&0xf0ff)==0x4026 || (addr&0xf0ff)==0x4003) {
va009039 5:fb15c35d1e28 318 wait_ms(200);
va009039 5:fb15c35d1e28 319 }
va009039 5:fb15c35d1e28 320 #endif
samux 1:fb4494783863 321 }
samux 1:fb4494783863 322
va009039 5:fb15c35d1e28 323 uint32_t str_to_ip(const char* str)
samux 1:fb4494783863 324 {
va009039 5:fb15c35d1e28 325 uint32_t ip = 0;
va009039 5:fb15c35d1e28 326 char* p = (char*)str;
va009039 5:fb15c35d1e28 327 for(int i = 0; i < 4; i++) {
va009039 5:fb15c35d1e28 328 ip |= atoi(p);
va009039 5:fb15c35d1e28 329 p = strchr(p, '.');
va009039 5:fb15c35d1e28 330 if (p == NULL) {
va009039 5:fb15c35d1e28 331 break;
va009039 5:fb15c35d1e28 332 }
va009039 5:fb15c35d1e28 333 ip <<= 8;
va009039 5:fb15c35d1e28 334 p++;
va009039 5:fb15c35d1e28 335 }
va009039 5:fb15c35d1e28 336 return ip;
va009039 5:fb15c35d1e28 337 }
samux 1:fb4494783863 338
va009039 5:fb15c35d1e28 339 void printfBytes(char* str, uint8_t* buf, int len)
va009039 5:fb15c35d1e28 340 {
va009039 5:fb15c35d1e28 341 printf("%s %d:", str, len);
va009039 5:fb15c35d1e28 342 for(int i = 0; i < len; i++) {
va009039 5:fb15c35d1e28 343 printf(" %02x", buf[i]);
va009039 5:fb15c35d1e28 344 }
va009039 5:fb15c35d1e28 345 printf("\n");
va009039 5:fb15c35d1e28 346 }
samux 1:fb4494783863 347
va009039 5:fb15c35d1e28 348 void printHex(uint8_t* buf, int len)
va009039 5:fb15c35d1e28 349 {
va009039 5:fb15c35d1e28 350 for(int i = 0; i < len; i++) {
va009039 5:fb15c35d1e28 351 if ((i%16) == 0) {
va009039 5:fb15c35d1e28 352 printf("%p", buf+i);
samux 1:fb4494783863 353 }
va009039 5:fb15c35d1e28 354 printf(" %02x", buf[i]);
va009039 5:fb15c35d1e28 355 if ((i%16) == 15) {
va009039 5:fb15c35d1e28 356 printf("\n");
va009039 5:fb15c35d1e28 357 }
samux 1:fb4494783863 358 }
va009039 5:fb15c35d1e28 359 printf("\n");
va009039 5:fb15c35d1e28 360 }
samux 1:fb4494783863 361
va009039 5:fb15c35d1e28 362 void debug_hex(uint8_t* buf, int len)
va009039 5:fb15c35d1e28 363 {
va009039 5:fb15c35d1e28 364 for(int i = 0; i < len; i++) {
va009039 5:fb15c35d1e28 365 if ((i%16) == 0) {
va009039 5:fb15c35d1e28 366 debug("%p", buf+i);
samux 1:fb4494783863 367 }
va009039 5:fb15c35d1e28 368 debug(" %02x", buf[i]);
va009039 5:fb15c35d1e28 369 if ((i%16) == 15) {
va009039 5:fb15c35d1e28 370 debug("\n");
va009039 5:fb15c35d1e28 371 }
samux 1:fb4494783863 372 }
va009039 5:fb15c35d1e28 373 debug("\n");
va009039 5:fb15c35d1e28 374 }