vehicle hal update
- add release_memory_from_get to allow hal to release
memory it has allocated in get call
- clear get call's behavior: If data is not available, should
return immediately with VEHICLE_ERROR_NOT_READY error
- make zone separate in vehicle_prop_config_t and
vehicle_prop_value_t: Handing of zoned property becomes
simpler
- cleanup some data type definitions for zoned properties
bug: 27597338, 27596281
Change-Id: I7a8454b86555270fb2211e5d36b3ee06d350f8ed
diff --git a/modules/vehicle/vehicle.c b/modules/vehicle/vehicle.c
index 564630c..d8aa2cb 100644
--- a/modules/vehicle/vehicle.c
+++ b/modules/vehicle/vehicle.c
@@ -245,6 +245,21 @@
return 0;
}
+static void vdev_release_memory_from_get(struct vehicle_hw_device* device UNUSED,
+ vehicle_prop_value_t *data) {
+ switch (data->value_type) {
+ case VEHICLE_VALUE_TYPE_STRING:
+ case VEHICLE_VALUE_TYPE_BYTES:
+ free(data->value.str_value.data);
+ data->value.str_value.data = NULL;
+ break;
+ default:
+ ALOGW("release_memory_from_get for property 0x%x which is not string or bytes type 0x%x"
+ , data->prop, data->value_type);
+ break;
+ }
+}
+
static int vdev_set(vehicle_hw_device_t* device UNUSED, const vehicle_prop_value_t* data) {
ALOGD("vdev_set.");
// Just print what data will be setting here.
@@ -377,7 +392,7 @@
return;
}
if (sub->impl->error_fn_ != NULL) {
- sub->impl->error_fn_(VEHICLE_ERROR_UNKNOWN, VEHICLE_PROPERTY_INVALID,
+ sub->impl->error_fn_(-EINVAL, VEHICLE_PROPERTY_INVALID,
VEHICLE_OPERATION_GENERIC);
} else {
ALOGE("Error function is null");
@@ -538,6 +553,7 @@
vdev->vehicle_device.init = vdev_init;
vdev->vehicle_device.release = vdev_release;
vdev->vehicle_device.get = vdev_get;
+ vdev->vehicle_device.release_memory_from_get = vdev_release_memory_from_get;
vdev->vehicle_device.set = vdev_set;
vdev->vehicle_device.subscribe = vdev_subscribe;
vdev->vehicle_device.unsubscribe = vdev_unsubscribe;