aboutsummaryrefslogtreecommitdiff
path: root/libraries/Ethernet/Ethernet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/Ethernet/Ethernet.cpp')
-rw-r--r--libraries/Ethernet/Ethernet.cpp85
1 files changed, 85 insertions, 0 deletions
diff --git a/libraries/Ethernet/Ethernet.cpp b/libraries/Ethernet/Ethernet.cpp
new file mode 100644
index 0000000..937f5b4
--- /dev/null
+++ b/libraries/Ethernet/Ethernet.cpp
@@ -0,0 +1,85 @@
+#include "w5100.h"
+#include "Ethernet.h"
+#include "Dhcp.h"
+
+// XXX: don't make assumptions about the value of MAX_SOCK_NUM.
+uint8_t EthernetClass::_state[MAX_SOCK_NUM] = {
+ 0, 0, 0, 0 };
+uint16_t EthernetClass::_server_port[MAX_SOCK_NUM] = {
+ 0, 0, 0, 0 };
+
+int EthernetClass::begin(uint8_t *mac_address)
+{
+ DhcpClass dhcp;
+
+ // Initialise the basic info
+ W5100.init();
+ W5100.setMACAddress(mac_address);
+ W5100.setIPAddress(IPAddress(0,0,0,0).raw_address());
+
+ // Now try to get our config info from a DHCP server
+ int ret = dhcp.beginWithDHCP(mac_address);
+ if(ret == 1)
+ {
+ // We've successfully found a DHCP server and got our configuration info, so set things
+ // accordingly
+ W5100.setIPAddress(dhcp.getLocalIp().raw_address());
+ W5100.setGatewayIp(dhcp.getGatewayIp().raw_address());
+ W5100.setSubnetMask(dhcp.getSubnetMask().raw_address());
+ _dnsServerAddress = dhcp.getDnsServerIp();
+ }
+
+ return ret;
+}
+
+void EthernetClass::begin(uint8_t *mac_address, IPAddress local_ip)
+{
+ // Assume the gateway will be the machine on the same network as the local IP
+ // but with last octet being '1'
+ IPAddress gateway = local_ip;
+ gateway[3] = 1;
+ begin(mac_address, local_ip, gateway);
+}
+
+void EthernetClass::begin(uint8_t *mac_address, IPAddress local_ip, IPAddress gateway)
+{
+ IPAddress subnet(255, 255, 255, 0);
+ begin(mac_address, local_ip, gateway, subnet);
+}
+
+void EthernetClass::begin(uint8_t *mac, IPAddress local_ip, IPAddress gateway, IPAddress subnet)
+{
+ W5100.init();
+ W5100.setMACAddress(mac);
+ W5100.setIPAddress(local_ip._address);
+ W5100.setGatewayIp(gateway._address);
+ W5100.setSubnetMask(subnet._address);
+}
+
+IPAddress EthernetClass::localIP()
+{
+ IPAddress ret;
+ W5100.getIPAddress(ret.raw_address());
+ return ret;
+}
+
+IPAddress EthernetClass::subnetMask()
+{
+ IPAddress ret;
+ W5100.getSubnetMask(ret.raw_address());
+ return ret;
+}
+
+IPAddress EthernetClass::gatewayIP()
+{
+ IPAddress ret;
+ W5100.getGatewayIp(ret.raw_address());
+ return ret;
+}
+
+IPAddress EthernetClass::dnsServerIP()
+{
+ return _dnsServerAddress;
+}
+
+EthernetClass Ethernet;