This is Library using WIZnet Hardware TCP/IP chip, W5500 and WIZnet TCP/IP Offload Engine, W7500.

Dependents:   HTTP_SDcard_file_server_WIZwiki-W7500 SSD1306_smart_watch TCPEchoServer-WIZwiki-W7500 httpServer-WIZwiki-W7500 ... more

Fork of WIZnetInterface by Soohwan Kim

This is WIZnet Ethernet Interface using Hardware TCP/IP chip, W5500 and TCP/IP Offload Engine, W7500.

[Users » embeddist » Code » WIZnetInterface](https://developer.mbed.org/users/embeddist/code/WIZnetInterface/) -> WIZnetInterface Lib will be released on [Team WIZnet](https://developer.mbed.org/teams/WIZnet/)

https://developer.mbed.org/media/cache/platforms/WIZwiki_W7500_enabled.JPG.250x250_q85.jpg

https://developer.mbed.org/media/cache/platforms/WIZwiki_W7500P_enabled2.JPG.250x250_q85.jpg

https://developer.mbed.org/media/cache/platforms/WIZwiki_W7500ECO_enabled2.JPG.250x250_q85.jpg

https://developer.mbed.org/media/cache/components/components/fetch.phpmediaoshw5500_ethernet_shieldw5500_main_picture2.png.200x200_q85.jpg

This library is an Ethernet Interface library port-based on [EthernetInterface](https://developer.mbed.org/users/mbed_official/code/EthernetInterface/docs/tip/).

For more detail, visit http://embeddist.blogspot.kr/2015/06/wiznetinterface-for-armmbed.html

Revision:
8:4c02de1dbf3a
Parent:
4:4930f81bbe98
Child:
10:0d17643de5fd
--- a/arch/ext/W5500.cpp	Mon Jun 15 23:43:56 2015 +0000
+++ b/arch/ext/W5500.cpp	Tue Jun 16 11:11:11 2015 +0900
@@ -16,7 +16,7 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 #include "eth_arch.h"
-#ifdef USE_W5500
+#if not defined(TARGET_WIZwiki_W7500)
 
 #include "mbed.h"
 #include "mbed_debug.h"
@@ -82,15 +82,6 @@
     return true;
 }
 
-bool WIZnet_Chip::linkstatus()
-{
-    if ( (reg_rd<uint8_t>(PHYCFGR) & 0x01) != 0x01 )
-        return false;
-
-    return true;
-}
-
-
 bool WIZnet_Chip::setProtocol(int socket, Protocol p)
 {
     if (socket < 0) {
@@ -336,6 +327,40 @@
     return port;
 }
 
+bool WIZnet_Chip::link(int wait_time_ms)
+{
+	Timer t;
+	t.reset();
+	t.start();
+	while(1) {
+		int is_link = ethernet_link();
+		printf("is_link:%d\r\n", is_link);
+		if (is_link) {
+			return true;
+		}
+		if (wait_time_ms != (-1) && t.read_ms() > wait_time_ms) {
+			break;
+		}
+	}
+	return 0;
+}
+
+void WIZnet_Chip::set_link(PHYMode phymode)
+{
+	int speed = -1;
+	int duplex = 0;
+
+	switch(phymode) {
+		case AutoNegotiate : speed = -1; duplex = 0; break;
+		case HalfDuplex10  : speed = 0;  duplex = 0; break;
+		case FullDuplex10  : speed = 0;  duplex = 1; break;
+		case HalfDuplex100 : speed = 1;  duplex = 0; break;
+		case FullDuplex100 : speed = 1;  duplex = 1; break;
+	}
+
+	ethernet_set_link(speed, duplex);
+}
+
 void WIZnet_Chip::scmd(int socket, Command cmd)
 {
     sreg<uint8_t>(socket, Sn_CR, cmd);
@@ -446,5 +471,22 @@
     debug("\n");
 }
 
+int ethernet_link(void) {
+    return (reg_rd<uint8_t>(PHYCFGR) & 0x01);
+}
+
+void ethernet_set_link(int speed, int duplex) {
+	uint32_t val=0;
+	if((speed < 0) || (speed > 1)) {
+		val = (PHYCFGR_OPMDC_ALL)<<3; 
+	} else {
+		val = (((speed&0x01)<<1)+ (duplex&0x01))<<3; 
+	}
+    reg_wr<uint32_t>(PHYCFGR, PHYCFGR_RST&(PHYCFGR_OPMD|val));
+    wait(0.2);
+	reg_wr<uint32_t>(PHYCFGR, (~PHYCFGR_RST)|(PHYCFGR_OPMD|val));
+    wait(0.2);
+}
+
 #endif