First attempt at some form of autodiscovery of an mbed based device by periodically broadcasting our IP in a UDP packet.
AutoDiscoveryBroadcaster.cpp@0:c1be031ca851, 2010-06-18 (annotated)
- Committer:
- darran
- Date:
- Fri Jun 18 09:09:57 2010 +0000
- Revision:
- 0:c1be031ca851
Who changed what in which revision?
User | Revision | Line number | New 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 | } |