1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.car.hal; 18 19 import static android.Manifest.permission.ACCESS_FINE_LOCATION; 20 21 import static java.lang.Integer.toHexString; 22 23 import android.annotation.NonNull; 24 import android.annotation.Nullable; 25 import android.car.Car; 26 import android.car.VehicleHvacFanDirection; 27 import android.car.builtin.util.Slogf; 28 import android.car.hardware.property.VehicleVendorPermission; 29 import android.hardware.automotive.vehicle.AutomaticEmergencyBrakingState; 30 import android.hardware.automotive.vehicle.BlindSpotWarningState; 31 import android.hardware.automotive.vehicle.CruiseControlCommand; 32 import android.hardware.automotive.vehicle.CruiseControlState; 33 import android.hardware.automotive.vehicle.CruiseControlType; 34 import android.hardware.automotive.vehicle.ElectronicTollCollectionCardStatus; 35 import android.hardware.automotive.vehicle.ElectronicTollCollectionCardType; 36 import android.hardware.automotive.vehicle.EmergencyLaneKeepAssistState; 37 import android.hardware.automotive.vehicle.ErrorState; 38 import android.hardware.automotive.vehicle.EvChargeState; 39 import android.hardware.automotive.vehicle.EvConnectorType; 40 import android.hardware.automotive.vehicle.EvRegenerativeBrakingState; 41 import android.hardware.automotive.vehicle.EvStoppingMode; 42 import android.hardware.automotive.vehicle.ForwardCollisionWarningState; 43 import android.hardware.automotive.vehicle.FuelType; 44 import android.hardware.automotive.vehicle.GsrComplianceRequirementType; 45 import android.hardware.automotive.vehicle.HandsOnDetectionDriverState; 46 import android.hardware.automotive.vehicle.HandsOnDetectionWarning; 47 import android.hardware.automotive.vehicle.LaneCenteringAssistCommand; 48 import android.hardware.automotive.vehicle.LaneCenteringAssistState; 49 import android.hardware.automotive.vehicle.LaneDepartureWarningState; 50 import android.hardware.automotive.vehicle.LaneKeepAssistState; 51 import android.hardware.automotive.vehicle.LocationCharacterization; 52 import android.hardware.automotive.vehicle.PortLocationType; 53 import android.hardware.automotive.vehicle.TrailerState; 54 import android.hardware.automotive.vehicle.VehicleAreaSeat; 55 import android.hardware.automotive.vehicle.VehicleGear; 56 import android.hardware.automotive.vehicle.VehicleIgnitionState; 57 import android.hardware.automotive.vehicle.VehicleLightState; 58 import android.hardware.automotive.vehicle.VehicleLightSwitch; 59 import android.hardware.automotive.vehicle.VehicleOilLevel; 60 import android.hardware.automotive.vehicle.VehicleProperty; 61 import android.hardware.automotive.vehicle.VehiclePropertyGroup; 62 import android.hardware.automotive.vehicle.VehiclePropertyStatus; 63 import android.hardware.automotive.vehicle.VehiclePropertyType; 64 import android.hardware.automotive.vehicle.VehicleSeatOccupancyState; 65 import android.hardware.automotive.vehicle.VehicleTurnSignal; 66 import android.hardware.automotive.vehicle.VehicleUnit; 67 import android.hardware.automotive.vehicle.WindshieldWipersState; 68 import android.hardware.automotive.vehicle.WindshieldWipersSwitch; 69 import android.util.Pair; 70 import android.util.SparseArray; 71 import android.util.SparseIntArray; 72 73 import com.android.car.CarLog; 74 75 import java.lang.reflect.Field; 76 import java.util.ArrayList; 77 import java.util.Collections; 78 import java.util.HashSet; 79 import java.util.List; 80 import java.util.Set; 81 82 /** 83 * Helper class to define which AIDL HAL property IDs are used by PropertyHalService. This class 84 * binds the read and write permissions to the property ID. 85 */ 86 public class PropertyHalServiceIds { 87 88 /** 89 * Index key is an AIDL HAL property ID, and the value is readPermission, writePermission. 90 * If the property can not be written (or read), set value as NULL. 91 * Throw an IllegalArgumentException when try to write READ_ONLY properties or read WRITE_ONLY 92 * properties. 93 */ 94 private final SparseArray<Pair<String, String>> mHalPropIdToPermissions = new SparseArray<>(); 95 private final HashSet<Integer> mHalPropIdsForUnits = new HashSet<>(); 96 private final SparseIntArray mHalPropIdToValidBitFlag = new SparseIntArray(); 97 private static final String TAG = CarLog.tagFor(PropertyHalServiceIds.class); 98 // Enums are used as return value in Vehicle HAL. 99 private static final Set<Integer> FUEL_TYPE = 100 new HashSet<>(getIntegersFromDataEnums(FuelType.class)); 101 private static final Set<Integer> EV_CONNECTOR_TYPE = 102 new HashSet<>(getIntegersFromDataEnums(EvConnectorType.class)); 103 private static final Set<Integer> PORT_LOCATION = 104 new HashSet<>(getIntegersFromDataEnums(PortLocationType.class)); 105 private static final Set<Integer> VEHICLE_SEAT = 106 new HashSet<>(getIntegersFromDataEnums(VehicleAreaSeat.class)); 107 private static final Set<Integer> OIL_LEVEL = 108 new HashSet<>(getIntegersFromDataEnums(VehicleOilLevel.class)); 109 private static final Set<Integer> VEHICLE_GEAR = 110 new HashSet<>(getIntegersFromDataEnums(VehicleGear.class)); 111 private static final Set<Integer> TURN_SIGNAL = 112 new HashSet<>(getIntegersFromDataEnums(VehicleTurnSignal.class)); 113 private static final Set<Integer> IGNITION_STATE = 114 new HashSet<>(getIntegersFromDataEnums(VehicleIgnitionState.class)); 115 private static final Set<Integer> VEHICLE_UNITS = 116 new HashSet<>(getIntegersFromDataEnums(VehicleUnit.class)); 117 private static final Set<Integer> SEAT_OCCUPANCY_STATE = 118 new HashSet<>(getIntegersFromDataEnums(VehicleSeatOccupancyState.class)); 119 private static final Set<Integer> VEHICLE_LIGHT_STATE = 120 new HashSet<>(getIntegersFromDataEnums(VehicleLightState.class)); 121 private static final Set<Integer> VEHICLE_LIGHT_SWITCH = 122 new HashSet<>(getIntegersFromDataEnums(VehicleLightSwitch.class)); 123 private static final int HVAC_FAN_DIRECTION_COMBINATIONS = 124 generateAllCombination(VehicleHvacFanDirection.class); 125 private static final Set<Integer> ETC_CARD_TYPE = 126 new HashSet<>(getIntegersFromDataEnums(ElectronicTollCollectionCardType.class)); 127 private static final Set<Integer> ETC_CARD_STATUS = 128 new HashSet<>(getIntegersFromDataEnums(ElectronicTollCollectionCardStatus.class)); 129 private static final Set<Integer> EV_CHARGE_STATE = 130 new HashSet<>(getIntegersFromDataEnums(EvChargeState.class)); 131 private static final Set<Integer> EV_REGENERATIVE_BREAKING_STATE = 132 new HashSet<>(getIntegersFromDataEnums(EvRegenerativeBrakingState.class)); 133 private static final Set<Integer> EV_STOPPING_MODE = 134 new HashSet<>(getIntegersFromDataEnums(EvStoppingMode.class)); 135 private static final Set<Integer> TRAILER_PRESENT = 136 new HashSet<>(getIntegersFromDataEnums(TrailerState.class)); 137 private static final Set<Integer> GSR_COMP_TYPE = 138 new HashSet<>(getIntegersFromDataEnums(GsrComplianceRequirementType.class)); 139 private static final int LOCATION_CHARACTERIZATION = 140 generateAllCombination(LocationCharacterization.class); 141 private static final Set<Integer> WINDSHIELD_WIPERS_STATE = 142 new HashSet<>(getIntegersFromDataEnums(WindshieldWipersState.class)); 143 private static final Set<Integer> WINDSHIELD_WIPERS_SWITCH = 144 new HashSet<>(getIntegersFromDataEnums(WindshieldWipersSwitch.class)); 145 private static final Set<Integer> EMERGENCY_LANE_KEEP_ASSIST_STATE = 146 new HashSet<>(getIntegersFromDataEnums( 147 EmergencyLaneKeepAssistState.class, ErrorState.class)); 148 private static final Set<Integer> CRUISE_CONTROL_TYPE = 149 new HashSet<>(getIntegersFromDataEnums( 150 CruiseControlType.class, ErrorState.class)); 151 private static final Set<Integer> CRUISE_CONTROL_STATE = 152 new HashSet<>(getIntegersFromDataEnums( 153 CruiseControlState.class, ErrorState.class)); 154 private static final Set<Integer> CRUISE_CONTROL_COMMAND = 155 new HashSet<>(getIntegersFromDataEnums(CruiseControlCommand.class)); 156 private static final Set<Integer> HANDS_ON_DETECTION_DRIVER_STATE = 157 new HashSet<>(getIntegersFromDataEnums( 158 HandsOnDetectionDriverState.class, ErrorState.class)); 159 private static final Set<Integer> HANDS_ON_DETECTION_WARNING = 160 new HashSet<>(getIntegersFromDataEnums( 161 HandsOnDetectionWarning.class, ErrorState.class)); 162 private static final Set<Integer> AUTOMATIC_EMERGENCY_BRAKING_STATE = 163 new HashSet<>(getIntegersFromDataEnums( 164 AutomaticEmergencyBrakingState.class, ErrorState.class)); 165 private static final Set<Integer> FORWARD_COLLISION_WARNING_STATE = 166 new HashSet<>(getIntegersFromDataEnums( 167 ForwardCollisionWarningState.class, ErrorState.class)); 168 private static final Set<Integer> BLIND_SPOT_WARNING_STATE = 169 new HashSet<>(getIntegersFromDataEnums( 170 BlindSpotWarningState.class, ErrorState.class)); 171 private static final Set<Integer> LANE_DEPARTURE_WARNING_STATE = 172 new HashSet<>(getIntegersFromDataEnums( 173 LaneDepartureWarningState.class, ErrorState.class)); 174 private static final Set<Integer> LANE_KEEP_ASSIST_STATE = 175 new HashSet<>(getIntegersFromDataEnums( 176 LaneKeepAssistState.class, ErrorState.class)); 177 private static final Set<Integer> LANE_CENTERING_ASSIST_COMMAND = 178 new HashSet<>(getIntegersFromDataEnums(LaneCenteringAssistCommand.class)); 179 private static final Set<Integer> LANE_CENTERING_ASSIST_STATE = 180 new HashSet<>(getIntegersFromDataEnums( 181 LaneCenteringAssistState.class, ErrorState.class)); 182 183 // TODO(b/264946993): Autogenerate HAL_PROP_ID_TO_ENUM_SET directly from AIDL definition. 184 private static final SparseArray<Set<Integer>> HAL_PROP_ID_TO_ENUM_SET = new SparseArray<>(); 185 static { 186 // HAL_PROP_ID_TO_ENUM_SET should contain all properties which have @data_enum in 187 // VehicleProperty.aidl HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.INFO_FUEL_TYPE, FUEL_TYPE)188 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.INFO_FUEL_TYPE, FUEL_TYPE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.INFO_EV_CONNECTOR_TYPE, EV_CONNECTOR_TYPE)189 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.INFO_EV_CONNECTOR_TYPE, EV_CONNECTOR_TYPE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.INFO_FUEL_DOOR_LOCATION, PORT_LOCATION)190 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.INFO_FUEL_DOOR_LOCATION, PORT_LOCATION); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.INFO_DRIVER_SEAT, VEHICLE_SEAT)191 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.INFO_DRIVER_SEAT, VEHICLE_SEAT); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.INFO_MULTI_EV_PORT_LOCATIONS, PORT_LOCATION)192 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.INFO_MULTI_EV_PORT_LOCATIONS, PORT_LOCATION); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.ENGINE_OIL_LEVEL, OIL_LEVEL)193 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.ENGINE_OIL_LEVEL, OIL_LEVEL); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.GEAR_SELECTION, VEHICLE_GEAR)194 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.GEAR_SELECTION, VEHICLE_GEAR); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.CURRENT_GEAR, VEHICLE_GEAR)195 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.CURRENT_GEAR, VEHICLE_GEAR); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.TURN_SIGNAL_STATE, TURN_SIGNAL)196 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.TURN_SIGNAL_STATE, TURN_SIGNAL); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.IGNITION_STATE, IGNITION_STATE)197 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.IGNITION_STATE, IGNITION_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HVAC_TEMPERATURE_DISPLAY_UNITS, VEHICLE_UNITS)198 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HVAC_TEMPERATURE_DISPLAY_UNITS, VEHICLE_UNITS); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.DISTANCE_DISPLAY_UNITS, VEHICLE_UNITS)199 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.DISTANCE_DISPLAY_UNITS, VEHICLE_UNITS); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.FUEL_VOLUME_DISPLAY_UNITS, VEHICLE_UNITS)200 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.FUEL_VOLUME_DISPLAY_UNITS, VEHICLE_UNITS); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.TIRE_PRESSURE_DISPLAY_UNITS, VEHICLE_UNITS)201 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.TIRE_PRESSURE_DISPLAY_UNITS, VEHICLE_UNITS); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.EV_BATTERY_DISPLAY_UNITS, VEHICLE_UNITS)202 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.EV_BATTERY_DISPLAY_UNITS, VEHICLE_UNITS); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.VEHICLE_SPEED_DISPLAY_UNITS, VEHICLE_UNITS)203 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.VEHICLE_SPEED_DISPLAY_UNITS, VEHICLE_UNITS); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.SEAT_OCCUPANCY, SEAT_OCCUPANCY_STATE)204 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.SEAT_OCCUPANCY, SEAT_OCCUPANCY_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HIGH_BEAM_LIGHTS_STATE, VEHICLE_LIGHT_STATE)205 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HIGH_BEAM_LIGHTS_STATE, VEHICLE_LIGHT_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HEADLIGHTS_STATE, VEHICLE_LIGHT_STATE)206 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HEADLIGHTS_STATE, VEHICLE_LIGHT_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.FOG_LIGHTS_STATE, VEHICLE_LIGHT_STATE)207 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.FOG_LIGHTS_STATE, VEHICLE_LIGHT_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.FRONT_FOG_LIGHTS_STATE, VEHICLE_LIGHT_STATE)208 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.FRONT_FOG_LIGHTS_STATE, VEHICLE_LIGHT_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.REAR_FOG_LIGHTS_STATE, VEHICLE_LIGHT_STATE)209 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.REAR_FOG_LIGHTS_STATE, VEHICLE_LIGHT_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HAZARD_LIGHTS_STATE, VEHICLE_LIGHT_STATE)210 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HAZARD_LIGHTS_STATE, VEHICLE_LIGHT_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.CABIN_LIGHTS_STATE, VEHICLE_LIGHT_STATE)211 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.CABIN_LIGHTS_STATE, VEHICLE_LIGHT_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.READING_LIGHTS_STATE, VEHICLE_LIGHT_STATE)212 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.READING_LIGHTS_STATE, VEHICLE_LIGHT_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.EV_CHARGE_STATE, EV_CHARGE_STATE)213 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.EV_CHARGE_STATE, EV_CHARGE_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.EV_REGENERATIVE_BRAKING_STATE, EV_REGENERATIVE_BREAKING_STATE)214 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.EV_REGENERATIVE_BRAKING_STATE, 215 EV_REGENERATIVE_BREAKING_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HEADLIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH)216 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HEADLIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HIGH_BEAM_LIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH)217 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HIGH_BEAM_LIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.FOG_LIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH)218 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.FOG_LIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.FRONT_FOG_LIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH)219 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.FRONT_FOG_LIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.REAR_FOG_LIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH)220 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.REAR_FOG_LIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HAZARD_LIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH)221 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HAZARD_LIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.CABIN_LIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH)222 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.CABIN_LIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.READING_LIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH)223 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.READING_LIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.ELECTRONIC_TOLL_COLLECTION_CARD_TYPE, ETC_CARD_TYPE)224 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.ELECTRONIC_TOLL_COLLECTION_CARD_TYPE, 225 ETC_CARD_TYPE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.ELECTRONIC_TOLL_COLLECTION_CARD_STATUS, ETC_CARD_STATUS)226 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.ELECTRONIC_TOLL_COLLECTION_CARD_STATUS, 227 ETC_CARD_STATUS); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.TRAILER_PRESENT, TRAILER_PRESENT)228 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.TRAILER_PRESENT, 229 TRAILER_PRESENT); HAL_PROP_ID_TO_ENUM_SET.put( VehicleProperty.GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT, GSR_COMP_TYPE)230 HAL_PROP_ID_TO_ENUM_SET.put( 231 VehicleProperty.GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT, 232 GSR_COMP_TYPE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.EV_STOPPING_MODE, EV_STOPPING_MODE)233 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.EV_STOPPING_MODE, 234 EV_STOPPING_MODE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.WINDSHIELD_WIPERS_STATE, WINDSHIELD_WIPERS_STATE)235 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.WINDSHIELD_WIPERS_STATE, 236 WINDSHIELD_WIPERS_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.WINDSHIELD_WIPERS_SWITCH, WINDSHIELD_WIPERS_SWITCH)237 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.WINDSHIELD_WIPERS_SWITCH, 238 WINDSHIELD_WIPERS_SWITCH); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.STEERING_WHEEL_LIGHTS_SWITCH, VEHICLE_LIGHT_SWITCH)239 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.STEERING_WHEEL_LIGHTS_SWITCH, 240 VEHICLE_LIGHT_SWITCH); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.STEERING_WHEEL_LIGHTS_STATE, VEHICLE_LIGHT_STATE)241 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.STEERING_WHEEL_LIGHTS_STATE, 242 VEHICLE_LIGHT_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.EMERGENCY_LANE_KEEP_ASSIST_STATE, EMERGENCY_LANE_KEEP_ASSIST_STATE)243 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.EMERGENCY_LANE_KEEP_ASSIST_STATE, 244 EMERGENCY_LANE_KEEP_ASSIST_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.CRUISE_CONTROL_TYPE, CRUISE_CONTROL_TYPE)245 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.CRUISE_CONTROL_TYPE, 246 CRUISE_CONTROL_TYPE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.CRUISE_CONTROL_STATE, CRUISE_CONTROL_STATE)247 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.CRUISE_CONTROL_STATE, 248 CRUISE_CONTROL_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.CRUISE_CONTROL_COMMAND, CRUISE_CONTROL_COMMAND)249 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.CRUISE_CONTROL_COMMAND, 250 CRUISE_CONTROL_COMMAND); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HANDS_ON_DETECTION_DRIVER_STATE, HANDS_ON_DETECTION_DRIVER_STATE)251 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HANDS_ON_DETECTION_DRIVER_STATE, 252 HANDS_ON_DETECTION_DRIVER_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HANDS_ON_DETECTION_WARNING, HANDS_ON_DETECTION_WARNING)253 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.HANDS_ON_DETECTION_WARNING, 254 HANDS_ON_DETECTION_WARNING); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.AUTOMATIC_EMERGENCY_BRAKING_STATE, AUTOMATIC_EMERGENCY_BRAKING_STATE)255 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.AUTOMATIC_EMERGENCY_BRAKING_STATE, 256 AUTOMATIC_EMERGENCY_BRAKING_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.FORWARD_COLLISION_WARNING_STATE, FORWARD_COLLISION_WARNING_STATE)257 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.FORWARD_COLLISION_WARNING_STATE, 258 FORWARD_COLLISION_WARNING_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.BLIND_SPOT_WARNING_STATE, BLIND_SPOT_WARNING_STATE)259 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.BLIND_SPOT_WARNING_STATE, 260 BLIND_SPOT_WARNING_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.LANE_DEPARTURE_WARNING_STATE, LANE_DEPARTURE_WARNING_STATE)261 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.LANE_DEPARTURE_WARNING_STATE, 262 LANE_DEPARTURE_WARNING_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.LANE_KEEP_ASSIST_STATE, LANE_KEEP_ASSIST_STATE)263 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.LANE_KEEP_ASSIST_STATE, 264 LANE_KEEP_ASSIST_STATE); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.LANE_CENTERING_ASSIST_COMMAND, LANE_CENTERING_ASSIST_COMMAND)265 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.LANE_CENTERING_ASSIST_COMMAND, 266 LANE_CENTERING_ASSIST_COMMAND); HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.LANE_CENTERING_ASSIST_STATE, LANE_CENTERING_ASSIST_STATE)267 HAL_PROP_ID_TO_ENUM_SET.put(VehicleProperty.LANE_CENTERING_ASSIST_STATE, 268 LANE_CENTERING_ASSIST_STATE); 269 } 270 271 // default vendor permission 272 private static final int PERMISSION_CAR_VENDOR_DEFAULT = 0x00000000; 273 274 // permissions for the property related with window 275 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_WINDOW = 0X00000001; 276 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_WINDOW = 0x00000002; 277 // permissions for the property related with door 278 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_DOOR = 0x00000003; 279 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_DOOR = 0x00000004; 280 // permissions for the property related with seat 281 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT = 0x00000005; 282 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT = 0x00000006; 283 // permissions for the property related with mirror 284 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_MIRROR = 0x00000007; 285 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_MIRROR = 0x00000008; 286 287 // permissions for the property related with car's information 288 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_INFO = 0x00000009; 289 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO = 0x0000000A; 290 // permissions for the property related with car's engine 291 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_ENGINE = 0x0000000B; 292 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_ENGINE = 0x0000000C; 293 // permissions for the property related with car's HVAC 294 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_HVAC = 0x0000000D; 295 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_HVAC = 0x0000000E; 296 // permissions for the property related with car's light 297 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_LIGHT = 0x0000000F; 298 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_LIGHT = 0x00000010; 299 300 // permissions reserved for other vendor permission 301 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_1 = 0x00010000; 302 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_1 = 0x00011000; 303 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_2 = 0x00020000; 304 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_2 = 0x00021000; 305 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_3 = 0x00030000; 306 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_3 = 0x00031000; 307 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_4 = 0x00040000; 308 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_4 = 0x00041000; 309 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_5 = 0x00050000; 310 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_5 = 0x00051000; 311 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_6 = 0x00060000; 312 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_6 = 0x00061000; 313 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_7 = 0x00070000; 314 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_7 = 0x00071000; 315 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_8 = 0x00080000; 316 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_8 = 0x00081000; 317 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_9 = 0x00090000; 318 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_9 = 0x00091000; 319 private static final int PERMISSION_SET_CAR_VENDOR_CATEGORY_10 = 0x000A0000; 320 private static final int PERMISSION_GET_CAR_VENDOR_CATEGORY_10 = 0x000A1000; 321 // Not available for android 322 private static final int PERMISSION_CAR_VENDOR_NOT_ACCESSIBLE = 0xF0000000; 323 PropertyHalServiceIds()324 public PropertyHalServiceIds() { 325 // Add propertyId and read/write permissions 326 // Cabin Properties 327 mHalPropIdToPermissions.put(VehicleProperty.DOOR_POS, new Pair<>( 328 Car.PERMISSION_CONTROL_CAR_DOORS, 329 Car.PERMISSION_CONTROL_CAR_DOORS)); 330 mHalPropIdToPermissions.put(VehicleProperty.DOOR_MOVE, new Pair<>( 331 Car.PERMISSION_CONTROL_CAR_DOORS, 332 Car.PERMISSION_CONTROL_CAR_DOORS)); 333 mHalPropIdToPermissions.put(VehicleProperty.DOOR_LOCK, new Pair<>( 334 Car.PERMISSION_CONTROL_CAR_DOORS, 335 Car.PERMISSION_CONTROL_CAR_DOORS)); 336 mHalPropIdToPermissions.put(VehicleProperty.DOOR_CHILD_LOCK_ENABLED, new Pair<>( 337 Car.PERMISSION_CONTROL_CAR_DOORS, 338 Car.PERMISSION_CONTROL_CAR_DOORS)); 339 mHalPropIdToPermissions.put(VehicleProperty.MIRROR_Z_POS, new Pair<>( 340 Car.PERMISSION_CONTROL_CAR_MIRRORS, 341 Car.PERMISSION_CONTROL_CAR_MIRRORS)); 342 mHalPropIdToPermissions.put(VehicleProperty.MIRROR_Z_MOVE, new Pair<>( 343 Car.PERMISSION_CONTROL_CAR_MIRRORS, 344 Car.PERMISSION_CONTROL_CAR_MIRRORS)); 345 mHalPropIdToPermissions.put(VehicleProperty.MIRROR_Y_POS, new Pair<>( 346 Car.PERMISSION_CONTROL_CAR_MIRRORS, 347 Car.PERMISSION_CONTROL_CAR_MIRRORS)); 348 mHalPropIdToPermissions.put(VehicleProperty.MIRROR_Y_MOVE, new Pair<>( 349 Car.PERMISSION_CONTROL_CAR_MIRRORS, 350 Car.PERMISSION_CONTROL_CAR_MIRRORS)); 351 mHalPropIdToPermissions.put(VehicleProperty.MIRROR_LOCK, new Pair<>( 352 Car.PERMISSION_CONTROL_CAR_MIRRORS, 353 Car.PERMISSION_CONTROL_CAR_MIRRORS)); 354 mHalPropIdToPermissions.put(VehicleProperty.MIRROR_FOLD, new Pair<>( 355 Car.PERMISSION_CONTROL_CAR_MIRRORS, 356 Car.PERMISSION_CONTROL_CAR_MIRRORS)); 357 mHalPropIdToPermissions.put(VehicleProperty.MIRROR_AUTO_FOLD_ENABLED, new Pair<>( 358 Car.PERMISSION_CONTROL_CAR_MIRRORS, 359 Car.PERMISSION_CONTROL_CAR_MIRRORS)); 360 mHalPropIdToPermissions.put(VehicleProperty.MIRROR_AUTO_TILT_ENABLED, new Pair<>( 361 Car.PERMISSION_CONTROL_CAR_MIRRORS, 362 Car.PERMISSION_CONTROL_CAR_MIRRORS)); 363 mHalPropIdToPermissions.put(VehicleProperty.GLOVE_BOX_DOOR_POS, new Pair<>( 364 Car.PERMISSION_CONTROL_GLOVE_BOX, 365 Car.PERMISSION_CONTROL_GLOVE_BOX)); 366 mHalPropIdToPermissions.put(VehicleProperty.GLOVE_BOX_LOCKED, new Pair<>( 367 Car.PERMISSION_CONTROL_GLOVE_BOX, 368 Car.PERMISSION_CONTROL_GLOVE_BOX)); 369 mHalPropIdToPermissions.put(VehicleProperty.SEAT_MEMORY_SELECT, new Pair<>( 370 null, 371 Car.PERMISSION_CONTROL_CAR_SEATS)); 372 mHalPropIdToPermissions.put(VehicleProperty.SEAT_MEMORY_SET, new Pair<>( 373 null, 374 Car.PERMISSION_CONTROL_CAR_SEATS)); 375 mHalPropIdToPermissions.put(VehicleProperty.SEAT_BELT_BUCKLED, new Pair<>( 376 Car.PERMISSION_CONTROL_CAR_SEATS, 377 Car.PERMISSION_CONTROL_CAR_SEATS)); 378 mHalPropIdToPermissions.put(VehicleProperty.SEAT_BELT_HEIGHT_POS, new Pair<>( 379 Car.PERMISSION_CONTROL_CAR_SEATS, 380 Car.PERMISSION_CONTROL_CAR_SEATS)); 381 mHalPropIdToPermissions.put(VehicleProperty.SEAT_BELT_HEIGHT_MOVE, new Pair<>( 382 Car.PERMISSION_CONTROL_CAR_SEATS, 383 Car.PERMISSION_CONTROL_CAR_SEATS)); 384 mHalPropIdToPermissions.put(VehicleProperty.SEAT_FORE_AFT_POS, new Pair<>( 385 Car.PERMISSION_CONTROL_CAR_SEATS, 386 Car.PERMISSION_CONTROL_CAR_SEATS)); 387 mHalPropIdToPermissions.put(VehicleProperty.SEAT_FORE_AFT_MOVE, new Pair<>( 388 Car.PERMISSION_CONTROL_CAR_SEATS, 389 Car.PERMISSION_CONTROL_CAR_SEATS)); 390 mHalPropIdToPermissions.put(VehicleProperty.SEAT_BACKREST_ANGLE_1_POS, new Pair<>( 391 Car.PERMISSION_CONTROL_CAR_SEATS, 392 Car.PERMISSION_CONTROL_CAR_SEATS)); 393 mHalPropIdToPermissions.put(VehicleProperty.SEAT_BACKREST_ANGLE_1_MOVE, new Pair<>( 394 Car.PERMISSION_CONTROL_CAR_SEATS, 395 Car.PERMISSION_CONTROL_CAR_SEATS)); 396 mHalPropIdToPermissions.put(VehicleProperty.SEAT_BACKREST_ANGLE_2_POS, new Pair<>( 397 Car.PERMISSION_CONTROL_CAR_SEATS, 398 Car.PERMISSION_CONTROL_CAR_SEATS)); 399 mHalPropIdToPermissions.put(VehicleProperty.SEAT_BACKREST_ANGLE_2_MOVE, new Pair<>( 400 Car.PERMISSION_CONTROL_CAR_SEATS, 401 Car.PERMISSION_CONTROL_CAR_SEATS)); 402 mHalPropIdToPermissions.put(VehicleProperty.SEAT_HEIGHT_POS, new Pair<>( 403 Car.PERMISSION_CONTROL_CAR_SEATS, 404 Car.PERMISSION_CONTROL_CAR_SEATS)); 405 mHalPropIdToPermissions.put(VehicleProperty.SEAT_HEIGHT_MOVE, new Pair<>( 406 Car.PERMISSION_CONTROL_CAR_SEATS, 407 Car.PERMISSION_CONTROL_CAR_SEATS)); 408 mHalPropIdToPermissions.put(VehicleProperty.SEAT_DEPTH_POS, new Pair<>( 409 Car.PERMISSION_CONTROL_CAR_SEATS, 410 Car.PERMISSION_CONTROL_CAR_SEATS)); 411 mHalPropIdToPermissions.put(VehicleProperty.SEAT_DEPTH_MOVE, new Pair<>( 412 Car.PERMISSION_CONTROL_CAR_SEATS, 413 Car.PERMISSION_CONTROL_CAR_SEATS)); 414 mHalPropIdToPermissions.put(VehicleProperty.SEAT_TILT_POS, new Pair<>( 415 Car.PERMISSION_CONTROL_CAR_SEATS, 416 Car.PERMISSION_CONTROL_CAR_SEATS)); 417 mHalPropIdToPermissions.put(VehicleProperty.SEAT_TILT_MOVE, new Pair<>( 418 Car.PERMISSION_CONTROL_CAR_SEATS, 419 Car.PERMISSION_CONTROL_CAR_SEATS)); 420 mHalPropIdToPermissions.put(VehicleProperty.SEAT_LUMBAR_FORE_AFT_POS, new Pair<>( 421 Car.PERMISSION_CONTROL_CAR_SEATS, 422 Car.PERMISSION_CONTROL_CAR_SEATS)); 423 mHalPropIdToPermissions.put(VehicleProperty.SEAT_LUMBAR_FORE_AFT_MOVE, new Pair<>( 424 Car.PERMISSION_CONTROL_CAR_SEATS, 425 Car.PERMISSION_CONTROL_CAR_SEATS)); 426 mHalPropIdToPermissions.put(VehicleProperty.SEAT_LUMBAR_SIDE_SUPPORT_POS, new Pair<>( 427 Car.PERMISSION_CONTROL_CAR_SEATS, 428 Car.PERMISSION_CONTROL_CAR_SEATS)); 429 mHalPropIdToPermissions.put(VehicleProperty.SEAT_LUMBAR_SIDE_SUPPORT_MOVE, new Pair<>( 430 Car.PERMISSION_CONTROL_CAR_SEATS, 431 Car.PERMISSION_CONTROL_CAR_SEATS)); 432 mHalPropIdToPermissions.put(VehicleProperty.SEAT_HEADREST_HEIGHT_POS_V2, new Pair<>( 433 Car.PERMISSION_CONTROL_CAR_SEATS, 434 Car.PERMISSION_CONTROL_CAR_SEATS)); 435 mHalPropIdToPermissions.put(VehicleProperty.SEAT_HEADREST_HEIGHT_MOVE, new Pair<>( 436 Car.PERMISSION_CONTROL_CAR_SEATS, 437 Car.PERMISSION_CONTROL_CAR_SEATS)); 438 mHalPropIdToPermissions.put(VehicleProperty.SEAT_HEADREST_ANGLE_POS, new Pair<>( 439 Car.PERMISSION_CONTROL_CAR_SEATS, 440 Car.PERMISSION_CONTROL_CAR_SEATS)); 441 mHalPropIdToPermissions.put(VehicleProperty.SEAT_HEADREST_ANGLE_MOVE, new Pair<>( 442 Car.PERMISSION_CONTROL_CAR_SEATS, 443 Car.PERMISSION_CONTROL_CAR_SEATS)); 444 mHalPropIdToPermissions.put(VehicleProperty.SEAT_HEADREST_FORE_AFT_POS, new Pair<>( 445 Car.PERMISSION_CONTROL_CAR_SEATS, 446 Car.PERMISSION_CONTROL_CAR_SEATS)); 447 mHalPropIdToPermissions.put(VehicleProperty.SEAT_HEADREST_FORE_AFT_MOVE, new Pair<>( 448 Car.PERMISSION_CONTROL_CAR_SEATS, 449 Car.PERMISSION_CONTROL_CAR_SEATS)); 450 mHalPropIdToPermissions.put(VehicleProperty.SEAT_FOOTWELL_LIGHTS_STATE, new Pair<>( 451 Car.PERMISSION_READ_INTERIOR_LIGHTS, 452 null)); 453 mHalPropIdToPermissions.put(VehicleProperty.SEAT_FOOTWELL_LIGHTS_SWITCH, new Pair<>( 454 Car.PERMISSION_CONTROL_INTERIOR_LIGHTS, 455 Car.PERMISSION_CONTROL_INTERIOR_LIGHTS)); 456 mHalPropIdToPermissions.put(VehicleProperty.SEAT_EASY_ACCESS_ENABLED, new Pair<>( 457 Car.PERMISSION_CONTROL_CAR_SEATS, 458 Car.PERMISSION_CONTROL_CAR_SEATS)); 459 mHalPropIdToPermissions.put(VehicleProperty.SEAT_AIRBAG_ENABLED, new Pair<>( 460 Car.PERMISSION_CONTROL_CAR_AIRBAGS, 461 Car.PERMISSION_CONTROL_CAR_AIRBAGS)); 462 mHalPropIdToPermissions.put(VehicleProperty.SEAT_CUSHION_SIDE_SUPPORT_POS, new Pair<>( 463 Car.PERMISSION_CONTROL_CAR_SEATS, 464 Car.PERMISSION_CONTROL_CAR_SEATS)); 465 mHalPropIdToPermissions.put(VehicleProperty.SEAT_CUSHION_SIDE_SUPPORT_MOVE, new Pair<>( 466 Car.PERMISSION_CONTROL_CAR_SEATS, 467 Car.PERMISSION_CONTROL_CAR_SEATS)); 468 mHalPropIdToPermissions.put(VehicleProperty.SEAT_LUMBAR_VERTICAL_POS, new Pair<>( 469 Car.PERMISSION_CONTROL_CAR_SEATS, 470 Car.PERMISSION_CONTROL_CAR_SEATS)); 471 mHalPropIdToPermissions.put(VehicleProperty.SEAT_LUMBAR_VERTICAL_MOVE, new Pair<>( 472 Car.PERMISSION_CONTROL_CAR_SEATS, 473 Car.PERMISSION_CONTROL_CAR_SEATS)); 474 mHalPropIdToPermissions.put(VehicleProperty.SEAT_WALK_IN_POS, new Pair<>( 475 Car.PERMISSION_CONTROL_CAR_SEATS, 476 Car.PERMISSION_CONTROL_CAR_SEATS)); 477 mHalPropIdToPermissions.put(VehicleProperty.SEAT_OCCUPANCY, new Pair<>( 478 Car.PERMISSION_CONTROL_CAR_SEATS, 479 null)); 480 mHalPropIdToPermissions.put(VehicleProperty.WINDOW_POS, new Pair<>( 481 Car.PERMISSION_CONTROL_CAR_WINDOWS, 482 Car.PERMISSION_CONTROL_CAR_WINDOWS)); 483 mHalPropIdToPermissions.put(VehicleProperty.WINDOW_MOVE, new Pair<>( 484 Car.PERMISSION_CONTROL_CAR_WINDOWS, 485 Car.PERMISSION_CONTROL_CAR_WINDOWS)); 486 mHalPropIdToPermissions.put(VehicleProperty.WINDOW_LOCK, new Pair<>( 487 Car.PERMISSION_CONTROL_CAR_WINDOWS, 488 Car.PERMISSION_CONTROL_CAR_WINDOWS)); 489 mHalPropIdToPermissions.put(VehicleProperty.WINDSHIELD_WIPERS_PERIOD, new Pair<>( 490 Car.PERMISSION_READ_WINDSHIELD_WIPERS, 491 null)); 492 mHalPropIdToPermissions.put(VehicleProperty.WINDSHIELD_WIPERS_STATE, new Pair<>( 493 Car.PERMISSION_READ_WINDSHIELD_WIPERS, 494 null)); 495 mHalPropIdToPermissions.put(VehicleProperty.WINDSHIELD_WIPERS_SWITCH, new Pair<>( 496 Car.PERMISSION_READ_WINDSHIELD_WIPERS, 497 Car.PERMISSION_CONTROL_WINDSHIELD_WIPERS)); 498 mHalPropIdToPermissions.put(VehicleProperty.STEERING_WHEEL_DEPTH_POS, new Pair<>( 499 Car.PERMISSION_CONTROL_STEERING_WHEEL, 500 Car.PERMISSION_CONTROL_STEERING_WHEEL)); 501 mHalPropIdToPermissions.put(VehicleProperty.STEERING_WHEEL_DEPTH_MOVE, new Pair<>( 502 Car.PERMISSION_CONTROL_STEERING_WHEEL, 503 Car.PERMISSION_CONTROL_STEERING_WHEEL)); 504 mHalPropIdToPermissions.put(VehicleProperty.STEERING_WHEEL_HEIGHT_POS, new Pair<>( 505 Car.PERMISSION_CONTROL_STEERING_WHEEL, 506 Car.PERMISSION_CONTROL_STEERING_WHEEL)); 507 mHalPropIdToPermissions.put(VehicleProperty.STEERING_WHEEL_HEIGHT_MOVE, new Pair<>( 508 Car.PERMISSION_CONTROL_STEERING_WHEEL, 509 Car.PERMISSION_CONTROL_STEERING_WHEEL)); 510 mHalPropIdToPermissions.put(VehicleProperty.STEERING_WHEEL_THEFT_LOCK_ENABLED, new Pair<>( 511 Car.PERMISSION_CONTROL_STEERING_WHEEL, 512 Car.PERMISSION_CONTROL_STEERING_WHEEL)); 513 mHalPropIdToPermissions.put(VehicleProperty.STEERING_WHEEL_LOCKED, new Pair<>( 514 Car.PERMISSION_CONTROL_STEERING_WHEEL, 515 Car.PERMISSION_CONTROL_STEERING_WHEEL)); 516 mHalPropIdToPermissions.put(VehicleProperty.STEERING_WHEEL_EASY_ACCESS_ENABLED, new Pair<>( 517 Car.PERMISSION_CONTROL_STEERING_WHEEL, 518 Car.PERMISSION_CONTROL_STEERING_WHEEL)); 519 520 // HVAC properties 521 mHalPropIdToPermissions.put(VehicleProperty.HVAC_FAN_SPEED, new Pair<>( 522 Car.PERMISSION_CONTROL_CAR_CLIMATE, 523 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 524 mHalPropIdToPermissions.put(VehicleProperty.HVAC_FAN_DIRECTION, new Pair<>( 525 Car.PERMISSION_CONTROL_CAR_CLIMATE, 526 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 527 mHalPropIdToPermissions.put(VehicleProperty.HVAC_TEMPERATURE_CURRENT, new Pair<>( 528 Car.PERMISSION_CONTROL_CAR_CLIMATE, 529 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 530 mHalPropIdToPermissions.put(VehicleProperty.HVAC_TEMPERATURE_SET, new Pair<>( 531 Car.PERMISSION_CONTROL_CAR_CLIMATE, 532 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 533 mHalPropIdToPermissions.put(VehicleProperty.HVAC_TEMPERATURE_VALUE_SUGGESTION, new Pair<>( 534 Car.PERMISSION_CONTROL_CAR_CLIMATE, 535 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 536 mHalPropIdToPermissions.put(VehicleProperty.HVAC_DEFROSTER, new Pair<>( 537 Car.PERMISSION_CONTROL_CAR_CLIMATE, 538 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 539 mHalPropIdToPermissions.put(VehicleProperty.HVAC_ELECTRIC_DEFROSTER_ON, new Pair<>( 540 Car.PERMISSION_CONTROL_CAR_CLIMATE, 541 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 542 mHalPropIdToPermissions.put(VehicleProperty.HVAC_AC_ON, new Pair<>( 543 Car.PERMISSION_CONTROL_CAR_CLIMATE, 544 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 545 mHalPropIdToPermissions.put(VehicleProperty.HVAC_MAX_AC_ON, new Pair<>( 546 Car.PERMISSION_CONTROL_CAR_CLIMATE, 547 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 548 mHalPropIdToPermissions.put(VehicleProperty.HVAC_MAX_DEFROST_ON, new Pair<>( 549 Car.PERMISSION_CONTROL_CAR_CLIMATE, 550 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 551 mHalPropIdToPermissions.put(VehicleProperty.HVAC_RECIRC_ON, new Pair<>( 552 Car.PERMISSION_CONTROL_CAR_CLIMATE, 553 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 554 mHalPropIdToPermissions.put(VehicleProperty.HVAC_DUAL_ON, new Pair<>( 555 Car.PERMISSION_CONTROL_CAR_CLIMATE, 556 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 557 mHalPropIdToPermissions.put(VehicleProperty.HVAC_AUTO_ON, new Pair<>( 558 Car.PERMISSION_CONTROL_CAR_CLIMATE, 559 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 560 mHalPropIdToPermissions.put(VehicleProperty.HVAC_SEAT_TEMPERATURE, new Pair<>( 561 Car.PERMISSION_CONTROL_CAR_CLIMATE, 562 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 563 mHalPropIdToPermissions.put(VehicleProperty.HVAC_SIDE_MIRROR_HEAT, new Pair<>( 564 Car.PERMISSION_CONTROL_CAR_CLIMATE, 565 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 566 mHalPropIdToPermissions.put(VehicleProperty.HVAC_STEERING_WHEEL_HEAT, new Pair<>( 567 Car.PERMISSION_CONTROL_CAR_CLIMATE, 568 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 569 mHalPropIdToPermissions.put(VehicleProperty.HVAC_TEMPERATURE_DISPLAY_UNITS, new Pair<>( 570 Car.PERMISSION_CONTROL_CAR_CLIMATE, 571 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 572 mHalPropIdToPermissions.put(VehicleProperty.HVAC_ACTUAL_FAN_SPEED_RPM, new Pair<>( 573 Car.PERMISSION_CONTROL_CAR_CLIMATE, 574 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 575 mHalPropIdToPermissions.put(VehicleProperty.HVAC_POWER_ON, new Pair<>( 576 Car.PERMISSION_CONTROL_CAR_CLIMATE, 577 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 578 mHalPropIdToPermissions.put(VehicleProperty.HVAC_FAN_DIRECTION_AVAILABLE, new Pair<>( 579 Car.PERMISSION_CONTROL_CAR_CLIMATE, 580 null)); 581 mHalPropIdToPermissions.put(VehicleProperty.HVAC_AUTO_RECIRC_ON, new Pair<>( 582 Car.PERMISSION_CONTROL_CAR_CLIMATE, 583 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 584 mHalPropIdToPermissions.put(VehicleProperty.HVAC_SEAT_VENTILATION, new Pair<>( 585 Car.PERMISSION_CONTROL_CAR_CLIMATE, 586 Car.PERMISSION_CONTROL_CAR_CLIMATE)); 587 588 // Info properties 589 mHalPropIdToPermissions.put(VehicleProperty.INFO_VIN, new Pair<>( 590 Car.PERMISSION_IDENTIFICATION, 591 null)); 592 mHalPropIdToPermissions.put(VehicleProperty.INFO_MAKE, new Pair<>( 593 Car.PERMISSION_CAR_INFO, 594 null)); 595 mHalPropIdToPermissions.put(VehicleProperty.INFO_MODEL, new Pair<>( 596 Car.PERMISSION_CAR_INFO, 597 null)); 598 mHalPropIdToPermissions.put(VehicleProperty.INFO_MODEL_YEAR, new Pair<>( 599 Car.PERMISSION_CAR_INFO, 600 null)); 601 mHalPropIdToPermissions.put(VehicleProperty.INFO_FUEL_CAPACITY, new Pair<>( 602 Car.PERMISSION_CAR_INFO, 603 null)); 604 mHalPropIdToPermissions.put(VehicleProperty.INFO_FUEL_TYPE, new Pair<>( 605 Car.PERMISSION_CAR_INFO, 606 null)); 607 mHalPropIdToPermissions.put(VehicleProperty.INFO_EV_BATTERY_CAPACITY, new Pair<>( 608 Car.PERMISSION_CAR_INFO, 609 null)); 610 mHalPropIdToPermissions.put(VehicleProperty.INFO_EV_CONNECTOR_TYPE, new Pair<>( 611 Car.PERMISSION_CAR_INFO, 612 null)); 613 mHalPropIdToPermissions.put(VehicleProperty.INFO_FUEL_DOOR_LOCATION, new Pair<>( 614 Car.PERMISSION_CAR_INFO, 615 null)); 616 mHalPropIdToPermissions.put(VehicleProperty.INFO_MULTI_EV_PORT_LOCATIONS, new Pair<>( 617 Car.PERMISSION_CAR_INFO, 618 null)); 619 mHalPropIdToPermissions.put(VehicleProperty.INFO_EV_PORT_LOCATION, new Pair<>( 620 Car.PERMISSION_CAR_INFO, 621 null)); 622 mHalPropIdToPermissions.put(VehicleProperty.INFO_DRIVER_SEAT, new Pair<>( 623 Car.PERMISSION_CAR_INFO, 624 null)); 625 mHalPropIdToPermissions.put(VehicleProperty.INFO_EXTERIOR_DIMENSIONS, new Pair<>( 626 Car.PERMISSION_CAR_INFO, 627 null)); 628 629 // Sensor properties 630 mHalPropIdToPermissions.put(VehicleProperty.EMERGENCY_LANE_KEEP_ASSIST_ENABLED, new Pair<>( 631 Car.PERMISSION_READ_ADAS_SETTINGS, 632 Car.PERMISSION_CONTROL_ADAS_SETTINGS)); 633 mHalPropIdToPermissions.put(VehicleProperty.EMERGENCY_LANE_KEEP_ASSIST_STATE, new Pair<>( 634 Car.PERMISSION_READ_ADAS_STATES, 635 null)); 636 mHalPropIdToPermissions.put(VehicleProperty.CRUISE_CONTROL_ENABLED, new Pair<>( 637 Car.PERMISSION_READ_ADAS_SETTINGS, 638 Car.PERMISSION_CONTROL_ADAS_SETTINGS)); 639 mHalPropIdToPermissions.put(VehicleProperty.CRUISE_CONTROL_TYPE, new Pair<>( 640 Car.PERMISSION_READ_ADAS_STATES, 641 Car.PERMISSION_CONTROL_ADAS_STATES)); 642 mHalPropIdToPermissions.put(VehicleProperty.CRUISE_CONTROL_STATE, new Pair<>( 643 Car.PERMISSION_READ_ADAS_STATES, 644 null)); 645 mHalPropIdToPermissions.put(VehicleProperty.CRUISE_CONTROL_COMMAND, new Pair<>( 646 null, 647 Car.PERMISSION_CONTROL_ADAS_STATES)); 648 mHalPropIdToPermissions.put(VehicleProperty.CRUISE_CONTROL_TARGET_SPEED, new Pair<>( 649 Car.PERMISSION_READ_ADAS_STATES, 650 null)); 651 mHalPropIdToPermissions.put(VehicleProperty.ADAPTIVE_CRUISE_CONTROL_TARGET_TIME_GAP, 652 new Pair<>( 653 Car.PERMISSION_READ_ADAS_STATES, 654 Car.PERMISSION_CONTROL_ADAS_STATES)); 655 mHalPropIdToPermissions.put( 656 VehicleProperty.ADAPTIVE_CRUISE_CONTROL_LEAD_VEHICLE_MEASURED_DISTANCE, new Pair<>( 657 Car.PERMISSION_READ_ADAS_STATES, 658 null)); 659 mHalPropIdToPermissions.put(VehicleProperty.HANDS_ON_DETECTION_ENABLED, new Pair<>( 660 Car.PERMISSION_READ_DRIVER_MONITORING_SETTINGS, 661 Car.PERMISSION_CONTROL_DRIVER_MONITORING_SETTINGS)); 662 mHalPropIdToPermissions.put(VehicleProperty.HANDS_ON_DETECTION_DRIVER_STATE, new Pair<>( 663 Car.PERMISSION_READ_DRIVER_MONITORING_STATES, 664 null)); 665 mHalPropIdToPermissions.put(VehicleProperty.HANDS_ON_DETECTION_WARNING, new Pair<>( 666 Car.PERMISSION_READ_DRIVER_MONITORING_STATES, 667 null)); 668 mHalPropIdToPermissions.put(VehicleProperty.PERF_ODOMETER, new Pair<>( 669 Car.PERMISSION_MILEAGE, 670 null)); 671 mHalPropIdToPermissions.put(VehicleProperty.PERF_VEHICLE_SPEED, new Pair<>( 672 Car.PERMISSION_SPEED, 673 null)); 674 mHalPropIdToPermissions.put(VehicleProperty.PERF_VEHICLE_SPEED_DISPLAY, new Pair<>( 675 Car.PERMISSION_SPEED, 676 null)); 677 mHalPropIdToPermissions.put(VehicleProperty.ENGINE_COOLANT_TEMP, new Pair<>( 678 Car.PERMISSION_CAR_ENGINE_DETAILED, 679 null)); 680 mHalPropIdToPermissions.put(VehicleProperty.ENGINE_OIL_LEVEL, new Pair<>( 681 Car.PERMISSION_CAR_ENGINE_DETAILED, 682 null)); 683 mHalPropIdToPermissions.put(VehicleProperty.ENGINE_OIL_TEMP, new Pair<>( 684 Car.PERMISSION_CAR_ENGINE_DETAILED, 685 null)); 686 mHalPropIdToPermissions.put(VehicleProperty.ENGINE_RPM, new Pair<>( 687 Car.PERMISSION_CAR_ENGINE_DETAILED, 688 null)); 689 mHalPropIdToPermissions.put(VehicleProperty.ENGINE_IDLE_AUTO_STOP_ENABLED, new Pair<>( 690 Car.PERMISSION_CAR_ENGINE_DETAILED, 691 Car.PERMISSION_CAR_ENGINE_DETAILED)); 692 mHalPropIdToPermissions.put(VehicleProperty.WHEEL_TICK, new Pair<>( 693 Car.PERMISSION_SPEED, 694 null)); 695 mHalPropIdToPermissions.put(VehicleProperty.FUEL_LEVEL, new Pair<>( 696 Car.PERMISSION_ENERGY, 697 null)); 698 mHalPropIdToPermissions.put(VehicleProperty.FUEL_DOOR_OPEN, new Pair<>( 699 Car.PERMISSION_ENERGY_PORTS, 700 Car.PERMISSION_CONTROL_ENERGY_PORTS)); 701 mHalPropIdToPermissions.put(VehicleProperty.EV_BATTERY_LEVEL, new Pair<>( 702 Car.PERMISSION_ENERGY, 703 null)); 704 mHalPropIdToPermissions.put(VehicleProperty.EV_CURRENT_BATTERY_CAPACITY, new Pair<>( 705 Car.PERMISSION_ENERGY, 706 null)); 707 mHalPropIdToPermissions.put(VehicleProperty.EV_CHARGE_CURRENT_DRAW_LIMIT, new Pair<>( 708 Car.PERMISSION_ENERGY, Car.PERMISSION_CONTROL_CAR_ENERGY)); 709 mHalPropIdToPermissions.put(VehicleProperty.EV_CHARGE_PERCENT_LIMIT, new Pair<>( 710 Car.PERMISSION_ENERGY, Car.PERMISSION_CONTROL_CAR_ENERGY)); 711 mHalPropIdToPermissions.put(VehicleProperty.EV_CHARGE_STATE, new Pair<>( 712 Car.PERMISSION_ENERGY, null)); 713 mHalPropIdToPermissions.put(VehicleProperty.EV_CHARGE_SWITCH, new Pair<>( 714 Car.PERMISSION_ENERGY, Car.PERMISSION_CONTROL_CAR_ENERGY)); 715 mHalPropIdToPermissions.put(VehicleProperty.EV_CHARGE_TIME_REMAINING, new Pair<>( 716 Car.PERMISSION_ENERGY, null)); 717 mHalPropIdToPermissions.put(VehicleProperty.EV_REGENERATIVE_BRAKING_STATE, new Pair<>( 718 Car.PERMISSION_ENERGY, null)); 719 mHalPropIdToPermissions.put(VehicleProperty.EV_CHARGE_PORT_OPEN, new Pair<>( 720 Car.PERMISSION_ENERGY_PORTS, 721 Car.PERMISSION_CONTROL_ENERGY_PORTS)); 722 mHalPropIdToPermissions.put(VehicleProperty.EV_CHARGE_PORT_CONNECTED, new Pair<>( 723 Car.PERMISSION_ENERGY_PORTS, 724 null)); 725 mHalPropIdToPermissions.put(VehicleProperty.EV_BATTERY_INSTANTANEOUS_CHARGE_RATE, 726 new Pair<>(Car.PERMISSION_ENERGY, null)); 727 mHalPropIdToPermissions.put(VehicleProperty.RANGE_REMAINING, new Pair<>( 728 Car.PERMISSION_ENERGY, 729 Car.PERMISSION_ADJUST_RANGE_REMAINING)); 730 mHalPropIdToPermissions.put(VehicleProperty.TIRE_PRESSURE, new Pair<>( 731 Car.PERMISSION_TIRES, 732 null)); 733 mHalPropIdToPermissions.put(VehicleProperty.CRITICALLY_LOW_TIRE_PRESSURE, new Pair<>( 734 Car.PERMISSION_TIRES, 735 null)); 736 mHalPropIdToPermissions.put(VehicleProperty.PERF_STEERING_ANGLE, new Pair<>( 737 Car.PERMISSION_READ_STEERING_STATE, 738 null)); 739 mHalPropIdToPermissions.put(VehicleProperty.PERF_REAR_STEERING_ANGLE, new Pair<>( 740 Car.PERMISSION_READ_STEERING_STATE, 741 null)); 742 mHalPropIdToPermissions.put(VehicleProperty.GEAR_SELECTION, new Pair<>( 743 Car.PERMISSION_POWERTRAIN, 744 null)); 745 mHalPropIdToPermissions.put(VehicleProperty.CURRENT_GEAR, new Pair<>( 746 Car.PERMISSION_POWERTRAIN, 747 null)); 748 mHalPropIdToPermissions.put(VehicleProperty.PARKING_BRAKE_ON, new Pair<>( 749 Car.PERMISSION_POWERTRAIN, 750 null)); 751 mHalPropIdToPermissions.put(VehicleProperty.PARKING_BRAKE_AUTO_APPLY, new Pair<>( 752 Car.PERMISSION_POWERTRAIN, 753 null)); 754 mHalPropIdToPermissions.put(VehicleProperty.EV_BRAKE_REGENERATION_LEVEL, new Pair<>( 755 Car.PERMISSION_POWERTRAIN, 756 Car.PERMISSION_CONTROL_POWERTRAIN)); 757 mHalPropIdToPermissions.put(VehicleProperty.EV_STOPPING_MODE, new Pair<>( 758 Car.PERMISSION_POWERTRAIN, 759 Car.PERMISSION_CONTROL_POWERTRAIN)); 760 mHalPropIdToPermissions.put(VehicleProperty.FUEL_LEVEL_LOW, new Pair<>( 761 Car.PERMISSION_ENERGY, 762 null)); 763 mHalPropIdToPermissions.put(VehicleProperty.NIGHT_MODE, new Pair<>( 764 Car.PERMISSION_EXTERIOR_ENVIRONMENT, 765 null)); 766 mHalPropIdToPermissions.put(VehicleProperty.TURN_SIGNAL_STATE, new Pair<>( 767 Car.PERMISSION_EXTERIOR_LIGHTS, 768 null)); 769 mHalPropIdToPermissions.put(VehicleProperty.IGNITION_STATE, new Pair<>( 770 Car.PERMISSION_POWERTRAIN, 771 null)); 772 mHalPropIdToPermissions.put(VehicleProperty.ABS_ACTIVE, new Pair<>( 773 Car.PERMISSION_CAR_DYNAMICS_STATE, 774 null)); 775 mHalPropIdToPermissions.put(VehicleProperty.TRACTION_CONTROL_ACTIVE, new Pair<>( 776 Car.PERMISSION_CAR_DYNAMICS_STATE, 777 null)); 778 mHalPropIdToPermissions.put(VehicleProperty.ENV_OUTSIDE_TEMPERATURE, new Pair<>( 779 Car.PERMISSION_EXTERIOR_ENVIRONMENT, 780 null)); 781 mHalPropIdToPermissions.put(VehicleProperty.HEADLIGHTS_STATE, new Pair<>( 782 Car.PERMISSION_EXTERIOR_LIGHTS, 783 null)); 784 mHalPropIdToPermissions.put(VehicleProperty.HIGH_BEAM_LIGHTS_STATE, new Pair<>( 785 Car.PERMISSION_EXTERIOR_LIGHTS, 786 null)); 787 mHalPropIdToPermissions.put(VehicleProperty.FOG_LIGHTS_STATE, new Pair<>( 788 Car.PERMISSION_EXTERIOR_LIGHTS, 789 null)); 790 mHalPropIdToPermissions.put(VehicleProperty.FRONT_FOG_LIGHTS_STATE, new Pair<>( 791 Car.PERMISSION_EXTERIOR_LIGHTS, 792 null)); 793 mHalPropIdToPermissions.put(VehicleProperty.REAR_FOG_LIGHTS_STATE, new Pair<>( 794 Car.PERMISSION_EXTERIOR_LIGHTS, 795 null)); 796 mHalPropIdToPermissions.put(VehicleProperty.HAZARD_LIGHTS_STATE, new Pair<>( 797 Car.PERMISSION_EXTERIOR_LIGHTS, 798 null)); 799 mHalPropIdToPermissions.put(VehicleProperty.HEADLIGHTS_SWITCH, new Pair<>( 800 Car.PERMISSION_CONTROL_EXTERIOR_LIGHTS, 801 Car.PERMISSION_CONTROL_EXTERIOR_LIGHTS)); 802 mHalPropIdToPermissions.put(VehicleProperty.HIGH_BEAM_LIGHTS_SWITCH, new Pair<>( 803 Car.PERMISSION_CONTROL_EXTERIOR_LIGHTS, 804 Car.PERMISSION_CONTROL_EXTERIOR_LIGHTS)); 805 mHalPropIdToPermissions.put(VehicleProperty.FOG_LIGHTS_SWITCH, new Pair<>( 806 Car.PERMISSION_CONTROL_EXTERIOR_LIGHTS, 807 Car.PERMISSION_CONTROL_EXTERIOR_LIGHTS)); 808 mHalPropIdToPermissions.put(VehicleProperty.FRONT_FOG_LIGHTS_SWITCH, new Pair<>( 809 Car.PERMISSION_CONTROL_EXTERIOR_LIGHTS, 810 Car.PERMISSION_CONTROL_EXTERIOR_LIGHTS)); 811 mHalPropIdToPermissions.put(VehicleProperty.REAR_FOG_LIGHTS_SWITCH, new Pair<>( 812 Car.PERMISSION_CONTROL_EXTERIOR_LIGHTS, 813 Car.PERMISSION_CONTROL_EXTERIOR_LIGHTS)); 814 mHalPropIdToPermissions.put(VehicleProperty.HAZARD_LIGHTS_SWITCH, new Pair<>( 815 Car.PERMISSION_CONTROL_EXTERIOR_LIGHTS, 816 Car.PERMISSION_CONTROL_EXTERIOR_LIGHTS)); 817 mHalPropIdToPermissions.put(VehicleProperty.READING_LIGHTS_STATE, new Pair<>( 818 Car.PERMISSION_READ_INTERIOR_LIGHTS, 819 null)); 820 mHalPropIdToPermissions.put(VehicleProperty.CABIN_LIGHTS_STATE, new Pair<>( 821 Car.PERMISSION_READ_INTERIOR_LIGHTS, 822 null)); 823 mHalPropIdToPermissions.put(VehicleProperty.STEERING_WHEEL_LIGHTS_STATE, new Pair<>( 824 Car.PERMISSION_READ_INTERIOR_LIGHTS, 825 null)); 826 mHalPropIdToPermissions.put(VehicleProperty.READING_LIGHTS_SWITCH, new Pair<>( 827 Car.PERMISSION_CONTROL_INTERIOR_LIGHTS, 828 Car.PERMISSION_CONTROL_INTERIOR_LIGHTS)); 829 mHalPropIdToPermissions.put(VehicleProperty.CABIN_LIGHTS_SWITCH, new Pair<>( 830 Car.PERMISSION_CONTROL_INTERIOR_LIGHTS, 831 Car.PERMISSION_CONTROL_INTERIOR_LIGHTS)); 832 mHalPropIdToPermissions.put(VehicleProperty.STEERING_WHEEL_LIGHTS_SWITCH, new Pair<>( 833 Car.PERMISSION_CONTROL_INTERIOR_LIGHTS, 834 Car.PERMISSION_CONTROL_INTERIOR_LIGHTS)); 835 mHalPropIdToPermissions.put(VehicleProperty.ANDROID_EPOCH_TIME, new Pair<>( 836 null, 837 Car.PERMISSION_CAR_EPOCH_TIME)); 838 mHalPropIdToPermissions.put(VehicleProperty.AUTOMATIC_EMERGENCY_BRAKING_ENABLED, new Pair<>( 839 Car.PERMISSION_READ_ADAS_SETTINGS, 840 Car.PERMISSION_CONTROL_ADAS_SETTINGS)); 841 mHalPropIdToPermissions.put(VehicleProperty.AUTOMATIC_EMERGENCY_BRAKING_STATE, new Pair<>( 842 Car.PERMISSION_READ_ADAS_STATES, 843 null)); 844 mHalPropIdToPermissions.put(VehicleProperty.FORWARD_COLLISION_WARNING_ENABLED, new Pair<>( 845 Car.PERMISSION_READ_ADAS_SETTINGS, 846 Car.PERMISSION_CONTROL_ADAS_SETTINGS)); 847 mHalPropIdToPermissions.put(VehicleProperty.FORWARD_COLLISION_WARNING_STATE, new Pair<>( 848 Car.PERMISSION_READ_ADAS_STATES, 849 null)); 850 mHalPropIdToPermissions.put(VehicleProperty.BLIND_SPOT_WARNING_ENABLED, new Pair<>( 851 Car.PERMISSION_READ_ADAS_SETTINGS, 852 Car.PERMISSION_CONTROL_ADAS_SETTINGS)); 853 mHalPropIdToPermissions.put(VehicleProperty.BLIND_SPOT_WARNING_STATE, new Pair<>( 854 Car.PERMISSION_READ_ADAS_STATES, 855 null)); 856 mHalPropIdToPermissions.put(VehicleProperty.LANE_DEPARTURE_WARNING_ENABLED, new Pair<>( 857 Car.PERMISSION_READ_ADAS_SETTINGS, 858 Car.PERMISSION_CONTROL_ADAS_SETTINGS)); 859 mHalPropIdToPermissions.put(VehicleProperty.LANE_DEPARTURE_WARNING_STATE, new Pair<>( 860 Car.PERMISSION_READ_ADAS_STATES, 861 null)); 862 mHalPropIdToPermissions.put(VehicleProperty.LANE_KEEP_ASSIST_ENABLED, new Pair<>( 863 Car.PERMISSION_READ_ADAS_SETTINGS, 864 Car.PERMISSION_CONTROL_ADAS_SETTINGS)); 865 mHalPropIdToPermissions.put(VehicleProperty.LANE_KEEP_ASSIST_STATE, new Pair<>( 866 Car.PERMISSION_READ_ADAS_STATES, 867 null)); 868 mHalPropIdToPermissions.put(VehicleProperty.LANE_CENTERING_ASSIST_ENABLED, new Pair<>( 869 Car.PERMISSION_READ_ADAS_SETTINGS, 870 Car.PERMISSION_CONTROL_ADAS_SETTINGS)); 871 mHalPropIdToPermissions.put(VehicleProperty.LANE_CENTERING_ASSIST_COMMAND, new Pair<>( 872 null, 873 Car.PERMISSION_CONTROL_ADAS_STATES)); 874 mHalPropIdToPermissions.put(VehicleProperty.LANE_CENTERING_ASSIST_STATE, new Pair<>( 875 Car.PERMISSION_READ_ADAS_STATES, 876 null)); 877 878 // Display_Units 879 mHalPropIdToPermissions.put(VehicleProperty.DISTANCE_DISPLAY_UNITS, new Pair<>( 880 Car.PERMISSION_READ_DISPLAY_UNITS, 881 Car.PERMISSION_CONTROL_DISPLAY_UNITS)); 882 mHalPropIdsForUnits.add(VehicleProperty.DISTANCE_DISPLAY_UNITS); 883 mHalPropIdToPermissions.put(VehicleProperty.FUEL_VOLUME_DISPLAY_UNITS, new Pair<>( 884 Car.PERMISSION_READ_DISPLAY_UNITS, 885 Car.PERMISSION_CONTROL_DISPLAY_UNITS)); 886 mHalPropIdsForUnits.add(VehicleProperty.FUEL_VOLUME_DISPLAY_UNITS); 887 mHalPropIdToPermissions.put(VehicleProperty.TIRE_PRESSURE_DISPLAY_UNITS, new Pair<>( 888 Car.PERMISSION_READ_DISPLAY_UNITS, 889 Car.PERMISSION_CONTROL_DISPLAY_UNITS)); 890 mHalPropIdsForUnits.add(VehicleProperty.TIRE_PRESSURE_DISPLAY_UNITS); 891 mHalPropIdToPermissions.put(VehicleProperty.EV_BATTERY_DISPLAY_UNITS, new Pair<>( 892 Car.PERMISSION_READ_DISPLAY_UNITS, 893 Car.PERMISSION_CONTROL_DISPLAY_UNITS)); 894 mHalPropIdsForUnits.add(VehicleProperty.EV_BATTERY_DISPLAY_UNITS); 895 mHalPropIdToPermissions.put(VehicleProperty.FUEL_CONSUMPTION_UNITS_DISTANCE_OVER_VOLUME, 896 new Pair<>(Car.PERMISSION_READ_DISPLAY_UNITS, 897 Car.PERMISSION_CONTROL_DISPLAY_UNITS)); 898 mHalPropIdsForUnits.add(VehicleProperty.FUEL_CONSUMPTION_UNITS_DISTANCE_OVER_VOLUME); 899 mHalPropIdToPermissions.put(VehicleProperty.VEHICLE_SPEED_DISPLAY_UNITS, new Pair<>( 900 Car.PERMISSION_READ_DISPLAY_UNITS, 901 Car.PERMISSION_CONTROL_DISPLAY_UNITS)); 902 mHalPropIdsForUnits.add(VehicleProperty.VEHICLE_SPEED_DISPLAY_UNITS); 903 904 mHalPropIdToPermissions.put(VehicleProperty.ELECTRONIC_TOLL_COLLECTION_CARD_TYPE, 905 new Pair<>(Car.PERMISSION_CAR_INFO, null)); 906 mHalPropIdToPermissions.put(VehicleProperty.ELECTRONIC_TOLL_COLLECTION_CARD_STATUS, 907 new Pair<>(Car.PERMISSION_CAR_INFO, null)); 908 mHalPropIdToPermissions.put(VehicleProperty.VEHICLE_CURB_WEIGHT, new Pair<>( 909 Car.PERMISSION_PRIVILEGED_CAR_INFO, null)); 910 mHalPropIdToPermissions.put(VehicleProperty.TRAILER_PRESENT, new Pair<>( 911 Car.PERMISSION_PRIVILEGED_CAR_INFO, null)); 912 mHalPropIdToPermissions.put( 913 VehicleProperty.GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT, 914 new Pair<>(Car.PERMISSION_CAR_INFO, null)); 915 mHalPropIdToPermissions.put(VehicleProperty.LOCATION_CHARACTERIZATION, new Pair<>( 916 ACCESS_FINE_LOCATION, 917 null)); 918 919 // mPropToValidBitFlag contains all properties which return values are combinations of bits 920 mHalPropIdToValidBitFlag.put(VehicleProperty.HVAC_FAN_DIRECTION_AVAILABLE, 921 HVAC_FAN_DIRECTION_COMBINATIONS); 922 mHalPropIdToValidBitFlag.put(VehicleProperty.HVAC_FAN_DIRECTION, 923 HVAC_FAN_DIRECTION_COMBINATIONS); 924 mHalPropIdToValidBitFlag.put(VehicleProperty.LOCATION_CHARACTERIZATION, 925 LOCATION_CHARACTERIZATION); 926 } 927 928 /** 929 * @param propId Property ID 930 * @return Read permission string for given property ID. NULL if property ID does not exist or 931 * the property is not available for reading. 932 */ 933 @Nullable getReadPermission(int propId)934 public String getReadPermission(int propId) { 935 Pair<String, String> p = mHalPropIdToPermissions.get(propId); 936 if (p != null) { 937 // Property ID exists. Return read permission. 938 if (p.first == null) { 939 Slogf.e(TAG, "propId is not available for reading : 0x" + toHexString(propId)); 940 } 941 return p.first; 942 } else if (isVendorProperty(propId)) { 943 // if property is vendor property and do not have specific permission. 944 return Car.PERMISSION_VENDOR_EXTENSION; 945 } else { 946 return null; 947 } 948 } 949 950 /** 951 * @param propId Property ID 952 * @return Write permission string for given property ID. NULL if property ID does not exist or 953 * the property is not writable. 954 */ 955 @Nullable getWritePermission(int propId)956 public String getWritePermission(int propId) { 957 Pair<String, String> p = mHalPropIdToPermissions.get(propId); 958 if (p != null) { 959 // Property ID exists. Return write permission. 960 if (p.second == null) { 961 Slogf.e(TAG, "propId is not writable : 0x" + toHexString(propId)); 962 } 963 return p.second; 964 } else if (isVendorProperty(propId)) { 965 // if property is vendor property and do not have specific permission. 966 return Car.PERMISSION_VENDOR_EXTENSION; 967 } else { 968 return null; 969 } 970 } 971 isVendorProperty(int propId)972 private static boolean isVendorProperty(int propId) { 973 return (propId & VehiclePropertyGroup.MASK) == VehiclePropertyGroup.VENDOR; 974 } 975 /** 976 * Check if property ID is in the list of known IDs that PropertyHalService is interested it. 977 */ isSupportedProperty(int propId)978 public boolean isSupportedProperty(int propId) { 979 // Property is in the list of supported properties 980 return mHalPropIdToPermissions.get(propId) != null || isVendorProperty(propId); 981 } 982 983 /** 984 * Returns all possible supported enum values for the {@code halPropId}. If property does not 985 * support an enum, then it returns {@code null}. 986 */ 987 @Nullable getAllPossibleSupportedEnumValues(int halPropId)988 public static Set<Integer> getAllPossibleSupportedEnumValues(int halPropId) { 989 return HAL_PROP_ID_TO_ENUM_SET.contains(halPropId) 990 ? Collections.unmodifiableSet(HAL_PROP_ID_TO_ENUM_SET.get(halPropId)) : null; 991 } 992 993 /** 994 * Check if the property is one of display units properties. 995 */ isPropertyToChangeUnits(int propertyId)996 public boolean isPropertyToChangeUnits(int propertyId) { 997 return mHalPropIdsForUnits.contains(propertyId); 998 } 999 1000 /** 1001 * Overrides the permission map for vendor properties 1002 * 1003 * @param configArray the configArray for 1004 * {@link VehicleProperty#SUPPORT_CUSTOMIZE_VENDOR_PERMISSION} 1005 */ customizeVendorPermission(@onNull int[] configArray)1006 public void customizeVendorPermission(@NonNull int[] configArray) { 1007 if (configArray == null || configArray.length % 3 != 0) { 1008 throw new IllegalArgumentException( 1009 "ConfigArray for SUPPORT_CUSTOMIZE_VENDOR_PERMISSION is wrong"); 1010 } 1011 int index = 0; 1012 while (index < configArray.length) { 1013 int propId = configArray[index++]; 1014 if (!isVendorProperty(propId)) { 1015 throw new IllegalArgumentException("Property Id: " + propId 1016 + " is not in vendor range"); 1017 } 1018 int readPermission = configArray[index++]; 1019 int writePermission = configArray[index++]; 1020 mHalPropIdToPermissions.put(propId, new Pair<>( 1021 toPermissionString(readPermission, propId), 1022 toPermissionString(writePermission, propId))); 1023 } 1024 1025 } 1026 1027 /** 1028 * Map VehicleVendorPermission enums in VHAL to android permissions. 1029 * 1030 * @return permission string, return null if vendor property is not available. 1031 */ 1032 @Nullable toPermissionString(int permissionEnum, int propId)1033 private String toPermissionString(int permissionEnum, int propId) { 1034 switch (permissionEnum) { 1035 case PERMISSION_CAR_VENDOR_DEFAULT: 1036 return Car.PERMISSION_VENDOR_EXTENSION; 1037 case PERMISSION_SET_CAR_VENDOR_CATEGORY_WINDOW: 1038 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_WINDOW; 1039 case PERMISSION_GET_CAR_VENDOR_CATEGORY_WINDOW: 1040 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_WINDOW; 1041 case PERMISSION_SET_CAR_VENDOR_CATEGORY_DOOR: 1042 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_DOOR; 1043 case PERMISSION_GET_CAR_VENDOR_CATEGORY_DOOR: 1044 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_DOOR; 1045 case PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT: 1046 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT; 1047 case PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT: 1048 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT; 1049 case PERMISSION_SET_CAR_VENDOR_CATEGORY_MIRROR: 1050 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_MIRROR; 1051 case PERMISSION_GET_CAR_VENDOR_CATEGORY_MIRROR: 1052 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_MIRROR; 1053 case PERMISSION_SET_CAR_VENDOR_CATEGORY_INFO: 1054 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_INFO; 1055 case PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO: 1056 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO; 1057 case PERMISSION_SET_CAR_VENDOR_CATEGORY_ENGINE: 1058 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_ENGINE; 1059 case PERMISSION_GET_CAR_VENDOR_CATEGORY_ENGINE: 1060 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_ENGINE; 1061 case PERMISSION_SET_CAR_VENDOR_CATEGORY_HVAC: 1062 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_HVAC; 1063 case PERMISSION_GET_CAR_VENDOR_CATEGORY_HVAC: 1064 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_HVAC; 1065 case PERMISSION_SET_CAR_VENDOR_CATEGORY_LIGHT: 1066 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_LIGHT; 1067 case PERMISSION_GET_CAR_VENDOR_CATEGORY_LIGHT: 1068 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_LIGHT; 1069 case PERMISSION_SET_CAR_VENDOR_CATEGORY_1: 1070 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_1; 1071 case PERMISSION_GET_CAR_VENDOR_CATEGORY_1: 1072 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_1; 1073 case PERMISSION_SET_CAR_VENDOR_CATEGORY_2: 1074 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_2; 1075 case PERMISSION_GET_CAR_VENDOR_CATEGORY_2: 1076 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_2; 1077 case PERMISSION_SET_CAR_VENDOR_CATEGORY_3: 1078 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_3; 1079 case PERMISSION_GET_CAR_VENDOR_CATEGORY_3: 1080 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_3; 1081 case PERMISSION_SET_CAR_VENDOR_CATEGORY_4: 1082 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_4; 1083 case PERMISSION_GET_CAR_VENDOR_CATEGORY_4: 1084 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_4; 1085 case PERMISSION_SET_CAR_VENDOR_CATEGORY_5: 1086 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_5; 1087 case PERMISSION_GET_CAR_VENDOR_CATEGORY_5: 1088 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_5; 1089 case PERMISSION_SET_CAR_VENDOR_CATEGORY_6: 1090 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_6; 1091 case PERMISSION_GET_CAR_VENDOR_CATEGORY_6: 1092 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_6; 1093 case PERMISSION_SET_CAR_VENDOR_CATEGORY_7: 1094 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_7; 1095 case PERMISSION_GET_CAR_VENDOR_CATEGORY_7: 1096 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_7; 1097 case PERMISSION_SET_CAR_VENDOR_CATEGORY_8: 1098 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_8; 1099 case PERMISSION_GET_CAR_VENDOR_CATEGORY_8: 1100 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_8; 1101 case PERMISSION_SET_CAR_VENDOR_CATEGORY_9: 1102 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_9; 1103 case PERMISSION_GET_CAR_VENDOR_CATEGORY_9: 1104 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_9; 1105 case PERMISSION_SET_CAR_VENDOR_CATEGORY_10: 1106 return VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_10; 1107 case PERMISSION_GET_CAR_VENDOR_CATEGORY_10: 1108 return VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_10; 1109 case PERMISSION_CAR_VENDOR_NOT_ACCESSIBLE: 1110 return null; 1111 default: 1112 throw new IllegalArgumentException("permission Id: " + permissionEnum 1113 + " for property:" + propId + " is invalid vendor permission Id"); 1114 } 1115 } 1116 1117 /** 1118 * Checks property value's format for all properties. Checks property value range if property 1119 * has @data_enum flag in types.hal. 1120 * @return true if property value's payload is valid. 1121 */ checkPayload(HalPropValue propValue)1122 public boolean checkPayload(HalPropValue propValue) { 1123 int propId = propValue.getPropId(); 1124 // Mixed property uses config array to indicate the data format. Checked it when convert it 1125 // to CarPropertyValue. 1126 if ((propId & VehiclePropertyType.MASK) == VehiclePropertyType.MIXED) { 1127 return true; 1128 } 1129 if (propValue.getStatus() != VehiclePropertyStatus.AVAILABLE) { 1130 return true; 1131 } 1132 if (!checkFormatForAllProperties(propValue)) { 1133 Slogf.e(TAG, "Property value" + propValue + "has an invalid data format"); 1134 return false; 1135 } 1136 if (HAL_PROP_ID_TO_ENUM_SET.contains(propId)) { 1137 return checkDataEnum(propValue); 1138 } 1139 if (mHalPropIdToValidBitFlag.indexOfKey(propId) >= 0) { 1140 return checkValidBitFlag(propValue); 1141 } 1142 return true; 1143 } 1144 checkValidBitFlag(HalPropValue propValue)1145 private boolean checkValidBitFlag(HalPropValue propValue) { 1146 int flagCombination = mHalPropIdToValidBitFlag.get(propValue.getPropId()); 1147 for (int i = 0; i < propValue.getInt32ValuesSize(); i++) { 1148 int value = propValue.getInt32Value(i); 1149 if ((value & flagCombination) != value) { 1150 return false; 1151 } 1152 } 1153 return true; 1154 } 1155 checkFormatForAllProperties(HalPropValue propValue)1156 private boolean checkFormatForAllProperties(HalPropValue propValue) { 1157 int propId = propValue.getPropId(); 1158 //Records sum size of int32values, floatValue, int64Values, bytes, String 1159 int sizeOfAllValue = propValue.getInt32ValuesSize() + propValue.getFloatValuesSize() 1160 + propValue.getInt64ValuesSize() + propValue.getByteValuesSize() 1161 + propValue.getStringValue().length(); 1162 if (sizeOfAllValue == 0) { 1163 Slogf.e(TAG, "Property value is empty: " + propValue); 1164 return false; 1165 } 1166 switch (propId & VehiclePropertyType.MASK) { 1167 case VehiclePropertyType.BOOLEAN: 1168 case VehiclePropertyType.INT32: 1169 return sizeOfAllValue == 1 && propValue.getInt32ValuesSize() == 1; 1170 case VehiclePropertyType.FLOAT: 1171 return sizeOfAllValue == 1 && propValue.getFloatValuesSize() == 1; 1172 case VehiclePropertyType.INT64: 1173 return sizeOfAllValue == 1 && propValue.getInt64ValuesSize() == 1; 1174 case VehiclePropertyType.FLOAT_VEC: 1175 return sizeOfAllValue == propValue.getFloatValuesSize(); 1176 case VehiclePropertyType.INT64_VEC: 1177 return sizeOfAllValue == propValue.getInt64ValuesSize(); 1178 case VehiclePropertyType.INT32_VEC: 1179 return sizeOfAllValue == propValue.getInt32ValuesSize(); 1180 case VehiclePropertyType.BYTES: 1181 return sizeOfAllValue == propValue.getByteValuesSize(); 1182 case VehiclePropertyType.STRING: 1183 return sizeOfAllValue == propValue.getStringValue().length(); 1184 default: 1185 throw new IllegalArgumentException("Unexpected property type for propId: " 1186 + Integer.toHexString(propId)); 1187 } 1188 } checkDataEnum(HalPropValue propValue)1189 private boolean checkDataEnum(HalPropValue propValue) { 1190 int propId = propValue.getPropId(); 1191 Set<Integer> validValue = HAL_PROP_ID_TO_ENUM_SET.get(propId); 1192 for (int i = 0; i < propValue.getInt32ValuesSize(); i++) { 1193 if (!validValue.contains(propValue.getInt32Value(i))) { 1194 return false; 1195 } 1196 } 1197 return true; 1198 } 1199 getIntegersFromDataEnums(Class... clazz)1200 private static List<Integer> getIntegersFromDataEnums(Class... clazz) { 1201 List<Integer> integerList = new ArrayList<>(5); 1202 for (Class c: clazz) { 1203 Field[] fields = c.getDeclaredFields(); 1204 for (Field f : fields) { 1205 if (f.getType() == int.class) { 1206 try { 1207 integerList.add(f.getInt(c)); 1208 } catch (IllegalAccessException | RuntimeException e) { 1209 Slogf.w(TAG, "Failed to get value"); 1210 } 1211 } 1212 } 1213 } 1214 return integerList; 1215 } 1216 1217 // Generate all combinations at once generateAllCombination(Class clazz)1218 private static int generateAllCombination(Class clazz) { 1219 List<Integer> allBits = getIntegersFromDataEnums(clazz); 1220 int combination = allBits.get(0); 1221 for (int i = 1; i < allBits.size(); i++) { 1222 combination |= allBits.get(i); 1223 } 1224 return combination; 1225 } 1226 } 1227