• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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_hardware_automotive_vehicle_V2_0_impl_DefaultConfig_H_
18 #define android_hardware_automotive_vehicle_V2_0_impl_DefaultConfig_H_
19 
20 #include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
21 #include <vhal_v2_0/VehicleUtils.h>
22 
23 namespace android {
24 namespace hardware {
25 namespace automotive {
26 namespace vehicle {
27 namespace V2_0 {
28 
29 namespace impl {
30 //
31 // Some handy constants to avoid conversions from enum to int.
32 constexpr int ABS_ACTIVE = (int)VehicleProperty::ABS_ACTIVE;
33 constexpr int AP_POWER_STATE_REQ = (int)VehicleProperty::AP_POWER_STATE_REQ;
34 constexpr int AP_POWER_STATE_REPORT = (int)VehicleProperty::AP_POWER_STATE_REPORT;
35 constexpr int DOOR_1_LEFT = (int)VehicleAreaDoor::ROW_1_LEFT;
36 constexpr int DOOR_1_RIGHT = (int)VehicleAreaDoor::ROW_1_RIGHT;
37 constexpr int OBD2_LIVE_FRAME = (int)VehicleProperty::OBD2_LIVE_FRAME;
38 constexpr int OBD2_FREEZE_FRAME = (int)VehicleProperty::OBD2_FREEZE_FRAME;
39 constexpr int OBD2_FREEZE_FRAME_INFO = (int)VehicleProperty::OBD2_FREEZE_FRAME_INFO;
40 constexpr int OBD2_FREEZE_FRAME_CLEAR = (int)VehicleProperty::OBD2_FREEZE_FRAME_CLEAR;
41 constexpr int TRACTION_CONTROL_ACTIVE = (int)VehicleProperty::TRACTION_CONTROL_ACTIVE;
42 constexpr int VEHICLE_MAP_SERVICE = (int)VehicleProperty::VEHICLE_MAP_SERVICE;
43 constexpr int WHEEL_TICK = (int)VehicleProperty::WHEEL_TICK;
44 constexpr int ALL_WHEELS =
45     (int)(VehicleAreaWheel::LEFT_FRONT | VehicleAreaWheel::RIGHT_FRONT |
46           VehicleAreaWheel::LEFT_REAR | VehicleAreaWheel::RIGHT_REAR);
47 constexpr int HVAC_LEFT = (int)(VehicleAreaSeat::ROW_1_LEFT | VehicleAreaSeat::ROW_2_LEFT |
48                                 VehicleAreaSeat::ROW_2_CENTER);
49 constexpr int HVAC_RIGHT = (int)(VehicleAreaSeat::ROW_1_RIGHT | VehicleAreaSeat::ROW_2_RIGHT);
50 constexpr int HVAC_ALL = HVAC_LEFT | HVAC_RIGHT;
51 
52 /**
53  * This property is used for test purpose to generate fake events. Here is the test package that
54  * is referencing this property definition: packages/services/Car/tests/vehiclehal_test
55  */
56 const int32_t kGenerateFakeDataControllingProperty =
57     0x0666 | VehiclePropertyGroup::VENDOR | VehicleArea::GLOBAL | VehiclePropertyType::MIXED;
58 
59 /**
60  * FakeDataCommand enum defines the supported command type for kGenerateFakeDataControllingProperty.
61  * All those commands can be send independently with each other. And each will override the one sent
62  * previously.
63  *
64  * The controlling property has the following format:
65  *
66  *     int32Values[0] - command enum defined in FakeDataCommand
67  *
68  * The format of the arguments is defined for each command type as below:
69  */
70 enum class FakeDataCommand : int32_t {
71     /**
72      * Starts linear fake data generation. Caller must provide additional data:
73      *     int32Values[1] - VehicleProperty to which command applies
74      *     int64Values[0] - periodic interval in nanoseconds
75      *     floatValues[0] - initial value
76      *     floatValues[1] - dispersion defines the min/max value relative to initial value, where
77      *                      max = initial_value + dispersion, min = initial_value - dispersion.
78      *                      Dispersion should be non-negative, otherwise the behavior is undefined.
79      *     floatValues[2] - increment, with every timer tick the value will be incremented by this
80      *                      amount. When reaching to max value, the current value will be set to min.
81      *                      It should be non-negative, otherwise the behavior is undefined.
82      */
83     StartLinear = 0,
84 
85     /** Stops generating of fake data that was triggered by Start commands.
86      *     int32Values[1] - VehicleProperty to which command applies. VHAL will stop the
87      *                      corresponding linear generation for that property.
88      */
89     StopLinear = 1,
90 
91     /**
92      * Starts JSON-based fake data generation. Caller must provide a string value specifying
93      * the path to fake value JSON file:
94      *     stringValue    - path to the fake values JSON file
95      */
96     StartJson = 2,
97 
98     /**
99      * Stops JSON-based fake data generation. No additional arguments needed.
100      */
101     StopJson = 3,
102 
103     /**
104      * Injects key press event (HAL incorporates UP/DOWN acction and triggers 2 HAL events for every
105      * key-press). We set the enum with high number to leave space for future start/stop commands.
106      * Caller must provide the following data:
107      *     int32Values[2] - Android key code
108      *     int32Values[3] - target display (0 - for main display, 1 - for instrument cluster, see
109      *                      VehicleDisplay)
110      */
111     KeyPress = 100,
112 };
113 
114 const int32_t kHvacPowerProperties[] = {
115     toInt(VehicleProperty::HVAC_FAN_SPEED),
116     toInt(VehicleProperty::HVAC_FAN_DIRECTION),
117 };
118 
119 struct ConfigDeclaration {
120     VehiclePropConfig config;
121 
122     /* This value will be used as an initial value for the property. If this field is specified for
123      * property that supports multiple areas then it will be used for all areas unless particular
124      * area is overridden in initialAreaValue field. */
125     VehiclePropValue::RawValue initialValue;
126     /* Use initialAreaValues if it is necessary to specify different values per each area. */
127     std::map<int32_t, VehiclePropValue::RawValue> initialAreaValues;
128 };
129 
130 const ConfigDeclaration kVehicleProperties[]{
131     {.config =
132          {
133              .prop = toInt(VehicleProperty::INFO_FUEL_CAPACITY),
134              .access = VehiclePropertyAccess::READ,
135              .changeMode = VehiclePropertyChangeMode::STATIC,
136          },
137      .initialValue = {.floatValues = {15000}}},
138 
139     {.config =
140          {
141              .prop = toInt(VehicleProperty::INFO_FUEL_TYPE),
142              .access = VehiclePropertyAccess::READ,
143              .changeMode = VehiclePropertyChangeMode::STATIC,
144          },
145      .initialValue = {.int32Values = {1}}},
146 
147     {.config =
148          {
149              .prop = toInt(VehicleProperty::INFO_EV_BATTERY_CAPACITY),
150              .access = VehiclePropertyAccess::READ,
151              .changeMode = VehiclePropertyChangeMode::STATIC,
152          },
153      .initialValue = {.floatValues = {150000}}},
154 
155     {.config =
156          {
157              .prop = toInt(VehicleProperty::INFO_EV_CONNECTOR_TYPE),
158              .access = VehiclePropertyAccess::READ,
159              .changeMode = VehiclePropertyChangeMode::STATIC,
160          },
161      .initialValue = {.int32Values = {1}}},
162 
163     {.config =
164          {
165              .prop = toInt(VehicleProperty::INFO_MAKE),
166              .access = VehiclePropertyAccess::READ,
167              .changeMode = VehiclePropertyChangeMode::STATIC,
168          },
169      .initialValue = {.stringValue = "Toy Vehicle"}},
170     {.config =
171          {
172              .prop = toInt(VehicleProperty::PERF_VEHICLE_SPEED),
173              .access = VehiclePropertyAccess::READ,
174              .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
175              .minSampleRate = 1.0f,
176              .maxSampleRate = 10.0f,
177          },
178      .initialValue = {.floatValues = {0.0f}}},
179 
180     {.config =
181          {
182              .prop = toInt(VehicleProperty::PERF_ODOMETER),
183              .access = VehiclePropertyAccess::READ,
184              .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
185          },
186      .initialValue = {.floatValues = {0.0f}}},
187 
188     {
189         .config =
190             {
191                 .prop = toInt(VehicleProperty::ENGINE_RPM),
192                 .access = VehiclePropertyAccess::READ,
193                 .changeMode = VehiclePropertyChangeMode::CONTINUOUS,
194                 .minSampleRate = 1.0f,
195                 .maxSampleRate = 10.0f,
196             },
197         .initialValue = {.floatValues = {0.0f}},
198     },
199 
200     {.config =
201          {
202              .prop = toInt(VehicleProperty::FUEL_LEVEL),
203              .access = VehiclePropertyAccess::READ,
204              .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
205          },
206      .initialValue = {.floatValues = {15000}}},
207 
208     {.config =
209          {
210              .prop = toInt(VehicleProperty::FUEL_DOOR_OPEN),
211              .access = VehiclePropertyAccess::READ,
212              .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
213          },
214      .initialValue = {.int32Values = {0}}},
215 
216     {.config =
217          {
218              .prop = toInt(VehicleProperty::EV_BATTERY_LEVEL),
219              .access = VehiclePropertyAccess::READ,
220              .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
221          },
222      .initialValue = {.floatValues = {150000}}},
223 
224     {.config =
225          {
226              .prop = toInt(VehicleProperty::EV_CHARGE_PORT_OPEN),
227              .access = VehiclePropertyAccess::READ,
228              .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
229          },
230      .initialValue = {.int32Values = {0}}},
231 
232     {.config =
233          {
234              .prop = toInt(VehicleProperty::EV_CHARGE_PORT_CONNECTED),
235              .access = VehiclePropertyAccess::READ,
236              .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
237          },
238      .initialValue = {.int32Values = {0}}},
239 
240     {.config =
241          {
242              .prop = toInt(VehicleProperty::EV_BATTERY_INSTANTANEOUS_CHARGE_RATE),
243              .access = VehiclePropertyAccess::READ,
244              .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
245          },
246      .initialValue = {.floatValues = {0}}},
247 
248     {.config =
249          {
250              .prop = toInt(VehicleProperty::CURRENT_GEAR),
251              .access = VehiclePropertyAccess::READ,
252              .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
253          },
254      .initialValue = {.int32Values = {toInt(VehicleGear::GEAR_PARK)}}},
255 
256     {.config =
257          {
258              .prop = toInt(VehicleProperty::PARKING_BRAKE_ON),
259              .access = VehiclePropertyAccess::READ,
260              .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
261          },
262      .initialValue = {.int32Values = {1}}},
263 
264     {.config =
265          {
266              .prop = toInt(VehicleProperty::FUEL_LEVEL_LOW),
267              .access = VehiclePropertyAccess::READ,
268              .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
269          },
270      .initialValue = {.int32Values = {0}}},
271 
272     {.config =
273          {
274              .prop = toInt(VehicleProperty::HW_KEY_INPUT),
275              .access = VehiclePropertyAccess::READ,
276              .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
277          },
278      .initialValue = {.int32Values = {0, 0, 0}}},
279 
280     {.config = {.prop = toInt(VehicleProperty::HVAC_POWER_ON),
281                 .access = VehiclePropertyAccess::READ_WRITE,
282                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
283                 .areaConfigs = {VehicleAreaConfig{.areaId = HVAC_ALL}},
284                 // TODO(bryaneyler): Ideally, this is generated dynamically from
285                 // kHvacPowerProperties.
286                 .configArray =
287                     {
288                         0x12400500,  // HVAC_FAN_SPEED
289                         0x12400501   // HVAC_FAN_DIRECTION
290                     }},
291      .initialValue = {.int32Values = {1}}},
292 
293     {
294         .config = {.prop = toInt(VehicleProperty::HVAC_DEFROSTER),
295                    .access = VehiclePropertyAccess::READ_WRITE,
296                    .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
297                    .areaConfigs =
298                        {VehicleAreaConfig{.areaId = toInt(VehicleAreaWindow::FRONT_WINDSHIELD)},
299                         VehicleAreaConfig{.areaId = toInt(VehicleAreaWindow::REAR_WINDSHIELD)}}},
300         .initialValue = {.int32Values = {0}}  // Will be used for all areas.
301     },
302 
303     {.config = {.prop = toInt(VehicleProperty::HVAC_MAX_DEFROST_ON),
304                 .access = VehiclePropertyAccess::READ_WRITE,
305                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
306                 .areaConfigs = {VehicleAreaConfig{.areaId = HVAC_ALL}}},
307      .initialValue = {.int32Values = {0}}},
308 
309     {.config = {.prop = toInt(VehicleProperty::HVAC_RECIRC_ON),
310                 .access = VehiclePropertyAccess::READ_WRITE,
311                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
312                 .areaConfigs = {VehicleAreaConfig{.areaId = HVAC_ALL}}},
313      .initialValue = {.int32Values = {1}}},
314 
315     {.config = {.prop = toInt(VehicleProperty::HVAC_AUTO_RECIRC_ON),
316                 .access = VehiclePropertyAccess::READ_WRITE,
317                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
318                 .areaConfigs = {VehicleAreaConfig{.areaId = HVAC_ALL}}},
319      .initialValue = {.int32Values = {0}}},
320 
321     {.config = {.prop = toInt(VehicleProperty::HVAC_AC_ON),
322                 .access = VehiclePropertyAccess::READ_WRITE,
323                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
324                 .areaConfigs = {VehicleAreaConfig{.areaId = HVAC_ALL}}},
325      .initialValue = {.int32Values = {1}}},
326 
327     {.config = {.prop = toInt(VehicleProperty::HVAC_MAX_AC_ON),
328                 .access = VehiclePropertyAccess::READ_WRITE,
329                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
330                 .areaConfigs = {VehicleAreaConfig{.areaId = HVAC_ALL}}},
331      .initialValue = {.int32Values = {0}}},
332 
333     {.config = {.prop = toInt(VehicleProperty::HVAC_AUTO_ON),
334                 .access = VehiclePropertyAccess::READ_WRITE,
335                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
336                 .areaConfigs = {VehicleAreaConfig{.areaId = HVAC_ALL}}},
337      .initialValue = {.int32Values = {1}}},
338 
339     {.config = {.prop = toInt(VehicleProperty::HVAC_DUAL_ON),
340                 .access = VehiclePropertyAccess::READ_WRITE,
341                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
342                 .areaConfigs = {VehicleAreaConfig{.areaId = HVAC_ALL}}},
343      .initialValue = {.int32Values = {0}}},
344 
345     {.config = {.prop = toInt(VehicleProperty::HVAC_FAN_SPEED),
346                 .access = VehiclePropertyAccess::READ_WRITE,
347                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
348                 .areaConfigs = {VehicleAreaConfig{
349                     .areaId = HVAC_ALL, .minInt32Value = 1, .maxInt32Value = 7}}},
350      .initialValue = {.int32Values = {3}}},
351 
352     {.config = {.prop = toInt(VehicleProperty::HVAC_FAN_DIRECTION),
353                 .access = VehiclePropertyAccess::READ_WRITE,
354                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
355                 .areaConfigs = {VehicleAreaConfig{.areaId = HVAC_ALL}}},
356      .initialValue = {.int32Values = {toInt(VehicleHvacFanDirection::FACE)}}},
357 
358     {.config = {.prop = toInt(VehicleProperty::HVAC_STEERING_WHEEL_HEAT),
359                 .access = VehiclePropertyAccess::READ_WRITE,
360                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
361                 .areaConfigs = {VehicleAreaConfig{
362                     .areaId = (0), .minInt32Value = -2, .maxInt32Value = 2}}},
363      .initialValue = {.int32Values = {0}}},  // +ve values for heating and -ve for cooling
364 
365     {.config = {.prop = toInt(VehicleProperty::HVAC_TEMPERATURE_SET),
366                 .access = VehiclePropertyAccess::READ_WRITE,
367                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
368                 .areaConfigs = {VehicleAreaConfig{
369                                     .areaId = HVAC_LEFT, .minFloatValue = 16, .maxFloatValue = 32,
370                                 },
371                                 VehicleAreaConfig{
372                                     .areaId = HVAC_RIGHT, .minFloatValue = 16, .maxFloatValue = 32,
373                                 }}},
374      .initialAreaValues = {{HVAC_LEFT, {.floatValues = {16}}},
375                            {HVAC_RIGHT, {.floatValues = {20}}}}},
376 
377     {.config =
378          {
379              .prop = toInt(VehicleProperty::ENV_OUTSIDE_TEMPERATURE),
380              .access = VehiclePropertyAccess::READ,
381              // TODO(bryaneyler): Support ON_CHANGE as well.
382              .changeMode = VehiclePropertyChangeMode::CONTINUOUS,
383              .minSampleRate = 1.0f,
384              .maxSampleRate = 2.0f,
385          },
386      .initialValue = {.floatValues = {25.0f}}},
387 
388     {.config = {.prop = toInt(VehicleProperty::HVAC_TEMPERATURE_DISPLAY_UNITS),
389                 .access = VehiclePropertyAccess::READ_WRITE,
390                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
391                 .areaConfigs = {VehicleAreaConfig{.areaId = (0)}}},
392      .initialValue = {.int32Values = {(int)VehicleUnit::FAHRENHEIT}}},
393 
394     {.config =
395          {
396              .prop = toInt(VehicleProperty::NIGHT_MODE),
397              .access = VehiclePropertyAccess::READ,
398              .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
399          },
400      .initialValue = {.int32Values = {0}}},
401 
402     {.config =
403          {
404              .prop = toInt(VehicleProperty::GEAR_SELECTION),
405              .access = VehiclePropertyAccess::READ,
406              .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
407          },
408      .initialValue = {.int32Values = {toInt(VehicleGear::GEAR_PARK)}}},
409 
410     {.config =
411          {
412              .prop = toInt(VehicleProperty::IGNITION_STATE),
413              .access = VehiclePropertyAccess::READ,
414              .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
415          },
416      .initialValue = {.int32Values = {toInt(VehicleIgnitionState::ON)}}},
417 
418     {.config =
419          {
420              .prop = toInt(VehicleProperty::ENGINE_OIL_LEVEL),
421              .access = VehiclePropertyAccess::READ,
422              .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
423          },
424      .initialValue = {.int32Values = {toInt(VehicleOilLevel::NORMAL)}}},
425 
426     {.config =
427          {
428              .prop = toInt(VehicleProperty::ENGINE_OIL_TEMP),
429              .access = VehiclePropertyAccess::READ,
430              .changeMode = VehiclePropertyChangeMode::CONTINUOUS,
431              .minSampleRate = 0.1,  // 0.1 Hz, every 10 seconds
432              .maxSampleRate = 10,   // 10 Hz, every 100 ms
433          },
434      .initialValue = {.floatValues = {101.0f}}},
435 
436     {
437         .config =
438             {
439                 .prop = kGenerateFakeDataControllingProperty,
440                 .access = VehiclePropertyAccess::WRITE,
441                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
442             },
443     },
444 
445     {.config = {.prop = toInt(VehicleProperty::DOOR_LOCK),
446                 .access = VehiclePropertyAccess::READ,
447                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
448                 .areaConfigs = {VehicleAreaConfig{.areaId = DOOR_1_LEFT},
449                                 VehicleAreaConfig{.areaId = DOOR_1_RIGHT}}},
450      .initialAreaValues = {{DOOR_1_LEFT, {.int32Values = {1}}},
451                            {DOOR_1_RIGHT, {.int32Values = {1}}}}},
452 
453     {.config =
454          {
455              .prop = WHEEL_TICK,
456              .access = VehiclePropertyAccess::READ,
457              .changeMode = VehiclePropertyChangeMode::CONTINUOUS,
458              .configArray = {ALL_WHEELS, 50000, 50000, 50000, 50000},
459              .minSampleRate = 1.0f,
460              .maxSampleRate = 10.0f,
461          },
462      .initialValue = {.int64Values = {0, 100000, 200000, 300000, 400000}}},
463 
464     {.config = {.prop = ABS_ACTIVE,
465                 .access = VehiclePropertyAccess::READ,
466                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE},
467      .initialValue = {.int32Values = {0}}},
468 
469     {.config = {.prop = TRACTION_CONTROL_ACTIVE,
470                 .access = VehiclePropertyAccess::READ,
471                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE},
472      .initialValue = {.int32Values = {0}}},
473 
474     {.config = {.prop = toInt(VehicleProperty::AP_POWER_STATE_REQ),
475                 .access = VehiclePropertyAccess::READ,
476                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
477                 .configArray = {3}},
478      .initialValue = {.int32Values = {toInt(VehicleApPowerStateReq::ON_FULL), 0}}},
479 
480     {.config = {.prop = toInt(VehicleProperty::AP_POWER_STATE_REPORT),
481                 .access = VehiclePropertyAccess::WRITE,
482                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE},
483      .initialValue = {.int32Values = {toInt(VehicleApPowerStateReport::BOOT_COMPLETE), 0}}},
484 
485     {.config = {.prop = toInt(VehicleProperty::DISPLAY_BRIGHTNESS),
486                 .access = VehiclePropertyAccess::READ_WRITE,
487                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
488                 .areaConfigs = {VehicleAreaConfig{.minInt32Value = 0, .maxInt32Value = 100}}},
489      .initialValue = {.int32Values = {100}}},
490 
491     {.config = {.prop = toInt(VehicleProperty::AP_POWER_BOOTUP_REASON),
492                 .access = VehiclePropertyAccess::READ,
493                 .changeMode = VehiclePropertyChangeMode::STATIC},
494      .initialValue = {.int32Values = {toInt(VehicleApPowerBootupReason::USER_POWER_ON)}}},
495 
496     {
497         .config = {.prop = OBD2_LIVE_FRAME,
498                    .access = VehiclePropertyAccess::READ,
499                    .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
500                    .configArray = {0, 0}},
501     },
502 
503     {
504         .config = {.prop = OBD2_FREEZE_FRAME,
505                    .access = VehiclePropertyAccess::READ,
506                    .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
507                    .configArray = {0, 0}},
508     },
509 
510     {
511         .config = {.prop = OBD2_FREEZE_FRAME_INFO,
512                    .access = VehiclePropertyAccess::READ,
513                    .changeMode = VehiclePropertyChangeMode::ON_CHANGE},
514     },
515 
516     {
517         .config = {.prop = OBD2_FREEZE_FRAME_CLEAR,
518                    .access = VehiclePropertyAccess::WRITE,
519                    .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
520                    .configArray = {1}},
521     },
522 
523     {.config = {.prop = VEHICLE_MAP_SERVICE,
524                 .access = VehiclePropertyAccess::READ_WRITE,
525                 .changeMode = VehiclePropertyChangeMode::ON_CHANGE}},
526 };
527 
528 }  // impl
529 
530 }  // namespace V2_0
531 }  // namespace vehicle
532 }  // namespace automotive
533 }  // namespace hardware
534 }  // namespace android
535 
536 #endif // android_hardware_automotive_vehicle_V2_0_impl_DefaultConfig_H_
537