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.
Fork of WIZnetInterface by
arch/ext/W5500.h@0:6f28332c466f, 2015-06-15 (annotated)
- Committer:
- Soohwan Kim
- Date:
- Mon Jun 15 11:18:37 2015 +0900
- Revision:
- 0:6f28332c466f
- Child:
- 3:f8c6efc8bf83
initial version
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 | |
| Soohwan Kim |
0:6f28332c466f | 20 | #pragma once |
| Soohwan Kim |
0:6f28332c466f | 21 | |
| Soohwan Kim |
0:6f28332c466f | 22 | #include "mbed.h" |
| Soohwan Kim |
0:6f28332c466f | 23 | #include "mbed_debug.h" |
| Soohwan Kim |
0:6f28332c466f | 24 | |
| Soohwan Kim |
0:6f28332c466f | 25 | #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 | 26 | |
| Soohwan Kim |
0:6f28332c466f | 27 | #define DEFAULT_WAIT_RESP_TIMEOUT 500 |
| Soohwan Kim |
0:6f28332c466f | 28 | |
| Soohwan Kim |
0:6f28332c466f | 29 | enum Protocol { |
| Soohwan Kim |
0:6f28332c466f | 30 | CLOSED = 0, |
| Soohwan Kim |
0:6f28332c466f | 31 | TCP = 1, |
| Soohwan Kim |
0:6f28332c466f | 32 | UDP = 2, |
| Soohwan Kim |
0:6f28332c466f | 33 | }; |
| Soohwan Kim |
0:6f28332c466f | 34 | |
| Soohwan Kim |
0:6f28332c466f | 35 | enum Command { |
| Soohwan Kim |
0:6f28332c466f | 36 | OPEN = 0x01, |
| Soohwan Kim |
0:6f28332c466f | 37 | LISTEN = 0x02, |
| Soohwan Kim |
0:6f28332c466f | 38 | CONNECT = 0x04, |
| Soohwan Kim |
0:6f28332c466f | 39 | DISCON = 0x08, |
| Soohwan Kim |
0:6f28332c466f | 40 | CLOSE = 0x10, |
| Soohwan Kim |
0:6f28332c466f | 41 | SEND = 0x20, |
| Soohwan Kim |
0:6f28332c466f | 42 | SEND_MAC = 0x21, |
| Soohwan Kim |
0:6f28332c466f | 43 | SEND_KEEP = 0x22, |
| Soohwan Kim |
0:6f28332c466f | 44 | RECV = 0x40, |
| Soohwan Kim |
0:6f28332c466f | 45 | |
| Soohwan Kim |
0:6f28332c466f | 46 | }; |
| Soohwan Kim |
0:6f28332c466f | 47 | |
| Soohwan Kim |
0:6f28332c466f | 48 | enum Interrupt { |
| Soohwan Kim |
0:6f28332c466f | 49 | INT_CON = 0x01, |
| Soohwan Kim |
0:6f28332c466f | 50 | INT_DISCON = 0x02, |
| Soohwan Kim |
0:6f28332c466f | 51 | INT_RECV = 0x04, |
| Soohwan Kim |
0:6f28332c466f | 52 | INT_TIMEOUT = 0x08, |
| Soohwan Kim |
0:6f28332c466f | 53 | INT_SEND_OK = 0x10, |
| Soohwan Kim |
0:6f28332c466f | 54 | }; |
| Soohwan Kim |
0:6f28332c466f | 55 | |
| Soohwan Kim |
0:6f28332c466f | 56 | enum Status { |
| Soohwan Kim |
0:6f28332c466f | 57 | SOCK_CLOSED = 0x00, |
| Soohwan Kim |
0:6f28332c466f | 58 | SOCK_INIT = 0x13, |
| Soohwan Kim |
0:6f28332c466f | 59 | SOCK_LISTEN = 0x14, |
| Soohwan Kim |
0:6f28332c466f | 60 | SOCK_SYNSENT = 0x15, |
| Soohwan Kim |
0:6f28332c466f | 61 | SOCK_ESTABLISHED = 0x17, |
| Soohwan Kim |
0:6f28332c466f | 62 | SOCK_CLOSE_WAIT = 0x1c, |
| Soohwan Kim |
0:6f28332c466f | 63 | SOCK_UDP = 0x22, |
| Soohwan Kim |
0:6f28332c466f | 64 | }; |
| Soohwan Kim |
0:6f28332c466f | 65 | |
| Soohwan Kim |
0:6f28332c466f | 66 | #define MAX_SOCK_NUM 8 |
| Soohwan Kim |
0:6f28332c466f | 67 | |
| Soohwan Kim |
0:6f28332c466f | 68 | #define MR 0x0000 |
| Soohwan Kim |
0:6f28332c466f | 69 | #define GAR 0x0001 |
| Soohwan Kim |
0:6f28332c466f | 70 | #define SUBR 0x0005 |
| Soohwan Kim |
0:6f28332c466f | 71 | #define SHAR 0x0009 |
| Soohwan Kim |
0:6f28332c466f | 72 | #define SIPR 0x000f |
| Soohwan Kim |
0:6f28332c466f | 73 | #define PHYSTATUS 0x0035 |
| Soohwan Kim |
0:6f28332c466f | 74 | |
| Soohwan Kim |
0:6f28332c466f | 75 | // W5500 socket register |
| Soohwan Kim |
0:6f28332c466f | 76 | #define Sn_MR 0x0000 |
| Soohwan Kim |
0:6f28332c466f | 77 | #define Sn_CR 0x0001 |
| Soohwan Kim |
0:6f28332c466f | 78 | #define Sn_IR 0x0002 |
| Soohwan Kim |
0:6f28332c466f | 79 | #define Sn_SR 0x0003 |
| Soohwan Kim |
0:6f28332c466f | 80 | #define Sn_PORT 0x0004 |
| Soohwan Kim |
0:6f28332c466f | 81 | #define Sn_DIPR 0x000c |
| Soohwan Kim |
0:6f28332c466f | 82 | #define Sn_DPORT 0x0010 |
| Soohwan Kim |
0:6f28332c466f | 83 | #define Sn_RXBUF_SIZE 0x001e |
| Soohwan Kim |
0:6f28332c466f | 84 | #define Sn_TXBUF_SIZE 0x001f |
| Soohwan Kim |
0:6f28332c466f | 85 | #define Sn_TX_FSR 0x0020 |
| Soohwan Kim |
0:6f28332c466f | 86 | #define Sn_TX_WR 0x0024 |
| Soohwan Kim |
0:6f28332c466f | 87 | #define Sn_RX_RSR 0x0026 |
| Soohwan Kim |
0:6f28332c466f | 88 | #define Sn_RX_RD 0x0028 |
| Soohwan Kim |
0:6f28332c466f | 89 | |
| Soohwan Kim |
0:6f28332c466f | 90 | class WIZnet_Chip { |
| Soohwan Kim |
0:6f28332c466f | 91 | public: |
| Soohwan Kim |
0:6f28332c466f | 92 | /* |
| Soohwan Kim |
0:6f28332c466f | 93 | * Constructor |
| Soohwan Kim |
0:6f28332c466f | 94 | * |
| Soohwan Kim |
0:6f28332c466f | 95 | * @param spi spi class |
| Soohwan Kim |
0:6f28332c466f | 96 | * @param cs cs of the W5500 |
| Soohwan Kim |
0:6f28332c466f | 97 | * @param reset reset pin of the W5500 |
| Soohwan Kim |
0:6f28332c466f | 98 | */ |
| Soohwan Kim |
0:6f28332c466f | 99 | WIZnet_Chip(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset); |
| Soohwan Kim |
0:6f28332c466f | 100 | WIZnet_Chip(SPI* spi, PinName cs, PinName reset); |
| Soohwan Kim |
0:6f28332c466f | 101 | |
| Soohwan Kim |
0:6f28332c466f | 102 | /* |
| Soohwan Kim |
0:6f28332c466f | 103 | * Connect the W5500 to the ssid contained in the constructor. |
| Soohwan Kim |
0:6f28332c466f | 104 | * |
| Soohwan Kim |
0:6f28332c466f | 105 | * @return true if connected, false otherwise |
| Soohwan Kim |
0:6f28332c466f | 106 | */ |
| Soohwan Kim |
0:6f28332c466f | 107 | bool setip(); |
| Soohwan Kim |
0:6f28332c466f | 108 | |
| Soohwan Kim |
0:6f28332c466f | 109 | /* |
| Soohwan Kim |
0:6f28332c466f | 110 | * Disconnect the connection |
| Soohwan Kim |
0:6f28332c466f | 111 | * |
| Soohwan Kim |
0:6f28332c466f | 112 | * @ returns true |
| Soohwan Kim |
0:6f28332c466f | 113 | */ |
| Soohwan Kim |
0:6f28332c466f | 114 | bool disconnect(); |
| Soohwan Kim |
0:6f28332c466f | 115 | |
| Soohwan Kim |
0:6f28332c466f | 116 | /* |
| Soohwan Kim |
0:6f28332c466f | 117 | * Open a tcp connection with the specified host on the specified port |
| Soohwan Kim |
0:6f28332c466f | 118 | * |
| Soohwan Kim |
0:6f28332c466f | 119 | * @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 | 120 | * @param port port |
| Soohwan Kim |
0:6f28332c466f | 121 | * @ returns true if successful |
| Soohwan Kim |
0:6f28332c466f | 122 | */ |
| Soohwan Kim |
0:6f28332c466f | 123 | bool connect(int socket, const char * host, int port, int timeout_ms = 10*1000); |
| Soohwan Kim |
0:6f28332c466f | 124 | |
| Soohwan Kim |
0:6f28332c466f | 125 | /* |
| Soohwan Kim |
0:6f28332c466f | 126 | * Set the protocol (UDP or TCP) |
| Soohwan Kim |
0:6f28332c466f | 127 | * |
| Soohwan Kim |
0:6f28332c466f | 128 | * @param p protocol |
| Soohwan Kim |
0:6f28332c466f | 129 | * @ returns true if successful |
| Soohwan Kim |
0:6f28332c466f | 130 | */ |
| Soohwan Kim |
0:6f28332c466f | 131 | bool setProtocol(int socket, Protocol p); |
| Soohwan Kim |
0:6f28332c466f | 132 | |
| Soohwan Kim |
0:6f28332c466f | 133 | /* |
| Soohwan Kim |
0:6f28332c466f | 134 | * Reset the W5500 |
| Soohwan Kim |
0:6f28332c466f | 135 | */ |
| Soohwan Kim |
0:6f28332c466f | 136 | void reset(); |
| Soohwan Kim |
0:6f28332c466f | 137 | |
| Soohwan Kim |
0:6f28332c466f | 138 | int wait_readable(int socket, int wait_time_ms, int req_size = 0); |
| Soohwan Kim |
0:6f28332c466f | 139 | |
| Soohwan Kim |
0:6f28332c466f | 140 | int wait_writeable(int socket, int wait_time_ms, int req_size = 0); |
| Soohwan Kim |
0:6f28332c466f | 141 | |
| Soohwan Kim |
0:6f28332c466f | 142 | /* |
| Soohwan Kim |
0:6f28332c466f | 143 | * Check if a tcp link is active |
| Soohwan Kim |
0:6f28332c466f | 144 | * |
| Soohwan Kim |
0:6f28332c466f | 145 | * @returns true if successful |
| Soohwan Kim |
0:6f28332c466f | 146 | */ |
| Soohwan Kim |
0:6f28332c466f | 147 | bool is_connected(int socket); |
| Soohwan Kim |
0:6f28332c466f | 148 | |
| Soohwan Kim |
0:6f28332c466f | 149 | /* |
| Soohwan Kim |
0:6f28332c466f | 150 | * Close a tcp connection |
| Soohwan Kim |
0:6f28332c466f | 151 | * |
| Soohwan Kim |
0:6f28332c466f | 152 | * @ returns true if successful |
| Soohwan Kim |
0:6f28332c466f | 153 | */ |
| Soohwan Kim |
0:6f28332c466f | 154 | bool close(int socket); |
| Soohwan Kim |
0:6f28332c466f | 155 | |
| Soohwan Kim |
0:6f28332c466f | 156 | /* |
| Soohwan Kim |
0:6f28332c466f | 157 | * @param str string to be sent |
| Soohwan Kim |
0:6f28332c466f | 158 | * @param len string length |
| Soohwan Kim |
0:6f28332c466f | 159 | */ |
| Soohwan Kim |
0:6f28332c466f | 160 | int send(int socket, const char * str, int len); |
| Soohwan Kim |
0:6f28332c466f | 161 | |
| Soohwan Kim |
0:6f28332c466f | 162 | int recv(int socket, char* buf, int len); |
| Soohwan Kim |
0:6f28332c466f | 163 | |
| Soohwan Kim |
0:6f28332c466f | 164 | /* |
| Soohwan Kim |
0:6f28332c466f | 165 | * Return true if the module is using dhcp |
| Soohwan Kim |
0:6f28332c466f | 166 | * |
| Soohwan Kim |
0:6f28332c466f | 167 | * @returns true if the module is using dhcp |
| Soohwan Kim |
0:6f28332c466f | 168 | */ |
| Soohwan Kim |
0:6f28332c466f | 169 | bool isDHCP() { |
| Soohwan Kim |
0:6f28332c466f | 170 | return dhcp; |
| Soohwan Kim |
0:6f28332c466f | 171 | } |
| Soohwan Kim |
0:6f28332c466f | 172 | |
| Soohwan Kim |
0:6f28332c466f | 173 | bool gethostbyname(const char* host, uint32_t* ip); |
| Soohwan Kim |
0:6f28332c466f | 174 | |
| Soohwan Kim |
0:6f28332c466f | 175 | static WIZnet_Chip * getInstance() { |
| Soohwan Kim |
0:6f28332c466f | 176 | return inst; |
| Soohwan Kim |
0:6f28332c466f | 177 | }; |
| Soohwan Kim |
0:6f28332c466f | 178 | |
| Soohwan Kim |
0:6f28332c466f | 179 | int new_socket(); |
| Soohwan Kim |
0:6f28332c466f | 180 | uint16_t new_port(); |
| Soohwan Kim |
0:6f28332c466f | 181 | void scmd(int socket, Command cmd); |
| Soohwan Kim |
0:6f28332c466f | 182 | |
| Soohwan Kim |
0:6f28332c466f | 183 | template<typename T> |
| Soohwan Kim |
0:6f28332c466f | 184 | void sreg(int socket, uint16_t addr, T data) { |
| Soohwan Kim |
0:6f28332c466f | 185 | reg_wr<T>(addr, (0x0C + (socket << 5)), data); |
| Soohwan Kim |
0:6f28332c466f | 186 | } |
| Soohwan Kim |
0:6f28332c466f | 187 | |
| Soohwan Kim |
0:6f28332c466f | 188 | template<typename T> |
| Soohwan Kim |
0:6f28332c466f | 189 | T sreg(int socket, uint16_t addr) { |
| Soohwan Kim |
0:6f28332c466f | 190 | return reg_rd<T>(addr, (0x08 + (socket << 5))); |
| Soohwan Kim |
0:6f28332c466f | 191 | } |
| Soohwan Kim |
0:6f28332c466f | 192 | |
| Soohwan Kim |
0:6f28332c466f | 193 | template<typename T> |
| Soohwan Kim |
0:6f28332c466f | 194 | void reg_wr(uint16_t addr, T data) { |
| Soohwan Kim |
0:6f28332c466f | 195 | return reg_wr(addr, 0x04, data); |
| Soohwan Kim |
0:6f28332c466f | 196 | } |
| Soohwan Kim |
0:6f28332c466f | 197 | |
| Soohwan Kim |
0:6f28332c466f | 198 | template<typename T> |
| Soohwan Kim |
0:6f28332c466f | 199 | void reg_wr(uint16_t addr, uint8_t cb, T data) { |
| Soohwan Kim |
0:6f28332c466f | 200 | uint8_t buf[sizeof(T)]; |
| Soohwan Kim |
0:6f28332c466f | 201 | *reinterpret_cast<T*>(buf) = data; |
| Soohwan Kim |
0:6f28332c466f | 202 | for(int i = 0; i < sizeof(buf)/2; i++) { // Little Endian to Big Endian |
| Soohwan Kim |
0:6f28332c466f | 203 | uint8_t t = buf[i]; |
| Soohwan Kim |
0:6f28332c466f | 204 | buf[i] = buf[sizeof(buf)-1-i]; |
| Soohwan Kim |
0:6f28332c466f | 205 | buf[sizeof(buf)-1-i] = t; |
| Soohwan Kim |
0:6f28332c466f | 206 | } |
| Soohwan Kim |
0:6f28332c466f | 207 | spi_write(addr, cb, buf, sizeof(buf)); |
| Soohwan Kim |
0:6f28332c466f | 208 | } |
| Soohwan Kim |
0:6f28332c466f | 209 | |
| Soohwan Kim |
0:6f28332c466f | 210 | template<typename T> |
| Soohwan Kim |
0:6f28332c466f | 211 | T reg_rd(uint16_t addr) { |
| Soohwan Kim |
0:6f28332c466f | 212 | return reg_rd<T>(addr, 0x00); |
| Soohwan Kim |
0:6f28332c466f | 213 | } |
| Soohwan Kim |
0:6f28332c466f | 214 | |
| Soohwan Kim |
0:6f28332c466f | 215 | template<typename T> |
| Soohwan Kim |
0:6f28332c466f | 216 | T reg_rd(uint16_t addr, uint8_t cb) { |
| Soohwan Kim |
0:6f28332c466f | 217 | uint8_t buf[sizeof(T)]; |
| Soohwan Kim |
0:6f28332c466f | 218 | spi_read(addr, cb, buf, sizeof(buf)); |
| Soohwan Kim |
0:6f28332c466f | 219 | for(int i = 0; i < sizeof(buf)/2; i++) { // Big Endian to Little Endian |
| Soohwan Kim |
0:6f28332c466f | 220 | uint8_t t = buf[i]; |
| Soohwan Kim |
0:6f28332c466f | 221 | buf[i] = buf[sizeof(buf)-1-i]; |
| Soohwan Kim |
0:6f28332c466f | 222 | buf[sizeof(buf)-1-i] = t; |
| Soohwan Kim |
0:6f28332c466f | 223 | } |
| Soohwan Kim |
0:6f28332c466f | 224 | return *reinterpret_cast<T*>(buf); |
| Soohwan Kim |
0:6f28332c466f | 225 | } |
| Soohwan Kim |
0:6f28332c466f | 226 | |
| Soohwan Kim |
0:6f28332c466f | 227 | void reg_rd_mac(uint16_t addr, uint8_t* data) { |
| Soohwan Kim |
0:6f28332c466f | 228 | spi_read(addr, 0x00, data, 6); |
| Soohwan Kim |
0:6f28332c466f | 229 | } |
| Soohwan Kim |
0:6f28332c466f | 230 | |
| Soohwan Kim |
0:6f28332c466f | 231 | void reg_wr_ip(uint16_t addr, uint8_t cb, const char* ip) { |
| Soohwan Kim |
0:6f28332c466f | 232 | uint8_t buf[4]; |
| Soohwan Kim |
0:6f28332c466f | 233 | char* p = (char*)ip; |
| Soohwan Kim |
0:6f28332c466f | 234 | for(int i = 0; i < 4; i++) { |
| Soohwan Kim |
0:6f28332c466f | 235 | buf[i] = atoi(p); |
| Soohwan Kim |
0:6f28332c466f | 236 | p = strchr(p, '.'); |
| Soohwan Kim |
0:6f28332c466f | 237 | if (p == NULL) { |
| Soohwan Kim |
0:6f28332c466f | 238 | break; |
| Soohwan Kim |
0:6f28332c466f | 239 | } |
| Soohwan Kim |
0:6f28332c466f | 240 | p++; |
| Soohwan Kim |
0:6f28332c466f | 241 | } |
| Soohwan Kim |
0:6f28332c466f | 242 | spi_write(addr, cb, buf, sizeof(buf)); |
| Soohwan Kim |
0:6f28332c466f | 243 | } |
| Soohwan Kim |
0:6f28332c466f | 244 | |
| Soohwan Kim |
0:6f28332c466f | 245 | void sreg_ip(int socket, uint16_t addr, const char* ip) { |
| Soohwan Kim |
0:6f28332c466f | 246 | reg_wr_ip(addr, (0x0C + (socket << 5)), ip); |
| Soohwan Kim |
0:6f28332c466f | 247 | } |
| Soohwan Kim |
0:6f28332c466f | 248 | |
| Soohwan Kim |
0:6f28332c466f | 249 | protected: |
| Soohwan Kim |
0:6f28332c466f | 250 | uint8_t mac[6]; |
| Soohwan Kim |
0:6f28332c466f | 251 | uint32_t ip; |
| Soohwan Kim |
0:6f28332c466f | 252 | uint32_t netmask; |
| Soohwan Kim |
0:6f28332c466f | 253 | uint32_t gateway; |
| Soohwan Kim |
0:6f28332c466f | 254 | uint32_t dnsaddr; |
| Soohwan Kim |
0:6f28332c466f | 255 | bool dhcp; |
| Soohwan Kim |
0:6f28332c466f | 256 | |
| Soohwan Kim |
0:6f28332c466f | 257 | static WIZnet_Chip* inst; |
| Soohwan Kim |
0:6f28332c466f | 258 | |
| Soohwan Kim |
0:6f28332c466f | 259 | void reg_wr_mac(uint16_t addr, uint8_t* data) { |
| Soohwan Kim |
0:6f28332c466f | 260 | spi_write(addr, 0x04, data, 6); |
| Soohwan Kim |
0:6f28332c466f | 261 | } |
| Soohwan Kim |
0:6f28332c466f | 262 | |
| Soohwan Kim |
0:6f28332c466f | 263 | void spi_write(uint16_t addr, uint8_t cb, const uint8_t *buf, uint16_t len); |
| Soohwan Kim |
0:6f28332c466f | 264 | void spi_read(uint16_t addr, uint8_t cb, uint8_t *buf, uint16_t len); |
| Soohwan Kim |
0:6f28332c466f | 265 | SPI* spi; |
| Soohwan Kim |
0:6f28332c466f | 266 | DigitalOut cs; |
| Soohwan Kim |
0:6f28332c466f | 267 | DigitalOut reset_pin; |
| Soohwan Kim |
0:6f28332c466f | 268 | }; |
| Soohwan Kim |
0:6f28332c466f | 269 | |
| Soohwan Kim |
0:6f28332c466f | 270 | extern uint32_t str_to_ip(const char* str); |
| Soohwan Kim |
0:6f28332c466f | 271 | extern void printfBytes(char* str, uint8_t* buf, int len); |
| Soohwan Kim |
0:6f28332c466f | 272 | extern void printHex(uint8_t* buf, int len); |
| Soohwan Kim |
0:6f28332c466f | 273 | extern void debug_hex(uint8_t* buf, int len); |
