#include <sensor_info_manager.h>
#include <vector>
#include <algorithm>
+#include "dbus_listener.h"
using std::vector;
#define API __attribute__((visibility("default")))
#endif
+#ifndef VCONFKEY_SETAPPL_PSMODE
+#define VCONFKEY_SETAPPL_PSMODE "db/setting/psmode"
+#endif
+
#define DEFAULT_INTERVAL POLL_10HZ_MS
+#define CONVERT_OPTION_PAUSE_POLICY(option) ((option) ^ 0b11)
+
static cmutex lock;
-static int g_power_save_state = 0;
+static int g_power_save_state = SENSORD_PAUSE_NONE;
static int get_power_save_state(void);
static void power_save_state_cb(keynode_t *node, void *data);
static void clean_up(void);
static bool change_sensor_rep(sensor_id_t sensor_id, sensor_rep &prev_rep, sensor_rep &cur_rep);
static void restore_session(void);
-static bool register_event(int handle, unsigned int event_type, unsigned int interval, int max_batch_latency, int cb_type, void* cb, void *user_data);
+static bool register_event(int handle, unsigned int event_type, unsigned int interval, int max_batch_latency, void* cb, void *user_data);
class initiator {
public:
g_power_save_state = get_power_save_state();
_D("power_save_state = [%d]", g_power_save_state);
vconf_notify_key_changed(VCONFKEY_PM_STATE, power_save_state_cb, NULL);
+ vconf_notify_key_changed(VCONFKEY_SETAPPL_PSMODE, power_save_state_cb, NULL);
}
}
if (g_power_save_state_cb_cnt == 0) {
_D("Power save callback is unregistered");
vconf_ignore_key_changed(VCONFKEY_PM_STATE, power_save_state_cb);
+ vconf_ignore_key_changed(VCONFKEY_SETAPPL_PSMODE, power_save_state_cb);
}
}
sensord_disconnect(*it_handle);
++it_handle;
}
+
+ sensor_event_listener::get_instance().clear();
}
-static int get_power_save_state (void)
+static int get_power_save_state(void)
{
+ int ret;
int state = 0;
- int pm_state;
+ int pm_state, ps_state;
+
+ ret = vconf_get_int(VCONFKEY_PM_STATE, &pm_state);
+
+ if (!ret && pm_state == VCONFKEY_PM_STATE_LCDOFF)
+ state |= SENSORD_PAUSE_ON_DISPLAY_OFF;
- vconf_get_int(VCONFKEY_PM_STATE, &pm_state);
+ ret = vconf_get_int(VCONFKEY_SETAPPL_PSMODE, &ps_state);
- if (pm_state == VCONFKEY_PM_STATE_LCDOFF)
- state |= SENSOR_OPTION_ON_IN_SCREEN_OFF;
+ if (!ret && ps_state != SETTING_PSMODE_NORMAL)
+ state |= SENSORD_PAUSE_ON_POWERSAVE_MODE;
return state;
}
while (it_sensor != sensors.end()) {
sensor_client_info::get_instance().get_sensor_rep(*it_sensor, prev_rep);
- sensor_event_listener::get_instance().operate_sensor(*it_sensor, cur_power_save_state);
+ sensor_client_info::get_instance().set_pause_policy(*it_sensor, cur_power_save_state);
sensor_client_info::get_instance().get_sensor_rep(*it_sensor, cur_rep);
change_sensor_rep(*it_sensor, prev_rep, cur_rep);
}
}
+bool restore_attributes(int client_id, sensor_id_t sensor, command_channel *cmd_channel)
+{
+ sensor_handle_info_map handle_infos;
+
+ sensor_client_info::get_instance().get_sensor_handle_info(sensor, handle_infos);
+
+ for (auto it_handles = handle_infos.begin(); it_handles != handle_infos.end(); ++it_handles) {
+ sensor_handle_info info = it_handles->second;
+
+ for (auto it = info.attributes_int.begin(); it != info.attributes_int.end(); ++it) {
+ int attribute = it->first;
+ int value = it->second;
+ if (!cmd_channel->cmd_set_attribute_int(attribute, value)) {
+ _E("Failed to send cmd_set_attribute_int(%d, %d) for %s",
+ client_id, value, get_client_name());
+ return false;
+ }
+ }
+
+ for (auto it = info.attributes_str.begin(); it != info.attributes_str.end(); ++it) {
+ int attribute = it->first;
+ const char *value = it->second->get();
+ int len = it->second->size();
+ if (!cmd_channel->cmd_set_attribute_str(attribute, value, len)) {
+ _E("Failed to send cmd_set_attribute_str(%d, %d, %s) for %s",
+ client_id, len, value, get_client_name());
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
void restore_session(void)
{
while (it_sensor != sensors.end()) {
cmd_channel = new(std::nothrow) command_channel();
- retm_if (!cmd_channel, "Failed to allocate memory");
+ retm_if(!cmd_channel, "Failed to allocate memory");
if (!cmd_channel->create_channel()) {
_E("%s failed to create command channel for %s", get_client_name(), get_sensor_name(*it_sensor));
sensor_rep prev_rep, cur_rep;
prev_rep.active = false;
- prev_rep.option = SENSOR_OPTION_DEFAULT;
+ prev_rep.pause_policy = SENSORD_PAUSE_ALL;
prev_rep.interval = 0;
sensor_client_info::get_instance().get_sensor_rep(*it_sensor, cur_rep);
goto FAILED;
}
+ if (!restore_attributes(client_id, *it_sensor, cmd_channel)) {
+ _E("Failed to restore attributes(%s) for %s", get_sensor_name(*it_sensor), get_client_name());
+ goto FAILED;
+ }
++it_sensor;
}
return !(add_vec.empty() && del_vec.empty());
}
-
static bool change_sensor_rep(sensor_id_t sensor_id, sensor_rep &prev_rep, sensor_rep &cur_rep)
{
int client_id;
}
client_id = sensor_client_info::get_instance().get_client_id();
- retvm_if ((client_id < 0), false, "Invalid client id : %d, %s, %s", client_id, get_sensor_name(sensor_id), get_client_name());
+ retvm_if((client_id < 0), false, "Invalid client id : %d, %s, %s", client_id, get_sensor_name(sensor_id), get_client_name());
get_events_diff(prev_rep.event_types, cur_rep.event_types, add_event_types, del_event_types);
if (cur_rep.active) {
- if (prev_rep.option != cur_rep.option) {
- if (!cmd_channel->cmd_set_option(cur_rep.option)) {
- _E("Sending cmd_set_option(%d, %s, %d) failed for %s", client_id, get_sensor_name(sensor_id), cur_rep.option, get_client_name());
+ if (prev_rep.pause_policy != cur_rep.pause_policy) {
+ if (!cmd_channel->cmd_set_pause_policy(cur_rep.pause_policy)) {
+ _E("Sending cmd_set_pause_policy(%d, %s, %d) failed for %s", client_id, get_sensor_name(sensor_id), cur_rep.pause_policy, get_client_name());
return false;
}
}
return false;
}
}
-
}
if (prev_rep.active && !del_event_types.empty()) {
return true;
}
-API int sensord_get_sensor_list_ex(sensor_type_t type, sensor_t **list, int *sensor_count)
+API int sensord_get_sensors(sensor_type_t type, sensor_t **list, int *sensor_count)
{
- retvm_if (!get_sensor_list(), -EPERM, "Fail to get sensor list from server");
+ retvm_if(!get_sensor_list(), -EPERM, "Fail to get sensor list from server");
vector<sensor_info *> sensor_infos = sensor_info_manager::get_instance().get_infos(type);
return OP_SUCCESS;
}
-API int sensord_get_sensor_ex(sensor_type_t type, sensor_t *sensor)
+API int sensord_get_default_sensor(sensor_type_t type, sensor_t *sensor)
{
- retvm_if (!get_sensor_list(), -EPERM, "Fail to get sensor list from server");
+ retvm_if(!get_sensor_list(), -EPERM, "Fail to get sensor list from server");
const sensor_info *info;
API bool sensord_get_sensor_list(sensor_type_t type, sensor_t **list, int *sensor_count)
{
- return (sensord_get_sensor_list_ex(type, list, sensor_count) == OP_SUCCESS);
+ return (sensord_get_sensors(type, list, sensor_count) == OP_SUCCESS);
}
API sensor_t sensord_get_sensor(sensor_type_t type)
{
sensor_t sensor;
- sensord_get_sensor_ex(type, &sensor);
+ sensord_get_default_sensor(type, &sensor);
return sensor;
}
{
sensor_info* info = sensor_to_sensor_info(sensor);
- retvm_if (!sensor_info_manager::get_instance().is_valid(info) || !type,
+ retvm_if(!sensor_info_manager::get_instance().is_valid(info) || !type,
NULL, "Invalid param: sensor (%p), type(%p)", sensor, type);
*type = info->get_type();
{
sensor_info* info = sensor_to_sensor_info(sensor);
- retvm_if (!sensor_info_manager::get_instance().is_valid(info),
+ retvm_if(!sensor_info_manager::get_instance().is_valid(info),
NULL, "Invalid param: sensor (%p)", sensor);
return info->get_name();
{
sensor_info* info = sensor_to_sensor_info(sensor);
- retvm_if (!sensor_info_manager::get_instance().is_valid(info),
+ retvm_if(!sensor_info_manager::get_instance().is_valid(info),
NULL, "Invalid param: sensor (%p)", sensor);
return info->get_vendor();
{
sensor_info* info = sensor_to_sensor_info(sensor);
- retvm_if (!sensor_info_manager::get_instance().is_valid(info) || !privilege,
+ retvm_if(!sensor_info_manager::get_instance().is_valid(info) || !privilege,
false, "Invalid param: sensor (%p), privilege(%p)", sensor, privilege);
*privilege = info->get_privilege();
{
sensor_info* info = sensor_to_sensor_info(sensor);
- retvm_if (!sensor_info_manager::get_instance().is_valid(info) || !min_range,
+ retvm_if(!sensor_info_manager::get_instance().is_valid(info) || !min_range,
false, "Invalid param: sensor (%p), min_range(%p)", sensor, min_range);
*min_range = info->get_min_range();
{
sensor_info* info = sensor_to_sensor_info(sensor);
- retvm_if (!sensor_info_manager::get_instance().is_valid(info) || !max_range,
+ retvm_if(!sensor_info_manager::get_instance().is_valid(info) || !max_range,
false, "Invalid param: sensor (%p), max_range(%p)", sensor, max_range);
*max_range = info->get_max_range();
{
sensor_info* info = sensor_to_sensor_info(sensor);
- retvm_if (!sensor_info_manager::get_instance().is_valid(info) || !resolution,
+ retvm_if(!sensor_info_manager::get_instance().is_valid(info) || !resolution,
false, "Invalid param: sensor (%p), resolution(%p)", sensor, resolution);
*resolution = info->get_resolution();
{
sensor_info* info = sensor_to_sensor_info(sensor);
- retvm_if (!sensor_info_manager::get_instance().is_valid(info) || !min_interval,
+ retvm_if(!sensor_info_manager::get_instance().is_valid(info) || !min_interval,
false, "Invalid param: sensor (%p), min_interval(%p)", sensor, min_interval);
*min_interval = info->get_min_interval();
{
sensor_info* info = sensor_to_sensor_info(sensor);
- retvm_if (!sensor_info_manager::get_instance().is_valid(info) || !fifo_count,
+ retvm_if(!sensor_info_manager::get_instance().is_valid(info) || !fifo_count,
false, "Invalid param: sensor (%p), fifo_count(%p)", sensor, fifo_count);
*fifo_count = info->get_fifo_count();
{
sensor_info* info = sensor_to_sensor_info(sensor);
- retvm_if (!sensor_info_manager::get_instance().is_valid(info) || !max_batch_count,
+ retvm_if(!sensor_info_manager::get_instance().is_valid(info) || !max_batch_count,
false, "Invalid param: sensor (%p), max_batch_count(%p)", sensor, max_batch_count);
*max_batch_count = info->get_max_batch_count();
{
sensor_info* info = sensor_to_sensor_info(sensor);
- retvm_if (!sensor_info_manager::get_instance().is_valid(info) || !event_types || !count,
+ retvm_if(!sensor_info_manager::get_instance().is_valid(info) || !event_types || !count,
false, "Invalid param: sensor (%p), event_types(%p), count(%p)", sensor, event_types, count);
unsigned int event_type;
{
sensor_info* info = sensor_to_sensor_info(sensor);
- retvm_if (!sensor_info_manager::get_instance().is_valid(info) || !event_type || !supported,
+ retvm_if(!sensor_info_manager::get_instance().is_valid(info) || !event_type || !supported,
false, "Invalid param: sensor (%p), event_type(%p), supported(%p)", sensor, event_type, supported);
*supported = info->is_supported_event(event_type);
{
sensor_info* info = sensor_to_sensor_info(sensor);
- retvm_if (!sensor_info_manager::get_instance().is_valid(info),
+ retvm_if(!sensor_info_manager::get_instance().is_valid(info),
false, "Invalid param: sensor (%p)", sensor);
return info->is_wakeup_supported();
sensor_info* info = sensor_to_sensor_info(sensor);
- retvm_if (!sensor_info_manager::get_instance().is_valid(info),
+ retvm_if(!sensor_info_manager::get_instance().is_valid(info),
OP_ERROR, "Invalid param: sensor (%p)", sensor);
sensor_id_t sensor_id = info->get_id();
if (!sensor_client_info::get_instance().has_client_id()) {
first_connection = true;
- if(!cmd_channel->cmd_get_id(client_id)) {
+ if (!cmd_channel->cmd_get_id(client_id)) {
_E("Sending cmd_get_id() failed for %s", get_sensor_name(sensor_id));
sensor_client_info::get_instance().close_command_channel(sensor_id);
sensor_client_info::get_instance().delete_handle(handle);
_I("%s[%d] connects with %s[%d]", get_client_name(), client_id, get_sensor_name(sensor_id), handle);
- sensor_client_info::get_instance().set_sensor_params(handle, SENSOR_STATE_STOPPED, SENSOR_OPTION_DEFAULT);
+ sensor_client_info::get_instance().set_sensor_params(handle, SENSOR_STATE_STOPPED, SENSORD_PAUSE_ALL);
if (!sensor_registered) {
- if(!cmd_channel->cmd_hello(sensor_id)) {
+ if (!cmd_channel->cmd_hello(sensor_id)) {
_E("Sending cmd_hello(%s, %d) failed for %s", get_sensor_name(sensor_id), client_id, get_client_name());
sensor_client_info::get_instance().close_command_channel(sensor_id);
sensor_client_info::get_instance().delete_handle(handle);
}
set_power_save_state_cb();
+ dbus_listener::init();
return handle;
}
}
client_id = sensor_client_info::get_instance().get_client_id();
- retvm_if ((client_id < 0), false, "Invalid client id : %d, handle: %d, %s, %s", client_id, handle, get_sensor_name(sensor_id), get_client_name());
+ retvm_if((client_id < 0), false, "Invalid client id : %d, handle: %d, %s, %s", client_id, handle, get_sensor_name(sensor_id), get_client_name());
_I("%s disconnects with %s[%d]", get_client_name(), get_sensor_name(sensor_id), handle);
+ if (sensor_client_info::get_instance().get_passive_mode(handle)) {
+ _W("%s[%d] for %s is on passive mode while disconnecting.",
+ get_sensor_name(sensor_id), handle, get_client_name());
+
+ command_channel *cmd_channel;
+ event_type_vector event_types;
+ sensor_client_info::get_instance().get_active_event_types(sensor_id, event_types);
+
+ for (auto it = event_types.begin(); it != event_types.end(); ++it)
+ sensord_unregister_event(handle, *it);
+
+ if (!sensor_client_info::get_instance().get_command_channel(sensor_id, &cmd_channel)) {
+ _E("client %s failed to get command channel for %s", get_client_name(), get_sensor_name(sensor_id));
+ return false;
+ }
+
+ if (!cmd_channel->cmd_unset_batch()) {
+ _E("Sending cmd_unset_interval(%d, %s) failed for %s", client_id, get_sensor_name(sensor_id), get_client_name());
+ return false;
+ }
+ }
+
if (sensor_state != SENSOR_STATE_STOPPED) {
_W("%s[%d] for %s is not stopped before disconnecting.",
get_sensor_name(sensor_id), handle, get_client_name());
sensor_client_info::get_instance().set_client_id(CLIENT_ID_INVALID);
if (!sensor_client_info::get_instance().is_sensor_registered(sensor_id)) {
- if(!cmd_channel->cmd_byebye()) {
+ if (!cmd_channel->cmd_byebye()) {
_E("Sending cmd_byebye(%d, %s) failed for %s", client_id, get_sensor_name(sensor_id), get_client_name());
return false;
}
return true;
}
-
-static bool register_event(int handle, unsigned int event_type, unsigned int interval, int max_batch_latency, int cb_type, void* cb, void *user_data)
+static bool register_event(int handle, unsigned int event_type, unsigned int interval, int max_batch_latency, void* cb, void *user_data)
{
sensor_id_t sensor_id;
sensor_rep prev_rep, cur_rep;
bool ret;
- retvm_if (!cb, false, "callback is NULL");
+ retvm_if(!cb, false, "callback is NULL");
AUTOLOCK(lock);
if (interval == 0)
interval = DEFAULT_INTERVAL;
- _I("%s registers event %s[0x%x] for sensor %s[%d] with interval: %d, latency: %d, cb: 0x%x, user_data: 0x%x",
+ _I("%s registers event %s[%#x] for sensor %s[%d] with interval: %d, latency: %d, cb: %#x, user_data: %#x",
get_client_name(), get_event_name(event_type), event_type, get_sensor_name(sensor_id),
handle, interval, max_batch_latency, cb, user_data);
sensor_client_info::get_instance().get_sensor_rep(sensor_id, prev_rep);
- sensor_client_info::get_instance().register_event(handle, event_type, interval, max_batch_latency, cb_type, cb, user_data);
+ sensor_client_info::get_instance().register_event(handle, event_type, interval, max_batch_latency, cb, user_data);
sensor_client_info::get_instance().get_sensor_rep(sensor_id, cur_rep);
ret = change_sensor_rep(sensor_id, prev_rep, cur_rep);
API bool sensord_register_event(int handle, unsigned int event_type, unsigned int interval, unsigned int max_batch_latency, sensor_cb_t cb, void *user_data)
{
- return register_event(handle, event_type, interval, max_batch_latency, SENSOR_EVENT_CB, (void *)cb, user_data);
+ return register_event(handle, event_type, interval, max_batch_latency, (void *)cb, user_data);
}
-API bool sensord_register_hub_event(int handle, unsigned int event_type, unsigned int interval, unsigned int max_batch_latency, sensorhub_cb_t cb, void *user_data)
-{
- return register_event(handle, event_type, interval, max_batch_latency, SENSORHUB_EVENT_CB, (void *)cb, user_data);
-}
-
-
API bool sensord_unregister_event(int handle, unsigned int event_type)
{
sensor_id_t sensor_id;
sensor_rep prev_rep, cur_rep;
bool ret;
unsigned int prev_interval, prev_latency;
- int prev_cb_type;
void *prev_cb;
void *prev_user_data;
return false;
}
- _I("%s unregisters event %s[0x%x] for sensor %s[%d]", get_client_name(), get_event_name(event_type),
+ _I("%s unregisters event %s[%#x] for sensor %s[%d]", get_client_name(), get_event_name(event_type),
event_type, get_sensor_name(sensor_id), handle);
sensor_client_info::get_instance().get_sensor_rep(sensor_id, prev_rep);
- sensor_client_info::get_instance().get_event_info(handle, event_type, prev_interval, prev_latency, prev_cb_type, prev_cb, prev_user_data);
+ sensor_client_info::get_instance().get_event_info(handle, event_type, prev_interval, prev_latency, prev_cb, prev_user_data);
if (!sensor_client_info::get_instance().unregister_event(handle, event_type)) {
- _E("%s try to unregister non registered event %s[0x%x] for sensor %s[%d]",
- get_client_name(),get_event_name(event_type), event_type, get_sensor_name(sensor_id), handle);
+ _E("%s try to unregister non registered event %s[%#x] for sensor %s[%d]",
+ get_client_name(), get_event_name(event_type), event_type, get_sensor_name(sensor_id), handle);
return false;
}
sensor_client_info::get_instance().get_sensor_rep(sensor_id, cur_rep);
ret = change_sensor_rep(sensor_id, prev_rep, cur_rep);
+ if (sensor_client_info::get_instance().get_passive_mode(handle))
+ sensor_client_info::get_instance().set_passive_mode(handle, false);
+
if (!ret)
- sensor_client_info::get_instance().register_event(handle, event_type, prev_interval, prev_latency, prev_cb_type, prev_cb, prev_user_data);
+ sensor_client_info::get_instance().register_event(handle, event_type, prev_interval, prev_latency, prev_cb, prev_user_data);
return ret;
-
}
-
API bool sensord_register_accuracy_cb(int handle, sensor_accuracy_changed_cb_t cb, void *user_data)
{
sensor_id_t sensor_id;
- retvm_if (!cb, false, "callback is NULL");
+ retvm_if(!cb, false, "callback is NULL");
AUTOLOCK(lock);
return false;
}
-
- _I("%s registers accuracy_changed_cb for sensor %s[%d] with cb: 0x%x, user_data: 0x%x",
+ _I("%s registers accuracy_changed_cb for sensor %s[%d] with cb: %#x, user_data: %#x",
get_client_name(), get_sensor_name(sensor_id), handle, cb, user_data);
sensor_client_info::get_instance().register_accuracy_cb(handle, cb , user_data);
return true;
-
}
API bool sensord_unregister_accuracy_cb(int handle)
return false;
}
-
_I("%s unregisters accuracy_changed_cb for sensor %s[%d]",
get_client_name(), get_sensor_name(sensor_id), handle);
return true;
}
-
API bool sensord_start(int handle, int option)
{
sensor_id_t sensor_id;
sensor_rep prev_rep, cur_rep;
bool ret;
- int prev_state, prev_option;
+ int prev_state, prev_pause;
+ int pause;
AUTOLOCK(lock);
return false;
}
- retvm_if ((option < 0) || (option >= SENSOR_OPTION_END), false, "Invalid option value : %d, handle: %d, %s, %s",
+ retvm_if((option < 0) || (option >= SENSOR_OPTION_END), false, "Invalid option value : %d, handle: %d, %s, %s",
option, handle, get_sensor_name(sensor_id), get_client_name());
_I("%s starts %s[%d], with option: %d, power save state: %d", get_client_name(), get_sensor_name(sensor_id),
handle, option, g_power_save_state);
- if (g_power_save_state && !(g_power_save_state & option)) {
- sensor_client_info::get_instance().set_sensor_params(handle, SENSOR_STATE_PAUSED, option);
+ pause = CONVERT_OPTION_PAUSE_POLICY(option);
+
+ if (g_power_save_state && (g_power_save_state & pause)) {
+ sensor_client_info::get_instance().set_sensor_params(handle, SENSOR_STATE_PAUSED, pause);
return true;
}
sensor_client_info::get_instance().get_sensor_rep(sensor_id, prev_rep);
- sensor_client_info::get_instance().get_sensor_params(handle, prev_state, prev_option);
- sensor_client_info::get_instance().set_sensor_params(handle, SENSOR_STATE_STARTED, option);
+ sensor_client_info::get_instance().get_sensor_params(handle, prev_state, prev_pause);
+ sensor_client_info::get_instance().set_sensor_params(handle, SENSOR_STATE_STARTED, pause);
sensor_client_info::get_instance().get_sensor_rep(sensor_id, cur_rep);
ret = change_sensor_rep(sensor_id, prev_rep, cur_rep);
if (!ret)
- sensor_client_info::get_instance().set_sensor_params(handle, prev_state, prev_option);
+ sensor_client_info::get_instance().set_sensor_params(handle, prev_state, prev_pause);
return ret;
}
sensor_id_t sensor_id;
int sensor_state;
bool ret;
- int prev_state, prev_option;
+ int prev_state, prev_pause;
sensor_rep prev_rep, cur_rep;
return false;
}
- retvm_if ((sensor_state == SENSOR_STATE_STOPPED), true, "%s already stopped with %s[%d]",
+ retvm_if((sensor_state == SENSOR_STATE_STOPPED), true, "%s already stopped with %s[%d]",
get_client_name(), get_sensor_name(sensor_id), handle);
-
_I("%s stops sensor %s[%d]", get_client_name(), get_sensor_name(sensor_id), handle);
sensor_client_info::get_instance().get_sensor_rep(sensor_id, prev_rep);
- sensor_client_info::get_instance().get_sensor_params(handle, prev_state, prev_option);
+ sensor_client_info::get_instance().get_sensor_params(handle, prev_state, prev_pause);
sensor_client_info::get_instance().set_sensor_state(handle, SENSOR_STATE_STOPPED);
sensor_client_info::get_instance().get_sensor_rep(sensor_id, cur_rep);
ret = change_sensor_rep(sensor_id, prev_rep, cur_rep);
if (!ret)
- sensor_client_info::get_instance().set_sensor_params(handle, prev_state, prev_option);
+ sensor_client_info::get_instance().set_sensor_params(handle, prev_state, prev_pause);
return ret;
}
-
static bool change_event_batch(int handle, unsigned int event_type, unsigned int interval, unsigned int latency)
{
sensor_id_t sensor_id;
sensor_rep prev_rep, cur_rep;
bool ret;
unsigned int prev_interval, prev_latency;
- int prev_cb_type;
void *prev_cb;
void *prev_user_data;
if (interval == 0)
interval = DEFAULT_INTERVAL;
- _I("%s changes batch of event %s[0x%x] for %s[%d] to (%d, %d)", get_client_name(), get_event_name(event_type),
+ _I("%s changes batch of event %s[%#x] for %s[%d] to (%d, %d)", get_client_name(), get_event_name(event_type),
event_type, get_sensor_name(sensor_id), handle, interval, latency);
sensor_client_info::get_instance().get_sensor_rep(sensor_id, prev_rep);
- sensor_client_info::get_instance().get_event_info(handle, event_type, prev_interval, prev_latency, prev_cb_type, prev_cb, prev_user_data);
+ sensor_client_info::get_instance().get_event_info(handle, event_type, prev_interval, prev_latency, prev_cb, prev_user_data);
if (!sensor_client_info::get_instance().set_event_batch(handle, event_type, interval, latency))
return false;
API bool sensord_change_event_interval(int handle, unsigned int event_type, unsigned int interval)
{
unsigned int prev_interval, prev_latency;
- int prev_cb_type;
void *prev_cb;
void *prev_user_data;
AUTOLOCK(lock);
- if (!sensor_client_info::get_instance().get_event_info(handle, event_type, prev_interval, prev_latency, prev_cb_type, prev_cb, prev_user_data)) {
- _E("Failed to get event info with handle = %d, event_type = 0x%x", handle, event_type);
+ if (!sensor_client_info::get_instance().get_event_info(handle, event_type, prev_interval, prev_latency, prev_cb, prev_user_data)) {
+ _E("Failed to get event info with handle = %d, event_type = %#x", handle, event_type);
return false;
}
- _I("handle = %d, event_type = 0x%x, interval = %d, prev_latency = %d", handle, event_type, interval, prev_latency);
+ _I("handle = %d, event_type = %#x, interval = %d, prev_latency = %d", handle, event_type, interval, prev_latency);
return change_event_batch(handle, event_type, interval, prev_latency);
}
API bool sensord_change_event_max_batch_latency(int handle, unsigned int event_type, unsigned int max_batch_latency)
{
unsigned int prev_interval, prev_latency;
- int prev_cb_type;
void *prev_cb;
void *prev_user_data;
AUTOLOCK(lock);
- if (!sensor_client_info::get_instance().get_event_info(handle, event_type, prev_interval, prev_latency, prev_cb_type, prev_cb, prev_user_data)) {
- _E("Failed to get event info with handle = %d, event_type = 0x%x", handle, event_type);
+ if (!sensor_client_info::get_instance().get_event_info(handle, event_type, prev_interval, prev_latency, prev_cb, prev_user_data)) {
+ _E("Failed to get event info with handle = %d, event_type = %#x", handle, event_type);
return false;
}
return change_event_batch(handle, event_type, prev_interval, max_batch_latency);
}
-API bool sensord_change_event_maincontext(int handle, unsigned int event_type, GMainContext *maincontext)
-{
- AUTOLOCK(lock);
-
- if (!sensor_client_info::get_instance().set_event_maincontext(handle, event_type, maincontext)) {
- _E("Failed to get event info with handle = %d, event_type = 0x%x, maincontext = 0x%x", handle, event_type, maincontext);
- return false;
- }
-
- _I("handle = %d, event_type = 0x%x, maincontext = 0x%x", handle, event_type, maincontext);
- return true;
-}
-
-API bool sensord_set_option(int handle, int option)
+static int change_pause_policy(int handle, int pause)
{
sensor_id_t sensor_id;
sensor_rep prev_rep, cur_rep;
int sensor_state;
bool ret;
- int prev_state, prev_option;
+ int prev_state, prev_pause;
AUTOLOCK(lock);
+ retvm_if((pause < 0) || (pause >= SENSORD_PAUSE_END), -EINVAL,
+ "Invalid pause value : %d, handle: %d, %s, %s",
+ pause, handle, get_sensor_name(sensor_id), get_client_name());
+
if (!sensor_client_info::get_instance().get_sensor_state(handle, sensor_state)||
!sensor_client_info::get_instance().get_sensor_id(handle, sensor_id)) {
_E("client %s failed to get handle information", get_client_name());
- return false;
+ return -EPERM;
}
- retvm_if ((option < 0) || (option >= SENSOR_OPTION_END), false, "Invalid option value : %d, handle: %d, %s, %s",
- option, handle, get_sensor_name(sensor_id), get_client_name());
-
-
sensor_client_info::get_instance().get_sensor_rep(sensor_id, prev_rep);
- sensor_client_info::get_instance().get_sensor_params(handle, prev_state, prev_option);
+ sensor_client_info::get_instance().get_sensor_params(handle, prev_state, prev_pause);
if (g_power_save_state) {
- if ((option & g_power_save_state) && (sensor_state == SENSOR_STATE_PAUSED))
- sensor_client_info::get_instance().set_sensor_state(handle, SENSOR_STATE_STARTED);
- else if (!(option & g_power_save_state) && (sensor_state == SENSOR_STATE_STARTED))
+ if ((pause & g_power_save_state) && (sensor_state == SENSOR_STATE_STARTED))
sensor_client_info::get_instance().set_sensor_state(handle, SENSOR_STATE_PAUSED);
+ else if (!(pause & g_power_save_state) && (sensor_state == SENSOR_STATE_PAUSED))
+ sensor_client_info::get_instance().set_sensor_state(handle, SENSOR_STATE_STARTED);
}
- sensor_client_info::get_instance().set_sensor_option(handle, option);
+ sensor_client_info::get_instance().set_sensor_pause_policy(handle, pause);
sensor_client_info::get_instance().get_sensor_rep(sensor_id, cur_rep);
ret = change_sensor_rep(sensor_id, prev_rep, cur_rep);
if (!ret)
- sensor_client_info::get_instance().set_sensor_option(handle, prev_option);
+ sensor_client_info::get_instance().set_sensor_pause_policy(handle, prev_pause);
- return ret;
+ return (ret ? OP_SUCCESS : OP_ERROR);
+}
+static int change_axis_orientation(int handle, int axis_orientation)
+{
+ sensor_event_listener::get_instance().set_sensor_axis(axis_orientation);
+ return OP_SUCCESS;
}
-API int sensord_set_attribute_int(int handle, int attribute, int value)
+static int change_attribute_int(int handle, int attribute, int value)
{
sensor_id_t sensor_id;
command_channel *cmd_channel;
}
client_id = sensor_client_info::get_instance().get_client_id();
- retvm_if ((client_id < 0), -EPERM,
+ retvm_if((client_id < 0), -EPERM,
"Invalid client id : %d, handle: %d, %s, %s",
client_id, handle, get_sensor_name(sensor_id), get_client_name());
if (!cmd_channel->cmd_set_attribute_int(attribute, value)) {
_E("Sending cmd_set_attribute_int(%d, %d) failed for %s",
- client_id, value, get_client_name);
+ client_id, value, get_client_name());
return -EPERM;
}
+ sensor_client_info::get_instance().set_attribute(handle, attribute, value);
+
return OP_SUCCESS;
}
+API bool sensord_set_option(int handle, int option)
+{
+ return (change_pause_policy(handle, CONVERT_OPTION_PAUSE_POLICY(option)) == OP_SUCCESS);
+}
+
+API int sensord_set_attribute_int(int handle, int attribute, int value)
+{
+ switch (attribute) {
+ case SENSORD_ATTRIBUTE_PAUSE_POLICY:
+ return change_pause_policy(handle, value);
+ case SENSORD_ATTRIBUTE_AXIS_ORIENTATION:
+ return change_axis_orientation(handle, value);
+ default:
+ break;
+ }
+
+ return change_attribute_int(handle, attribute, value);
+}
+
API int sensord_set_attribute_str(int handle, int attribute, const char *value, int value_len)
{
sensor_id_t sensor_id;
}
retvm_if((value_len < 0) || (value == NULL), -EINVAL,
- "Invalid value_len: %d, value: 0x%x, handle: %d, %s, %s",
+ "Invalid value_len: %d, value: %#x, handle: %d, %s, %s",
value_len, value, handle, get_sensor_name(sensor_id), get_client_name());
client_id = sensor_client_info::get_instance().get_client_id();
- retvm_if ((client_id < 0), -EPERM,
+ retvm_if((client_id < 0), -EPERM,
"Invalid client id : %d, handle: %d, %s, %s",
client_id, handle, get_sensor_name(sensor_id), get_client_name());
if (!cmd_channel->cmd_set_attribute_str(attribute, value, value_len)) {
- _E("Sending cmd_set_attribute_str(%d, %d, 0x%x) failed for %s",
- client_id, value_len, value, get_client_name);
+ _E("Sending cmd_set_attribute_str(%d, %d, %#x) failed for %s",
+ client_id, value_len, value, get_client_name());
return -EPERM;
}
+ sensor_client_info::get_instance().set_attribute(handle, attribute, value, value_len);
+
return OP_SUCCESS;
}
int sensor_state;
int client_id;
- retvm_if ((!sensor_data), false, "sensor_data is NULL");
+ retvm_if((!sensor_data), false, "sensor_data is NULL");
AUTOLOCK(lock);
}
client_id = sensor_client_info::get_instance().get_client_id();
- retvm_if ((client_id < 0), false, "Invalid client id : %d, handle: %d, %s, %s", client_id, handle, get_sensor_name(sensor_id), get_client_name());
+ retvm_if((client_id < 0), false, "Invalid client id : %d, handle: %d, %s, %s", client_id, handle, get_sensor_name(sensor_id), get_client_name());
if (sensor_state != SENSOR_STATE_STARTED) {
_E("Sensor %s is not started for client %s with handle: %d, sensor_state: %d", get_sensor_name(sensor_id), get_client_name(), handle, sensor_state);
}
if (!cmd_channel->cmd_get_data(data_id, sensor_data)) {
- _E("cmd_get_data(%d, %d, 0x%x) failed for %s", client_id, data_id, sensor_data, get_client_name());
+ _E("cmd_get_data(%d, %d, %#x) failed for %s", client_id, data_id, sensor_data, get_client_name());
return false;
}
}
client_id = sensor_client_info::get_instance().get_client_id();
- retvm_if ((client_id < 0), false, "Invalid client id : %d, handle: %d, %s, %s", client_id, handle, get_sensor_name(sensor_id), get_client_name());
+ retvm_if((client_id < 0), false, "Invalid client id : %d, handle: %d, %s, %s", client_id, handle, get_sensor_name(sensor_id), get_client_name());
if (sensor_state != SENSOR_STATE_STARTED) {
_E("Sensor %s is not started for client %s with handle: %d, sensor_state: %d", get_sensor_name(sensor_id), get_client_name(), handle, sensor_state);
return true;
}
+
+API bool sensord_register_hub_event(int handle, unsigned int event_type, unsigned int interval, unsigned int max_batch_latency, sensorhub_cb_t cb, void *user_data)
+{
+ return false;
+}
+
+API bool sensord_set_passive_mode(int handle, bool passive)
+{
+ if (!sensor_client_info::get_instance().set_passive_mode(handle, passive)) {
+ _E("Failed to set passive mode %d", passive);
+ return false;
+ }
+
+ return true;
+}