Sorry, you need to enable JavaScript to visit this website.

Feedback

Your feedback is important to keep improving our website and offer you a more reliable experience.

Automotive Message Broker

Automotive Message Broker is a framework for getting vehicle sensor data from the vehicle networks and making it available to applications. It allows applications to be developed independently of the differences in vehicle networks used in different automotive vehicle designs.

[Howto Series] - Getting started with the GENIVI Vehicle Interface

BY Kevron Rees ON Dec 19, 2014

Introduction

 
This page describes the Vehicle Interface API.  This API is a proposal for the GENIVI Vehicle Interface.
 

API Description

The Vehicle Interface API allows applications to access vehicle data in a standardized way.  AMB organizes the API into two general interface categories.  First the Manager interface (see manager.txt) which includes tools for using the other interfaces.  Second is a number of interfaces that represent vehicle data.  The latter follows the schema of "org.automotive.DataType" and are contained in various DBus paths.  The DBus paths are generally organized by /{source}/{zone}/DataType.  "source" refers to the AMB source that produces the data.  "zone" refers to the zone in which the data type is located in the vehicle or "0" for no zone. (see Zones)
 
The interfaces and data types are documented in amb.fidl (pasted at the bottom of this page).  Franca IDL tools can be used to generate DBus introspection xml which can be used to generate bindings for your language of choice.
 

Basic Recommended Usage

 
It is recommended that the Manager interface be used to find the DBus Object that contains the
data type you need.  This is done through the FindObject() call(s).  It is expected that DBus Object Paths may change and so it is not appropriate to hard code DBus Object Paths.
 
pseudo-code Example:
 
  var manager = dbus.interface("org.automotive.Manager", "/");
  var speedObjectPaths = manager.FindObject("VehicleSpeed");
 
  var speedObject = dbus.interface("org.automotive.VehicleSpeed", speedObjectPaths[0]);
  
  console.log("Vehicle Speed: " + speedObject.Speed);
 
 

Automotive Manager

Manager is a helper interface for discovering and finding available objects.  Manager is a helper interface that helps inform of supported data types and find specified data type objects' path on DBus.  Manager also helps users look up objects by zone (ie org.automotive.Manager.FindObjectForZone) and get additional information about a data type (ieorg.automotive.Manager.ZonesForObjectName).
 

Zones

'Zone' describes the position in the vehicle where the object is located.  The Zone type is a bitfield of values that can be combined to describe a specific location.  For example
 
Zone.Front | Zone.Left
 
(which is '9') may represent the driver position.
 
enumeration Zone {
  None = 0,
  Front = 1,
  Middle = 1 << 1,
  Right = 1 << 2,
  Left = 1 << 3,
  Rear = 1 << 4,
  Center = 1 << 5
}
 

Vehicle Property Type

Vehicle Property Type is the common interface which all Data types are derived.  This interface is as follows:
 
interface VehiclePropertyType {
  attribute Double Time readonly
  attribute Zone Zone readonly
  method GetHistory(Double beginTime, Double endTime) {
    out{ Dictionary result}
  }
}
 

Data types

 
The data types try to conform to the [http://w3c.github.io/automotive-bg/data_spec.html W3C Automotive Business Group Vehicle Data Specification] as much as possible.  There are differences in the Zone type, and this vehicle API contains some additional data types that the W3C Business Group has not yet defined.  'Time' also represents relative time in seconds rather than time in ms since epoch (DOMTimeStamp).  The names of the attributes are also different because of Web vs. DBus conventions.  In this Vehicle API, DBus properties use CamelCase (ie Speed vs speed) vs lowerCamelCase.  Units and types are the same where possible.
 
Also note that many types have been marked "deprecated" and replaced with the W3C version of the type.  Deprecated types should not be used in new projects.
 

Testing

 
The easiest way to test the vehicle interface is to download Tizen IVI.  Tizen IVI comes with AMB preinstalled.  AMB implements the Vehicle Interface.  AMB also runs on Ubuntu and probably any other Linux distro that has popular development packages (gcc, cmake, boost, etc).  Below is a guide for getting Tizen IVI up and testing AMB starting with a ubuntu system.  We will be using the minnowboard max system as our Tizen IVI target.
 

Add Tizen tools repo for ubuntu:

 
sudo nano /etc/apt/sources.list
 
Add the following line:
 
deb http://download.tizen.org/tools/latest-release/Ubuntu_14.10/ /
 
Now install bmaptools:
 
sudo apt-get update
sudo apt-get install bmap-tools
 

Getting and installing Tizen IVI image

 
We need a 64bit efi image for the minnowboard.  The "latest" Tizen IVI download folder contains a development snapshot.  This is tested to run core components, but might have some bugs.  However, It's generally fine for our testing.
 
Navigate browser to the latest snapshot: [https://download.tizen.org/snapshots/tizen/ivi/latest/images/atom64/ivi-... Tizen IVI latest].  Copy the link for the image which is typically something like called "tizen-ivi_yyyymmdd.n_ivi-efi-x86_64-sdb.raw.bz2".  Now insert a usb stick we will use to boot.  On this machine our usb device is '/dev/sdc'.  Use "sudo fdisk -l" to find your usb drive and use bmaptool to 'burn' the image onto the usb stick:
 
sudo bmaptool copy http://download.tizen.org/path/to/image.raw.bz2 /dev/sdc
 
Once this completes, unplug the USB drive and insert it into the minnowboard max.  Plug in the max and it should boot up to the weston desktop.
 

Testing AMB and the Vehicle Interface

 
Tizen IVI comes with AMB preinstalled but we will have to install some other packages that enable full Vehicle Interface data support.  Use weston terminal to get the ipaddress of the machine (use the 'ifconfig' command).  You can use WIFI if you have a WIFI dongle, but you will need to use connmanctl to connect over the command line.  We will assume for this test a ethernet connection to your ubuntu system's network.  Once you have the IP address, ssh into the machine and install the amb "bluemonkey" plugin.
 
ssh root@{minnowboard-max-ip-address}
password: tizen
zypper refresh
zypper in automotive-message-broker-plugins-bluemonkey
 
AMB's bluemonkey plugin allows scripting in javascript.  The default configuration script for bluemonkey already has all the data to support the Automotive Business Group W3C Data Spec.  This script can be found in /etc/ambd/bluemonkey/config.js.  For now we will use the default script, but you can edit it later to add support for other vehicle data and even custom vehicle data.  Enable the bluemonkey plugin by running and inserting the following configuration:
 
nano /etc/ambd/config.tizen
{
  "mainloop" : "/usr/lib/automotive-message-broker/qtmainloopplugin.so",
  "sources" : [
    {
      "name" : "Murphy Source",
      "path" : "/usr/lib/automotive-message-broker/murphysourceplugin.so",
      "address" : "unxs:/tmp/murphy/amb"
    },
    {
      "name" : "Bluemonkey",
      "path" : "/usr/lib/automotive-message-broker/bluemonkeyplugin.so",
      "config" : "/etc/ambd/bluemonkey/config.js"
    }
  ],
  "sinks": [
    {
      "name" : "DBusSink",
      "path" : "/usr/lib/automotive-message-broker/dbussinkplugin.so"
    }
  ]
}
 
Now restart ambd:
 
 
systemctl restart ambd
 
Use the amb tools and the dbus-send command to get vehicle data from AMB:
 

List supported ObjectNames:

 
dbus-send --system --print-reply --dest=org.automotive.message.broker / org.automotive.Manager.List
method return sender=:1.248 -> dest=:1.249 reply_serial=2
   array [
      string "Acceleration"
      string "AcceleratorPedalPosition"
      string "AirbagStatus"
      string "Alarm"
      string "AntilockBrakingSystem"
      string "AntilockBreakingSystem"
      string "AntilockBreakingSystemEnabled"
      string "AtmosphericPressure"
      string "Battery"
      string "BatteryStatus"
      string "BrakeMaintenance"
      string "BrakeOperation"
      string "BrakesWorn"
      string "ChildSafetyLock"
      string "Chime"
      string "ClimateControl"
      string "ConvertableRoof"
      string "ConvertableRoofStatus"
      string "CruiseControlStatus"
      string "DashboardIllumination"
      string "Defrost"
      string "DefrostMirrors"
      string "Diagnostics"
      string "Door"
      string "DoorStatus"
      string "DriveMode"
      string "ElectronicStabilityControl"
      string "EngineCoolant"
      string "EngineOil"
      string "EngineSpeed"
      string "Fluid"
      string "Fuel"
      string "HVAC"
      string "Horn"
      string "IgnitionTime"
      string "LaneDepartureDetection"
      string "LightStatus"
      string "MalfunctionIndicator"
      string "Mirror"
      string "MirrorSetting"
      string "ParkingBrake"
      string "PowertrainTorque"
      string "RainSensor"
      string "Seat"
      string "SeatAdjustment"
      string "SeatBelt"
      string "SeatPosition"
      string "SideWindow"
      string "SteeringWheel"
      string "Sunroof"
      string "Temperature"
      string "ThrottlePosition"
      string "Tire"
      string "TractionControlSystem"
      string "Transmission"
      string "TransmissionGearPosition"
      string "VehicleSound"
      string "VehicleSpeed"
      string "VehicleTopSpeedLimit"
      string "WasherFluid"
      string "WheelBrake"
      string "WheelInformation"
      string "WheelTick"
      string "WindowStatus"
      string "WindsheildWiperSetting"
      string "WindsheildWiperSpeed"
      string "YawRate"
   ]
 

Get an individual value

amb-get VehicleSpeed
{
  "VehicleSpeed": 10, 
  "Zone": 0, 
  "SpeedSequence": -1, 
  "Time": dbus.Double(0.0, variant_level=1), 
  "VehicleSpeedSequence": -1, 
  "Speed": 10
}
 

Listen for changes

 
amb-listen VehicleSpeed
 
Note: by default, all values in this bluemonkey script are static.  To make speed dynamic, enable the "testTimer" inside /etc/ambd/bluemonkey/config.js:
 
Navigate to the bottom of the script and change:
//testTimer.start();
to
testTimer.start();
then restart ambd:
 
systemctl restart ambd
 
 
Alternatively to modifying Bluemonkey script, you can amb-listen for something like ClimateControl in one terminal, and use amb-set (discussed below) to change the values.
 

Set a value:

amb-set is used to set values using the DBus API from the command line.  It uses the org.automotive.Manager.FindObjectForZone method to find the object we want to set and then the traditional org.freedesktop.DBus.Properties interface to set the property.  In this test, we will set ClimateControl.TargetTemperature to "17" for Zone "0":
 
amb-set ClimateControl TargetTemperature 17 integer 0
Success!
amb-get ClimateControl
{
  "Heater": 0, 
  "Zone": 0, 
  "TargetTemperature": 17, 
  "FanSpeedLevel": 1
  ...
}
 
Supported types for amb-set include: boolean, integer, string, double, UInt16.
 
Note: not all properties are settable over DBus.
 

Conclusion

 
We have looked at the Vehicle Interface API and an implementation of the Vehicle Interface API in AMB.  We have installed and configured Tizen IVI on the minnowboard max to demonstrate the API with the help of the AMB bluemonkey plugin.
 

Full FIDL

The latest version of the FIDL can be found at [https://github.com/otcshare/automotive-message-broker/blob/master/docs/a... the upstream AMB github page].  Below is a snapshot from AMB 0.12.900.
 
/*! amb.idl
* \name automotive-message-broker
* \version 0.12.900
* \brief This document describes the DBus interfaces and data types for the
* Automotive Message Broker API.  The data types are intended to as-close-as-
* possible be compatible with the W3C vehicle <a href="https://rawgit.com/w3c/automotive-bg/master/data_spec.html>data spec</a>.
*/
 
/*!
* Variant
*/
union Variant {
  UInt8 uint8
  Int8 int8
  UInt16 uint16
  Int16 int16
  UInt32 uint32
  Int32 int32
  UInt32 uin32
  Int64 int64
  UInt64 uint64
  Boolean boolean
  Float float
  Double double
  String string
  ByteBuffer bytebuffer
}
 
/*!
* Dictionary
*/
map Dictionary {
  String to Variant
}
 
/*!
* VehiclePropertyType
* \brief VehiclePropertyType is the base class for all Data types.
*/
interface VehiclePropertyType {
 
  /*!
  * \brief time in seconds since system start when a property in the interface updated.
  */
  attribute Double Time readonly
 
  /*!
  * \brief Zone in which the interface is situated.
  */
  attribute Zone Zone readonly
 
  /*!
  * \brief return dictionary of objectName and values for data between
  * 'beginTime' and 'endTime'
  * \arg beginTime time stamp in Seconds since Unix Epoc
  * \arg endTime time stamp in Seconds since Unix Epoc
  */
  method GetHistory(Double beginTime, Double endTime) {
    out{ Dictionary result}
  }
}
 
enumeration Zone {
  None = 0,
  Front = 1,
  Middle = 1 << 1,
  Right = 1 << 2,
  Left = 1 << 3,
  Rear = 1 << 4,
  Center = 1 << 5
}
 
/*! org.automotive.Manager
 * \brief Manager is a helper interface for discovering and finding available objects.
 * Objects represent interfaces to data types.
 */
interface org.automotive.Manager  {
 
  /*! List
   *  \brief return supported properties
  */
  method List {
    out {array of String objectNames}
  }
 
  /*!
   * FindObject
   *  \brief find the DBus object path matching the given "objectName" (ie "VehicleSpeed" is the object name for
   * the DBus object at path: "/path/to/VehicleSpeed") or org.automotive.Manager.ObjectNotFound if the object
   * name is not supported.
   *
   *  If the object path does not exist, it will be created.  The object path will be removed
   *  when the last proccess that calls Find* disconnects from DBus.
   *
   *  \arg String objectName to find
   *  \return list of object paths that provide the given object Name.
  */
  method FindObject {
    in {
      String objectName
    }
    out {
      array of String objectPaths
    }
  }
 
  /*!
   * FindObjectForZone
   *  \brief find the DBus object path which matches "objectName" and "zone".  This has the same behavior as FindObject
   * except that it takes an addition zone argument and only return the path for that zone.
   *  \arg String property is the requested property to be retrieved.
   *  \arg Zone zone is the zone which the object
   *  \return string representing the DBus Object path.  
   *  Possible errors:
   * "org.automotive.Manager.InvalidZone"
   * "org.automotive.Manager.ObjectNotFound"
  */
  method FindObjectForZone {
    in {
      String objectName
      Zone zone
    }
    out {
      String objectPath
    }
  }
 
  /*!
   * ZonesForObjectName
   *  \brief get a list of zones for a given objectName.
   *  \arg String objectName object name.
   *  \return list of zones for the given objectName (@see Zone)
  */
  method ZonesForObjectName {
    in {
      String objectName
    }
    out {
      array of UInt32 zones
    }
  }
 
  /*!
   * SupportsProperty
   * \brief check whether a Property exists.
   * \arg propertyName name of property of Object
   * \return true if Property exists
   */
  method SupportsProperty {
    in {
      String propertyName
    }
    out {
      Boolean supported
    }
  }
 
}
 
/*! org.automotive.VehicleSpeed
 \brief contains information about VehicleSpeed
 DBus Path: variable
*/
interface org.automotive.VehicleSpeed extends VehiclePropertyType  {
 
  /*!  Speed
   *   \brief  MUST return Vehicle Speed in kilometers per hour.
   */
  attribute UInt16 Speed readonly
}
 
/*! org.automotive.EngineSpeed
 \brief contains information about EngineSpeed
 DBus Path: variable
*/
interface org.automotive.EngineSpeed extends VehiclePropertyType  {
 
  /*!  EngineSpeed
   *   \brief  MUST return Engine Speed in rotations per minute.
   */
   attribute UInt16 Speed readonly
}
 
enumeration PowerMode {
  Off = 0
  Accessory1 = 1
  Accessory2 = 2
  Run = 3
}
 
interface org.automotive.VehiclePowerMode extends VehiclePropertyType  {
 
  /*!  VehiclePowerMode
   *   \brief  MUST return vehicle power mode
   */
  attribute PowerMode VehiclePowerMode readonly
}
 
/*! org.automotive.TripMeter
 \brief contains information about TripMeter
 DBus Path: variable
*/
interface org.automotive.TripMeter extends VehiclePropertyType  {
 
  /*!  TripMeters
   *   \brief  MUST return trip meters.  Changing any items in the array will reset the item's value to '0'.
   */
   attribute array TripMeters of UInt16;
}
 
/*! org.automotive.Acceleration
 \brief contains information about Acceleration
 DBus Path: variable
*/
interface org.automotive.Acceleration extends VehiclePropertyType  {
 
  /*!  X
   *   \brief  return acceleration on the "X" axis (Unit: centimeters per second squared)
   */
  attribute Int16 X readonly
 
  /*!  Y
   *   \brief  return acceleration on the "Y" axis (Unit: centimeters per second squared)
   */
  attribute Int16 Y readonly
 
  /*!  Z
   *   \brief  return acceleration on the "Z" axis (Unit: centimeters per second squared)
   */
  attribute Int16 Z readonly
}
 
enumeration TransmissionMode {
  park = "park",
  reverse = "reverse",
  neutral = "neutral",
  low = "low",
  drive = "drive",
  overdrive = "overdrive"
}
 
/*! TransmissionPosition
 * \brief Describes Transmission Pistion.  Deprecated.  Will disappear in 0.14
 */
enumeration TransmissionPosition {
  Neutral = 0,
  First = 1,
  Second = 2,
  Third = 3,
  Fourth = 4,
  Fifth = 5,
  Sixth = 6,
  Seventh = 7,
  Eighth = 8,
  Ninth = 9,
  Tenth = 10,
  Cvt = 64,
  Reverse = 128,
  Park = 255
}
 
/*! TransmissionGearType
 * \brief Describes the transmission gearbox type
*/
enumeration TransmissionGearType
{
  Auto = 0,
  Manual = 1,
  CVT = 2
}
 
interface org.automotive.Transmission extends VehiclePropertyType  {
  /*!  GearPosition
   *   \brief  MUST return transmission gear position (see TRANSMISSIONPOSITION) Deprecated.  Replaced with Gear
   */
   attribute TransmissionPosition GearPosition readonly
 
  /*!  TransmissionGearType
   *   \brief MUST return transmission gear type of either Automatic, Manual or Constant Variable (CV).
   *   See TRANSMISSIONGEARTYPE
   */
   attribute TransmissionGearType Type;
 
  /*!  Gear
   *   \brief  MUST return transmission gear position 1-10
   */
   attribute UInt8 Gear readonly
 
  /*!  Mode
   *   \brief  MUST return transmission Mode
   */
   attribute TransmissionMode Mode readonly
}
 
 
interface org.automotive.CruiseControlStatus extends VehiclePropertyType  {
 
  /*!  Activated
   *   \brief  MUST return whether or not the Cruise Control system is active (true) or inactive (false). Depricated.  Remove in 0.14.  Use "Status"
   */
   attribute Boolean Activated readonly
 
  /*!  Speed
   *   \brief  MUST return target Cruise Control speed in kilometers per hour (kph).
   */
   attribute UInt16 Speed readonly
 
  /*!  Status
   *   \brief  MUST return whether or not the Cruise Control system is active (true) or inactive (false).
   */
   attribute Boolean Status readonly
}
 
/*!
 * Deprecated.  Use BrakeOperation.  Remove in 0.14
 */
interface org.automotive.WheelBrake extends VehiclePropertyType  {
 
  /*!  Engaged
   *   \brief  MUST return Wheel Brake status: Engaged = true, disengaged = false
   */
   attribute Boolean Engaged readonly
}
 
interface org.automotive.BrakeOperation extends VehiclePropertyType  {
 
  /*!  BrakePedalDepressed
   *   \brief  MUST return whether brake pedal is depressed or not. true: brake pedal is depressed, false: brake pedal is not depressed
   */
   attribute Boolean BrakePedalDepressed readonly
}
 
interface org.automotive.LightStatus extends VehiclePropertyType  {
 
  /*!  Head
   *   \brief  MUST return headlight status: on = true, off = false.
   */
   attribute Boolean Head
 
  /*!  RightTurn
   *   \brief  MUST return right turn signal status: on = true, off = false.
   */
   attribute Boolean RightTurn
 
  /*!  LeftTurn
   *   \brief  MUST return left turn signal status: on = true, off = false.
   */
   attribute Boolean LeftTurn
 
  /*!  Brake
   *   \brief  MUST return  brake signal light status: on = true, off = false.
   */
   attribute Boolean Brake
 
  /*!  Fog
   *   \brief  MUST return fog light status: on = true, off = false.
   */
   attribute Boolean Fog
 
  /*!  Hazard
   *   \brief  MUST return hazard light status: on = true, off = false.
   */
   attribute Boolean Hazard
 
  /*!  Parking
   *   \brief  MUST return parking light status: on = true, off = false.
   */
   attribute Boolean Parking
 
  /*!  HighBeam
   *   \brief  MUST return high beam status: on = true, off = false.
   */
   attribute Boolean HighBeam
 
  /*!  AutomaticHeadlights
   *   \brief  MUST return automatic headlight status: on = true, off = false.
   */
  attribute Boolean AutomaticHeadlights
 
  /*!  DynamicHighBeam
   *   \brief  MUST return dynamic high beam status: on = true, off = false.
   */
  attribute Boolean DynamicHighBeam
}
 
 
interface org.automotive.InteriorLightStatus extends VehiclePropertyType  {
 
  /*!  Passenger
   *   \brief  MUST return passenger interior light status: on = true, off = false. Deprecated.  Remove in 0.14.   Use status and zone.
   */
   attribute Boolean Passenger readonly
 
  /*!  Driver
   *   \brief  MUST return driver interior light status: on = true, off = false. Deprecated.  Remove in 0.14.   Use status and zone.
   */
   attribute Boolean Driver readonly
 
  /*!  Center
   *   \brief  MUST return center interior light status: on = true, off = false. Deprecated.  Remove in 0.14.   Use status and zone.
   */
   attribute Boolean Center readonly
 
  /*!  Status
   *   \brief  MUST return interior light status for the zone. on = true, off = false
   */
    attribute Boolean Status
}
 
 
interface org.automotive.Horn extends VehiclePropertyType  {
 
  /*!  On
   *   \brief  MUST return horn status: on = true, off = false
   */
   attribute Boolean On readonly
}
 
 
interface org.automotive.Fuel extends VehiclePropertyType  {
 
  /*!  Level
   *   \brief  MUST return fuel level as a percentage of fullness.
   */
   attribute UInt16 Level readonly
 
  /*!  Range
   *   \brief  MUST return estimated fuel range in meters.
   */
   attribute UInt32 Range readonly
 
  /*!  InstantConsumption
   *   \brief  MUST return instant fuel consumption in per distance travelled (Unit: milliliters per 100 kilometers).
   */
   attribute UInt32 InstantConsumption readonly
 
  /*!  InstantEconomy
   *   \brief  MUST return instant fuel 'economy' in kilometers per liter of fuel.
   */
   attribute UInt16 InstantEconomy readonly
 
  /*!  AverageEconomy
   *   \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'
   */
   attribute UInt16 AverageEconomy;
 
  /*!  AverageConsumption
   *   \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'
   */
   attribute UInt32 AverageConsumption;
 
  /*!  FuelConsumedSinceRestart
   *   \brief MUST return fuel consumed since engine start; (Unit: milliliters per 100 kilometers) resets to 0 each restart
   */
   attribute UInt32 FuelConsumedSinceRestart readonly;
 
  /*!  TimeSinceRestart
   *   \brief MUST  return time elapsed since vehicle restart (Unit: seconds)
   */
   attribute UInt32 TimeSinceRestart readonly;
}
 
 
interface org.automotive.EngineOil extends VehiclePropertyType  {
 
  /*!  Remaining
   *   \brief MUST return remaining engine oil as percentage of fullness.  Deprecated.  Remove in 0.14.  Use "Level"
   */
   attribute UInt16 Remaining readonly
 
  /*!  Temperature
   *   \brief MUST return Engine Oil Temperature in Celcius.
   */
   attribute long Temperature readonly
 
  /*!  Pressure
   *   \brief MUST return Engine Oil Pressure in kPa.
   */
   attribute UInt16 Pressure readonly
 
  /*!  Level
   *   \brief MUST return engine oil level (Unit: percentage, 0%: empty, 100%: full
   */
   attribute UInt16 Level readonly
 
  /*!  Change
   *   \brief MUST return engine oil change indicator status: change oil (true) or no change (false)
   */
   attribute boolean Change readonly
 
  /*!  LifeRemaining
   *   \brief MUST return engine oil change indicator status: change oil (true) or no change (false)
   */
   attribute boolean LifeRemaining readonly
 
}
 
 
interface org.automotive.Location extends VehiclePropertyType  {
 
  /*!  Latitude
   *   \brief  MUST return latitude in Deg.Min (-180, +180)
   */
   attribute Double Latitude readonly
 
  /*!  Longitude
   *   \brief  MUST return longitude in Deg.Min (-90, +90)
   */
   attribute Double Longitude readonly
 
  /*!  Altitude
   *   \brief  MUST return altitude in meters above sea-level (0).
   */
   attribute Double Altitude readonly
 
  /*!  Direction
   *   \brief  MUST return direction in Degrees  (0-360)
   */
   attribute UInt16 Direction readonly
}
 
 
interface org.automotive.ExteriorBrightness extends VehiclePropertyType  {
 
  /*!  ExteriorBrightness
   *   \brief MUST return the brightness outside the vehicle in lux.
   */
   attribute UInt16 ExteriorBrightness readonly
}
 
 
interface org.automotive.Temperature extends VehiclePropertyType  {
 
  /*!  Interior
   *   \brief MUST return the temperature of the interior of the vehicle in celcius.
   */
   /// Deprecated.  Use InteriorTemperature.  Remove in 0.14
   attribute signed short Interior readonly
 
  /*!  Exterior
   *   \brief MUST return the temperature of the exterior of the vehicle in celcius.
   */
   /// Deprecated.  Use ExteriorTemperature.  Remove in 0.14
   attribute signed short Exterior readonly
 
  /*!  Interior
   *   \brief MUST return the temperature of the interior of the vehicle in celcius.
   */
   attribute signed short InteriorTemperature readonly
 
  /*!  Exterior
   *   \brief MUST return the temperature of the exterior of the vehicle in celcius.
   */
   attribute signed short ExteriorTemperature readonly
}
 
 
interface org.automotive.RainSensor extends VehiclePropertyType  {
 
  /*!  RainSensor
   *   \brief MUST return level of rain intensity 0: No Rain - 10: Heaviest Rain.
   *   Deprecated in 0.14.  Use rainIntensity
   */
   attribute UInt16 RainSensor readonly
 
  /*!  RainIntensity
   *   \brief MUST return level of rain intensity 0: No Rain - 10: Heaviest Rain.
   */
   attribute UInt16 RainIntensity readonly
}
 
 
/// TODO: Depricated in 0.14  Use WiperStatus
interface org.automotive.WindshieldWiper extends VehiclePropertyType  {
 
  /*!  WindshieldWiper
   *   \brief MUST return Level of windshield whiper speed (0-10)
   */
   attribute UInt16 WindshieldWiper readonly
 
}
 
enumeration WiperControl {
  off = "off",
  once = "once",
  slowest = "slowest",
  slow = "slow",
  middle = "middle",
  fast = "fast",
  fastest = "fastest",
  auto = "auto"
};
 
interface org.automotive.WiperStatus extends VehiclePropertyType  {
 
  /*!  WiperSpeed
   *   \brief MUST return current speed interval of wiping windshield
   */
   attribute WiperControl WiperSpeed readonly
 
  /*!  WiperSetting
   *   \brief MUST return current setting of the front wiper controller. It can be used to send user's request for changing setting.
   */
   attribute WiperControl WiperSetting
}
 
/*! Deprecated.  Use ClimateControl interface.  Remove in 0.14
*/
interface org.automotive.HVAC extends VehiclePropertyType  {
  const UInt16 AIRFLOWDIRECTION_FRONTPANEL = 0;
  const UInt16 AIRFLOWDIRECTION_FLOORDUCT= 1;
  const UInt16 AIRFLOWDIRECTION_FRONT = 0x02;
  const UInt16 AIRFLOWDIRECTION_DEFROSTER = 0x04;
 
  /*!  AirflowDirection
   *   \brief MUST return airflow direction.  See
   */
  attribute UInt16 AirflowDirection;
 
  /*!  FanSpeed
   *   \brief MUST return speed of the fan (0-7)
   */
  attribute UInt16 FanSpeed;
 
  /*!  TargetTemperature
   *   \brief MUST return target desired temperature in celcius.
   */
  attribute UInt16 TargetTemperature;
 
  /*!  AirConditioning
   *   \brief MUST return air conditioning on (true) / off (false).
   */
  attribute Boolean AirConditioning;
 
  /*!  AirRecirculation
   *   \brief MUST return air recirculation on (true) / off (false).
   */
  attribute Boolean AirRecirculation;
 
  /*!  Heater
   *   \brief MUST return heater on (true) / off (false).
   */
  attribute Boolean Heater;
 
  /*!  SteeringWheelHeater
   *   \brief MUST return air recirculation on (true) / off (false).
   */
  attribute Boolean SteeringWheelHeater;
 
  /*!  SeatHeater
   *   \brief MUST return seat heater status: 0-100%.
   */
  attribute UInt16 SeatHeater;
 
  /*!  SeatCooler
   *   \brief MUST return seat heater status: on (true) / off (false).
   */
  attribute Boolean SeatCooler;
}
 
enumeration AirflowDirectionType
{
  frontpanel = "frontpanel",
  floorduct = "floorduct",
  bilevel = "bilevel",
  defrostfloor = "defrostfloor"
}
 
interface org.automotive.ClimateControl extends VehiclePropertyType  {
  /*!  AirflowDirection
  *   \brief MUST return current status of the direction of the air flow through the ventilation system
  */
  attribute AirflowDirectionType AirflowDirection;
 
  /*!  FanSpeedLevel
  *   \brief MUST return seat heater status: on (true) / off (false).
  */
  attribute UInt8 FanSpeedLevel;
 
  /*!  TargetTemperature
  *   \brief MUST return current setting of the desired temperature (Unit: celsius)
  */
  attribute Int8 TargetTemperature;
 
  /*!  AirConditioning
  *   \brief MUST return current status of the air conditioning system: on (true) or off (false)
  */
  attribute Boolean AirConditioning;
 
  /*!  Heater
  *   \brief MUST return current status of the heating system: on (true) or off (false)
  */
  attribute Boolean Heater;
 
  /*!  SeatHeater
  *   \brief MUST return current status of the seat warmer ( 0: off, 1: least warm, 10: warmest )
  */
  attribute UInt8 SeatHeater;
 
  /*!  SeatCooler
  *   \brief MUST return current status of the seat ventilation ( 0: off, 1: least warm, 10: warmest )
  */
  attribute UInt8 SeatCooler;
 
  /*!  AirRecirculation
  *   \brief MUST return current setting of air recirculation: on (true) or pulling in outside air (false).
  */
  attribute Boolean AirRecirculation;
 
  /*!  SteeringWheelHeater
  *   \brief MUST return current status of steering wheel heater ( 0: off, 1: least warm, 10: warmest ).
  */
  attribute UInt8 SteeringWheelHeater;
}
 
/// Deprecated in 0.14.  Use SideWindow
interface org.automotive.WindowStatus extends VehiclePropertyType  {
 
  /*!  Openness
   *   \brief MUST return window openness percentage (100% fully open, 0% fully closed)
   *  for the window location see "zone" attribute
   */
  attribute UInt16 Openness;
 
  /*!  Defrost
   *   \brief MUST return the defroster status of the window. On = true, Off = false.
   *   Deprecated.  Use Defrost interface.  Remove in 0.14.
   */
  attribute Boolean Defrost;
}
 
interface org.automotive.SideWindow extends VehiclePropertyType  {
 
  /*!  Openness
   *   \brief MUST return window openness percentage (100% fully open, 0% fully closed)
   */
  attribute UInt16 Openness;
 
  /*! Lock
   * \brief MUST return whether or not the window is locked (true) or unlocked (false)
   */
  attribute Boolean Lock;
}
 
interface org.automotive.Defrost extends VehiclePropertyType  {
 
  /*! DefrostWindow
   *  \brief MUST return current status of the defrost switch for mirrors. It can be
   *  used to send user's request for changing setting.
   */
  attribute Boolean DefrostWindow;
 
  /*! DefrostMirrors
   *  \brief MUST return current status of the defrost switch for window. It can be
   *  used to send user's request for changing setting.
   */
  attribute Boolean DefrostMirrors;
}
 
interface org.automotive.Sunroof extends VehiclePropertyType  {
 
  /*!  Openness
   *   \brief MUST return window status for sunroof openness percentage.
   */
  attribute UInt16 Openness;
 
  /*!  Tilt
   *   \brief MUST return tilt status for sunroof percentage.
   */
  attribute UInt16 Tilt;
}
 
 
enumeration ConvertibleRoofStatus {
    closed = "closed",
    closing = "closing",
    opening = "opening",
    opened = "opened"
};
 
interface org.automotive.ConvertibleRoof extends VehiclePropertyType  {
  /*!  Status
   *   \brief MUST return current status of Convertible Roof.
   *
   */
   attribute ConvertibleRoofStatus Status readonly;
 
  /*!  Setting
   *   \brief MUST return current setting of Convertible Roof.  This is used to open (true) and close (false).
   *
   */
   attribute Boolean Setting;
}
 
 
interface org.automotive.VehicleId extends VehiclePropertyType  {
 
  /*!  WMI
   *   \brief MUST return World Manufacturer Identifier (WMI)
   *   WMI is defined by SAE ISO 3780:2009.  3 characters.
   */
   attribute String WMI readonly
 
  /*!  VIN
   *   \brief MUST return Vehicle Identification Number (VIN) as defined by ISO 3779. 17 characters.
   */
   attribute String VIN readonly
}
 
 
interface org.automotive.Size extends VehiclePropertyType  {
 
  /*!  Width
   *   \brief MUST return width of vehicle in mm
   */
   attribute UInt16 Width readonly
 
  /*!  Height
   *   \brief MUST return height of vehicle in mm
   */
   attribute UInt16 Height readonly
 
  /*!  Length
   *   \brief MUST return length of vehicle in mm
   */
   attribute UInt16 Length readonly
}
 
 
interface org.automotive.FuelInfo extends VehiclePropertyType  {
  const UInt16 FUELTYPE_GASOLINE = 0;
  const UInt16 FUELTYPE_HIGH_OCTANE= 1;
  const UInt16 FUELTYPE_DIESEL = 2;
  const UInt16 FUELTYPE_ELECTRIC = 3;
  const UInt16 FUELTYPE_HYDROGEN = 4;
  const UInt16 REFUELPOSITION_LEFT = 0;
  const UInt16 REFUELPOSITION_RIGHT= 1;
  const UInt16 REFUELPOSITION_FRONT = 2;
  const UInt16 REFUELPOSITION_REAR = 3;
 
  /*!  Type
   *   \brief MUST return type of fuel.  integer 0-4 (see
   */
   attribute UInt16 Type readonly
 
  /*!  RefuelPosition
   *   \brief MUST return position of refuling (see
   */
   attribute UInt16 RefuelPosition readonly
}
 
 
interface org.automotive.VehicleType extends VehiclePropertyType  {
  const UInt16 VEHICLETYPE_SEDAN = 0;
  const UInt16 VEHICLETYPE_COUPE= 1;
  const UInt16 VEHICLETYPE_CABRIOLE = 2;
  const UInt16 VEHICLETYPE_ROADSTER = 3;
  const UInt16 VEHICLETYPE_SUV = 4;
  const UInt16 VEHICLETYPE_TRUCK = 5;
 
  /*!  Type
   *   \brief MUST return type of Vehicle.  Integer 0-5 (see
   */
   attribute UInt16 Type readonly
}
 
 
interface org.automotive.Doors extends VehiclePropertyType  {
 
  /*!  DoorsPerRow
   *   \brief MUST return Number of doors in each row.  The index represents the row.  Position '0'
   *   represents the first row, '1' the second row etc.
   *   Example a common mini-van may have Doors[0] = 2 doors,
   *   Doors[1] = 1 (side door), Doors[2] = 1 (trunk).
   */
   attribute array DoorsPerRow of UInt16 readonly
}
 
 
interface org.automotive.WheelInformation extends VehiclePropertyType  {
 
  /*!  FrontWheelRadius
   *   \brief MUST return Radius of Front Wheel(s) in mm.
   */
   attribute UInt16 FrontWheelRadius readonly
 
  /*!  RearWheelRadius
   *   \brief MUST return Radius of Rear Wheel(s) in mm.
   */
   attribute UInt16 RearWheelRadius readonly
 
  /*!  WheelTrack
   *   \brief MUST return Wheel Track in mm.
   */
   attribute UInt16 WheelTrack readonly
 
  /*!  ABS
   *   \brief MUST return Antilock Brake System status: on = true, off = false.
   */
   attribute Boolean ABS readonly
}
 
 
interface org.automotive.Odometer extends VehiclePropertyType  {
 
  /*!  Odometer
   *   \brief MUST return Distance traveled in km
   */
   /// Deprecated. Use DistanceTotal.  Remove in 0.14
   attribute UInt32 Odometer readonly
 
  /*!  DistnaceTotal
   *   \brief MUST return Distance traveled in m
   */
   attribute UInt32 DistanceTotal readonly
 
  /*!  DistanceSinceStart
   *   \brief MUST return Distance traveled since start in m
   */
   attribute UInt32 DistanceSinceStart readonly
 
}
 
interface org.automotive.Fluid extends VehiclePropertyType  {
 
  /*!  Transmission
   *   \brief MUST return Transmission fluid level percentage. 0-100.
   */
   attribute UInt16 Transmission readonly
 
  /*!  Brake
   *   \brief MUST return Brake fluid level percentage. 0-100.
   *   TODO: Deprecated.  use BrakeMaintenance::FluidLevel  Remove in 0.14
   */
   attribute UInt16 Brake readonly
 
  /*!  Washer
   *   \brief MUST return Washer fluid level percentage. 0-100.
   *   TODO: Deprecated. use WasherFluid::Level.  Remove in 0.14
   */
   attribute UInt16 Washer readonly
}
 
///TODO: Deprecated.  Use BatteryStatus.  Remove in 0.14
interface org.automotive.Battery extends VehiclePropertyType  {
 
  /*!  Voltage
   *   \brief MUST return battery voltage.
   */
   attribute Double Voltage readonly
 
  /*!  Current
   *   \brief MUST return battery current in Amperes
   */
   attribute Double Current readonly
}
 
interface org.automotive.BatteryStatus extends VehiclePropertyType  {
 
  /*!  Voltage
   *   \brief MUST return battery voltage.
   */
   attribute UInt8 Voltage readonly
 
  /*!  Current
   *   \brief MUST return battery current in Amperes
   */
   attribute UInt8 Current readonly
 
  /*!  ChargeLevel
   *   \brief MUST return battery charge level (Unit: percentage, 0%: empty, 100%: full).
   */
   attribute UInt8 ChargeLevel readonly
}
 
 
interface org.automotive.Tire extends VehiclePropertyType  {
 
  /*!  Pressure
   *   \brief MUST return tire pressure in kPa.
   */
   attribute UInt16 Pressure readonly
 
  /*!  Temperature
   *   \brief MUST return left front tire temperature in Celcius.
   */
   attribute Int16 Temperature readonly
 
  /*!  Temperature
   *   \brief MUST return true if any tire pressure is low: pressure low (true), pressure not low (false).
   */
   attribute Boolean PressureLow readonly
}
 
 
interface org.automotive.SecurityAlert extends VehiclePropertyType  {
 
  /*!  SecurityAlert
   *   \brief MUST return
   */
   attribute Boolean SecurityAlert readonly
}
 
interface org.automotive.ParkingBrake extends VehiclePropertyType  {
 
  /*!  ParkingBrake
   *   MUST return status of parking brake:  Engaged = true, Disengaged = false.
   TODO: Deprecated in 0.14.  Use Status
   */
   attribute Boolean ParkingBrake readonly
 
  /*!
  * \brief MUST return the current status of parking brake.
  */
  attribute ParkingBrakeStatus Status;
}
 
/// Deprecated.  Use LightStatus.  remove in 0.14
interface org.automotive.ParkingLight extends VehiclePropertyType  {
 
  /*!  ParkingLight
   *   MUST return status of parking light:  Engaged = true, Disengaged = false.
   */
   attribute Boolean ParkingLight readonly
}
 
/// Deprecated.  Use LightStatus.  remove in 0.14
interface org.automotive.HazardLight extends VehiclePropertyType  {
 
  /*!  HazardLight
   *   MUST return status of hazard light:  Engaged = true, Disengaged = false.
   */
   attribute Boolean HazardLight readonly
}
 
 
interface org.automotive.AntilockBrakingSystem extends VehiclePropertyType  {
 
  /*!  AntilockBrakingSystem
   *   \brief MUST return whether Antilock Braking System is Idle (false) or Engaged (true)
   *   TODO: Deprecated.  Use Engaged.  Remove in 0.14
   */
   attribute Boolean AntilockBrakingSystem readonly
 
  /*!
  * \brief MUST return whether or not the ABS Setting is enabled: enabled (true) or disabled (false)
  */
  attribute Boolean Enabled readonly;
 
  /*!
  * \brief MUST return whether or not the ABS is engaged: engaged (true) or idle (false)
  */
  attribute Boolean Engaged readonly;
}
 
 
interface org.automotive.TractionControlSystem extends VehiclePropertyType  {
 
  /*!  TractionControlSystem
   *   \brief MUST return whether Traction Control System is Off (false) or On (true)
   * TODO: Deprecated.  Use Engaged.  Remove in 0.14
   */
   attribute Boolean TractionControlSystem readonly
 
  /*!
  * \brief MUST return whether or not the TCS Setting is enabled: enabled (true) or disabled (false)
  */
  attribute Boolean Enabled readonly;
 
  /*!
  * \brief MUST return whether or not the TCS is engaged: engaged (true) or idle (false)
  */
  attribute Boolean Engaged readonly;
}
 
 
interface org.automotive.VehicleTopSpeedLimit extends VehiclePropertyType  {
 
  /*!  VehicleTopSpeedLimit
   *   \brief MUST return top rated speed in km/h. 0 = no limit
   */
   attribute UInt16 VehicleTopSpeedLimit readonly
}
 
 
interface org.automotive.AirbagStatus extends VehiclePropertyType  {
 
  /*!  AirbagStatus
   *   \brief MUST return Airbag status (byte) (see AIRBAGSTATUS_*)
   *  TODO: deprecated.  Remove in 0.14
   */
   attribute UInt16 AirbagStatus readonly
 
  /*!
  * \brief MUST return whether or not the airbag is activaged: activated (true) or deactivated (false)
  */
  attribute Boolean Activated readonly;
 
  /*!
  * \brief MUST return whether the airbag is deployed: deployed (true) or not (false)
  */
  attribute Boolean Deployed readonly;
}
 
/// TODO: deprecated. Remove in 0.14
enumeration AirbagStatus {
  inactive = 0,
  active = 1,
  deployed = 2
}
 
/*!
 * Deprecated.  Use "Door".  Remove in 0.14
 */
interface org.automotive.DoorStatus extends VehiclePropertyType  {
 
  /*!  DoorStatus
   *   \brief MUST return Door status (byte).
   * CLOSED = 0
   * OPEN = 1
   * AJAR = 2
   */
   attribute UInt16 DoorStatus readonly
 
  /*!  DoorLockStatus
   *   \brief MUST return Door status (bool locked = true, unlocked = false).
   */
  attribute Boolean DoorLockStatus;
 
  /*!  ChildLockStatus
   *   \brief MUST return Child lock status of rear doors.  active = true, inactive = false.
   *   Setting this to 'true' will prevent the rear doors from being opened
   *   from the inside.
   */
   ///TODO: Deprecated in 0.14.  Use org.automotive.ChildLockStatus
  attribute Boolean ChildLockStatus;
}
 
enumeration DoorStatus {
  open = "open",
  ajar = "ajar",
  closed = "closed"
}
 
interface org.automotive.Door extends VehiclePropertyType  {
 
  /*!  Status
   *   \brief MUST return Door status (byte).  See DOORSTATUS_*
   */
   attribute DoorStatus Status readonly
 
  /*!  Lock
   *   \brief MUST return Door status (bool locked = true, unlocked = false).
   */
  attribute Boolean Lock;
 
  /*!  ChildLock
   *   \brief MUST return Child lock status of rear doors.  active = true, inactive = false.
   *   Setting this to 'true' will prevent the rear doors from being opened
   *   from the inside.
   */
  attribute Boolean ChildLock;
}
 
///TODO: Deprecated in 0.14.  Use org.automotive.Seat
interface org.automotive.SeatBelt extends VehiclePropertyType  {
 
  /*! Status
   *  \brief MUST return Seat Belt Status (bool: Fasten = true, Unfastened = false)
   */
   attribute Boolean Status readonly
}
 
///TODO: Deprecated in 0.14.  Use org.automotive.Seat
interface org.automotive.OccupantStatus extends VehiclePropertyType  {
 
  /*!  OccupantStatus
   *   \brief MUST return status of Occupant (byte, see
   */
   attribute UInt16 OccupantStatus readonly
}
 
 
interface org.automotive.ObstacleDistance extends VehiclePropertyType  {
 
  /*!  ObstacleDistance
   *   \brief MUST return Distance Sensor distance (Double) in m.
   */
   attribute Double ObstacleDistance readonly
}
 
 
interface org.automotive.NightMode extends VehiclePropertyType {
 
  /*!
   * \brief MUST return whether or not the system is in NightMode or not.  True = Night time, False = Day time
   * Deprecated.  Will be removed in 0.14. Use "Mode"
   */
   attribute Boolean NightMode readonly
 
  /*!
   * \brief MUST return whether or not the system is in NightMode or not.  True = Night time, False = Day time
   */
   attribute Boolean Mode readonly
}
 
 
interface org.automotive.DrivingMode extends VehiclePropertyType {
 
  /*!
  * \brief MUST return whether or not the system is in DrivingMode or not.  1 = Driving, 0 = Not Driving
  */
   attribute UInt16 DrivingMode readonly
 
  /*!
  * \brief MUST return true if vehicle is in driving mode
  */
   attribute Boolean Mode readonly
}
 
 
interface org.automotive.KeyId extends VehiclePropertyType {
 
  /*!
  * \brief MUST return
  */
   attribute String KeyId readonly
}
 
interface org.automotive.Language extends VehiclePropertyType {
 
  /*!
  * \brief MUST return
  */
   attribute String Language readonly
}
 
 
interface org.automotive.MeasurementSystem extends VehiclePropertyType {
 
  /*!
  * \brief MUST return 0 = Metric, 1 = ImperialUS, 2 = ImperialUK
  */
   attribute UInt16 MeasurementSystem readonly
}
 
 
///TODO Deprecated.  Use org.automotive.Mirror.  Remove in 0.14
interface org.automotive.MirrorSetting extends VehiclePropertyType {
 
  /*!
  * \brief MUST return
  */
   attribute UInt8 Pan readonly
   attribute UInt8 Tilt readonly
}
 
 
///TODO Deprecated.  Use org.automotive.SeadAdjustment.  Remove in 0.14
interface org.automotive.SeatPosition extends VehiclePropertyType {
 
  /*!
  * \brief MUST return
  */
   attribute UInt16 Recline readonly
 
    /*!
  * \brief MUST return
  */
   attribute UInt16 Slide readonly
 
  /*!
  * \brief MUST return
  */
   attribute UInt16 CushionHeight readonly
 
  /*!
  * \brief MUST return
  */
   attribute UInt16 Headrest readonly
 
  /*!
  * \brief MUST return
  */
   attribute UInt16 BackCushion readonly
 
  /*!
  * \brief MUST return
  */
   attribute UInt16 SideCushion readonly
}
 
 
interface org.automotive.SteeringWheelPosition extends VehiclePropertyType {
 
  /*!
  * \brief MUST return
  */
   attribute UInt16 Tilt readonly
 
  /*!
  * \brief MUST return
  */
   attribute UInt16 Slide readonly
}
 
 
interface org.automotive.DashboardIllumination extends VehiclePropertyType {
 
  /*!
  * \brief MUST return
  */
   attribute UInt16 DashboardIllumination readonly
}
 
///TODO Deprecated.  Use org.automotive.VehicleSound. Remove in 0.14
interface org.automotive.GeneratedVehicleSoundMode extends VehiclePropertyType {
 
  /*!
  * \brief MUST return Sound Mode: 0 = Normal, 1 = Quiet, 2 = Sportive
  */
   attribute UInt16 GeneratedVehicleSoundMode readonly
}
 
 
/*! SteeringWheelAngle
 *\brief
 * Deprecated.  Use SteeringWheel
 */
interface org.automotive.SteeringWheelAngle extends VehiclePropertyType {
 
  /*!
  * \brief MUST return angle of the steering wheel. 0-359 degrees.
  */
   attribute UInt16 SteeringWheelAngle readonly
}
 
interface org.automotive.SteeringWheel extends VehiclePropertyType {
 
  /*!
  * \brief MUST return angle of steering wheel off centerline (Unit: degrees -:degrees to the left, +:degrees to the right)
  */
   attribute Int16 Angle readonly
}
 
 
interface org.automotive.ButtoneEvent extends VehiclePropertyType {
 
  /*!
  * \brief MUST return button event:
  * NoButton =0
  * PlayButton = 1,
  * SkipButton = 1 << 1,
  * PrevButton = 1 << 2,
  * PauseButton = 1 << 3,
  * Preset1Button = 1 << 4,
  * Preset2Button = 1 << 5,
  * Preset3Button = 1 << 6,
  * Preset4Button = 1 << 7,
  * StopButton = 1 << 8,
  * NavigateUpButton = 1 << 9,
  * NavigateDownButton = 1 << 10,
  * NavigateLeftButton = 1 << 11,
  * NavigateRightButton = 1 << 12
  */
   attribute UInt32 ButtonEvent readonly
}
 
 
interface org.automotive.DriverId extends VehiclePropertyType {
 
  /*!
  * \brief MUST return driver ID.  Driver Id is an abstract and can be determined
  * from multiple sources including bluetooth, key, key fob, etc.
  */
   attribute String DriverId readonly
}
 
interface org.automotive.ThrottlePosition extends VehiclePropertyType {
 
  /*!
  * \brief MUST return throttle position as a percentage (Unit: percentage, 0%: closed, 100%: fully open)
  */
   attribute Uint8 Value readonly
}
 
interface org.automotive.EngineCoolant extends VehiclePropertyType {
 
  /*!
  * \brief MUST return engine coolant level (Unit: percentage 0%: empty, 100%: full)
  */
   attribute Uint16 Level readonly
 
  /*!
  * \brief MUST return engine coolant temperature (Unit: celcius)
  */
   attribute Int16 Temperature readonly
}
 
interface org.automotive.PowertrainTorque extends VehiclePropertyType {
 
  /*!
   * \brief MUST return powertrain torque (Unit: newton meters)
   */
   attribute UInt16 Value readonly
}
 
interface org.automotive.AcceleratorPedalPosition extends VehiclePropertyType {
 
  /*!
   * \brief MUST  return accelerator pedal position as a percentage (Unit: percentage, 0%: released pedal, 100%: fully depressed)
   */
   attribute UInt8 Value readonly
}
 
interface org.automotive.WheelTick extends VehiclePropertyType {
 
  /*!
   * \brief MUST return number of ticks per second (Unit: ticks per second)
   */
   attribute UInt8 Value readonly
}
 
interface IgnitionTime : VehicleCommonDataType {
   /*!
    * \brief MUST return time at ignition on
    */
    attribute UInt64 ignitionOnTime readonly
 
    /*!
     * \brief MUST return time at ignition off
     */
     attribute UInt64 ignitionOffTime readonly
};
 
interface org.automotive.YawRate extends VehiclePropertyType {
 
  /*!
   * \brief MUST return yaw rate of vehicle. (Unit: degrees per second)
   */
   attribute Int16 Value readonly
}
 
interface org.automotive.BrakeOperation extends VehiclePropertyType {
 
  /*!
   * \brief MUST return whether brake pedal is depressed or not. true: brake pedal is depressed, false: brake pedal is not depressed
   */
   attribute Boolean BrakePedalDepressed readonly
}
 
enumeration Button {
    home = "home",
    back = "back",
    search = "search",
    call = "call",
    end_call = "end_call",
    media_play = "media_play",
    media_next = "media_next",
    media_previous = "media_previous",
    media_pause = "media_pause",
    voice_recognize = "voice_recognize",
    enter = "enter",
    left = "left",
    right = "right",
    up = "up",
    down = "down"
}
 
enumeration ButtonEventType {
    press = "press",
    long_press = "long_press",
    release = "release"
};
 
interface VehicleButton {
    /*!
    * \brief MUST return the button corresponding to the event.
    */
    attribute Button button readonly;
 
    /*!
    * \brief MUST return the type of event
    */
    attribute ButtonEventType state readonly;
}
 
interface org.automotive.ButtonEvent extends VehiclePropertyType {
 
  /*!
   * \brief MUST return the button events that occured. This supports multiple simultanious button events.
   */
   attribute array Button of VehicleButton readonly;
}
 
interface org.automotive.TransmissionOil extends VehiclePropertyType {
 
  /*!
   * \brief MUST return current temperature of the transmission oil(Unit: celsius).
   */
   attribute Int8 Temperature readonly;
 
  /*!
   * \brief MUST return transmission oil wear (Unit: percentage, 0: no wear, 100: completely worn).
   */
   attribute UInt8 Wear readonly;
}
 
interface org.automotive.TransmissionClutch extends VehiclePropertyType {
 
  /*!
   * \brief MUST return transmission clutch wear (Unit: percentage, 0: no wear, 100: completely worn).
   */
   attribute UInt8 Wear readonly;
}
 
interface org.automotive.BrakeMaintenance extends VehiclePropertyType {
 
  /*!
   * \brief MUST return brake pad wear (Unit: percentage, 0%: no wear, 100%: completely worn).
   */
   attribute UInt8 PadWear readonly;
 
  /*!
   * \brief MUST return brake fluid level (Unit: percentage, 0%: empty, 100%: full).
   */
   attribute UInt8 FluidLevel readonly;
 
  /*!
   * \brief MUST return true if brake fluid level: low (true), not low (false)
   */
   attribute Boolean FluidLevelLow readonly;
 
  /*!
   * \brief MUST return true if brakes are worn: worn (true), not worn (false)
   */
   attribute Boolean BrakesWorn readonly;
}
 
interface org.automotive.WasherFluid extends VehiclePropertyType {
 
  /*!
   * \brief MUST return washer fluid level (Unit: percentage, 0%: empty, 100%: full).
   */
   attribute UInt8 Level readonly;
 
  /*!
   * \brief MUST return true if washer fluid level is low: low (true), not low: (false)
   */
   attribute Boolean LevelLow readonly;
}
 
interface org.automotive.MalfunctionIndicator extends VehiclePropertyType {
 
  /*!
   * \brief MUST return true if washer fluid level is low: low (true), not low: (false)
   */
   attribute Boolean On readonly;
}
 
interface org.automotive.Diagnostic extends VehiclePropertyType {
 
  /*!
   * \brief MUST return engine runtime (Unit: seconds)
   */
   attribute UInt32 AccumulatedEngineRuntime readonly;
 
   /*!
    * \brief MUST return distance travelled since the codes were last cleared (Unit: meters)
    */
   attribute UInt32 DistanceSinceCodeCleared readonly;
 
   /*!
    * \brief MUST return distance travelled with the malfunction indicator light on (Unit: meters)
    */
   attribute UInt32 DistanceWithMILOn readonly;
 
   /*!
    * \brief MUST return time elapsed with the malfunction indicator light on (Unit: seconds)
    */
   attribute UInt32 TimeRunMILOn readonly;
 
   /*!
    * \brief MUST return time elapsed since the trouble codes were last cleared (Unit: seconds)
    */
   attribute UInt32 TimeTroubleCodeClear readonly;
}
 
interface org.automotive.Mirror extends VehiclePropertyType {
 
  /*!
   * \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)
   */
   attribute UInt8 MirrorPan;
 
  /*!
   * \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)
   */
   attribute UInt8 MirrorTilt;
}
 
interface org.automotive.SeatAdjustment extends VehiclePropertyType {
 
  /*!
  * \brief MUST return seat back recline position as percent to completely reclined (Unit: percentage, 0%: fully forward, 100%: fully reclined)
  */
   attribute UInt8 ReclineSeatBack;
 
  /*!
  * \brief MUST return seat slide position as percentage of distance travelled away from forwardmost position (Unit: percentage, 0%: farthest forward, 100%: farthest back)
  */
   attribute UInt8 SeatSlide;
 
  /*!
  * \brief MUST return seat cushion height position as a percentage of upward distance travelled (Unit: percentage, 0%:lowest. 100%:highest)
  */
   attribute UInt8 SeatCushionHeight;
 
  /*!
  * \brief MUST return headrest position as a percentage of upward distance travelled (Unit: percentage, 0%: lowest, 100%: highest)
  */
   attribute UInt8 SeatHeadrest;
 
  /*!
  * \brief MUST return back cushion position as a percentage of lumbar curvature (Unit: percentage, 0%: flat, 100%: maximum curvature)
  */
   attribute UInt8 SeatBackCushion;
 
  /*!
  * \brief MUST return sides of back cushion position as a percentage of curvature (Unit: percentage, 0%: flat, 100%: maximum curvature)
  */
   attribute UInt8 SeatSideCushion;
}
 
enumeration DriveModeType {
  comfort = "comfort",
  auto = "auto",
  sport = "sport",
  eco = "eco",
  manual = "manual",
  winter = "winter"
};
 
interface org.automotive.DriveMode extends VehiclePropertyType {
  /*!
  * \brief MUST return vehicle drive mode. See http://w3c.github.io/automotive-bg/data_spec.html#idl-def-DriveModeEnum
  */
  attribute DriveModeType DriveMode;
}
 
interface org.automotive.DashboardIllumination extends VehiclePropertyType {
  /*!
  * \brief MUST return illumination of dashboard as a percentage (Unit: percentage, 0%: none, 100%: maximum illumination)
  */
  attribute UInt8 DashboardIllumination;
}
 
interface org.automotive.VehicleSound extends VehiclePropertyType {
  /*!
  * \brief MUST return active noise control status: not-activated (false), activated (true)
  */
  attribute Boolean ActiveNoiseControlMode;
 
  /*!
  * \brief MUST return active noise control status: not-activated (false), activated (true)
  */
  attribute Boolean EngineSoundEnhancementMode;
 
  /*!
  * \brief MUST return array of available sounds. See EngineSoundEnhancementMode
  */
  attribute array EngineSoundEnhancementMode of String readonly;
}
 
interface org.automotive.ElectronicStabilityControl extends VehiclePropertyType {
  /*!
  * \brief MUST return whether or not the ESC Setting is enabled: enabled (true) or disabled (false)
  */
  attribute Boolean Enabled readonly;
 
  /*!
  * \brief MUST return whether or not the ESC is engaged: engaged (true) or idle (false)
  */
  attribute Boolean Engaged readonly;
}
 
interface org.automotive.TopSpeedLimit extends VehiclePropertyType {
  /*!
  * \brief MUST return whether or not the ESC Setting is enabled: enabled (true) or disabled (false)
  */
  attribute UInt16 Speed readonly;
}
 
interface org.automotive.ChildSafetyLock extends VehiclePropertyType {
  /*!
  * \brief MUST return whether or not the Child Safety Lock is locked: locked (true) or unlocked (false)
  */
  attribute Boolean Lock;
}
 
enumeration OccupantStatus {
  adult = "adult",
  child = "child",
  vacant = "vacant"
};
 
enumeration IdentificationTypeEnum {
  pin = "pin",
  keyfob = "keyfob",
  Bluetooth = "Bluetooth",
  NFC = "NFC",
  fingerprint = "fingerprint",
  camera = "camera",
  voice = "voice"
};
 
interface org.automotive.Seat extends VehiclePropertyType {
  /*!
  * \brief MUST return the status of seat occupant
  */
  attribute OccupantStatus Occupant;
 
  /*!
  * \brief MUST return whether or not the seat belt is fastened: fastened (true) or unfastened (false)
  */
  attribute Boolean SeatBelt;
 
  /*!
  * \brief MUST return occupant identifier
  */
  attribute String OccupantName;
 
  /*!
  * \brief MUST return identification type
  */
  attribute IdentificationTypeEnum IdentificationType;
}
 
interface org.automotive.AtmosphericPressure extends VehiclePropertyType {
  /*!
  * \brief MUST return the current atmospheric pressure outside of the vehicle (Unit: hectopascal)
  */
  attribute UInt16 Pressure;
}
 
enumeration LaneDepartureStatus {
    off = "off",
    pause = "pause",
    running = "running"
};
 
interface org.automotive.LaneDepartureDetection extends VehiclePropertyType {
  /*!
  * \brief MUST return current status of Lane departure warning function.
  */
  attribute LaneDepartureStatus Status readonly;
}
 
enumeration AlarmStatus {
    disarmed = "disarmed",
    prearmed = "prearmed",
    armed = "armed",
    alarmed = "alarmed"
};
 
interface org.automotive.Alarm extends VehiclePropertyType {
  /*!
  * \brief MUST return the current status of vehicle Alarm System.
  */
  attribute AlarmStatus Status;
}
 
enumeration ParkingBrakeStatus {
    inactive = "inactive",
    active = "active",
    error = "error"
};
 
interface org.automotive.ParkingBrake extends VehiclePropertyType {
  /*!
  * \brief MUST return the current status of vehicle Alarm System.
  */
  attribute ParkingBrakeStatus Status readonly;
}