this code demonstrate how to receive broadcast packet with mbed-os (Mbed OS 5). (tested on LPC1768)
mbed os : https://github.com/ARMmbed/mbed-os
main.cpp@0:e361f65583a0, 2018-02-01 (annotated)
- Committer:
- yukilab
- Date:
- Thu Feb 01 15:06:09 2018 +0000
- Revision:
- 0:e361f65583a0
initial
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yukilab | 0:e361f65583a0 | 1 | #include "mbed.h" |
yukilab | 0:e361f65583a0 | 2 | #include "EthernetInterface.h" |
yukilab | 0:e361f65583a0 | 3 | |
yukilab | 0:e361f65583a0 | 4 | #define MY_PORT 58083 |
yukilab | 0:e361f65583a0 | 5 | #define T_1_SECOND 1 |
yukilab | 0:e361f65583a0 | 6 | |
yukilab | 0:e361f65583a0 | 7 | Serial pc(USBTX, USBRX); // default to 9600 8N1 |
yukilab | 0:e361f65583a0 | 8 | #define log(...) { pc.printf(__VA_ARGS__); } |
yukilab | 0:e361f65583a0 | 9 | |
yukilab | 0:e361f65583a0 | 10 | EthernetInterface interface; |
yukilab | 0:e361f65583a0 | 11 | UDPSocket socket; |
yukilab | 0:e361f65583a0 | 12 | SocketAddress addr; |
yukilab | 0:e361f65583a0 | 13 | |
yukilab | 0:e361f65583a0 | 14 | int main(void) { |
yukilab | 0:e361f65583a0 | 15 | nsapi_error_t st; |
yukilab | 0:e361f65583a0 | 16 | const char *addr_char; |
yukilab | 0:e361f65583a0 | 17 | char buffer[256]; |
yukilab | 0:e361f65583a0 | 18 | |
yukilab | 0:e361f65583a0 | 19 | interface.connect(); // link up and wait DHCP address |
yukilab | 0:e361f65583a0 | 20 | addr_char = interface.get_ip_address(); |
yukilab | 0:e361f65583a0 | 21 | log("My IP Address: %s\n", addr_char); |
yukilab | 0:e361f65583a0 | 22 | |
yukilab | 0:e361f65583a0 | 23 | if (!addr.set_ip_address(addr_char)){ |
yukilab | 0:e361f65583a0 | 24 | log("ERROR: failed to set IP address %s\n", addr_char); |
yukilab | 0:e361f65583a0 | 25 | }else{ |
yukilab | 0:e361f65583a0 | 26 | addr.set_port(MY_PORT); |
yukilab | 0:e361f65583a0 | 27 | } |
yukilab | 0:e361f65583a0 | 28 | |
yukilab | 0:e361f65583a0 | 29 | if ((st = socket.open(&interface)) != NSAPI_ERROR_OK) { |
yukilab | 0:e361f65583a0 | 30 | printf("Failed to open UDP Socket (status %d)\n", st); |
yukilab | 0:e361f65583a0 | 31 | } |
yukilab | 0:e361f65583a0 | 32 | |
yukilab | 0:e361f65583a0 | 33 | if ((st = socket.bind((const SocketAddress)addr)) != NSAPI_ERROR_OK) { |
yukilab | 0:e361f65583a0 | 34 | printf("Failed to bind UDP Socket to port %d (status %d)\n", MY_PORT, st); |
yukilab | 0:e361f65583a0 | 35 | } |
yukilab | 0:e361f65583a0 | 36 | |
yukilab | 0:e361f65583a0 | 37 | while(1) { |
yukilab | 0:e361f65583a0 | 38 | nsapi_size_or_error_t st = socket.recvfrom(&addr, (void *)buffer, (unsigned int)sizeof(buffer)); |
yukilab | 0:e361f65583a0 | 39 | if (st > 0) { |
yukilab | 0:e361f65583a0 | 40 | buffer[st] = 0; |
yukilab | 0:e361f65583a0 | 41 | log("received: %s\n", buffer); // assuming text received |
yukilab | 0:e361f65583a0 | 42 | }else{ |
yukilab | 0:e361f65583a0 | 43 | log("ERROR: socket.recvfrom : %d\n", st); |
yukilab | 0:e361f65583a0 | 44 | } |
yukilab | 0:e361f65583a0 | 45 | |
yukilab | 0:e361f65583a0 | 46 | wait(T_1_SECOND); |
yukilab | 0:e361f65583a0 | 47 | } |
yukilab | 0:e361f65583a0 | 48 | } |