//
-// Open Service Platform
// Copyright (c) 2012 Samsung Electronics Co., Ltd.
//
// Licensed under the Apache License, Version 2.0 (the License);
* @brief This is the implementation file for _MmcStorageManagerImpl class.
*/
-#include <limits.h>
#include <unique_ptr.h>
-#include <new>
#include <FBaseSysLog.h>
+#include <FBaseRtIEventArg.h>
#include <FBase_NativeError.h>
-#include <FIo_MmcStorageManagerImpl.h>
+#include "FIoIMmcStorageMountListener.h"
+#include "FIoIMmcStorageFormatListener.h"
+#include "FIo_MmcStorageManagerImpl.h"
#include "FIo_MmcStorageManagerProxy.h"
+using namespace std;
+
using namespace Tizen::Base;
using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Runtime;
namespace Tizen { namespace Io
{
+static const int MOUNT_TYPE = 0;
+static const int UNMOUNT_TYPE = 1;
+
+class _MountEventArg
+ : public IEventArg
+{
+public:
+ _MountEventArg(int type, result r)
+ : __type(type)
+ , __r(r)
+ {
+ }
+ int __type;
+ result __r;
+};
+
+class _FormatEventArg
+ : public IEventArg
+{
+public:
+ _FormatEventArg(result r)
+ : __r(r)
+ {
+ }
+ result __r;
+};
+
+class _MountEvent
+ : public Event
+{
+protected:
+ virtual void FireImpl(IEventListener& listener, const IEventArg& arg)
+ {
+ const _MountEventArg* pArg = dynamic_cast<const _MountEventArg*>(&arg);
+ if (pArg != null)
+ {
+ IMmcStorageMountListener* pListener = dynamic_cast<IMmcStorageMountListener*> (&listener);
+ if (pListener != null)
+ {
+ if (pArg->__type == MOUNT_TYPE) // Mount
+ {
+ pListener->OnMmcStorageMounted(pArg->__r);
+ }
+ else // Unmount
+ {
+ pListener->OnMmcStorageUnmounted(pArg->__r);
+ }
+ }
+ }
+ }
+
+};
+
+class _FormatEvent
+ : public Event
+{
+protected:
+ virtual void FireImpl(IEventListener& listener, const IEventArg& arg)
+ {
+ IMmcStorageFormatListener* pListener = dynamic_cast<IMmcStorageFormatListener*> (&listener);
+ if (pListener != null)
+ {
+ const _FormatEventArg* pArg = dynamic_cast<const _FormatEventArg*>(&arg);
+ if (pArg != null)
+ {
+ pListener->OnMmcStorageFormatted(pArg->__r);
+ }
+
+ }
+ }
+
+};
+
_MmcStorageManagerImpl::_MmcStorageManagerImpl(void)
: __pMmcStorageManagerProxy(null)
+ , __pMountEvent(null)
+ , __pFormatEvent(null)
{
}
_MmcStorageManagerImpl::~_MmcStorageManagerImpl(void)
{
+ delete __pMountEvent;
+ delete __pFormatEvent;
}
result
_MmcStorageManagerImpl::Construct(void)
{
- result r = E_SUCCESS;
+ unique_ptr<_MountEvent> pMountEvent(new (std::nothrow) _MountEvent);
+ SysTryReturnResult(NID_IO, pMountEvent != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
- std::unique_ptr<_MmcStorageManagerProxy> pMmcStorageManagerProxy(new (std::nothrow) _MmcStorageManagerProxy);
- SysTryReturnResult(NID_IO, pMmcStorageManagerProxy != null, E_OUT_OF_MEMORY, "The memory is insufficient");
+ unique_ptr<_FormatEvent> pFormatEvent(new (std::nothrow) _FormatEvent);
+ SysTryReturnResult(NID_IO, pFormatEvent != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
- r = pMmcStorageManagerProxy->Construct(this);
- SysTryReturn(NID_IO, !IsFailed(r), r, r, "[%s] __pMmcStorageManagerProxy->Construct() failed.", GetErrorMessage(r));
-
- __pMmcStorageManagerProxy = pMmcStorageManagerProxy.release();
+ __pMountEvent = pMountEvent.release();
+ __pFormatEvent = pFormatEvent.release();
return E_SUCCESS;
}
static _MmcStorageManagerImpl* pImpl = null;
if (pImpl == null)
{
- std::unique_ptr<_MmcStorageManagerImpl> p(new (std::nothrow) _MmcStorageManagerImpl);
- SysTryReturn(NID_IO, p != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
+ unique_ptr<_MmcStorageManagerImpl> pMmcStorageManagerImpl(new (std::nothrow) _MmcStorageManagerImpl);
+ SysTryReturn(NID_IO, pMmcStorageManagerImpl != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
- result r = p->Construct();
- SysTryReturn(NID_IO, r == E_SUCCESS, null, E_SYSTEM, "[E_SYSTEM] Failed to initialize channel.");
+ result r = pMmcStorageManagerImpl->Construct();
+ SysTryReturn(NID_IO, !IsFailed(r), null, r, "[%s] Propagating to caller...", GetErrorMessage(r));
- pImpl = p.release();
+ pImpl = pMmcStorageManagerImpl.release();
}
return pImpl;
-
}
result
_MmcStorageManagerImpl::Mount(void)
{
+ if (__pMmcStorageManagerProxy == null)
+ {
+ __pMmcStorageManagerProxy = _MmcStorageManagerProxy::GetInstance();
+ SysTryReturnResult(NID_IO, __pMmcStorageManagerProxy != null, E_SERVICE_BUSY, "Failed to get IPC proxy instance.");
+ __pMmcStorageManagerProxy->SetMmcStorageManagerListener(this);
+ }
return __pMmcStorageManagerProxy->Mount();
}
result
_MmcStorageManagerImpl::Unmount(void)
{
+ if (__pMmcStorageManagerProxy == null)
+ {
+ __pMmcStorageManagerProxy = _MmcStorageManagerProxy::GetInstance();
+ SysTryReturnResult(NID_IO, __pMmcStorageManagerProxy != null, E_SERVICE_BUSY, "Failed to get IPC proxy instance.");
+ __pMmcStorageManagerProxy->SetMmcStorageManagerListener(this);
+ }
return __pMmcStorageManagerProxy->Unmount();
}
result
_MmcStorageManagerImpl::Format(void)
{
+ if (__pMmcStorageManagerProxy == null)
+ {
+ __pMmcStorageManagerProxy = _MmcStorageManagerProxy::GetInstance();
+ SysTryReturnResult(NID_IO, __pMmcStorageManagerProxy != null, E_SERVICE_BUSY, "Failed to get IPC proxy instance.");
+ __pMmcStorageManagerProxy->SetMmcStorageManagerListener(this);
+ }
return __pMmcStorageManagerProxy->Format();
}
result
_MmcStorageManagerImpl::AddMmcStorageMountListener(IMmcStorageMountListener& listener)
{
- result r = __pMmcMountListener.Add(&listener);
- SysTryReturn(NID_IO, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
-
- return E_SUCCESS;
+ return __pMountEvent->AddListener(listener);
}
result
_MmcStorageManagerImpl::RemoveMmcStorageMountListener(IMmcStorageMountListener& listener)
{
- result r = __pMmcMountListener.Remove(&listener);
- SysTryReturn(NID_IO, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
-
- return E_SUCCESS;
+ return __pMountEvent->RemoveListener(listener);
}
result
_MmcStorageManagerImpl::AddMmcStorageFormatListener(IMmcStorageFormatListener& listener)
{
- result r = __pMmcFormatListener.Add(&listener);
- SysTryReturn(NID_IO, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
-
- return E_SUCCESS;
+ return __pFormatEvent->AddListener(listener);
}
result
_MmcStorageManagerImpl::RemoveMmcStorageFormatListener(IMmcStorageFormatListener& listener)
{
- result r = E_SUCCESS;
-
- r = __pMmcFormatListener.Remove(&listener);
- SysTryReturn(NID_IO, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
-
- return E_SUCCESS;
+ return __pFormatEvent->RemoveListener(listener);
}
-result
+void
_MmcStorageManagerImpl::OnMmcMountResponseReceived(result r)
{
- std::unique_ptr< IEnumeratorT< IMmcStorageMountListener* > >
- pEnum(__pMmcMountListener.GetEnumeratorN());
- if (pEnum.get())
+ _MountEventArg* pEventArg= new (std::nothrow) _MountEventArg(MOUNT_TYPE, r);
+ if(pEventArg != null)
{
- while (pEnum->MoveNext() == E_SUCCESS)
- {
- IMmcStorageMountListener* pListener = null;
- pEnum->GetCurrent(pListener);
- if (pListener != null)
- {
- SysLog(NID_IO, "Final Mount() response sent to Application : [%s]", GetErrorMessage(r));
- pListener->OnMmcStorageMounted(r);
- }
- }
+ __pMountEvent->Fire(*pEventArg);
}
-
- return E_SUCCESS;
}
-result
+void
_MmcStorageManagerImpl::OnMmcUnmountResponseReceived(result r)
{
- std::unique_ptr< IEnumeratorT< IMmcStorageMountListener* > >
- pEnum(__pMmcMountListener.GetEnumeratorN());
- if (pEnum.get())
+ _MountEventArg* pEventArg= new (std::nothrow) _MountEventArg(UNMOUNT_TYPE, r);
+ if(pEventArg != null)
{
- while (pEnum->MoveNext() == E_SUCCESS)
- {
- IMmcStorageMountListener* pListener = null;
- pEnum->GetCurrent(pListener);
- if (pListener != null)
- {
- SysLog(NID_IO, "Final Unmount() response sent to Application : [%s]", GetErrorMessage(r));
- pListener->OnMmcStorageUnmounted(r);
- }
- }
+ __pMountEvent->Fire(*pEventArg);
}
-
- return E_SUCCESS;
}
-result
+void
_MmcStorageManagerImpl::OnMmcFormatResponseReceived(result r)
{
- std::unique_ptr<IEnumeratorT< IMmcStorageFormatListener* > >
- pEnum(__pMmcFormatListener.GetEnumeratorN());
- if (pEnum.get())
+ _FormatEventArg* pEventArg= new (std::nothrow) _FormatEventArg(r);
+ if(pEventArg != null)
{
- while (pEnum->MoveNext() == E_SUCCESS)
- {
- IMmcStorageFormatListener* pListener = null;
- pEnum->GetCurrent(pListener);
- if (pListener != null)
- {
- SysLog(NID_IO, "Final Format() response sent to Application : [%s]", GetErrorMessage(r));
- pListener->OnMmcStorageFormatted(r);
- }
- }
+ __pFormatEvent->Fire(*pEventArg);
}
-
- return E_SUCCESS;
}
}} // Tizen::Io