From a38914db2fd5b3192bfa8fbd46269aa860d7937b Mon Sep 17 00:00:00 2001 From: Nick Vaccaro Date: Mon, 30 Mar 2015 18:43:03 -0700 Subject: Invensense: 6515: adjust minDelay and maxDelay values Adjust minDelay and maxDelay settings for Android Wear devices. Bug: 19575833 Change-Id: Ia8cc54a13865177a68a2d18108e1f6cf5fbe7ea6 --- 6515/libsensors_iio/MPLSensor.cpp | 30 ++++++---- 6515/libsensors_iio/sensors.h | 108 ++++++++++++++++++++---------------- 6515/libsensors_iio/sensors_mpl.cpp | 6 +- 3 files changed, 78 insertions(+), 66 deletions(-) diff --git a/6515/libsensors_iio/MPLSensor.cpp b/6515/libsensors_iio/MPLSensor.cpp index 96f38fc..1cfab7a 100644 --- a/6515/libsensors_iio/MPLSensor.cpp +++ b/6515/libsensors_iio/MPLSensor.cpp @@ -2909,6 +2909,18 @@ int MPLSensor::scHandler(sensors_event_t* s) LOGV_IF(HANDLER_DATA, "HAL:sc data: %lld - %lld - %d", s->step_counter, s->timestamp, update); #endif + + if (s->timestamp == 0 && update) { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + s->timestamp = (int64_t) ts.tv_sec * 1000000000 + ts.tv_nsec; + // workaround for some platform which has gap between monotonic clock + // and Android SystemClock. + // Subtract 100ms not to point the future for SystemClock. + // s->timestamp -= 100000000LL; + LOGV_IF(0, "HAL:sc timestamp %lld", s->timestamp); + } + return update; } @@ -4975,18 +4987,6 @@ void MPLSensor::fillAccel(const char* accel, struct sensor_t *list) list[Accelerometer].power = ACCEL_MPU6500_POWER; list[Accelerometer].minDelay = ACCEL_MPU6500_MINDELAY; return; - } else if (accel != NULL && strcmp(accel, "MPU6500") == 0) { - list[Accelerometer].maxRange = ACCEL_MPU6500_RANGE; - list[Accelerometer].resolution = ACCEL_MPU6500_RESOLUTION; - list[Accelerometer].power = ACCEL_MPU6500_POWER; - list[Accelerometer].minDelay = ACCEL_MPU6500_MINDELAY; - return; - } else if (accel != NULL && strcmp(accel, "MPU6500") == 0) { - list[Accelerometer].maxRange = ACCEL_MPU6500_RANGE; - list[Accelerometer].resolution = ACCEL_MPU6500_RESOLUTION; - list[Accelerometer].power = ACCEL_MPU6500_POWER; - list[Accelerometer].minDelay = ACCEL_MPU6500_MINDELAY; - return; } else if (accel != NULL && strcmp(accel, "MPU9150") == 0) { list[Accelerometer].maxRange = ACCEL_MPU9150_RANGE; list[Accelerometer].resolution = ACCEL_MPU9150_RESOLUTION; @@ -5759,8 +5759,14 @@ int MPLSensor::batch(int handle, int flags, int64_t period_ns, int64_t timeout) // limit all rates to reasonable ones */ if (period_ns < 5000000LL) { period_ns = 5000000LL; + } else if (period_ns > 200000000LL) { + period_ns = 200000000LL; } + LOGV_IF(PROCESS_VERBOSE, + "HAL:batch after applying upper and lower limit: %llu ns, (%.2f Hz)", + period_ns, 1000000000.f / period_ns); + switch (what) { case Gyro: case RawGyro: diff --git a/6515/libsensors_iio/sensors.h b/6515/libsensors_iio/sensors.h index e299228..4ea3e4d 100644 --- a/6515/libsensors_iio/sensors.h +++ b/6515/libsensors_iio/sensors.h @@ -106,67 +106,77 @@ enum { /*****************************************************************************/ /* - Android KitKat + Android Lollipop Populate sensor_t structure according to hardware sensors.h - { name, vendor, version, handle, type, maxRange, resolution, power, minDelay, - fifoReservedEventCount, fifoMaxEventCount, reserved[] } + {name, vendor, version, handle, + type, maxRange, resolution, power, minDelay, fifoReservedEventCount, fifoMaxEventCount, + stringType, requiredPermission, maxDelay, flags, reserved[]} */ #if defined ANDROID_LOLLIPOP static struct sensor_t sBaseSensorList[] = { - {(const char *)("MPL Gyroscope"), (const char *)("Invensense"), 1, - SENSORS_GYROSCOPE_HANDLE, - SENSOR_TYPE_GYROSCOPE, 2000.0f, 1.0f, 0.5f, 10000, 0, 124, 0,0,0,0,0,0}, - {"MPL Raw Gyroscope", "Invensense", 1, - SENSORS_RAW_GYROSCOPE_HANDLE, - SENSOR_TYPE_GYROSCOPE_UNCALIBRATED, 2000.0f, 1.0f, 0.5f, 10000, 0, 124, 0,0,0,0,0,0}, - {"MPL Accelerometer", "Invensense", 1, - SENSORS_ACCELERATION_HANDLE, - SENSOR_TYPE_ACCELEROMETER, 10240.0f, 1.0f, 0.5f, 10000, 0, 124, 0,0,0,0,0,0}, - {"MPL Magnetic Field", "Invensense", 1, - SENSORS_MAGNETIC_FIELD_HANDLE, - SENSOR_TYPE_MAGNETIC_FIELD, 10240.0f, 1.0f, 0.5f, 10000, 0, 124, 0,0,0,0,0,0}, - {"MPL Raw Magnetic Field", "Invensense", 1, - SENSORS_RAW_MAGNETIC_FIELD_HANDLE, - SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED, 10240.0f, 1.0f, 0.5f, 10000, 0, 124, 0,0,0,0,0,0}, + {"MPL Gyroscope", "Invensense", 1, SENSORS_GYROSCOPE_HANDLE, + SENSOR_TYPE_GYROSCOPE, 2000.0f, 1.0f, 0.5f, 10000, 0, 124, + SENSOR_STRING_TYPE_GYROSCOPE, "", 200000, SENSOR_FLAG_CONTINUOUS_MODE, {}}, + {"MPL Raw Gyroscope", "Invensense", 1, SENSORS_RAW_GYROSCOPE_HANDLE, + SENSOR_TYPE_GYROSCOPE_UNCALIBRATED, 2000.0f, 1.0f, 0.5f, 10000, 0, 124, + SENSOR_STRING_TYPE_GYROSCOPE_UNCALIBRATED, "", 200000, SENSOR_FLAG_CONTINUOUS_MODE, {}}, + {"MPL Accelerometer", "Invensense", 1, SENSORS_ACCELERATION_HANDLE, + SENSOR_TYPE_ACCELEROMETER, 10240.0f, 1.0f, 0.5f, 10000, 0, 124, + SENSOR_STRING_TYPE_ACCELEROMETER, "", 200000, SENSOR_FLAG_CONTINUOUS_MODE, {}}, + {"MPL Magnetic Field", "Invensense", 1, SENSORS_MAGNETIC_FIELD_HANDLE, + SENSOR_TYPE_MAGNETIC_FIELD, 10240.0f, 1.0f, 0.5f, 10000, 0, 124, + SENSOR_STRING_TYPE_MAGNETIC_FIELD, "", 200000, SENSOR_FLAG_CONTINUOUS_MODE, {}}, + {"MPL Raw Magnetic Field", "Invensense", 1, SENSORS_RAW_MAGNETIC_FIELD_HANDLE, + SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED, 10240.0f, 1.0f, 0.5f, 10000, 0, 124, + SENSOR_STRING_TYPE_MAGNETIC_FIELD_UNCALIBRATED, "", 200000, SENSOR_FLAG_CONTINUOUS_MODE, {}}, #ifdef ENABLE_PRESSURE - {"MPL Pressure", "Invensense", 1, - SENSORS_PRESSURE_HANDLE, - SENSOR_TYPE_PRESSURE, 10240.0f, 1.0f, 0.5f, 10000, 0, 165, 0,0,0,0,0,0}, + {"MPL Pressure", "Invensense", 1, SENSORS_PRESSURE_HANDLE, + SENSOR_TYPE_PRESSURE, 10240.0f, 1.0f, 0.5f, 10000, 0, 165, + SENSOR_STRING_TYPE_PRESSURE, "", 200000, SENSOR_FLAG_CONTINUOUS_MODE, {}}, #endif - {"MPL Orientation", "Invensense", 1, - SENSORS_ORIENTATION_HANDLE, - SENSOR_TYPE_ORIENTATION, 360.0f, 1.0f, 9.7f, 10000, 0, 0, 0,0,0,0,0,0}, - {"MPL Rotation Vector", "Invensense", 1, - SENSORS_ROTATION_VECTOR_HANDLE, - SENSOR_TYPE_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, 0, 0, 0,0,0,0,0,0}, - {"MPL Game Rotation Vector", "Invensense", 1, - SENSORS_GAME_ROTATION_VECTOR_HANDLE, - SENSOR_TYPE_GAME_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, 0, 62, 0,0,0,0,0,0}, - {"MPL Linear Acceleration", "Invensense", 1, - SENSORS_LINEAR_ACCEL_HANDLE, - SENSOR_TYPE_LINEAR_ACCELERATION, 10240.0f, 1.0f, 0.5f, 10000, 0, 0, 0,0,0,0,0,0}, - {"MPL Gravity", "Invensense", 1, - SENSORS_GRAVITY_HANDLE, - SENSOR_TYPE_GRAVITY, 10240.0f, 1.0f, 0.5f, 10000, 0, 0, 0,0,0,0,0,0}, - {"MPL Significant Motion", "Invensense", 1, - SENSORS_SIGNIFICANT_MOTION_HANDLE, - SENSOR_TYPE_SIGNIFICANT_MOTION, 100.0f, 1.0f, 1.1f, 0, 0, 0, 0,0,0,0,0,0}, - {"MPL Step Detector", "Invensense", 1, - SENSORS_PEDOMETER_HANDLE, - SENSOR_TYPE_STEP_DETECTOR, 100.0f, 1.0f, 1.1f, 0, 0, 124, 0,0,0,0,0,0}, - {"MPL Step Counter", "Invensense", 1, - SENSORS_STEP_COUNTER_HANDLE, - SENSOR_TYPE_STEP_COUNTER, 100.0f, 1.0f, 1.1f, 0, 0, 0, 0,0,0,0,0,0}, + {"MPL Orientation", "Invensense", 1, SENSORS_ORIENTATION_HANDLE, + SENSOR_TYPE_ORIENTATION, 360.0f, 1.0f, 9.7f, 10000, 0, 0, + SENSOR_STRING_TYPE_ORIENTATION, "", 0, SENSOR_FLAG_CONTINUOUS_MODE, {}}, + {"MPL Rotation Vector", "Invensense", 1, SENSORS_ROTATION_VECTOR_HANDLE, + SENSOR_TYPE_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, 0, 0, + SENSOR_STRING_TYPE_ROTATION_VECTOR, "", 0, SENSOR_FLAG_CONTINUOUS_MODE, {}}, + {"MPL Game Rotation Vector", "Invensense", 1, SENSORS_GAME_ROTATION_VECTOR_HANDLE, + SENSOR_TYPE_GAME_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, 0, 62, + SENSOR_STRING_TYPE_GAME_ROTATION_VECTOR, "", 200000, SENSOR_FLAG_CONTINUOUS_MODE, {}}, + {"MPL Linear Acceleration", "Invensense", 1, SENSORS_LINEAR_ACCEL_HANDLE, + SENSOR_TYPE_LINEAR_ACCELERATION, 10240.0f, 1.0f, 0.5f, 10000, 0, 0, + SENSOR_STRING_TYPE_LINEAR_ACCELERATION, "", 0, SENSOR_FLAG_CONTINUOUS_MODE, {}}, + {"MPL Gravity", "Invensense", 1, SENSORS_GRAVITY_HANDLE, + SENSOR_TYPE_GRAVITY, 10240.0f, 1.0f, 0.5f, 10000, 0, 0, + SENSOR_STRING_TYPE_GRAVITY, "", 0, SENSOR_FLAG_CONTINUOUS_MODE, {}}, + {"MPL Significant Motion", "Invensense", 1, SENSORS_SIGNIFICANT_MOTION_HANDLE, + SENSOR_TYPE_SIGNIFICANT_MOTION, 100.0f, 1.0f, 1.1f, 0, 0, 0, + SENSOR_STRING_TYPE_SIGNIFICANT_MOTION, "", 0, + SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP, {}}, + {"MPL Step Detector", "Invensense", 1, SENSORS_PEDOMETER_HANDLE, + SENSOR_TYPE_STEP_DETECTOR, 100.0f, 1.0f, 1.1f, 0, 0, 124, + SENSOR_STRING_TYPE_STEP_DETECTOR, "", 0, SENSOR_FLAG_SPECIAL_REPORTING_MODE, {}}, + {"MPL Step Counter", "Invensense", 1, SENSORS_STEP_COUNTER_HANDLE, + SENSOR_TYPE_STEP_COUNTER, 100.0f, 1.0f, 1.1f, 0, 0, 0, + SENSOR_STRING_TYPE_STEP_COUNTER, "", 0, SENSOR_FLAG_ON_CHANGE_MODE, {}}, {"MPL Geomagnetic Rotation Vector", "Invensense", 1, SENSORS_GEOMAGNETIC_ROTATION_VECTOR_HANDLE, - SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 5000, 0, 0, 0,0,0,0,0,0}, + SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 5000, 0, 0, + SENSOR_STRING_TYPE_GEOMAGNETIC_ROTATION_VECTOR, "", 0, SENSOR_FLAG_CONTINUOUS_MODE, {}}, #ifdef ENABLE_DMP_SCREEN_AUTO_ROTATION - {"MPL Screen Orientation", "Invensense ", 1, - SENSORS_SCREEN_ORIENTATION_HANDLE, - SENSOR_TYPE_SCREEN_ORIENTATION, 100.0f, 1.0f, 1.1f, 0, 0, 0, 0,0,0,0,0,0}, + {"MPL Screen Orientation", "Invensense ", 1, SENSORS_SCREEN_ORIENTATION_HANDLE, + SENSOR_TYPE_SCREEN_ORIENTATION, 100.0f, 1.0f, 1.1f, 0, 0, 0, + SENSOR_STRING_TYPE_SCREEN_ORIENTATION, "", 0, SENSOR_FLAG_ON_CHANGE_MODE, {}}, #endif }; +/* + Android KitKat + Populate sensor_t structure according to hardware sensors.h + {name, vendor, version, + handle, + type, maxRange, resolution, power, minDelay, fifoReservedEventCount, fifoMaxEventCount, reserved[]} +*/ #elif defined ANDROID_KITKAT static struct sensor_t sBaseSensorList[] = { diff --git a/6515/libsensors_iio/sensors_mpl.cpp b/6515/libsensors_iio/sensors_mpl.cpp index 268b853..7e7b06b 100755 --- a/6515/libsensors_iio/sensors_mpl.cpp +++ b/6515/libsensors_iio/sensors_mpl.cpp @@ -438,18 +438,14 @@ static int open_sensors(const struct hw_module_t* module, const char* id, memset(&dev->device, 0, sizeof(sensors_poll_device_1)); dev->device.common.tag = HARDWARE_DEVICE_TAG; -#if defined ANDROID_KITKAT || defined ANDROID_LOLLIPOP dev->device.common.version = SENSORS_DEVICE_API_VERSION_1_3; dev->device.flush = poll__flush; -#else - dev->device.common.version = SENSORS_DEVICE_API_VERSION_1_0; -#endif dev->device.common.module = const_cast(module); dev->device.common.close = poll__close; dev->device.activate = poll__activate; dev->device.setDelay = poll__setDelay; dev->device.poll = poll__poll; - dev->device.batch = poll__batch; + dev->device.batch = poll__batch; *device = &dev->device.common; status = 0; -- cgit v1.2.3