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

Committer:
yukilab
Date:
Thu Feb 01 15:06:09 2018 +0000
Revision:
0:e361f65583a0
initial

Who changed what in which revision?

UserRevisionLine numberNew 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 }