Zoltan Hudak
/
UdpServer_ENC28J60
Simple UDP Server using the UIPEthernet library for ENC28J60 Ethernet boards.
main.cpp@1:29bb0a32f61d, 2017-07-01 (annotated)
- 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?
User | Revision | Line number | New 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 | } |