#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
#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 {
--- /dev/null
+/*
+ * 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();
+}
--- /dev/null
+/*
+ * 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();
+}
#include <runtime_info.h>
#include <ContextTypes.h>
+#include <JobSchedulerTypesPrivate.h>
#include <job_scheduler_types_internal.h>
#include "../ContextPublisher.h"
#include "../IContextObserver.h"
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)
const char* GpsState::getUri() const
{
- return CTX_SCHED_URI_GPS;
+ return URI(GPS);
}
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()
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();
}
#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