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