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

Dependencies:   UIPEthernet

Committer:
hudakz
Date:
Tue Sep 03 10:59:59 2019 +0000
Revision:
2:6bbdab30a1c1
Parent:
1:29bb0a32f61d
Child:
3:e2462f078d64
Updated to use the latest version of the UIPEthernet library.

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 2:6bbdab30a1c1 20 #include "UipEthernet.h"
hudakz 2:6bbdab30a1c1 21
hudakz 2:6bbdab30a1c1 22 #define IP "192.168.1.35"
hudakz 2:6bbdab30a1c1 23 #define GATEWAY "192.168.1.1"
hudakz 2:6bbdab30a1c1 24 #define NETMASK "255.255.255.0"
hudakz 2:6bbdab30a1c1 25 #define PORT 80
hudakz 0:8823772081cb 26
hudakz 0:8823772081cb 27 // MAC address must be unique within the connected network. Modify as appropriate.
hudakz 2:6bbdab30a1c1 28 const uint8_t MAC[6] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 };
hudakz 2:6bbdab30a1c1 29 UipEthernet net(MAC, D11, D12, D13, D10); // mac, mosi, miso, sck, cs
hudakz 0:8823772081cb 30
hudakz 2:6bbdab30a1c1 31 const char message[] = "Hello World from mbed!";
hudakz 2:6bbdab30a1c1 32
hudakz 0:8823772081cb 33
hudakz 0:8823772081cb 34 /**
hudakz 0:8823772081cb 35 * @brief
hudakz 0:8823772081cb 36 * @note
hudakz 0:8823772081cb 37 * @param
hudakz 0:8823772081cb 38 * @retval
hudakz 0:8823772081cb 39 */
hudakz 0:8823772081cb 40 int main(void) {
hudakz 2:6bbdab30a1c1 41 // Bring up the ethernet interface
hudakz 2:6bbdab30a1c1 42 //net.set_network(IP, NETMASK, GATEWAY); // include this for using static IP address
hudakz 2:6bbdab30a1c1 43 printf("UDP Server example\n");
hudakz 2:6bbdab30a1c1 44 if(net.connect() != 0) {
hudakz 2:6bbdab30a1c1 45 printf("Error connecting\n");
hudakz 2:6bbdab30a1c1 46 return -1;
hudakz 2:6bbdab30a1c1 47 }
hudakz 1:29bb0a32f61d 48
hudakz 2:6bbdab30a1c1 49 // Show the network address
hudakz 2:6bbdab30a1c1 50 const char* ip = net.get_ip_address();
hudakz 2:6bbdab30a1c1 51 const char* netmask = net.get_netmask();
hudakz 2:6bbdab30a1c1 52 const char* gateway = net.get_gateway();
hudakz 2:6bbdab30a1c1 53
hudakz 2:6bbdab30a1c1 54 printf("IP address: %s\r\n", ip ? ip : "None");
hudakz 2:6bbdab30a1c1 55 printf("Netmask: %s\r\n", netmask ? netmask : "None");
hudakz 2:6bbdab30a1c1 56 printf("Gateway: %s\r\n\r\n", gateway ? gateway : "None");
hudakz 2:6bbdab30a1c1 57
hudakz 2:6bbdab30a1c1 58 UdpSocket socket(&net);
hudakz 2:6bbdab30a1c1 59
hudakz 2:6bbdab30a1c1 60 socket.begin(PORT); // listen at port PORT for user datagrams
hudakz 2:6bbdab30a1c1 61
hudakz 2:6bbdab30a1c1 62 printf("Waiting for datagrams from UDP clients\r\n");
hudakz 0:8823772081cb 63
hudakz 1:29bb0a32f61d 64 while (1) {
hudakz 1:29bb0a32f61d 65 int success;
hudakz 2:6bbdab30a1c1 66 int size = socket.parsePacket();
hudakz 1:29bb0a32f61d 67
hudakz 1:29bb0a32f61d 68 if (size > 0) {
hudakz 0:8823772081cb 69 do {
hudakz 2:6bbdab30a1c1 70 char* data = (char*)malloc(size + 1);
hudakz 2:6bbdab30a1c1 71 int len = socket.read(data, size + 1);
hudakz 2:6bbdab30a1c1 72 data[len] = 0;
hudakz 2:6bbdab30a1c1 73 printf("received: '%s", data);
hudakz 2:6bbdab30a1c1 74 free(data);
hudakz 2:6bbdab30a1c1 75 } while ((size = socket.available()) > 0);
hudakz 0:8823772081cb 76
hudakz 0:8823772081cb 77 //finish reading this packet:
hudakz 2:6bbdab30a1c1 78 socket.flush();
hudakz 1:29bb0a32f61d 79 printf("'\r\n");
hudakz 0:8823772081cb 80
hudakz 0:8823772081cb 81 do {
hudakz 0:8823772081cb 82 //send new packet back to ip/port of client. This also
hudakz 0:8823772081cb 83 //configures the current connection to ignore packets from
hudakz 0:8823772081cb 84 //other clients!
hudakz 2:6bbdab30a1c1 85 success = socket.beginPacket(socket.remoteIP(), socket.remotePort());
hudakz 1:29bb0a32f61d 86 if (success)
hudakz 2:6bbdab30a1c1 87 printf("beginPacket: succeeded%\r\n");
hudakz 0:8823772081cb 88 else
hudakz 2:6bbdab30a1c1 89 printf("beginPacket: failed%\r\n");
hudakz 0:8823772081cb 90
hudakz 0:8823772081cb 91 //beginPacket fails if remote ethaddr is unknown. In this case an
hudakz 0:8823772081cb 92 //arp-request is send out first and beginPacket succeeds as soon
hudakz 0:8823772081cb 93 //the arp-response is received.
hudakz 1:29bb0a32f61d 94 } while (!success);
hudakz 0:8823772081cb 95
hudakz 2:6bbdab30a1c1 96 success = socket.write((uint8_t*)message, strlen(message));
hudakz 0:8823772081cb 97
hudakz 1:29bb0a32f61d 98 if (success)
hudakz 2:6bbdab30a1c1 99 printf("bytes written: %d\r\n", success);
hudakz 0:8823772081cb 100
hudakz 2:6bbdab30a1c1 101 success = socket.endPacket();
hudakz 0:8823772081cb 102
hudakz 1:29bb0a32f61d 103 if (success)
hudakz 2:6bbdab30a1c1 104 printf("endPacket: succeeded%\r\n");
hudakz 0:8823772081cb 105 else
hudakz 2:6bbdab30a1c1 106 printf("endPacket: failed%\r\n");
hudakz 0:8823772081cb 107
hudakz 2:6bbdab30a1c1 108 socket.close();
hudakz 0:8823772081cb 109
hudakz 0:8823772081cb 110 //restart with new connection to receive packets from other clients
hudakz 2:6bbdab30a1c1 111 if (socket.begin(PORT))
hudakz 2:6bbdab30a1c1 112 printf("restart connection: succeeded%\r\n");
hudakz 0:8823772081cb 113 else
hudakz 2:6bbdab30a1c1 114 printf("restart connection: failed%\r\n");
hudakz 0:8823772081cb 115 }
hudakz 0:8823772081cb 116 }
hudakz 0:8823772081cb 117 }