add minimum support of zoned int32 / float array
- TODO: add tests for zoned array, add more api in Java level
bug: 26473518
Change-Id: I114838e3214457474830b4b10228348f083a7ca7
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkConsts.java b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkConsts.java
index 697c493..a9c0270 100644
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkConsts.java
+++ b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkConsts.java
@@ -541,10 +541,8 @@
public static final int VEHICLE_VALUE_TYPE_STRING = 0x01;
public static final int VEHICLE_VALUE_TYPE_BYTES = 0x02;
public static final int VEHICLE_VALUE_TYPE_BOOLEAN = 0x03;
-public static final int VEHICLE_VALUE_TYPE_ZONED_INT32 = 0x04;
-public static final int VEHICLE_VALUE_TYPE_ZONED_FLOAT = 0x05;
-public static final int VEHICLE_VALUE_TYPE_ZONED_BOOLEAN = 0x06;
-public static final int VEHICLE_VALUE_TYPE_INT64 = 0x07;
+public static final int VEHICLE_VALUE_TYPE_ZONED_BOOLEAN = 0x04;
+public static final int VEHICLE_VALUE_TYPE_INT64 = 0x05;
public static final int VEHICLE_VALUE_TYPE_FLOAT = 0x10;
public static final int VEHICLE_VALUE_TYPE_FLOAT_VEC2 = 0x11;
public static final int VEHICLE_VALUE_TYPE_FLOAT_VEC3 = 0x12;
@@ -553,14 +551,18 @@
public static final int VEHICLE_VALUE_TYPE_INT32_VEC2 = 0x21;
public static final int VEHICLE_VALUE_TYPE_INT32_VEC3 = 0x22;
public static final int VEHICLE_VALUE_TYPE_INT32_VEC4 = 0x23;
+public static final int VEHICLE_VALUE_TYPE_ZONED_FLOAT = 0x30;
+public static final int VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2 = 0x31;
+public static final int VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3 = 0x32;
+public static final int VEHICLE_VALUE_TYPE_ZONED_INT32 = 0x40;
+public static final int VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2 = 0x41;
+public static final int VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3 = 0x42;
public static String enumToString(int v) {
switch(v) {
case VEHICLE_VALUE_TYPE_SHOUD_NOT_USE: return "VEHICLE_VALUE_TYPE_SHOUD_NOT_USE";
case VEHICLE_VALUE_TYPE_STRING: return "VEHICLE_VALUE_TYPE_STRING";
case VEHICLE_VALUE_TYPE_BYTES: return "VEHICLE_VALUE_TYPE_BYTES";
case VEHICLE_VALUE_TYPE_BOOLEAN: return "VEHICLE_VALUE_TYPE_BOOLEAN";
-case VEHICLE_VALUE_TYPE_ZONED_INT32: return "VEHICLE_VALUE_TYPE_ZONED_INT32";
-case VEHICLE_VALUE_TYPE_ZONED_FLOAT: return "VEHICLE_VALUE_TYPE_ZONED_FLOAT";
case VEHICLE_VALUE_TYPE_ZONED_BOOLEAN: return "VEHICLE_VALUE_TYPE_ZONED_BOOLEAN";
case VEHICLE_VALUE_TYPE_INT64: return "VEHICLE_VALUE_TYPE_INT64";
case VEHICLE_VALUE_TYPE_FLOAT: return "VEHICLE_VALUE_TYPE_FLOAT";
@@ -571,6 +573,12 @@
case VEHICLE_VALUE_TYPE_INT32_VEC2: return "VEHICLE_VALUE_TYPE_INT32_VEC2";
case VEHICLE_VALUE_TYPE_INT32_VEC3: return "VEHICLE_VALUE_TYPE_INT32_VEC3";
case VEHICLE_VALUE_TYPE_INT32_VEC4: return "VEHICLE_VALUE_TYPE_INT32_VEC4";
+case VEHICLE_VALUE_TYPE_ZONED_FLOAT: return "VEHICLE_VALUE_TYPE_ZONED_FLOAT";
+case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2: return "VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2";
+case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3: return "VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3";
+case VEHICLE_VALUE_TYPE_ZONED_INT32: return "VEHICLE_VALUE_TYPE_ZONED_INT32";
+case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2: return "VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2";
+case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3: return "VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3";
default: return "UNKNOWN";
}
}
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueUtil.java b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueUtil.java
index 2b72163..e34e473 100644
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueUtil.java
+++ b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueUtil.java
@@ -88,7 +88,7 @@
public static VehiclePropValue createZonedIntValue(int property, int zone, int value,
long timestamp) {
return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32,timestamp).
- setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(zone).setInt32Value(value).
+ setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(zone).addInt32Values(value).
build()).
build();
}
@@ -97,14 +97,14 @@
long timestamp) {
return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN,timestamp).
setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(zone).
- setInt32Value(value ? 1 : 0).build()).
+ addInt32Values(value ? 1 : 0).build()).
build();
}
public static VehiclePropValue createZonedFloatValue(int property, int zone, float value,
long timestamp) {
return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT,timestamp).
- setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(zone).setFloatValue(value).
+ setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(zone).addFloatValues(value).
build()).
build();
}
diff --git a/libvehiclenetwork/native/VehicleNetworkProtoUtil.cpp b/libvehiclenetwork/native/VehicleNetworkProtoUtil.cpp
index 6d48ef9..f32a689 100644
--- a/libvehiclenetwork/native/VehicleNetworkProtoUtil.cpp
+++ b/libvehiclenetwork/native/VehicleNetworkProtoUtil.cpp
@@ -52,13 +52,11 @@
out.set_bytes_value(in.value.bytes_value.data, in.value.bytes_value.len);
}
} break;
- case VEHICLE_VALUE_TYPE_FLOAT: {
- out.add_float_values(in.value.float_value);
- } break;
+ case VEHICLE_VALUE_TYPE_FLOAT:
case VEHICLE_VALUE_TYPE_FLOAT_VEC2:
case VEHICLE_VALUE_TYPE_FLOAT_VEC3:
case VEHICLE_VALUE_TYPE_FLOAT_VEC4: {
- int expectedSize = in.value_type - VEHICLE_VALUE_TYPE_FLOAT_VEC2 + 2;
+ int expectedSize = in.value_type - VEHICLE_VALUE_TYPE_FLOAT + 1;
for (int i = 0; i < expectedSize; i++) {
out.add_float_values(in.value.float_array[i]);
}
@@ -66,31 +64,46 @@
case VEHICLE_VALUE_TYPE_INT64: {
out.set_int64_value(in.value.int64_value);
} break;
- case VEHICLE_VALUE_TYPE_INT32:
case VEHICLE_VALUE_TYPE_BOOLEAN: {
out.add_int32_values(in.value.int32_value);
} break;
+ case VEHICLE_VALUE_TYPE_INT32:
case VEHICLE_VALUE_TYPE_INT32_VEC2:
case VEHICLE_VALUE_TYPE_INT32_VEC3:
case VEHICLE_VALUE_TYPE_INT32_VEC4: {
- int expectedSize = in.value_type - VEHICLE_VALUE_TYPE_INT32_VEC2 + 2;
+ int expectedSize = in.value_type - VEHICLE_VALUE_TYPE_INT32 + 1;
for (int i = 0; i < expectedSize; i++) {
out.add_int32_values(in.value.int32_array[i]);
}
} break;
+ case VEHICLE_VALUE_TYPE_ZONED_BOOLEAN:
case VEHICLE_VALUE_TYPE_ZONED_INT32:
- case VEHICLE_VALUE_TYPE_ZONED_BOOLEAN: {
+ case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2:
+ case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3: {
+ int expectedSize;
+ if (in.value_type == VEHICLE_VALUE_TYPE_ZONED_BOOLEAN) {
+ expectedSize = 1;
+ } else {
+ expectedSize = in.value_type - VEHICLE_VALUE_TYPE_ZONED_INT32 + 1;
+ }
ZonedValue* zonedValue = new ZonedValue();
ASSERT_OR_HANDLE_NO_MEMORY(zonedValue, return NO_MEMORY);
- zonedValue->set_zone_or_window(in.value.zoned_int32_value.zone);
- zonedValue->set_int32_value(in.value.zoned_int32_value.value);
+ zonedValue->set_zone_or_window(in.value.zoned_int32_array.zone);
+ for (int i = 0; i < expectedSize; i++) {
+ zonedValue->add_int32_values(in.value.zoned_int32_array.values[i]);
+ }
out.set_allocated_zoned_value(zonedValue);
} break;
- case VEHICLE_VALUE_TYPE_ZONED_FLOAT: {
+ case VEHICLE_VALUE_TYPE_ZONED_FLOAT:
+ case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2:
+ case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3: {
+ int expectedSize = in.value_type - VEHICLE_VALUE_TYPE_ZONED_FLOAT + 1;
ZonedValue* zonedValue = new ZonedValue();
ASSERT_OR_HANDLE_NO_MEMORY(zonedValue, return NO_MEMORY);
- zonedValue->set_zone_or_window(in.value.zoned_int32_value.zone);
- zonedValue->set_float_value(in.value.zoned_float_value.value);
+ zonedValue->set_zone_or_window(in.value.zoned_float_array.zone);
+ for (int i = 0; i < expectedSize; i++) {
+ zonedValue->add_float_values(in.value.zoned_float_array.values[i]);
+ }
out.set_allocated_zoned_value(zonedValue);
} break;
}
@@ -181,7 +194,6 @@
}
out.value.int64_value = in.int64_value();
} break;
- case VEHICLE_VALUE_TYPE_INT32:
case VEHICLE_VALUE_TYPE_BOOLEAN: {
if (in.int32_values_size() != 1) {
if (canIgnoreNoData) {
@@ -192,10 +204,11 @@
}
out.value.int32_value = in.int32_values(0);
} break;
+ case VEHICLE_VALUE_TYPE_INT32:
case VEHICLE_VALUE_TYPE_INT32_VEC2:
case VEHICLE_VALUE_TYPE_INT32_VEC3:
case VEHICLE_VALUE_TYPE_INT32_VEC4: {
- int expectedSize = out.value_type - VEHICLE_VALUE_TYPE_INT32_VEC2 + 2;
+ int expectedSize = out.value_type - VEHICLE_VALUE_TYPE_INT32 + 1;
if (in.int32_values_size() != expectedSize) {
if (canIgnoreNoData) {
return NO_ERROR;
@@ -208,8 +221,10 @@
out.value.int32_array[i] = in.int32_values(i);
}
} break;
+ case VEHICLE_VALUE_TYPE_ZONED_BOOLEAN:
case VEHICLE_VALUE_TYPE_ZONED_INT32:
- case VEHICLE_VALUE_TYPE_ZONED_BOOLEAN: {
+ case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2:
+ case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3: {
if (!in.has_zoned_value()) {
if (canIgnoreNoData) {
return NO_ERROR;
@@ -218,17 +233,28 @@
return BAD_VALUE;
}
const ZonedValue& zonedValue = in.zoned_value();
- if (!zonedValue.has_int32_value()) {
+ int expectedSize;
+ if (out.value_type == VEHICLE_VALUE_TYPE_ZONED_BOOLEAN) {
+ expectedSize = 1;
+ } else {
+ expectedSize = out.value_type - VEHICLE_VALUE_TYPE_ZONED_INT32 + 1;
+ }
+ if (zonedValue.int32_values_size() != expectedSize) {
if (canIgnoreNoData) {
return NO_ERROR;
}
- ALOGE("no int32 in zoned value");
+ ALOGE("Wrong data length in zoned int boolean value, expected:%d, got:%d",
+ expectedSize, zonedValue.int32_values_size());
return BAD_VALUE;
}
- out.value.zoned_int32_value.zone = zonedValue.zone_or_window();
- out.value.zoned_int32_value.value = zonedValue.int32_value();
+ out.value.zoned_int32_array.zone = zonedValue.zone_or_window();
+ for (int i = 0; i < expectedSize; i++) {
+ out.value.zoned_int32_array.values[i] = zonedValue.int32_values(i);
+ }
} break;
- case VEHICLE_VALUE_TYPE_ZONED_FLOAT: {
+ case VEHICLE_VALUE_TYPE_ZONED_FLOAT:
+ case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2:
+ case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3: {
if (!in.has_zoned_value()) {
if (canIgnoreNoData) {
return NO_ERROR;
@@ -237,15 +263,19 @@
return BAD_VALUE;
}
const ZonedValue& zonedValue = in.zoned_value();
- if (!zonedValue.has_float_value()) {
+ int expectedSize = out.value_type - VEHICLE_VALUE_TYPE_ZONED_FLOAT + 1;
+ if (zonedValue.float_values_size() != expectedSize) {
if (canIgnoreNoData) {
return NO_ERROR;
}
- ALOGE("no float in zoned value");
+ ALOGE("Wrong data length in zoned float value, expected:%d, got:%d",
+ expectedSize, zonedValue.float_values_size());
return BAD_VALUE;
}
- out.value.zoned_float_value.zone = zonedValue.zone_or_window();
- out.value.zoned_float_value.value = zonedValue.float_value();
+ out.value.zoned_float_array.zone = zonedValue.zone_or_window();
+ for (int i = 0; i < expectedSize; i++) {
+ out.value.zoned_float_array.values[i] = zonedValue.float_values(i);
+ }
} break;
default: {
if (canIgnoreNoData) {
diff --git a/libvehiclenetwork/proto/VehicleNetworkProto.proto b/libvehiclenetwork/proto/VehicleNetworkProto.proto
index b5ff406..4cd81e4 100644
--- a/libvehiclenetwork/proto/VehicleNetworkProto.proto
+++ b/libvehiclenetwork/proto/VehicleNetworkProto.proto
@@ -42,8 +42,8 @@
message ZonedValue {
required int32 zone_or_window = 1;
- optional int32 int32_value = 2; // also covers boolean value.
- optional float float_value = 3;
+ repeated int32 int32_values = 2; // also covers boolean value.
+ repeated float float_values = 3;
};
message VehiclePropValue {
diff --git a/service/src/com/android/car/hal/HvacHalService.java b/service/src/com/android/car/hal/HvacHalService.java
index ecb4c0d..b9b6923 100644
--- a/service/src/com/android/car/hal/HvacHalService.java
+++ b/service/src/com/android/car/hal/HvacHalService.java
@@ -107,13 +107,13 @@
if(value != null) {
switch(hvacProp.getType()) {
case CarHvacManager.PROPERTY_TYPE_BOOLEAN:
- hvacProp.setBooleanValue(value.getZonedValue().getInt32Value() == 1);
+ hvacProp.setBooleanValue(value.getZonedValue().getInt32Values(0) == 1);
break;
case CarHvacManager.PROPERTY_TYPE_INT:
- hvacProp.setIntegerValue(value.getZonedValue().getInt32Value());
+ hvacProp.setIntegerValue(value.getZonedValue().getInt32Values(0));
break;
case CarHvacManager.PROPERTY_TYPE_FLOAT:
- hvacProp.setFloatValue(value.getZonedValue().getFloatValue());
+ hvacProp.setFloatValue(value.getZonedValue().getFloatValues(0));
break;
}
hvacProp.setZone(zone);
@@ -258,16 +258,16 @@
switch(halType) {
case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN:
event = new CarHvacEvent(CarHvacEvent.HVAC_EVENT_PROPERTY_CHANGE,
- hvacPropId, zone, v.getZonedValue().getInt32Value() == 1);
+ hvacPropId, zone, v.getZonedValue().getInt32Values(0) == 1);
break;
case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT: {
event = new CarHvacEvent(CarHvacEvent.HVAC_EVENT_PROPERTY_CHANGE,
- hvacPropId, zone, v.getZonedValue().getFloatValue());
+ hvacPropId, zone, v.getZonedValue().getFloatValues(0));
break;
}
case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32: {
event = new CarHvacEvent(CarHvacEvent.HVAC_EVENT_PROPERTY_CHANGE,
- hvacPropId, zone, v.getZonedValue().getInt32Value());
+ hvacPropId, zone, v.getZonedValue().getInt32Values(0));
break;
}
default:
diff --git a/tests/carservice_test/src/com/android/support/car/test/CarHvacManagerTest.java b/tests/carservice_test/src/com/android/support/car/test/CarHvacManagerTest.java
index 2c3d4a6..1f12167 100644
--- a/tests/carservice_test/src/com/android/support/car/test/CarHvacManagerTest.java
+++ b/tests/carservice_test/src/com/android/support/car/test/CarHvacManagerTest.java
@@ -183,15 +183,11 @@
@Override
public synchronized void onPropertySet(VehiclePropValue value) {
- Log.d(TAG, "onPropertySet intValue = " + value.getZonedValue().getInt32Value() +
- " floatValue = " + value.getZonedValue().getFloatValue());
mMap.put(value.getProp(), value);
}
@Override
public synchronized VehiclePropValue onPropertyGet(VehiclePropValue value) {
- Log.d(TAG, "onPropertyGet intValue = " + value.getZonedValue().getInt32Value() +
- " floatValue = " + value.getZonedValue().getFloatValue());
return mMap.get(value.getProp());
}
diff --git a/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTestUtil.java b/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTestUtil.java
index 32d173e..0542cfb 100644
--- a/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTestUtil.java
+++ b/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTestUtil.java
@@ -38,10 +38,10 @@
break;
case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32:
case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN:
- builder.setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(0).setInt32Value(0).
+ builder.setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(0).addInt32Values(0).
build());
case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT:
- builder.setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(0).setFloatValue(0f).
+ builder.setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(0).addFloatValues(0f).
build());
case VehicleValueType.VEHICLE_VALUE_TYPE_INT64:
builder.setInt64Value(0);