diff options
-rw-r--r-- | include/resource-factory.h | 3 | ||||
-rw-r--r-- | include/resource-types.h | 49 | ||||
-rw-r--r-- | include/resource.h | 19 | ||||
-rw-r--r-- | src/libplayback-wrapper.cpp | 54 | ||||
-rw-r--r-- | src/libplayback-wrapper.h | 13 | ||||
-rw-r--r-- | src/resource-factory.cpp | 7 | ||||
-rw-r--r-- | src/resource.cpp | 41 | ||||
-rw-r--r-- | tests/test-libplayback.cpp | 4 | ||||
-rw-r--r-- | tests/test-libplayback.make | 8 | ||||
-rw-r--r-- | tests/test-resource.cpp | 33 | ||||
-rw-r--r-- | tests/test-resource.h | 3 |
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 |