X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=entry.c;h=a914f44b80e5d15cd864b3a21797983a1c09e455;hb=20af89dc6c7c57ee85166aabeceb227a13ce6435;hp=e0121d265ad0b2c63f6f8299464d8507e3347cda;hpb=8aa6c4caaa83540fc126add530481a79882eebbd;p=android-x86%2Fhardware-intel-libsensors.git diff --git a/entry.c b/entry.c index e0121d2..a914f44 100644 --- a/entry.c +++ b/entry.c @@ -1,12 +1,27 @@ /* - * Copyright (C) 2014 Intel Corporation. - */ +// Copyright (c) 2015 Intel Corporation +// +// 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 "enumeration.h" #include "control.h" #include "description.h" +#include "utils.h" + +#include /* This is the IIO Sensors HAL module entry points file */ @@ -15,9 +30,15 @@ static int init_count; static int activate (__attribute__((unused)) struct sensors_poll_device_t* dev, int handle, int enabled) { + int64_t entry_ts; + int ret; + int elapsed_ms; + if (init_count == 0 || handle < 0 || handle >= sensor_count) return -EINVAL; + entry_ts = get_timestamp_thread(); + /* * The Intel sensor hub seems to have trouble enabling sensors before * a sampling rate has been configured, and setting the sampling rate @@ -31,23 +52,44 @@ static int activate (__attribute__((unused)) struct sensors_poll_device_t* dev, if (enabled && sensor_get_quirks(handle) & QUIRK_INITIAL_RATE) { ALOGI("Forcing initial sampling rate\n"); sensor_activate(handle, 1, 0); - sensor_set_delay(handle, 100000000L); /* Start with 100 ms */ + sensor_set_delay(handle, 100000000); /* Start with 100 ms */ sensor_activate(handle, 0, 0); /* Clear flag for this sensor as do this only once */ - sensor_info[handle].quirks ^= QUIRK_INITIAL_RATE; + sensor[handle].quirks ^= QUIRK_INITIAL_RATE; + } + + ret = sensor_activate(handle, enabled, 0); + + elapsed_ms = (int) ((get_timestamp_thread() - entry_ts) / 1000000); + + if (elapsed_ms) { + if (enabled) + ALOGI("Activation of sensor %s took %d ms\n", sensor[handle].friendly_name, elapsed_ms); + else + ALOGI("Deactivation of sensor %s took %d ms\n", sensor[handle].friendly_name, elapsed_ms); } - return sensor_activate(handle, enabled, 0); + return ret; } static int set_delay (__attribute__((unused)) struct sensors_poll_device_t* dev, int handle, int64_t ns) { + int i; + if (init_count == 0 || handle < 0 || handle >= sensor_count) return -EINVAL; + /* + * If this sensor relies on other sensors, try to propagate the + * requested sampling rate to the base sensors. + */ + + for (i=0; i