diff options
author | Wolf Bergenheim <ext-wolf.2.bergenheim@nokia.com> | 2009-12-30 16:00:09 +0200 |
---|---|---|
committer | Wolf Bergenheim <ext-wolf.2.bergenheim@nokia.com> | 2009-12-30 16:00:09 +0200 |
commit | 9504f0418dd0f3a9e6dff6034ffe36196c473a06 (patch) | |
tree | b91b56455e0541b03f018df99c9ea95865621f9a /src |
Initial commit
Diffstat (limited to 'src')
-rw-r--r-- | src/libplayback-wrapper.cpp | 96 | ||||
-rw-r--r-- | src/libplayback-wrapper.h | 26 | ||||
-rw-r--r-- | src/resource-factory.cpp | 26 | ||||
-rw-r--r-- | src/resource-library.h | 11 | ||||
-rw-r--r-- | src/resource.cpp | 42 |
5 files changed, 201 insertions, 0 deletions
diff --git a/src/libplayback-wrapper.cpp b/src/libplayback-wrapper.cpp new file mode 100644 index 0000000..a1cfbab --- /dev/null +++ b/src/libplayback-wrapper.cpp @@ -0,0 +1,96 @@ +#include "libplayback-wrapper.h" + +LibPlaybackWrapper::LibPlaybackWrapper(Resource *res) + : QObject(res), dbusConnection(NULL), libPlaybackHandle(NULL) +{ + resource = res; +} + +LibPlaybackWrapper::~LibPlaybackWrapper() +{ + pb_playback_destroy(libPlaybackHandle); +} + +bool LibPlaybackWrapper::initialize() +{ + DBusError dbusError; + dbusConnection = dbus_bus_get(DBUS_BUS_SESSION, &dbusError); + if(dbusConnection == NULL) { + return false; + } + + enum pb_class_e libPlaybackClass = resourceClassToLibPlaybackClass(resource->getResourceClass()); + quint16 libPlaybackFlags = resourceFlagToLibPlaybackFlags(resource->getResourceFlags()); + libPlaybackHandle = pb_playback_new_2(dbusConnection, libPlaybackClass, libPlaybackFlags, + PB_STATE_STOP, libPlaybackStateHandler, this); + if(libPlaybackHandle == NULL) { + return false; + } + return true; +} + +enum pb_class_e resourceClassToLibPlaybackClass(enum ResourceClass resourceClass) +{ + switch(resourceClass) { + case InvalidClass: + return PB_CLASS_NONE; + case CallClass: + return PB_CLASS_CALL; + case MediaClass: + return PB_CLASS_MEDIA; + case BackgroundClass: + return PB_CLASS_BACKGROUND; + case RingtoneClass: + return PB_CLASS_RINGTONE; + case VoiceUIClass: + return PB_CLASS_VOICEUI; + case CameraClass: + return PB_CLASS_CAMERA; + case GameClass: + return PB_CLASS_GAME; + case AlarmClass: + return PB_CLASS_ALARM; + case FlashClass: + return PB_CLASS_FLASH; + case SystemClass: + return PB_CLASS_SYSTEM; + case InputClass: + return PB_CLASS_INPUT; + default: + return PB_CLASS_NONE; + } +} + +quint16 resourceFlagToLibPlaybackFlags(quint16 resourceFlags) +{ + quint16 libPlaybackFlags = 0; + for (int flag=RP_FLAGS_AUDIO;flag<RP_FLAGS_VIDEO_RECORDING;flag=flag<<1) { + if((resourceFlags & flag) == flag) { + switch(flag) { + case RP_FLAGS_AUDIO: + libPlaybackFlags += PB_FLAG_AUDIO; + break; + case RP_FLAGS_VIDEO: + libPlaybackFlags += PB_FLAG_VIDEO; + break; + case RP_FLAGS_AUDIO_RECORDING: + libPlaybackFlags += PB_FLAG_AUDIO_RECORDING; + break; + case RP_FLAGS_VIDEO_RECORDING: + libPlaybackFlags += PB_FLAG_VIDEO_RECORDING; + break; + } + } + } + return libPlaybackFlags; +} + +void libPlaybackStateHandler(pb_playback_t *libPlaybackHandle, enum pb_state_e requestedState, + pb_req_t* playbackRequest, void *data) +{ +// LibPlaybackWrapper *libPlaybackWrapper = (LibPlaybackWrapper*)data; + +// libPlaybackWrapper->handleNewState(requestedState); + + pb_playback_req_completed(libPlaybackHandle, playbackRequest); +} diff --git a/src/libplayback-wrapper.h b/src/libplayback-wrapper.h new file mode 100644 index 0000000..83baf28 --- /dev/null +++ b/src/libplayback-wrapper.h @@ -0,0 +1,26 @@ +#include "resource-library.h" +#include "resource.h" +#include <libplayback/playback.h> + +#ifndef LIBPLAYBACKWRAPPER_H +#define LIBPLAYBACKWRAPPER_H + +class LibPlaybackWrapper: public QObject, public ResourceLibrary +{ + Q_OBJECT +private: + DBusConnection *dbusConnection; + pb_playback_t *libPlaybackHandle; + Resource *resource; +public: + LibPlaybackWrapper(Resource *resource); + ~LibPlaybackWrapper(); + bool initialize(); +}; + +void libPlaybackStateHandler(pb_playback_t *libPlaybackHandle, enum pb_state_e requestedState, + pb_req_t* playbackRequest, void *data); + +inline enum pb_class_e resourceClassToLibPlaybackClass(enum ResourceClass resourceClass); +inline quint16 resourceFlagToLibPlaybackFlags(quint16 resourceFlag); +#endif diff --git a/src/resource-factory.cpp b/src/resource-factory.cpp new file mode 100644 index 0000000..03566e2 --- /dev/null +++ b/src/resource-factory.cpp @@ -0,0 +1,26 @@ +#include "resource-factory.h" +#include "libplayback-wrapper.h" + +ResourceFactory::ResourceFactory(QObject *parent) + : QObject(parent), sessionBusConnection(QDBusConnection::sessionBus()) +{ +} + +ResourceFactory::~ResourceFactory() +{ +} + +Resource * ResourceFactory::createResource(enum ResourceClass type, quint16 usageFlags) +{ + Resource *resource = new Resource(type, usageFlags, this); + ResourceLibrary *libPlayback = new LibPlaybackWrapper(resource); + + bool resourceProperlyInitialized = resource->initialize(libPlayback); + if(resourceProperlyInitialized) { + return resource; + } + else { + delete resource; + return NULL; + } +} diff --git a/src/resource-library.h b/src/resource-library.h new file mode 100644 index 0000000..f9e178b --- /dev/null +++ b/src/resource-library.h @@ -0,0 +1,11 @@ +#ifndef RESOURCELIBRARY_H +#define RESOURCELIBRARY_H + +class ResourceLibrary +{ +public: + virtual ~ResourceLibrary() {} + virtual bool initialize() = 0; +}; + +#endif diff --git a/src/resource.cpp b/src/resource.cpp new file mode 100644 index 0000000..3bbe0a4 --- /dev/null +++ b/src/resource.cpp @@ -0,0 +1,42 @@ +#include "resource.h" + +Resource::Resource(enum ResourceClass type, quint16 resourceFlags, QObject *parent) + : QObject(parent), resourceClass(type), flags(resourceFlags) +{ +} + +Resource::~Resource() +{ +} + +bool Resource::initialize(ResourceLibrary *library) +{ + resourceLibrary = library; + return resourceLibrary->initialize(); +} + + +quint16 Resource::getResourceFlags() +{ + return flags; +} + +enum ResourceClass Resource::getResourceClass() +{ + return resourceClass; +} + +bool Resource::requestExclusiveAccess() +{ + return false; +} + +bool Resource::releaseExclusiveAccess() +{ + return false; +} + +bool Resource::getExclusiveAccessState() +{ + return false; +} |