summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWolf Bergenheim <ext-wolf.2.bergenheim@nokia.com>2009-12-30 16:00:09 +0200
committerWolf Bergenheim <ext-wolf.2.bergenheim@nokia.com>2009-12-30 16:00:09 +0200
commit9504f0418dd0f3a9e6dff6034ffe36196c473a06 (patch)
treeb91b56455e0541b03f018df99c9ea95865621f9a /src
Initial commit
Diffstat (limited to 'src')
-rw-r--r--src/libplayback-wrapper.cpp96
-rw-r--r--src/libplayback-wrapper.h26
-rw-r--r--src/resource-factory.cpp26
-rw-r--r--src/resource-library.h11
-rw-r--r--src/resource.cpp42
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;
+}