aboutsummaryrefslogtreecommitdiff
path: root/libraries/Ethernet/Ethernet.cpp
diff options
context:
space:
mode:
authorCristian Maglie <c.maglie@bug.st>2012-01-04 15:14:51 +0100
committerCristian Maglie <c.maglie@bug.st>2012-01-04 15:14:51 +0100
commit8c2b5b979a75d109ae7cc306afc50d7ffe1e0366 (patch)
tree19ac8d91c7209397e7dc890b432a254ae9a7cd62 /libraries/Ethernet/Ethernet.cpp
parentbe52c95820400d48e47615232d3c38236166fad3 (diff)
Moved libraries folder inside platform folder. Now libraries and examples are searched per board/platform
Diffstat (limited to 'libraries/Ethernet/Ethernet.cpp')
-rw-r--r--libraries/Ethernet/Ethernet.cpp95
1 files changed, 95 insertions, 0 deletions
diff --git a/libraries/Ethernet/Ethernet.cpp b/libraries/Ethernet/Ethernet.cpp
new file mode 100644
index 0000000..c298f3d
--- /dev/null
+++ b/libraries/Ethernet/Ethernet.cpp
@@ -0,0 +1,95 @@
+#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 DNS server will be the machine on the same network as the local IP
+ // but with last octet being '1'
+ IPAddress dns_server = local_ip;
+ dns_server[3] = 1;
+ begin(mac_address, local_ip, dns_server);
+}
+
+void EthernetClass::begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server)
+{
+ // 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, dns_server, gateway);
+}
+
+void EthernetClass::begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server, IPAddress gateway)
+{
+ IPAddress subnet(255, 255, 255, 0);
+ begin(mac_address, local_ip, dns_server, gateway, subnet);
+}
+
+void EthernetClass::begin(uint8_t *mac, IPAddress local_ip, IPAddress dns_server, IPAddress gateway, IPAddress subnet)
+{
+ W5100.init();
+ W5100.setMACAddress(mac);
+ W5100.setIPAddress(local_ip._address);
+ W5100.setGatewayIp(gateway._address);
+ W5100.setSubnetMask(subnet._address);
+ _dnsServerAddress = dns_server;
+}
+
+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;