DHCP Client for WIZ820io(W5200)

Dependencies:   EthernetNetIf mbed

Committer:
va009039
Date:
Tue Apr 10 03:38:22 2012 +0000
Revision:
0:db4242c89949

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 0:db4242c89949 1 // MyEthernetNetIf.h 2012/4/10
va009039 0:db4242c89949 2 // EthernetNetIf for WIZ820io(W5200)
va009039 0:db4242c89949 3 #include "mbed.h"
va009039 0:db4242c89949 4 #include "MyEthernetNetIf.h"
va009039 0:db4242c89949 5 #include "DHCPClient.h"
va009039 0:db4242c89949 6 #include "w5100.h"
va009039 0:db4242c89949 7
va009039 0:db4242c89949 8 extern W5100Class W5100; // w5100.cpp
va009039 0:db4242c89949 9
va009039 0:db4242c89949 10 bool wait_linkup(int timeout = 3000) {
va009039 0:db4242c89949 11 Timer link_t;
va009039 0:db4242c89949 12 link_t.start();
va009039 0:db4242c89949 13 while(link_t.read_ms() < timeout) {
va009039 0:db4242c89949 14 if (0x20 & W5100.readPHYSTATUS()) {
va009039 0:db4242c89949 15 return true;
va009039 0:db4242c89949 16 }
va009039 0:db4242c89949 17 wait_ms(50);
va009039 0:db4242c89949 18 }
va009039 0:db4242c89949 19 return false;
va009039 0:db4242c89949 20 }
va009039 0:db4242c89949 21
va009039 0:db4242c89949 22 void MyEthernetNetIf::hardware_setup(){
va009039 0:db4242c89949 23 W5100.hardware_reset();
va009039 0:db4242c89949 24 W5100.init();
va009039 0:db4242c89949 25 wait_linkup();
va009039 0:db4242c89949 26 }
va009039 0:db4242c89949 27
va009039 0:db4242c89949 28 MyEthernetNetIf::MyEthernetNetIf(IpAddr ip, IpAddr netmask, IpAddr gateway, IpAddr dns) {
va009039 0:db4242c89949 29 m_ip = ip;
va009039 0:db4242c89949 30 m_netmask = netmask;
va009039 0:db4242c89949 31 m_gateway = gateway;
va009039 0:db4242c89949 32 m_dns = dns;
va009039 0:db4242c89949 33 m_useDhcp = false;
va009039 0:db4242c89949 34 }
va009039 0:db4242c89949 35
va009039 0:db4242c89949 36 MyEthernetNetIf:: MyEthernetNetIf() {
va009039 0:db4242c89949 37 m_useDhcp = true;
va009039 0:db4242c89949 38 }
va009039 0:db4242c89949 39
va009039 0:db4242c89949 40 EthernetErr MyEthernetNetIf::setup(int timeout_ms)
va009039 0:db4242c89949 41 {
va009039 0:db4242c89949 42 hardware_setup();
va009039 0:db4242c89949 43 uint8_t mac[6] = {0x00,0x00,0x5e,0x00,0x01,0x01};
va009039 0:db4242c89949 44 W5100.setMACAddress(mac);
va009039 0:db4242c89949 45 printf("HW Addr is : %02x:%02x:%02x:%02x:%02x:%02x.\n", mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
va009039 0:db4242c89949 46 uint8_t u[4];
va009039 0:db4242c89949 47 u[0] = m_ip[0];
va009039 0:db4242c89949 48 u[1] = m_ip[1];
va009039 0:db4242c89949 49 u[2] = m_ip[2];
va009039 0:db4242c89949 50 u[3] = m_ip[3];
va009039 0:db4242c89949 51 W5100.setIPAddress(u);
va009039 0:db4242c89949 52 u[0] = m_netmask[0];
va009039 0:db4242c89949 53 u[1] = m_netmask[1];
va009039 0:db4242c89949 54 u[2] = m_netmask[2];
va009039 0:db4242c89949 55 u[3] = m_netmask[3];
va009039 0:db4242c89949 56 W5100.setSubnetMask(u);
va009039 0:db4242c89949 57 u[0] = m_gateway[0];
va009039 0:db4242c89949 58 u[1] = m_gateway[1];
va009039 0:db4242c89949 59 u[2] = m_gateway[2];
va009039 0:db4242c89949 60 u[3] = m_gateway[3];
va009039 0:db4242c89949 61 W5100.setGatewayIp(u);
va009039 0:db4242c89949 62 if (! m_useDhcp) {
va009039 0:db4242c89949 63 return ETH_OK;
va009039 0:db4242c89949 64 }
va009039 0:db4242c89949 65 printf("DHCP Started, waiting for IP...\n");
va009039 0:db4242c89949 66 DHCPClient* dhcp;
va009039 0:db4242c89949 67 EthernetErr err;
va009039 0:db4242c89949 68 dhcp = new DHCPClient;
va009039 0:db4242c89949 69 int r = dhcp->setup(timeout_ms);
va009039 0:db4242c89949 70 if (r == (-1)) {
va009039 0:db4242c89949 71 printf("Timeout.\n");
va009039 0:db4242c89949 72 err = ETH_TIMEOUT;
va009039 0:db4242c89949 73 } else {
va009039 0:db4242c89949 74 W5100.writeSIPR(dhcp->yiaddr);
va009039 0:db4242c89949 75 W5100.writeSUBR(dhcp->netmask);
va009039 0:db4242c89949 76 W5100.writeGAR(dhcp->gateway);
va009039 0:db4242c89949 77 m_ip = IpAddr(dhcp->yiaddr[0],dhcp->yiaddr[1],dhcp->yiaddr[2],dhcp->yiaddr[3]);
va009039 0:db4242c89949 78 m_dns = IpAddr(dhcp->dnsaddr[0],dhcp->dnsaddr[1],dhcp->dnsaddr[2],dhcp->dnsaddr[3]);
va009039 0:db4242c89949 79 printf("Connected, IP: %d.%d.%d.%d\n", dhcp->yiaddr[0], dhcp->yiaddr[1], dhcp->yiaddr[2], dhcp->yiaddr[3]);
va009039 0:db4242c89949 80 err = ETH_OK;
va009039 0:db4242c89949 81 }
va009039 0:db4242c89949 82 delete dhcp;
va009039 0:db4242c89949 83 return err;
va009039 0:db4242c89949 84 }