Added function TelldusMain::deviceInsertedOrRemoved()

This commit is contained in:
Micke Prag 2010-10-15 12:39:04 +00:00
parent ae5655abbe
commit 9d9fab6323
2 changed files with 30 additions and 1 deletions

View file

@ -8,23 +8,40 @@
#include <stdio.h>
#include <list>
class DeviceEventData : public EventDataBase {
public:
int vid, pid;
bool inserted;
};
class TelldusMain::PrivateData {
public:
EventHandler eventHandler;
Event *stopEvent;
Event *stopEvent, *deviceChangeEvent;
};
TelldusMain::TelldusMain(void)
{
d = new PrivateData;
d->stopEvent = d->eventHandler.addEvent();
d->deviceChangeEvent = d->eventHandler.addEvent();
}
TelldusMain::~TelldusMain(void) {
delete d->deviceChangeEvent;
delete d->stopEvent;
delete d;
}
void TelldusMain::deviceInsertedOrRemoved(int vid, int pid, bool inserted) {
DeviceEventData *data = new DeviceEventData;
data->vid = vid;
data->pid = pid;
data->inserted = inserted;
d->deviceChangeEvent->signal(data);
}
void TelldusMain::start(void) {
Event *clientEvent = d->eventHandler.addEvent();
@ -53,6 +70,15 @@ void TelldusMain::start(void) {
delete eventData;
}
if (d->deviceChangeEvent->isSignaled()) {
EventData *eventData = d->deviceChangeEvent->takeSignal();
DeviceEventData *data = reinterpret_cast<DeviceEventData*>(eventData);
if (data) {
controllerManager.deviceInsertedOrRemoved(data->vid, data->pid, data->inserted);
}
delete eventData;
}
for ( std::list<ClientCommunicationHandler *>::iterator it = clientCommunicationHandlerList.begin(); it != clientCommunicationHandlerList.end(); ){
if ((*it)->isDone()){

View file

@ -10,6 +10,9 @@ public:
void start();
void stop();
//Thread safe!
void deviceInsertedOrRemoved(int vid, int pid, bool inserted);
private:
class PrivateData;
PrivateData *d;