Simple UDP Server using the UIPEthernet library for ENC28J60 Ethernet boards.

Dependencies:   UIPEthernet

Committer:
hudakz
Date:
Fri Jun 30 20:42:13 2017 +0000
Revision:
0:8823772081cb
Child:
1:29bb0a32f61d
Initial issue.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:8823772081cb 1 #include "mbed.h"
hudakz 0:8823772081cb 2 #include "UIPEthernet.h"
hudakz 0:8823772081cb 3 #include "UIPUdp.h"
hudakz 0:8823772081cb 4
hudakz 0:8823772081cb 5 // MAC address must be unique within the connected network. Modify as appropriate.
hudakz 0:8823772081cb 6 const uint8_t MY_MAC[6] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 };
hudakz 0:8823772081cb 7 // IP address must be unique and compatible with your network.
hudakz 0:8823772081cb 8 const IPAddress MY_IP(192, 168, 1, 181);
hudakz 0:8823772081cb 9 const uint16_t MY_PORT = 7;
hudakz 0:8823772081cb 10
hudakz 0:8823772081cb 11 Serial pc(USBTX, USBRX);
hudakz 0:8823772081cb 12 UIPEthernet uIPEthernet(D11, D12, D13, D10); // mosi, miso, sck, cs
hudakz 0:8823772081cb 13 UIPUDP udp;
hudakz 0:8823772081cb 14
hudakz 0:8823772081cb 15 /**
hudakz 0:8823772081cb 16 * @brief
hudakz 0:8823772081cb 17 * @note
hudakz 0:8823772081cb 18 * @param
hudakz 0:8823772081cb 19 * @retval
hudakz 0:8823772081cb 20 */
hudakz 0:8823772081cb 21 int main(void) {
hudakz 0:8823772081cb 22 uIPEthernet.begin(MY_MAC, MY_IP);
hudakz 0:8823772081cb 23 IPAddress localIP = uIPEthernet.localIP();
hudakz 0:8823772081cb 24 pc.printf("Local IP = %s\r\n", localIP.toString());
hudakz 0:8823772081cb 25 pc.printf("Initialization ");
hudakz 0:8823772081cb 26 if(udp.begin(MY_PORT))
hudakz 0:8823772081cb 27 pc.printf("succeeded.\r\n");
hudakz 0:8823772081cb 28 else
hudakz 0:8823772081cb 29 pc.printf("failed.\r\n");
hudakz 0:8823772081cb 30
hudakz 0:8823772081cb 31 while(1) {
hudakz 0:8823772081cb 32 int size = udp.parsePacket();
hudakz 0:8823772081cb 33 if(size > 0) {
hudakz 0:8823772081cb 34 do {
hudakz 0:8823772081cb 35 char* msg = (char*)malloc(size + 1);
hudakz 0:8823772081cb 36 int len = udp.read(msg, size + 1);
hudakz 0:8823772081cb 37 msg[len] = 0;
hudakz 0:8823772081cb 38 } while((size = udp.available()) > 0);
hudakz 0:8823772081cb 39
hudakz 0:8823772081cb 40 //finish reading this packet:
hudakz 0:8823772081cb 41 udp.flush();
hudakz 0:8823772081cb 42
hudakz 0:8823772081cb 43 int success;
hudakz 0:8823772081cb 44 do {
hudakz 0:8823772081cb 45 //send new packet back to ip/port of client. This also
hudakz 0:8823772081cb 46 //configures the current connection to ignore packets from
hudakz 0:8823772081cb 47 //other clients!
hudakz 0:8823772081cb 48 success = udp.beginPacket(udp.remoteIP(), udp.remotePort());
hudakz 0:8823772081cb 49 if(success)
hudakz 0:8823772081cb 50 pc.printf("beginPacket: succeeded%\r\n");
hudakz 0:8823772081cb 51 else
hudakz 0:8823772081cb 52 pc.printf("beginPacket: failed%\r\n");
hudakz 0:8823772081cb 53
hudakz 0:8823772081cb 54 //beginPacket fails if remote ethaddr is unknown. In this case an
hudakz 0:8823772081cb 55 //arp-request is send out first and beginPacket succeeds as soon
hudakz 0:8823772081cb 56 //the arp-response is received.
hudakz 0:8823772081cb 57 } while(!success);
hudakz 0:8823772081cb 58
hudakz 0:8823772081cb 59 char* message = "Hello World from mbed";
hudakz 0:8823772081cb 60 success = udp.write((uint8_t*)message, strlen(message));
hudakz 0:8823772081cb 61
hudakz 0:8823772081cb 62 if(success)
hudakz 0:8823772081cb 63 pc.printf("bytes written: %d\r\n", success);
hudakz 0:8823772081cb 64
hudakz 0:8823772081cb 65 success = udp.endPacket();
hudakz 0:8823772081cb 66
hudakz 0:8823772081cb 67 if(success)
hudakz 0:8823772081cb 68 pc.printf("endPacket: succeeded%\r\n");
hudakz 0:8823772081cb 69 else
hudakz 0:8823772081cb 70 pc.printf("endPacket: failed%\r\n");
hudakz 0:8823772081cb 71
hudakz 0:8823772081cb 72 udp.stop();
hudakz 0:8823772081cb 73
hudakz 0:8823772081cb 74 //restart with new connection to receive packets from other clients
hudakz 0:8823772081cb 75 if(udp.begin(MY_PORT))
hudakz 0:8823772081cb 76 pc.printf("restart connection: succeeded%\r\n");
hudakz 0:8823772081cb 77 else
hudakz 0:8823772081cb 78 pc.printf("restart connection: failed%\r\n");
hudakz 0:8823772081cb 79 }
hudakz 0:8823772081cb 80 }
hudakz 0:8823772081cb 81 }