11ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung/* 21ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * Copyright (C) 2015 The Android Open Source Project 31ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * 41ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * Licensed under the Apache License, Version 2.0 (the "License"); 51ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * you may not use this file except in compliance with the License. 61ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * You may obtain a copy of the License at 71ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * 81ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * http://www.apache.org/licenses/LICENSE-2.0 91ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * 101ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * Unless required by applicable law or agreed to in writing, software 111ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * distributed under the License is distributed on an "AS IS" BASIS, 121ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * See the License for the specific language governing permissions and 141ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * limitations under the License. 151ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung */ 161ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoungpackage com.android.car.vehiclenetwork; 171ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 18bf52d5bfd313ae33cdeb3c0b6252df9d153d6bebSteve Paikimport com.google.protobuf.ByteString; 19bf52d5bfd313ae33cdeb3c0b6252df9d153d6bebSteve Paik 201ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoungimport com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType; 211ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoungimport com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue; 22e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev 23e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsevimport java.util.Arrays; 24e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsevimport java.util.List; 25e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev 261ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung/** 271ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * Utility class to help creating VehiclePropValue. 281ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung */ 29e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsevpublic final class VehiclePropValueUtil { 30e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev 31e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev /** To prevent creating of utility class */ 32e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev private VehiclePropValueUtil() {} 331ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 341ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public static VehiclePropValue createIntValue(int property, int value, long timestamp) { 35e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_INT32, timestamp). 361ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung addInt32Values(value). 371ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung build(); 381ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 391ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 401ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public static VehiclePropValue createIntVectorValue(int property, int[] values, 411ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung long timestamp) { 4271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park VehiclePropValue.Builder builder = createBuilder(property, 43e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev getVectorValueType(VehicleValueType.VEHICLE_VALUE_TYPE_INT32, values.length), 441ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung timestamp); 451ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung for (int v : values) { 461ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung builder.addInt32Values(v); 471ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 481ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung return builder.build(); 491ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 501ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 511ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public static VehiclePropValue createFloatValue(int property, float value, long timestamp) { 52e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT, timestamp). 531ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung addFloatValues(value). 541ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung build(); 551ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 561ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 571ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public static VehiclePropValue createFloatVectorValue(int property, float[] values, 581ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung long timestamp) { 5971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park VehiclePropValue.Builder builder = createBuilder(property, 60e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev getVectorValueType(VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT, values.length), 611ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung timestamp); 621ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung for (float v : values) { 631ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung builder.addFloatValues(v); 641ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 651ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung return builder.build(); 661ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 671ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 681ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public static VehiclePropValue createLongValue(int property, long value, long timestamp) { 69e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_INT64, timestamp). 701ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung setInt64Value(value). 711ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung build(); 721ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 731ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 741ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public static VehiclePropValue createStringValue(int property, String value, long timestamp) { 75e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_STRING, timestamp). 761ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung setStringValue(value). 771ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung build(); 781ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 791ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 801ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public static VehiclePropValue createBooleanValue(int property, boolean value, long timestamp) { 81e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN, timestamp). 821ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung addInt32Values(value ? 1 : 0). 831ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung build(); 841ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 851ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 861ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public static VehiclePropValue createBytesValue(int property, byte[] value, long timestamp) { 87e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_BYTES, timestamp). 881ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung setBytesValue(ByteString.copyFrom(value)). 891ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung build(); 901ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 911ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 921ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public static VehiclePropValue createZonedIntValue(int property, int zone, int value, 931ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung long timestamp) { 94e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32, timestamp). 9571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park setZone(zone). 9671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park addInt32Values(value). 971ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung build(); 981ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 991ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 100e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev public static VehiclePropValue createZonedIntVectorValue(int property, int zone, int[] values, 101e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev long timestamp) { 102e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev int valueType = getVectorValueType( 103e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32, values.length); 10471b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park VehiclePropValue.Builder builder = createBuilder(property, valueType, timestamp). 10571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park setZone(zone); 10671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park for (int value : values) { 10771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park builder.addInt32Values(value); 10871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 10971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park return builder.build(); 110e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev } 111e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev 112e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev public static VehiclePropValue createZonedFloatVectorValue(int property, int zone, 113e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev float[] values, long timestamp) { 114e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev int valueType = getVectorValueType( 115e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT, values.length); 11671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park VehiclePropValue.Builder builder = createBuilder(property, valueType, timestamp). 11771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park setZone(zone); 11871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park for (float value : values) { 11971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park builder.addFloatValues(value); 12071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 12171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park return builder.build(); 122e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev } 123e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev 124e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev 1251ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public static VehiclePropValue createZonedBooleanValue(int property, int zone, boolean value, 1261ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung long timestamp) { 1271ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN,timestamp). 12871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park setZone(zone). 12971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park addInt32Values(value ? 1 : 0). 1301ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung build(); 1311ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 1321ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 1331ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public static VehiclePropValue createZonedFloatValue(int property, int zone, float value, 1341ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung long timestamp) { 1351ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT,timestamp). 13671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park setZone(zone). 13771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park addFloatValues(value). 1381ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung build(); 1391ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 1401ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 1411ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public static VehiclePropValue createDummyValue(int property, int valueType) { 1421ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung switch (valueType) { 1431ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung case VehicleValueType.VEHICLE_VALUE_TYPE_STRING: { 1441ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung return createStringValue(property, "dummy", 0); 1451ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 1461ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung case VehicleValueType.VEHICLE_VALUE_TYPE_BYTES: { 1471ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung return createBytesValue(property, new byte[1], 0); 1481ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 1491ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung case VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN: { 1501ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung return createBooleanValue(property, false, 0); 1511ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 1521ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32: { 1531ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung return createZonedIntValue(property, 0, 0, 0); 1541ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 1551ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT: { 1561ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung return createZonedFloatValue(property, 0, 0, 0); 1571ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 1581ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN: { 1591ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung return createZonedBooleanValue(property, 0, false, 0); 1601ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 1611ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung case VehicleValueType.VEHICLE_VALUE_TYPE_INT64: { 1621ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung return createLongValue(property, 0, 0); 1631ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 1641ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT: { 1651ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung return createFloatValue(property, 0, 0); 1661ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 167e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC2: 168e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC3: 169e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC4: 170e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2: 17171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3: 17271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC4:{ 173e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return createFloatVectorValue(property, new float[getVectorLength(valueType)], 0); 1741ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 1751ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung case VehicleValueType.VEHICLE_VALUE_TYPE_INT32: { 1761ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung return createIntValue(property, 0, 0); 1771ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 178e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2: 179e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC3: 180e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4: 181e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2: 18271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3: 18371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4: { 184e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return createIntVectorValue(property, new int[getVectorLength(valueType)], 0); 1851ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 186e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev 1871ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 1881ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung return null; 1891ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 1901ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 1911ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public static VehiclePropValue.Builder createBuilder(int property, int valueType, 1921ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung long timestamp) { 1931ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung return VehiclePropValue.newBuilder(). 1941ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung setProp(property). 1951ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung setValueType(valueType). 1961ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung setTimestamp(timestamp); 1971ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 198e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev 199e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev public static int getVectorLength(int vehicleValueType) { 200e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev switch (vehicleValueType) { 201bf52d5bfd313ae33cdeb3c0b6252df9d153d6bebSteve Paik case VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN: 202bf52d5bfd313ae33cdeb3c0b6252df9d153d6bebSteve Paik case VehicleValueType.VEHICLE_VALUE_TYPE_INT32: 203bf52d5bfd313ae33cdeb3c0b6252df9d153d6bebSteve Paik case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT: 204bf52d5bfd313ae33cdeb3c0b6252df9d153d6bebSteve Paik case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32: 205bf52d5bfd313ae33cdeb3c0b6252df9d153d6bebSteve Paik case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN: 206bf52d5bfd313ae33cdeb3c0b6252df9d153d6bebSteve Paik case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT: 207bf52d5bfd313ae33cdeb3c0b6252df9d153d6bebSteve Paik return 1; 208e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC2: 209e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2: 210e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2: 211e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2: 212e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return 2; 213e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC3: 214e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC3: 215e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3: 216e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3: 217e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return 3; 218e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4: 219e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC4: 22071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC4: 22171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4: 222e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return 4; 223e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev default: 224e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev throw new IllegalArgumentException("Unknown value type: " + vehicleValueType); 225e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev } 226e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev } 227e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev 228e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev public static boolean isCustomProperty(int property) { 229e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return property >= VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_START && 230e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev property <= VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_END; 231e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev } 232e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev 233e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev /** Converts {@link VehiclePropValue} to string just for debug purpose. */ 234e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev public static String toString(VehiclePropValue value) { 235bf52d5bfd313ae33cdeb3c0b6252df9d153d6bebSteve Paik if (value == null) { 236bf52d5bfd313ae33cdeb3c0b6252df9d153d6bebSteve Paik return String.valueOf(null); 237bf52d5bfd313ae33cdeb3c0b6252df9d153d6bebSteve Paik } 238e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return new StringBuilder() 239e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev .append("prop: " + value.getProp() + "\n") 240e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev .append("valueType: " + value.getValueType() + "\n") 241e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev .append("timestamp: " + value.getTimestamp() + "\n") 242e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev .append("int32Values: " + Arrays.toString(toIntArray(value.getInt32ValuesList())) 243e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev + "\n") 244e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev .append("int64Value: " + value.getInt64Value() + "\n") 245e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev .append("floatValues: " + Arrays.toString(toFloatArray(value.getFloatValuesList())) 246e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev + "\n") 247e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev .append("stringValue: " + value.getStringValue() + "\n") 248e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev .append("byteValue: " + Arrays.toString(value.getBytesValue().toByteArray()) + "\n") 24971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park .append("zone: {" + value.getZone() + "}") 250e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev .toString(); 251e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev } 252e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev 253e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev public static int[] toIntArray(List<Integer> collection) { 254e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev int[] array = new int[collection.size()]; 255e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev int i = 0; 256e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev for (int value : collection) { 257e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev array[i++] = value; 258e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev } 259e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return array; 260e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev } 261e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev 262e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev public static float[] toFloatArray(List<Float> collection) { 263e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev float[] array = new float[collection.size()]; 264e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev int i = 0; 265e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev for (float value : collection) { 266e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev array[i++] = value; 267e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev } 268e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return array; 269e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev } 270e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev 271bf52d5bfd313ae33cdeb3c0b6252df9d153d6bebSteve Paik public static int getVectorValueType(int vehicleValueType, int length) { 272e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev return vehicleValueType + length - 1; 273e8f7537867d58983addacd9c43383c43eabe798aPavel Maltsev } 2741ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung} 275