1e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung/* 2e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung * Copyright (C) 2015 The Android Open Source Project 3e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung * 4e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung * Licensed under the Apache License, Version 2.0 (the "License"); 5e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung * you may not use this file except in compliance with the License. 6e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung * You may obtain a copy of the License at 7e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung * 8e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung * http://www.apache.org/licenses/LICENSE-2.0 9e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung * 10e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung * Unless required by applicable law or agreed to in writing, software 11e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung * distributed under the License is distributed on an "AS IS" BASIS, 12e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung * See the License for the specific language governing permissions and 14e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung * limitations under the License. 15e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung */ 16e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung 17d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung#define LOG_TAG "VehicleNetwork" 18d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung 19d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung#include <utils/Log.h> 20d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung 21e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung#include <IVehicleNetwork.h> 22e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung#include "VehicleNetworkProtoUtil.h" 23e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung 24e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoungnamespace android { 25e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung 26e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoungstatic status_t copyString(const std::string& in, uint8_t** out, int32_t* len) { 27e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung *len = in.length(); 287d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung if (*len == 0) { 297d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung *out = NULL; 307d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return NO_ERROR; 317d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 32e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung *out = new uint8_t[*len]; 33e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung ASSERT_OR_HANDLE_NO_MEMORY(*out, return NO_MEMORY); 34e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung memcpy(*out, in.data(), *len); 35e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return NO_ERROR; 36e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung} 37e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung 38e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoungstatus_t VehicleNetworkProtoUtil::toVehiclePropValue(const vehicle_prop_value_t& in, 39e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung VehiclePropValue& out, bool /*inPlace*/) { 40e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.set_prop(in.prop); 41e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.set_value_type(in.value_type); 42e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.set_timestamp(in.timestamp); 4371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.set_zone(in.zone); 44e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung switch (in.value_type) { 45e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung case VEHICLE_VALUE_TYPE_STRING: { 46e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung //TODO fix ugly copy here for inplace mode 477d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung if (in.value.str_value.len > 0) { 487d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung out.set_string_value((char*)in.value.str_value.data, in.value.str_value.len); 497d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 50e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 51e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung case VEHICLE_VALUE_TYPE_BYTES: { 527d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung if (in.value.bytes_value.len > 0) { 537d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung out.set_bytes_value(in.value.bytes_value.data, in.value.bytes_value.len); 547d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 55e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 56e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park case VEHICLE_VALUE_TYPE_FLOAT: 57d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung case VEHICLE_VALUE_TYPE_FLOAT_VEC2: 58d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung case VEHICLE_VALUE_TYPE_FLOAT_VEC3: 59d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung case VEHICLE_VALUE_TYPE_FLOAT_VEC4: { 60e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park int expectedSize = in.value_type - VEHICLE_VALUE_TYPE_FLOAT + 1; 61d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung for (int i = 0; i < expectedSize; i++) { 62d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung out.add_float_values(in.value.float_array[i]); 63d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung } 64e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 65e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung case VEHICLE_VALUE_TYPE_INT64: { 66e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.set_int64_value(in.value.int64_value); 67e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 6871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_BOOLEAN: 6971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_BOOLEAN: { 70d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung out.add_int32_values(in.value.int32_value); 71d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung } break; 72e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park case VEHICLE_VALUE_TYPE_INT32: 73d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung case VEHICLE_VALUE_TYPE_INT32_VEC2: 74d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung case VEHICLE_VALUE_TYPE_INT32_VEC3: 75d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung case VEHICLE_VALUE_TYPE_INT32_VEC4: { 76e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park int expectedSize = in.value_type - VEHICLE_VALUE_TYPE_INT32 + 1; 77d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung for (int i = 0; i < expectedSize; i++) { 78d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung out.add_int32_values(in.value.int32_array[i]); 79d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung } 80e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 81e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung case VEHICLE_VALUE_TYPE_ZONED_INT32: 82e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2: 8371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3: 8471b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4: { 8571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park int expectedSize = in.value_type - VEHICLE_VALUE_TYPE_ZONED_INT32 + 1; 86e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park for (int i = 0; i < expectedSize; i++) { 8771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.add_int32_values(in.value.int32_array[i]); 88e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park } 89e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 90e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_FLOAT: 91e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2: 9271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3: 9371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC4: { 94e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park int expectedSize = in.value_type - VEHICLE_VALUE_TYPE_ZONED_FLOAT + 1; 95e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park for (int i = 0; i < expectedSize; i++) { 9671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.add_float_values(in.value.float_array[i]); 97e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park } 98e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 99e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 100e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return NO_ERROR; 101e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung} 102e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung 103e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoungstatus_t VehicleNetworkProtoUtil::fromVehiclePropValue(const VehiclePropValue& in, 1047d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung vehicle_prop_value_t& out, bool /*inPlace*/, bool canIgnoreNoData) { 105e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.prop = in.prop(); 106e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.value_type = in.value_type(); 107e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.timestamp = in.timestamp(); 10871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.zone = in.zone(); 109e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung switch (out.value_type) { 110e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung case VEHICLE_VALUE_TYPE_STRING: { 111e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung if (!in.has_string_value()) { 112e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung // set to NULL so that client can just delete this safely. 113e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.value.str_value.data = NULL; 114e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.value.str_value.len = 0; 1157d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung if (canIgnoreNoData) { 1167d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return NO_ERROR; 1177d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } else { 1187d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung ALOGE("fromVehiclePropValue, no string data"); 1197d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return BAD_VALUE; 1207d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 121e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 122e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung //TODO fix copy... 123e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung status_t r = copyString(in.string_value(), &(out.value.str_value.data), 124e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung &(out.value.str_value.len)); 125e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung if (r != NO_ERROR) { 126e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.value.str_value.data = NULL; 127e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.value.str_value.len = 0; 1287d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung ALOGE("copyString for string failed %d", r); 129e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return r; 130e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 131e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 132e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung case VEHICLE_VALUE_TYPE_BYTES: { 133e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung if (!in.has_bytes_value()) { 134e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.value.bytes_value.data = NULL; 135e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.value.bytes_value.len = 0; 1367d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung if (canIgnoreNoData) { 1377d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return NO_ERROR; 1387d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } else { 1397d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung ALOGE("fromVehiclePropValue, no byte data"); 1407d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return BAD_VALUE; 1417d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 142e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 143e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung status_t r = copyString(in.bytes_value(), &(out.value.bytes_value.data), 144e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung &(out.value.bytes_value.len)); 145e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung if (r != NO_ERROR) { 146e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.value.bytes_value.data = NULL; 147e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.value.bytes_value.len = 0; 1487d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung ALOGE("copyString for bytes failed %d", r); 149e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return r; 150e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 151e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 15271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_FLOAT: 153d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung case VEHICLE_VALUE_TYPE_FLOAT_VEC2: 154d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung case VEHICLE_VALUE_TYPE_FLOAT_VEC3: 155d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung case VEHICLE_VALUE_TYPE_FLOAT_VEC4: { 15671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park int expectedSize = out.value_type - VEHICLE_VALUE_TYPE_FLOAT + 1; 157d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung if (in.float_values_size() != expectedSize) { 1587d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung if (canIgnoreNoData) { 1597d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return NO_ERROR; 1607d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 161d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung ALOGE("float value, wrong size %d, expecting %d", in.float_values_size(), 162d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung expectedSize); 163d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung return BAD_VALUE; 164d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung } 165d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung for (int i = 0; i < expectedSize; i++) { 166d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung out.value.float_array[i] = in.float_values(i); 167d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung } 168e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 169e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung case VEHICLE_VALUE_TYPE_INT64: { 170e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung if (!in.has_int64_value()) { 1717d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung if (canIgnoreNoData) { 1727d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return NO_ERROR; 1737d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 174d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung ALOGE("no int64 value"); 175e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return BAD_VALUE; 176e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 177e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.value.int64_value = in.int64_value(); 178e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 17971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_BOOLEAN: 18071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_BOOLEAN: { 181d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung if (in.int32_values_size() != 1) { 1827d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung if (canIgnoreNoData) { 1837d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return NO_ERROR; 1847d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 185d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung ALOGE("no int32 value"); 186e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return BAD_VALUE; 187e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 188d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung out.value.int32_value = in.int32_values(0); 189d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung } break; 190e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park case VEHICLE_VALUE_TYPE_INT32: 191d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung case VEHICLE_VALUE_TYPE_INT32_VEC2: 192d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung case VEHICLE_VALUE_TYPE_INT32_VEC3: 193d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung case VEHICLE_VALUE_TYPE_INT32_VEC4: { 194e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park int expectedSize = out.value_type - VEHICLE_VALUE_TYPE_INT32 + 1; 195d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung if (in.int32_values_size() != expectedSize) { 1967d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung if (canIgnoreNoData) { 1977d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return NO_ERROR; 1987d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 199d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung ALOGE("int32 value, wrong size %d, expecting %d", in.int32_values_size(), 200d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung expectedSize); 201d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung return BAD_VALUE; 202d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung } 203d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung for (int i = 0; i < expectedSize; i++) { 204d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung out.value.int32_array[i] = in.int32_values(i); 205d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung } 206e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 20771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park 208e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung case VEHICLE_VALUE_TYPE_ZONED_INT32: 209e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2: 21071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3: 21171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4: { 21271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park int expectedSize = out.value_type - VEHICLE_VALUE_TYPE_ZONED_INT32 + 1; 21371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if (in.int32_values_size() != expectedSize) { 2147d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung if (canIgnoreNoData) { 2157d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return NO_ERROR; 2167d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 21771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park ALOGE("int32 value, wrong size %d, expecting %d", in.int32_values_size(), 21871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park expectedSize); 219e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return BAD_VALUE; 220e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 221e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park for (int i = 0; i < expectedSize; i++) { 22271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.value.int32_array[i] = in.int32_values(i); 223e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park } 224e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 225e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_FLOAT: 226e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2: 22771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3: 22871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC4:{ 229e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park int expectedSize = out.value_type - VEHICLE_VALUE_TYPE_ZONED_FLOAT + 1; 23071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if (in.float_values_size() != expectedSize) { 2317d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung if (canIgnoreNoData) { 2327d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return NO_ERROR; 2337d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 23471b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park ALOGE("float value, wrong size %d, expecting %d", in.float_values_size(), 23571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park expectedSize); 236e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return BAD_VALUE; 237e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 238e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park for (int i = 0; i < expectedSize; i++) { 23971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.value.float_array[i] = in.float_values(i); 240e4b186ee15e9e60c702418405468d7e502942d66Keun-young Park } 241e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 2427d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung default: { 2437d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung if (canIgnoreNoData) { 2447d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return NO_ERROR; 2457d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 2467d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung ALOGE("fromVehiclePropValue unknown type 0x%x", out.value_type); 247e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return BAD_VALUE; 2487d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 249e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 250e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return NO_ERROR; 251e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung} 252e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung 253e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoungstatus_t VehicleNetworkProtoUtil::toVehiclePropValues(const List<vehicle_prop_value_t*>& in, 254e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung VehiclePropValues& out) { 255e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung status_t r; 256e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung for (auto& v : in) { 257e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung VehiclePropValue* value = out.add_values(); 258e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung r = toVehiclePropValue(*v, *value); 259e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung if (r != NO_ERROR) { 260e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.clear_values(); 261e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return r; 262e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 263e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 264e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return NO_ERROR; 265e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung} 266e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung 267e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoungstatus_t VehicleNetworkProtoUtil::fromVehiclePropValues(const VehiclePropValues& in, 268e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung List<vehicle_prop_value_t*>& out) { 269e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung status_t r; 270e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung for (int i = 0; i < in.values_size(); i++) { 271e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung vehicle_prop_value_t* v = new vehicle_prop_value_t(); 272e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung memset(v, 0, sizeof(vehicle_prop_value_t)); 273e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung ASSERT_OR_HANDLE_NO_MEMORY(v, r = NO_MEMORY;goto error); 2745af1fda8f73c63f3d54d022357a861524fef4d6cKeun-young Park r = fromVehiclePropValue(in.values(i), *v); 275e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung if (r != NO_ERROR) { 276e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung delete v; 277e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung goto error; 278e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 279e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.push_back(v); 280e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 281e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return NO_ERROR; 282e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoungerror: 283e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung // clean up everything in List 284e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung for (auto pv : out) { 285e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung VehiclePropValueUtil::deleteMembers(pv); 286e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 287e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return r; 288e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung} 289e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung 290e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoungstatus_t VehicleNetworkProtoUtil::toVehiclePropConfig(const vehicle_prop_config_t& in, 291e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung VehiclePropConfig& out) { 292e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.set_prop(in.prop); 293e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.set_access(in.access); 294e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.set_change_mode(in.change_mode); 295e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.set_value_type(in.value_type); 296e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.set_permission_model(in.permission_model); 29771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.set_zones(in.vehicle_zone_flags); 2980727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park for (unsigned int i = 0; i < sizeof(in.config_array) / sizeof(int32_t); i++) { 2990727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park out.add_config_array(in.config_array[i]); 3000727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park } 301e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung if (in.config_string.data != NULL && in.config_string.len != 0) { 302e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.set_config_string((char*)in.config_string.data, in.config_string.len); 303e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } else { 304e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.clear_config_string(); 305e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 306e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung switch (in.value_type) { 307e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung case VEHICLE_VALUE_TYPE_FLOAT: 308450fabaf451f8474bf9ee536427f9dd473e52e8bKeun-young Park case VEHICLE_VALUE_TYPE_FLOAT_VEC2: 309450fabaf451f8474bf9ee536427f9dd473e52e8bKeun-young Park case VEHICLE_VALUE_TYPE_FLOAT_VEC3: 31071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_FLOAT_VEC4: { 31171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.add_float_maxs(in.float_max_value); 31271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.add_float_mins(in.float_min_value); 31371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } break; 314450fabaf451f8474bf9ee536427f9dd473e52e8bKeun-young Park case VEHICLE_VALUE_TYPE_ZONED_FLOAT: 315450fabaf451f8474bf9ee536427f9dd473e52e8bKeun-young Park case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2: 31671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3: 31771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC4: { 31871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park int numZones = VehicleNetworkUtil::countNumberOfZones(in.vehicle_zone_flags); 31971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if (in.float_min_values == NULL) { 32071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if (in.float_max_values == NULL) { 32171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park // all the same min/max 32271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park for (int i = 0; i < numZones; i++) { 32371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.add_float_maxs(in.float_max_value); 32471b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.add_float_mins(in.float_min_value); 32571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 32671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } else { // invalid combination 32771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park ALOGW("Zoned property 0x%x, min_values NULL while max_values not NULL", 32871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park in.prop); 32971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park return BAD_VALUE; 33071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 33171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } else { 33271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if (in.float_max_values != NULL) { 33371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park for (int i = 0; i < numZones; i++) { 33471b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.add_float_maxs(in.float_max_values[i]); 33571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.add_float_mins(in.float_min_values[i]); 33671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 33771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } else { // invalid combination 33871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park ALOGW("Zoned property 0x%x, max_values NULL while min_values not NULL", 33971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park in.prop); 34071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park return BAD_VALUE; 34171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 34271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 343e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 344e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung case VEHICLE_VALUE_TYPE_INT64: { 34571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.add_int64_maxs(in.int64_max_value); 34671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.add_int64_mins(in.int64_min_value); 347e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 348e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung case VEHICLE_VALUE_TYPE_INT32: 349450fabaf451f8474bf9ee536427f9dd473e52e8bKeun-young Park case VEHICLE_VALUE_TYPE_INT32_VEC2: 350450fabaf451f8474bf9ee536427f9dd473e52e8bKeun-young Park case VEHICLE_VALUE_TYPE_INT32_VEC3: 35171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_INT32_VEC4: { 35271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.add_int32_maxs(in.int32_max_value); 35371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.add_int32_mins(in.int32_min_value); 35471b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } break; 355450fabaf451f8474bf9ee536427f9dd473e52e8bKeun-young Park case VEHICLE_VALUE_TYPE_ZONED_INT32: 356450fabaf451f8474bf9ee536427f9dd473e52e8bKeun-young Park case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2: 35771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3: 35871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4: { 35971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park int numZones = VehicleNetworkUtil::countNumberOfZones(in.vehicle_zone_flags); 36071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if (in.int32_min_values == NULL) { 36171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if (in.int32_max_values == NULL) { 36271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park // all the same min/max 36371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park for (int i = 0; i < numZones; i++) { 36471b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.add_int32_maxs(in.int32_max_value); 36571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.add_int32_mins(in.int32_min_value); 36671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 36771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } else { // invalid combination 36871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park ALOGW("Zoned property 0x%x, min_values NULL while max_values not NULL", 36971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park in.prop); 37071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park return BAD_VALUE; 37171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 37271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } else { 37371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if (in.int32_max_values != NULL) { 37471b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park for (int i = 0; i < numZones; i++) { 37571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.add_int32_maxs(in.int32_max_values[i]); 37671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.add_int32_mins(in.int32_min_values[i]); 37771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 37871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } else { // invalid combination 37971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park ALOGW("Zoned property 0x%x, max_values NULL while min_values not NULL", 38071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park in.prop); 38171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park return BAD_VALUE; 38271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 38371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 384e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 385e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 386e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.set_sample_rate_max(in.max_sample_rate); 387e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.set_sample_rate_min(in.min_sample_rate); 388e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return NO_ERROR; 389e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung} 390e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung 391e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoungstatus_t VehicleNetworkProtoUtil::fromVehiclePropConfig(const VehiclePropConfig& in, 392e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung vehicle_prop_config_t& out) { 393e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.prop = in.prop(); 394e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.access = in.access(); 395e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.change_mode = in.change_mode(); 396e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.value_type = in.value_type(); 397e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.permission_model = in.permission_model(); 39871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.vehicle_zone_flags = in.zones(); 3990727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park int maxConfigSize = sizeof(out.config_array) / sizeof(int32_t); 4000727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park int configSize = in.config_array_size(); 4010727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park if (configSize > maxConfigSize) { 4020727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park return BAD_VALUE; 4030727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park } 4040727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park int i = 0; 4050727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park for (; i < configSize; i++) { 4060727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park out.config_array[i] = in.config_array(i); 4070727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park } 4080727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park for (; i < maxConfigSize; i++) { 4090727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park out.config_array[i] = 0; 4100727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park } 411e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung if (in.has_config_string()) { 412e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung status_t r = copyString(in.config_string(), &(out.config_string.data), 413e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung &(out.config_string.len)); 414e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung if (r != NO_ERROR) { 415e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return r; 416e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 417e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } else { 418e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.config_string.data = NULL; 419e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.config_string.len = 0; 420e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 421e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung switch (out.value_type) { 422e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung case VEHICLE_VALUE_TYPE_FLOAT: 423450fabaf451f8474bf9ee536427f9dd473e52e8bKeun-young Park case VEHICLE_VALUE_TYPE_FLOAT_VEC2: 424450fabaf451f8474bf9ee536427f9dd473e52e8bKeun-young Park case VEHICLE_VALUE_TYPE_FLOAT_VEC3: 42571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_FLOAT_VEC4: { 42671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if ((in.float_maxs_size() == 1) && (in.float_mins_size() == 1)) { 42771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.float_max_value = in.float_maxs(0); 42871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.float_min_value = in.float_mins(0); 429e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } else { 4301ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung ALOGW("no float max/min for property 0x%x", out.prop); 4311ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung out.float_max_value = 0; 4321ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung out.float_min_value = 0; 433e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 434e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 43571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_FLOAT: 43671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2: 43771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3: 43871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC4: { 43971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park int numZones = VehicleNetworkUtil::countNumberOfZones(out.vehicle_zone_flags); 44071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park int maxSize = in.float_maxs_size(); 44171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park int minSize = in.float_mins_size(); 44271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if (maxSize != minSize) { 44371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park ALOGW("Zoned property 0x%x, config maxSize %d minSize %d", out.prop, maxSize, 44471b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park minSize); 44571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park return BAD_VALUE; 44671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 44771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if (maxSize == 0) { 44871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.float_max_value = 0; 44971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.float_min_value = 0; 45071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.float_max_values = NULL; 45171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.float_min_values = NULL; 45271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } else if (maxSize == 1) { // one for all 45371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.float_max_value = in.float_maxs(0); 45471b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.float_min_value = in.float_mins(0); 45571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.float_max_values = NULL; 45671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.float_min_values = NULL; 45771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } else if (numZones > 1){ 45871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if (numZones != maxSize) { 45971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park ALOGW("Zoned property 0x%x, config maxSize %d num Zones %d", out.prop, maxSize, 46071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park numZones); 46171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park return BAD_VALUE; 46271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 46371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.float_max_values = new float[numZones]; 46471b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park ASSERT_OR_HANDLE_NO_MEMORY(out.float_max_values, return NO_MEMORY); 46571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.float_min_values = new float[numZones]; 46671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park ASSERT_OR_HANDLE_NO_MEMORY(out.float_min_values, return NO_MEMORY); 46771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park for (int i = 0; i < numZones; i++) { 46871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.float_max_values[i] = in.float_maxs(i); 46971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.float_min_values[i] = in.float_mins(i); 47071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 47171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 47271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } break; 473e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung case VEHICLE_VALUE_TYPE_INT64: { 47471b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if ((in.int64_maxs_size() == 1) && (in.int64_mins_size() == 1)) { 47571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.int64_max_value = in.int64_maxs(0); 47671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.int64_min_value = in.int64_mins(0); 477e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } else { 4781ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung ALOGW("no int64 max/min for property 0x%x", out.prop); 4791ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung out.int64_max_value = 0; 4801ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung out.int64_min_value = 0; 481e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 482e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 483e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung case VEHICLE_VALUE_TYPE_INT32: 484450fabaf451f8474bf9ee536427f9dd473e52e8bKeun-young Park case VEHICLE_VALUE_TYPE_INT32_VEC2: 485450fabaf451f8474bf9ee536427f9dd473e52e8bKeun-young Park case VEHICLE_VALUE_TYPE_INT32_VEC3: 48671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_INT32_VEC4: { 48771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if ((in.int32_maxs_size() == 1) && (in.int32_mins_size() == 1)) { 48871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.int32_max_value = in.int32_maxs(0); 48971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.int32_min_value = in.int32_mins(0); 490e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } else { 4911ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung ALOGW("no int32 max/min for property 0x%x", out.prop); 4921ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung out.int32_max_value = 0; 4931ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung out.int32_min_value = 0; 494e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 495e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } break; 49671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_INT32: 49771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2: 49871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3: 49971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4: { 50071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park int numZones = VehicleNetworkUtil::countNumberOfZones(out.vehicle_zone_flags); 50171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park int maxSize = in.int32_maxs_size(); 50271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park int minSize = in.int32_mins_size(); 50371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if (maxSize != minSize) { 50471b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park ALOGW("Zoned property 0x%x, config maxSize %d minSize %d", out.prop, maxSize, 50571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park minSize); 50671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park return BAD_VALUE; 50771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 50871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if (maxSize == 0) { 50971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.int32_max_value = 0; 51071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.int32_min_value = 0; 51171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.int32_max_values = NULL; 51271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.int32_min_values = NULL; 51371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } else if (maxSize == 1) { // one for all 51471b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.int32_max_value = in.int32_maxs(0); 51571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.int32_min_value = in.int32_mins(0); 51671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.int32_max_values = NULL; 51771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.int32_min_values = NULL; 51871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } else if (numZones > 1){ 51971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park if (numZones != maxSize) { 52071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park ALOGW("Zoned property 0x%x, config maxSize %d num Zones %d", out.prop, maxSize, 52171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park numZones); 52271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park return BAD_VALUE; 52371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 52471b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.int32_max_values = new int32_t[numZones]; 52571b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park ASSERT_OR_HANDLE_NO_MEMORY(out.int32_max_values, return NO_MEMORY); 52671b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.int32_min_values = new int32_t[numZones]; 52771b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park ASSERT_OR_HANDLE_NO_MEMORY(out.int32_min_values, return NO_MEMORY); 52871b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park for (int i = 0; i < numZones; i++) { 52971b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.int32_max_values[i] = in.int32_maxs(i); 53071b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park out.int32_min_values[i] = in.int32_mins(i); 53171b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 53271b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } 53371b2f5cd736f3a9aac8a9356b049d20ea76edb88Keun-young Park } break; 534e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 535e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.max_sample_rate = in.sample_rate_max(); 536e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.min_sample_rate = in.sample_rate_min(); 537e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return NO_ERROR; 538e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung} 539e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung 540d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoungstatus_t VehicleNetworkProtoUtil::toVehiclePropConfigs(List<vehicle_prop_config_t const*> &in, 541d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung VehiclePropConfigs& out) { 542e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung status_t r; 543d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung for (auto& inEntry : in) { 544e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung VehiclePropConfig* config = out.add_configs(); 545d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung r = toVehiclePropConfig(*inEntry, *config); 546e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung if (r != NO_ERROR) { 547e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung out.clear_configs(); 548e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return r; 549e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 550e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 551e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return NO_ERROR; 552e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung} 553e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung 554e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoungstatus_t VehicleNetworkProtoUtil::fromVehiclePropConfigs(const VehiclePropConfigs& in, 555d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung List<vehicle_prop_config_t const*>& out) { 556e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung int32_t n = in.configs_size(); 557e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung status_t r; 558e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung for (int32_t i = 0; i < n; i++) { 559d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung vehicle_prop_config_t* entry = new vehicle_prop_config_t(); 560d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung ASSERT_OR_HANDLE_NO_MEMORY(entry, r = NO_MEMORY; goto error); 561d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung memset(entry, 0, sizeof(vehicle_prop_config_t)); 562d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung r = fromVehiclePropConfig(in.configs(i), *entry); 563e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung if (r != NO_ERROR) { 564d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung goto error; 565e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 566d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung out.push_back(entry); 567e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung } 568e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung return NO_ERROR; 569d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoungerror: 570d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung for (auto& e : out) { 571d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung vehicle_prop_config_t* eDelete = const_cast<vehicle_prop_config_t*>(e); 572d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung VehiclePropertiesUtil::deleteMembers(eDelete); 573d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung delete eDelete; 574d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung } 575d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung out.clear(); 576d32f4e69d861d0adc2ae8f18345143f253d6fceckeunyoung return r; 577e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung} 578e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung 5797d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoungstatus_t VehiclePropValueBinderUtil::writeToParcel(Parcel& parcel, 5807d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung const vehicle_prop_value_t& value) { 5817d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung parcel.writeInt32(1); // 0 means no value. For compatibility with aidl based code. 5827d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung std::unique_ptr<VehiclePropValue> v(new VehiclePropValue()); 5837d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung ASSERT_OR_HANDLE_NO_MEMORY(v.get(), return NO_MEMORY); 5847d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung VehicleNetworkProtoUtil::toVehiclePropValue(value, *v.get()); 5857d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung int size = v->ByteSize(); 5867d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung WritableBlobHolder blob(new Parcel::WritableBlob()); 5877d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung ASSERT_OR_HANDLE_NO_MEMORY(blob.blob, return NO_MEMORY); 5887d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung parcel.writeInt32(size); 5897d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung parcel.writeBlob(size, false, blob.blob); 5907d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung v->SerializeToArray(blob.blob->data(), size); 5917d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return NO_ERROR; 5927d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung} 5937d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung 5947d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoungstatus_t VehiclePropValueBinderUtil::readFromParcel(const Parcel& parcel, 5957d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung vehicle_prop_value_t* value, bool deleteMembers, bool canIgnoreNoData) { 5967d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung if (parcel.readInt32() == 0) { // no result 5977d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung ALOGE("readFromParcel, null data"); 5987d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return BAD_VALUE; 5997d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 6007d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung ReadableBlobHolder blob(new Parcel::ReadableBlob()); 6017d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung ASSERT_OR_HANDLE_NO_MEMORY(blob.blob, return NO_MEMORY); 6027d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung int32_t size = parcel.readInt32(); 6037d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung status_t status = parcel.readBlob(size, blob.blob); 6047d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung if (status != NO_ERROR) { 6057d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung ALOGE("readFromParcel, cannot read blob"); 6067d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return status; 6077d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 6087d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung std::unique_ptr<VehiclePropValue> v(new VehiclePropValue()); 6097d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung ASSERT_OR_HANDLE_NO_MEMORY(v.get(), return NO_MEMORY); 6107d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung if (!v->ParseFromArray(blob.blob->data(), size)) { 6117d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung ALOGE("readFromParcel, cannot parse"); 6127d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return BAD_VALUE; 6137d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 6147d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung if (deleteMembers) { 6157d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung VehiclePropValueUtil::deleteMembers(value); 6167d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung } 6177d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung return VehicleNetworkProtoUtil::fromVehiclePropValue(*v.get(), *value, false /*inPlace*/, 6187d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung canIgnoreNoData); 6197d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung} 6207d74e6d9195f29d0eb50f7bcbe235334b02dba8ekeunyoung 621e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung}; //namespace android 622e18e25d2a79e94a4cea83a94daee5f4cafd419cfkeunyoung 623