Heiko Greiner / Mbed 2 deprecated eth_v16_prob

Dependencies:   mbed

Fork of eth_v13 by Heiko Greiner

Revision:
0:f7caac9b804e
Child:
1:f45d6c8ec0a9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Mar 18 17:00:22 2014 +0000
@@ -0,0 +1,143 @@
+#include "mbed.h"
+#include "w5100.h"
+#include "UDPSocket.h"
+#include "ipaddr.h"
+
+extern W5100Class W5100;
+Serial pc(D1, D0);
+Timer sendStatusTimer;
+Timer pollUDPTimer;
+UDPSocket testsocket1(0);
+
+void exFunction(UDPSocketEvent var)
+{
+    char buf[1000];
+    int len=0;
+    int rcvPort = 0;
+    uint8_t mac[6];
+    int udpPort = 33;
+
+    // empfangene Daten anzeigen
+    len = testsocket1.recvfrom(buf, sizeof(buf) , mac, &rcvPort);
+    pc.printf("\n========\nNachricht von : %d.%d.%d.%d:%d\n", mac[0], mac[1], mac[2], mac[3], rcvPort);
+    buf[len]=0; // letztes Zeichen eine null, damit es das Stringende erkannt wird
+    pc.printf("%s\n", buf);
+
+    // empfangene Daten zurücksenden
+    testsocket1.sendto(buf, len, mac, udpPort);
+}
+
+int main()
+{
+    char buf[1000];
+    int len;
+    int udpPort=33;
+    int rcvPort = 0;
+    
+    IpAddr localhost(192,168,1,68);
+    IpAddr netmask(255,255,255,0);
+    IpAddr gateway(192,168,1,1);
+    IpAddr tempIP;
+
+    // Serielle Schnittstelle initialisieren
+    pc.baud(115200);
+
+    // Initialisieren des Ethernetinterfaces
+    pc.printf("Etbernet initialisieren.\n");
+    W5100.hardware_reset();
+    W5100.init();
+
+    uint8_t mac[6] = {0x00,0x00,0x5e,0x00,0x01,0x01};
+    W5100.setMACAddress(mac);
+
+    pc.printf("Start: HW Addr is : %02x:%02x:%02x:%02x:%02x:%02x.\n", mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
+
+    uint8_t u[4];
+    /*u[0] = 192;
+    u[1] = 168;
+    u[2] = 1;
+    u[3] = 66;
+    */
+    localhost.getIP(u);
+    W5100.setIPAddress(u);
+
+    /*u[0] = 255;
+    u[1] = 255;
+    u[2] = 255;
+    u[3] = 0;
+    */
+    netmask.getIP(u);
+    W5100.setSubnetMask(u);
+
+    /*u[0] = 192;
+    u[1] = 168;
+    u[2] = 2;
+    u[3] = 1;
+    */
+    gateway.getIP(u);
+    W5100.setGatewayIp(u);
+
+    // init testSocket
+    int socketNr = 0;
+    testsocket1.bind(&exFunction, udpPort);
+
+    // Sendetimer starten (und anschließend per Polling abfragen)
+    pc.printf("Sendetimer starten.\n");
+    sendStatusTimer.start();
+    pollUDPTimer.start();
+
+    while(1) {
+
+        // nach Ablauf der Wartezeit die STatusinformationen per Serieller Schnittstelle senden
+        if (sendStatusTimer.read_ms() >= 2000) {
+            sendStatusTimer.reset();    // Timer schnellst möglich neu starten
+
+            pc.printf("\n----------------------------------------------------.\n");
+
+            W5100.getMACAddress(mac);
+            pc.printf("MAC Addr is : %02d:%02d:%02d:%02d:%02d:%02d.\n", mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
+
+            W5100.getIPAddress(mac);
+            pc.printf("IP Addr is : %d.%d.%d.%d\n", mac[0],mac[1],mac[2],mac[3]);
+
+            W5100.getGatewayIp(mac);
+            pc.printf("GW Addr is : %d.%d.%d.%d\n", mac[0],mac[1],mac[2],mac[3]);
+
+
+            printf("socket:%d SnMR:%02x SnIR:%02x SnSR:%02x\n", socketNr,
+                   W5100.readSnMR(socketNr), W5100.readSnIR(socketNr), W5100.readSnSR(socketNr));
+
+            W5100.readSnDIPR(socketNr, mac);
+            pc.printf("Sn_DIPR: %d.%d.%d.%d Sn_DPORT: %d\n", mac[0], mac[1], mac[2], mac[3], W5100.readSnDPORT(socketNr));
+
+            W5100.readSnDHAR(socketNr, mac);
+            pc.printf("Sn_DHAR: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
+
+            pc.printf("Sn_RX_RSR:%d, Sn_RX_RD:%d, Sn_RX_WR:%d\n",
+                      W5100.readSnRX_RSR(socketNr), W5100.readSnRX_RD(socketNr), W5100.readSnRX_WR(socketNr));
+
+            pc.printf("Sn_TX_FSR:%d, Sn_TX_RD:%d, Sn_TX_WR:%d\n",
+                      W5100.readSnTX_FSR(socketNr), W5100.readSnTX_RD(socketNr), W5100.readSnTX_WR(socketNr));
+
+        }
+
+
+
+        if (pollUDPTimer.read_ms() >= 200) {
+            pollUDPTimer.reset();
+            len = testsocket1.poll();
+            if (len > 0) {
+
+                // empfangene Daten anzeigen
+                testsocket1.recvfrom(buf, len , mac, &rcvPort);
+                pc.printf("\n========\nNachricht von : %d.%d.%d.%d:%d\n", mac[0], mac[1], mac[2], mac[3], rcvPort);
+                buf[len]=0;
+                pc.printf("%s\n", buf);
+
+                // empfangene Daten zurücksenden
+                testsocket1.sendto(buf, len, mac, udpPort);
+            }
+        }
+
+    }
+}