From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/devices/deviceManagerFactory.cpp | 100 +++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Src/devices/deviceManagerFactory.cpp (limited to 'Src/devices/deviceManagerFactory.cpp') diff --git a/Src/devices/deviceManagerFactory.cpp b/Src/devices/deviceManagerFactory.cpp new file mode 100644 index 00000000..8ee804cd --- /dev/null +++ b/Src/devices/deviceManagerFactory.cpp @@ -0,0 +1,100 @@ +#include "main.h" +#include "./deviceManager.h" +#include "./deviceManagerFactory.h" + +DeviceManagerFactory::DeviceManagerFactory() + : object(NULL) +{ +} + +DeviceManagerFactory::~DeviceManagerFactory() +{ + if (NULL != object) + object->Release(); +} + +FOURCC DeviceManagerFactory::GetServiceType() +{ + return WaSvc::UNIQUE; +} + +const char *DeviceManagerFactory::GetServiceName() +{ + return "Device Manager Interface"; +} + +GUID DeviceManagerFactory::GetGUID() +{ + return DeviceManagerGUID; +} + +void *DeviceManagerFactory::GetInterface(int global_lock) +{ + if (NULL == object) + { + if (FAILED(DeviceManager::CreateInstance(&object))) + object = NULL; + + if (NULL == object) + return NULL; + } + + object->AddRef(); + return object; +} + +int DeviceManagerFactory::SupportNonLockingInterface() +{ + return 1; +} + +int DeviceManagerFactory::ReleaseInterface(void *ifc) +{ + DeviceManager *object = (DeviceManager*)ifc; + if (NULL != object) + object->Release(); + + return 1; +} + +const char *DeviceManagerFactory::GetTestString() +{ + return NULL; +} + +int DeviceManagerFactory::ServiceNotify(int msg, int param1, int param2) +{ + return 1; +} + +HRESULT DeviceManagerFactory::Register(api_service *service) +{ + if (NULL == service) + return E_INVALIDARG; + + service->service_register(this); + return S_OK; +} + +HRESULT DeviceManagerFactory::Unregister(api_service *service) +{ + if (NULL == service) + return E_INVALIDARG; + + service->service_deregister(this); + return S_OK; +} + +#define CBCLASS DeviceManagerFactory +START_DISPATCH; +CB( WASERVICEFACTORY_GETSERVICETYPE, GetServiceType ) +CB( WASERVICEFACTORY_GETSERVICENAME, GetServiceName ) +CB( WASERVICEFACTORY_GETGUID, GetGUID ) +CB( WASERVICEFACTORY_GETINTERFACE, GetInterface ) +CB( WASERVICEFACTORY_SUPPORTNONLOCKINGGETINTERFACE, SupportNonLockingInterface ) +CB( WASERVICEFACTORY_RELEASEINTERFACE, ReleaseInterface ) +CB( WASERVICEFACTORY_GETTESTSTRING, GetTestString ) +CB( WASERVICEFACTORY_SERVICENOTIFY, ServiceNotify ) +END_DISPATCH; + +#undef CBCLASS \ No newline at end of file -- cgit