Add ChargerState & EarJackState context publishers 81/140581/2
authorMu-Woong Lee <muwoong.lee@samsung.com>
Tue, 25 Jul 2017 11:41:15 +0000 (20:41 +0900)
committerMu-Woong Lee <muwoong.lee@samsung.com>
Tue, 25 Jul 2017 11:46:20 +0000 (20:46 +0900)
Change-Id: Ief68b30961e0d378393ad67e869dd7606625a235
Signed-off-by: Mu-Woong Lee <muwoong.lee@samsung.com>
include/job_scheduler_types_internal.h
src/server/ContextPublisher.h
src/server/publisher/ChargerState.cpp [new file with mode: 0644]
src/server/publisher/EarJackState.cpp [new file with mode: 0644]
src/server/publisher/GpsState.cpp
src/shared/JobSchedulerTypesPrivate.h

index 48ab846b2774f75e4c1ce410a61f6229f7f8817e..aae13643ed8db37b7ad2e6c6cad734c190cdfc4a 100644 (file)
 
 #define CTX_SCHED_URI_BATTERY          CTX_SCHED_URI_PREFIX "state/battery"
 #define CTX_SCHED_URI_CHARGER          CTX_SCHED_URI_PREFIX "state/charger"
-#define CTX_SCHED_URI_GPS                      CTX_SCHED_URI_PREFIX "state/gps"
+#define CTX_SCHED_URI_DISPLAY          CTX_SCHED_URI_PREFIX "state/display"
 #define CTX_SCHED_URI_EARJACK          CTX_SCHED_URI_PREFIX "state/earjack"
+#define CTX_SCHED_URI_GPS                      CTX_SCHED_URI_PREFIX "state/gps"
+#define CTX_SCHED_URI_POWERSAVE                CTX_SCHED_URI_PREFIX "state/powersave"
 #define CTX_SCHED_URI_USB                      CTX_SCHED_URI_PREFIX "state/usb"
 #define CTX_SCHED_URI_WIFI                     CTX_SCHED_URI_PREFIX "state/wifi"
-#define CTX_SCHED_URI_DISPLAY          CTX_SCHED_URI_PREFIX "state/display"
-#define CTX_SCHED_URI_POWERSAVE                CTX_SCHED_URI_PREFIX "state/powersave"
 
 #define CTX_SCHED_URI_STATIONARY       CTX_SCHED_URI_PREFIX "event/stationary"
 #define CTX_SCHED_URI_WALKING          CTX_SCHED_URI_PREFIX "event/walking"
 #define CTX_SCHED_URI_IN_VEHICLE       CTX_SCHED_URI_PREFIX "event/in_vehicle"
 #define CTX_SCHED_URI_GEOFENCE         CTX_SCHED_URI_PREFIX "event/geofence"
 
-#define CTX_SCHED_URI_CONTACTS_DB      CTX_SCHED_URI_PREFIX "event/contacts_db"
 #define CTX_SCHED_URI_CALENDAR_DB      CTX_SCHED_URI_PREFIX "event/calendar_db"
+#define CTX_SCHED_URI_CONTACTS_DB      CTX_SCHED_URI_PREFIX "event/contacts_db"
 #define CTX_SCHED_URI_PLACE_DB         CTX_SCHED_URI_PREFIX "event/place_db"
 
 /* Attribute names */
-#define CTX_SCHED_ATTR_NAME_STATE              "state"
+#define CTX_SCHED_ATTR_NAME_IS_CONNECTED       "IsConnected"
+#define CTX_SCHED_ATTR_NAME_STATE                      "State"
+#define CTX_SCHED_ATTR_NAME_TYPE                       "Type"
 
 /* Attribute values */
-#define CTX_SCHED_ATTR_VALUE_UNDEFINED "undefined"
-#define CTX_SCHED_ATTR_VALUE_DISABLED  "disabled"
-#define CTX_SCHED_ATTR_VALUE_SEARCHING "searching"
-#define CTX_SCHED_ATTR_VALUE_CONNECTED "connected"
+#define CTX_SCHED_ATTR_VALUE_TRUE                      1
+#define CTX_SCHED_ATTR_VALUE_FALSE                     0
+
+#define CTX_SCHED_ATTR_VALUE_CONNECTED         "Connected"
+#define CTX_SCHED_ATTR_VALUE_DISABLED          "Disabled"
+#define CTX_SCHED_ATTR_VALUE_HEADSET           "Headset"
+#define CTX_SCHED_ATTR_VALUE_NORMAL                    "Normal"
+#define CTX_SCHED_ATTR_VALUE_SEARCHING         "Searching"
+#define CTX_SCHED_ATTR_VALUE_UNDEFINED         "Undefined"
 
 #endif
index 27a1760bfa6ec163738a5f3336b29a65e4fa77dd..937b7803587688c2efa0ce16e1d48077e5be21f5 100644 (file)
 #include <list>
 #include <json/json.h>
 
-#define REGISTER_PUBLISHER(URI, PUBS) \
+#define REGISTER_PUBLISHER(uri, pubs) \
        static ctx::ContextPublisher* __create(uid_t uid) \
        { \
-               return new PUBS(uid); \
+               return new pubs(uid); \
        } \
        __attribute__((__constructor__)) static void __registerPublisher() \
        { \
-               ctx::ContextPublisher::registerPublisher(URI, __create); \
+               ctx::ContextPublisher::registerPublisher((uri), __create); \
        }
 
 namespace ctx {
diff --git a/src/server/publisher/ChargerState.cpp b/src/server/publisher/ChargerState.cpp
new file mode 100644 (file)
index 0000000..06f2325
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <system_info.h>
+#include <runtime_info.h>
+
+#include <ContextTypes.h>
+#include <JobSchedulerTypesPrivate.h>
+#include <job_scheduler_types_internal.h>
+#include "../ContextPublisher.h"
+#include "../IContextObserver.h"
+
+using namespace ctx;
+
+namespace {
+       class ChargerState : public ContextPublisher {
+       public:
+               ChargerState(uid_t uid);
+               ~ChargerState();
+
+               const char* getUri() const;
+
+       protected:
+               void read();
+               void subscribe();
+               void unsubscribe();
+
+       private:
+               static void __changedCb(runtime_info_key_e infoKey, void* userData);
+       };
+}
+
+REGISTER_PUBLISHER(URI(CHARGER), ChargerState)
+
+ChargerState::ChargerState(uid_t uid)
+{
+       bool supported = false;
+       system_info_get_platform_bool("tizen.org/feature/battery", &supported);
+       IF_FAIL_THROW(supported, E_SUPPORT);
+
+       _D("Created");
+}
+
+ChargerState::~ChargerState()
+{
+       unsubscribe();
+
+       _D("Destroyed");
+}
+
+const char* ChargerState::getUri() const
+{
+       return URI(CHARGER);
+}
+
+void ChargerState::read()
+{
+       bool connected = false;
+       int err = runtime_info_get_value_bool(RUNTIME_INFO_KEY_CHARGER_CONNECTED, &connected);
+
+       if (IS_FAILED(err))
+               _E("Getting runtime information failed (%d)", err);
+
+       __data[NAME(IS_CONNECTED)] = (connected ? VALUE(TRUE) : VALUE(FALSE));
+}
+
+void ChargerState::subscribe()
+{
+       int err = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_CHARGER_CONNECTED, __changedCb, this);
+
+       if (IS_FAILED(err))
+               _E("Setting changed callback failed (%d)", err);
+}
+
+void ChargerState::unsubscribe()
+{
+       runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_CHARGER_CONNECTED);
+}
+
+void ChargerState::__changedCb(runtime_info_key_e infoKey, void* userData)
+{
+       ChargerState* pubs = static_cast<ChargerState*>(userData);
+       pubs->read();
+       pubs->notifyObservers();
+}
diff --git a/src/server/publisher/EarJackState.cpp b/src/server/publisher/EarJackState.cpp
new file mode 100644 (file)
index 0000000..4496cab
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <system_info.h>
+#include <runtime_info.h>
+
+#include <ContextTypes.h>
+#include <JobSchedulerTypesPrivate.h>
+#include <job_scheduler_types_internal.h>
+#include "../ContextPublisher.h"
+#include "../IContextObserver.h"
+
+using namespace ctx;
+
+namespace {
+       class EarJackState : public ContextPublisher {
+       public:
+               EarJackState(uid_t uid);
+               ~EarJackState();
+
+               const char* getUri() const;
+
+       protected:
+               void read();
+               void subscribe();
+               void unsubscribe();
+
+       private:
+               static void __changedCb(runtime_info_key_e infoKey, void* userData);
+       };
+}
+
+REGISTER_PUBLISHER(URI(EARJACK), EarJackState)
+
+EarJackState::EarJackState(uid_t uid)
+{
+       _D("Created");
+}
+
+EarJackState::~EarJackState()
+{
+       unsubscribe();
+
+       _D("Destroyed");
+}
+
+const char* EarJackState::getUri() const
+{
+       return URI(EARJACK);
+}
+
+void EarJackState::read()
+{
+       int state = RUNTIME_INFO_AUDIO_JACK_STATUS_UNCONNECTED;
+       int err = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &state);
+
+       if (IS_FAILED(err))
+               _E("Getting runtime information failed (%d)", err);
+
+       if (state == RUNTIME_INFO_AUDIO_JACK_STATUS_CONNECTED_3WIRE) {
+               __data[NAME(IS_CONNECTED)] = VALUE(TRUE);
+               __data[NAME(TYPE)] = VALUE(NORMAL);
+
+       } else if (state == RUNTIME_INFO_AUDIO_JACK_STATUS_CONNECTED_4WIRE) {
+               __data[NAME(IS_CONNECTED)] = VALUE(TRUE);
+               __data[NAME(TYPE)] = VALUE(HEADSET);
+
+       } else {
+               __data[NAME(IS_CONNECTED)] = VALUE(FALSE);
+               __data.removeMember(NAME(TYPE));
+       }
+}
+
+void EarJackState::subscribe()
+{
+       int err = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, __changedCb, this);
+
+       if (IS_FAILED(err))
+               _E("Setting changed callback failed (%d)", err);
+}
+
+void EarJackState::unsubscribe()
+{
+       runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS);
+}
+
+void EarJackState::__changedCb(runtime_info_key_e infoKey, void* userData)
+{
+       EarJackState* pubs = static_cast<EarJackState*>(userData);
+       pubs->read();
+       pubs->notifyObservers();
+}
index 49700a638b20a5454843ab113c464a1d915ec546..ffc653a5507f06b401fe30abec8e858ae8ccedeb 100644 (file)
@@ -18,6 +18,7 @@
 #include <runtime_info.h>
 
 #include <ContextTypes.h>
+#include <JobSchedulerTypesPrivate.h>
 #include <job_scheduler_types_internal.h>
 #include "../ContextPublisher.h"
 #include "../IContextObserver.h"
@@ -38,26 +39,24 @@ namespace {
                void unsubscribe();
 
        private:
-               void __update(int state);
-
                static void __changedCb(runtime_info_key_e infoKey, void* userData);
        };
 }
 
-REGISTER_PUBLISHER(CTX_SCHED_URI_GPS, GpsState)
+REGISTER_PUBLISHER(URI(GPS), GpsState)
 
 static const char* __state_to_string(int state)
 {
        if (state == RUNTIME_INFO_GPS_STATUS_DISABLED)
-               return CTX_SCHED_ATTR_VALUE_DISABLED;
+               return VALUE(DISABLED);
 
        if (state == RUNTIME_INFO_GPS_STATUS_SEARCHING)
-               return CTX_SCHED_ATTR_VALUE_SEARCHING;
+               return VALUE(SEARCHING);
 
        if (state == RUNTIME_INFO_GPS_STATUS_CONNECTED)
-               return CTX_SCHED_ATTR_VALUE_CONNECTED;
+               return VALUE(CONNECTED);
 
-       return CTX_SCHED_ATTR_VALUE_UNDEFINED;
+       return VALUE(UNDEFINED);
 }
 
 GpsState::GpsState(uid_t uid)
@@ -78,7 +77,7 @@ GpsState::~GpsState()
 
 const char* GpsState::getUri() const
 {
-       return CTX_SCHED_URI_GPS;
+       return URI(GPS);
 }
 
 void GpsState::read()
@@ -89,7 +88,7 @@ void GpsState::read()
        if (IS_FAILED(err))
                _E("Getting runtime information failed (%d)", err);
 
-       __data[CTX_SCHED_ATTR_NAME_STATE] = __state_to_string(state);
+       __data[NAME(STATE)] = __state_to_string(state);
 }
 
 void GpsState::subscribe()
@@ -105,19 +104,9 @@ void GpsState::unsubscribe()
        runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_GPS_STATUS);
 }
 
-void GpsState::__update(int state)
-{
-       __data[CTX_SCHED_ATTR_NAME_STATE] = __state_to_string(state);
-       notifyObservers();
-}
-
 void GpsState::__changedCb(runtime_info_key_e infoKey, void* userData)
 {
-       int state = RUNTIME_INFO_GPS_STATUS_DISABLED;
-       int err = runtime_info_get_value_int(RUNTIME_INFO_KEY_GPS_STATUS, &state);
-
-       if (IS_FAILED(err))
-               _E("Getting runtime information failed (%d)", err);
-
-       static_cast<GpsState*>(userData)->__update(state);
+       GpsState* pubs = static_cast<GpsState*>(userData);
+       pubs->read();
+       pubs->notifyObservers();
 }
index 299a3677d36d296b1bee712015392746f967a7fa..15b2458747055b405739722379c31b91b108e16a 100644 (file)
 #define SIGNAL_START_JOB       "JobStarted"
 #define SIGNAL_STOP_JOB                "JobToBeStopped"
 
+#define URI(x)         CTX_SCHED_URI_##x
+#define NAME(x)                CTX_SCHED_ATTR_NAME_##x
+#define VALUE(x)       CTX_SCHED_ATTR_VALUE_##x
+
 #ifdef PRINT_ERR
 #undef PRINT_ERR
 #endif