blob: 0e4402706e036fd40f9de2ff40f8abf1185b2c7a [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
256 //==== HVAC Properties ====
257
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
296 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE|VEHICLE_PROP_CHANGE_MODE_CONTINUOUS
297 * @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
306 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE|VEHICLE_PROP_CHANGE_MODE_CONTINUOUS
307 * @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/**
Keun-young Park418c7e82016-04-06 10:44:20 -0700386 * Represents power state for HVAC. Some HVAC properties will require matching power to be turned on
387 * to get out of OFF state. For non-zoned HVAC properties, VEHICLE_ALL_ZONE corresponds to
388 * global power state.
389 *
390 * @value_type VEHICLE_VALUE_TYPE_ZONED_BOOLEAN
391 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
392 * @access VEHICLE_PROP_ACCESS_READ_WRITE
393 * @config_string list of HVAC properties whose power is controlled by this property. Format is
394 * hexa-decimal number (0x...) separated by comma like "0x500,0x503". All zones
395 * defined in these affected properties should be available in the property.
396 * @zone_type VEHICLE_ZONE
397 * @data_member hvac.power_on
398 */
399#define VEHICLE_PROPERTY_HVAC_POWER_ON (0x00000510)
400
401/**
Sanket Agarwalfb636682015-08-11 14:34:29 -0700402 * Outside temperature
403 * @value_type VEHICLE_VALUE_TYPE_FLOAT
404 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE|VEHICLE_PROP_CHANGE_MODE_CONTINUOUS
405 * @access VEHICLE_PROP_ACCESS_READ
406 * @data_member outside_temperature
407 * @unit VEHICLE_UNIT_TYPE_CELCIUS
408 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700409#define VEHICLE_PROPERTY_ENV_OUTSIDE_TEMPERATURE (0x00000703)
Keun-young Parkcb354502016-02-08 18:15:55 -0800410
411
412/**
413 * Cabin temperature
414 * @value_type VEHICLE_VALUE_TYPE_FLOAT
415 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE|VEHICLE_PROP_CHANGE_MODE_CONTINUOUS
416 * @access VEHICLE_PROP_ACCESS_READ
417 * @data_member cabin_temperature
418 * @unit VEHICLE_UNIT_TYPE_CELCIUS
419 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700420#define VEHICLE_PROPERTY_ENV_CABIN_TEMPERATURE (0x00000704)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700421
422
423/*
424 * Radio features.
425 */
426/**
427 * Radio presets stored on the Car radio module. The data type used is int32
428 * array with the following fields:
429 * <ul>
430 * <li> int32_array[0]: Preset number </li>
431 * <li> int32_array[1]: Band type (see #RADIO_BAND_FM in
432 * system/core/include/system/radio.h).
433 * <li> int32_array[2]: Channel number </li>
434 * <li> int32_array[3]: Sub channel number </li>
435 * </ul>
436 *
437 * NOTE: When getting a current preset config ONLY set preset number (i.e.
438 * int32_array[0]). For setting a preset other fields are required.
439 *
440 * @value_type VEHICLE_VALUE_TYPE_INT32_VEC4
441 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
442 * @access VEHICLE_PROP_ACCESS_READ_WRITE
Keun-young Parkbf877a72015-12-21 14:16:05 -0800443 * @config_flags Number of presets supported
Sanket Agarwalfb636682015-08-11 14:34:29 -0700444 * @data_member int32_array
445 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700446#define VEHICLE_PROPERTY_RADIO_PRESET (0x0000801)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700447
448/**
449 * Constants relevant to radio.
450 */
451enum vehicle_radio_consts {
452 /** Minimum value for the radio preset */
453 VEHICLE_RADIO_PRESET_MIN_VALUE = 1,
454};
455
456/**
457 * Represents audio focus state of Android side. Note that car's audio module will own audio
458 * focus and grant audio focus to Android side when requested by Android side. The focus has both
459 * per stream characteristics and global characteristics.
460 *
461 * Focus request (get of this property) will take the following form in int32_vec4:
Keun-young Park08c255e2015-12-09 13:47:30 -0800462 * int32_array[0]: vehicle_audio_focus_request type
Sanket Agarwalfb636682015-08-11 14:34:29 -0700463 * int32_array[1]: bit flags of streams requested by this focus request. There can be up to
464 * 32 streams.
465 * int32_array[2]: External focus state flags. For request, only flag like
Keun-young Park418c7e82016-04-06 10:44:20 -0700466 * VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG or
467 * VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG can be used.
468 * VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG is for case like radio where android
469 * side app still needs to hold focus but playback is done outside Android.
470 * VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG is for muting media channel
471 * including radio. VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG can be set even
472 * if android side releases focus (request type REQUEST_RELEASE). In that case,
473 * audio module should maintain mute state until user's explicit action to
474 * play some media.
Keun-young Park637fb202016-03-29 09:52:41 -0700475 * int32_array[3]: Currently active audio contexts. Use combination of flags from
Keun-young Parkfe599a82016-02-12 14:26:57 -0800476 * vehicle_audio_context_flag.
477 * This can be used as a hint to adjust audio policy or other policy decision.
478 * Note that there can be multiple context active at the same time. And android
479 * can send the same focus request type gain due to change in audio contexts.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700480 * Note that each focus request can request multiple streams that is expected to be used for
481 * the current request. But focus request itself is global behavior as GAIN or GAIN_TRANSIENT
482 * expects all sounds played by car's audio module to stop. Note that stream already allocated to
483 * android before this focus request should not be affected by focus request.
484 *
485 * Focus response (set and subscription callback for this property) will take the following form:
Keun-young Park08c255e2015-12-09 13:47:30 -0800486 * int32_array[0]: vehicle_audio_focus_state type
Sanket Agarwalfb636682015-08-11 14:34:29 -0700487 * int32_array[1]: bit flags of streams allowed.
488 * int32_array[2]: External focus state: bit flags of currently active audio focus in car
489 * side (outside Android). Active audio focus does not necessarily mean currently
490 * playing, but represents the state of having focus or waiting for focus
491 * (pause state).
492 * One or combination of flags from vehicle_audio_ext_focus_flag.
493 * 0 means no active audio focus holder outside Android.
494 * The state will have following values for each vehicle_audio_focus_state_type:
495 * GAIN: 0 or VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY when radio is active in
496 * Android side.
497 * GAIN_TRANSIENT: 0. Can be VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT or
498 * VEHICLE_AUDIO_EXT_FOCUS_CAR_TRANSIENT if android side has requested
499 * GAIN_TRANSIENT_MAY_DUCK and car side is ducking.
500 * LOSS: 0 when no focus is audio is active in car side.
501 * VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT when car side is playing something
502 * permanent.
503 * LOSS_TRANSIENT: always should be VEHICLE_AUDIO_EXT_FOCUS_CAR_TRANSIENT
Keun-young Parkfe599a82016-02-12 14:26:57 -0800504 * int32_array[3]: should be zero.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700505 *
Keun-young Park254dbce2016-03-28 09:37:04 -0700506 * A focus response should be sent per each focus request even if there is no change in
507 * focus state. This can happen in case like focus request only involving context change
508 * where android side still needs matching focus response to confirm that audio module
509 * has made necessary changes.
510 *
Sanket Agarwalfb636682015-08-11 14:34:29 -0700511 * If car does not support VEHICLE_PROPERTY_AUDIO_FOCUS, focus is assumed to be granted always.
512 *
Keun-young Parkfe599a82016-02-12 14:26:57 -0800513 * @value_type VEHICLE_VALUE_TYPE_INT32_VEC4
Sanket Agarwalfb636682015-08-11 14:34:29 -0700514 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
515 * @access VEHICLE_PROP_ACCESS_READ_WRITE
516 * @data_member int32_array
517 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700518#define VEHICLE_PROPERTY_AUDIO_FOCUS (0x00000900)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700519
520enum vehicle_audio_focus_request {
521 VEHICLE_AUDIO_FOCUS_REQUEST_GAIN = 0x1,
522 VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT = 0x2,
523 VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK = 0x3,
Keun-young Parkcb354502016-02-08 18:15:55 -0800524 /**
525 * This is for the case where android side plays sound like UI feedback
526 * and car side does not need to duck existing playback as long as
527 * requested stream is available.
528 */
529 VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_NO_DUCK = 0x4,
530 VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE = 0x5,
Sanket Agarwalfb636682015-08-11 14:34:29 -0700531};
532
533enum vehicle_audio_focus_state {
534 /**
535 * Android side has permanent focus and can play allowed streams.
536 */
537 VEHICLE_AUDIO_FOCUS_STATE_GAIN = 0x1,
538 /**
539 * Android side has transient focus and can play allowed streams.
540 */
541 VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT = 0x2,
542 /**
543 * Car audio module is playing guidance kind of sound outside Android. Android side can
544 * still play through allowed streams with ducking.
545 */
546 VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_CAN_DUCK = 0x3,
547 /**
548 * Car audio module is playing transient sound outside Android. Android side should stop
549 * playing any sounds.
550 */
551 VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT = 0x4,
552 /**
553 * Android side has lost focus and cannot play any sound.
554 */
555 VEHICLE_AUDIO_FOCUS_STATE_LOSS = 0x5,
556 /**
557 * car audio module is playing safety critical sound, and Android side cannot request focus
558 * until the current state is finished. car audio module should restore it to the previous
559 * state when it can allow Android to play.
560 */
561 VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_EXLCUSIVE = 0x6,
562};
563
564/**
565 * Flags to represent multiple streams by combining these.
566 */
567enum vehicle_audio_stream_flag {
568 VEHICLE_AUDIO_STREAM_STREAM0_FLAG = (0x1<<0),
569 VEHICLE_AUDIO_STREAM_STREAM1_FLAG = (0x1<<1),
570 VEHICLE_AUDIO_STREAM_STREAM2_FLAG = (0x1<<2),
571};
572
573/**
574 * Represents stream number (always 0 to N -1 where N is max number of streams).
575 * Can be used for audio related property expecting one stream.
576 */
577enum vehicle_audio_stream {
578 VEHICLE_AUDIO_STREAM0 = 0,
579 VEHICLE_AUDIO_STREAM1 = 1,
580};
581
582/**
583 * Flag to represent external focus state (outside Android).
584 */
585enum vehicle_audio_ext_focus_flag {
586 /**
587 * No external focus holder.
588 */
589 VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG = 0x0,
590 /**
591 * Car side (outside Android) has component holding GAIN kind of focus state.
592 */
593 VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT_FLAG = 0x1,
594 /**
595 * Car side (outside Android) has component holding GAIN_TRANSIENT kind of focus state.
596 */
597 VEHICLE_AUDIO_EXT_FOCUS_CAR_TRANSIENT_FLAG = 0x2,
598 /**
599 * Car side is expected to play something while focus is held by Android side. One example
600 * can be radio attached in car side. But Android's radio app still should have focus,
601 * and Android side should be in GAIN state, but media stream will not be allocated to Android
602 * side and car side can play radio any time while this flag is active.
603 */
604 VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG = 0x4,
Keun-young Park418c7e82016-04-06 10:44:20 -0700605 /**
606 * Car side should mute any media including radio. This can be used with any focus request
607 * including GAIN* and RELEASE.
608 */
609 VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG = 0x8,
Sanket Agarwalfb636682015-08-11 14:34:29 -0700610};
611
612/**
613 * Index in int32_array for VEHICLE_PROPERTY_AUDIO_FOCUS property.
614 */
615enum vehicle_audio_focus_index {
616 VEHICLE_AUDIO_FOCUS_INDEX_FOCUS = 0,
617 VEHICLE_AUDIO_FOCUS_INDEX_STREAMS = 1,
618 VEHICLE_AUDIO_FOCUS_INDEX_EXTERNAL_FOCUS_STATE = 2,
Keun-young Parkfe599a82016-02-12 14:26:57 -0800619 VEHICLE_AUDIO_FOCUS_INDEX_AUDIO_CONTEXTS = 3,
620};
621
622/**
623 * Flags to tell the current audio context.
624 */
625enum vehicle_audio_context_flag {
626 /** Music playback is currently active. */
627 VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG = 0x1,
628 /** Navigation is currently running. */
629 VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG = 0x2,
630 /** Voice command session is currently running. */
631 VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG = 0x4,
632 /** Voice call is currently active. */
633 VEHICLE_AUDIO_CONTEXT_CALL_FLAG = 0x8,
634 /** Alarm is active. This may be only used in VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY. */
635 VEHICLE_AUDIO_CONTEXT_ALARM_FLAG = 0x10,
636 /**
637 * Notification sound is active. This may be only used in VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY.
638 */
639 VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG = 0x20,
640 /**
641 * Context unknown. Only used for VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY to represent default
642 * stream for unknown contents.
643 */
644 VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG = 0x40,
645 /** Safety alert / warning is played. */
646 VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG = 0x80,
647 /** CD / DVD kind of audio is played */
Keun-young Park9f376f52016-03-03 17:47:18 -0800648 VEHICLE_AUDIO_CONTEXT_CD_ROM_FLAG = 0x100,
Keun-young Parkfe599a82016-02-12 14:26:57 -0800649 /** Aux audio input is played */
Keun-young Park9f376f52016-03-03 17:47:18 -0800650 VEHICLE_AUDIO_CONTEXT_AUX_AUDIO_FLAG = 0x200,
Keun-young Parkfe599a82016-02-12 14:26:57 -0800651 /** system sound like UI feedback */
Keun-young Park9f376f52016-03-03 17:47:18 -0800652 VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG = 0x400,
Keun-young Parkfe599a82016-02-12 14:26:57 -0800653 /** Radio is played */
Keun-young Park9f376f52016-03-03 17:47:18 -0800654 VEHICLE_AUDIO_CONTEXT_RADIO_FLAG = 0x800,
Sanket Agarwalfb636682015-08-11 14:34:29 -0700655};
656
657/**
Keun-young Parkbf877a72015-12-21 14:16:05 -0800658 * Property to control audio volume of each audio context.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700659 *
Keun-young Park12a3c012016-03-23 17:58:29 -0700660 * vehicle_prop_config_t
661 * config_array[0] : bit flags of all supported audio contexts. If this is 0,
662 * audio volume is controlled per physical stream
663 * config_array[1] : flags defined in vehicle_audio_volume_capability_flag to
664 * represent audio module's capability.
665 *
Sanket Agarwalfb636682015-08-11 14:34:29 -0700666 * Data type looks like:
Keun-young Park12a3c012016-03-23 17:58:29 -0700667 * int32_array[0] : stream context as defined in vehicle_audio_context_flag. If only physical
668 stream is supported (config_array[0] == 0), this will represent physical
669 stream number.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700670 * int32_array[1] : volume level, valid range is 0 to int32_max_value defined in config.
671 * 0 will be mute state. int32_min_value in config should be always 0.
672 * int32_array[2] : One of vehicle_audio_volume_state.
673 *
674 * This property requires per stream based get. HAL implementation should check stream number
675 * in get call to return the right volume.
676 *
677 * @value_type VEHICLE_VALUE_TYPE_INT32_VEC3
678 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
679 * @access VEHICLE_PROP_ACCESS_READ_WRITE
Keun-young Parkbf877a72015-12-21 14:16:05 -0800680 * @config_flags all audio contexts supported.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700681 * @data_member int32_array
682 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700683#define VEHICLE_PROPERTY_AUDIO_VOLUME (0x00000901)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700684
Keun-young Park12a3c012016-03-23 17:58:29 -0700685
686/**
687 * flags to represent capability of audio volume property.
688 * used in config_array[1] of vehicle_prop_config_t.
689 */
690enum vehicle_audio_volume_capability_flag {
691 /**
692 * External audio module or vehicle hal has persistent storage
693 * to keep the volume level. This should be set only when per context
694 * volume level is supproted. When this is set, audio volume level per
695 * each context will be retrieved from the property when systen starts up.
696 * And external audio module is also expected to adjust volume automatically
697 * whenever there is an audio context change.
698 * When this flag is not set, android side will assume that there is no
699 * persistent storage and stored value in android side will be used to
700 * initialize the volume level. And android side will set volume level
701 * of each physical streams whenever there is an audio context change.
702 */
703 VEHICLE_AUDIO_VOLUME_CAPABILITY_PERSISTENT_STORAGE = 0x1,
704};
705
Steve Paikcc9e2922016-04-21 11:40:17 -0700706
Sanket Agarwalfb636682015-08-11 14:34:29 -0700707/**
708 * enum to represent audio volume state.
709 */
710enum vehicle_audio_volume_state {
711 VEHICLE_AUDIO_VOLUME_STATE_OK = 0,
712 /**
713 * Audio volume has reached volume limit set in VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT
714 * and user's request to increase volume further is not allowed.
715 */
716 VEHICLE_AUDIO_VOLUME_STATE_LIMIT_REACHED = 1,
717};
718
719/**
720 * Index in int32_array for VEHICLE_PROPERTY_AUDIO_VOLUME property.
721 */
722enum vehicle_audio_volume_index {
723 VEHICLE_AUDIO_VOLUME_INDEX_STREAM = 0,
724 VEHICLE_AUDIO_VOLUME_INDEX_VOLUME = 1,
725 VEHICLE_AUDIO_VOLUME_INDEX_STATE = 2,
726};
727
728/**
729 * Property for handling volume limit set by user. This limits maximum volume that can be set
Keun-young Park12a3c012016-03-23 17:58:29 -0700730 * per each context or physical stream.
731 *
732 * vehicle_prop_config_t
733 * config_array[0] : bit flags of all supported audio contexts. If this is 0,
734 * audio volume is controlled per physical stream
735 * config_array[1] : flags defined in vehicle_audio_volume_capability_flag to
736 * represent audio module's capability.
737 *
738 * Data type looks like:
739 * int32_array[0] : stream context as defined in vehicle_audio_context_flag. If only physical
740 * stream is supported (config_array[0] == 0), this will represent physical
741 * stream number.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700742 * int32_array[1] : maximum volume set to the stream. If there is no restriction, this value
743 * will be bigger than VEHICLE_PROPERTY_AUDIO_VOLUME's max value.
744 *
745 * If car does not support this feature, this property should not be populated by HAL.
746 * This property requires per stream based get. HAL implementation should check stream number
747 * in get call to return the right volume.
748 *
749 * @value_type VEHICLE_VALUE_TYPE_INT32_VEC2
750 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
751 * @access VEHICLE_PROP_ACCESS_READ_WRITE
Keun-young Parkbf877a72015-12-21 14:16:05 -0800752 * @config_flags all audio contexts supported.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700753 * @data_member int32_array
754 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700755#define VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT (0x00000902)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700756
757/**
758 * Index in int32_array for VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT property.
759 */
760enum vehicle_audio_volume_limit_index {
761 VEHICLE_AUDIO_VOLUME_LIMIT_INDEX_STREAM = 0,
762 VEHICLE_AUDIO_VOLUME_LIMIT_INDEX_MAX_VOLUME = 1,
763};
764
765/**
766 * Property to share audio routing policy of android side. This property is set at the beginning
767 * to pass audio policy in android side down to vehicle HAL and car audio module.
768 * This can be used as a hint to adjust audio policy or other policy decision.
769 *
770 * int32_array[0] : audio stream where the audio for the application context will be routed
771 * by default. Note that this is the default setting from system, but each app
772 * may still use different audio stream for whatever reason.
Keun-young Parkbf877a72015-12-21 14:16:05 -0800773 * int32_array[1] : All audio contexts that will be sent through the physical stream. Flag
774 * is defined in vehicle_audio_context_flag.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700775
776 * Setting of this property will be done for all available physical streams based on audio H/W
777 * variant information acquired from VEHICLE_PROPERTY_AUDIO_HW_VARIANT property.
778 *
779 * @value_type VEHICLE_VALUE_TYPE_INT32_VEC2
780 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
781 * @access VEHICLE_PROP_ACCESS_WRITE
782 * @data_member int32_array
783 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700784#define VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY (0x00000903)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700785
786/**
787 * Index in int32_array for VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY property.
788 */
789enum vehicle_audio_routing_policy_index {
790 VEHICLE_AUDIO_ROUTING_POLICY_INDEX_STREAM = 0,
791 VEHICLE_AUDIO_ROUTING_POLICY_INDEX_CONTEXTS = 1,
792};
793
794/**
795* Property to return audio H/W variant type used in this car. This allows android side to
796* support different audio policy based on H/W variant used. Note that other components like
797* CarService may need overlay update to support additional variants. If this property does not
798* exist, default audio policy will be used.
799*
800* @value_type VEHICLE_VALUE_TYPE_INT32
801* @change_mode VEHICLE_PROP_CHANGE_MODE_STATIC
802* @access VEHICLE_PROP_ACCESS_READ
Keun-young Parkbf877a72015-12-21 14:16:05 -0800803* @config_flags Additional info on audio H/W. Should use vehicle_audio_hw_variant_config_flag for
804* this.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700805* @data_member int32_value
806*/
Steve Paikcc9e2922016-04-21 11:40:17 -0700807#define VEHICLE_PROPERTY_AUDIO_HW_VARIANT (0x00000904)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700808
809/**
810 * Flag to be used in vehicle_prop_config.config_flags for VEHICLE_PROPERTY_AUDIO_HW_VARIANT.
811 */
812enum vehicle_audio_hw_variant_config_flag {
813 /**
Keun-young Park637fb202016-03-29 09:52:41 -0700814 * Flag to tell that radio is internal to android and radio should
815 * be treated like other android stream like media.
816 * When this flag is not set or AUDIO_HW_VARIANT does not exist,
817 * radio is treated as external module. This brins some delta in audio focus
818 * handling as well.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700819 */
Keun-young Park637fb202016-03-29 09:52:41 -0700820 VEHICLE_AUDIO_HW_VARIANT_FLAG_INTERNAL_RADIO_FLAG = 0x1,
Sanket Agarwalfb636682015-08-11 14:34:29 -0700821};
822
Keun-young Parkcb8c8872016-01-08 09:41:19 -0800823
824/**
Sanket Agarwalfb636682015-08-11 14:34:29 -0700825 * Property to control power state of application processor.
826 *
827 * It is assumed that AP's power state is controller by separate power controller.
828 *
829 * For configuration information, vehicle_prop_config.config_flags can have bit flag combining
830 * values in vehicle_ap_power_state_config_type.
831 *
832 * For get / notification, data type looks like this:
833 * int32_array[0] : vehicle_ap_power_state_type
834 * int32_array[1] : additional parameter relevant for each state. should be 0 if not used.
835 * For set, data type looks like this:
836 * int32_array[0] : vehicle_ap_power_state_set_type
837 * int32_array[1] : additional parameter relevant for each request. should be 0 if not used.
838 *
839 * @value_type VEHICLE_VALUE_TYPE_INT32_VEC2
840 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
841 * @access VEHICLE_PROP_ACCESS_READ_WRITE
Keun-young Parkbf877a72015-12-21 14:16:05 -0800842 * @config_flags Additional info on power state. Should use vehicle_ap_power_state_config_flag.
Sanket Agarwalfb636682015-08-11 14:34:29 -0700843 * @data_member int32_array
844 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700845#define VEHICLE_PROPERTY_AP_POWER_STATE (0x00000A00)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700846
847enum vehicle_ap_power_state_config_flag {
848 /**
849 * AP can enter deep sleep state. If not set, AP will always shutdown from
850 * VEHICLE_AP_POWER_STATE_SHUTDOWN_PREPARE power state.
851 */
852 VEHICLE_AP_POWER_STATE_CONFIG_ENABLE_DEEP_SLEEP_FLAG = 0x1,
853
854 /**
855 * The power controller can power on AP from off state after timeout specified in
856 * VEHICLE_AP_POWER_SET_SHUTDOWN_READY message.
857 */
858 VEHICLE_AP_POWER_STATE_CONFIG_SUPPORT_TIMER_POWER_ON_FLAG = 0x2,
859};
860
861enum vehicle_ap_power_state {
862 /** vehicle HAL will never publish this state to AP */
863 VEHICLE_AP_POWER_STATE_OFF = 0,
864 /** vehicle HAL will never publish this state to AP */
865 VEHICLE_AP_POWER_STATE_DEEP_SLEEP = 1,
866 /** AP is on but display should be off. */
867 VEHICLE_AP_POWER_STATE_ON_DISP_OFF = 2,
868 /** AP is on with display on. This state allows full user interaction. */
869 VEHICLE_AP_POWER_STATE_ON_FULL = 3,
870 /**
871 * The power controller has requested AP to shutdown. AP can either enter sleep state or start
872 * full shutdown. AP can also request postponing shutdown by sending
873 * VEHICLE_AP_POWER_SET_SHUTDOWN_POSTPONE message. The power controller should change power
874 * state to this state to shutdown system.
875 *
876 * int32_array[1] : one of enum_vehicle_ap_power_state_shutdown_param_type
877 */
878 VEHICLE_AP_POWER_STATE_SHUTDOWN_PREPARE = 4,
879};
880
881enum vehicle_ap_power_state_shutdown_param {
882 /** AP should shutdown immediately. Postponing is not allowed. */
883 VEHICLE_AP_POWER_SHUTDOWN_PARAM_SHUTDOWN_IMMEDIATELY = 1,
884 /** AP can enter deep sleep instead of shutting down completely. */
885 VEHICLE_AP_POWER_SHUTDOWN_PARAM_CAN_SLEEP = 2,
886 /** AP can only shutdown with postponing allowed. */
887 VEHICLE_AP_POWER_SHUTDOWN_PARAM_SHUTDOWN_ONLY = 3,
888};
889
890enum vehicle_ap_power_set_state {
891 /**
892 * AP has finished boot up, and can start shutdown if requested by power controller.
893 */
894 VEHICLE_AP_POWER_SET_BOOT_COMPLETE = 0x1,
895 /**
896 * AP is entering deep sleep state. How this state is implemented may vary depending on
897 * each H/W, but AP's power should be kept in this state.
898 */
899 VEHICLE_AP_POWER_SET_DEEP_SLEEP_ENTRY = 0x2,
900 /**
901 * AP is exiting from deep sleep state, and is in VEHICLE_AP_POWER_STATE_SHUTDOWN_PREPARE state.
902 * The power controller may change state to other ON states based on the current state.
903 */
904 VEHICLE_AP_POWER_SET_DEEP_SLEEP_EXIT = 0x3,
905 /**
906 * int32_array[1]: Time to postpone shutdown in ms. Maximum value can be 5000 ms.
907 * If AP needs more time, it will send another POSTPONE message before
908 * the previous one expires.
909 */
910 VEHICLE_AP_POWER_SET_SHUTDOWN_POSTPONE = 0x4,
911 /**
912 * AP is starting shutting down. When system completes shutdown, everything will stop in AP
913 * as kernel will stop all other contexts. It is responsibility of vehicle HAL or lower level
914 * to synchronize that state with external power controller. As an example, some kind of ping
915 * with timeout in power controller can be a solution.
916 *
917 * int32_array[1]: Time to turn on AP in secs. Power controller may turn on AP after specified
918 * time so that AP can run tasks like update. If it is set to 0, there is no
919 * wake up, and power controller may not necessarily support wake-up.
920 * If power controller turns on AP due to timer, it should start with
921 * VEHICLE_AP_POWER_STATE_ON_DISP_OFF state, and after receiving
922 * VEHICLE_AP_POWER_SET_BOOT_COMPLETE, it shall do state transition to
923 * VEHICLE_AP_POWER_STATE_SHUTDOWN_PREPARE.
924 */
925 VEHICLE_AP_POWER_SET_SHUTDOWN_START = 0x5,
926 /**
927 * User has requested to turn off headunit's display, which is detected in android side.
928 * The power controller may change the power state to VEHICLE_AP_POWER_STATE_ON_DISP_OFF.
929 */
930 VEHICLE_AP_POWER_SET_DISPLAY_OFF = 0x6,
931 /**
932 * User has requested to turn on headunit's display, most probably from power key input which
933 * is attached to headunit. The power controller may change the power state to
934 * VEHICLE_AP_POWER_STATE_ON_FULL.
935 */
936 VEHICLE_AP_POWER_SET_DISPLAY_ON = 0x7,
937};
938
939/**
940 * Property to represent brightness of the display. Some cars have single control for
941 * the brightness of all displays and this property is to share change in that control.
942 *
943 * If this is writable, android side can set this value when user changes display brightness
944 * from Settings. If this is read only, user may still change display brightness from Settings,
945 * but that will not be reflected to other displays.
946 *
947 * @value_type VEHICLE_VALUE_TYPE_INT32
948 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
949 * @access VEHICLE_PROP_ACCESS_READ|VEHICLE_PROP_ACCESS_READ_WRITE
950 * @data_member int32
951 */
Steve Paikcc9e2922016-04-21 11:40:17 -0700952#define VEHICLE_PROPERTY_DISPLAY_BRIGHTNESS (0x00000A01)
Sanket Agarwalfb636682015-08-11 14:34:29 -0700953
954
955/**
956 * Index in int32_array for VEHICLE_PROPERTY_AP_POWER_STATE property.
957 */
958enum vehicle_ap_power_state_index {
959 VEHICLE_AP_POWER_STATE_INDEX_STATE = 0,
960 VEHICLE_AP_POWER_STATE_INDEX_ADDITIONAL = 1,
961};
962
963/**
964* Property to report bootup reason for the current power on. This is a static property that will
965* not change for the whole duration until power off. For example, even if user presses power on
966* button after automatic power on with door unlock, bootup reason should stay with
967* VEHICLE_AP_POWER_BOOTUP_REASON_USER_UNLOCK.
968*
969* int32_value should be vehicle_ap_power_bootup_reason.
970*
971* @value_type VEHICLE_VALUE_TYPE_INT32
972* @change_mode VEHICLE_PROP_CHANGE_MODE_STATIC
973* @access VEHICLE_PROP_ACCESS_READ
974* @data_member int32_value
975*/
976#define VEHICLE_PROPERTY_AP_POWER_BOOTUP_REASON (0x00000A02)
977
978/**
979 * Enum to represent bootup reason.
980 */
981enum vehicle_ap_power_bootup_reason {
982 /**
983 * Power on due to user's pressing of power key or rotating of ignition switch.
984 */
985 VEHICLE_AP_POWER_BOOTUP_REASON_USER_POWER_ON = 0,
986 /**
987 * Automatic power on triggered by door unlock or any other kind of automatic user detection.
988 */
989 VEHICLE_AP_POWER_BOOTUP_REASON_USER_UNLOCK = 1,
990 /**
991 * Automatic power on triggered by timer. This only happens when AP has asked wake-up after
992 * certain time through time specified in VEHICLE_AP_POWER_SET_SHUTDOWN_START.
993 */
994 VEHICLE_AP_POWER_BOOTUP_REASON_TIMER = 2,
995};
996
Keun-young Parkcb354502016-02-08 18:15:55 -0800997
998/**
999 * Property to feed H/W input events to android
1000 *
1001 * int32_array[0] : action defined by vehicle_hw_key_input_action
1002 * int32_array[1] : key code, should use standard android key code
1003 * int32_array[2] : target display defined in vehicle_display. Events not tied
1004 * to specific display should be sent to DISPLAY_MAIN.
1005 * int32_array[3] : reserved for now. should be zero
1006 * @value_type VEHICLE_VALUE_TYPE_INT32_VEC4
1007 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1008 * @access VEHICLE_PROP_ACCESS_READ
1009 * @config_flags
1010 * @data_member int32_array
1011 */
1012#define VEHICLE_PROPERTY_HW_KEY_INPUT (0x00000A10)
1013
1014enum vehicle_hw_key_input_action {
1015 /** Key down */
1016 VEHICLE_HW_KEY_INPUT_ACTION_DOWN = 0,
1017 /** Key up */
1018 VEHICLE_HW_KEY_INPUT_ACTION_UP = 1,
1019};
1020
1021enum vehicle_display {
1022 /** center console */
1023 VEHICLE_DISPLAY_MAIN = 0,
1024 VEHICLE_DISPLAY_INSTRUMENT_CLUSTER = 1,
1025};
1026
Sanket Agarwalfb636682015-08-11 14:34:29 -07001027/**
Keun-young Parkfe599a82016-02-12 14:26:57 -08001028 * Property to define instrument cluster information.
1029 * For CLUSTER_TYPE_EXTERNAL_DISPLAY:
1030 * READ:
1031 * int32_array[0] : The current screen mode index. Screen mode is defined
1032 * as a configuration in car service and represents which
1033 * area of screen is renderable.
1034 * int32_array[1] : Android can render to instrument cluster (=1) or not(=0). When this is 0,
1035 * instrument cluster may be rendering some information in the area
1036 * allocated for android and android side rendering is invisible. *
1037 * int32_array[2..3] : should be zero
1038 * WRITE from android:
1039 * int32_array[0] : Preferred mode for android side. Depending on the app rendering to instrument
1040 * cluster, preferred mode can change. Instrument cluster still needs to send
1041 * event with new mode to trigger actual mode change.
1042 * int32_array[1] : The current app context relevant for instrument cluster. Use the same flag
1043 * with vehicle_audio_context_flag but this context represents active apps, not
1044 * active audio. Instrument cluster side may change mode depending on the
1045 * currently active contexts.
1046 * int32_array[2..3] : should be zero
1047 * When system boots up, Android side will write {0, 0, 0, 0} when it is ready to render to
1048 * instrument cluster. Before this message, rendering from android should not be visible in the
1049 * cluster.
1050 * @value_type VEHICLE_VALUE_TYPE_INT32_VEC4
1051 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1052 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1053 * @config_array 0:vehicle_instument_cluster_type 1:hw type
1054 * @data_member int32_array
1055 */
Steve Paikcc9e2922016-04-21 11:40:17 -07001056#define VEHICLE_PROPERTY_INSTRUMENT_CLUSTER_INFO (0x00000A20)
Keun-young Parkfe599a82016-02-12 14:26:57 -08001057
1058/**
1059 * Represents instrument cluster type available in system
1060 */
1061enum vehicle_instument_cluster_type {
1062 /** Android has no access to instument cluster */
1063 VEHICLE_INSTRUMENT_CLUSTER_TYPE_NONE = 0,
1064 /**
1065 * Instrument cluster can communicate through vehicle hal with additional
1066 * properties to exchange meta-data
1067 */
1068 VEHICLE_INSTRUMENT_CLUSTER_TYPE_HAL_INTERFACE = 1,
1069 /**
1070 * Instrument cluster is external display where android can render contents
1071 */
1072 VEHICLE_INSTRUMENT_CLUSTER_TYPE_EXTERNAL_DISPLAY = 2,
1073};
1074
Steve Paikd432fc02016-05-11 16:25:33 -07001075/**
1076 * Current date and time, encoded as Unix time.
1077 * This value denotes the number of seconds that have elapsed since 1/1/1970.
1078 *
1079 * @value_type VEHICLE_VALUE_TYPE_INT64
1080 * @change_mode VEHICLE_PROP_CHANGE_MODE_POLL
1081 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1082 * @data_member int64_value
1083 * @unit VEHICLE_UNIT_TYPE_SECS
1084 */
1085#define VEHICLE_PROPERTY_UNIX_TIME (0x00000A30)
1086
1087/**
1088 * Current time only.
1089 * Some vehicles may not keep track of date. This property only affects the current time, in
1090 * seconds during the day. Thus, the max value for this parameter is 86,400 (24 * 60 * 60)
1091 *
1092 * @value_type VEHICLE_VALUE_TYPE_INT32
1093 * @change_mode VEHICLE_PROP_CHANGE_MODE_POLL
1094 * @access VEHICLE_PROP_ACCESS_READ_WRITE
1095 * @data_member int32_value
1096 * @unit VEHICLE_UNIT_TYPE_SECS
1097 */
1098#define VEHICLE_PROPERTY_CURRENT_TIME_IN_SECONDS (0x00000A31)
Steve Paikcc9e2922016-04-21 11:40:17 -07001099
1100/**
1101 * Seat temperature
1102 *
1103 * Negative values indicate cooling.
1104 * 0 indicates off.
1105 * Positive values indicate heating.
1106 *
1107 * Some vehicles may have multiple levels of heating and cooling. The min/max
1108 * range defines the allowable range and number of steps in each direction.
1109 *
Keun-young Park7cb258e2016-04-25 18:37:28 -07001110 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
Steve Paikcc9e2922016-04-21 11:40:17 -07001111 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1112 * @access VEHICLE_PROP_ACCESS_WRITE
1113 * @zone_type VEHICLE_SEAT
Steve Paikd432fc02016-05-11 16:25:33 -07001114 * @data_member int32_value
Steve Paikcc9e2922016-04-21 11:40:17 -07001115 */
1116#define VEHICLE_PROPERTY_SEAT_TEMPERATURE (0x00000B00)
1117
1118/**
1119 * Seat memory
1120 *
1121 * This parameter selects the memory preset to use to select the seat position.
1122 * The minValue is always 0, and the maxValue determines the number of seat
1123 * positions available.
1124 *
1125 * For instance, if the driver's seat has 3 memory presets, the maxValue will be 3.
1126 * When the user wants to select a preset, the desired preset number (1, 2, or 3)
1127 * is set.
1128 *
Keun-young Park7cb258e2016-04-25 18:37:28 -07001129 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
Steve Paikcc9e2922016-04-21 11:40:17 -07001130 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1131 * @access VEHICLE_PROP_ACCESS_WRITE
1132 * @zone_type VEHICLE_SEAT
Steve Paikd432fc02016-05-11 16:25:33 -07001133 * @data_member int32_value
Steve Paikcc9e2922016-04-21 11:40:17 -07001134 */
1135#define VEHICLE_PROPERTY_SEAT_MEMORY_SELECT (0x00000B01)
1136
1137/**
1138 * Seat memory set
1139 *
1140 * This setting allows the user to save the current seat position settings into
1141 * the selected preset slot. The maxValue for each seat position shall match
1142 * the maxValue for VEHICLE_PROPERTY_SEAT_MEMORY_SELECT.
1143 *
Keun-young Park7cb258e2016-04-25 18:37:28 -07001144 * @value_type VEHICLE_VALUE_TYPE_ZONED_INT32
Steve Paikcc9e2922016-04-21 11:40:17 -07001145 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1146 * @access VEHICLE_PROP_ACCESS_WRITE
1147 * @zone_type VEHICLE_SEAT
Steve Paikd432fc02016-05-11 16:25:33 -07001148 * @data_member int32_value
Steve Paikcc9e2922016-04-21 11:40:17 -07001149 */
1150#define VEHICLE_PROPERTY_SEAT_MEMORY_SET (0x00000B02)
1151
Keun-young Parkfe599a82016-02-12 14:26:57 -08001152/**
Sanket Agarwalfb636682015-08-11 14:34:29 -07001153 * H/W specific, non-standard property can be added as necessary. Such property should use
1154 * property number in range of [VEHICLE_PROPERTY_CUSTOM_START, VEHICLE_PROPERTY_CUSTOM_END].
1155 * Definition of property in this range is completely up to each HAL implementation.
1156 * For such property, it is recommended to fill vehicle_prop_config.config_string with some
1157 * additional information to help debugging. For example, company XYZ's custom extension may
1158 * include config_string of "com.XYZ.some_further_details".
1159 * @range_start
1160 */
Steve Paikcc9e2922016-04-21 11:40:17 -07001161#define VEHICLE_PROPERTY_CUSTOM_START (0x70000000)
Sanket Agarwalfb636682015-08-11 14:34:29 -07001162/** @range_end */
Steve Paikcc9e2922016-04-21 11:40:17 -07001163#define VEHICLE_PROPERTY_CUSTOM_END (0x73ffffff)
Sanket Agarwalfb636682015-08-11 14:34:29 -07001164
1165/**
1166 * Property range allocated for system's internal usage like testing. HAL should never declare
1167 * property in this range.
1168 * @range_start
1169 */
Steve Paikcc9e2922016-04-21 11:40:17 -07001170#define VEHICLE_PROPERTY_INTERNAL_START (0x74000000)
Sanket Agarwalfb636682015-08-11 14:34:29 -07001171/**
1172 * @range_end
1173 */
Steve Paikcc9e2922016-04-21 11:40:17 -07001174#define VEHICLE_PROPERTY_INTERNAL_END (0x74ffffff)
Sanket Agarwalfb636682015-08-11 14:34:29 -07001175
1176/**
1177 * Value types for various properties.
1178 */
1179enum vehicle_value_type {
1180 VEHICLE_VALUE_TYPE_SHOUD_NOT_USE = 0x00, // value_type should never set to 0.
1181 VEHICLE_VALUE_TYPE_STRING = 0x01,
1182 VEHICLE_VALUE_TYPE_BYTES = 0x02,
1183 VEHICLE_VALUE_TYPE_BOOLEAN = 0x03,
Keun-young Park73d7f222016-01-14 11:02:38 -08001184 VEHICLE_VALUE_TYPE_ZONED_BOOLEAN = 0x04,
1185 VEHICLE_VALUE_TYPE_INT64 = 0x05,
Sanket Agarwalfb636682015-08-11 14:34:29 -07001186 VEHICLE_VALUE_TYPE_FLOAT = 0x10,
1187 VEHICLE_VALUE_TYPE_FLOAT_VEC2 = 0x11,
1188 VEHICLE_VALUE_TYPE_FLOAT_VEC3 = 0x12,
1189 VEHICLE_VALUE_TYPE_FLOAT_VEC4 = 0x13,
1190 VEHICLE_VALUE_TYPE_INT32 = 0x20,
1191 VEHICLE_VALUE_TYPE_INT32_VEC2 = 0x21,
1192 VEHICLE_VALUE_TYPE_INT32_VEC3 = 0x22,
1193 VEHICLE_VALUE_TYPE_INT32_VEC4 = 0x23,
Keun-young Park73d7f222016-01-14 11:02:38 -08001194 VEHICLE_VALUE_TYPE_ZONED_FLOAT = 0x30,
1195 VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2 = 0x31,
1196 VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3 = 0x32,
Keun-young Parkab68e372016-03-10 16:28:42 -08001197 VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC4 = 0x33,
Keun-young Park73d7f222016-01-14 11:02:38 -08001198 VEHICLE_VALUE_TYPE_ZONED_INT32 = 0x40,
1199 VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2 = 0x41,
1200 VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3 = 0x42,
Keun-young Parkab68e372016-03-10 16:28:42 -08001201 VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4 = 0x43,
Sanket Agarwalfb636682015-08-11 14:34:29 -07001202};
1203
1204/**
1205 * Units used for int or float type with no attached enum types.
1206 */
1207enum vehicle_unit_type {
1208 VEHICLE_UNIT_TYPE_SHOULD_NOT_USE = 0x00000000,
1209 // speed related items
1210 VEHICLE_UNIT_TYPE_METER_PER_SEC = 0x00000001,
1211 VEHICLE_UNIT_TYPE_RPM = 0x00000002,
1212 VEHICLE_UNIT_TYPE_HZ = 0x00000003,
1213 // kind of ratio
1214 VEHICLE_UNIT_TYPE_PERCENTILE = 0x00000010,
1215 // length
1216 VEHICLE_UNIT_TYPE_MILLIMETER = 0x00000020,
1217 VEHICLE_UNIT_TYPE_METER = 0x00000021,
1218 VEHICLE_UNIT_TYPE_KILOMETER = 0x00000023,
1219 // temperature
1220 VEHICLE_UNIT_TYPE_CELCIUS = 0x00000030,
1221 // volume
1222 VEHICLE_UNIT_TYPE_MILLILITER = 0x00000040,
1223 // time
1224 VEHICLE_UNIT_TYPE_NANO_SECS = 0x00000050,
Steve Paikd432fc02016-05-11 16:25:33 -07001225 VEHICLE_UNIT_TYPE_SECS = 0x00000053,
Sanket Agarwalfb636682015-08-11 14:34:29 -07001226 VEHICLE_UNIT_TYPE_YEAR = 0x00000059,
1227};
1228
1229/**
Sanket Agarwalfb636682015-08-11 14:34:29 -07001230 * This describes how value of property can change.
1231 */
1232enum vehicle_prop_change_mode {
1233 /**
1234 * Property of this type will *never* change. This property will not support subscription, but
1235 * will support get
1236 */
1237 VEHICLE_PROP_CHANGE_MODE_STATIC = 0x00,
1238 /**
1239 * Property of this type will be reported when there is a change. get should return the
1240 * current value.
1241 */
1242 VEHICLE_PROP_CHANGE_MODE_ON_CHANGE = 0x01,
1243 /**
1244 * Property of this type change continuously and requires fixed rate of sampling to retrieve
1245 * the data.
1246 */
1247 VEHICLE_PROP_CHANGE_MODE_CONTINUOUS = 0x02,
Steve Paikd432fc02016-05-11 16:25:33 -07001248 /**
1249 * Property of this type may be polled to get the current value.
1250 */
1251 VEHICLE_PROP_CHANGE_MODE_POLL = 0x03,
Sanket Agarwalfb636682015-08-11 14:34:29 -07001252};
1253
1254/**
1255 * Property config defines the capabilities of it. User of the API
1256 * should first get the property config to understand the output from get()
1257 * commands and also to ensure that set() or events commands are in sync with
1258 * the expected output.
1259 */
1260enum vehicle_prop_access {
1261 VEHICLE_PROP_ACCESS_READ = 0x01,
1262 VEHICLE_PROP_ACCESS_WRITE = 0x02,
1263 VEHICLE_PROP_ACCESS_READ_WRITE = 0x03
1264};
1265
1266/**
1267 * These permissions define how the OEMs want to distribute their information and security they
1268 * want to apply. On top of these restrictions, android will have additional
1269 * 'app-level' permissions that the apps will need to ask the user before the apps have the
1270 * information.
1271 * This information should be kept in vehicle_prop_config.permission_model.
1272 */
1273enum vehicle_permission_model {
1274 /**
1275 * No special restriction, but each property can still require specific android app-level
1276 * permission.
1277 */
1278 VEHICLE_PERMISSION_NO_RESTRICTION = 0,
1279 /** Signature only. Only APKs signed with OEM keys are allowed. */
1280 VEHICLE_PERMISSION_OEM_ONLY = 0x1,
1281 /** System only. APKs built-in to system can access the property. */
1282 VEHICLE_PERMISSION_SYSTEM_APP_ONLY = 0x2,
1283 /** Equivalent to “system|signature” */
1284 VEHICLE_PERMISSION_OEM_OR_SYSTEM_APP = 0x3
1285};
1286
Keun-young Park418c7e82016-04-06 10:44:20 -07001287
1288/**
1289 * Special values for INT32/FLOAT (including ZONED types)
1290 * These values represent special state, which is outside MIN/MAX range but can happen.
1291 * For example, HVAC temperature may use out of range min / max to represent that
1292 * it is working in full power although target temperature has separate min / max.
1293 * OUT_OF_RANGE_OFF can represent a state where the property is powered off.
1294 * Usually such property will have separate property to control power.
1295 */
1296
1297#define VEHICLE_INT_OUT_OF_RANGE_MAX (INT32_MAX)
1298#define VEHICLE_INT_OUT_OF_RANGE_MIN (INT32_MIN)
1299#define VEHICLE_INT_OUT_OF_RANGE_OFF (INT32_MIN + 1)
1300
1301#define VEHICLE_FLOAT_OUT_OF_RANGE_MAX (INFINITY)
1302#define VEHICLE_FLOAT_OUT_OF_RANGE_MIN (-INFINITY)
Keun-young Parkf1ccec12016-04-22 13:19:53 -07001303#define VEHICLE_FLOAT_OUT_OF_RANGE_OFF (NAN)
Keun-young Park418c7e82016-04-06 10:44:20 -07001304
Sanket Agarwalfb636682015-08-11 14:34:29 -07001305/**
1306 * Car states.
1307 *
1308 * The driving states determine what features of the UI will be accessible.
1309 */
1310enum vehicle_driving_status {
1311 VEHICLE_DRIVING_STATUS_UNRESTRICTED = 0x00,
1312 VEHICLE_DRIVING_STATUS_NO_VIDEO = 0x01,
1313 VEHICLE_DRIVING_STATUS_NO_KEYBOARD_INPUT = 0x02,
1314 VEHICLE_DRIVING_STATUS_NO_VOICE_INPUT = 0x04,
1315 VEHICLE_DRIVING_STATUS_NO_CONFIG = 0x08,
1316 VEHICLE_DRIVING_STATUS_LIMIT_MESSAGE_LEN = 0x10
1317};
1318
1319/**
1320 * Various gears which can be selected by user and chosen in system.
1321 */
1322enum vehicle_gear {
1323 // Gear selections present in both automatic and manual cars.
1324 VEHICLE_GEAR_NEUTRAL = 0x0001,
1325 VEHICLE_GEAR_REVERSE = 0x0002,
1326
1327 // Gear selections (mostly) present only in automatic cars.
Keun-young Park77761e22016-03-08 15:02:44 -08001328 VEHICLE_GEAR_PARK = 0x0004,
Sanket Agarwalfb636682015-08-11 14:34:29 -07001329 VEHICLE_GEAR_DRIVE = 0x0008,
Keun-young Park77761e22016-03-08 15:02:44 -08001330 VEHICLE_GEAR_LOW = 0x0010,
Sanket Agarwalfb636682015-08-11 14:34:29 -07001331
1332 // Other possible gear selections (maybe present in manual or automatic
1333 // cars).
1334 VEHICLE_GEAR_1 = 0x0010,
1335 VEHICLE_GEAR_2 = 0x0020,
1336 VEHICLE_GEAR_3 = 0x0040,
1337 VEHICLE_GEAR_4 = 0x0080,
1338 VEHICLE_GEAR_5 = 0x0100,
1339 VEHICLE_GEAR_6 = 0x0200,
1340 VEHICLE_GEAR_7 = 0x0400,
1341 VEHICLE_GEAR_8 = 0x0800,
1342 VEHICLE_GEAR_9 = 0x1000
1343};
1344
1345
1346/**
1347 * Various zones in the car.
1348 *
1349 * Zones are used for Air Conditioning purposes and divide the car into physical
1350 * area zones.
1351 */
1352enum vehicle_zone {
1353 VEHICLE_ZONE_ROW_1_LEFT = 0x00000001,
1354 VEHICLE_ZONE_ROW_1_CENTER = 0x00000002,
1355 VEHICLE_ZONE_ROW_1_RIGHT = 0x00000004,
1356 VEHICLE_ZONE_ROW_1_ALL = 0x00000008,
1357 VEHICLE_ZONE_ROW_2_LEFT = 0x00000010,
1358 VEHICLE_ZONE_ROW_2_CENTER = 0x00000020,
1359 VEHICLE_ZONE_ROW_2_RIGHT = 0x00000040,
1360 VEHICLE_ZONE_ROW_2_ALL = 0x00000080,
1361 VEHICLE_ZONE_ROW_3_LEFT = 0x00000100,
1362 VEHICLE_ZONE_ROW_3_CENTER = 0x00000200,
1363 VEHICLE_ZONE_ROW_3_RIGHT = 0x00000400,
1364 VEHICLE_ZONE_ROW_3_ALL = 0x00000800,
1365 VEHICLE_ZONE_ROW_4_LEFT = 0x00001000,
1366 VEHICLE_ZONE_ROW_4_CENTER = 0x00002000,
1367 VEHICLE_ZONE_ROW_4_RIGHT = 0x00004000,
1368 VEHICLE_ZONE_ROW_4_ALL = 0x00008000,
1369 VEHICLE_ZONE_ALL = 0x80000000,
1370};
1371
1372/**
1373 * Various Seats in the car.
1374 */
1375enum vehicle_seat {
Keun-young Parka384f832016-02-11 16:50:42 -08001376 VEHICLE_SEAT_DRIVER_LHD = 0x0001,
1377 VEHICLE_SEAT_DRIVER_RHD = 0x0002,
1378 VEHICLE_SEAT_ROW_1_PASSENGER_LEFT = 0x0010,
1379 VEHICLE_SEAT_ROW_1_PASSENGER_CENTER = 0x0020,
1380 VEHICLE_SEAT_ROW_1_PASSENGER_RIGHT = 0x0040,
1381 VEHICLE_SEAT_ROW_2_PASSENGER_LEFT = 0x0100,
1382 VEHICLE_SEAT_ROW_2_PASSENGER_CENTER = 0x0200,
1383 VEHICLE_SEAT_ROW_2_PASSENGER_RIGHT = 0x0400,
1384 VEHICLE_SEAT_ROW_3_PASSENGER_LEFT = 0x1000,
1385 VEHICLE_SEAT_ROW_3_PASSENGER_CENTER = 0x2000,
1386 VEHICLE_SEAT_ROW_3_PASSENGER_RIGHT = 0x4000
Sanket Agarwalfb636682015-08-11 14:34:29 -07001387};
1388
1389/**
1390 * Various windshields/windows in the car.
1391 */
1392enum vehicle_window {
1393 VEHICLE_WINDOW_FRONT_WINDSHIELD = 0x0001,
1394 VEHICLE_WINDOW_REAR_WINDSHIELD = 0x0002,
1395 VEHICLE_WINDOW_ROOF_TOP = 0x0004,
1396 VEHICLE_WINDOW_ROW_1_LEFT = 0x0010,
1397 VEHICLE_WINDOW_ROW_1_RIGHT = 0x0020,
1398 VEHICLE_WINDOW_ROW_2_LEFT = 0x0100,
1399 VEHICLE_WINDOW_ROW_2_RIGHT = 0x0200,
1400 VEHICLE_WINDOW_ROW_3_LEFT = 0x1000,
1401 VEHICLE_WINDOW_ROW_3_RIGHT = 0x2000,
1402};
1403
Keun-young Parkcb354502016-02-08 18:15:55 -08001404enum vehicle_door {
1405 VEHICLE_DOOR_ROW_1_LEFT = 0x00000001,
1406 VEHICLE_DOOR_ROW_1_RIGHT = 0x00000004,
1407 VEHICLE_DOOR_ROW_2_LEFT = 0x00000010,
1408 VEHICLE_DOOR_ROW_2_RIGHT = 0x00000040,
1409 VEHICLE_DOOR_ROW_3_LEFT = 0x00000100,
1410 VEHICLE_DOOR_ROW_3_RIGHT = 0x00000400,
1411 VEHICLE_DOOR_HOOD = 0x10000000,
1412 VEHICLE_DOOR_REAR = 0x20000000,
1413};
1414
1415enum vehicle_mirror {
1416 VEHICLE_MIRROR_DRIVER_LEFT = 0x00000001,
1417 VEHICLE_MIRROR_DRIVER_RIGHT = 0x00000002,
1418 VEHICLE_MIRROR_DRIVER_CENTER = 0x00000004,
1419};
Sanket Agarwalfb636682015-08-11 14:34:29 -07001420enum vehicle_turn_signal {
1421 VEHICLE_SIGNAL_NONE = 0x00,
1422 VEHICLE_SIGNAL_RIGHT = 0x01,
1423 VEHICLE_SIGNAL_LEFT = 0x02,
1424 VEHICLE_SIGNAL_EMERGENCY = 0x04
1425};
1426
1427/*
1428 * Boolean type.
1429 */
1430enum vehicle_boolean {
1431 VEHICLE_FALSE = 0x00,
1432 VEHICLE_TRUE = 0x01
1433};
1434
1435typedef int32_t vehicle_boolean_t;
1436
1437/**
1438 * Vehicle string.
1439 *
1440 * Defines a UTF8 encoded sequence of bytes that should be used for string
1441 * representation throughout.
1442 */
1443typedef struct vehicle_str {
1444 uint8_t* data;
1445 int32_t len;
1446} vehicle_str_t;
1447
1448/**
1449 * Vehicle byte array.
1450 * This is for passing generic raw data.
1451 */
1452typedef vehicle_str_t vehicle_bytes_t;
1453
Sanket Agarwalfb636682015-08-11 14:34:29 -07001454typedef struct vehicle_prop_config {
1455 int32_t prop;
1456
1457 /**
1458 * Defines if the property is read or write. Value should be one of
1459 * enum vehicle_prop_access.
1460 */
1461 int32_t access;
1462
1463 /**
1464 * Defines if the property is continuous or on-change. Value should be one
1465 * of enum vehicle_prop_change_mode.
1466 */
1467 int32_t change_mode;
1468
1469 /**
1470 * Type of data used for this property. This type is fixed per each property.
1471 * Check vehicle_value_type for allowed value.
1472 */
1473 int32_t value_type;
1474
1475 /**
1476 * Define necessary permission model to access the data.
1477 */
1478 int32_t permission_model;
Keun-young Parkab68e372016-03-10 16:28:42 -08001479
Sanket Agarwalfb636682015-08-11 14:34:29 -07001480 /**
1481 * Some of the properties may have associated zones (such as hvac), in these
1482 * cases the config should contain an ORed value for the associated zone.
1483 */
1484 union {
1485 /**
Sanket Agarwalfb636682015-08-11 14:34:29 -07001486 * The value is derived by ORing one or more of enum vehicle_zone members.
1487 */
1488 int32_t vehicle_zone_flags;
1489 /** The value is derived by ORing one or more of enum vehicle_seat members. */
1490 int32_t vehicle_seat_flags;
1491 /** The value is derived by ORing one or more of enum vehicle_window members. */
1492 int32_t vehicle_window_flags;
Keun-young Parkab68e372016-03-10 16:28:42 -08001493 };
Sanket Agarwalfb636682015-08-11 14:34:29 -07001494
Keun-young Parkab68e372016-03-10 16:28:42 -08001495 /**
1496 * Property specific configuration information. Usage of this will be defined per each property.
1497 */
1498 union {
1499 /**
1500 * For generic configuration information
1501 */
1502 int32_t config_flags;
Sanket Agarwalfb636682015-08-11 14:34:29 -07001503 /** The number of presets that are stored by the radio module. Pass 0 if
1504 * there are no presets available. The range of presets is defined to be
1505 * from 1 (see VEHICLE_RADIO_PRESET_MIN_VALUE) to vehicle_radio_num_presets.
1506 */
1507 int32_t vehicle_radio_num_presets;
Keun-young Parkbf877a72015-12-21 14:16:05 -08001508 int32_t config_array[4];
Sanket Agarwalfb636682015-08-11 14:34:29 -07001509 };
1510
1511 /**
1512 * Some properties may require additional information passed over this string. Most properties
1513 * do not need to set this and in that case, config_string.data should be NULL and
1514 * config_string.len should be 0.
1515 */
1516 vehicle_str_t config_string;
1517
1518 /**
1519 * Specify minimum allowed value for the property. This is necessary for property which does
1520 * not have specified enum.
1521 */
1522 union {
1523 float float_min_value;
1524 int32_t int32_min_value;
1525 int64_t int64_min_value;
1526 };
1527
1528 /**
1529 * Specify maximum allowed value for the property. This is necessary for property which does
1530 * not have specified enum.
1531 */
1532 union {
1533 float float_max_value;
1534 int32_t int32_max_value;
1535 int64_t int64_max_value;
1536 };
1537
1538 /**
Keun-young Parkfe599a82016-02-12 14:26:57 -08001539 * Array of min values for zoned properties. Zoned property can specify min / max value in two
1540 * different ways:
1541 * 1. All zones having the same min / max value: *_min/max_value should be set and this
1542 * array should be set to NULL.
1543 * 2. All zones having separate min / max value: *_min/max_values array should be populated
1544 * and its length should be the same as number of active zones specified by *_zone_flags.
Keun-young Parkab68e372016-03-10 16:28:42 -08001545 *
1546 * Should be NULL if each zone does not have separate max values.
Keun-young Parkfe599a82016-02-12 14:26:57 -08001547 */
1548 union {
1549 float* float_min_values;
1550 int32_t* int32_min_values;
1551 int64_t* int64_min_values;
1552 };
1553
1554 /**
1555 * Array of max values for zoned properties. See above for its usage.
Keun-young Parkab68e372016-03-10 16:28:42 -08001556 * Should be NULL if each zone does not have separate max values.
1557 * If not NULL, length of array should match that of min_values.
Keun-young Parkfe599a82016-02-12 14:26:57 -08001558 */
1559 union {
1560 float* float_max_values;
1561 int32_t* int32_max_values;
1562 int64_t* int64_max_values;
1563 };
1564
1565 /**
Sanket Agarwalfb636682015-08-11 14:34:29 -07001566 * Min sample rate in Hz. Should be 0 for sensor type of VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1567 */
1568 float min_sample_rate;
1569 /**
1570 * Max sample rate in Hz. Should be 0 for sensor type of VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
1571 */
1572 float max_sample_rate;
1573 /**
1574 * Place holder for putting HAL implementation specific data. Usage is wholly up to HAL
1575 * implementation.
1576 */
1577 void* hal_data;
1578} vehicle_prop_config_t;
1579
1580/**
1581 * HVAC property fields.
1582 *
1583 * Defines various HVAC properties which are packed into vehicle_hvac_t (see
1584 * below). We define these properties outside in global scope so that HAL
1585 * implementation and HAL users (JNI) can typecast vehicle_hvac correctly.
1586 */
Sanket Agarwalfb636682015-08-11 14:34:29 -07001587typedef struct vehicle_hvac {
1588 /**
1589 * Define one structure for each possible HVAC property.
1590 * NOTES:
Keun-young Parkab68e372016-03-10 16:28:42 -08001591 * a) Fan speed is a number from (0 - 6) where 6 is the highest speed. (TODO define enum)
1592 * b) Temperature is a floating point Celcius scale.
1593 * c) Direction is defined in enum vehicle_fan_direction.
Sanket Agarwalfb636682015-08-11 14:34:29 -07001594 *
1595 * The HAL should create #entries number of vehicle_hvac_properties and
1596 * assign it to "properties" variable below.
1597 */
1598 union {
Keun-young Parkab68e372016-03-10 16:28:42 -08001599 int32_t fan_speed;
1600 int32_t fan_direction;
1601 vehicle_boolean_t ac_on;
1602 vehicle_boolean_t max_ac_on;
1603 vehicle_boolean_t max_defrost_on;
1604 vehicle_boolean_t recirc_on;
1605 vehicle_boolean_t dual_on;
Steve Paik670e7ab2016-04-29 16:32:02 -07001606 vehicle_boolean_t auto_on;
Keun-young Park418c7e82016-04-06 10:44:20 -07001607 vehicle_boolean_t power_on;
Sanket Agarwalfb636682015-08-11 14:34:29 -07001608
Keun-young Parkab68e372016-03-10 16:28:42 -08001609 float temperature_current;
1610 float temperature_set;
Sanket Agarwalfb636682015-08-11 14:34:29 -07001611
Keun-young Parkab68e372016-03-10 16:28:42 -08001612 vehicle_boolean_t defrost_on;
Sanket Agarwalfb636682015-08-11 14:34:29 -07001613 };
1614} vehicle_hvac_t;
1615
1616/*
1617 * Defines how the values for various properties are represented.
1618 *
1619 * There are two ways to populate and access the fields:
1620 * a) Using the individual fields. Use this mechanism (see
1621 * info_manufacture_date, fuel_capacity fields etc).
1622 * b) Using the union accessors (see uint32_value, float_value etc).
1623 *
1624 * To add a new field make sure that it does not exceed the total union size
1625 * (defined in int_array) and it is one of the vehicle_value_type. Then add the
1626 * field name with its unit to union. If the field type is not yet defined (as
1627 * of this draft, we don't use int64_t) then add that type to vehicle_value_type
1628 * and have an accessor (so for int64_t it will be int64_t int64_value).
1629 */
1630typedef union vehicle_value {
1631 /** Define the max size of this structure. */
1632 int32_t int32_array[4];
1633 float float_array[4];
1634
1635 // Easy accessors for union members (HAL implementation SHOULD NOT USE these
1636 // fields while populating, use the property specific fields below instead).
1637 int32_t int32_value;
1638 int64_t int64_value;
1639 float float_value;
1640 vehicle_str_t str_value;
1641 vehicle_bytes_t bytes_value;
1642 vehicle_boolean_t boolean_value;
Sanket Agarwalfb636682015-08-11 14:34:29 -07001643
1644 // Vehicle Information.
1645 vehicle_str_t info_vin;
1646 vehicle_str_t info_make;
1647 vehicle_str_t info_model;
1648 int32_t info_model_year;
1649
1650 // Represented in milliliters.
1651 float info_fuel_capacity;
1652
1653 float vehicle_speed;
1654 float odometer;
1655
1656 // Engine sensors.
1657
1658 // Represented in milliliters.
1659 //float engine_coolant_level;
1660 // Represented in celcius.
1661 float engine_coolant_temperature;
1662 // Represented in a percentage value.
1663 //float engine_oil_level;
1664 // Represented in celcius.
1665 float engine_oil_temperature;
1666 float engine_rpm;
1667
1668 // Event sensors.
1669 // Value should be one of enum vehicle_gear_selection.
1670 int32_t gear_selection;
1671 // Value should be one of enum vehicle_gear.
1672 int32_t gear_current_gear;
1673 // Value should be one of enum vehicle_boolean.
1674 int32_t parking_brake;
1675 // If cruise_set_speed > 0 then cruise is ON otherwise cruise is OFF.
1676 // Unit: meters / second (m/s).
1677 //int32_t cruise_set_speed;
1678 // Value should be one of enum vehicle_boolean.
1679 int32_t is_fuel_level_low;
1680 // Value should be one of enum vehicle_driving_status.
1681 int32_t driving_status;
1682 int32_t night_mode;
1683 // Value should be one of emum vehicle_turn_signal.
1684 int32_t turn_signals;
1685 // Value should be one of enum vehicle_boolean.
1686 //int32_t engine_on;
1687
1688 // HVAC properties.
1689 vehicle_hvac_t hvac;
1690
1691 float outside_temperature;
Keun-young Parkcb354502016-02-08 18:15:55 -08001692 float cabin_temperature;
1693
Sanket Agarwalfb636682015-08-11 14:34:29 -07001694} vehicle_value_t;
1695
1696/*
1697 * Encapsulates the property name and the associated value. It
1698 * is used across various API calls to set values, get values or to register for
1699 * events.
1700 */
1701typedef struct vehicle_prop_value {
1702 /* property identifier */
1703 int32_t prop;
1704
1705 /* value type of property for quick conversion from union to appropriate
1706 * value. The value must be one of enum vehicle_value_type.
1707 */
1708 int32_t value_type;
1709
1710 /** time is elapsed nanoseconds since boot */
1711 int64_t timestamp;
1712
Keun-young Parkab68e372016-03-10 16:28:42 -08001713 /**
1714 * Zone information for zoned property. For non-zoned property, this should be ignored.
1715 */
1716 union {
1717 int32_t zone;
1718 int32_t seat;
1719 int32_t window;
1720 };
1721
Sanket Agarwalfb636682015-08-11 14:34:29 -07001722 vehicle_value_t value;
1723} vehicle_prop_value_t;
1724
1725/*
1726 * Event callback happens whenever a variable that the API user has subscribed
1727 * to needs to be reported. This may be based purely on threshold and frequency
1728 * (a regular subscription, see subscribe call's arguments) or when the set()
1729 * command is executed and the actual change needs to be reported.
1730 *
1731 * event_data is OWNED by the HAL and should be copied before the callback
1732 * finishes.
1733 */
1734typedef int (*vehicle_event_callback_fn)(const vehicle_prop_value_t *event_data);
1735
1736
1737/**
1738 * Represent the operation where the current error has happened.
1739 */
1740enum vehicle_property_operation {
1741 /** Generic error to this property which is not tied to any operation. */
1742 VEHICLE_OPERATION_GENERIC = 0,
1743 /** Error happened while handling property set. */
1744 VEHICLE_OPERATION_SET = 1,
1745 /** Error happened while handling property get. */
1746 VEHICLE_OPERATION_GET = 2,
1747 /** Error happened while handling property subscription. */
1748 VEHICLE_OPERATION_SUBSCRIBE = 3,
1749};
1750
1751/*
Keun-young Parkab68e372016-03-10 16:28:42 -08001752 * Suggests that an error condition has occurred.
Sanket Agarwalfb636682015-08-11 14:34:29 -07001753 *
Keun-young Parkab68e372016-03-10 16:28:42 -08001754 * @param error_code Error code. error_code should be standard error code with
1755 * negative value like -EINVAL.
Sanket Agarwalfb636682015-08-11 14:34:29 -07001756 * @parm property Note a property where error has happened. If this is generic error, property
1757 * should be VEHICLE_PROPERTY_INVALID.
1758 * @param operation Represent the operation where the error has happened. Should be one of
1759 * vehicle_property_operation.
1760 */
1761typedef int (*vehicle_error_callback_fn)(int32_t error_code, int32_t property, int32_t operation);
1762
1763/************************************************************************************/
1764
1765/*
1766 * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM
1767 * and the fields of this data structure must begin with hw_module_t
1768 * followed by module specific information.
1769 */
1770typedef struct vehicle_module {
1771 struct hw_module_t common;
1772} vehicle_module_t;
1773
1774
1775typedef struct vehicle_hw_device {
1776 struct hw_device_t common;
1777
1778 /**
1779 * After calling open on device the user should register callbacks for event and error
1780 * functions.
1781 */
1782 int (*init)(struct vehicle_hw_device* device,
1783 vehicle_event_callback_fn event_fn, vehicle_error_callback_fn err_fn);
1784 /**
1785 * Before calling close the user should destroy the registered callback
1786 * functions.
1787 * In case the unsubscribe() call is not called on all properties before
1788 * release() then release() will unsubscribe the properties itself.
1789 */
1790 int (*release)(struct vehicle_hw_device* device);
1791
1792 /**
1793 * Enumerate all available properties. The list is returned in "list".
1794 * @param num_properties number of properties contained in the retuned array.
1795 * @return array of property configs supported by this car. Note that returned data is const
1796 * and caller cannot modify it. HAL implementation should keep this memory until HAL
1797 * is released to avoid copying this again.
1798 */
1799 vehicle_prop_config_t const *(*list_properties)(struct vehicle_hw_device* device,
1800 int* num_properties);
1801
1802 /**
1803 * Get a vehicle property value immediately. data should be allocated
1804 * properly.
1805 * The caller of the API OWNS the data field.
Keun-young Park08c255e2015-12-09 13:47:30 -08001806 * Caller will set data->prop, data->value_type, and optionally zone value for zoned property.
1807 * But HAL implementation needs to fill all entries properly when returning.
Sanket Agarwalfb636682015-08-11 14:34:29 -07001808 * For pointer type, HAL implementation should allocate necessary memory and caller is
Keun-young Parkab68e372016-03-10 16:28:42 -08001809 * responsible for calling release_memory_from_get, which allows HAL to release allocated
1810 * memory.
Sanket Agarwalfb636682015-08-11 14:34:29 -07001811 * For VEHICLE_PROP_CHANGE_MODE_STATIC type of property, get should return the same value
1812 * always.
1813 * For VEHICLE_PROP_CHANGE_MODE_ON_CHANGE type of property, it should return the latest value.
Keun-young Parkab68e372016-03-10 16:28:42 -08001814 * If there is no data available yet, which can happen during initial stage, this call should
1815 * return immediately with error code of -EAGAIN.
Sanket Agarwalfb636682015-08-11 14:34:29 -07001816 */
1817 int (*get)(struct vehicle_hw_device* device, vehicle_prop_value_t *data);
1818
1819 /**
Keun-young Parkab68e372016-03-10 16:28:42 -08001820 * Release memory allocated to data in previous get call. get call for byte or string involves
1821 * allocating necessary memory from vehicle hal.
1822 * To be safe, memory allocated by vehicle hal should be released by vehicle hal and vehicle
1823 * network service will call this when data from vehicle hal is no longer necessary.
1824 * vehicle hal implementation should only release member of vehicle_prop_value_t like
1825 * data->str_value.data or data->bytes_value.data but not data itself as data itself is
1826 * allocated from vehicle network service. Once memory is freed, corresponding pointer should
1827 * be set to NULL bu vehicle hal.
1828 */
1829 void (*release_memory_from_get)(struct vehicle_hw_device* device, vehicle_prop_value_t *data);
1830
1831 /**
Sanket Agarwalfb636682015-08-11 14:34:29 -07001832 * Set a vehicle property value. data should be allocated properly and not
1833 * NULL.
1834 * The caller of the API OWNS the data field.
1835 * timestamp of data will be ignored for set operation.
Keun-young Park418c7e82016-04-06 10:44:20 -07001836 * Setting some properties require having initial state available. Depending on the vehicle hal,
1837 * such initial data may not be available for short time after init. In such case, set call
1838 * can return -EAGAIN like get call.
Keun-young Parkf7097582016-04-25 18:10:45 -07001839 * For a property with separate power control, set can fail if the property is not powered on.
1840 * In such case, hal should return -ESHUTDOWN error.
Sanket Agarwalfb636682015-08-11 14:34:29 -07001841 */
1842 int (*set)(struct vehicle_hw_device* device, const vehicle_prop_value_t *data);
1843
1844 /**
1845 * Subscribe to events.
1846 * Depending on output of list_properties if the property is:
1847 * a) on-change: sample_rate should be set to 0.
1848 * b) supports frequency: sample_rate should be set from min_sample_rate to
1849 * max_sample_rate.
Keun-young Park418c7e82016-04-06 10:44:20 -07001850 * For on-change type of properties, vehicle network service will make another get call to check
1851 * the initial state. Due to this, vehicle hal implementation does not need to send initial
1852 * state for on-change type of properties.
Sanket Agarwalfb636682015-08-11 14:34:29 -07001853 * @param device
1854 * @param prop
1855 * @param sample_rate
Keun-young Parkbf877a72015-12-21 14:16:05 -08001856 * @param zones All subscribed zones for zoned property. can be ignored for non-zoned property.
1857 * 0 means all zones supported instead of no zone.
Sanket Agarwalfb636682015-08-11 14:34:29 -07001858 */
Keun-young Parkbf877a72015-12-21 14:16:05 -08001859 int (*subscribe)(struct vehicle_hw_device* device, int32_t prop, float sample_rate,
1860 int32_t zones);
Sanket Agarwalfb636682015-08-11 14:34:29 -07001861
1862 /** Cancel subscription on a property. */
1863 int (*unsubscribe)(struct vehicle_hw_device* device, int32_t prop);
Keun-young Park418c7e82016-04-06 10:44:20 -07001864
1865 /**
1866 * Print out debugging state for the vehicle hal. This will be called by
1867 * the vehicle network service and will be included into the service' dump.
1868 *
1869 * The passed-in file descriptor can be used to write debugging text using
1870 * dprintf() or write(). The text should be in ASCII encoding only.
1871 *
1872 * Performance requirements:
1873 *
1874 * This must be a non-blocking call. The HAL should return from this call
1875 * in 1ms, must return from this call in 10ms. This call must avoid
1876 * deadlocks, as it may be called at any point of operation.
1877 * Any synchronization primitives used (such as mutex locks or semaphores)
1878 * should be acquired with a timeout.
1879 */
1880 int (*dump)(struct vehicle_hw_device* device, int fd);
1881
Sanket Agarwalfb636682015-08-11 14:34:29 -07001882} vehicle_hw_device_t;
1883
1884__END_DECLS
1885
1886#endif // ANDROID_VEHICLE_INTERFACE_H