fixed zone issue
[profile/ivi/automotive-message-broker.git] / docs / amb.in.idl
1 /*! amb.idl
2 * \name @PROJECT_NAME@
3 * \version @PROJECT_VERSION@
4 * \brief This document describes the DBus interfaces and data types for the
5 * Automotive Message Broker API.  The data types are intended to as-close-as-
6 * possible be compatible with the W3C vehicle <a href="https://rawgit.com/w3c/automotive-bg/master/data_spec.html>data spec</a>.
7 */
8
9 /*!
10 * Variant
11 */
12 union Variant {
13   UInt8 uint8
14   Int8 int8
15   UInt16 uint16
16   Int16 int16
17   UInt32 uint32
18   Int32 int32
19   UInt32 uin32
20   Int64 int64
21   UInt64 uint64
22   Boolean boolean
23   Float float
24   Double double
25   String string
26   ByteBuffer bytebuffer
27 }
28
29 /*!
30 * Dictionary
31 */
32 map Dictionary {
33   String to Variant
34 }
35
36 /*!
37 * VehiclePropertyType
38 * \brief VehiclePropertyType is the base class for all Data types.
39 */
40 interface VehiclePropertyType {
41
42   /*!
43   * \brief time stamp marking the last time a property in the interface updated
44   */
45   attribute Double Time readonly
46
47   /*!
48   * \brief Zone in which the interface is situated.
49   */
50   attribute Zone Zone readonly
51
52   /*!
53   * \brief return dictionary of objectName and values for data between
54   * 'beginTime' and 'endTime'
55   * \arg beginTime time stamp in Seconds since Unix Epoc
56   * \arg endTime time stamp in Seconds since Unix Epoc
57   */
58   method GetHistory(Double beginTime, Double endTime) {
59     out{ Dictionary result}
60   }
61 }
62
63 enumeration Zone {
64   None = 0,
65   Front = 1,
66   Middle = 1 << 1,
67   Right = 1 << 2,
68   Left = 1 << 3,
69   Rear = 1 << 4,
70   Center = 1 << 5
71 }
72
73 /*! org.automotive.Manager
74  * \brief Manager is a helper interface for discovering and finding available objects
75  * Manager is a helper interface that helps inform of supported data types and find
76  * specified data type objects' path on DBus
77  * DBus Path: /
78  */
79 interface org.automotive.Manager  {
80
81   /*! List
82    *  \brief return supported properties
83   */
84   method List {
85     out { String[] }
86   }
87
88   /*!
89    * FindObject
90    *  \brief find the DBus object path matching the given "objectName" (ie "VehicleSpeed" is the object name for
91    * the DBus object at path: "/path/to/VehicleSpeed") or org.automotive.Manager.ObjectNotFound if the object
92    * name is not supported.
93    *
94    *  If the object path does not exist, it will be created.  The object path will be removed
95    *  when the last proccess that calls Find* disconnects from DBus.
96    *
97    *  \arg String objectName to find
98    *  \return list of object paths that provide the given object Name.
99   */
100   method FindObject {
101     in {
102       String objectName
103     }
104     out {
105       String[] objectPaths
106     }
107   }
108
109   /*!
110    * FindObjectForZone
111    *  \brief find the DBus object path which matches "objectName" and "zone".  This has the same behavior as FindObject
112    * except that it takes an addition zone argument and only return the path for that zone.
113    *  \arg String property is the requested property to be retrieved.
114    *  \arg Zone zone is the zone which the object
115    *  \return string representing the DBus Object path.  Possible errors:
116    * "org.automotive.Manager.InvalidZone"
117    * "org.automotive.Manager.ObjectNotFound"
118   */
119   method FindObjectForZone {
120     in {
121       String objectName
122       Zone zone
123     }
124     out {
125       String objectPath
126     }
127   }
128
129   /*!
130    * ZonesForObjectName
131    *  \brief get a list of zones for a given objectName.
132    *  \arg String objectName object name.
133    *  \return list of zones for the given objectName (@see Zone)
134   */
135   method ZonesForObjectName {
136     in {
137       String objectName
138     }
139     out {
140       UInt32[] zones
141     }
142   }
143
144   /*!
145    * SupportsProperty
146    * \brief check whether a Property exists.
147    * \arg propertyName name of property of Object
148    * \return true if Property exists
149    */
150   method SupportsProperty {
151     in {
152       String propertyName
153     }
154     out {
155       Boolean supported
156     }
157   }
158
159 }
160
161 /*! org.automotive.VehicleSpeed
162  \brief contains information about VehicleSpeed
163  DBus Path: variable
164 */
165 interface org.automotive.VehicleSpeed extends VehiclePropertyType  {
166
167   /*!  Speed
168    *   \brief  MUST return Vehicle Speed in kilometers per hour.
169    */
170   attribute UInt16 Speed readonly
171 }
172
173 /*! org.automotive.EngineSpeed
174  \brief contains information about EngineSpeed
175  DBus Path: variable
176 */
177 interface org.automotive.EngineSpeed extends VehiclePropertyType  {
178
179   /*!  EngineSpeed
180    *   \brief  MUST return Engine Speed in rotations per minute.
181    */
182    attribute UInt16 Speed readonly
183 }
184
185 enumeration PowerMode {
186   Off = 0
187   Accessory1 = 1
188   Accessory2 = 2
189   Run = 3
190 }
191
192 interface org.automotive.VehiclePowerMode extends VehiclePropertyType  {
193
194   /*!  VehiclePowerMode
195    *   \brief  MUST return vehicle power mode
196    */
197   attribute PowerMode VehiclePowerMode readonly
198 }
199
200 /*! org.automotive.TripMeter
201  \brief contains information about TripMeter
202  DBus Path: variable
203 */
204 interface org.automotive.TripMeter extends VehiclePropertyType  {
205
206   /*!  TripMeters
207    *   \brief  MUST return trip meters.  Changing any items in the array will reset the item's value to '0'.
208    */
209    attribute array TripMeters of UInt16;
210 }
211
212 /*! org.automotive.Acceleration
213  \brief contains information about Acceleration
214  DBus Path: variable
215 */
216 interface org.automotive.Acceleration extends VehiclePropertyType  {
217
218   /*!  X
219    *   \brief  return acceleration on the "X" axis (Unit: centimeters per second squared)
220    */
221   attribute Int16 X readonly
222
223   /*!  Y
224    *   \brief  return acceleration on the "Y" axis (Unit: centimeters per second squared)
225    */
226   attribute Int16 Y readonly
227
228   /*!  Z
229    *   \brief  return acceleration on the "Z" axis (Unit: centimeters per second squared)
230    */
231   attribute Int16 Z readonly
232 }
233
234 enumeration TransmissionMode {
235   park = "park",
236   reverse = "reverse",
237   neutral = "neutral",
238   low = "low",
239   drive = "drive",
240   overdrive = "overdrive"
241 }
242
243 /*! TransmissionPosition
244  * \brief Describes Transmission Pistion.  Deprecated.  Will disappear in 0.14
245  */
246 enumeration TransmissionPosition {
247   Neutral = 0,
248   First = 1,
249   Second = 2,
250   Third = 3,
251   Fourth = 4,
252   Fifth = 5,
253   Sixth = 6,
254   Seventh = 7,
255   Eighth = 8,
256   Ninth = 9,
257   Tenth = 10,
258   Cvt = 64,
259   Reverse = 128,
260   Park = 255
261 }
262
263 /*! TransmissionGearType
264  * \brief Describes the transmission gearbox type
265 */
266 enumeration TransmissionGearType
267 {
268   Auto = 0,
269   Manual = 1,
270   CVT = 2
271 }
272
273 interface org.automotive.Transmission extends VehiclePropertyType  {
274   /*!  GearPosition
275    *   \brief  MUST return transmission gear position (see TRANSMISSIONPOSITION) Deprecated.  Replaced with Gear
276    */
277    attribute TransmissionPosition GearPosition readonly
278
279   /*!  TransmissionGearType
280    *   \brief MUST return transmission gear type of either Automatic, Manual or Constant Variable (CV).
281    *   See TRANSMISSIONGEARTYPE
282    */
283    attribute TransmissionGearType Type;
284
285   /*!  Gear
286    *   \brief  MUST return transmission gear position 1-10
287    */
288    attribute UInt8 Gear readonly
289
290   /*!  Mode
291    *   \brief  MUST return transmission Mode
292    */
293    attribute TransmissionMode Mode readonly
294 }
295
296
297 interface org.automotive.CruiseControlStatus extends VehiclePropertyType  {
298
299   /*!  Activated
300    *   \brief  MUST return whether or not the Cruise Control system is active (true) or inactive (false). Depricated.  Remove in 0.14.  Use "Status"
301    */
302    attribute Boolean Activated readonly
303
304   /*!  Speed
305    *   \brief  MUST return target Cruise Control speed in kilometers per hour (kph).
306    */
307    attribute UInt16 Speed readonly
308
309   /*!  Status
310    *   \brief  MUST return whether or not the Cruise Control system is active (true) or inactive (false).
311    */
312    attribute Boolean Status readonly
313 }
314
315 /*!
316  * Deprecated.  Use BrakeOperation.  Remove in 0.14
317  */
318 interface org.automotive.WheelBrake extends VehiclePropertyType  {
319
320   /*!  Engaged
321    *   \brief  MUST return Wheel Brake status: Engaged = true, disengaged = false
322    */
323    attribute Boolean Engaged readonly
324 }
325
326 interface org.automotive.BrakeOperation extends VehiclePropertyType  {
327
328   /*!  BrakePedalDepressed
329    *   \brief  MUST return whether brake pedal is depressed or not. true: brake pedal is depressed, false: brake pedal is not depressed
330    */
331    attribute Boolean BrakePedalDepressed readonly
332 }
333
334 interface org.automotive.LightStatus extends VehiclePropertyType  {
335
336   /*!  Head
337    *   \brief  MUST return headlight status: on = true, off = false.
338    */
339    attribute Boolean Head
340
341   /*!  RightTurn
342    *   \brief  MUST return right turn signal status: on = true, off = false.
343    */
344    attribute Boolean RightTurn
345
346   /*!  LeftTurn
347    *   \brief  MUST return left turn signal status: on = true, off = false.
348    */
349    attribute Boolean LeftTurn
350
351   /*!  Brake
352    *   \brief  MUST return  brake signal light status: on = true, off = false.
353    */
354    attribute Boolean Brake
355
356   /*!  Fog
357    *   \brief  MUST return fog light status: on = true, off = false.
358    */
359    attribute Boolean Fog
360
361   /*!  Hazard
362    *   \brief  MUST return hazard light status: on = true, off = false.
363    */
364    attribute Boolean Hazard
365
366   /*!  Parking
367    *   \brief  MUST return parking light status: on = true, off = false.
368    */
369    attribute Boolean Parking
370
371   /*!  HighBeam
372    *   \brief  MUST return high beam status: on = true, off = false.
373    */
374    attribute Boolean HighBeam
375
376   /*!  AutomaticHeadlights
377    *   \brief  MUST return automatic headlight status: on = true, off = false.
378    */
379   attribute Boolean AutomaticHeadlights
380
381   /*!  DynamicHighBeam
382    *   \brief  MUST return dynamic high beam status: on = true, off = false.
383    */
384   attribute Boolean DynamicHighBeam
385 }
386
387
388 interface org.automotive.InteriorLightStatus extends VehiclePropertyType  {
389
390   /*!  Passenger
391    *   \brief  MUST return passenger interior light status: on = true, off = false. Deprecated.  Remove in 0.14.   Use status and zone.
392    */
393    attribute Boolean Passenger readonly
394
395   /*!  Driver
396    *   \brief  MUST return driver interior light status: on = true, off = false. Deprecated.  Remove in 0.14.   Use status and zone.
397    */
398    attribute Boolean Driver readonly
399
400   /*!  Center
401    *   \brief  MUST return center interior light status: on = true, off = false. Deprecated.  Remove in 0.14.   Use status and zone.
402    */
403    attribute Boolean Center readonly
404
405   /*!  Status
406    *   \brief  MUST return interior light status for the zone. on = true, off = false
407    */
408     attribute Boolean Status
409 }
410
411
412 interface org.automotive.Horn extends VehiclePropertyType  {
413
414   /*!  On
415    *   \brief  MUST return horn status: on = true, off = false
416    */
417    attribute Boolean On readonly
418 }
419
420
421 interface org.automotive.Fuel extends VehiclePropertyType  {
422
423   /*!  Level
424    *   \brief  MUST return fuel level as a percentage of fullness.
425    */
426    attribute UInt16 Level readonly
427
428   /*!  Range
429    *   \brief  MUST return estimated fuel range in meters.
430    */
431    attribute UInt32 Range readonly
432
433   /*!  InstantConsumption
434    *   \brief  MUST return instant fuel consumption in per distance travelled (Unit: milliliters per 100 kilometers).
435    */
436    attribute UInt32 InstantConsumption readonly
437
438   /*!  InstantEconomy
439    *   \brief  MUST return instant fuel 'economy' in kilometers per liter of fuel.
440    */
441    attribute UInt16 InstantEconomy readonly
442
443   /*!  AverageEconomy
444    *   \brief  MUST return average fuel 'economy' in kilometers per liter of fuel since last reset.  Setting this to any value should reset the counter to '0'
445    */
446    attribute UInt16 AverageEconomy;
447
448   /*!  AverageConsumption
449    *   \brief  MUST return average fuel consumption in per distance travelled (Unit: milliliters per 100 kilometers). Setting this to any value should reset the counter to '0'
450    */
451    attribute UInt32 AverageConsumption;
452
453   /*!  FuelConsumedSinceRestart
454    *   \brief MUST return fuel consumed since engine start; (Unit: milliliters per 100 kilometers) resets to 0 each restart
455    */
456    attribute UInt32 FuelConsumedSinceRestart readonly;
457
458   /*!  TimeSinceRestart
459    *   \brief MUST  return time elapsed since vehicle restart (Unit: seconds)
460    */
461    attribute UInt32 TimeSinceRestart readonly;
462 }
463
464
465 interface org.automotive.EngineOil extends VehiclePropertyType  {
466
467   /*!  Remaining
468    *   \brief MUST return remaining engine oil as percentage of fullness.  Deprecated.  Remove in 0.14.  Use "Level"
469    */
470    attribute UInt16 Remaining readonly
471
472   /*!  Temperature
473    *   \brief MUST return Engine Oil Temperature in Celcius.
474    */
475    attribute long Temperature readonly
476
477   /*!  Pressure
478    *   \brief MUST return Engine Oil Pressure in kPa.
479    */
480    attribute UInt16 Pressure readonly
481
482   /*!  Level
483    *   \brief MUST return engine oil level (Unit: percentage, 0%: empty, 100%: full
484    */
485    attribute UInt16 Level readonly
486
487   /*!  Change
488    *   \brief MUST return engine oil change indicator status: change oil (true) or no change (false)
489    */
490    attribute boolean Change readonly
491
492   /*!  LifeRemaining
493    *   \brief MUST return engine oil change indicator status: change oil (true) or no change (false)
494    */
495    attribute boolean LifeRemaining readonly
496
497 }
498
499
500 interface org.automotive.Location extends VehiclePropertyType  {
501
502   /*!  Latitude
503    *   \brief  MUST return latitude in Deg.Min (-180, +180)
504    */
505    attribute Double Latitude readonly
506
507   /*!  Longitude
508    *   \brief  MUST return longitude in Deg.Min (-90, +90)
509    */
510    attribute Double Longitude readonly
511
512   /*!  Altitude
513    *   \brief  MUST return altitude in meters above sea-level (0).
514    */
515    attribute Double Altitude readonly
516
517   /*!  Direction
518    *   \brief  MUST return direction in Degrees  (0-360)
519    */
520    attribute UInt16 Direction readonly
521 }
522
523
524 interface org.automotive.ExteriorBrightness extends VehiclePropertyType  {
525
526   /*!  ExteriorBrightness
527    *   \brief MUST return the brightness outside the vehicle in lux.
528    */
529    attribute UInt16 ExteriorBrightness readonly
530 }
531
532
533 interface org.automotive.Temperature extends VehiclePropertyType  {
534
535   /*!  Interior
536    *   \brief MUST return the temperature of the interior of the vehicle in celcius.
537    */
538    /// Deprecated.  Use InteriorTemperature.  Remove in 0.14
539    attribute signed short Interior readonly
540
541   /*!  Exterior
542    *   \brief MUST return the temperature of the exterior of the vehicle in celcius.
543    */
544    /// Deprecated.  Use ExteriorTemperature.  Remove in 0.14
545    attribute signed short Exterior readonly
546
547   /*!  Interior
548    *   \brief MUST return the temperature of the interior of the vehicle in celcius.
549    */
550    attribute signed short InteriorTemperature readonly
551
552   /*!  Exterior
553    *   \brief MUST return the temperature of the exterior of the vehicle in celcius.
554    */
555    attribute signed short ExteriorTemperature readonly
556 }
557
558
559 interface org.automotive.RainSensor extends VehiclePropertyType  {
560
561   /*!  RainSensor
562    *   \brief MUST return level of rain intensity 0: No Rain - 10: Heaviest Rain.
563    *   Deprecated in 0.14.  Use rainIntensity
564    */
565    attribute UInt16 RainSensor readonly
566
567   /*!  RainIntensity
568    *   \brief MUST return level of rain intensity 0: No Rain - 10: Heaviest Rain.
569    */
570    attribute UInt16 RainIntensity readonly
571 }
572
573
574 /// TODO: Depricated in 0.14  Use WiperStatus
575 interface org.automotive.WindshieldWiper extends VehiclePropertyType  {
576
577   /*!  WindshieldWiper
578    *   \brief MUST return Level of windshield whiper speed (0-10)
579    */
580    attribute UInt16 WindshieldWiper readonly
581
582 }
583
584 enum WiperControl {
585   off = "off",
586   once = "once",
587   slowest = "slowest",
588   slow = "slow",
589   middle = "middle",
590   fast = "fast",
591   fastest = "fastest",
592   auto = "auto"
593 };
594
595 interface org.automotive.WiperStatus extends VehiclePropertyType  {
596
597   /*!  WiperSpeed
598    *   \brief MUST return current speed interval of wiping windshield
599    */
600    attribute WiperControl WiperSpeed readonly
601
602   /*!  WiperSetting
603    *   \brief MUST return current setting of the front wiper controller. It can be used to send user's request for changing setting.
604    */
605    attribute WiperControl WiperSetting
606 }
607
608 /*! Deprecated.  Use ClimateControl interface.  Remove in 0.14
609 */
610 interface org.automotive.HVAC extends VehiclePropertyType  {
611   const UInt16 AIRFLOWDIRECTION_FRONTPANEL = 0;
612   const UInt16 AIRFLOWDIRECTION_FLOORDUCT= 1;
613   const UInt16 AIRFLOWDIRECTION_FRONT = 0x02;
614   const UInt16 AIRFLOWDIRECTION_DEFROSTER = 0x04;
615
616   /*!  AirflowDirection
617    *   \brief MUST return airflow direction.  See
618    */
619   attribute UInt16 AirflowDirection;
620
621   /*!  FanSpeed
622    *   \brief MUST return speed of the fan (0-7)
623    */
624   attribute UInt16 FanSpeed;
625
626   /*!  TargetTemperature
627    *   \brief MUST return target desired temperature in celcius.
628    */
629   attribute UInt16 TargetTemperature;
630
631   /*!  AirConditioning
632    *   \brief MUST return air conditioning on (true) / off (false).
633    */
634   attribute Boolean AirConditioning;
635
636   /*!  AirRecirculation
637    *   \brief MUST return air recirculation on (true) / off (false).
638    */
639   attribute Boolean AirRecirculation;
640
641   /*!  Heater
642    *   \brief MUST return heater on (true) / off (false).
643    */
644   attribute Boolean Heater;
645
646   /*!  SteeringWheelHeater
647    *   \brief MUST return air recirculation on (true) / off (false).
648    */
649   attribute Boolean SteeringWheelHeater;
650
651   /*!  SeatHeater
652    *   \brief MUST return seat heater status: 0-100%.
653    */
654   attribute UInt16 SeatHeater;
655
656   /*!  SeatCooler
657    *   \brief MUST return seat heater status: on (true) / off (false).
658    */
659   attribute Boolean SeatCooler;
660 }
661
662 enumeration AirflowDirectionType
663 {
664   frontpanel = "frontpanel",
665   floorduct = "floorduct",
666   bilevel = "bilevel",
667   defrostfloor = "defrostfloor"
668 }
669
670 interface org.automotive.ClimateControl extends VehiclePropertyType  {
671   /*!  AirflowDirection
672   *   \brief MUST return current status of the direction of the air flow through the ventilation system
673   */
674   attribute AirflowDirectionType AirflowDirection;
675
676   /*!  FanSpeedLevel
677   *   \brief MUST return seat heater status: on (true) / off (false).
678   */
679   attribute UInt8 FanSpeedLevel;
680
681   /*!  TargetTemperature
682   *   \brief MUST return current setting of the desired temperature (Unit: celsius)
683   */
684   attribute Int8 TargetTemperature;
685
686   /*!  AirConditioning
687   *   \brief MUST return current status of the air conditioning system: on (true) or off (false)
688   */
689   attribute Boolean AirConditioning;
690
691   /*!  Heater
692   *   \brief MUST return current status of the heating system: on (true) or off (false)
693   */
694   attribute Boolean Heater;
695
696   /*!  SeatHeater
697   *   \brief MUST return current status of the seat warmer ( 0: off, 1: least warm, 10: warmest )
698   */
699   attribute UInt8 SeatHeater;
700
701   /*!  SeatCooler
702   *   \brief MUST return current status of the seat ventilation ( 0: off, 1: least warm, 10: warmest )
703   */
704   attribute UInt8 SeatCooler;
705
706   /*!  AirRecirculation
707   *   \brief MUST return current setting of air recirculation: on (true) or pulling in outside air (false).
708   */
709   attribute Boolean AirRecirculation;
710
711   /*!  SteeringWheelHeater
712   *   \brief MUST return current status of steering wheel heater ( 0: off, 1: least warm, 10: warmest ).
713   */
714   attribute UInt8 SteeringWheelHeater;
715 }
716
717 /// Deprecated in 0.14.  Use SideWindow
718 interface org.automotive.WindowStatus extends VehiclePropertyType  {
719
720   /*!  Openness
721    *   \brief MUST return window openness percentage (100% fully open, 0% fully closed)
722    *  for the window location see "zone" attribute
723    */
724   attribute UInt16 Openness;
725
726   /*!  Defrost
727    *   \brief MUST return the defroster status of the window. On = true, Off = false.
728    *   Deprecated.  Use Defrost interface.  Remove in 0.14.
729    */
730   attribute Boolean Defrost;
731 }
732
733 interface org.automotive.SideWindow extends VehiclePropertyType  {
734
735   /*!  Openness
736    *   \brief MUST return window openness percentage (100% fully open, 0% fully closed)
737    */
738   attribute UInt16 Openness;
739
740   /*! Lock
741    * \brief MUST return whether or not the window is locked (true) or unlocked (false)
742    */
743   attribute Boolean Lock;
744 }
745
746 interface org.automotive.Defrost extends VehiclePropertyType  {
747
748   /*! DefrostWindow
749    *  \brief MUST return current status of the defrost switch for mirrors. It can be
750    *  used to send user's request for changing setting.
751    */
752   attribute Boolean DefrostWindow;
753
754   /*! DefrostMirrors
755    *  \brief MUST return current status of the defrost switch for window. It can be
756    *  used to send user's request for changing setting.
757    */
758   attribute Boolean DefrostMirrors;
759 }
760
761 interface org.automotive.Sunroof extends VehiclePropertyType  {
762
763   /*!  Openness
764    *   \brief MUST return window status for sunroof openness percentage.
765    */
766   attribute UInt16 Openness;
767
768   /*!  Tilt
769    *   \brief MUST return tilt status for sunroof percentage.
770    */
771   attribute UInt16 Tilt;
772 }
773
774
775 enum ConvertibleRoofStatus {
776     closed = "closed",
777     closing = "closing",
778     opening = "opening",
779     opened = "opened"
780 };
781
782 interface org.automotive.ConvertibleRoof extends VehiclePropertyType  {
783   /*!  Status
784    *   \brief MUST return current status of Convertible Roof.
785    *
786    */
787    attribute ConvertibleRoofStatus Status readonly;
788
789   /*!  Setting
790    *   \brief MUST return current setting of Convertible Roof.  This is used to open (true) and close (false).
791    *
792    */
793    attribute Boolean Setting;
794 }
795
796
797 interface org.automotive.VehicleId extends VehiclePropertyType  {
798
799   /*!  WMI
800    *   \brief MUST return World Manufacturer Identifier (WMI)
801    *   WMI is defined by SAE ISO 3780:2009.  3 characters.
802    */
803    attribute String WMI readonly
804
805   /*!  VIN
806    *   \brief MUST return Vehicle Identification Number (VIN) as defined by ISO 3779. 17 characters.
807    */
808    attribute String VIN readonly
809 }
810
811
812 interface org.automotive.Size extends VehiclePropertyType  {
813
814   /*!  Width
815    *   \brief MUST return width of vehicle in mm
816    */
817    attribute UInt16 Width readonly
818
819   /*!  Height
820    *   \brief MUST return height of vehicle in mm
821    */
822    attribute UInt16 Height readonly
823
824   /*!  Length
825    *   \brief MUST return length of vehicle in mm
826    */
827    attribute UInt16 Length readonly
828 }
829
830
831 interface org.automotive.FuelInfo extends VehiclePropertyType  {
832   const UInt16 FUELTYPE_GASOLINE = 0;
833   const UInt16 FUELTYPE_HIGH_OCTANE= 1;
834   const UInt16 FUELTYPE_DIESEL = 2;
835   const UInt16 FUELTYPE_ELECTRIC = 3;
836   const UInt16 FUELTYPE_HYDROGEN = 4;
837   const UInt16 REFUELPOSITION_LEFT = 0;
838   const UInt16 REFUELPOSITION_RIGHT= 1;
839   const UInt16 REFUELPOSITION_FRONT = 2;
840   const UInt16 REFUELPOSITION_REAR = 3;
841
842   /*!  Type
843    *   \brief MUST return type of fuel.  integer 0-4 (see
844    */
845    attribute UInt16 Type readonly
846
847   /*!  RefuelPosition
848    *   \brief MUST return position of refuling (see
849    */
850    attribute UInt16 RefuelPosition readonly
851 }
852
853
854 interface org.automotive.VehicleType extends VehiclePropertyType  {
855   const UInt16 VEHICLETYPE_SEDAN = 0;
856   const UInt16 VEHICLETYPE_COUPE= 1;
857   const UInt16 VEHICLETYPE_CABRIOLE = 2;
858   const UInt16 VEHICLETYPE_ROADSTER = 3;
859   const UInt16 VEHICLETYPE_SUV = 4;
860   const UInt16 VEHICLETYPE_TRUCK = 5;
861
862   /*!  Type
863    *   \brief MUST return type of Vehicle.  Integer 0-5 (see
864    */
865    attribute UInt16 Type readonly
866 }
867
868
869 interface org.automotive.Doors extends VehiclePropertyType  {
870
871   /*!  DoorsPerRow
872    *   \brief MUST return Number of doors in each row.  The index represents the row.  Position '0'
873    *   represents the first row, '1' the second row etc.
874    *   Example a common mini-van may have Doors[0] = 2 doors,
875    *   Doors[1] = 1 (side door), Doors[2] = 1 (trunk).
876    */
877    attribute array DoorsPerRow of UInt16 readonly
878 }
879
880
881 interface org.automotive.WheelInformation extends VehiclePropertyType  {
882
883   /*!  FrontWheelRadius
884    *   \brief MUST return Radius of Front Wheel(s) in mm.
885    */
886    attribute UInt16 FrontWheelRadius readonly
887
888   /*!  RearWheelRadius
889    *   \brief MUST return Radius of Rear Wheel(s) in mm.
890    */
891    attribute UInt16 RearWheelRadius readonly
892
893   /*!  WheelTrack
894    *   \brief MUST return Wheel Track in mm.
895    */
896    attribute UInt16 WheelTrack readonly
897
898   /*!  ABS
899    *   \brief MUST return Antilock Brake System status: on = true, off = false.
900    */
901    attribute Boolean ABS readonly
902 }
903
904
905 interface org.automotive.Odometer extends VehiclePropertyType  {
906
907   /*!  Odometer
908    *   \brief MUST return Distance traveled in km
909    */
910    /// Deprecated. Use DistanceTotal.  Remove in 0.14
911    attribute UInt32 Odometer readonly
912
913   /*!  DistnaceTotal
914    *   \brief MUST return Distance traveled in m
915    */
916    attribute UInt32 DistanceTotal readonly
917
918   /*!  DistanceSinceStart
919    *   \brief MUST return Distance traveled since start in m
920    */
921    attribute UInt32 DistanceSinceStart readonly
922
923 }
924
925 interface org.automotive.Fluid extends VehiclePropertyType  {
926
927   /*!  Transmission
928    *   \brief MUST return Transmission fluid level percentage. 0-100.
929    */
930    attribute UInt16 Transmission readonly
931
932   /*!  Brake
933    *   \brief MUST return Brake fluid level percentage. 0-100.
934    *   TODO: Deprecated.  use BrakeMaintenance::FluidLevel  Remove in 0.14
935    */
936    attribute UInt16 Brake readonly
937
938   /*!  Washer
939    *   \brief MUST return Washer fluid level percentage. 0-100.
940    *   TODO: Deprecated. use WasherFluid::Level.  Remove in 0.14
941    */
942    attribute UInt16 Washer readonly
943 }
944
945 ///TODO: Deprecated.  Use BatteryStatus.  Remove in 0.14
946 interface org.automotive.Battery extends VehiclePropertyType  {
947
948   /*!  Voltage
949    *   \brief MUST return battery voltage.
950    */
951    attribute Double Voltage readonly
952
953   /*!  Current
954    *   \brief MUST return battery current in Amperes
955    */
956    attribute Double Current readonly
957 }
958
959 interface org.automotive.BatteryStatus extends VehiclePropertyType  {
960
961   /*!  Voltage
962    *   \brief MUST return battery voltage.
963    */
964    attribute UInt8 Voltage readonly
965
966   /*!  Current
967    *   \brief MUST return battery current in Amperes
968    */
969    attribute UInt8 Current readonly
970
971   /*!  ChargeLevel
972    *   \brief MUST return battery charge level (Unit: percentage, 0%: empty, 100%: full).
973    */
974    attribute UInt8 ChargeLevel readonly
975 }
976
977
978 interface org.automotive.Tire extends VehiclePropertyType  {
979
980   /*!  Pressure
981    *   \brief MUST return tire pressure in kPa.
982    */
983    attribute UInt16 Pressure readonly
984
985   /*!  Temperature
986    *   \brief MUST return left front tire temperature in Celcius.
987    */
988    attribute Int16 Temperature readonly
989
990   /*!  Temperature
991    *   \brief MUST return true if any tire pressure is low: pressure low (true), pressure not low (false).
992    */
993    attribute Boolean PressureLow readonly
994 }
995
996
997 interface org.automotive.SecurityAlert extends VehiclePropertyType  {
998
999   /*!  SecurityAlert
1000    *   \brief MUST return
1001    */
1002    attribute Boolean SecurityAlert readonly
1003 }
1004
1005 interface org.automotive.ParkingBrake extends VehiclePropertyType  {
1006
1007   /*!  ParkingBrake
1008    *   MUST return status of parking brake:  Engaged = true, Disengaged = false.
1009    TODO: Deprecated in 0.14.  Use Status
1010    */
1011    attribute Boolean ParkingBrake readonly
1012
1013   /*!
1014   * \brief MUST return the current status of parking brake.
1015   */
1016   attribute ParkingBrakeStatus Status;
1017 }
1018
1019 /// Deprecated.  Use LightStatus.  remove in 0.14
1020 interface org.automotive.ParkingLight extends VehiclePropertyType  {
1021
1022   /*!  ParkingLight
1023    *   MUST return status of parking light:  Engaged = true, Disengaged = false.
1024    */
1025    attribute Boolean ParkingLight readonly
1026 }
1027
1028 /// Deprecated.  Use LightStatus.  remove in 0.14
1029 interface org.automotive.HazardLight extends VehiclePropertyType  {
1030
1031   /*!  HazardLight
1032    *   MUST return status of hazard light:  Engaged = true, Disengaged = false.
1033    */
1034    attribute Boolean HazardLight readonly
1035 }
1036
1037
1038 interface org.automotive.AntilockBrakingSystem extends VehiclePropertyType  {
1039
1040   /*!  AntilockBrakingSystem
1041    *   \brief MUST return whether Antilock Braking System is Idle (false) or Engaged (true)
1042    *   TODO: Deprecated.  Use Engaged.  Remove in 0.14
1043    */
1044    attribute Boolean AntilockBrakingSystem readonly
1045
1046   /*!
1047   * \brief MUST return whether or not the ABS Setting is enabled: enabled (true) or disabled (false)
1048   */
1049   attribute Boolean Enabled readonly;
1050
1051   /*!
1052   * \brief MUST return whether or not the ABS is engaged: engaged (true) or idle (false)
1053   */
1054   attribute Boolean Engaged readonly;
1055 }
1056
1057
1058 interface org.automotive.TractionControlSystem extends VehiclePropertyType  {
1059
1060   /*!  TractionControlSystem
1061    *   \brief MUST return whether Traction Control System is Off (false) or On (true)
1062    * TODO: Deprecated.  Use Engaged.  Remove in 0.14
1063    */
1064    attribute Boolean TractionControlSystem readonly
1065
1066   /*!
1067   * \brief MUST return whether or not the TCS Setting is enabled: enabled (true) or disabled (false)
1068   */
1069   attribute Boolean Enabled readonly;
1070
1071   /*!
1072   * \brief MUST return whether or not the TCS is engaged: engaged (true) or idle (false)
1073   */
1074   attribute Boolean Engaged readonly;
1075 }
1076
1077
1078 interface org.automotive.VehicleTopSpeedLimit extends VehiclePropertyType  {
1079
1080   /*!  VehicleTopSpeedLimit
1081    *   \brief MUST return top rated speed in km/h. 0 = no limit
1082    */
1083    attribute UInt16 VehicleTopSpeedLimit readonly
1084 }
1085
1086
1087 interface org.automotive.AirbagStatus extends VehiclePropertyType  {
1088
1089   /*!  AirbagStatus
1090    *   \brief MUST return Airbag status (byte) (see AIRBAGSTATUS_*)
1091    *  TODO: deprecated.  Remove in 0.14
1092    */
1093    attribute UInt16 AirbagStatus readonly
1094
1095   /*!
1096   * \brief MUST return whether or not the airbag is activaged: activated (true) or deactivated (false)
1097   */
1098   attribute Boolean Activated readonly;
1099
1100   /*!
1101   * \brief MUST return whether the airbag is deployed: deployed (true) or not (false)
1102   */
1103   attribute Boolean Deployed readonly;
1104 }
1105
1106 /// TODO: deprecated. Remove in 0.14
1107 enumeration AirbagStatus {
1108   inactive = 0,
1109   active = 1,
1110   deployed = 2
1111 }
1112
1113 /*!
1114  * Deprecated.  Use "Door".  Remove in 0.14
1115  */
1116 interface org.automotive.DoorStatus extends VehiclePropertyType  {
1117
1118   /*!  DoorStatus
1119    *   \brief MUST return Door status (byte).
1120    * CLOSED = 0
1121    * OPEN = 1
1122    * AJAR = 2
1123    */
1124    attribute UInt16 DoorStatus readonly
1125
1126   /*!  DoorLockStatus
1127    *   \brief MUST return Door status (bool locked = true, unlocked = false).
1128    */
1129   attribute Boolean DoorLockStatus;
1130
1131   /*!  ChildLockStatus
1132    *   \brief MUST return Child lock status of rear doors.  active = true, inactive = false.
1133    *   Setting this to 'true' will prevent the rear doors from being opened
1134    *   from the inside.
1135    */
1136    ///TODO: Deprecated in 0.14.  Use org.automotive.ChildLockStatus
1137   attribute Boolean ChildLockStatus;
1138 }
1139
1140 enumeration DoorStatus {
1141   open = "open",
1142   ajar = "ajar",
1143   closed = "closed"
1144 }
1145
1146 interface org.automotive.Door extends VehiclePropertyType  {
1147
1148   /*!  Status
1149    *   \brief MUST return Door status (byte).  See DOORSTATUS_*
1150    */
1151    attribute DoorStatus Status readonly
1152
1153   /*!  Lock
1154    *   \brief MUST return Door status (bool locked = true, unlocked = false).
1155    */
1156   attribute Boolean Lock;
1157
1158   /*!  ChildLock
1159    *   \brief MUST return Child lock status of rear doors.  active = true, inactive = false.
1160    *   Setting this to 'true' will prevent the rear doors from being opened
1161    *   from the inside.
1162    */
1163   attribute Boolean ChildLock;
1164 }
1165
1166 ///TODO: Deprecated in 0.14.  Use org.automotive.Seat
1167 interface org.automotive.SeatBelt extends VehiclePropertyType  {
1168
1169   /*! Status
1170    *  \brief MUST return Seat Belt Status (bool: Fasten = true, Unfastened = false)
1171    */
1172    attribute Boolean Status readonly
1173 }
1174
1175 ///TODO: Deprecated in 0.14.  Use org.automotive.Seat
1176 interface org.automotive.OccupantStatus extends VehiclePropertyType  {
1177
1178   /*!  OccupantStatus
1179    *   \brief MUST return status of Occupant (byte, see
1180    */
1181    attribute UInt16 OccupantStatus readonly
1182 }
1183
1184
1185 interface org.automotive.ObstacleDistance extends VehiclePropertyType  {
1186
1187   /*!  ObstacleDistance
1188    *   \brief MUST return Distance Sensor distance (Double) in m.
1189    */
1190    attribute Double ObstacleDistance readonly
1191 }
1192
1193
1194 interface org.automotive.NightMode extends VehiclePropertyType {
1195
1196   /*!
1197    * \brief MUST return whether or not the system is in NightMode or not.  True = Night time, False = Day time
1198    * Deprecated.  Will be removed in 0.14. Use "Mode"
1199    */
1200    attribute Boolean NightMode readonly
1201
1202   /*!
1203    * \brief MUST return whether or not the system is in NightMode or not.  True = Night time, False = Day time
1204    */
1205    attribute Boolean Mode readonly
1206 }
1207
1208
1209 interface org.automotive.DrivingMode extends VehiclePropertyType {
1210
1211   /*!
1212   * \brief MUST return whether or not the system is in DrivingMode or not.  1 = Driving, 0 = Not Driving
1213   */
1214    attribute UInt16 DrivingMode readonly
1215
1216   /*!
1217   * \brief MUST return true if vehicle is in driving mode
1218   */
1219    attribute Boolean Mode readonly
1220 }
1221
1222
1223 interface org.automotive.KeyId extends VehiclePropertyType {
1224
1225   /*!
1226   * \brief MUST return
1227   */
1228    attribute String KeyId readonly
1229 }
1230
1231 interface org.automotive.Language extends VehiclePropertyType {
1232
1233   /*!
1234   * \brief MUST return
1235   */
1236    attribute String Language readonly
1237 }
1238
1239
1240 interface org.automotive.MeasurementSystem extends VehiclePropertyType {
1241
1242   /*!
1243   * \brief MUST return 0 = Metric, 1 = ImperialUS, 2 = ImperialUK
1244   */
1245    attribute UInt16 MeasurementSystem readonly
1246 }
1247
1248
1249 ///TODO Deprecated.  Use org.automotive.Mirror.  Remove in 0.14
1250 interface org.automotive.MirrorSetting extends VehiclePropertyType {
1251
1252   /*!
1253   * \brief MUST return
1254   */
1255    attribute UInt8 Pan readonly
1256    attribute UInt8 Tilt readonly
1257 }
1258
1259
1260 ///TODO Deprecated.  Use org.automotive.SeadAdjustment.  Remove in 0.14
1261 interface org.automotive.SeatPosition extends VehiclePropertyType {
1262
1263   /*!
1264   * \brief MUST return
1265   */
1266    attribute UInt16 Recline readonly
1267
1268     /*!
1269   * \brief MUST return
1270   */
1271    attribute UInt16 Slide readonly
1272
1273   /*!
1274   * \brief MUST return
1275   */
1276    attribute UInt16 CushionHeight readonly
1277
1278   /*!
1279   * \brief MUST return
1280   */
1281    attribute UInt16 Headrest readonly
1282
1283   /*!
1284   * \brief MUST return
1285   */
1286    attribute UInt16 BackCushion readonly
1287
1288   /*!
1289   * \brief MUST return
1290   */
1291    attribute UInt16 SideCushion readonly
1292 }
1293
1294
1295 interface org.automotive.SteeringWheelPosition extends VehiclePropertyType {
1296
1297   /*!
1298   * \brief MUST return
1299   */
1300    attribute UInt16 Tilt readonly
1301
1302   /*!
1303   * \brief MUST return
1304   */
1305    attribute UInt16 Slide readonly
1306 }
1307
1308
1309 interface org.automotive.DashboardIllumination extends VehiclePropertyType {
1310
1311   /*!
1312   * \brief MUST return
1313   */
1314    attribute UInt16 DashboardIllumination readonly
1315 }
1316
1317 ///TODO Deprecated.  Use org.automotive.VehicleSound. Remove in 0.14
1318 interface org.automotive.GeneratedVehicleSoundMode extends VehiclePropertyType {
1319
1320   /*!
1321   * \brief MUST return Sound Mode: 0 = Normal, 1 = Quiet, 2 = Sportive
1322   */
1323    attribute UInt16 GeneratedVehicleSoundMode readonly
1324 }
1325
1326
1327 /*! SteeringWheelAngle
1328  *\brief
1329  * Deprecated.  Use SteeringWheel
1330  */
1331 interface org.automotive.SteeringWheelAngle extends VehiclePropertyType {
1332
1333   /*!
1334   * \brief MUST return angle of the steering wheel. 0-359 degrees.
1335   */
1336    attribute UInt16 SteeringWheelAngle readonly
1337 }
1338
1339 interface org.automotive.SteeringWheel extends VehiclePropertyType {
1340
1341   /*!
1342   * \brief MUST return angle of steering wheel off centerline (Unit: degrees -:degrees to the left, +:degrees to the right)
1343   */
1344    attribute Int16 Angle readonly
1345 }
1346
1347
1348 interface org.automotive.ButtoneEvent extends VehiclePropertyType {
1349
1350   /*!
1351   * \brief MUST return button event:
1352   * NoButton =0
1353   * PlayButton = 1,
1354   * SkipButton = 1 << 1,
1355   * PrevButton = 1 << 2,
1356   * PauseButton = 1 << 3,
1357   * Preset1Button = 1 << 4,
1358   * Preset2Button = 1 << 5,
1359   * Preset3Button = 1 << 6,
1360   * Preset4Button = 1 << 7,
1361   * StopButton = 1 << 8,
1362   * NavigateUpButton = 1 << 9,
1363   * NavigateDownButton = 1 << 10,
1364   * NavigateLeftButton = 1 << 11,
1365   * NavigateRightButton = 1 << 12
1366   */
1367    attribute UInt32 ButtonEvent readonly
1368 }
1369
1370
1371 interface org.automotive.DriverId extends VehiclePropertyType {
1372
1373   /*!
1374   * \brief MUST return driver ID.  Driver Id is an abstract and can be determined
1375   * from multiple sources including bluetooth, key, key fob, etc.
1376   */
1377    attribute String DriverId readonly
1378 }
1379
1380 interface org.automotive.ThrottlePosition extends VehiclePropertyType {
1381
1382   /*!
1383   * \brief MUST return throttle position as a percentage (Unit: percentage, 0%: closed, 100%: fully open)
1384   */
1385    attribute Uint8 Value readonly
1386 }
1387
1388 interface org.automotive.EngineCoolant extends VehiclePropertyType {
1389
1390   /*!
1391   * \brief MUST return engine coolant level (Unit: percentage 0%: empty, 100%: full)
1392   */
1393    attribute Uint16 Level readonly
1394
1395   /*!
1396   * \brief MUST return engine coolant temperature (Unit: celcius)
1397   */
1398    attribute Int16 Temperature readonly
1399 }
1400
1401 interface org.automotive.PowertrainTorque extends VehiclePropertyType {
1402
1403   /*!
1404    * \brief MUST return powertrain torque (Unit: newton meters)
1405    */
1406    attribute UInt16 Value readonly
1407 }
1408
1409 interface org.automotive.AcceleratorPedalPosition extends VehiclePropertyType {
1410
1411   /*!
1412    * \brief MUST  return accelerator pedal position as a percentage (Unit: percentage, 0%: released pedal, 100%: fully depressed)
1413    */
1414    attribute UInt8 Value readonly
1415 }
1416
1417 interface org.automotive.WheelTick extends VehiclePropertyType {
1418
1419   /*!
1420    * \brief MUST return number of ticks per second (Unit: ticks per second)
1421    */
1422    attribute UInt8 Value readonly
1423 }
1424
1425 interface IgnitionTime : VehicleCommonDataType {
1426    /*!
1427     * \brief MUST return time at ignition on
1428     */
1429     attribute UInt64 ignitionOnTime readonly
1430
1431     /*!
1432      * \brief MUST return time at ignition off
1433      */
1434      attribute UInt64 ignitionOffTime readonly
1435 };
1436
1437 interface org.automotive.YawRate extends VehiclePropertyType {
1438
1439   /*!
1440    * \brief MUST return yaw rate of vehicle. (Unit: degrees per second)
1441    */
1442    attribute Int16 Value readonly
1443 }
1444
1445 interface org.automotive.BrakeOperation extends VehiclePropertyType {
1446
1447   /*!
1448    * \brief MUST return whether brake pedal is depressed or not. true: brake pedal is depressed, false: brake pedal is not depressed
1449    */
1450    attribute Boolean BrakePedalDepressed readonly
1451 }
1452
1453 enum Button {
1454     home = "home",
1455     back = "back",
1456     search = "search",
1457     call = "call",
1458     end_call = "end_call",
1459     media_play = "media_play",
1460     media_next = "media_next",
1461     media_previous = "media_previous",
1462     media_pause = "media_pause",
1463     voice_recognize = "voice_recognize",
1464     enter = "enter",
1465     left = "left",
1466     right = "right",
1467     up = "up",
1468     down = "down"
1469 }
1470
1471 enum ButtonEventType {
1472     press = "press",
1473     long_press = "long_press",
1474     release = "release"
1475 };
1476
1477 interface VehicleButton {
1478     /*!
1479     * \brief MUST return the button corresponding to the event.
1480     */
1481     attribute Button button readonly;
1482
1483     /*!
1484     * \brief MUST return the type of event
1485     */
1486     attribute ButtonEventType state readonly;
1487 }
1488
1489 interface org.automotive.ButtonEvent extends VehiclePropertyType {
1490
1491   /*!
1492    * \brief MUST return the button events that occured. This supports multiple simultanious button events.
1493    */
1494    attribute array Button of VehicleButton readonly;
1495 }
1496
1497 interface org.automotive.TransmissionOil extends VehiclePropertyType {
1498
1499   /*!
1500    * \brief MUST return current temperature of the transmission oil(Unit: celsius).
1501    */
1502    attribute Int8 Temperature readonly;
1503
1504   /*!
1505    * \brief MUST return transmission oil wear (Unit: percentage, 0: no wear, 100: completely worn).
1506    */
1507    attribute UInt8 Wear readonly;
1508 }
1509
1510 interface org.automotive.TransmissionClutch extends VehiclePropertyType {
1511
1512   /*!
1513    * \brief MUST return transmission clutch wear (Unit: percentage, 0: no wear, 100: completely worn).
1514    */
1515    attribute UInt8 Wear readonly;
1516 }
1517
1518 interface org.automotive.BrakeMaintenance extends VehiclePropertyType {
1519
1520   /*!
1521    * \brief MUST return brake pad wear (Unit: percentage, 0%: no wear, 100%: completely worn).
1522    */
1523    attribute UInt8 PadWear readonly;
1524
1525   /*!
1526    * \brief MUST return brake fluid level (Unit: percentage, 0%: empty, 100%: full).
1527    */
1528    attribute UInt8 FluidLevel readonly;
1529
1530   /*!
1531    * \brief MUST return true if brake fluid level: low (true), not low (false)
1532    */
1533    attribute Boolean FluidLevelLow readonly;
1534
1535   /*!
1536    * \brief MUST return true if brakes are worn: worn (true), not worn (false)
1537    */
1538    attribute Boolean BrakesWorn readonly;
1539 }
1540
1541 interface org.automotive.WasherFluid extends VehiclePropertyType {
1542
1543   /*!
1544    * \brief MUST return washer fluid level (Unit: percentage, 0%: empty, 100%: full).
1545    */
1546    attribute UInt8 Level readonly;
1547
1548   /*!
1549    * \brief MUST return true if washer fluid level is low: low (true), not low: (false)
1550    */
1551    attribute Boolean LevelLow readonly;
1552 }
1553
1554 interface org.automotive.MalfunctionIndicator extends VehiclePropertyType {
1555
1556   /*!
1557    * \brief MUST return true if washer fluid level is low: low (true), not low: (false)
1558    */
1559    attribute Boolean On readonly;
1560 }
1561
1562 interface org.automotive.Diagnostic extends VehiclePropertyType {
1563
1564   /*!
1565    * \brief MUST return engine runtime (Unit: seconds)
1566    */
1567    attribute UInt32 AccumulatedEngineRuntime readonly;
1568
1569    /*!
1570     * \brief MUST return distance travelled since the codes were last cleared (Unit: meters)
1571     */
1572    attribute UInt32 DistanceSinceCodeCleared readonly;
1573
1574    /*!
1575     * \brief MUST return distance travelled with the malfunction indicator light on (Unit: meters)
1576     */
1577    attribute UInt32 DistanceWithMILOn readonly;
1578
1579    /*!
1580     * \brief MUST return time elapsed with the malfunction indicator light on (Unit: seconds)
1581     */
1582    attribute UInt32 TimeRunMILOn readonly;
1583
1584    /*!
1585     * \brief MUST return time elapsed since the trouble codes were last cleared (Unit: seconds)
1586     */
1587    attribute UInt32 TimeTroubleCodeClear readonly;
1588 }
1589
1590 interface org.automotive.Mirror extends VehiclePropertyType {
1591
1592   /*!
1593    * \brief MUST return mirror pan position in percentage distance travelled, from left to right position (Unit: percentage, %0: center position, -100%: fully left, 100%: fully right)
1594    */
1595    attribute UInt8 MirrorPan;
1596
1597   /*!
1598    * \brief MUST return mirror tilt position in percentage distance travelled, from downward-facing to upward-facing position (Unit: percentage, 0%:center position, -100%:fully downward, 100%:full upward)
1599    */
1600    attribute UInt8 MirrorTilt;
1601 }
1602
1603 interface org.automotive.SeatAdjustment extends VehiclePropertyType {
1604
1605   /*!
1606   * \brief MUST return seat back recline position as percent to completely reclined (Unit: percentage, 0%: fully forward, 100%: fully reclined)
1607   */
1608    attribute UInt8 ReclineSeatBack;
1609
1610   /*!
1611   * \brief MUST return seat slide position as percentage of distance travelled away from forwardmost position (Unit: percentage, 0%: farthest forward, 100%: farthest back)
1612   */
1613    attribute UInt8 SeatSlide;
1614
1615   /*!
1616   * \brief MUST return seat cushion height position as a percentage of upward distance travelled (Unit: percentage, 0%:lowest. 100%:highest)
1617   */
1618    attribute UInt8 SeatCushionHeight;
1619
1620   /*!
1621   * \brief MUST return headrest position as a percentage of upward distance travelled (Unit: percentage, 0%: lowest, 100%: highest)
1622   */
1623    attribute UInt8 SeatHeadrest;
1624
1625   /*!
1626   * \brief MUST return back cushion position as a percentage of lumbar curvature (Unit: percentage, 0%: flat, 100%: maximum curvature)
1627   */
1628    attribute UInt8 SeatBackCushion;
1629
1630   /*!
1631   * \brief MUST return sides of back cushion position as a percentage of curvature (Unit: percentage, 0%: flat, 100%: maximum curvature)
1632   */
1633    attribute UInt8 SeatSideCushion;
1634 }
1635
1636 enum DriveModeType {
1637   comfort = "comfort",
1638   auto = "auto",
1639   sport = "sport",
1640   eco = "eco",
1641   manual = "manual",
1642   winter = "winter"
1643 };
1644
1645 interface org.automotive.DriveMode extends VehiclePropertyType {
1646   /*!
1647   * \brief MUST return vehicle drive mode. See http://w3c.github.io/automotive-bg/data_spec.html#idl-def-DriveModeEnum
1648   */
1649   attribute DriveModeType DriveMode;
1650 }
1651
1652 interface org.automotive.DashboardIllumination extends VehiclePropertyType {
1653   /*!
1654   * \brief MUST return illumination of dashboard as a percentage (Unit: percentage, 0%: none, 100%: maximum illumination)
1655   */
1656   attribute UInt8 DashboardIllumination;
1657 }
1658
1659 interface org.automotive.VehicleSound extends VehiclePropertyType {
1660   /*!
1661   * \brief MUST return active noise control status: not-activated (false), activated (true)
1662   */
1663   attribute Boolean ActiveNoiseControlMode;
1664
1665   /*!
1666   * \brief MUST return active noise control status: not-activated (false), activated (true)
1667   */
1668   attribute Boolean EngineSoundEnhancementMode;
1669
1670   /*!
1671   * \brief MUST return array of available sounds. See EngineSoundEnhancementMode
1672   */
1673   attribute array EngineSoundEnhancementMode of String readonly;
1674 }
1675
1676 interface org.automotive.ElectronicStabilityControl extends VehiclePropertyType {
1677   /*!
1678   * \brief MUST return whether or not the ESC Setting is enabled: enabled (true) or disabled (false)
1679   */
1680   attribute Boolean Enabled readonly;
1681
1682   /*!
1683   * \brief MUST return whether or not the ESC is engaged: engaged (true) or idle (false)
1684   */
1685   attribute Boolean Engaged readonly;
1686 }
1687
1688 interface org.automotive.TopSpeedLimit extends VehiclePropertyType {
1689   /*!
1690   * \brief MUST return whether or not the ESC Setting is enabled: enabled (true) or disabled (false)
1691   */
1692   attribute UInt16 Speed readonly;
1693 }
1694
1695 interface org.automotive.ChildSafetyLock extends VehiclePropertyType {
1696   /*!
1697   * \brief MUST return whether or not the Child Safety Lock is locked: locked (true) or unlocked (false)
1698   */
1699   attribute Boolean Lock;
1700 }
1701
1702 enum OccupantStatus {
1703   adult = "adult",
1704   child = "child",
1705   vacant = "vacant"
1706 };
1707
1708 enum IdentificationTypeEnum {
1709   pin = "pin",
1710   keyfob = "keyfob",
1711   Bluetooth = "Bluetooth",
1712   NFC = "NFC",
1713   fingerprint = "fingerprint",
1714   camera = "camera",
1715   voice = "voice"
1716 };
1717
1718 interface org.automotive.Seat extends VehiclePropertyType {
1719   /*!
1720   * \brief MUST return the status of seat occupant
1721   */
1722   attribute OccupantStatus Occupant;
1723
1724   /*!
1725   * \brief MUST return whether or not the seat belt is fastened: fastened (true) or unfastened (false)
1726   */
1727   attribute Boolean SeatBelt;
1728
1729   /*!
1730   * \brief MUST return occupant identifier
1731   */
1732   attribute String OccupantName;
1733
1734   /*!
1735   * \brief MUST return identification type
1736   */
1737   attribute IdentificationTypeEnum IdentificationType;
1738 }
1739
1740 interface org.automotive.AtmosphericPressure extends VehiclePropertyType {
1741   /*!
1742   * \brief MUST return the current atmospheric pressure outside of the vehicle (Unit: hectopascal)
1743   */
1744   attribute UInt16 Pressure;
1745 }
1746
1747 enum LaneDepartureStatus {
1748     off = "off",
1749     pause = "pause",
1750     running = "running"
1751 };
1752
1753 interface org.automotive.LaneDepartureDetection extends VehiclePropertyType {
1754   /*!
1755   * \brief MUST return current status of Lane departure warning function.
1756   */
1757   attribute LaneDepartureStatus Status readonly;
1758 }
1759
1760 enum AlarmStatus {
1761     disarmed = "disarmed",
1762     prearmed = "prearmed",
1763     armed = "armed",
1764     alarmed = "alarmed"
1765 };
1766
1767 interface org.automotive.Alarm extends VehiclePropertyType {
1768   /*!
1769   * \brief MUST return the current status of vehicle Alarm System.
1770   */
1771   attribute AlarmStatus Status;
1772 }
1773
1774 enum ParkingBrakeStatus {
1775     inactive = "inactive",
1776     active = "active",
1777     error = "error"
1778 };
1779