First attempt at some form of autodiscovery of an mbed based device by periodically broadcasting our IP in a UDP packet.

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers AutoDiscoveryBroadcaster.cpp Source File

AutoDiscoveryBroadcaster.cpp

00001 #include "AutoDiscoveryBroadcaster.h"
00002 
00003 AutoDiscoveryBroadcaster::AutoDiscoveryBroadcaster() {
00004     running = 0;
00005     // Create the UDP socket
00006     udpSock = new UDPSocket;
00007 }
00008 
00009 AutoDiscoveryBroadcaster::~AutoDiscoveryBroadcaster() {
00010     stop();
00011     udpSock->close();
00012     // Delete the UDP socket
00013     delete udpSock;
00014 }
00015 
00016 void AutoDiscoveryBroadcaster::start(int udpPort, int period) {
00017     if ( !running ) {
00018         msg.init();
00019         udpSock->bind(Host(IP_ADDR_ANY, udpPort));
00020         host = Host(IP_ADDR_BROADCAST, udpPort);
00021         //host = Host(IpAddr(192,168,1,141), udpPort);
00022         ticker.attach(this, &AutoDiscoveryBroadcaster::broadcast, period);
00023         running = 1;
00024         // call once now
00025         broadcast();
00026     }
00027 }
00028 
00029 void AutoDiscoveryBroadcaster::stop() {
00030     if ( running ) {
00031         ticker.detach();
00032         running = 0;
00033     }
00034 }
00035 
00036 void AutoDiscoveryBroadcaster::broadcast() {
00037     printf("Sending result = %d\r\n", udpSock->sendto(msg.getBytes(), msg.getLength(), &host));
00038 }