diff options
Diffstat (limited to 'libresourceqt/src')
-rw-r--r-- | libresourceqt/src/resource-engine.cpp | 180 | ||||
-rw-r--r-- | libresourceqt/src/resource-engine.h | 14 | ||||
-rw-r--r-- | libresourceqt/src/resource-factory.cpp | 31 | ||||
-rw-r--r-- | libresourceqt/src/resource-set.cpp | 10 | ||||
-rw-r--r-- | libresourceqt/src/resource.cpp | 2 | ||||
-rw-r--r-- | libresourceqt/src/resources.cpp | 2 |
6 files changed, 133 insertions, 106 deletions
diff --git a/libresourceqt/src/resource-engine.cpp b/libresourceqt/src/resource-engine.cpp index cd34c08..a25c789 100644 --- a/libresourceqt/src/resource-engine.cpp +++ b/libresourceqt/src/resource-engine.cpp @@ -1,18 +1,24 @@ #include "resource-engine.h" #include <dbus/dbus.h> -#include <Resource> using namespace ResourcePolicy; -static void connectionIsUp(resconn_t *connection); static inline quint32 allResourcesToBitmask(const ResourceSet *resourceSet); static inline quint32 optionalResourcesToBitmask(const ResourceSet *resourceSet); static inline quint32 sharedResourcesToBitmask(const ResourceSet *resourceSet); +static inline quint32 resourceTypeToLibresourceType(ResourceType type); + +static void connectionIsUp(resconn_t *connection); +static void statusCallbackHandler(resset_t *rset, resmsg_t *msg); +static void handleUnregisterMessage(resmsg_t *, resset_t *, void *data); +static void handleGrantMessage(resmsg_t *msg, resset_t *rs, void *data); +static void handleAdviceMessage(resmsg_t *msg, resset_t *rs, void *data); ResourceEngine::ResourceEngine(ResourceSet *resourceSet) - : QObject(resourceSet), resourceSet(resourceSet), requestId(0) + : QObject(resourceSet), connected(false), resourceSet(resourceSet), + libresourceConnection(NULL), libresourceSet(NULL), requestId(0), + messageMap() { - identifier = (quint32)this; } ResourceEngine::~ResourceEngine() @@ -27,104 +33,159 @@ bool ResourceEngine::initialize() dbus_error_init(&dbusError); dbusConnection = dbus_bus_get(DBUS_BUS_SYSTEM, &dbusError); if(dbus_error_is_set(&dbusError)) { - qDebug("Error while connection to the system bus: %s", dbusError.message); - dbus_error_free(&dbusError); - return false; + qDebug("Error getting the system bus: %s", dbusError.message); + dbus_error_free(&dbusError); + return false; } dbus_error_free(&dbusError); libresourceConnection = resproto_init(RESPROTO_ROLE_CLIENT, RESPROTO_TRANSPORT_DBUS, connectionIsUp, dbusConnection); if(libresourceConnection == NULL) { - return NULL; + return NULL; } -/* resproto_set_handler(libresourceConnection, RESMSG_UNREGISTER, handleUnregisterMessage); + resproto_set_handler(libresourceConnection, RESMSG_UNREGISTER, handleUnregisterMessage); resproto_set_handler(libresourceConnection, RESMSG_GRANT, handleGrantMessage); - resproto_set_handler(libresourceConnection, RESMSG_ADVICE, handleAdviceMessage);*/ + resproto_set_handler(libresourceConnection, RESMSG_ADVICE, handleAdviceMessage); + return true; } +static void handleUnregisterMessage(resmsg_t *, resset_t *, void *data) +{ + ResourceEngine *engine = reinterpret_cast<ResourceEngine *>(data); + + engine->disconnected(); +} + +void ResourceEngine::disconnected() +{ + qDebug("disconnected"); + + connected = false; +} + +static void handleGrantMessage(resmsg_t *msg, resset_t *, void *data) +{ + ResourceEngine *engine = reinterpret_cast<ResourceEngine *>(data); + + engine->receivedGrant(&(msg->notify)); +} + +void ResourceEngine::receivedGrant(resmsg_notify_t *notifyMessage) +{ + char buf[80]; + resmsg_res_str(notifyMessage->resrc, buf, sizeof(buf)); + qDebug("%s: %s", __FUNCTION__, buf); +} + +static void handleAdviceMessage(resmsg_t *msg, resset_t *, void *data) +{ + ResourceEngine *engine = reinterpret_cast<ResourceEngine *>(data); + + engine->receivedAdvice(&(msg->notify)); +} + +void ResourceEngine::receivedAdvice(resmsg_notify_t *notifyMessage) +{ + char buf[80]; + resmsg_res_str(notifyMessage->resrc, buf, sizeof(buf)); + qDebug("%s: %s", __FUNCTION__, buf); +} + bool ResourceEngine::connect() { resmsg_t resourceMessage; resourceMessage.record.type = RESMSG_REGISTER; - resourceMessage.record.id = identifier; - resourceMessage.record.reqno = ++reqestId; + resourceMessage.record.id = resourceSet->id(); + resourceMessage.record.reqno = ++requestId; - requestMap.insert(requestId, RESMSG_REGISTER); + messageMap.insert(requestId, RESMSG_REGISTER); uint32_t allResources, optionalResources, sharedResources; allResources = allResourcesToBitmask(resourceSet); - allResources = optionalResourcesToBitmask(resourceSet); - allResources = sharedResourcesToBitmask(resourceSet); + optionalResources = optionalResourcesToBitmask(resourceSet); + sharedResources = sharedResourcesToBitmask(resourceSet); resourceMessage.record.rset.all = allResources; resourceMessage.record.rset.opt = optionalResources; resourceMessage.record.rset.share = sharedResources; resourceMessage.record.rset.mask = 0; //find out what it is - resourceMessage.record.klass = resourceSet->applicationClass(); + QByteArray ba = resourceSet->applicationClass().toLatin1(); + resourceMessage.record.klass = ba.data(); + resourceMessage.record.mode = 0; //No auto release - libresourceSet = resconn_connect(libresourceConnection, &resourceMessage, handleConnect); + libresourceSet = resconn_connect(libresourceConnection, &resourceMessage, + statusCallbackHandler); libresourceSet->userdata = this; //save our context - index = REQHASH_INDEX(reqno); - reqtyp[index] = RESMSG_REGISTER; return true; } static inline quint32 allResourcesToBitmask(const ResourceSet *resourceSet) { - QList<Resource> resourceList = resourceSet->resources(); + QList<Resource *> resourceList = resourceSet->resources(); quint32 bitmask=0; for(int i=0; i < resourceList.size(); i++) { - switch(resourceList[i].type()) { - case AudioPlaybackResource: + bitmask += resourceTypeToLibresourceType(resourceList[i]->type()); + } + return bitmask; +} + +static inline quint32 resourceTypeToLibresourceType(ResourceType type) +{ + quint32 bitmask=0; + switch(type) { + case AudioPlaybackType: bitmask += RESMSG_AUDIO_PLAYBACK; break; - case VideoPlaybackResource: + case VideoPlaybackType: bitmask += RESMSG_VIDEO_PLAYBACK; break; - case AudioRecorderResource: + case AudioRecorderType: bitmask += RESMSG_AUDIO_RECORDING; break; - case VideoRecorderResource: + case VideoRecorderType: bitmask += RESMSG_VIDEO_RECORDING; break; - case VibraResource: + case VibraType: bitmask += RESMSG_VIBRA; break; - case + case LedsType: + bitmask += RESMSG_LEDS; + break; + case BacklightType: + bitmask += RESMSG_BACKLIGHT; + break; + case SystemButtonType: + bitmask += RESMSG_SYSTEM_BUTTON; + case LockButtonType: + bitmask += RESMSG_LOCK_BUTTON; + break; + case ScaleButtonType: + bitmask += RESMSG_SCALE_BUTTON; + break; + case SnapButtonType: + bitmask += RESMSG_SNAP_BUTTON; + break; + case LensCoverType: + bitmask += RESMSG_LENS_COVER; + break; default: break; - } } return bitmask; } static inline quint32 optionalResourcesToBitmask(const ResourceSet *resourceSet) { - QList<Resource> resourceList = resourceSet->resources(); + QList<Resource *> resourceList = resourceSet->resources(); quint32 bitmask=0; for(int i=0; i < resourceList.size(); i++) { - if(resourceList[i].isOptional()) { - switch(resourceList[i].type()) { - case AudioPlaybackResource: - bitmask += RESMSG_AUDIO_PLAYBACK; - break; - case VideoPlaybackResource: - bitmask += RESMSG_VIDEO_PLAYBACK; - break; - case AudioRecorderResource: - bitmask += RESMSG_AUDIO_RECORDING; - break; - case VideoRecorderResource: - bitmask += RESMSG_VIDEO_RECORDING; - break; - default: - break; - } + if(resourceList[i]->isOptional()) { + bitmask += resourceTypeToLibresourceType(resourceList[i]->type()); } } return bitmask; @@ -132,31 +193,21 @@ static inline quint32 optionalResourcesToBitmask(const ResourceSet *resourceSet) static inline quint32 sharedResourcesToBitmask(const ResourceSet *resourceSet) { - QList<Resource> resourceList = resourceSet->resources(); + QList<Resource *> resourceList = resourceSet->resources(); quint32 bitmask=0; for(int i=0; i < resourceList.size(); i++) { - if(resourceList[i].isShared()) { - switch(resourceList[i].type()) { - case AudioPlaybackResource: - bitmask += RESMSG_AUDIO_PLAYBACK; - break; - case VideoPlaybackResource: - bitmask += RESMSG_VIDEO_PLAYBACK; - break; - case AudioRecorderResource: - bitmask += RESMSG_AUDIO_RECORDING; - break; - case VideoRecorderResource: - bitmask += RESMSG_VIDEO_RECORDING; - break; - default: - break; - } + if(resourceList[i]->isShared()) { + bitmask += resourceTypeToLibresourceType(resourceList[i]->type()); } } return bitmask; } +static void statusCallbackHandler(resset_t *rset, resmsg_t *msg) +{ + qDebug("Received a status notification"); +} + bool ResourceEngine::isConnected() { return false; @@ -195,3 +246,4 @@ void ResourceEngine::handleConnectionIsUp() { emit connectedToManager(); } + diff --git a/libresourceqt/src/resource-engine.h b/libresourceqt/src/resource-engine.h index 9dd5fe5..863a23b 100644 --- a/libresourceqt/src/resource-engine.h +++ b/libresourceqt/src/resource-engine.h @@ -5,18 +5,16 @@ #include <QMap> #include <dbus/dbus.h> #include <res-conn.h> -#include "resource-set.h" +#include <policy/resource-set.h> namespace ResourcePolicy { -class ResourceEngineData; - class ResourceEngine: public QObject { Q_OBJECT Q_DISABLE_COPY( ResourceEngine ) public: - ResourceEngine(ResourceSet *resourceSet=NULL); + ResourceEngine(ResourceSet *resourceSet); ~ResourceEngine(); bool initialize(); @@ -33,9 +31,13 @@ public: void handleConnectionIsUp(); + void disconnected(); + void receivedGrant(resmsg_notify_t *notifyMessage); + void receivedAdvice(resmsg_notify_t *notifyMessage); + signals: - void resourcesBecameAvailable(QList<Resource> availableResources); - void resourcesAcquired(QList<Resource> grantedResources); + void resourcesBecameAvailable(QList<Resource *> availableResources); + void resourcesAcquired(QList<Resource *> grantedResources); void resourcesDenied(); void lostResources(); void connectedToManager(); diff --git a/libresourceqt/src/resource-factory.cpp b/libresourceqt/src/resource-factory.cpp deleted file mode 100644 index f500792..0000000 --- a/libresourceqt/src/resource-factory.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "resource-factory.h" -#include "libplayback-wrapper.h" - -using namespace ResourceTypes; - -ResourceFactory::ResourceFactory(QObject *parent) - : QObject(parent), sessionBusConnection(QDBusConnection::sessionBus()) -{ -} - -ResourceFactory::~ResourceFactory() -{ -} - -Resource * ResourceFactory::createResource(enum ResourceClass applicationClass, - quint16 requestedResources) -{ - qDebug("We %s connected to DBus",sessionBusConnection.isConnected()?"are":"are not"); - Resource *resource = new Resource(applicationClass, requestedResources, this); - ResourceLibrary *libPlayback = new LibPlaybackWrapper(resource); - - bool resourceProperlyInitialized = resource->initialize(libPlayback); - if(resourceProperlyInitialized) { - return resource; - } - else { - qDebug("Failed to initialize Resource. Returning NULL!"); - delete resource; - return NULL; - } -} diff --git a/libresourceqt/src/resource-set.cpp b/libresourceqt/src/resource-set.cpp index c7862ef..6ff8d9a 100644 --- a/libresourceqt/src/resource-set.cpp +++ b/libresourceqt/src/resource-set.cpp @@ -1,9 +1,9 @@ -#include "resource-set.h" +#include <policy/resource-set.h> using namespace ResourcePolicy; ResourceSet::ResourceSet(const QString &applicationClass, QObject * parent) - : QObject(parent), applicationClass(applicationClass) + : QObject(parent), resourceClass(applicationClass) { identifier = (quint32)this; memset(resourceSet, 0, sizeof(QPointer<Resource>)*NumberOfTypes); @@ -60,7 +60,7 @@ quint32 ResourceSet::id() const return identifier; } -QList<Resource *> ResourceSet::resources() +QList<Resource *> ResourceSet::resources() const { QList<Resource *> listOfResources; for(int i=0; i < NumberOfTypes; i++) { @@ -109,3 +109,7 @@ bool ResourceSet::update() return false; } +QString ResourceSet::applicationClass() +{ + return this->resourceClass; +} diff --git a/libresourceqt/src/resource.cpp b/libresourceqt/src/resource.cpp index 8207b66..fe1153e 100644 --- a/libresourceqt/src/resource.cpp +++ b/libresourceqt/src/resource.cpp @@ -1,4 +1,4 @@ -#include "resource.h" +#include <policy/resource.h> using namespace ResourcePolicy; diff --git a/libresourceqt/src/resources.cpp b/libresourceqt/src/resources.cpp index 9858bd3..c763ebc 100644 --- a/libresourceqt/src/resources.cpp +++ b/libresourceqt/src/resources.cpp @@ -1,4 +1,4 @@ -#include "resources.h" +#include <policy/resources.h> using namespace ResourcePolicy; |