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

Dependencies:   UIPEthernet

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