blob: 4cb33d475d58a38f6e939210feb82a4f1f4101bb [file] [log] [blame]
Sanket Agarwalfb636682015-08-11 14:34:29 -07001/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ANDROID_VEHICLE_INTERFACE_H
18#define ANDROID_VEHICLE_INTERFACE_H
19
20#include <stdint.h>
21#include <sys/cdefs.h>
22#include <sys/types.h>
Keun-young Park418c7e82016-04-06 10:44:20 -070023#include <math.h>
Sanket Agarwalfb636682015-08-11 14:34:29 -070024#include <errno.h>
25
26#include <hardware/hardware.h>
27#include <cutils/native_handle.h>
28
29__BEGIN_DECLS
30
31/*****************************************************************************/
32
33#define VEHICLE_HEADER_VERSION 1
34#define VEHICLE_MODULE_API_VERSION_1_0 HARDWARE_MODULE_API_VERSION(1, 0)
35#define VEHICLE_DEVICE_API_VERSION_1_0 HARDWARE_DEVICE_API_VERSION_2(1, 0, VEHICLE_HEADER_VERSION)
36
37/**
38 * Vehicle HAL to provide interfaces to various Car related sensors. The HAL is
39 * designed in a property, value maping where each property has a value which
40 * can be "get", "set" and "(un)subscribed" to. Subscribing will require the
41 * user of this HAL to provide parameters such as sampling rate.
42 */
43
44
45/*
46 * The id of this module
47 */
48#define VEHICLE_HARDWARE_MODULE_ID "vehicle"
49
50/**
51 * Name of the vehicle device to open
52 */
53#define VEHICLE_HARDWARE_DEVICE "vehicle_hw_device"
54
55/**
56 * Each vehicle property is defined with various annotations to specify the type of information.
57 * Annotations will be used by scripts to run some type check or generate some boiler-plate codes.
58 * Also the annotations are the specification for each property, and each HAL implementation should
59 * follow what is specified as annotations.
60 * Here is the list of annotations with explanation on what it does:
61 * @value_type: Type of data for this property. One of the value from vehicle_value_type should be
62 * set here.
63 * @change_mode: How this property changes. Value set is from vehicle_prop_change_mode. Some
64 * properties can allow either on change or continuous mode and it is up to HAL
65 * implementation to choose which mode to use.
66 * @access: Define how this property can be accessed. read only, write only or R/W from
67 * vehicle_prop_access
68 * @data_member: Name of member from vehicle_value union to access this data.
69 * @data_enum: enum type that should be used for the data.
70 * @unit: Unit of data. Should be from vehicle_unit_type.
Keun-young Parkbf877a72015-12-21 14:16:05 -080071 * @config_flags: Usage of config_flags in vehicle_prop_config
72 * @config_array: Usage of config_array in vehicle_prop_config. When this is specified,
73 * @config_flags will not be used.
Sanket Agarwalfb636682015-08-11 14:34:29 -070074 * @config_string: Explains the usage of config_string in vehicle_prop_config. Property with
75 * this annotation is expected to have additional information in config_string
76 * for that property to work.
Keun-young Park14f09002016-01-22 16:29:22 -080077 * @zone_type type of zoned used. defined for zoned property
Sanket Agarwalfb636682015-08-11 14:34:29 -070078 * @range_start, @range_end : define range of specific property values.
Keun-young Park418c7e82016-04-06 10:44:20 -070079 * @allow_out_of_range_value : This property allows out of range value to deliver additional
80 * information. Check VEHICLE_*_OUT_OF_RANGE_* for applicable values.
Sanket Agarwalfb636682015-08-11 14:34:29 -070081 */
82//===== Vehicle Information ====
83
84/**
85 * Invalid property value used for argument where invalid property gives different result.
86 * @range_start
87 */
88#define VEHICLE_PROPERTY_INVALID (0x0)
89
90/**
91 * VIN of vehicle
92 * @value_type VEHICLE_VALUE_TYPE_STRING
93 * @change_mode VEHICLE_PROP_CHANGE_MODE_STATIC
94 * @access VEHICLE_PROP_ACCESS_READ
95 * @data_member info_vin
96 */
97#define VEHICLE_PROPERTY_INFO_VIN (0x00000100)
98
99/**
100 * Maker name of vehicle
101 * @value_type VEHICLE_VALUE_TYPE_STRING
102 * @change_mode VEHICLE_PROP_CHANGE_MODE_STATIC
103 * @access VEHICLE_PROP_ACCESS_READ
104 * @data_member info_make
105 */
106#define VEHICLE_PROPERTY_INFO_MAKE (0x00000101)
107
108/**
109 * Model of vehicle
110 * @value_type VEHICLE_VALUE_TYPE_STRING
111 * @change_mode VEHICLE_PROP_CHANGE_MODE_STATIC
112 * @access VEHICLE_PROP_ACCESS_READ
113 * @data_member info_model
114 */
115#define VEHICLE_PROPERTY_INFO_MODEL (0x00000102)
116
117/**
118 * Model year of vehicle.
119 * @value_type VEHICLE_VALUE_TYPE_INT32
120 * @change_mode VEHICLE_PROP_CHANGE_MODE_STATIC
121 * @access VEHICLE_PROP_ACCESS_READ
122 * @data_member info_model_year
123 * @unit VEHICLE_UNIT_TYPE_YEAR
124 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700125#define VEHICLE_PROPERTY_INFO_MODEL_YEAR (0x00000103)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700126
127/**
128 * Fuel capacity of the vehicle
129 * @value_type VEHICLE_VALUE_TYPE_FLOAT
130 * @change_mode VEHICLE_PROP_CHANGE_MODE_STATIC
131 * @access VEHICLE_PROP_ACCESS_READ
132 * @data_member info_fuel_capacity
133 * @unit VEHICLE_UNIT_TYPE_VEHICLE_UNIT_TYPE_MILLILITER
134 */
135#define VEHICLE_PROPERTY_INFO_FUEL_CAPACITY (0x00000104)
136
137
138//==== Vehicle Performance Sensors ====
139
140/**
141 * Current odometer value of the vehicle
142 * @value_type VEHICLE_VALUE_TYPE_FLOAT
143 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE|VEHICLE_PROP_CHANGE_MODE_CONTINUOUS
144 * @access VEHICLE_PROP_ACCESS_READ
145 * @data_member odometer
146 * @unit VEHICLE_UNIT_TYPE_KILOMETER
147 */
148#define VEHICLE_PROPERTY_PERF_ODOMETER (0x00000204)
149
150/**
151 * Speed of the vehicle
152 * @value_type VEHICLE_VALUE_TYPE_FLOAT
153 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE|VEHICLE_PROP_CHANGE_MODE_CONTINUOUS
154 * @access VEHICLE_PROP_ACCESS_READ
155 * @data_member vehicle_speed
156 * @unit VEHICLE_UNIT_TYPE_METER_PER_SEC
157 */
158#define VEHICLE_PROPERTY_PERF_VEHICLE_SPEED (0x00000207)
159
160
161//==== Engine Sensors ====
162
163/**
164 * Temperature of engine coolant
165 * @value_type VEHICLE_VALUE_TYPE_FLOAT
166 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE|VEHICLE_PROP_CHANGE_MODE_CONTINUOUS
167 * @access VEHICLE_PROP_ACCESS_READ
168 * @data_member engine_coolant_temperature
169 * @unit VEHICLE_UNIT_TYPE_CELCIUS
170 */
171#define VEHICLE_PROPERTY_ENGINE_COOLANT_TEMP (0x00000301)
172
173/**
174 * Temperature of engine oil
175 * @value_type VEHICLE_VALUE_TYPE_FLOAT
176 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE|VEHICLE_PROP_CHANGE_MODE_CONTINUOUS
177 * @access VEHICLE_PROP_ACCESS_READ
178 * @data_member engine_oil_temperature
179 * @unit VEHICLE_UNIT_TYPE_CELCIUS
180 */
181#define VEHICLE_PROPERTY_ENGINE_OIL_TEMP (0x00000304)
182/**
183 * Engine rpm
184 * @value_type VEHICLE_VALUE_TYPE_FLOAT
185 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE|VEHICLE_PROP_CHANGE_MODE_CONTINUOUS
186 * @access VEHICLE_PROP_ACCESS_READ
187 * @data_member engine_rpm
188 * @unit VEHICLE_UNIT_TYPE_RPM
189 */
190#define VEHICLE_PROPERTY_ENGINE_RPM (0x00000305)
191
192//==== Event Sensors ====
193
194/**
195 * Currently selected gear
196 * @value_type VEHICLE_VALUE_TYPE_INT32
197 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
198 * @access VEHICLE_PROP_ACCESS_READ
199 * @data_member gear_selection
200 * @data_enum vehicle_gear
201 */
202#define VEHICLE_PROPERTY_GEAR_SELECTION (0x00000400)
203
204/**
205 * Current gear. In non-manual case, selected gear does not necessarily match the current gear
206 * @value_type VEHICLE_VALUE_TYPE_INT32
207 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
208 * @access VEHICLE_PROP_ACCESS_READ
209 * @data_member gear_current_gear
210 * @data_enum vehicle_gear
211 */
212#define VEHICLE_PROPERTY_CURRENT_GEAR (0x00000401)
213
214/**
215 * Parking brake state.
216 * @value_type VEHICLE_VALUE_TYPE_BOOLEAN
217 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
218 * @access VEHICLE_PROP_ACCESS_READ
219 * @data_member parking_brake
220 * @data_enum vehicle_boolean
221 */
222#define VEHICLE_PROPERTY_PARKING_BRAKE_ON (0x00000402)
223
224/**
225 * Driving status policy.
226 * @value_type VEHICLE_VALUE_TYPE_INT32
227 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
228 * @access VEHICLE_PROP_ACCESS_READ
229 * @data_member driving_status
230 * @data_enum vehicle_driving_status
231 */
232#define VEHICLE_PROPERTY_DRIVING_STATUS (0x00000404)
233
234/**
235 * Warning for fuel low level.
236 * @value_type VEHICLE_VALUE_TYPE_BOOLEAN
237 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
238 * @access VEHICLE_PROP_ACCESS_READ
239 * @data_member is_fuel_level_low
240 * @data_enum vehicle_boolean
241 */
242#define VEHICLE_PROPERTY_FUEL_LEVEL_LOW (0x00000405)
243
244/**
245 * Night mode or not.
246 * @value_type VEHICLE_VALUE_TYPE_BOOLEAN
247 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
248 * @access VEHICLE_PROP_ACCESS_READ
249 * @data_member night_mode
250 * @data_enum vehicle_boolean
251 */
252#define VEHICLE_PROPERTY_NIGHT_MODE (0x00000407)
253
254
255
Steve Paike588bae2016-06-29 17:06:16 -0700256//==== HVAC Properties ====
Sanket Agarwalfb636682015-08-11 14:34:29 -0700257
258/**
259 * Fan speed setting
260 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
261 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
262 * @access VEHICLE_PROP_ACCESS_READ_WRITE
263 * @data_member hvac.fan_speed
Keun-young Park14f09002016-01-22 16:29:22 -0800264 * @zone_type VEHICLE_ZONE
Sanket Agarwalfb636682015-08-11 14:34:29 -0700265 * @data_enum TODO
Keun-young Park418c7e82016-04-06 10:44:20 -0700266 * @allow_out_of_range_value : OFF
Sanket Agarwalfb636682015-08-11 14:34:29 -0700267 */
268#define VEHICLE_PROPERTY_HVAC_FAN_SPEED (0x00000500)
269
270/**
271 * Fan direction setting
272 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
273 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
274 * @access VEHICLE_PROP_ACCESS_READ_WRITE
275 * @data_member hvac.fan_direction
Keun-young Park14f09002016-01-22 16:29:22 -0800276 * @zone_type VEHICLE_ZONE
Sanket Agarwalfb636682015-08-11 14:34:29 -0700277 * @data_enum TODO
Keun-young Park418c7e82016-04-06 10:44:20 -0700278 * @allow_out_of_range_value : OFF
Sanket Agarwalfb636682015-08-11 14:34:29 -0700279 */
280#define VEHICLE_PROPERTY_HVAC_FAN_DIRECTION (0x00000501)
281
Steve Paikd2ba70f2015-12-10 14:58:27 -0800282/*
283 * Bit flags for fan direction
284 */
Steve Paik159349e2016-02-09 18:45:58 -0800285enum vehicle_hvac_fan_direction {
286 VEHICLE_HVAC_FAN_DIRECTION_FACE = 0x1,
287 VEHICLE_HVAC_FAN_DIRECTION_FLOOR = 0x2,
288 VEHICLE_HVAC_FAN_DIRECTION_FACE_AND_FLOOR = 0x3,
289 VEHICLE_HVAC_FAN_DIRECTION_DEFROST = 0x4,
290 VEHICLE_HVAC_FAN_DIRECTION_DEFROST_AND_FLOOR = 0x5
Steve Paikd2ba70f2015-12-10 14:58:27 -0800291};
292
Sanket Agarwalfb636682015-08-11 14:34:29 -0700293/**
294 * HVAC current temperature.
295 * @value_type VEHICLE_VALUE_TYPE_ZONED_FLOAT
Keun-young Parkda3cb912016-05-12 11:21:04 -0700296 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
Sanket Agarwalfb636682015-08-11 14:34:29 -0700297 * @access VEHICLE_PROP_ACCESS_READ_WRITE
Keun-young Park14f09002016-01-22 16:29:22 -0800298 * @zone_type VEHICLE_ZONE
Sanket Agarwalfb636682015-08-11 14:34:29 -0700299 * @data_member hvac.temperature_current
300 */
301#define VEHICLE_PROPERTY_HVAC_TEMPERATURE_CURRENT (0x00000502)
302
303/**
304 * HVAC, target temperature set.
305 * @value_type VEHICLE_VALUE_TYPE_ZONED_FLOAT
Keun-young Parkda3cb912016-05-12 11:21:04 -0700306 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
Sanket Agarwalfb636682015-08-11 14:34:29 -0700307 * @access VEHICLE_PROP_ACCESS_READ_WRITE
Keun-young Park14f09002016-01-22 16:29:22 -0800308 * @zone_type VEHICLE_ZONE
Sanket Agarwalfb636682015-08-11 14:34:29 -0700309 * @data_member hvac.temperature_set
Keun-young Park418c7e82016-04-06 10:44:20 -0700310 * @allow_out_of_range_value : MIN / MAX / OFF
Sanket Agarwalfb636682015-08-11 14:34:29 -0700311 */
312#define VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET (0x00000503)
313
314/**
315 * On/off defrost
316 * @value_type VEHICLE_VALUE_TYPE_ZONED_BOOLEAN
317 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
318 * @access VEHICLE_PROP_ACCESS_READ_WRITE
Keun-young Park418c7e82016-04-06 10:44:20 -0700319 * @zone_type VEHICLE_WINDOW
Sanket Agarwalfb636682015-08-11 14:34:29 -0700320 * @data_member hvac.defrost_on
321 */
322#define VEHICLE_PROPERTY_HVAC_DEFROSTER (0x00000504)
323
324/**
325 * On/off AC
326 * @value_type VEHICLE_VALUE_TYPE_ZONED_BOOLEAN
327 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
328 * @access VEHICLE_PROP_ACCESS_READ_WRITE
Keun-young Parkbf877a72015-12-21 14:16:05 -0800329 * @config_flags Supported zones
Keun-young Park14f09002016-01-22 16:29:22 -0800330 * @zone_type VEHICLE_ZONE
Sanket Agarwalfb636682015-08-11 14:34:29 -0700331 * @data_member hvac.ac_on
332 */
333#define VEHICLE_PROPERTY_HVAC_AC_ON (0x00000505)
334
335/**
Steve Paikd2ba70f2015-12-10 14:58:27 -0800336 * On/off max AC
Keun-young Parkf1ccec12016-04-22 13:19:53 -0700337 * @value_type VEHICLE_VALUE_TYPE_ZONED_BOOLEAN
Steve Paikd2ba70f2015-12-10 14:58:27 -0800338 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
339 * @access VEHICLE_PROP_ACCESS_READ_WRITE
Keun-young Parkf1ccec12016-04-22 13:19:53 -0700340 * @zone_type VEHICLE_ZONE
Steve Paikd2ba70f2015-12-10 14:58:27 -0800341 * @data_member hvac.max_ac_on
342 */
343#define VEHICLE_PROPERTY_HVAC_MAX_AC_ON (0x00000506)
344
345/**
346 * On/off max defrost
Keun-young Parkf1ccec12016-04-22 13:19:53 -0700347 * @value_type VEHICLE_VALUE_TYPE_ZONED_BOOLEAN
Steve Paikd2ba70f2015-12-10 14:58:27 -0800348 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
349 * @access VEHICLE_PROP_ACCESS_READ_WRITE
Keun-young Parkf1ccec12016-04-22 13:19:53 -0700350 * @zone_type VEHICLE_ZONE
Steve Paikd2ba70f2015-12-10 14:58:27 -0800351 * @data_member hvac.max_defrost_on
352 */
353#define VEHICLE_PROPERTY_HVAC_MAX_DEFROST_ON (0x00000507)
354
355/**
356 * On/off re-circulation
Keun-young Parkf1ccec12016-04-22 13:19:53 -0700357 * @value_type VEHICLE_VALUE_TYPE_ZONED_BOOLEAN
Steve Paikd2ba70f2015-12-10 14:58:27 -0800358 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
359 * @access VEHICLE_PROP_ACCESS_READ_WRITE
Keun-young Parkf1ccec12016-04-22 13:19:53 -0700360 * @zone_type VEHICLE_ZONE
Steve Paikd2ba70f2015-12-10 14:58:27 -0800361 * @data_member hvac.max_recirc_on
362 */
363#define VEHICLE_PROPERTY_HVAC_RECIRC_ON (0x00000508)
364
365/**
Keun-young Parkf1ccec12016-04-22 13:19:53 -0700366 * On/off dual. This will be defined per each row.
367 * @value_type VEHICLE_VALUE_TYPE_ZONED_BOOLEAN
Steve Paikd2ba70f2015-12-10 14:58:27 -0800368 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
369 * @access VEHICLE_PROP_ACCESS_READ_WRITE
Keun-young Parkf1ccec12016-04-22 13:19:53 -0700370 * @zone_type VEHICLE_ZONE
Steve Paikd2ba70f2015-12-10 14:58:27 -0800371 * @data_member hvac.dual_on
372 */
373#define VEHICLE_PROPERTY_HVAC_DUAL_ON (0x00000509)
374
375/**
Steve Paikcc9e2922016-04-21 11:40:17 -0700376 * On/off automatic mode
377 * @value_type VEHICLE_VALUE_TYPE_ZONED_BOOLEAN
378 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
379 * @access VEHICLE_PROP_ACCESS_READ_WRITE
380 * @zone_type VEHICLE_ZONE
Steve Paik670e7ab2016-04-29 16:32:02 -0700381 * @data_member hvac.auto_on
Steve Paikcc9e2922016-04-21 11:40:17 -0700382 */
383#define VEHICLE_PROPERTY_HVAC_AUTO_ON (0x0000050A)
384
385/**
Steve Paike588bae2016-06-29 17:06:16 -0700386 * Seat temperature
387 *
388 * Negative values indicate cooling.
389 * 0 indicates off.
390 * Positive values indicate heating.
391 *
392 * Some vehicles may have multiple levels of heating and cooling. The min/max
393 * range defines the allowable range and number of steps in each direction.
394 *
395 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
396 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
397 * @access VEHICLE_PROP_ACCESS_WRITE
398 * @zone_type VEHICLE_SEAT
399 * @data_member int32_value
400 */
401#define VEHICLE_PROPERTY_HVAC_SEAT_TEMPERATURE (0x0000050B)
402
403/**
Keun-young Park418c7e82016-04-06 10:44:20 -0700404 * Represents power state for HVAC. Some HVAC properties will require matching power to be turned on
405 * to get out of OFF state. For non-zoned HVAC properties, VEHICLE_ALL_ZONE corresponds to
406 * global power state.
407 *
408 * @value_type VEHICLE_VALUE_TYPE_ZONED_BOOLEAN
409 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
410 * @access VEHICLE_PROP_ACCESS_READ_WRITE
411 * @config_string list of HVAC properties whose power is controlled by this property. Format is
412 * hexa-decimal number (0x...) separated by comma like "0x500,0x503". All zones
413 * defined in these affected properties should be available in the property.
414 * @zone_type VEHICLE_ZONE
415 * @data_member hvac.power_on
416 */
417#define VEHICLE_PROPERTY_HVAC_POWER_ON (0x00000510)
418
419/**
Sanket Agarwalfb636682015-08-11 14:34:29 -0700420 * Outside temperature
421 * @value_type VEHICLE_VALUE_TYPE_FLOAT
422 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE|VEHICLE_PROP_CHANGE_MODE_CONTINUOUS
423 * @access VEHICLE_PROP_ACCESS_READ
424 * @data_member outside_temperature
425 * @unit VEHICLE_UNIT_TYPE_CELCIUS
426 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700427#define VEHICLE_PROPERTY_ENV_OUTSIDE_TEMPERATURE (0x00000703)
Keun-young Parkcb354502016-02-08 18:15:55 -0800428
429
430/**
431 * Cabin temperature
432 * @value_type VEHICLE_VALUE_TYPE_FLOAT
433 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE|VEHICLE_PROP_CHANGE_MODE_CONTINUOUS
434 * @access VEHICLE_PROP_ACCESS_READ
435 * @data_member cabin_temperature
436 * @unit VEHICLE_UNIT_TYPE_CELCIUS
437 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700438#define VEHICLE_PROPERTY_ENV_CABIN_TEMPERATURE (0x00000704)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700439
440
441/*
442 * Radio features.
443 */
444/**
445 * Radio presets stored on the Car radio module. The data type used is int32
446 * array with the following fields:
447 * <ul>
448 * <li> int32_array[0]: Preset number </li>
449 * <li> int32_array[1]: Band type (see #RADIO_BAND_FM in
450 * system/core/include/system/radio.h).
451 * <li> int32_array[2]: Channel number </li>
452 * <li> int32_array[3]: Sub channel number </li>
453 * </ul>
454 *
455 * NOTE: When getting a current preset config ONLY set preset number (i.e.
456 * int32_array[0]). For setting a preset other fields are required.
457 *
458 * @value_type VEHICLE_VALUE_TYPE_INT32_VEC4
459 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
460 * @access VEHICLE_PROP_ACCESS_READ_WRITE
Keun-young Parkbf877a72015-12-21 14:16:05 -0800461 * @config_flags Number of presets supported
Sanket Agarwalfb636682015-08-11 14:34:29 -0700462 * @data_member int32_array
463 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700464#define VEHICLE_PROPERTY_RADIO_PRESET (0x0000801)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700465
466/**
467 * Constants relevant to radio.
468 */
469enum vehicle_radio_consts {
470 /** Minimum value for the radio preset */
471 VEHICLE_RADIO_PRESET_MIN_VALUE = 1,
472};
473
474/**
475 * Represents audio focus state of Android side. Note that car's audio module will own audio
476 * focus and grant audio focus to Android side when requested by Android side. The focus has both
477 * per stream characteristics and global characteristics.
478 *
479 * Focus request (get of this property) will take the following form in int32_vec4:
Keun-young Park08c255e2015-12-09 13:47:30 -0800480 * int32_array[0]: vehicle_audio_focus_request type
Sanket Agarwalfb636682015-08-11 14:34:29 -0700481 * int32_array[1]: bit flags of streams requested by this focus request. There can be up to
482 * 32 streams.
483 * int32_array[2]: External focus state flags. For request, only flag like
Keun-young Park418c7e82016-04-06 10:44:20 -0700484 * VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG or
485 * VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG can be used.
486 * VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG is for case like radio where android
487 * side app still needs to hold focus but playback is done outside Android.
488 * VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG is for muting media channel
489 * including radio. VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG can be set even
490 * if android side releases focus (request type REQUEST_RELEASE). In that case,
491 * audio module should maintain mute state until user's explicit action to
492 * play some media.
Keun-young Park637fb202016-03-29 09:52:41 -0700493 * int32_array[3]: Currently active audio contexts. Use combination of flags from
Keun-young Parkfe599a82016-02-12 14:26:57 -0800494 * vehicle_audio_context_flag.
495 * This can be used as a hint to adjust audio policy or other policy decision.
496 * Note that there can be multiple context active at the same time. And android
497 * can send the same focus request type gain due to change in audio contexts.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700498 * Note that each focus request can request multiple streams that is expected to be used for
499 * the current request. But focus request itself is global behavior as GAIN or GAIN_TRANSIENT
500 * expects all sounds played by car's audio module to stop. Note that stream already allocated to
501 * android before this focus request should not be affected by focus request.
502 *
503 * Focus response (set and subscription callback for this property) will take the following form:
Keun-young Park08c255e2015-12-09 13:47:30 -0800504 * int32_array[0]: vehicle_audio_focus_state type
Sanket Agarwalfb636682015-08-11 14:34:29 -0700505 * int32_array[1]: bit flags of streams allowed.
506 * int32_array[2]: External focus state: bit flags of currently active audio focus in car
507 * side (outside Android). Active audio focus does not necessarily mean currently
508 * playing, but represents the state of having focus or waiting for focus
509 * (pause state).
510 * One or combination of flags from vehicle_audio_ext_focus_flag.
511 * 0 means no active audio focus holder outside Android.
512 * The state will have following values for each vehicle_audio_focus_state_type:
513 * GAIN: 0 or VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY when radio is active in
514 * Android side.
515 * GAIN_TRANSIENT: 0. Can be VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT or
516 * VEHICLE_AUDIO_EXT_FOCUS_CAR_TRANSIENT if android side has requested
517 * GAIN_TRANSIENT_MAY_DUCK and car side is ducking.
518 * LOSS: 0 when no focus is audio is active in car side.
519 * VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT when car side is playing something
520 * permanent.
521 * LOSS_TRANSIENT: always should be VEHICLE_AUDIO_EXT_FOCUS_CAR_TRANSIENT
Keun-young Parkda3cb912016-05-12 11:21:04 -0700522 * int32_array[3]: context requested by android side when responding to focus request.
523 * When car side is taking focus away, this should be zero.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700524 *
Keun-young Park254dbce2016-03-28 09:37:04 -0700525 * A focus response should be sent per each focus request even if there is no change in
526 * focus state. This can happen in case like focus request only involving context change
527 * where android side still needs matching focus response to confirm that audio module
528 * has made necessary changes.
529 *
Sanket Agarwalfb636682015-08-11 14:34:29 -0700530 * If car does not support VEHICLE_PROPERTY_AUDIO_FOCUS, focus is assumed to be granted always.
531 *
Keun-young Parkfe599a82016-02-12 14:26:57 -0800532 * @value_type VEHICLE_VALUE_TYPE_INT32_VEC4
Sanket Agarwalfb636682015-08-11 14:34:29 -0700533 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
534 * @access VEHICLE_PROP_ACCESS_READ_WRITE
535 * @data_member int32_array
536 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700537#define VEHICLE_PROPERTY_AUDIO_FOCUS (0x00000900)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700538
539enum vehicle_audio_focus_request {
540 VEHICLE_AUDIO_FOCUS_REQUEST_GAIN = 0x1,
541 VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT = 0x2,
542 VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK = 0x3,
Keun-young Parkcb354502016-02-08 18:15:55 -0800543 /**
544 * This is for the case where android side plays sound like UI feedback
545 * and car side does not need to duck existing playback as long as
546 * requested stream is available.
547 */
548 VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_NO_DUCK = 0x4,
549 VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE = 0x5,
Sanket Agarwalfb636682015-08-11 14:34:29 -0700550};
551
552enum vehicle_audio_focus_state {
553 /**
554 * Android side has permanent focus and can play allowed streams.
555 */
556 VEHICLE_AUDIO_FOCUS_STATE_GAIN = 0x1,
557 /**
558 * Android side has transient focus and can play allowed streams.
559 */
560 VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT = 0x2,
561 /**
562 * Car audio module is playing guidance kind of sound outside Android. Android side can
563 * still play through allowed streams with ducking.
564 */
565 VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_CAN_DUCK = 0x3,
566 /**
567 * Car audio module is playing transient sound outside Android. Android side should stop
568 * playing any sounds.
569 */
570 VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT = 0x4,
571 /**
572 * Android side has lost focus and cannot play any sound.
573 */
574 VEHICLE_AUDIO_FOCUS_STATE_LOSS = 0x5,
575 /**
576 * car audio module is playing safety critical sound, and Android side cannot request focus
577 * until the current state is finished. car audio module should restore it to the previous
578 * state when it can allow Android to play.
579 */
580 VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_EXLCUSIVE = 0x6,
581};
582
583/**
584 * Flags to represent multiple streams by combining these.
585 */
586enum vehicle_audio_stream_flag {
587 VEHICLE_AUDIO_STREAM_STREAM0_FLAG = (0x1<<0),
588 VEHICLE_AUDIO_STREAM_STREAM1_FLAG = (0x1<<1),
589 VEHICLE_AUDIO_STREAM_STREAM2_FLAG = (0x1<<2),
590};
591
592/**
593 * Represents stream number (always 0 to N -1 where N is max number of streams).
594 * Can be used for audio related property expecting one stream.
595 */
596enum vehicle_audio_stream {
597 VEHICLE_AUDIO_STREAM0 = 0,
598 VEHICLE_AUDIO_STREAM1 = 1,
599};
600
601/**
602 * Flag to represent external focus state (outside Android).
603 */
604enum vehicle_audio_ext_focus_flag {
605 /**
606 * No external focus holder.
607 */
608 VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG = 0x0,
609 /**
610 * Car side (outside Android) has component holding GAIN kind of focus state.
611 */
612 VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT_FLAG = 0x1,
613 /**
614 * Car side (outside Android) has component holding GAIN_TRANSIENT kind of focus state.
615 */
616 VEHICLE_AUDIO_EXT_FOCUS_CAR_TRANSIENT_FLAG = 0x2,
617 /**
618 * Car side is expected to play something while focus is held by Android side. One example
619 * can be radio attached in car side. But Android's radio app still should have focus,
620 * and Android side should be in GAIN state, but media stream will not be allocated to Android
621 * side and car side can play radio any time while this flag is active.
622 */
623 VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG = 0x4,
Keun-young Park418c7e82016-04-06 10:44:20 -0700624 /**
625 * Car side should mute any media including radio. This can be used with any focus request
626 * including GAIN* and RELEASE.
627 */
628 VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG = 0x8,
Sanket Agarwalfb636682015-08-11 14:34:29 -0700629};
630
631/**
632 * Index in int32_array for VEHICLE_PROPERTY_AUDIO_FOCUS property.
633 */
634enum vehicle_audio_focus_index {
635 VEHICLE_AUDIO_FOCUS_INDEX_FOCUS = 0,
636 VEHICLE_AUDIO_FOCUS_INDEX_STREAMS = 1,
637 VEHICLE_AUDIO_FOCUS_INDEX_EXTERNAL_FOCUS_STATE = 2,
Keun-young Parkfe599a82016-02-12 14:26:57 -0800638 VEHICLE_AUDIO_FOCUS_INDEX_AUDIO_CONTEXTS = 3,
639};
640
641/**
642 * Flags to tell the current audio context.
643 */
644enum vehicle_audio_context_flag {
645 /** Music playback is currently active. */
646 VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG = 0x1,
647 /** Navigation is currently running. */
648 VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG = 0x2,
649 /** Voice command session is currently running. */
650 VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG = 0x4,
651 /** Voice call is currently active. */
652 VEHICLE_AUDIO_CONTEXT_CALL_FLAG = 0x8,
653 /** Alarm is active. This may be only used in VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY. */
654 VEHICLE_AUDIO_CONTEXT_ALARM_FLAG = 0x10,
655 /**
656 * Notification sound is active. This may be only used in VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY.
657 */
658 VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG = 0x20,
659 /**
660 * Context unknown. Only used for VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY to represent default
661 * stream for unknown contents.
662 */
663 VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG = 0x40,
664 /** Safety alert / warning is played. */
665 VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG = 0x80,
666 /** CD / DVD kind of audio is played */
Keun-young Park9f376f52016-03-03 17:47:18 -0800667 VEHICLE_AUDIO_CONTEXT_CD_ROM_FLAG = 0x100,
Keun-young Parkfe599a82016-02-12 14:26:57 -0800668 /** Aux audio input is played */
Keun-young Park9f376f52016-03-03 17:47:18 -0800669 VEHICLE_AUDIO_CONTEXT_AUX_AUDIO_FLAG = 0x200,
Keun-young Parkfe599a82016-02-12 14:26:57 -0800670 /** system sound like UI feedback */
Keun-young Park9f376f52016-03-03 17:47:18 -0800671 VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG = 0x400,
Keun-young Parkfe599a82016-02-12 14:26:57 -0800672 /** Radio is played */
Keun-young Park9f376f52016-03-03 17:47:18 -0800673 VEHICLE_AUDIO_CONTEXT_RADIO_FLAG = 0x800,
Sanket Agarwalfb636682015-08-11 14:34:29 -0700674};
675
676/**
Keun-young Parkbf877a72015-12-21 14:16:05 -0800677 * Property to control audio volume of each audio context.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700678 *
Keun-young Park12a3c012016-03-23 17:58:29 -0700679 * vehicle_prop_config_t
680 * config_array[0] : bit flags of all supported audio contexts. If this is 0,
681 * audio volume is controlled per physical stream
682 * config_array[1] : flags defined in vehicle_audio_volume_capability_flag to
683 * represent audio module's capability.
684 *
Sanket Agarwalfb636682015-08-11 14:34:29 -0700685 * Data type looks like:
Keun-young Park12a3c012016-03-23 17:58:29 -0700686 * int32_array[0] : stream context as defined in vehicle_audio_context_flag. If only physical
687 stream is supported (config_array[0] == 0), this will represent physical
688 stream number.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700689 * int32_array[1] : volume level, valid range is 0 to int32_max_value defined in config.
690 * 0 will be mute state. int32_min_value in config should be always 0.
691 * int32_array[2] : One of vehicle_audio_volume_state.
692 *
693 * This property requires per stream based get. HAL implementation should check stream number
694 * in get call to return the right volume.
695 *
696 * @value_type VEHICLE_VALUE_TYPE_INT32_VEC3
697 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
698 * @access VEHICLE_PROP_ACCESS_READ_WRITE
Keun-young Parkbf877a72015-12-21 14:16:05 -0800699 * @config_flags all audio contexts supported.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700700 * @data_member int32_array
701 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700702#define VEHICLE_PROPERTY_AUDIO_VOLUME (0x00000901)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700703
Keun-young Park12a3c012016-03-23 17:58:29 -0700704
705/**
706 * flags to represent capability of audio volume property.
707 * used in config_array[1] of vehicle_prop_config_t.
708 */
709enum vehicle_audio_volume_capability_flag {
710 /**
711 * External audio module or vehicle hal has persistent storage
712 * to keep the volume level. This should be set only when per context
713 * volume level is supproted. When this is set, audio volume level per
714 * each context will be retrieved from the property when systen starts up.
715 * And external audio module is also expected to adjust volume automatically
716 * whenever there is an audio context change.
717 * When this flag is not set, android side will assume that there is no
718 * persistent storage and stored value in android side will be used to
719 * initialize the volume level. And android side will set volume level
720 * of each physical streams whenever there is an audio context change.
721 */
722 VEHICLE_AUDIO_VOLUME_CAPABILITY_PERSISTENT_STORAGE = 0x1,
723};
724
Steve Paikcc9e2922016-04-21 11:40:17 -0700725
Sanket Agarwalfb636682015-08-11 14:34:29 -0700726/**
727 * enum to represent audio volume state.
728 */
729enum vehicle_audio_volume_state {
730 VEHICLE_AUDIO_VOLUME_STATE_OK = 0,
731 /**
732 * Audio volume has reached volume limit set in VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT
733 * and user's request to increase volume further is not allowed.
734 */
735 VEHICLE_AUDIO_VOLUME_STATE_LIMIT_REACHED = 1,
736};
737
738/**
739 * Index in int32_array for VEHICLE_PROPERTY_AUDIO_VOLUME property.
740 */
741enum vehicle_audio_volume_index {
742 VEHICLE_AUDIO_VOLUME_INDEX_STREAM = 0,
743 VEHICLE_AUDIO_VOLUME_INDEX_VOLUME = 1,
744 VEHICLE_AUDIO_VOLUME_INDEX_STATE = 2,
745};
746
747/**
748 * Property for handling volume limit set by user. This limits maximum volume that can be set
Keun-young Park12a3c012016-03-23 17:58:29 -0700749 * per each context or physical stream.
750 *
751 * vehicle_prop_config_t
752 * config_array[0] : bit flags of all supported audio contexts. If this is 0,
753 * audio volume is controlled per physical stream
754 * config_array[1] : flags defined in vehicle_audio_volume_capability_flag to
755 * represent audio module's capability.
756 *
757 * Data type looks like:
758 * int32_array[0] : stream context as defined in vehicle_audio_context_flag. If only physical
759 * stream is supported (config_array[0] == 0), this will represent physical
760 * stream number.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700761 * int32_array[1] : maximum volume set to the stream. If there is no restriction, this value
762 * will be bigger than VEHICLE_PROPERTY_AUDIO_VOLUME's max value.
763 *
764 * If car does not support this feature, this property should not be populated by HAL.
765 * This property requires per stream based get. HAL implementation should check stream number
766 * in get call to return the right volume.
767 *
768 * @value_type VEHICLE_VALUE_TYPE_INT32_VEC2
769 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
770 * @access VEHICLE_PROP_ACCESS_READ_WRITE
Keun-young Parkbf877a72015-12-21 14:16:05 -0800771 * @config_flags all audio contexts supported.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700772 * @data_member int32_array
773 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700774#define VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT (0x00000902)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700775
776/**
777 * Index in int32_array for VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT property.
778 */
779enum vehicle_audio_volume_limit_index {
780 VEHICLE_AUDIO_VOLUME_LIMIT_INDEX_STREAM = 0,
781 VEHICLE_AUDIO_VOLUME_LIMIT_INDEX_MAX_VOLUME = 1,
782};
783
784/**
785 * Property to share audio routing policy of android side. This property is set at the beginning
786 * to pass audio policy in android side down to vehicle HAL and car audio module.
787 * This can be used as a hint to adjust audio policy or other policy decision.
788 *
789 * int32_array[0] : audio stream where the audio for the application context will be routed
790 * by default. Note that this is the default setting from system, but each app
791 * may still use different audio stream for whatever reason.
Keun-young Parkbf877a72015-12-21 14:16:05 -0800792 * int32_array[1] : All audio contexts that will be sent through the physical stream. Flag
793 * is defined in vehicle_audio_context_flag.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700794
795 * Setting of this property will be done for all available physical streams based on audio H/W
796 * variant information acquired from VEHICLE_PROPERTY_AUDIO_HW_VARIANT property.
797 *
798 * @value_type VEHICLE_VALUE_TYPE_INT32_VEC2
799 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
800 * @access VEHICLE_PROP_ACCESS_WRITE
801 * @data_member int32_array
802 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700803#define VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY (0x00000903)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700804
805/**
806 * Index in int32_array for VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY property.
807 */
808enum vehicle_audio_routing_policy_index {
809 VEHICLE_AUDIO_ROUTING_POLICY_INDEX_STREAM = 0,
810 VEHICLE_AUDIO_ROUTING_POLICY_INDEX_CONTEXTS = 1,
811};
812
813/**
814* Property to return audio H/W variant type used in this car. This allows android side to
815* support different audio policy based on H/W variant used. Note that other components like
816* CarService may need overlay update to support additional variants. If this property does not
817* exist, default audio policy will be used.
818*
819* @value_type VEHICLE_VALUE_TYPE_INT32
820* @change_mode VEHICLE_PROP_CHANGE_MODE_STATIC
821* @access VEHICLE_PROP_ACCESS_READ
Keun-young Parkbf877a72015-12-21 14:16:05 -0800822* @config_flags Additional info on audio H/W. Should use vehicle_audio_hw_variant_config_flag for
823* this.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700824* @data_member int32_value
825*/
Steve Paikcc9e2922016-04-21 11:40:17 -0700826#define VEHICLE_PROPERTY_AUDIO_HW_VARIANT (0x00000904)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700827
828/**
829 * Flag to be used in vehicle_prop_config.config_flags for VEHICLE_PROPERTY_AUDIO_HW_VARIANT.
830 */
831enum vehicle_audio_hw_variant_config_flag {
832 /**
Keun-young Park637fb202016-03-29 09:52:41 -0700833 * Flag to tell that radio is internal to android and radio should
834 * be treated like other android stream like media.
835 * When this flag is not set or AUDIO_HW_VARIANT does not exist,
836 * radio is treated as external module. This brins some delta in audio focus
837 * handling as well.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700838 */
Keun-young Park637fb202016-03-29 09:52:41 -0700839 VEHICLE_AUDIO_HW_VARIANT_FLAG_INTERNAL_RADIO_FLAG = 0x1,
Sanket Agarwalfb636682015-08-11 14:34:29 -0700840};
841
Keun-young Parkcb8c8872016-01-08 09:41:19 -0800842
843/**
Sanket Agarwalfb636682015-08-11 14:34:29 -0700844 * Property to control power state of application processor.
845 *
846 * It is assumed that AP's power state is controller by separate power controller.
847 *
848 * For configuration information, vehicle_prop_config.config_flags can have bit flag combining
849 * values in vehicle_ap_power_state_config_type.
850 *
851 * For get / notification, data type looks like this:
852 * int32_array[0] : vehicle_ap_power_state_type
853 * int32_array[1] : additional parameter relevant for each state. should be 0 if not used.
854 * For set, data type looks like this:
855 * int32_array[0] : vehicle_ap_power_state_set_type
856 * int32_array[1] : additional parameter relevant for each request. should be 0 if not used.
857 *
858 * @value_type VEHICLE_VALUE_TYPE_INT32_VEC2
859 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
860 * @access VEHICLE_PROP_ACCESS_READ_WRITE
Keun-young Parkbf877a72015-12-21 14:16:05 -0800861 * @config_flags Additional info on power state. Should use vehicle_ap_power_state_config_flag.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700862 * @data_member int32_array
863 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700864#define VEHICLE_PROPERTY_AP_POWER_STATE (0x00000A00)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700865
866enum vehicle_ap_power_state_config_flag {
867 /**
868 * AP can enter deep sleep state. If not set, AP will always shutdown from
869 * VEHICLE_AP_POWER_STATE_SHUTDOWN_PREPARE power state.
870 */
871 VEHICLE_AP_POWER_STATE_CONFIG_ENABLE_DEEP_SLEEP_FLAG = 0x1,
872
873 /**
874 * The power controller can power on AP from off state after timeout specified in
875 * VEHICLE_AP_POWER_SET_SHUTDOWN_READY message.
876 */
877 VEHICLE_AP_POWER_STATE_CONFIG_SUPPORT_TIMER_POWER_ON_FLAG = 0x2,
878};
879
880enum vehicle_ap_power_state {
881 /** vehicle HAL will never publish this state to AP */
882 VEHICLE_AP_POWER_STATE_OFF = 0,
883 /** vehicle HAL will never publish this state to AP */
884 VEHICLE_AP_POWER_STATE_DEEP_SLEEP = 1,
885 /** AP is on but display should be off. */
886 VEHICLE_AP_POWER_STATE_ON_DISP_OFF = 2,
887 /** AP is on with display on. This state allows full user interaction. */
888 VEHICLE_AP_POWER_STATE_ON_FULL = 3,
889 /**
890 * The power controller has requested AP to shutdown. AP can either enter sleep state or start
891 * full shutdown. AP can also request postponing shutdown by sending
892 * VEHICLE_AP_POWER_SET_SHUTDOWN_POSTPONE message. The power controller should change power
893 * state to this state to shutdown system.
894 *
895 * int32_array[1] : one of enum_vehicle_ap_power_state_shutdown_param_type
896 */
897 VEHICLE_AP_POWER_STATE_SHUTDOWN_PREPARE = 4,
898};
899
900enum vehicle_ap_power_state_shutdown_param {
901 /** AP should shutdown immediately. Postponing is not allowed. */
902 VEHICLE_AP_POWER_SHUTDOWN_PARAM_SHUTDOWN_IMMEDIATELY = 1,
903 /** AP can enter deep sleep instead of shutting down completely. */
904 VEHICLE_AP_POWER_SHUTDOWN_PARAM_CAN_SLEEP = 2,
905 /** AP can only shutdown with postponing allowed. */
906 VEHICLE_AP_POWER_SHUTDOWN_PARAM_SHUTDOWN_ONLY = 3,
907};
908
909enum vehicle_ap_power_set_state {
910 /**
911 * AP has finished boot up, and can start shutdown if requested by power controller.
912 */
913 VEHICLE_AP_POWER_SET_BOOT_COMPLETE = 0x1,
914 /**
915 * AP is entering deep sleep state. How this state is implemented may vary depending on
916 * each H/W, but AP's power should be kept in this state.
917 */
918 VEHICLE_AP_POWER_SET_DEEP_SLEEP_ENTRY = 0x2,
919 /**
920 * AP is exiting from deep sleep state, and is in VEHICLE_AP_POWER_STATE_SHUTDOWN_PREPARE state.
921 * The power controller may change state to other ON states based on the current state.
922 */
923 VEHICLE_AP_POWER_SET_DEEP_SLEEP_EXIT = 0x3,
924 /**
925 * int32_array[1]: Time to postpone shutdown in ms. Maximum value can be 5000 ms.
926 * If AP needs more time, it will send another POSTPONE message before
927 * the previous one expires.
928 */
929 VEHICLE_AP_POWER_SET_SHUTDOWN_POSTPONE = 0x4,
930 /**
931 * AP is starting shutting down. When system completes shutdown, everything will stop in AP
932 * as kernel will stop all other contexts. It is responsibility of vehicle HAL or lower level
933 * to synchronize that state with external power controller. As an example, some kind of ping
934 * with timeout in power controller can be a solution.
935 *
936 * int32_array[1]: Time to turn on AP in secs. Power controller may turn on AP after specified
937 * time so that AP can run tasks like update. If it is set to 0, there is no
938 * wake up, and power controller may not necessarily support wake-up.
939 * If power controller turns on AP due to timer, it should start with
940 * VEHICLE_AP_POWER_STATE_ON_DISP_OFF state, and after receiving
941 * VEHICLE_AP_POWER_SET_BOOT_COMPLETE, it shall do state transition to
942 * VEHICLE_AP_POWER_STATE_SHUTDOWN_PREPARE.
943 */
944 VEHICLE_AP_POWER_SET_SHUTDOWN_START = 0x5,
945 /**
946 * User has requested to turn off headunit's display, which is detected in android side.
947 * The power controller may change the power state to VEHICLE_AP_POWER_STATE_ON_DISP_OFF.
948 */
949 VEHICLE_AP_POWER_SET_DISPLAY_OFF = 0x6,
950 /**
951 * User has requested to turn on headunit's display, most probably from power key input which
952 * is attached to headunit. The power controller may change the power state to
953 * VEHICLE_AP_POWER_STATE_ON_FULL.
954 */
955 VEHICLE_AP_POWER_SET_DISPLAY_ON = 0x7,
956};
957
958/**
959 * Property to represent brightness of the display. Some cars have single control for
960 * the brightness of all displays and this property is to share change in that control.
961 *
962 * If this is writable, android side can set this value when user changes display brightness
963 * from Settings. If this is read only, user may still change display brightness from Settings,
964 * but that will not be reflected to other displays.
965 *
966 * @value_type VEHICLE_VALUE_TYPE_INT32
967 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
968 * @access VEHICLE_PROP_ACCESS_READ|VEHICLE_PROP_ACCESS_READ_WRITE
969 * @data_member int32
970 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700971#define VEHICLE_PROPERTY_DISPLAY_BRIGHTNESS (0x00000A01)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700972
973
974/**
975 * Index in int32_array for VEHICLE_PROPERTY_AP_POWER_STATE property.
976 */
977enum vehicle_ap_power_state_index {
978 VEHICLE_AP_POWER_STATE_INDEX_STATE = 0,
979 VEHICLE_AP_POWER_STATE_INDEX_ADDITIONAL = 1,
980};
981
982/**
983* Property to report bootup reason for the current power on. This is a static property that will
984* not change for the whole duration until power off. For example, even if user presses power on
985* button after automatic power on with door unlock, bootup reason should stay with
986* VEHICLE_AP_POWER_BOOTUP_REASON_USER_UNLOCK.
987*
988* int32_value should be vehicle_ap_power_bootup_reason.
989*
990* @value_type VEHICLE_VALUE_TYPE_INT32
991* @change_mode VEHICLE_PROP_CHANGE_MODE_STATIC
992* @access VEHICLE_PROP_ACCESS_READ
993* @data_member int32_value
994*/
995#define VEHICLE_PROPERTY_AP_POWER_BOOTUP_REASON (0x00000A02)
996
997/**
998 * Enum to represent bootup reason.
999 */
1000enum vehicle_ap_power_bootup_reason {
1001 /**
1002 * Power on due to user's pressing of power key or rotating of ignition switch.
1003 */
1004 VEHICLE_AP_POWER_BOOTUP_REASON_USER_POWER_ON = 0,
1005 /**
1006 * Automatic power on triggered by door unlock or any other kind of automatic user detection.
1007 */
1008 VEHICLE_AP_POWER_BOOTUP_REASON_USER_UNLOCK = 1,
1009 /**
1010 * Automatic power on triggered by timer. This only happens when AP has asked wake-up after
1011 * certain time through time specified in VEHICLE_AP_POWER_SET_SHUTDOWN_START.
1012 */
1013 VEHICLE_AP_POWER_BOOTUP_REASON_TIMER = 2,
1014};
1015
Keun-young Parkcb354502016-02-08 18:15:55 -08001016
1017/**
1018 * Property to feed H/W input events to android
1019 *
1020 * int32_array[0] : action defined by vehicle_hw_key_input_action
1021 * int32_array[1] : key code, should use standard android key code
1022 * int32_array[2] : target display defined in vehicle_display. Events not tied
1023 * to specific display should be sent to DISPLAY_MAIN.
1024 * int32_array[3] : reserved for now. should be zero
1025 * @value_type VEHICLE_VALUE_TYPE_INT32_VEC4
1026 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1027 * @access VEHICLE_PROP_ACCESS_READ
1028 * @config_flags
1029 * @data_member int32_array
1030 */
1031#define VEHICLE_PROPERTY_HW_KEY_INPUT (0x00000A10)
1032
1033enum vehicle_hw_key_input_action {
1034 /** Key down */
1035 VEHICLE_HW_KEY_INPUT_ACTION_DOWN = 0,
1036 /** Key up */
1037 VEHICLE_HW_KEY_INPUT_ACTION_UP = 1,
1038};
1039
1040enum vehicle_display {
1041 /** center console */
1042 VEHICLE_DISPLAY_MAIN = 0,
1043 VEHICLE_DISPLAY_INSTRUMENT_CLUSTER = 1,
1044};
1045
Sanket Agarwalfb636682015-08-11 14:34:29 -07001046/**
Keun-young Parkfe599a82016-02-12 14:26:57 -08001047 * Property to define instrument cluster information.
1048 * For CLUSTER_TYPE_EXTERNAL_DISPLAY:
1049 * READ:
1050 * int32_array[0] : The current screen mode index. Screen mode is defined
1051 * as a configuration in car service and represents which
1052 * area of screen is renderable.
1053 * int32_array[1] : Android can render to instrument cluster (=1) or not(=0). When this is 0,
1054 * instrument cluster may be rendering some information in the area
1055 * allocated for android and android side rendering is invisible. *
1056 * int32_array[2..3] : should be zero
1057 * WRITE from android:
1058 * int32_array[0] : Preferred mode for android side. Depending on the app rendering to instrument
1059 * cluster, preferred mode can change. Instrument cluster still needs to send
1060 * event with new mode to trigger actual mode change.
1061 * int32_array[1] : The current app context relevant for instrument cluster. Use the same flag
1062 * with vehicle_audio_context_flag but this context represents active apps, not
1063 * active audio. Instrument cluster side may change mode depending on the
1064 * currently active contexts.
1065 * int32_array[2..3] : should be zero
1066 * When system boots up, Android side will write {0, 0, 0, 0} when it is ready to render to
1067 * instrument cluster. Before this message, rendering from android should not be visible in the
1068 * cluster.
1069 * @value_type VEHICLE_VALUE_TYPE_INT32_VEC4
1070 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1071 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1072 * @config_array 0:vehicle_instument_cluster_type 1:hw type
1073 * @data_member int32_array
1074 */
Steve Paikcc9e2922016-04-21 11:40:17 -07001075#define VEHICLE_PROPERTY_INSTRUMENT_CLUSTER_INFO (0x00000A20)
Keun-young Parkfe599a82016-02-12 14:26:57 -08001076
1077/**
1078 * Represents instrument cluster type available in system
1079 */
1080enum vehicle_instument_cluster_type {
1081 /** Android has no access to instument cluster */
1082 VEHICLE_INSTRUMENT_CLUSTER_TYPE_NONE = 0,
1083 /**
1084 * Instrument cluster can communicate through vehicle hal with additional
1085 * properties to exchange meta-data
1086 */
1087 VEHICLE_INSTRUMENT_CLUSTER_TYPE_HAL_INTERFACE = 1,
1088 /**
1089 * Instrument cluster is external display where android can render contents
1090 */
1091 VEHICLE_INSTRUMENT_CLUSTER_TYPE_EXTERNAL_DISPLAY = 2,
1092};
1093
Steve Paikd432fc02016-05-11 16:25:33 -07001094/**
1095 * Current date and time, encoded as Unix time.
1096 * This value denotes the number of seconds that have elapsed since 1/1/1970.
1097 *
1098 * @value_type VEHICLE_VALUE_TYPE_INT64
Keun-young Parkda3cb912016-05-12 11:21:04 -07001099 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_SET
Steve Paikd432fc02016-05-11 16:25:33 -07001100 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1101 * @data_member int64_value
1102 * @unit VEHICLE_UNIT_TYPE_SECS
1103 */
1104#define VEHICLE_PROPERTY_UNIX_TIME (0x00000A30)
1105
1106/**
1107 * Current time only.
1108 * Some vehicles may not keep track of date. This property only affects the current time, in
1109 * seconds during the day. Thus, the max value for this parameter is 86,400 (24 * 60 * 60)
1110 *
1111 * @value_type VEHICLE_VALUE_TYPE_INT32
Keun-young Parkda3cb912016-05-12 11:21:04 -07001112 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_SET
Steve Paikd432fc02016-05-11 16:25:33 -07001113 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1114 * @data_member int32_value
1115 * @unit VEHICLE_UNIT_TYPE_SECS
1116 */
1117#define VEHICLE_PROPERTY_CURRENT_TIME_IN_SECONDS (0x00000A31)
Steve Paikcc9e2922016-04-21 11:40:17 -07001118
Steve Paike588bae2016-06-29 17:06:16 -07001119
1120//==== Car Cabin Properties ====
Steve Paikcc9e2922016-04-21 11:40:17 -07001121/**
Steve Paike588bae2016-06-29 17:06:16 -07001122 * Most Car Cabin properties have both a MOVE and POSITION parameter associated with them.
Steve Paikcc9e2922016-04-21 11:40:17 -07001123 *
Steve Paike588bae2016-06-29 17:06:16 -07001124 * The MOVE parameter will start moving the device in the indicated direction. The magnitude
1125 * indicates the relative speed. For instance, setting the WINDOW_MOVE parameter to +1 will roll
1126 * the window up. Setting it to +2 (if available) will roll it up faster.
Steve Paikcc9e2922016-04-21 11:40:17 -07001127 *
Steve Paike588bae2016-06-29 17:06:16 -07001128 * The POSITION parameter will move the device to the desired position. For instance, if the
1129 * WINDOW_POS has a range of 0-100, then setting this parameter to 50 will open the window halfway.
1130 * Depending upon the initial position, the window may move up or down to the 50% value.
Steve Paikcc9e2922016-04-21 11:40:17 -07001131 *
Steve Paike588bae2016-06-29 17:06:16 -07001132 * OEMs may choose to implement one or both of the MOVE/POSITION parameters depending upon the
1133 * capability of the hardware.
1134 */
1135
1136// Doors
1137/**
1138 * Door position
1139 *
1140 * This is an integer in case a door may be set to a particular position. Max
1141 * value indicates fully open, min value (0) indicates fully closed.
1142 *
1143 * Some vehicles (minivans) can open the door electronically. Hence, the ability
1144 * to write this property.
1145 *
1146 * @value_type VEHICE_VALUE_TYPE_ZONED_INT32
Steve Paikcc9e2922016-04-21 11:40:17 -07001147 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
Steve Paike588bae2016-06-29 17:06:16 -07001148 * @access VEHICLE_PROP_ACCESS_READ|VEHICLE_PROP_ACCESS_WRITE
1149 * @zone_type VEHICLE_DOOR
Steve Paikd432fc02016-05-11 16:25:33 -07001150 * @data_member int32_value
Steve Paikcc9e2922016-04-21 11:40:17 -07001151 */
Steve Paike588bae2016-06-29 17:06:16 -07001152#define VEHICLE_PROPERTY_DOOR_POS (0x00000B00)
Steve Paikcc9e2922016-04-21 11:40:17 -07001153
1154/**
Steve Paike588bae2016-06-29 17:06:16 -07001155 * Door move
1156 *
1157 * @value_type VEHICE_VALUE_TYPE_ZONED_INT32
1158 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1159 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1160 * @zone_type VEHICLE_DOOR
1161 * @data_member int32_value
1162 */
1163#define VEHICLE_PROPERTY_DOOR_MOVE (0x00000B01)
1164
1165
1166/**
1167 * Door lock
1168 *
1169 * 'true' indicates door is locked
1170 *
1171 * @value_type VEHICE_VALUE_TYPE_ZONED_BOOLEAN
1172 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1173 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1174 * @zone_type VEHICLE_DOOR
1175 * @data_member boolean_value
1176 */
1177#define VEHICLE_PROPERTY_DOOR_LOCK (0x00000B02)
1178
1179// Mirrors
1180/**
1181 * Mirror Z Position
1182 *
1183 * Positive value indicates tilt upwards, negative value is downwards
1184 *
1185 * @value_type VEHICE_VALUE_TYPE_ZONED_INT32
1186 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1187 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1188 * @zone_type VEHICLE_MIRROR
1189 * @data_member int32_value
1190 */
1191#define VEHICLE_PROPERTY_MIRROR_Z_POS (0x00000B40)
1192
1193/**
1194 * Mirror Z Move
1195 *
1196 * Positive value indicates tilt upwards, negative value is downwards
1197 *
1198 * @value_type VEHICE_VALUE_TYPE_ZONED_INT32
1199 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1200 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1201 * @zone_type VEHICLE_MIRROR
1202 * @data_member int32_value
1203 */
1204#define VEHICLE_PROPERTY_MIRROR_Z_MOVE (0x00000B41)
1205
1206/**
1207 * Mirror Y Position
1208 *
1209 * Positive value indicate tilt right, negative value is left
1210 *
1211 * @value_type VEHICE_VALUE_TYPE_ZONED_INT32
1212 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1213 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1214 * @zone_type VEHICLE_MIRROR
1215 * @data_member int32_value
1216 */
1217#define VEHICLE_PROPERTY_MIRROR_Y_POS (0x00000B42)
1218
1219/**
1220 * Mirror Y Move
1221 *
1222 * Positive value indicate tilt right, negative value is left
1223 *
1224 * @value_type VEHICE_VALUE_TYPE_ZONED_INT32
1225 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1226 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1227 * @zone_type VEHICLE_MIRROR
1228 * @data_member int32_value
1229 */
1230#define VEHICLE_PROPERTY_MIRROR_Y_MOVE (0x00000B43)
1231
1232/**
1233 * Mirror Lock
1234 *
1235 * True indicates mirror positions are locked and not changeable
1236 *
1237 * @value_type VEHICE_VALUE_TYPE_BOOLEAN
1238 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1239 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1240 * @data_member boolean_value
1241 */
1242#define VEHICLE_PROPERTY_MIRROR_LOCK (0x00000B44)
1243
1244/**
1245 * Mirror Heat
1246 *
1247 * Increase values denote higher heating levels.
1248 *
1249 * @value_type VEHICE_VALUE_TYPE_INT32
1250 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1251 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1252 * @data_member int32_value
1253 */
1254#define VEHICLE_PROPERTY_MIRROR_HEAT (0x00000B45)
1255
1256/**
1257 * Mirror Fold
1258 *
1259 * True indicates mirrors are folded
1260 *
1261 * @value_type VEHICE_VALUE_TYPE_BOOLEAN
1262 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1263 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1264 * @data_member boolean_value
1265 */
1266#define VEHICLE_PROPERTY_MIRROR_FOLD (0x00000B46)
1267
1268// Seats
1269/**
1270 * Seat memory select
Steve Paikcc9e2922016-04-21 11:40:17 -07001271 *
1272 * This parameter selects the memory preset to use to select the seat position.
1273 * The minValue is always 0, and the maxValue determines the number of seat
1274 * positions available.
1275 *
1276 * For instance, if the driver's seat has 3 memory presets, the maxValue will be 3.
1277 * When the user wants to select a preset, the desired preset number (1, 2, or 3)
1278 * is set.
1279 *
Keun-young Park7cb258e2016-04-25 18:37:28 -07001280 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
Steve Paikcc9e2922016-04-21 11:40:17 -07001281 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1282 * @access VEHICLE_PROP_ACCESS_WRITE
1283 * @zone_type VEHICLE_SEAT
Steve Paikd432fc02016-05-11 16:25:33 -07001284 * @data_member int32_value
Steve Paikcc9e2922016-04-21 11:40:17 -07001285 */
Steve Paike588bae2016-06-29 17:06:16 -07001286#define VEHICLE_PROPERTY_SEAT_MEMORY_SELECT (0x00000B80)
Steve Paikcc9e2922016-04-21 11:40:17 -07001287
1288/**
1289 * Seat memory set
1290 *
1291 * This setting allows the user to save the current seat position settings into
1292 * the selected preset slot. The maxValue for each seat position shall match
1293 * the maxValue for VEHICLE_PROPERTY_SEAT_MEMORY_SELECT.
1294 *
Keun-young Park7cb258e2016-04-25 18:37:28 -07001295 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
Steve Paikcc9e2922016-04-21 11:40:17 -07001296 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1297 * @access VEHICLE_PROP_ACCESS_WRITE
1298 * @zone_type VEHICLE_SEAT
Steve Paikd432fc02016-05-11 16:25:33 -07001299 * @data_member int32_value
Steve Paikcc9e2922016-04-21 11:40:17 -07001300 */
Steve Paike588bae2016-06-29 17:06:16 -07001301#define VEHICLE_PROPERTY_SEAT_MEMORY_SET (0x00000B81)
1302
1303/**
1304 * Seatbelt buckled
1305 *
1306 * True indicates belt is buckled.
1307 *
1308 * Write access indicates automatic seat buckling capabilities. There are no known cars at this
1309 * time, but you never know...
1310 *
1311 * @value_type VEHICLE_VALUE_TYPE_ZONED_BOOLEAN
1312 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1313 * @access VEHICLE_PROP_ACCESS_READ|VEHICLE_PROP_ACCESS_WRITE
1314 * @zone_type VEHICLE_SEAT
1315 * @data_member boolean_value
1316 */
1317#define VEHICLE_PROPERTY_SEAT_BELT_BUCKLED (0x00000B82)
1318
1319/**
1320 * Seatbelt height position
1321 *
1322 * Adjusts the shoulder belt anchor point.
1323 * Max value indicates highest position
1324 * Min value indicates lowest position
1325 *
1326 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1327 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1328 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1329 * @zone_type VEHICLE_SEAT
1330 * @data_member int32_value
1331 */
1332#define VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_POS (0x00000B83)
1333
1334/**
1335 * Seatbelt height move
1336 *
1337 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1338 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1339 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1340 * @zone_type VEHICLE_SEAT
1341 * @data_member int32_value
1342 */
1343#define VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_MOVE (0x00000B84)
1344
1345/**
1346 * Seat fore/aft position
1347 *
1348 * Sets the seat position forward (closer to steering wheel) and backwards.
1349 * Max value indicates closest to wheel, min value indicates most rearward
1350 * position.
1351 *
1352 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1353 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1354 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1355 * @zone_type VEHICLE_SEAT
1356 * @data_member int32_value
1357 */
1358#define VEHICLE_PROPERTY_SEAT_FORE_AFT_POS (0x00000B85)
1359
1360/**
1361 * Seat fore/aft move
1362 *
1363 * Moves the seat position forward and aft.
1364 *
1365 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1366 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1367 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1368 * @zone_type VEHICLE_SEAT
1369 * @data_member int32_value
1370 */
1371#define VEHICLE_PROPERTY_SEAT_FORE_AFT_MOVE (0x00000B86)
1372
1373/**
1374 * Seat backrest angle 1 position
1375 *
1376 * Backrest angle 1 is the actuator closest to the bottom of the seat.
1377 * Max value indicates angling forward towards the steering wheel.
1378 * Min value indicates full recline.
1379 *
1380 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1381 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1382 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1383 * @zone_type VEHICLE_SEAT
1384 * @data_member int32_value
1385 */
1386#define VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_POS (0x00000B87)
1387
1388/**
1389 * Seat backrest angle 1 move
1390 *
1391 * Moves the backrest forward or recline.
1392 *
1393 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1394 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1395 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1396 * @zone_type VEHICLE_SEAT
1397 * @data_member int32_value
1398 */
1399#define VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_MOVE (0x00000B88)
1400
1401/**
1402 * Seat backrest angle 2 position
1403 *
1404 * Backrest angle 2 is the next actuator up from the bottom of the seat.
1405 * Max value indicates angling forward towards the steering wheel.
1406 * Min value indicates full recline.
1407 *
1408 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1409 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1410 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1411 * @zone_type VEHICLE_SEAT
1412 * @data_member int32_value
1413 */
1414#define VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_POS (0x00000B89)
1415
1416/**
1417 * Seat backrest angle 2 move
1418 *
1419 * Moves the backrest forward or recline.
1420 *
1421 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1422 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1423 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1424 * @zone_type VEHICLE_SEAT
1425 * @data_member int32_value
1426 */
1427#define VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_MOVE (0x00000B8A)
1428
1429/**
1430 * Seat height position
1431 *
1432 * Sets the seat height.
1433 * Max value indicates highest position.
1434 * Min value indicates lowest position.
1435 *
1436 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1437 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1438 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1439 * @zone_type VEHICLE_SEAT
1440 * @data_member int32_value
1441 */
1442#define VEHICLE_PROPERTY_SEAT_HEIGHT_POS (0x00000B8B)
1443
1444/**
1445 * Seat height move
1446 *
1447 * Moves the seat height.
1448 *
1449 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1450 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1451 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1452 * @zone_type VEHICLE_SEAT
1453 * @data_member int32_value
1454 */
1455#define VEHICLE_PROPERTY_SEAT_HEIGHT_MOVE (0x00000B8C)
1456
1457/**
1458 * Seat depth position
1459 *
1460 * Sets the seat depth, distance from back rest to front edge of seat.
1461 * Max value indicates longest depth position.
1462 * Min value indicates shortest position.
1463 *
1464 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1465 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1466 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1467 * @zone_type VEHICLE_SEAT
1468 * @data_member int32_value
1469 */
1470#define VEHICLE_PROPERTY_SEAT_DEPTH_POS (0x00000B8D)
1471
1472/**
1473 * Seat depth move
1474 *
1475 * Adjusts the seat depth.
1476 *
1477 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1478 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1479 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1480 * @zone_type VEHICLE_SEAT
1481 * @data_member int32_value
1482 */
1483#define VEHICLE_PROPERTY_SEAT_DEPTH_MOVE (0x00000B8E)
1484
1485/**
1486 * Seat tilt position
1487 *
1488 * Sets the seat tilt.
1489 * Max value indicates front edge of seat higher than back edge.
1490 * Min value indicates front edge of seat lower than back edge.
1491 *
1492 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1493 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1494 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1495 * @zone_type VEHICLE_SEAT
1496 * @data_member int32_value
1497 */
1498#define VEHICLE_PROPERTY_SEAT_TILT_POS (0x00000B8F)
1499
1500/**
1501 * Seat tilt move
1502 *
1503 * Tilts the seat.
1504 *
1505 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1506 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1507 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1508 * @zone_type VEHICLE_SEAT
1509 * @data_member int32_value
1510 */
1511#define VEHICLE_PROPERTY_SEAT_TILT_MOVE (0x00000B90)
1512
1513/**
1514 * Lumber fore/aft position
1515 *
1516 * Pushes the lumbar support forward and backwards
1517 * Max value indicates most forward position.
1518 * Min value indicates most rearward position.
1519 *
1520 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1521 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1522 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1523 * @zone_type VEHICLE_SEAT
1524 * @data_member int32_value
1525 */
1526#define VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_POS (0x00000B91)
1527
1528/**
1529 * Lumbar fore/aft move
1530 *
1531 * Adjusts the lumbar support.
1532 *
1533 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1534 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1535 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1536 * @zone_type VEHICLE_SEAT
1537 * @data_member int32_value
1538 */
1539#define VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_MOVE (0x00000B92)
1540
1541/**
1542 * Lumbar side support position
1543 *
1544 * Sets the amount of lateral lumbar support.
1545 * Max value indicates widest lumbar setting (i.e. least support)
1546 * Min value indicates thinnest lumbar setting.
1547 *
1548 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1549 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1550 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1551 * @zone_type VEHICLE_SEAT
1552 * @data_member int32_value
1553 */
1554#define VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_POS (0x00000B93)
1555
1556/**
1557 * Lumbar side support move
1558 *
1559 * Adjusts the amount of lateral lumbar support.
1560 *
1561 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1562 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1563 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1564 * @zone_type VEHICLE_SEAT
1565 * @data_member int32_value
1566 */
1567#define VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_MOVE (0x00000B94)
1568
1569/**
1570 * Headrest height position
1571 *
1572 * Sets the headrest height.
1573 * Max value indicates tallest setting.
1574 * Min value indicates shortest setting.
1575 *
1576 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1577 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1578 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1579 * @zone_type VEHICLE_SEAT
1580 * @data_member int32_value
1581 */
1582#define VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_POS (0x00000B95)
1583
1584/**
1585 * Headrest heigh move
1586 *
1587 * Moves the headrest up and down.
1588 *
1589 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1590 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1591 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1592 * @zone_type VEHICLE_SEAT
1593 * @data_member int32_value
1594 */
1595#define VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_MOVE (0x00000B96)
1596
1597/**
1598 * Headrest angle position
1599 *
1600 * Sets the angle of the headrest.
1601 * Max value indicates most upright angle.
1602 * Min value indicates shallowest headrest angle.
1603 *
1604 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1605 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1606 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1607 * @zone_type VEHICLE_SEAT
1608 * @data_member int32_value
1609 */
1610#define VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_POS (0x00000B97)
1611
1612/**
1613 * Headrest angle move
1614 *
1615 * Adjusts the angle of the headrest
1616 *
1617 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1618 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1619 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1620 * @zone_type VEHICLE_SEAT
1621 * @data_member int32_value
1622 */
1623#define VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_MOVE (0x00000B98)
1624
1625/**
1626 *
1627 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1628 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1629 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1630 * @zone_type VEHICLE_SEAT
1631 * @data_member int32_value
1632 */
1633#define VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_POS (0x00000B99)
1634
1635/**
1636 *
1637 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
1638 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1639 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1640 * @zone_type VEHICLE_SEAT
1641 * @data_member int32_value
1642 */
1643#define VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_MOVE (0x00000B9A)
1644
1645
1646// Windows
1647/**
1648 * Window Position
1649 *
1650 * Max = window up / closed
1651 * Min = window down / open
1652 *
1653 * @value_type VEHICE_VALUE_TYPE_ZONED_INT32
1654 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1655 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1656 * @data_member int32_value
1657 */
1658#define VEHICLE_PROPERTY_WINDOW_POS (0x00000BC0)
1659
1660/**
1661 * Window Move
1662 *
1663 * Max = window up / closed
1664 * Min = window down / open
1665 * Magnitude denotes relative speed. I.e. +2 is faster than +1 in raising the window.
1666 *
1667 * @value_type VEHICE_VALUE_TYPE_ZONED_INT32
1668 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1669 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1670 * @data_member int32_value
1671 */
1672#define VEHICLE_PROPERTY_WINDOW_MOVE (0x00000BC1)
1673
1674/**
1675 * Window Vent Position
1676 *
1677 * This feature is used to control the vent feature on a sunroof.
1678 *
1679 * Max = vent open
1680 * Min = vent closed
1681 *
1682 * @value_type VEHICE_VALUE_TYPE_ZONED_INT32
1683 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1684 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1685 * @data_member int32_value
1686 */
1687#define VEHICLE_PROPERTY_WINDOW_VENT_POS (0x00000BC2)
1688
1689/**
1690 * Window Vent Move
1691 *
1692 * This feature is used to control the vent feature on a sunroof.
1693 *
1694 * Max = vent open
1695 * Min = vent closed
1696 *
1697 * @value_type VEHICE_VALUE_TYPE_ZONED_INT32
1698 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1699 * @access VEHICLE_PROP_ACCESS_READ_WRITE|VEHICLE_PROP_ACCESS_WRITE
1700 * @data_member int32_value
1701 */
1702#define VEHICLE_PROPERTY_WINDOW_VENT_MOVE (0x00000BC3)
1703
1704/**
1705 * Window Lock
1706 *
1707 * True indicates windows are locked and can't be moved.
1708 *
1709 * @value_type VEHICE_VALUE_TYPE_BOOLEAN
1710 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1711 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1712 * @data_member boolean_value
1713 */
1714#define VEHICLE_PROPERTY_WINDOW_LOCK (0x00000BC4)
1715
1716
Steve Paikcc9e2922016-04-21 11:40:17 -07001717
Keun-young Parkfe599a82016-02-12 14:26:57 -08001718/**
Sanket Agarwalfb636682015-08-11 14:34:29 -07001719 * H/W specific, non-standard property can be added as necessary. Such property should use
1720 * property number in range of [VEHICLE_PROPERTY_CUSTOM_START, VEHICLE_PROPERTY_CUSTOM_END].
1721 * Definition of property in this range is completely up to each HAL implementation.
1722 * For such property, it is recommended to fill vehicle_prop_config.config_string with some
1723 * additional information to help debugging. For example, company XYZ's custom extension may
1724 * include config_string of "com.XYZ.some_further_details".
1725 * @range_start
1726 */
Steve Paikcc9e2922016-04-21 11:40:17 -07001727#define VEHICLE_PROPERTY_CUSTOM_START (0x70000000)
Sanket Agarwalfb636682015-08-11 14:34:29 -07001728/** @range_end */
Steve Paikcc9e2922016-04-21 11:40:17 -07001729#define VEHICLE_PROPERTY_CUSTOM_END (0x73ffffff)
Sanket Agarwalfb636682015-08-11 14:34:29 -07001730
1731/**
1732 * Property range allocated for system's internal usage like testing. HAL should never declare
1733 * property in this range.
1734 * @range_start
1735 */
Steve Paikcc9e2922016-04-21 11:40:17 -07001736#define VEHICLE_PROPERTY_INTERNAL_START (0x74000000)
Sanket Agarwalfb636682015-08-11 14:34:29 -07001737/**
1738 * @range_end
1739 */
Steve Paikcc9e2922016-04-21 11:40:17 -07001740#define VEHICLE_PROPERTY_INTERNAL_END (0x74ffffff)
Sanket Agarwalfb636682015-08-11 14:34:29 -07001741
1742/**
1743 * Value types for various properties.
1744 */
1745enum vehicle_value_type {
1746 VEHICLE_VALUE_TYPE_SHOUD_NOT_USE = 0x00, // value_type should never set to 0.
1747 VEHICLE_VALUE_TYPE_STRING = 0x01,
1748 VEHICLE_VALUE_TYPE_BYTES = 0x02,
1749 VEHICLE_VALUE_TYPE_BOOLEAN = 0x03,
Keun-young Park73d7f222016-01-14 11:02:38 -08001750 VEHICLE_VALUE_TYPE_ZONED_BOOLEAN = 0x04,
1751 VEHICLE_VALUE_TYPE_INT64 = 0x05,
Sanket Agarwalfb636682015-08-11 14:34:29 -07001752 VEHICLE_VALUE_TYPE_FLOAT = 0x10,
1753 VEHICLE_VALUE_TYPE_FLOAT_VEC2 = 0x11,
1754 VEHICLE_VALUE_TYPE_FLOAT_VEC3 = 0x12,
1755 VEHICLE_VALUE_TYPE_FLOAT_VEC4 = 0x13,
1756 VEHICLE_VALUE_TYPE_INT32 = 0x20,
1757 VEHICLE_VALUE_TYPE_INT32_VEC2 = 0x21,
1758 VEHICLE_VALUE_TYPE_INT32_VEC3 = 0x22,
1759 VEHICLE_VALUE_TYPE_INT32_VEC4 = 0x23,
Keun-young Park73d7f222016-01-14 11:02:38 -08001760 VEHICLE_VALUE_TYPE_ZONED_FLOAT = 0x30,
1761 VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2 = 0x31,
1762 VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3 = 0x32,
Keun-young Parkab68e372016-03-10 16:28:42 -08001763 VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC4 = 0x33,
Keun-young Park73d7f222016-01-14 11:02:38 -08001764 VEHICLE_VALUE_TYPE_ZONED_INT32 = 0x40,
1765 VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2 = 0x41,
1766 VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3 = 0x42,
Keun-young Parkab68e372016-03-10 16:28:42 -08001767 VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4 = 0x43,
Sanket Agarwalfb636682015-08-11 14:34:29 -07001768};
1769
1770/**
1771 * Units used for int or float type with no attached enum types.
1772 */
1773enum vehicle_unit_type {
1774 VEHICLE_UNIT_TYPE_SHOULD_NOT_USE = 0x00000000,
1775 // speed related items
1776 VEHICLE_UNIT_TYPE_METER_PER_SEC = 0x00000001,
1777 VEHICLE_UNIT_TYPE_RPM = 0x00000002,
1778 VEHICLE_UNIT_TYPE_HZ = 0x00000003,
1779 // kind of ratio
1780 VEHICLE_UNIT_TYPE_PERCENTILE = 0x00000010,
1781 // length
1782 VEHICLE_UNIT_TYPE_MILLIMETER = 0x00000020,
1783 VEHICLE_UNIT_TYPE_METER = 0x00000021,
1784 VEHICLE_UNIT_TYPE_KILOMETER = 0x00000023,
1785 // temperature
1786 VEHICLE_UNIT_TYPE_CELCIUS = 0x00000030,
1787 // volume
1788 VEHICLE_UNIT_TYPE_MILLILITER = 0x00000040,
1789 // time
1790 VEHICLE_UNIT_TYPE_NANO_SECS = 0x00000050,
Steve Paikd432fc02016-05-11 16:25:33 -07001791 VEHICLE_UNIT_TYPE_SECS = 0x00000053,
Sanket Agarwalfb636682015-08-11 14:34:29 -07001792 VEHICLE_UNIT_TYPE_YEAR = 0x00000059,
1793};
1794
1795/**
Sanket Agarwalfb636682015-08-11 14:34:29 -07001796 * This describes how value of property can change.
1797 */
1798enum vehicle_prop_change_mode {
1799 /**
1800 * Property of this type will *never* change. This property will not support subscription, but
1801 * will support get
1802 */
1803 VEHICLE_PROP_CHANGE_MODE_STATIC = 0x00,
1804 /**
Keun-young Parkda3cb912016-05-12 11:21:04 -07001805 * Property of this type will be reported when there is a change.
1806 * get call should return the current value.
1807 * Set operation for this property is assumed to be asynchronous. When the property is read
1808 * (=get) after set, it may still return old value until underlying H/W backing this property
1809 * has actually changed the state. Once state is changed, the property will dispatch changed
1810 * value as event.
Sanket Agarwalfb636682015-08-11 14:34:29 -07001811 */
1812 VEHICLE_PROP_CHANGE_MODE_ON_CHANGE = 0x01,
1813 /**
1814 * Property of this type change continuously and requires fixed rate of sampling to retrieve
1815 * the data.
1816 */
1817 VEHICLE_PROP_CHANGE_MODE_CONTINUOUS = 0x02,
Steve Paikd432fc02016-05-11 16:25:33 -07001818 /**
1819 * Property of this type may be polled to get the current value.
1820 */
1821 VEHICLE_PROP_CHANGE_MODE_POLL = 0x03,
Keun-young Parkda3cb912016-05-12 11:21:04 -07001822 /**
1823 * This is for property where change event should be sent only when the value is
1824 * set from external component. Normal value change will not trigger event.
1825 * For example, clock property can send change event only when it is set, outside android,
1826 * for case like user setting time or time getting update. There is no need to send it
1827 * per every value change.
1828 */
1829 VEHICLE_PROP_CHANGE_MODE_ON_SET = 0x04,
Sanket Agarwalfb636682015-08-11 14:34:29 -07001830};
1831
1832/**
1833 * Property config defines the capabilities of it. User of the API
1834 * should first get the property config to understand the output from get()
1835 * commands and also to ensure that set() or events commands are in sync with
1836 * the expected output.
1837 */
1838enum vehicle_prop_access {
1839 VEHICLE_PROP_ACCESS_READ = 0x01,
1840 VEHICLE_PROP_ACCESS_WRITE = 0x02,
1841 VEHICLE_PROP_ACCESS_READ_WRITE = 0x03
1842};
1843
1844/**
1845 * These permissions define how the OEMs want to distribute their information and security they
1846 * want to apply. On top of these restrictions, android will have additional
1847 * 'app-level' permissions that the apps will need to ask the user before the apps have the
1848 * information.
1849 * This information should be kept in vehicle_prop_config.permission_model.
1850 */
1851enum vehicle_permission_model {
1852 /**
1853 * No special restriction, but each property can still require specific android app-level
1854 * permission.
1855 */
1856 VEHICLE_PERMISSION_NO_RESTRICTION = 0,
1857 /** Signature only. Only APKs signed with OEM keys are allowed. */
1858 VEHICLE_PERMISSION_OEM_ONLY = 0x1,
1859 /** System only. APKs built-in to system can access the property. */
1860 VEHICLE_PERMISSION_SYSTEM_APP_ONLY = 0x2,
1861 /** Equivalent to “system|signature” */
1862 VEHICLE_PERMISSION_OEM_OR_SYSTEM_APP = 0x3
1863};
1864
Keun-young Park418c7e82016-04-06 10:44:20 -07001865
1866/**
1867 * Special values for INT32/FLOAT (including ZONED types)
1868 * These values represent special state, which is outside MIN/MAX range but can happen.
1869 * For example, HVAC temperature may use out of range min / max to represent that
1870 * it is working in full power although target temperature has separate min / max.
1871 * OUT_OF_RANGE_OFF can represent a state where the property is powered off.
1872 * Usually such property will have separate property to control power.
1873 */
1874
1875#define VEHICLE_INT_OUT_OF_RANGE_MAX (INT32_MAX)
1876#define VEHICLE_INT_OUT_OF_RANGE_MIN (INT32_MIN)
1877#define VEHICLE_INT_OUT_OF_RANGE_OFF (INT32_MIN + 1)
1878
1879#define VEHICLE_FLOAT_OUT_OF_RANGE_MAX (INFINITY)
1880#define VEHICLE_FLOAT_OUT_OF_RANGE_MIN (-INFINITY)
Keun-young Parkf1ccec12016-04-22 13:19:53 -07001881#define VEHICLE_FLOAT_OUT_OF_RANGE_OFF (NAN)
Keun-young Park418c7e82016-04-06 10:44:20 -07001882
Sanket Agarwalfb636682015-08-11 14:34:29 -07001883/**
1884 * Car states.
1885 *
1886 * The driving states determine what features of the UI will be accessible.
1887 */
1888enum vehicle_driving_status {
1889 VEHICLE_DRIVING_STATUS_UNRESTRICTED = 0x00,
1890 VEHICLE_DRIVING_STATUS_NO_VIDEO = 0x01,
1891 VEHICLE_DRIVING_STATUS_NO_KEYBOARD_INPUT = 0x02,
1892 VEHICLE_DRIVING_STATUS_NO_VOICE_INPUT = 0x04,
1893 VEHICLE_DRIVING_STATUS_NO_CONFIG = 0x08,
1894 VEHICLE_DRIVING_STATUS_LIMIT_MESSAGE_LEN = 0x10
1895};
1896
1897/**
1898 * Various gears which can be selected by user and chosen in system.
1899 */
1900enum vehicle_gear {
1901 // Gear selections present in both automatic and manual cars.
1902 VEHICLE_GEAR_NEUTRAL = 0x0001,
1903 VEHICLE_GEAR_REVERSE = 0x0002,
1904
1905 // Gear selections (mostly) present only in automatic cars.
Keun-young Park77761e22016-03-08 15:02:44 -08001906 VEHICLE_GEAR_PARK = 0x0004,
Sanket Agarwalfb636682015-08-11 14:34:29 -07001907 VEHICLE_GEAR_DRIVE = 0x0008,
Keun-young Park77761e22016-03-08 15:02:44 -08001908 VEHICLE_GEAR_LOW = 0x0010,
Sanket Agarwalfb636682015-08-11 14:34:29 -07001909
1910 // Other possible gear selections (maybe present in manual or automatic
1911 // cars).
1912 VEHICLE_GEAR_1 = 0x0010,
1913 VEHICLE_GEAR_2 = 0x0020,
1914 VEHICLE_GEAR_3 = 0x0040,
1915 VEHICLE_GEAR_4 = 0x0080,
1916 VEHICLE_GEAR_5 = 0x0100,
1917 VEHICLE_GEAR_6 = 0x0200,
1918 VEHICLE_GEAR_7 = 0x0400,
1919 VEHICLE_GEAR_8 = 0x0800,
1920 VEHICLE_GEAR_9 = 0x1000
1921};
1922
1923
1924/**
1925 * Various zones in the car.
1926 *
1927 * Zones are used for Air Conditioning purposes and divide the car into physical
1928 * area zones.
1929 */
1930enum vehicle_zone {
1931 VEHICLE_ZONE_ROW_1_LEFT = 0x00000001,
1932 VEHICLE_ZONE_ROW_1_CENTER = 0x00000002,
1933 VEHICLE_ZONE_ROW_1_RIGHT = 0x00000004,
1934 VEHICLE_ZONE_ROW_1_ALL = 0x00000008,
1935 VEHICLE_ZONE_ROW_2_LEFT = 0x00000010,
1936 VEHICLE_ZONE_ROW_2_CENTER = 0x00000020,
1937 VEHICLE_ZONE_ROW_2_RIGHT = 0x00000040,
1938 VEHICLE_ZONE_ROW_2_ALL = 0x00000080,
1939 VEHICLE_ZONE_ROW_3_LEFT = 0x00000100,
1940 VEHICLE_ZONE_ROW_3_CENTER = 0x00000200,
1941 VEHICLE_ZONE_ROW_3_RIGHT = 0x00000400,
1942 VEHICLE_ZONE_ROW_3_ALL = 0x00000800,
1943 VEHICLE_ZONE_ROW_4_LEFT = 0x00001000,
1944 VEHICLE_ZONE_ROW_4_CENTER = 0x00002000,
1945 VEHICLE_ZONE_ROW_4_RIGHT = 0x00004000,
1946 VEHICLE_ZONE_ROW_4_ALL = 0x00008000,
1947 VEHICLE_ZONE_ALL = 0x80000000,
1948};
1949
1950/**
1951 * Various Seats in the car.
1952 */
1953enum vehicle_seat {
Keun-young Parka384f832016-02-11 16:50:42 -08001954 VEHICLE_SEAT_DRIVER_LHD = 0x0001,
1955 VEHICLE_SEAT_DRIVER_RHD = 0x0002,
1956 VEHICLE_SEAT_ROW_1_PASSENGER_LEFT = 0x0010,
1957 VEHICLE_SEAT_ROW_1_PASSENGER_CENTER = 0x0020,
1958 VEHICLE_SEAT_ROW_1_PASSENGER_RIGHT = 0x0040,
1959 VEHICLE_SEAT_ROW_2_PASSENGER_LEFT = 0x0100,
1960 VEHICLE_SEAT_ROW_2_PASSENGER_CENTER = 0x0200,
1961 VEHICLE_SEAT_ROW_2_PASSENGER_RIGHT = 0x0400,
1962 VEHICLE_SEAT_ROW_3_PASSENGER_LEFT = 0x1000,
1963 VEHICLE_SEAT_ROW_3_PASSENGER_CENTER = 0x2000,
1964 VEHICLE_SEAT_ROW_3_PASSENGER_RIGHT = 0x4000
Sanket Agarwalfb636682015-08-11 14:34:29 -07001965};
1966
1967/**
1968 * Various windshields/windows in the car.
1969 */
1970enum vehicle_window {
1971 VEHICLE_WINDOW_FRONT_WINDSHIELD = 0x0001,
1972 VEHICLE_WINDOW_REAR_WINDSHIELD = 0x0002,
1973 VEHICLE_WINDOW_ROOF_TOP = 0x0004,
1974 VEHICLE_WINDOW_ROW_1_LEFT = 0x0010,
1975 VEHICLE_WINDOW_ROW_1_RIGHT = 0x0020,
1976 VEHICLE_WINDOW_ROW_2_LEFT = 0x0100,
1977 VEHICLE_WINDOW_ROW_2_RIGHT = 0x0200,
1978 VEHICLE_WINDOW_ROW_3_LEFT = 0x1000,
1979 VEHICLE_WINDOW_ROW_3_RIGHT = 0x2000,
1980};
1981
Keun-young Parkcb354502016-02-08 18:15:55 -08001982enum vehicle_door {
1983 VEHICLE_DOOR_ROW_1_LEFT = 0x00000001,
1984 VEHICLE_DOOR_ROW_1_RIGHT = 0x00000004,
1985 VEHICLE_DOOR_ROW_2_LEFT = 0x00000010,
1986 VEHICLE_DOOR_ROW_2_RIGHT = 0x00000040,
1987 VEHICLE_DOOR_ROW_3_LEFT = 0x00000100,
1988 VEHICLE_DOOR_ROW_3_RIGHT = 0x00000400,
1989 VEHICLE_DOOR_HOOD = 0x10000000,
1990 VEHICLE_DOOR_REAR = 0x20000000,
1991};
1992
1993enum vehicle_mirror {
1994 VEHICLE_MIRROR_DRIVER_LEFT = 0x00000001,
1995 VEHICLE_MIRROR_DRIVER_RIGHT = 0x00000002,
1996 VEHICLE_MIRROR_DRIVER_CENTER = 0x00000004,
1997};
Sanket Agarwalfb636682015-08-11 14:34:29 -07001998enum vehicle_turn_signal {
1999 VEHICLE_SIGNAL_NONE = 0x00,
2000 VEHICLE_SIGNAL_RIGHT = 0x01,
2001 VEHICLE_SIGNAL_LEFT = 0x02,
2002 VEHICLE_SIGNAL_EMERGENCY = 0x04
2003};
2004
2005/*
2006 * Boolean type.
2007 */
2008enum vehicle_boolean {
2009 VEHICLE_FALSE = 0x00,
2010 VEHICLE_TRUE = 0x01
2011};
2012
2013typedef int32_t vehicle_boolean_t;
2014
2015/**
2016 * Vehicle string.
2017 *
2018 * Defines a UTF8 encoded sequence of bytes that should be used for string
2019 * representation throughout.
2020 */
2021typedef struct vehicle_str {
2022 uint8_t* data;
2023 int32_t len;
2024} vehicle_str_t;
2025
2026/**
2027 * Vehicle byte array.
2028 * This is for passing generic raw data.
2029 */
2030typedef vehicle_str_t vehicle_bytes_t;
2031
Sanket Agarwalfb636682015-08-11 14:34:29 -07002032typedef struct vehicle_prop_config {
2033 int32_t prop;
2034
2035 /**
2036 * Defines if the property is read or write. Value should be one of
2037 * enum vehicle_prop_access.
2038 */
2039 int32_t access;
2040
2041 /**
2042 * Defines if the property is continuous or on-change. Value should be one
2043 * of enum vehicle_prop_change_mode.
2044 */
2045 int32_t change_mode;
2046
2047 /**
2048 * Type of data used for this property. This type is fixed per each property.
2049 * Check vehicle_value_type for allowed value.
2050 */
2051 int32_t value_type;
2052
2053 /**
2054 * Define necessary permission model to access the data.
2055 */
2056 int32_t permission_model;
Keun-young Parkab68e372016-03-10 16:28:42 -08002057
Sanket Agarwalfb636682015-08-11 14:34:29 -07002058 /**
2059 * Some of the properties may have associated zones (such as hvac), in these
2060 * cases the config should contain an ORed value for the associated zone.
2061 */
2062 union {
2063 /**
Sanket Agarwalfb636682015-08-11 14:34:29 -07002064 * The value is derived by ORing one or more of enum vehicle_zone members.
2065 */
2066 int32_t vehicle_zone_flags;
2067 /** The value is derived by ORing one or more of enum vehicle_seat members. */
2068 int32_t vehicle_seat_flags;
2069 /** The value is derived by ORing one or more of enum vehicle_window members. */
2070 int32_t vehicle_window_flags;
Keun-young Parkab68e372016-03-10 16:28:42 -08002071 };
Sanket Agarwalfb636682015-08-11 14:34:29 -07002072
Keun-young Parkab68e372016-03-10 16:28:42 -08002073 /**
2074 * Property specific configuration information. Usage of this will be defined per each property.
2075 */
2076 union {
2077 /**
2078 * For generic configuration information
2079 */
2080 int32_t config_flags;
Sanket Agarwalfb636682015-08-11 14:34:29 -07002081 /** The number of presets that are stored by the radio module. Pass 0 if
2082 * there are no presets available. The range of presets is defined to be
2083 * from 1 (see VEHICLE_RADIO_PRESET_MIN_VALUE) to vehicle_radio_num_presets.
2084 */
2085 int32_t vehicle_radio_num_presets;
Keun-young Parkbf877a72015-12-21 14:16:05 -08002086 int32_t config_array[4];
Sanket Agarwalfb636682015-08-11 14:34:29 -07002087 };
2088
2089 /**
2090 * Some properties may require additional information passed over this string. Most properties
2091 * do not need to set this and in that case, config_string.data should be NULL and
2092 * config_string.len should be 0.
2093 */
2094 vehicle_str_t config_string;
2095
2096 /**
2097 * Specify minimum allowed value for the property. This is necessary for property which does
2098 * not have specified enum.
2099 */
2100 union {
2101 float float_min_value;
2102 int32_t int32_min_value;
2103 int64_t int64_min_value;
2104 };
2105
2106 /**
2107 * Specify maximum allowed value for the property. This is necessary for property which does
2108 * not have specified enum.
2109 */
2110 union {
2111 float float_max_value;
2112 int32_t int32_max_value;
2113 int64_t int64_max_value;
2114 };
2115
2116 /**
Keun-young Parkfe599a82016-02-12 14:26:57 -08002117 * Array of min values for zoned properties. Zoned property can specify min / max value in two
2118 * different ways:
2119 * 1. All zones having the same min / max value: *_min/max_value should be set and this
2120 * array should be set to NULL.
2121 * 2. All zones having separate min / max value: *_min/max_values array should be populated
2122 * and its length should be the same as number of active zones specified by *_zone_flags.
Keun-young Parkab68e372016-03-10 16:28:42 -08002123 *
2124 * Should be NULL if each zone does not have separate max values.
Keun-young Parkfe599a82016-02-12 14:26:57 -08002125 */
2126 union {
2127 float* float_min_values;
2128 int32_t* int32_min_values;
2129 int64_t* int64_min_values;
2130 };
2131
2132 /**
2133 * Array of max values for zoned properties. See above for its usage.
Keun-young Parkab68e372016-03-10 16:28:42 -08002134 * Should be NULL if each zone does not have separate max values.
2135 * If not NULL, length of array should match that of min_values.
Keun-young Parkfe599a82016-02-12 14:26:57 -08002136 */
2137 union {
2138 float* float_max_values;
2139 int32_t* int32_max_values;
2140 int64_t* int64_max_values;
2141 };
2142
2143 /**
Sanket Agarwalfb636682015-08-11 14:34:29 -07002144 * Min sample rate in Hz. Should be 0 for sensor type of VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
2145 */
2146 float min_sample_rate;
2147 /**
2148 * Max sample rate in Hz. Should be 0 for sensor type of VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
2149 */
2150 float max_sample_rate;
2151 /**
2152 * Place holder for putting HAL implementation specific data. Usage is wholly up to HAL
2153 * implementation.
2154 */
2155 void* hal_data;
2156} vehicle_prop_config_t;
2157
2158/**
2159 * HVAC property fields.
2160 *
2161 * Defines various HVAC properties which are packed into vehicle_hvac_t (see
2162 * below). We define these properties outside in global scope so that HAL
2163 * implementation and HAL users (JNI) can typecast vehicle_hvac correctly.
2164 */
Sanket Agarwalfb636682015-08-11 14:34:29 -07002165typedef struct vehicle_hvac {
2166 /**
2167 * Define one structure for each possible HVAC property.
2168 * NOTES:
Keun-young Parkab68e372016-03-10 16:28:42 -08002169 * a) Fan speed is a number from (0 - 6) where 6 is the highest speed. (TODO define enum)
2170 * b) Temperature is a floating point Celcius scale.
2171 * c) Direction is defined in enum vehicle_fan_direction.
Sanket Agarwalfb636682015-08-11 14:34:29 -07002172 *
2173 * The HAL should create #entries number of vehicle_hvac_properties and
2174 * assign it to "properties" variable below.
2175 */
2176 union {
Keun-young Parkab68e372016-03-10 16:28:42 -08002177 int32_t fan_speed;
2178 int32_t fan_direction;
2179 vehicle_boolean_t ac_on;
2180 vehicle_boolean_t max_ac_on;
2181 vehicle_boolean_t max_defrost_on;
2182 vehicle_boolean_t recirc_on;
2183 vehicle_boolean_t dual_on;
Steve Paik670e7ab2016-04-29 16:32:02 -07002184 vehicle_boolean_t auto_on;
Keun-young Park418c7e82016-04-06 10:44:20 -07002185 vehicle_boolean_t power_on;
Sanket Agarwalfb636682015-08-11 14:34:29 -07002186
Keun-young Parkab68e372016-03-10 16:28:42 -08002187 float temperature_current;
2188 float temperature_set;
Sanket Agarwalfb636682015-08-11 14:34:29 -07002189
Keun-young Parkab68e372016-03-10 16:28:42 -08002190 vehicle_boolean_t defrost_on;
Sanket Agarwalfb636682015-08-11 14:34:29 -07002191 };
2192} vehicle_hvac_t;
2193
2194/*
2195 * Defines how the values for various properties are represented.
2196 *
2197 * There are two ways to populate and access the fields:
2198 * a) Using the individual fields. Use this mechanism (see
2199 * info_manufacture_date, fuel_capacity fields etc).
2200 * b) Using the union accessors (see uint32_value, float_value etc).
2201 *
2202 * To add a new field make sure that it does not exceed the total union size
2203 * (defined in int_array) and it is one of the vehicle_value_type. Then add the
2204 * field name with its unit to union. If the field type is not yet defined (as
2205 * of this draft, we don't use int64_t) then add that type to vehicle_value_type
2206 * and have an accessor (so for int64_t it will be int64_t int64_value).
2207 */
2208typedef union vehicle_value {
2209 /** Define the max size of this structure. */
2210 int32_t int32_array[4];
2211 float float_array[4];
2212
2213 // Easy accessors for union members (HAL implementation SHOULD NOT USE these
2214 // fields while populating, use the property specific fields below instead).
2215 int32_t int32_value;
2216 int64_t int64_value;
2217 float float_value;
2218 vehicle_str_t str_value;
2219 vehicle_bytes_t bytes_value;
2220 vehicle_boolean_t boolean_value;
Sanket Agarwalfb636682015-08-11 14:34:29 -07002221
2222 // Vehicle Information.
2223 vehicle_str_t info_vin;
2224 vehicle_str_t info_make;
2225 vehicle_str_t info_model;
2226 int32_t info_model_year;
2227
2228 // Represented in milliliters.
2229 float info_fuel_capacity;
2230
2231 float vehicle_speed;
2232 float odometer;
2233
2234 // Engine sensors.
2235
2236 // Represented in milliliters.
2237 //float engine_coolant_level;
2238 // Represented in celcius.
2239 float engine_coolant_temperature;
2240 // Represented in a percentage value.
2241 //float engine_oil_level;
2242 // Represented in celcius.
2243 float engine_oil_temperature;
2244 float engine_rpm;
2245
2246 // Event sensors.
2247 // Value should be one of enum vehicle_gear_selection.
2248 int32_t gear_selection;
2249 // Value should be one of enum vehicle_gear.
2250 int32_t gear_current_gear;
2251 // Value should be one of enum vehicle_boolean.
2252 int32_t parking_brake;
2253 // If cruise_set_speed > 0 then cruise is ON otherwise cruise is OFF.
2254 // Unit: meters / second (m/s).
2255 //int32_t cruise_set_speed;
2256 // Value should be one of enum vehicle_boolean.
2257 int32_t is_fuel_level_low;
2258 // Value should be one of enum vehicle_driving_status.
2259 int32_t driving_status;
2260 int32_t night_mode;
2261 // Value should be one of emum vehicle_turn_signal.
2262 int32_t turn_signals;
2263 // Value should be one of enum vehicle_boolean.
2264 //int32_t engine_on;
2265
2266 // HVAC properties.
2267 vehicle_hvac_t hvac;
2268
2269 float outside_temperature;
Keun-young Parkcb354502016-02-08 18:15:55 -08002270 float cabin_temperature;
2271
Sanket Agarwalfb636682015-08-11 14:34:29 -07002272} vehicle_value_t;
2273
2274/*
2275 * Encapsulates the property name and the associated value. It
2276 * is used across various API calls to set values, get values or to register for
2277 * events.
2278 */
2279typedef struct vehicle_prop_value {
2280 /* property identifier */
2281 int32_t prop;
2282
2283 /* value type of property for quick conversion from union to appropriate
2284 * value. The value must be one of enum vehicle_value_type.
2285 */
2286 int32_t value_type;
2287
2288 /** time is elapsed nanoseconds since boot */
2289 int64_t timestamp;
2290
Keun-young Parkab68e372016-03-10 16:28:42 -08002291 /**
2292 * Zone information for zoned property. For non-zoned property, this should be ignored.
2293 */
2294 union {
2295 int32_t zone;
2296 int32_t seat;
2297 int32_t window;
2298 };
2299
Sanket Agarwalfb636682015-08-11 14:34:29 -07002300 vehicle_value_t value;
2301} vehicle_prop_value_t;
2302
2303/*
2304 * Event callback happens whenever a variable that the API user has subscribed
2305 * to needs to be reported. This may be based purely on threshold and frequency
2306 * (a regular subscription, see subscribe call's arguments) or when the set()
2307 * command is executed and the actual change needs to be reported.
2308 *
2309 * event_data is OWNED by the HAL and should be copied before the callback
2310 * finishes.
2311 */
2312typedef int (*vehicle_event_callback_fn)(const vehicle_prop_value_t *event_data);
2313
2314
2315/**
2316 * Represent the operation where the current error has happened.
2317 */
2318enum vehicle_property_operation {
2319 /** Generic error to this property which is not tied to any operation. */
2320 VEHICLE_OPERATION_GENERIC = 0,
2321 /** Error happened while handling property set. */
2322 VEHICLE_OPERATION_SET = 1,
2323 /** Error happened while handling property get. */
2324 VEHICLE_OPERATION_GET = 2,
2325 /** Error happened while handling property subscription. */
2326 VEHICLE_OPERATION_SUBSCRIBE = 3,
2327};
2328
2329/*
Keun-young Parkab68e372016-03-10 16:28:42 -08002330 * Suggests that an error condition has occurred.
Sanket Agarwalfb636682015-08-11 14:34:29 -07002331 *
Keun-young Parkab68e372016-03-10 16:28:42 -08002332 * @param error_code Error code. error_code should be standard error code with
2333 * negative value like -EINVAL.
Sanket Agarwalfb636682015-08-11 14:34:29 -07002334 * @parm property Note a property where error has happened. If this is generic error, property
2335 * should be VEHICLE_PROPERTY_INVALID.
2336 * @param operation Represent the operation where the error has happened. Should be one of
2337 * vehicle_property_operation.
2338 */
2339typedef int (*vehicle_error_callback_fn)(int32_t error_code, int32_t property, int32_t operation);
2340
2341/************************************************************************************/
2342
2343/*
2344 * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM
2345 * and the fields of this data structure must begin with hw_module_t
2346 * followed by module specific information.
2347 */
2348typedef struct vehicle_module {
2349 struct hw_module_t common;
2350} vehicle_module_t;
2351
2352
2353typedef struct vehicle_hw_device {
2354 struct hw_device_t common;
2355
2356 /**
2357 * After calling open on device the user should register callbacks for event and error
2358 * functions.
2359 */
2360 int (*init)(struct vehicle_hw_device* device,
2361 vehicle_event_callback_fn event_fn, vehicle_error_callback_fn err_fn);
2362 /**
2363 * Before calling close the user should destroy the registered callback
2364 * functions.
2365 * In case the unsubscribe() call is not called on all properties before
2366 * release() then release() will unsubscribe the properties itself.
2367 */
2368 int (*release)(struct vehicle_hw_device* device);
2369
2370 /**
2371 * Enumerate all available properties. The list is returned in "list".
2372 * @param num_properties number of properties contained in the retuned array.
2373 * @return array of property configs supported by this car. Note that returned data is const
2374 * and caller cannot modify it. HAL implementation should keep this memory until HAL
2375 * is released to avoid copying this again.
2376 */
2377 vehicle_prop_config_t const *(*list_properties)(struct vehicle_hw_device* device,
2378 int* num_properties);
2379
2380 /**
2381 * Get a vehicle property value immediately. data should be allocated
2382 * properly.
2383 * The caller of the API OWNS the data field.
Keun-young Park08c255e2015-12-09 13:47:30 -08002384 * Caller will set data->prop, data->value_type, and optionally zone value for zoned property.
2385 * But HAL implementation needs to fill all entries properly when returning.
Sanket Agarwalfb636682015-08-11 14:34:29 -07002386 * For pointer type, HAL implementation should allocate necessary memory and caller is
Keun-young Parkab68e372016-03-10 16:28:42 -08002387 * responsible for calling release_memory_from_get, which allows HAL to release allocated
2388 * memory.
Sanket Agarwalfb636682015-08-11 14:34:29 -07002389 * For VEHICLE_PROP_CHANGE_MODE_STATIC type of property, get should return the same value
2390 * always.
2391 * For VEHICLE_PROP_CHANGE_MODE_ON_CHANGE type of property, it should return the latest value.
Keun-young Parkab68e372016-03-10 16:28:42 -08002392 * If there is no data available yet, which can happen during initial stage, this call should
2393 * return immediately with error code of -EAGAIN.
Sanket Agarwalfb636682015-08-11 14:34:29 -07002394 */
2395 int (*get)(struct vehicle_hw_device* device, vehicle_prop_value_t *data);
2396
2397 /**
Keun-young Parkab68e372016-03-10 16:28:42 -08002398 * Release memory allocated to data in previous get call. get call for byte or string involves
2399 * allocating necessary memory from vehicle hal.
2400 * To be safe, memory allocated by vehicle hal should be released by vehicle hal and vehicle
2401 * network service will call this when data from vehicle hal is no longer necessary.
2402 * vehicle hal implementation should only release member of vehicle_prop_value_t like
2403 * data->str_value.data or data->bytes_value.data but not data itself as data itself is
2404 * allocated from vehicle network service. Once memory is freed, corresponding pointer should
2405 * be set to NULL bu vehicle hal.
2406 */
2407 void (*release_memory_from_get)(struct vehicle_hw_device* device, vehicle_prop_value_t *data);
2408
2409 /**
Sanket Agarwalfb636682015-08-11 14:34:29 -07002410 * Set a vehicle property value. data should be allocated properly and not
2411 * NULL.
2412 * The caller of the API OWNS the data field.
2413 * timestamp of data will be ignored for set operation.
Keun-young Park418c7e82016-04-06 10:44:20 -07002414 * Setting some properties require having initial state available. Depending on the vehicle hal,
2415 * such initial data may not be available for short time after init. In such case, set call
2416 * can return -EAGAIN like get call.
Keun-young Parkf7097582016-04-25 18:10:45 -07002417 * For a property with separate power control, set can fail if the property is not powered on.
2418 * In such case, hal should return -ESHUTDOWN error.
Sanket Agarwalfb636682015-08-11 14:34:29 -07002419 */
2420 int (*set)(struct vehicle_hw_device* device, const vehicle_prop_value_t *data);
2421
2422 /**
2423 * Subscribe to events.
2424 * Depending on output of list_properties if the property is:
2425 * a) on-change: sample_rate should be set to 0.
2426 * b) supports frequency: sample_rate should be set from min_sample_rate to
2427 * max_sample_rate.
Keun-young Park418c7e82016-04-06 10:44:20 -07002428 * For on-change type of properties, vehicle network service will make another get call to check
2429 * the initial state. Due to this, vehicle hal implementation does not need to send initial
2430 * state for on-change type of properties.
Sanket Agarwalfb636682015-08-11 14:34:29 -07002431 * @param device
2432 * @param prop
2433 * @param sample_rate
Keun-young Parkbf877a72015-12-21 14:16:05 -08002434 * @param zones All subscribed zones for zoned property. can be ignored for non-zoned property.
2435 * 0 means all zones supported instead of no zone.
Sanket Agarwalfb636682015-08-11 14:34:29 -07002436 */
Keun-young Parkbf877a72015-12-21 14:16:05 -08002437 int (*subscribe)(struct vehicle_hw_device* device, int32_t prop, float sample_rate,
2438 int32_t zones);
Sanket Agarwalfb636682015-08-11 14:34:29 -07002439
2440 /** Cancel subscription on a property. */
2441 int (*unsubscribe)(struct vehicle_hw_device* device, int32_t prop);
Keun-young Park418c7e82016-04-06 10:44:20 -07002442
2443 /**
2444 * Print out debugging state for the vehicle hal. This will be called by
2445 * the vehicle network service and will be included into the service' dump.
2446 *
2447 * The passed-in file descriptor can be used to write debugging text using
2448 * dprintf() or write(). The text should be in ASCII encoding only.
2449 *
2450 * Performance requirements:
2451 *
2452 * This must be a non-blocking call. The HAL should return from this call
2453 * in 1ms, must return from this call in 10ms. This call must avoid
2454 * deadlocks, as it may be called at any point of operation.
2455 * Any synchronization primitives used (such as mutex locks or semaphores)
2456 * should be acquired with a timeout.
2457 */
2458 int (*dump)(struct vehicle_hw_device* device, int fd);
2459
Sanket Agarwalfb636682015-08-11 14:34:29 -07002460} vehicle_hw_device_t;
2461
2462__END_DECLS
2463
2464#endif // ANDROID_VEHICLE_INTERFACE_H