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

Dependencies:   UIPEthernet

Committer:
hudakz
Date:
Sat Jul 01 08:16:18 2017 +0000
Revision:
1:29bb0a32f61d
Parent:
0:8823772081cb
Child:
2:6bbdab30a1c1
Updated.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 1:29bb0a32f61d 1 /*
hudakz 1:29bb0a32f61d 2 * UIPEthernet UdpServer example.
hudakz 1:29bb0a32f61d 3 *
hudakz 1:29bb0a32f61d 4 * UIPEthernet is a TCP/IP stack that can be used with an enc28j60 based
hudakz 1:29bb0a32f61d 5 * Ethernet-shield.
hudakz 1:29bb0a32f61d 6 *
hudakz 1:29bb0a32f61d 7 * UIPEthernet uses the fine uIP stack by Adam Dunkels <adam@sics.se>
hudakz 1:29bb0a32f61d 8 *
hudakz 1:29bb0a32f61d 9 * -----------------
hudakz 1:29bb0a32f61d 10 *
hudakz 1:29bb0a32f61d 11 * This UdpServer example sets up a udp-server at 192.168.1.181 on port 7 to
hudakz 1:29bb0a32f61d 12 * send packet via upd to test
hudakz 1:29bb0a32f61d 13 *
hudakz 1:29bb0a32f61d 14 * Copyright (C) 2013 by Norbert Truchsess (norbert.truchsess@t-online.de)
hudakz 1:29bb0a32f61d 15 *
hudakz 1:29bb0a32f61d 16 * Modified (ported to mbed) by Zoltan Hudak
hudakz 1:29bb0a32f61d 17 *
hudakz 1:29bb0a32f61d 18 */
hudakz 0:8823772081cb 19 #include "mbed.h"
hudakz 0:8823772081cb 20 #include "UIPEthernet.h"
hudakz 0:8823772081cb 21
hudakz 0:8823772081cb 22 // MAC address must be unique within the connected network. Modify as appropriate.
hudakz 1:29bb0a32f61d 23 const uint8_t MY_MAC[6] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 };
hudakz 0:8823772081cb 24 // IP address must be unique and compatible with your network.
hudakz 1:29bb0a32f61d 25 const IPAddress MY_IP(192, 168, 1, 181);
hudakz 1:29bb0a32f61d 26 const uint16_t MY_PORT = 7;
hudakz 1:29bb0a32f61d 27 const char* message = "Hello World from mbed!";
hudakz 0:8823772081cb 28
hudakz 1:29bb0a32f61d 29 Serial pc(USBTX, USBRX);
hudakz 1:29bb0a32f61d 30 UIPEthernet uIPEthernet(D11, D12, D13, D10); // mosi, miso, sck, cs
hudakz 1:29bb0a32f61d 31 UIPUDP udp;
hudakz 0:8823772081cb 32
hudakz 0:8823772081cb 33 /**
hudakz 0:8823772081cb 34 * @brief
hudakz 0:8823772081cb 35 * @note
hudakz 0:8823772081cb 36 * @param
hudakz 0:8823772081cb 37 * @retval
hudakz 0:8823772081cb 38 */
hudakz 0:8823772081cb 39 int main(void) {
hudakz 0:8823772081cb 40 uIPEthernet.begin(MY_MAC, MY_IP);
hudakz 1:29bb0a32f61d 41
hudakz 0:8823772081cb 42 IPAddress localIP = uIPEthernet.localIP();
hudakz 0:8823772081cb 43 pc.printf("Local IP = %s\r\n", localIP.toString());
hudakz 0:8823772081cb 44 pc.printf("Initialization ");
hudakz 1:29bb0a32f61d 45 if (udp.begin(MY_PORT))
hudakz 0:8823772081cb 46 pc.printf("succeeded.\r\n");
hudakz 0:8823772081cb 47 else
hudakz 0:8823772081cb 48 pc.printf("failed.\r\n");
hudakz 0:8823772081cb 49
hudakz 1:29bb0a32f61d 50 while (1) {
hudakz 1:29bb0a32f61d 51 int success;
hudakz 0:8823772081cb 52 int size = udp.parsePacket();
hudakz 1:29bb0a32f61d 53
hudakz 1:29bb0a32f61d 54 if (size > 0) {
hudakz 0:8823772081cb 55 do {
hudakz 0:8823772081cb 56 char* msg = (char*)malloc(size + 1);
hudakz 0:8823772081cb 57 int len = udp.read(msg, size + 1);
hudakz 0:8823772081cb 58 msg[len] = 0;
hudakz 1:29bb0a32f61d 59 printf("received: '%s", msg);
hudakz 1:29bb0a32f61d 60 free(msg);
hudakz 1:29bb0a32f61d 61 } while ((size = udp.available()) > 0);
hudakz 0:8823772081cb 62
hudakz 0:8823772081cb 63 //finish reading this packet:
hudakz 0:8823772081cb 64 udp.flush();
hudakz 1:29bb0a32f61d 65 printf("'\r\n");
hudakz 0:8823772081cb 66
hudakz 0:8823772081cb 67 do {
hudakz 0:8823772081cb 68 //send new packet back to ip/port of client. This also
hudakz 0:8823772081cb 69 //configures the current connection to ignore packets from
hudakz 0:8823772081cb 70 //other clients!
hudakz 0:8823772081cb 71 success = udp.beginPacket(udp.remoteIP(), udp.remotePort());
hudakz 1:29bb0a32f61d 72 if (success)
hudakz 0:8823772081cb 73 pc.printf("beginPacket: succeeded%\r\n");
hudakz 0:8823772081cb 74 else
hudakz 0:8823772081cb 75 pc.printf("beginPacket: failed%\r\n");
hudakz 0:8823772081cb 76
hudakz 0:8823772081cb 77 //beginPacket fails if remote ethaddr is unknown. In this case an
hudakz 0:8823772081cb 78 //arp-request is send out first and beginPacket succeeds as soon
hudakz 0:8823772081cb 79 //the arp-response is received.
hudakz 1:29bb0a32f61d 80 } while (!success);
hudakz 0:8823772081cb 81
hudakz 0:8823772081cb 82 success = udp.write((uint8_t*)message, strlen(message));
hudakz 0:8823772081cb 83
hudakz 1:29bb0a32f61d 84 if (success)
hudakz 0:8823772081cb 85 pc.printf("bytes written: %d\r\n", success);
hudakz 0:8823772081cb 86
hudakz 0:8823772081cb 87 success = udp.endPacket();
hudakz 0:8823772081cb 88
hudakz 1:29bb0a32f61d 89 if (success)
hudakz 0:8823772081cb 90 pc.printf("endPacket: succeeded%\r\n");
hudakz 0:8823772081cb 91 else
hudakz 0:8823772081cb 92 pc.printf("endPacket: failed%\r\n");
hudakz 0:8823772081cb 93
hudakz 0:8823772081cb 94 udp.stop();
hudakz 0:8823772081cb 95
hudakz 0:8823772081cb 96 //restart with new connection to receive packets from other clients
hudakz 1:29bb0a32f61d 97 if (udp.begin(MY_PORT))
hudakz 0:8823772081cb 98 pc.printf("restart connection: succeeded%\r\n");
hudakz 0:8823772081cb 99 else
hudakz 0:8823772081cb 100 pc.printf("restart connection: failed%\r\n");
hudakz 0:8823772081cb 101 }
hudakz 0:8823772081cb 102 }
hudakz 0:8823772081cb 103 }