From bbab5221d23b9a25f325f53a8ee6f4e98cbcb91f Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Tue, 25 Jul 2017 20:41:15 +0900 Subject: [PATCH] Add ChargerState & EarJackState context publishers Change-Id: Ief68b30961e0d378393ad67e869dd7606625a235 Signed-off-by: Mu-Woong Lee --- include/job_scheduler_types_internal.h | 25 +++--- src/server/ContextPublisher.h | 6 +- src/server/publisher/ChargerState.cpp | 98 +++++++++++++++++++++++ src/server/publisher/EarJackState.cpp | 105 +++++++++++++++++++++++++ src/server/publisher/GpsState.cpp | 33 +++----- src/shared/JobSchedulerTypesPrivate.h | 4 + 6 files changed, 237 insertions(+), 34 deletions(-) create mode 100644 src/server/publisher/ChargerState.cpp create mode 100644 src/server/publisher/EarJackState.cpp diff --git a/include/job_scheduler_types_internal.h b/include/job_scheduler_types_internal.h index 48ab846..aae1364 100644 --- a/include/job_scheduler_types_internal.h +++ b/include/job_scheduler_types_internal.h @@ -22,12 +22,12 @@ #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" @@ -35,17 +35,24 @@ #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 diff --git a/src/server/ContextPublisher.h b/src/server/ContextPublisher.h index 27a1760..937b780 100644 --- a/src/server/ContextPublisher.h +++ b/src/server/ContextPublisher.h @@ -20,14 +20,14 @@ #include #include -#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 index 0000000..06f2325 --- /dev/null +++ b/src/server/publisher/ChargerState.cpp @@ -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 +#include + +#include +#include +#include +#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(userData); + pubs->read(); + pubs->notifyObservers(); +} diff --git a/src/server/publisher/EarJackState.cpp b/src/server/publisher/EarJackState.cpp new file mode 100644 index 0000000..4496cab --- /dev/null +++ b/src/server/publisher/EarJackState.cpp @@ -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 +#include + +#include +#include +#include +#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(userData); + pubs->read(); + pubs->notifyObservers(); +} diff --git a/src/server/publisher/GpsState.cpp b/src/server/publisher/GpsState.cpp index 49700a6..ffc653a 100644 --- a/src/server/publisher/GpsState.cpp +++ b/src/server/publisher/GpsState.cpp @@ -18,6 +18,7 @@ #include #include +#include #include #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(userData)->__update(state); + GpsState* pubs = static_cast(userData); + pubs->read(); + pubs->notifyObservers(); } diff --git a/src/shared/JobSchedulerTypesPrivate.h b/src/shared/JobSchedulerTypesPrivate.h index 299a367..15b2458 100644 --- a/src/shared/JobSchedulerTypesPrivate.h +++ b/src/shared/JobSchedulerTypesPrivate.h @@ -65,6 +65,10 @@ #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 -- 2.34.1