diff --git a/telldus-core/service/TelldusMain.cpp b/telldus-core/service/TelldusMain.cpp index e63bfbea..4c81f9d5 100644 --- a/telldus-core/service/TelldusMain.cpp +++ b/telldus-core/service/TelldusMain.cpp @@ -8,23 +8,40 @@ #include #include +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(eventData); + if (data) { + controllerManager.deviceInsertedOrRemoved(data->vid, data->pid, data->inserted); + } + delete eventData; + } + for ( std::list::iterator it = clientCommunicationHandlerList.begin(); it != clientCommunicationHandlerList.end(); ){ if ((*it)->isDone()){ diff --git a/telldus-core/service/TelldusMain.h b/telldus-core/service/TelldusMain.h index 3dcddd75..46d6dbbe 100644 --- a/telldus-core/service/TelldusMain.h +++ b/telldus-core/service/TelldusMain.h @@ -10,6 +10,9 @@ public: void start(); void stop(); + //Thread safe! + void deviceInsertedOrRemoved(int vid, int pid, bool inserted); + private: class PrivateData; PrivateData *d;