summaryrefslogtreecommitdiff
path: root/core/SystemStatus.cpp
diff options
context:
space:
mode:
authorHarikrishnan Hariharan <hahariha@codeaurora.org>2017-08-11 15:13:38 +0530
committerKatz Yamada <kyamada@codeaurora.org>2017-08-11 13:51:48 -0700
commitee2d6658cbfc916cc01c450f4a3d497ad193b60f (patch)
treeb4603371e7f1da0d16bcafe3d3c6d681f2c1cdc6 /core/SystemStatus.cpp
parentdb3101c207f101a19a078916f2146b4b38f8a7e2 (diff)
downloadgps-ee2d6658cbfc916cc01c450f4a3d497ad193b60f.tar.gz
Add DataItemObserver interface in SystemStatus
Add DataItemObserver interface in SystemStatus so that clients can subscribe dataitem events from SystemStatus. Also moving DateItem and its observer, subscription classes into HAL Simplify DataItem class implementation. Change-Id: I7b2c3fc9dcf67dd6132bbcccda874e3f7ed6fa94 CRs-Fixed: 2041019 2072896
Diffstat (limited to 'core/SystemStatus.cpp')
-rw-r--r--core/SystemStatus.cpp42
1 files changed, 40 insertions, 2 deletions
diff --git a/core/SystemStatus.cpp b/core/SystemStatus.cpp
index 50cb4ed..dc03604 100644
--- a/core/SystemStatus.cpp
+++ b/core/SystemStatus.cpp
@@ -35,8 +35,10 @@
#include <sys/time.h>
#include <pthread.h>
#include <platform_lib_log_util.h>
+#include <MsgTask.h>
#include <loc_nmea.h>
#include <SystemStatus.h>
+#include <SystemStatusOsObserver.h>
namespace loc_core
{
@@ -1176,10 +1178,44 @@ void SystemStatusLocation::dump()
/******************************************************************************
SystemStatus
******************************************************************************/
-pthread_mutex_t SystemStatus::mMutexSystemStatus = PTHREAD_MUTEX_INITIALIZER;
+pthread_mutex_t SystemStatus::mMutexSystemStatus = PTHREAD_MUTEX_INITIALIZER;
+SystemStatus* SystemStatus::mInstance = NULL;
-SystemStatus::SystemStatus()
+SystemStatus* SystemStatus::getInstance(const MsgTask* msgTask)
{
+ pthread_mutex_lock(&mMutexSystemStatus);
+
+ if (!mInstance) {
+ // Instantiating for the first time. msgTask should not be NULL
+ if (msgTask == NULL) {
+ LOC_LOGE("SystemStatus: msgTask is NULL!!");
+ pthread_mutex_unlock(&mMutexSystemStatus);
+ return NULL;
+ }
+ mInstance = new (nothrow) SystemStatus(msgTask);
+ LOC_LOGD("SystemStatus::getInstance:%p. Msgtask:%p", mInstance, msgTask);
+ }
+
+ pthread_mutex_unlock(&mMutexSystemStatus);
+ return mInstance;
+}
+
+void SystemStatus::destroyInstance()
+{
+ delete mInstance;
+ mInstance = NULL;
+}
+
+IOsObserver* SystemStatus::getOsObserver()
+{
+ return &mSysStatusObsvr;
+}
+
+SystemStatus::SystemStatus(const MsgTask* msgTask) :
+ mSysStatusObsvr(msgTask)
+{
+ int result = 0;
+ ENTRY_LOG ();
mCache.mLocation.clear();
mCache.mTimeAndClock.clear();
@@ -1196,6 +1232,8 @@ SystemStatus::SystemStatus()
mCache.mNavData.clear();
mCache.mPositionFailure.clear();
+
+ EXIT_LOG_WITH_ERROR ("%d",result);
}
/******************************************************************************