aboutsummaryrefslogtreecommitdiff
path: root/service/src/com/android/car/hal/SensorHalService.java
diff options
context:
space:
mode:
Diffstat (limited to 'service/src/com/android/car/hal/SensorHalService.java')
-rw-r--r--service/src/com/android/car/hal/SensorHalService.java137
1 files changed, 95 insertions, 42 deletions
diff --git a/service/src/com/android/car/hal/SensorHalService.java b/service/src/com/android/car/hal/SensorHalService.java
index 2b84fc4ecf..cf29f810cf 100644
--- a/service/src/com/android/car/hal/SensorHalService.java
+++ b/service/src/com/android/car/hal/SensorHalService.java
@@ -19,6 +19,7 @@ package com.android.car.hal;
import static java.lang.Integer.toHexString;
import android.annotation.Nullable;
+import android.car.hardware.CarSensorConfig;
import android.car.hardware.CarSensorEvent;
import android.car.hardware.CarSensorManager;
import android.hardware.automotive.vehicle.V2_0.VehicleGear;
@@ -29,11 +30,13 @@ import android.hardware.automotive.vehicle.V2_1.VehicleProperty;
import android.hardware.automotive.vehicle.V2_0.VehiclePropertyAccess;
import android.hardware.automotive.vehicle.V2_0.VehiclePropertyChangeMode;
import android.hardware.automotive.vehicle.V2_0.VehiclePropertyType;
+import android.os.Bundle;
import android.util.Log;
import android.util.SparseIntArray;
import com.android.car.CarLog;
import com.android.car.CarSensorEventFactory;
import java.io.PrintWriter;
+import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
@@ -50,6 +53,7 @@ public class SensorHalService extends SensorHalServiceBase {
public interface SensorListener {
/**
* Sensor events are available.
+ *
* @param events
*/
void onSensorEvents(List<CarSensorEvent> events);
@@ -57,44 +61,44 @@ public class SensorHalService extends SensorHalServiceBase {
// Manager property Id to HAL property Id mapping.
private final static ManagerToHalPropIdMap mManagerToHalPropIdMap =
- ManagerToHalPropIdMap.create(
- CarSensorManager.SENSOR_TYPE_CAR_SPEED, VehicleProperty.PERF_VEHICLE_SPEED,
- CarSensorManager.SENSOR_TYPE_RPM, VehicleProperty.ENGINE_RPM,
- CarSensorManager.SENSOR_TYPE_ODOMETER, VehicleProperty.PERF_ODOMETER,
- CarSensorManager.SENSOR_TYPE_GEAR, VehicleProperty.GEAR_SELECTION,
- CarSensorManager.SENSOR_TYPE_NIGHT, VehicleProperty.NIGHT_MODE,
- CarSensorManager.SENSOR_TYPE_PARKING_BRAKE, VehicleProperty.PARKING_BRAKE_ON,
- CarSensorManager.SENSOR_TYPE_DRIVING_STATUS, VehicleProperty.DRIVING_STATUS,
- CarSensorManager.SENSOR_TYPE_FUEL_LEVEL, VehicleProperty.FUEL_LEVEL_LOW,
- CarSensorManager.SENSOR_TYPE_IGNITION_STATE, VehicleProperty.IGNITION_STATE,
- CarSensorManager.SENSOR_TYPE_WHEEL_TICK_DISTANCE, VehicleProperty.WHEEL_TICK,
- CarSensorManager.SENSOR_TYPE_ABS_ACTIVE, VehicleProperty.ABS_ACTIVE,
- CarSensorManager.SENSOR_TYPE_TRACTION_CONTROL_ACTIVE,
- VehicleProperty.TRACTION_CONTROL_ACTIVE
- );
+ ManagerToHalPropIdMap.create(
+ CarSensorManager.SENSOR_TYPE_CAR_SPEED, VehicleProperty.PERF_VEHICLE_SPEED,
+ CarSensorManager.SENSOR_TYPE_RPM, VehicleProperty.ENGINE_RPM,
+ CarSensorManager.SENSOR_TYPE_ODOMETER, VehicleProperty.PERF_ODOMETER,
+ CarSensorManager.SENSOR_TYPE_GEAR, VehicleProperty.GEAR_SELECTION,
+ CarSensorManager.SENSOR_TYPE_NIGHT, VehicleProperty.NIGHT_MODE,
+ CarSensorManager.SENSOR_TYPE_PARKING_BRAKE, VehicleProperty.PARKING_BRAKE_ON,
+ CarSensorManager.SENSOR_TYPE_DRIVING_STATUS, VehicleProperty.DRIVING_STATUS,
+ CarSensorManager.SENSOR_TYPE_FUEL_LEVEL, VehicleProperty.FUEL_LEVEL_LOW,
+ CarSensorManager.SENSOR_TYPE_IGNITION_STATE, VehicleProperty.IGNITION_STATE,
+ CarSensorManager.SENSOR_TYPE_WHEEL_TICK_DISTANCE, VehicleProperty.WHEEL_TICK,
+ CarSensorManager.SENSOR_TYPE_ABS_ACTIVE, VehicleProperty.ABS_ACTIVE,
+ CarSensorManager.SENSOR_TYPE_TRACTION_CONTROL_ACTIVE,
+ VehicleProperty.TRACTION_CONTROL_ACTIVE
+ );
private final static SparseIntArray mMgrGearToHalMap = initSparseIntArray(
- VehicleGear.GEAR_NEUTRAL, CarSensorEvent.GEAR_NEUTRAL,
- VehicleGear.GEAR_REVERSE, CarSensorEvent.GEAR_REVERSE,
- VehicleGear.GEAR_PARK, CarSensorEvent.GEAR_PARK,
- VehicleGear.GEAR_DRIVE, CarSensorEvent.GEAR_DRIVE,
- VehicleGear.GEAR_LOW, CarSensorEvent.GEAR_FIRST, // Also GEAR_1 - the value is the same.
- VehicleGear.GEAR_2, CarSensorEvent.GEAR_SECOND,
- VehicleGear.GEAR_3, CarSensorEvent.GEAR_THIRD,
- VehicleGear.GEAR_4, CarSensorEvent.GEAR_FOURTH,
- VehicleGear.GEAR_5, CarSensorEvent.GEAR_FIFTH,
- VehicleGear.GEAR_6, CarSensorEvent.GEAR_SIXTH,
- VehicleGear.GEAR_7, CarSensorEvent.GEAR_SEVENTH,
- VehicleGear.GEAR_8, CarSensorEvent.GEAR_EIGHTH,
- VehicleGear.GEAR_9, CarSensorEvent.GEAR_NINTH);
+ VehicleGear.GEAR_NEUTRAL, CarSensorEvent.GEAR_NEUTRAL,
+ VehicleGear.GEAR_REVERSE, CarSensorEvent.GEAR_REVERSE,
+ VehicleGear.GEAR_PARK, CarSensorEvent.GEAR_PARK,
+ VehicleGear.GEAR_DRIVE, CarSensorEvent.GEAR_DRIVE,
+ VehicleGear.GEAR_LOW, CarSensorEvent.GEAR_FIRST, // Also GEAR_1 - the value is the same.
+ VehicleGear.GEAR_2, CarSensorEvent.GEAR_SECOND,
+ VehicleGear.GEAR_3, CarSensorEvent.GEAR_THIRD,
+ VehicleGear.GEAR_4, CarSensorEvent.GEAR_FOURTH,
+ VehicleGear.GEAR_5, CarSensorEvent.GEAR_FIFTH,
+ VehicleGear.GEAR_6, CarSensorEvent.GEAR_SIXTH,
+ VehicleGear.GEAR_7, CarSensorEvent.GEAR_SEVENTH,
+ VehicleGear.GEAR_8, CarSensorEvent.GEAR_EIGHTH,
+ VehicleGear.GEAR_9, CarSensorEvent.GEAR_NINTH);
private final static SparseIntArray mMgrIgnitionStateToHalMap = initSparseIntArray(
- VehicleIgnitionState.UNDEFINED, CarSensorEvent.IGNITION_STATE_UNDEFINED,
- VehicleIgnitionState.LOCK, CarSensorEvent.IGNITION_STATE_LOCK,
- VehicleIgnitionState.OFF, CarSensorEvent.IGNITION_STATE_OFF,
- VehicleIgnitionState.ACC, CarSensorEvent.IGNITION_STATE_ACC,
- VehicleIgnitionState.ON, CarSensorEvent.IGNITION_STATE_ON,
- VehicleIgnitionState.START, CarSensorEvent.IGNITION_STATE_START);
+ VehicleIgnitionState.UNDEFINED, CarSensorEvent.IGNITION_STATE_UNDEFINED,
+ VehicleIgnitionState.LOCK, CarSensorEvent.IGNITION_STATE_LOCK,
+ VehicleIgnitionState.OFF, CarSensorEvent.IGNITION_STATE_OFF,
+ VehicleIgnitionState.ACC, CarSensorEvent.IGNITION_STATE_ACC,
+ VehicleIgnitionState.ON, CarSensorEvent.IGNITION_STATE_ON,
+ VehicleIgnitionState.START, CarSensorEvent.IGNITION_STATE_START);
private SensorListener mSensorListener;
@@ -102,15 +106,17 @@ public class SensorHalService extends SensorHalServiceBase {
@Override
public void init() {
+ VehiclePropConfig config;
// Populate internal values if available
- VehiclePropConfig config = mSensorToPropConfig.get(
- CarSensorManager.SENSOR_TYPE_WHEEL_TICK_DISTANCE);
+ synchronized (this) {
+ config = mSensorToPropConfig.get(CarSensorManager.SENSOR_TYPE_WHEEL_TICK_DISTANCE);
+ }
if (config == null) {
Log.e(TAG, "init: unable to get property config for SENSOR_TYPE_WHEEL_TICK_DISTANCE");
} else {
- for (int i=0; i<4; i++) {
- // ConfigArray starts with Wheels enum at idx 0
- mMicrometersPerWheelTick[i] = config.configArray.get(i+1);
+ for (int i = 0; i < 4; i++) {
+ mMicrometersPerWheelTick[i] = config.configArray.get(i +
+ INDEX_WHEEL_DISTANCE_FRONT_LEFT);
}
}
super.init();
@@ -137,6 +143,7 @@ public class SensorHalService extends SensorHalServiceBase {
// Should be used only inside handleHalEvents method.
private final LinkedList<CarSensorEvent> mEventsToDispatch = new LinkedList<>();
+
@Override
public void handleHalEvents(List<VehiclePropValue> values) {
for (VehiclePropValue v : values) {
@@ -165,7 +172,7 @@ public class SensorHalService extends SensorHalServiceBase {
mgrValue = mMgrGearToHalMap.get(halValue, -1);
break;
case VehicleProperty.IGNITION_STATE:
- mgrValue = mMgrIgnitionStateToHalMap.get(halValue, -1);
+ mgrValue = mMgrIgnitionStateToHalMap.get(halValue, -1);
default:
break; // Do nothing
}
@@ -192,7 +199,7 @@ public class SensorHalService extends SensorHalServiceBase {
break;
case VehiclePropertyType.INT32:
Integer mgrVal = mapHalEnumValueToMgr(property, v.value.int32Values.get(0));
- event = mgrVal == null ? null
+ event = mgrVal == null ? null
: CarSensorEventFactory.createIntEvent(sensorType, v.timestamp, mgrVal);
break;
case VehiclePropertyType.FLOAT:
@@ -283,4 +290,50 @@ public class SensorHalService extends SensorHalServiceBase {
}
return map;
}
-}
+
+ private static final int INDEX_WHEEL_DISTANCE_ENABLE_FLAG = 0;
+ private static final int INDEX_WHEEL_DISTANCE_FRONT_LEFT = 1;
+ private static final int INDEX_WHEEL_DISTANCE_FRONT_RIGHT = 2;
+ private static final int INDEX_WHEEL_DISTANCE_REAR_RIGHT = 3;
+ private static final int INDEX_WHEEL_DISTANCE_REAR_LEFT = 4;
+ private static final int WHEEL_TICK_DISTANCE_BUNDLE_SIZE = 6;
+
+ private Bundle createWheelDistanceTickBundle(ArrayList<Integer> configArray) {
+ Bundle b = new Bundle(WHEEL_TICK_DISTANCE_BUNDLE_SIZE);
+ b.putInt(CarSensorConfig.WHEEL_TICK_DISTANCE_SUPPORTED_WHEELS,
+ configArray.get(INDEX_WHEEL_DISTANCE_ENABLE_FLAG));
+ b.putInt(CarSensorConfig.WHEEL_TICK_DISTANCE_FRONT_LEFT_UM_PER_TICK,
+ configArray.get(INDEX_WHEEL_DISTANCE_FRONT_LEFT));
+ b.putInt(CarSensorConfig.WHEEL_TICK_DISTANCE_FRONT_RIGHT_UM_PER_TICK,
+ configArray.get(INDEX_WHEEL_DISTANCE_FRONT_RIGHT));
+ b.putInt(CarSensorConfig.WHEEL_TICK_DISTANCE_REAR_RIGHT_UM_PER_TICK,
+ configArray.get(INDEX_WHEEL_DISTANCE_REAR_RIGHT));
+ b.putInt(CarSensorConfig.WHEEL_TICK_DISTANCE_REAR_LEFT_UM_PER_TICK,
+ configArray.get(INDEX_WHEEL_DISTANCE_REAR_LEFT));
+ return b;
+ }
+
+
+ public CarSensorConfig getSensorConfig(int sensorType) {
+ VehiclePropConfig cfg;
+ synchronized (this) {
+ cfg = mSensorToPropConfig.get(sensorType);
+ }
+ if (cfg == null) {
+ /* Invalid sensor type. */
+ throw new IllegalArgumentException("Unknown sensorType = " + sensorType);
+ } else {
+ Bundle b;
+ switch(sensorType) {
+ case CarSensorManager.SENSOR_TYPE_WHEEL_TICK_DISTANCE:
+ b = createWheelDistanceTickBundle(cfg.configArray);
+ break;
+ default:
+ /* Unhandled config. Create empty bundle */
+ b = Bundle.EMPTY;
+ break;
+ }
+ return new CarSensorConfig(sensorType, b);
+ }
+ }
+} \ No newline at end of file