summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/resource-factory.h3
-rw-r--r--include/resource-types.h49
-rw-r--r--include/resource.h19
-rw-r--r--src/libplayback-wrapper.cpp54
-rw-r--r--src/libplayback-wrapper.h13
-rw-r--r--src/resource-factory.cpp7
-rw-r--r--src/resource.cpp41
-rw-r--r--tests/test-libplayback.cpp4
-rw-r--r--tests/test-libplayback.make8
-rw-r--r--tests/test-resource.cpp33
-rw-r--r--tests/test-resource.h3
11 files changed, 175 insertions, 59 deletions
diff --git a/include/resource-factory.h b/include/resource-factory.h
index 2e544fe..b49a6e8 100644
--- a/include/resource-factory.h
+++ b/include/resource-factory.h
@@ -16,7 +16,8 @@ private:
public:
ResourceFactory(QObject *parent = 0);
~ResourceFactory();
- Resource * createResource(enum ResourceClass type, quint16 usageFlags=RP_FLAGS_AUDIO);
+ Resource * createResource(enum ResourceTypes::ResourceClass applicationClass,
+ quint16 requestedResources=ResourceTypes::AudioResource);
};
#endif
diff --git a/include/resource-types.h b/include/resource-types.h
index 5732251..57c6bfc 100644
--- a/include/resource-types.h
+++ b/include/resource-types.h
@@ -1,24 +1,35 @@
#ifndef RESOURCE_TYPES_H
#define RESOURCE_TYPES_H
-enum ResourceClass {
- InvalidClass = 0,
- VoIPClass,
- CallClass = VoIPClass,
- MediaClass,
- BackgroundClass,
- RingtoneClass,
- VoiceUIClass,
- CameraClass,
- GameClass,
- AlarmClass,
- FlashClass,
- SystemClass,
- InputClass
-};
-#define RP_FLAGS_AUDIO 0x01
-#define RP_FLAGS_VIDEO 0x02
-#define RP_FLAGS_AUDIO_RECORDING 0x04
-#define RP_FLAGS_VIDEO_RECORDING 0x08
+namespace ResourceTypes {
+ enum ResourceClass {
+ InvalidClass = 0,
+ VoIPClass,
+ CallClass = VoIPClass,
+ MediaClass,
+ BackgroundClass,
+ RingtoneClass,
+ VoiceUIClass,
+ CameraClass,
+ GameClass,
+ AlarmClass,
+ FlashClass,
+ SystemClass,
+ InputClass
+ };
+
+ enum ResourceType {
+ AudioResource = 0x01,
+ VideoResource = 0x02,
+ AudioRecorderResource = 0x04,
+ VideoRecorderResource = 0x08
+ };
+
+ enum ResourceState {
+ UnknownState,
+ NotOwnedState,
+ OwnedState
+ };
+}
#endif
diff --git a/include/resource.h b/include/resource.h
index 3cdf8b8..0be0b3a 100644
--- a/include/resource.h
+++ b/include/resource.h
@@ -6,6 +6,8 @@
#include "resource-library.h"
#include "resource-types.h"
+using namespace ResourceTypes;
+
class Resource: public QObject
{
Q_OBJECT
@@ -14,19 +16,25 @@ class Resource: public QObject
friend class TestResource;
private:
enum ResourceClass resourceClass;
- quint16 flags;
+ quint16 resourceType;
ResourceLibrary *resourceLibrary;
+ enum ResourceState resourceState;
+ Resource(enum ResourceClass requestedClass, quint16 requestedResources, QObject *parent=0);
bool initialize(ResourceLibrary *library);
- Resource(enum ResourceClass type, quint16 resourceFlags, QObject *parent=0);
public:
virtual ~Resource();
- enum ResourceClass getResourceClass();
- quint16 getResourceFlags();
+ bool hasExclusiveAccess() const;
+ bool hasResource(enum ResourceType resourceType) const;
+
+ enum ResourceClass applicationClass() const;
+ quint16 resources() const;
bool connectToServer();
+ void handleStateChange(enum ResourceState newState);
+
virtual bool requestExclusiveAccess();
virtual bool releaseExclusiveAccess();
virtual bool getExclusiveAccessState();
@@ -47,6 +55,9 @@ public:
virtual bool setStreamName(const QString & name);
*/
// completed and discarded from libplayback? what are those?
+signals:
+ void connectedToServer();
+ void stateChanged(enum ResourceState newState);
};
#endif
diff --git a/src/libplayback-wrapper.cpp b/src/libplayback-wrapper.cpp
index 6b51f94..a869b63 100644
--- a/src/libplayback-wrapper.cpp
+++ b/src/libplayback-wrapper.cpp
@@ -1,5 +1,12 @@
#include "libplayback-wrapper.h"
+using namespace ResourceTypes;
+static inline enum pb_class_e resourceClassToLibPlaybackClass(enum ResourceClass resourceClass);
+static inline quint16 resourceFlagsToLibPlaybackFlags(quint16 resourceFlags);
+static inline enum ResourceState libPlaybackStateToResourceState(enum pb_state_e libPlaybackState);
+static void libPlaybackStateHandler(pb_playback_t *libPlaybackHandler, enum pb_state_e newState,
+ pb_req_t* playbackRequest, void *data);
+
LibPlaybackWrapper::LibPlaybackWrapper(Resource *res)
: QObject(res), dbusConnection(NULL), libPlaybackHandle(NULL)
{
@@ -30,8 +37,8 @@ bool LibPlaybackWrapper::initialize()
bool LibPlaybackWrapper::connectToServer()
{
- enum pb_class_e libPlaybackClass = resourceClassToLibPlaybackClass(resource->getResourceClass());
- quint16 libPlaybackFlags = resourceFlagToLibPlaybackFlags(resource->getResourceFlags());
+ enum pb_class_e libPlaybackClass = resourceClassToLibPlaybackClass(resource->applicationClass());
+ quint16 libPlaybackFlags = resourceFlagsToLibPlaybackFlags(resource->resources());
libPlaybackHandle = pb_playback_new_2(dbusConnection, libPlaybackClass, libPlaybackFlags,
PB_STATE_STOP, libPlaybackStateHandler, this);
if(libPlaybackHandle == NULL) {
@@ -40,7 +47,7 @@ bool LibPlaybackWrapper::connectToServer()
return true;
}
-enum pb_class_e resourceClassToLibPlaybackClass(enum ResourceClass resourceClass)
+inline enum pb_class_e resourceClassToLibPlaybackClass(enum ResourceClass resourceClass)
{
switch(resourceClass) {
case InvalidClass:
@@ -72,22 +79,22 @@ enum pb_class_e resourceClassToLibPlaybackClass(enum ResourceClass resourceClass
}
}
-quint16 resourceFlagToLibPlaybackFlags(quint16 resourceFlags)
+inline quint16 resourceFlagsToLibPlaybackFlags(quint16 resourceFlags)
{
quint16 libPlaybackFlags = 0;
- for (int flag=RP_FLAGS_AUDIO;flag<RP_FLAGS_VIDEO_RECORDING;flag=flag<<1) {
+ for (int flag=AudioResource;flag<VideoRecorderResource;flag=flag<<1) {
if((resourceFlags & flag) == flag) {
switch(flag) {
- case RP_FLAGS_AUDIO:
+ case AudioResource:
libPlaybackFlags += PB_FLAG_AUDIO;
break;
- case RP_FLAGS_VIDEO:
+ case VideoResource:
libPlaybackFlags += PB_FLAG_VIDEO;
break;
- case RP_FLAGS_AUDIO_RECORDING:
+ case AudioRecorderResource:
libPlaybackFlags += PB_FLAG_AUDIO_RECORDING;
break;
- case RP_FLAGS_VIDEO_RECORDING:
+ case VideoRecorderResource:
libPlaybackFlags += PB_FLAG_VIDEO_RECORDING;
break;
}
@@ -96,12 +103,33 @@ quint16 resourceFlagToLibPlaybackFlags(quint16 resourceFlags)
return libPlaybackFlags;
}
-void libPlaybackStateHandler(pb_playback_t *libPlaybackHandle, enum pb_state_e requestedState,
+void libPlaybackStateHandler(pb_playback_t *libPlaybackHandler, enum pb_state_e newState,
pb_req_t* playbackRequest, void *data)
{
-// LibPlaybackWrapper *libPlaybackWrapper = (LibPlaybackWrapper*)data;
+ LibPlaybackWrapper *libPlaybackWrapper = static_cast<LibPlaybackWrapper*>(data);
+
+ libPlaybackWrapper->stateChanged(newState);
-// libPlaybackWrapper->handleNewState(requestedState);
+ pb_playback_req_completed(libPlaybackHandler, playbackRequest);
+}
- pb_playback_req_completed(libPlaybackHandle, playbackRequest);
+
+void LibPlaybackWrapper::stateChanged(enum pb_state_e newState)
+{
+ enum ResourceState resourceState;
+ resourceState = libPlaybackStateToResourceState(newState);
+
+ resource->handleStateChange(resourceState);
+}
+
+inline enum ResourceState libPlaybackStateToResourceState(enum pb_state_e libPlaybackState)
+{
+ switch(libPlaybackState) {
+ case PB_STATE_STOP:
+ return NotOwnedState;
+ case PB_STATE_PLAY:
+ return OwnedState;
+ default:
+ return UnknownState;
+ }
}
diff --git a/src/libplayback-wrapper.h b/src/libplayback-wrapper.h
index be86c7f..103d710 100644
--- a/src/libplayback-wrapper.h
+++ b/src/libplayback-wrapper.h
@@ -1,10 +1,10 @@
+#ifndef LIBPLAYBACKWRAPPER_H
+#define LIBPLAYBACKWRAPPER_H
+
#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
@@ -13,16 +13,13 @@ private:
DBusConnection *dbusConnection;
pb_playback_t *libPlaybackHandle;
Resource *resource;
+
public:
LibPlaybackWrapper(Resource *resource);
~LibPlaybackWrapper();
bool initialize();
bool connectToServer();
+ void stateChanged(enum pb_state_e newState);
};
-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
index b042b34..c012bb9 100644
--- a/src/resource-factory.cpp
+++ b/src/resource-factory.cpp
@@ -1,6 +1,8 @@
#include "resource-factory.h"
#include "libplayback-wrapper.h"
+using namespace ResourceTypes;
+
ResourceFactory::ResourceFactory(QObject *parent)
: QObject(parent), sessionBusConnection(QDBusConnection::sessionBus())
{
@@ -10,9 +12,10 @@ ResourceFactory::~ResourceFactory()
{
}
-Resource * ResourceFactory::createResource(enum ResourceClass type, quint16 usageFlags)
+Resource * ResourceFactory::createResource(enum ResourceClass applicationClass,
+ quint16 requestedResources)
{
- Resource *resource = new Resource(type, usageFlags, this);
+ Resource *resource = new Resource(applicationClass, requestedResources, this);
ResourceLibrary *libPlayback = new LibPlaybackWrapper(resource);
bool resourceProperlyInitialized = resource->initialize(libPlayback);
diff --git a/src/resource.cpp b/src/resource.cpp
index 2de05ee..1765c04 100644
--- a/src/resource.cpp
+++ b/src/resource.cpp
@@ -1,7 +1,9 @@
#include "resource.h"
-Resource::Resource(enum ResourceClass type, quint16 resourceFlags, QObject *parent)
- : QObject(parent), resourceClass(type), flags(resourceFlags)
+Resource::Resource(enum ResourceClass requestedClass, quint16 requestedResources,
+ QObject *parent)
+ : QObject(parent), resourceClass(requestedClass),
+ resourceType(requestedResources), resourceState(UnknownState)
{
}
@@ -20,16 +22,44 @@ bool Resource::connectToServer()
return resourceLibrary->connectToServer();
}
-quint16 Resource::getResourceFlags()
+quint16 Resource::resources() const
{
- return flags;
+ return resourceType;
}
-enum ResourceClass Resource::getResourceClass()
+enum ResourceClass Resource::applicationClass() const
{
return resourceClass;
}
+bool Resource::hasResource(enum ResourceType resourceType) const
+{
+ if((this->resourceType & resourceType) == resourceType)
+ return true;
+ else
+ return false;
+}
+
+bool Resource::hasExclusiveAccess() const
+{
+ if(resourceState == OwnedState)
+ return true;
+ else
+ return false;
+}
+
+void Resource::handleStateChange(enum ResourceState newState)
+{
+ if(resourceState == UnknownState) {
+ resourceState = newState;
+ emit connectedToServer();
+ }
+ else {
+ resourceState = newState;
+ emit stateChanged(resourceState);
+ }
+}
+
bool Resource::requestExclusiveAccess()
{
return false;
@@ -44,3 +74,4 @@ bool Resource::getExclusiveAccessState()
{
return false;
}
+
diff --git a/tests/test-libplayback.cpp b/tests/test-libplayback.cpp
index 7cdb2bf..5607104 100644
--- a/tests/test-libplayback.cpp
+++ b/tests/test-libplayback.cpp
@@ -1,5 +1,7 @@
#include "test-libplayback.h"
+using namespace ResourceTypes;
+
TestLibplayback::TestLibplayback()
{
resourceFactory=NULL;
@@ -14,7 +16,7 @@ void TestLibplayback::initTestCase()
{
resourceFactory = new ResourceFactory(this);
QVERIFY(resourceFactory != NULL);
- Resource *resource = resourceFactory->createResource(MediaClass, RP_FLAGS_AUDIO|RP_FLAGS_VIDEO);
+ Resource *resource = resourceFactory->createResource(MediaClass, AudioResource|VideoResource);
QVERIFY(resource != NULL);
}
diff --git a/tests/test-libplayback.make b/tests/test-libplayback.make
index 3f0b861..8946476 100644
--- a/tests/test-libplayback.make
+++ b/tests/test-libplayback.make
@@ -1,6 +1,6 @@
#############################################################################
# Makefile for building: build/test-libplayback
-# Generated by qmake (2.01a) (Qt 4.6.0) on: Thu Dec 31 13:33:48 2009
+# Generated by qmake (2.01a) (Qt 4.6.0) on: Tue Jan 5 10:34:26 2010
# Project: test-libplayback.pro
# Template: app
# Command: /usr/bin/qmake -unix -o test-libplayback.make test-libplayback.pro
@@ -196,6 +196,8 @@ compiler_moc_header_clean:
-$(DEL_FILE) build/moc_test-libplayback.cpp build/moc_resource.cpp build/moc_resource-factory.cpp build/moc_libplayback-wrapper.cpp
build/moc_test-libplayback.cpp: ../include/resource-factory.h \
../include/resource-types.h \
+ ../include/resource.h \
+ ../src/resource-library.h \
test-libplayback.h
/usr/bin/moc $(DEFINES) $(INCPATH) test-libplayback.h -o build/moc_test-libplayback.cpp
@@ -247,7 +249,9 @@ compiler_clean: compiler_moc_header_clean
build/test-libplayback.o: test-libplayback.cpp test-libplayback.h \
../include/resource-factory.h \
- ../include/resource-types.h
+ ../include/resource-types.h \
+ ../include/resource.h \
+ ../src/resource-library.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/test-libplayback.o test-libplayback.cpp
build/libplayback-wrapper.o: ../src/libplayback-wrapper.cpp ../src/libplayback-wrapper.h \
diff --git a/tests/test-resource.cpp b/tests/test-resource.cpp
index eb2b59d..8f2e52e 100644
--- a/tests/test-resource.cpp
+++ b/tests/test-resource.cpp
@@ -1,4 +1,7 @@
#include "test-resource.h"
+
+using namespace ResourceTypes;
+
TestResource::TestResource()
{
}
@@ -9,12 +12,34 @@ TestResource::~TestResource()
void TestResource::init()
{
- resource = new Resource(MediaClass, RP_FLAGS_AUDIO|RP_FLAGS_VIDEO, this);
+ resource = new Resource(MediaClass, AudioResource|VideoResource, this);
resourceLibrary = new MockResourceLibrary(resource, false, false);
QVERIFY(resource != NULL);
- QVERIFY(resource->resourceClass == MediaClass);
- QVERIFY(resource->flags == (RP_FLAGS_AUDIO|RP_FLAGS_VIDEO));
- qDebug("INIT!");
+ QVERIFY(resource->applicationClass() == MediaClass);
+ QVERIFY(resource->resources() == (AudioResource|VideoResource));
+ QVERIFY(resource->hasExclusiveAccess() == false);
+ QVERIFY(resource->hasResource(AudioResource));
+ QVERIFY(resource->hasResource(VideoResource));
+}
+
+void TestResource::testApplicationClass()
+{
+ enum ResourceClass expected, actual;
+
+ expected = MediaClass;
+ actual = resource->applicationClass();
+
+ QVERIFY(actual == expected);
+}
+
+void TestResource::testResources()
+{
+ quint16 expected, actual;
+
+ expected = AudioResource|VideoResource;
+ actual = resource->resources();
+
+ QVERIFY(actual == expected);
}
void TestResource::testInitializeSucceeds()
diff --git a/tests/test-resource.h b/tests/test-resource.h
index 295d6d3..6a39ad4 100644
--- a/tests/test-resource.h
+++ b/tests/test-resource.h
@@ -22,6 +22,9 @@ private slots:
void testConnectToServerSucceeds();
void testConnectToServerFails();
+
+ void testApplicationClass();
+ void testResources();
};
#endif