Socket APIs
wizchip_conf.h
Go to the documentation of this file.
1 //*****************************************************************************
2 //
39 //
40 //*****************************************************************************
41 
50 #ifndef _WIZCHIP_CONF_H_
51 #define _WIZCHIP_CONF_H_
52 
53 #include <stdint.h>
59 #define _WIZCHIP_ 5500 // 5100, 5200, 5500
60 
61 #define _WIZCHIP_IO_MODE_NONE_ 0x0000
62 #define _WIZCHIP_IO_MODE_BUS_ 0x0100
63 #define _WIZCHIP_IO_MODE_SPI_ 0x0200
64 //#define _WIZCHIP_IO_MODE_IIC_ 0x0400
65 //#define _WIZCHIP_IO_MODE_SDIO_ 0x0800
66 // Add to
67 //
68 
69 #define _WIZCHIP_IO_MODE_BUS_DIR_ (_WIZCHIP_IO_MODE_BUS_ + 1)
70 #define _WIZCHIP_IO_MODE_BUS_INDIR_ (_WIZCHIP_IO_MODE_BUS_ + 2)
72 #define _WIZCHIP_IO_MODE_SPI_VDM_ (_WIZCHIP_IO_MODE_SPI_ + 1)
73 #define _WIZCHIP_IO_MODE_SPI_FDM_ (_WIZCHIP_IO_MODE_SPI_ + 2)
76 #if (_WIZCHIP_ == 5100)
77  #define _WIZCHIP_ID_ "W5100\0"
78 
83 // #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_BUS_DIR_
84 // #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_BUS_INDIR_
85  #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_SPI_
86 
87 #elif (_WIZCHIP_ == 5200)
88  #define _WIZCHIP_ID_ "W5200\0"
89 
93 // #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_BUS_INDIR_
94  #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_SPI_
95  #include "W5200/w5200.h"
96 #elif (_WIZCHIP_ == 5500)
97  #define _WIZCHIP_ID_ "W5500\0"
98 
112  //#define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_SPI_FDM_
113  #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_SPI_VDM_
114  #include "W5500/w5500.h"
115 #else
116  #error "Unknown defined _WIZCHIP_. You should define one of 5100, 5200, and 5500 !!!"
117 #endif
118 
119 #ifndef _WIZCHIP_IO_MODE_
120  #error "Undefined _WIZCHIP_IO_MODE_. You should define it !!!"
121 #endif
122 
129 #define _WIZCHIP_IO_BASE_ 0x00000000 //
130 
131 #if _WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS
132  #ifndef _WIZCHIP_IO_BASE_
133  #error "You should be define _WIZCHIP_IO_BASE to fit your system memory map."
134  #endif
135 #endif
136 
137 #if _WIZCHIP_ > 5100
138  #define _WIZCHIP_SOCK_NUM_ 8
139 #else
140  #define _WIZCHIP_SOCK_NUM_ 4
141 #endif
142 
143 
144 /********************************************************
145 * WIZCHIP BASIC IF functions for SPI, SDIO, I2C , ETC.
146 *********************************************************/
151 typedef struct __WIZCHIP
152 {
153  uint16_t if_mode;
154  uint8_t id[6];
155 
158  struct _CRIS
159  {
160  void (*_enter) (void);
161  void (*_exit) (void);
162  }CRIS;
166  struct _CS
167  {
168  void (*_select) (void);
169  void (*_deselect)(void);
170  }CS;
174  union _IF
175  {
179  struct
180  {
181  uint8_t (*_read_byte) (uint32_t AddrSel);
182  void (*_write_byte) (uint32_t AddrSel, uint8_t wb);
183  }BUS;
187  struct
188  {
189  uint8_t (*_read_byte) (void);
190  void (*_write_byte) (uint8_t wb);
191  }SPI;
192  // To be added
193  //
194  }IF;
195 }_WIZCHIP;
196 
197 extern _WIZCHIP WIZCHIP;
198 
203 typedef enum
204 {
214 
215 #if _WIZCHIP_ == 5500
221 #endif
225 
230 typedef enum
231 {
239 
246 typedef enum
247 {
248 #if _WIZCHIP_ > 5200
249  IK_WOL = (1 << 4),
250 #endif
251 
252  IK_PPPOE_TERMINATED = (1 << 5),
253 
254 #if _WIZCHIP_ != 5200
255  IK_DEST_UNREACH = (1 << 6),
256 #endif
257 
258  IK_IP_CONFLICT = (1 << 7),
259 
260  IK_SOCK_0 = (1 << 8),
261  IK_SOCK_1 = (1 << 9),
262  IK_SOCK_2 = (1 << 10),
263  IK_SOCK_3 = (1 << 11),
264 #if _WIZCHIP_ > 5100
265  IK_SOCK_4 = (1 << 12),
266  IK_SOCK_5 = (1 << 13),
267  IK_SOCK_6 = (1 << 14),
268  IK_SOCK_7 = (1 << 15),
269 #endif
270 
271 #if _WIZCHIP_ > 5100
272  IK_SOCK_ALL = (0xFF << 8)
273 #else
274  IK_SOCK_ALL = (0x0F << 8)
275 #endif
276 }intr_kind;
277 
278 #define PHY_CONFBY_HW 0
279 #define PHY_CONFBY_SW 1
280 #define PHY_MODE_MANUAL 0
281 #define PHY_MODE_AUTONEGO 1
282 #define PHY_SPEED_10 0
283 #define PHY_SPEED_100 1
284 #define PHY_DUPLEX_HALF 0
285 #define PHY_DUPLEX_FULL 1
286 #define PHY_LINK_OFF 0
287 #define PHY_LINK_ON 1
288 #define PHY_POWER_NORM 0
289 #define PHY_POWER_DOWN 1
290 
291 
292 #if _WIZCHIP_ == 5500
293 
299 typedef struct wiz_PhyConf_t
300 {
301  uint8_t by;
302  uint8_t mode;
303  uint8_t speed;
304  uint8_t duplex;
305  //uint8_t power; ///< set by @ref PHY_POWER_NORM or @ref PHY_POWER_DOWN
306  //uint8_t link; ///< Valid only in CW_GET_PHYSTATUS. set by @ref PHY_LINK_ON or PHY_DUPLEX_OFF
307  }wiz_PhyConf;
308 #endif
309 
314 typedef enum
315 {
318 }dhcp_mode;
319 
324 typedef struct wiz_NetInfo_t
325 {
326  uint8_t mac[6];
327  uint8_t ip[4];
328  uint8_t sn[4];
329  uint8_t gw[4];
330  uint8_t dns[4];
332 }wiz_NetInfo;
333 
338 typedef enum
339 {
340 #if _WIZCHIP_ == 5500
341  NM_FORCEARP = (1<<1),
342 #endif
343  NM_WAKEONLAN = (1<<5),
344  NM_PINGBLOCK = (1<<4),
345  NM_PPPOE = (1<<3),
346 }netmode_type;
347 
352 typedef struct wiz_NetTimeout_t
353 {
354  uint8_t retry_cnt;
355  uint16_t time_100us;
357 
366 void reg_wizchip_cris_cbfunc(void(*cris_en)(void), void(*cris_ex)(void));
367 
368 
376 void reg_wizchip_cs_cbfunc(void(*cs_sel)(void), void(*cs_desel)(void));
377 
386 void reg_wizchip_bus_cbfunc(uint8_t (*bus_rb)(uint32_t addr), void (*bus_wb)(uint32_t addr, uint8_t wb));
387 
396 void reg_wizchip_spi_cbfunc(uint8_t (*spi_rb)(void), void (*spi_wb)(uint8_t wb));
397 
408 int8_t ctlwizchip(ctlwizchip_type cwtype, void* arg);
409 
419 int8_t ctlnetwork(ctlnetwork_type cntype, void* arg);
420 
421 
422 /*
423  * The following functions are implemented for internal use.
424  * but You can call these functions for code size reduction instead of ctlwizchip() and ctlnetwork().
425  */
426 
431 void wizchip_sw_reset(void);
432 
441 int8_t wizchip_init(uint8_t* txsize, uint8_t* rxsize);
442 
449 
456 
463 
470 
471 #if _WIZCHIP_ > 5100
472  int8_t wizphy_getphylink(void);
473  int8_t wizphy_getphypmode(void);
474 #endif
475 
476 #if _WIZCHIP_ == 5500
477  void wizphy_reset(void);
478 
483  void wizphy_setphyconf(wiz_PhyConf* phyconf);
489  void wizphy_getphyconf(wiz_PhyConf* phyconf);
495  void wizphy_getphystat(wiz_PhyConf* phyconf);
501  int8_t wizphy_setphypmode(uint8_t pmode);
502 #endif
503 
509 void wizchip_setnetinfo(wiz_NetInfo* pnetinfo);
510 
516 void wizchip_getnetinfo(wiz_NetInfo* pnetinfo);
517 
523 int8_t wizchip_setnetmode(netmode_type netmode);
524 
531 
538 void wizchip_settimeout(wiz_NetTimeout* nettime);
539 
546 void wizchip_gettimeout(wiz_NetTimeout* nettime);
547 
548 #endif // _WIZCHIP_CONF_H_