diff options
6 files changed, 149 insertions, 14 deletions
diff --git a/car-lib/api/system-current.txt b/car-lib/api/system-current.txt index d853ec2c77..3b4013a306 100644 --- a/car-lib/api/system-current.txt +++ b/car-lib/api/system-current.txt @@ -90,6 +90,7 @@ package android.car { public final class VehicleAreaType { field public static final int VEHICLE_AREA_TYPE_DOOR = 4; // 0x4 + field public static final int VEHICLE_AREA_TYPE_MIRROR = 5; // 0x5 field public static final int VEHICLE_AREA_TYPE_NONE = 0; // 0x0 field public static final int VEHICLE_AREA_TYPE_SEAT = 3; // 0x3 field public static final int VEHICLE_AREA_TYPE_WINDOW = 2; // 0x2 diff --git a/car-lib/src/android/car/VehicleAreaType.java b/car-lib/src/android/car/VehicleAreaType.java index 1cc25a10ae..f4b5b91455 100644 --- a/car-lib/src/android/car/VehicleAreaType.java +++ b/car-lib/src/android/car/VehicleAreaType.java @@ -15,8 +15,12 @@ */ package android.car; +import android.annotation.IntDef; import android.annotation.SystemApi; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + /** * Represents vehicle area such as window, door, seat, zone, etc. * See also {@link android.car.VehicleDoor}, {@link android.car.VehicleSeat}, @@ -33,6 +37,18 @@ public final class VehicleAreaType { public static final int VEHICLE_AREA_TYPE_WINDOW = 2; public static final int VEHICLE_AREA_TYPE_SEAT = 3; public static final int VEHICLE_AREA_TYPE_DOOR = 4; - + public static final int VEHICLE_AREA_TYPE_MIRROR = 5; private VehicleAreaType() {} + + /** @hide */ + @IntDef({ + VEHICLE_AREA_TYPE_NONE, + VEHICLE_AREA_TYPE_ZONE, + VEHICLE_AREA_TYPE_WINDOW, + VEHICLE_AREA_TYPE_SEAT, + VEHICLE_AREA_TYPE_DOOR, + VEHICLE_AREA_TYPE_MIRROR + }) + @Retention(RetentionPolicy.SOURCE) + public @interface VehicleAreaTypeValue {} } diff --git a/car-lib/src/android/car/hardware/CarPropertyConfig.java b/car-lib/src/android/car/hardware/CarPropertyConfig.java index a93f2bcc57..36a3858bd0 100644 --- a/car-lib/src/android/car/hardware/CarPropertyConfig.java +++ b/car-lib/src/android/car/hardware/CarPropertyConfig.java @@ -18,6 +18,7 @@ package android.car.hardware; import android.annotation.Nullable; import android.annotation.SystemApi; +import android.car.VehicleAreaType; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseArray; @@ -52,11 +53,11 @@ public class CarPropertyConfig<T> implements Parcelable { public int getPropertyId() { return mPropertyId; } public Class<T> getPropertyType() { return mType; } - public int getAreaType() { return mAreaType; } + public @VehicleAreaType.VehicleAreaTypeValue int getAreaType() { return mAreaType; } /** Returns true if this property doesn't hold car area-specific configuration */ public boolean isGlobalProperty() { - return mAreaType == 0; + return mAreaType == VehicleAreaType.VEHICLE_AREA_TYPE_NONE; } public int getAreaCount() { diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkConsts.java b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkConsts.java index b0cd19bdbd..047b3ab419 100644 --- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkConsts.java +++ b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkConsts.java @@ -15,8 +15,9 @@ * limitations under the License. */ -//Autogenerated from vehicle.h using libvehiclenetwork/tool/vehicle_code_gen.py. -//Do not modify manually. +// Autogenerated from vehicle.h using +// libvehiclenetwork/tool/vehiclehal_code_gen.py. +// Do not modify manually. package com.android.car.vehiclenetwork; @@ -219,6 +220,7 @@ default: return VehicleValueType.VEHICLE_VALUE_TYPE_SHOUD_NOT_USE; public static String getVehiclePropertyName(int property) { switch (property) { +case VEHICLE_PROPERTY_INVALID: return "VEHICLE_PROPERTY_INVALID"; case VEHICLE_PROPERTY_INFO_VIN: return "VEHICLE_PROPERTY_INFO_VIN"; case VEHICLE_PROPERTY_INFO_MAKE: return "VEHICLE_PROPERTY_INFO_MAKE"; case VEHICLE_PROPERTY_INFO_MODEL: return "VEHICLE_PROPERTY_INFO_MODEL"; @@ -511,6 +513,61 @@ default: return null; } } +public static int getVehicleZoneType(int property) { +switch (property) { +case VEHICLE_PROPERTY_HVAC_FAN_SPEED: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ; +case VEHICLE_PROPERTY_HVAC_FAN_DIRECTION: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ; +case VEHICLE_PROPERTY_HVAC_TEMPERATURE_CURRENT: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ; +case VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ; +case VEHICLE_PROPERTY_HVAC_DEFROSTER: return VehicleZoneType.VEHICLE_ZONE_TYPE_WINDOW ; +case VEHICLE_PROPERTY_HVAC_AC_ON: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ; +case VEHICLE_PROPERTY_HVAC_MAX_AC_ON: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ; +case VEHICLE_PROPERTY_HVAC_MAX_DEFROST_ON: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ; +case VEHICLE_PROPERTY_HVAC_RECIRC_ON: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ; +case VEHICLE_PROPERTY_HVAC_DUAL_ON: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ; +case VEHICLE_PROPERTY_HVAC_AUTO_ON: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ; +case VEHICLE_PROPERTY_HVAC_SEAT_TEMPERATURE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_HVAC_ACTUAL_FAN_SPEED_RPM: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ; +case VEHICLE_PROPERTY_HVAC_POWER_ON: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ; +case VEHICLE_PROPERTY_HVAC_FAN_DIRECTION_AVAILABLE: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ; +case VEHICLE_PROPERTY_DOOR_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_DOOR ; +case VEHICLE_PROPERTY_DOOR_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_DOOR ; +case VEHICLE_PROPERTY_DOOR_LOCK: return VehicleZoneType.VEHICLE_ZONE_TYPE_DOOR ; +case VEHICLE_PROPERTY_MIRROR_Z_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_MIRROR ; +case VEHICLE_PROPERTY_MIRROR_Z_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_MIRROR ; +case VEHICLE_PROPERTY_MIRROR_Y_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_MIRROR ; +case VEHICLE_PROPERTY_MIRROR_Y_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_MIRROR ; +case VEHICLE_PROPERTY_SEAT_MEMORY_SELECT: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_MEMORY_SET: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_BELT_BUCKLED: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_FORE_AFT_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_FORE_AFT_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_HEIGHT_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_HEIGHT_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_DEPTH_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_DEPTH_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_TILT_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_TILT_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +case VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ; +default: return VehicleZoneType.VEHICLE_ZONE_TYPE_NONE; +} +} + @@ -1231,6 +1288,26 @@ default: return "UNKNOWN"; } } +public static class VehicleZoneType { +public static final int VEHICLE_ZONE_TYPE_NONE = 0x00; +public static final int VEHICLE_ZONE_TYPE_ZONE = 0x01; +public static final int VEHICLE_ZONE_TYPE_SEAT = 0x02; +public static final int VEHICLE_ZONE_TYPE_DOOR = 0x04; +public static final int VEHICLE_ZONE_TYPE_WINDOW = 0x10; +public static final int VEHICLE_ZONE_TYPE_MIRROR = 0x20; +public static String enumToString(int v) { +switch(v) { +case VEHICLE_ZONE_TYPE_NONE: return "VEHICLE_ZONE_TYPE_NONE"; +case VEHICLE_ZONE_TYPE_ZONE: return "VEHICLE_ZONE_TYPE_ZONE"; +case VEHICLE_ZONE_TYPE_SEAT: return "VEHICLE_ZONE_TYPE_SEAT"; +case VEHICLE_ZONE_TYPE_DOOR: return "VEHICLE_ZONE_TYPE_DOOR"; +case VEHICLE_ZONE_TYPE_WINDOW: return "VEHICLE_ZONE_TYPE_WINDOW"; +case VEHICLE_ZONE_TYPE_MIRROR: return "VEHICLE_ZONE_TYPE_MIRROR"; +default: return "UNKNOWN"; +} +} +} + public static class VehicleBoolean { public static final int VEHICLE_FALSE = 0x00; public static final int VEHICLE_TRUE = 0x01; diff --git a/libvehiclenetwork/tool/vehiclehal_code_gen.py b/libvehiclenetwork/tool/vehiclehal_code_gen.py index dfabd7dccd..e208e8c69b 100755 --- a/libvehiclenetwork/tool/vehiclehal_code_gen.py +++ b/libvehiclenetwork/tool/vehiclehal_code_gen.py @@ -37,8 +37,9 @@ JAVA_HEADER = \ * limitations under the License. */ -//Autogenerated from vehicle.h using libvehiclenetwork/tool/vehicle_code_gen.py. -//Do not modify manually. +// Autogenerated from vehicle.h using +// libvehiclenetwork/tool/vehiclehal_code_gen.py. +// Do not modify manually. package com.android.car.vehiclenetwork; @@ -50,7 +51,7 @@ JAVA_TRAIL = \ } """ -RE_PROPERTY_PATTERN = r'/\*\*(.*?)\*/\n\#define\s+VEHICLE_PROPERTY_(\S+)\s+(\(0x\S+\))' +RE_PROPERTY_PATTERN = r'/\*\*((.(?!\/\/===))*?)\*/\n\#define\s+VEHICLE_PROPERTY_(\S+)\s+(\(0x\S+\))' RE_ENUM_PATTERN = r'enum\s+(\S+)\s+\{\S*(.*?)\}' RE_ENUM_ENTRY_PATTERN = r'(\S+)\s*=\s*(.*?)[,\n]' RE_AUDIO_EXT_ROUTING_PATTERN = r'\n\#define\s+VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_SOURCE_(\S+)\s+\"(\S+)\"' @@ -64,6 +65,7 @@ class PropertyInfo(object): self.access = "" self.unit = "" self.startEnd = 0 # _START/END property + self.zoneType = "" def __str__(self): r = ["value:" + self.value] @@ -163,6 +165,18 @@ switch (property) {""" } } """ + #now implement getVehicleZoneType + print \ +"""public static int getVehicleZoneType(int property) { +switch (property) {""" + for p in props: + if p.zoneType != "": + print "case " + p.name + ": return VehicleZoneType." + p.zoneType + " ;" + print \ +"""default: return VehicleZoneType.VEHICLE_ZONE_TYPE_NONE; +} +} +""" def printEnum(e): print "public static class " + toJavaStyleName(e.name) + " {" @@ -208,8 +222,8 @@ def main(argv): property_re = re.compile(RE_PROPERTY_PATTERN, re.MULTILINE | re.DOTALL) for match in property_re.finditer(text): words = match.group(1).split() - name = "VEHICLE_PROPERTY_" + match.group(2) - value = match.group(3) + name = "VEHICLE_PROPERTY_" + match.group(3) + value = match.group(4) if (value[0] == "(" and value[-1] == ")"): value = value[1:-1] prop = PropertyInfo(value, name) @@ -227,6 +241,9 @@ def main(argv): elif words[i] == "@unit": i += 1 prop.unit = words[i] + elif words[i] == "@zone_type": + i += 1 + prop.zoneType = words[i] elif words[i] == "@range_start" or words[i] == "@range_end": prop.startEnd = 1 i += 1 @@ -272,4 +289,3 @@ def main(argv): if __name__ == '__main__': main(sys.argv) - diff --git a/service/src/com/android/car/hal/CarPropertyUtils.java b/service/src/com/android/car/hal/CarPropertyUtils.java index 849417e3bd..cb3df3eb71 100644 --- a/service/src/com/android/car/hal/CarPropertyUtils.java +++ b/service/src/com/android/car/hal/CarPropertyUtils.java @@ -35,6 +35,12 @@ import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueTy import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2; import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3; import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4; +import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZoneType.VEHICLE_ZONE_TYPE_NONE; +import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE; +import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT; +import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZoneType.VEHICLE_ZONE_TYPE_DOOR; +import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZoneType.VEHICLE_ZONE_TYPE_WINDOW; +import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZoneType.VEHICLE_ZONE_TYPE_MIRROR; import static com.android.car.vehiclenetwork.VehiclePropValueUtil.getVectorValueType; import static java.lang.Integer.toHexString; @@ -45,6 +51,7 @@ import android.car.hardware.CarPropertyValue; import com.google.protobuf.ByteString; +import com.android.car.vehiclenetwork.VehicleNetworkConsts; import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig; import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue; @@ -135,9 +142,7 @@ import java.util.List; static CarPropertyConfig<?> toCarPropertyConfig(VehiclePropConfig p, int propertyId) { int[] areas = VehicleZoneUtil.listAllZones(p.getZones()); - // TODO: handle other vehicle area types. - int areaType = areas.length == 0 - ? VehicleAreaType.VEHICLE_AREA_TYPE_NONE : VehicleAreaType.VEHICLE_AREA_TYPE_ZONE; + int areaType = getVehicleAreaType(VehicleNetworkConsts.getVehicleZoneType(propertyId)); Class<?> clazz = getJavaClass(p.getValueType()); if (clazz == Boolean.class || clazz == byte[].class || clazz == String.class) { @@ -167,6 +172,25 @@ import java.util.List; } } + private static @VehicleAreaType.VehicleAreaTypeValue int getVehicleAreaType(int zoneType) { + switch (zoneType) { + case VEHICLE_ZONE_TYPE_NONE: + return VehicleAreaType.VEHICLE_AREA_TYPE_NONE; + case VEHICLE_ZONE_TYPE_ZONE: + return VehicleAreaType.VEHICLE_AREA_TYPE_ZONE; + case VEHICLE_ZONE_TYPE_SEAT: + return VehicleAreaType.VEHICLE_AREA_TYPE_SEAT; + case VEHICLE_ZONE_TYPE_DOOR: + return VehicleAreaType.VEHICLE_AREA_TYPE_DOOR; + case VEHICLE_ZONE_TYPE_WINDOW: + return VehicleAreaType.VEHICLE_AREA_TYPE_WINDOW; + case VEHICLE_ZONE_TYPE_MIRROR: + return VehicleAreaType.VEHICLE_AREA_TYPE_MIRROR; + default: + throw new RuntimeException("Unsupported zone type " + zoneType); + } + } + private static Class<?> getJavaClass(int halType) { switch (halType) { case VEHICLE_VALUE_TYPE_BOOLEAN: |