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

Dependencies:   mbed

Committer:
darran
Date:
Fri Jun 18 09:09:57 2010 +0000
Revision:
0:c1be031ca851

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
darran 0:c1be031ca851 1 #include "AutoDiscoveryBroadcaster.h"
darran 0:c1be031ca851 2
darran 0:c1be031ca851 3 AutoDiscoveryBroadcaster::AutoDiscoveryBroadcaster() {
darran 0:c1be031ca851 4 running = 0;
darran 0:c1be031ca851 5 // Create the UDP socket
darran 0:c1be031ca851 6 udpSock = new UDPSocket;
darran 0:c1be031ca851 7 }
darran 0:c1be031ca851 8
darran 0:c1be031ca851 9 AutoDiscoveryBroadcaster::~AutoDiscoveryBroadcaster() {
darran 0:c1be031ca851 10 stop();
darran 0:c1be031ca851 11 udpSock->close();
darran 0:c1be031ca851 12 // Delete the UDP socket
darran 0:c1be031ca851 13 delete udpSock;
darran 0:c1be031ca851 14 }
darran 0:c1be031ca851 15
darran 0:c1be031ca851 16 void AutoDiscoveryBroadcaster::start(int udpPort, int period) {
darran 0:c1be031ca851 17 if ( !running ) {
darran 0:c1be031ca851 18 msg.init();
darran 0:c1be031ca851 19 udpSock->bind(Host(IP_ADDR_ANY, udpPort));
darran 0:c1be031ca851 20 host = Host(IP_ADDR_BROADCAST, udpPort);
darran 0:c1be031ca851 21 //host = Host(IpAddr(192,168,1,141), udpPort);
darran 0:c1be031ca851 22 ticker.attach(this, &AutoDiscoveryBroadcaster::broadcast, period);
darran 0:c1be031ca851 23 running = 1;
darran 0:c1be031ca851 24 // call once now
darran 0:c1be031ca851 25 broadcast();
darran 0:c1be031ca851 26 }
darran 0:c1be031ca851 27 }
darran 0:c1be031ca851 28
darran 0:c1be031ca851 29 void AutoDiscoveryBroadcaster::stop() {
darran 0:c1be031ca851 30 if ( running ) {
darran 0:c1be031ca851 31 ticker.detach();
darran 0:c1be031ca851 32 running = 0;
darran 0:c1be031ca851 33 }
darran 0:c1be031ca851 34 }
darran 0:c1be031ca851 35
darran 0:c1be031ca851 36 void AutoDiscoveryBroadcaster::broadcast() {
darran 0:c1be031ca851 37 printf("Sending result = %d\r\n", udpSock->sendto(msg.getBytes(), msg.getLength(), &host));
darran 0:c1be031ca851 38 }