Abstract

This specification defines a Vehicle Information API which offers a simple interface to get access to vehicle data. A typical use case of the Vehicle Information is the implementation of a tachometer application that allows view inforomation from the vehicle such as speed, tire pressure, and engine rotation speed (RPMs).

Status of This Document

This document is merely a public working draft of a potential specification. It has no official standing of any kind and does not represent the support or consensus of any standards organisation.

Table of Contents

1. Introduction

This section is non-normative.

The Vehicle Information API provides operations to get access to the vehicle data (henceforth "properties") available from vehicle systems and also to change (write) a number of properties. The API also allows users to request data that has been logged previously.

An example of use is provided below:

Example 1
navigator.vehicle.get("EngineSpeed", onsuccess, onerror);
  
function onsuccess(value) {
        window.console.log(value.EngineSpeed);
}
function onerror(e) {
        window.console.error(e.message);
}

2. Conformance

As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

The key words MUST, MUST NOT, REQUIRED, SHOULD, SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL in this specification are to be interpreted as described in [RFC2119].

This specification defines conformance criteria that apply to a single product: the user agent that implements the interfaces that it contains.

Implementations that use ECMAScript to implement the APIs defined in this specification MUST implement them in a manner consistent with the ECMAScript Bindings defined in the Web IDL specification [WEBIDL], as this specification uses that specification and terminology.

3. Terminology

The EventHandler interface represents a callback used for event handlers as defined in [HTML5].

The concepts queue a task and fire a simple event are defined in [HTML5].

The terms event handler and event handler event types are defined in [HTML5].

4. Security and privacy considerations

This API must be only exposed to trusted content

6. Vehicle Information Interface

The Vehicle Infomration interface represents the initial entry point for getting access to the vehicle information services, i.e. Engine Speed and Tire Pressure.

[NoInterfaceObject]
interface Vehicle {
    void getSupported (SupportedPropertiesCallback successCallback, VehiclePropertyErrorCallback errorCallback);
    void get (DOMString property, VehiclePropertyCallback success, VehiclePropertyErrorCallback errorCallback);
    void set (DOMString property, VehiclePropertyType value, VehiclePropertyCallback success, VehiclePropertyErrorCallback errorCallback);
    void getHistory (DOMString property, Date startTime, Date endTime, VehiclePropertyListCallback success, VehiclePropertyErrorCallback errorCallback);
};

6.1 Methods

get
fetch the current value for property. Upon success, the successCallback will be called with the value.
ParameterTypeNullableOptionalDescription
propertyDOMStringrequested property to be retrieved
successVehiclePropertyCallbackfunction to be called when method has completed successfully
errorCallbackVehiclePropertyErrorCallbackthis function is called when an error has occured
Return type: void
getHistory
get the property in series from startTime to endTime. Upon success, the successCallback will be called with the result.
ParameterTypeNullableOptionalDescription
propertyDOMStringrequested property to be retrieved
startTimeDatebeginning time for request
endTimeDateending time for request
successVehiclePropertyListCallbackfunction to be called when method has completed successfully
errorCallbackVehiclePropertyErrorCallbackthis function is called when an error has occured
Return type: void
getSupported
Preturns supported properties.
ParameterTypeNullableOptionalDescription
successCallbackSupportedPropertiesCallbackfunction to be called when method has completed successfully
errorCallbackVehiclePropertyErrorCallbackthis function is called when an error has occured
Return type: void
set
set the property to value. Upon success, the successCallback will be called with the result.
ParameterTypeNullableOptionalDescription
propertyDOMStringrequested property to be retrieved
valueVehiclePropertyTypecorrisponding value to set
successVehiclePropertyCallbackfunction to be called when method has completed successfully
errorCallbackVehiclePropertyErrorCallbackthis function is called when an error has occured
Return type: void

6.2 Steps

The getSupported method when invoked MUST run the following steps:

  1. Make a request to the system to get the vehicle information properties(s) supported by the system.
  2. Create a new array of DOMString for all supported properties in the system.
  3. When the request has been completed:
    1. call successCallback and pass into the function the DOMString array representing the supported properties.
    2. If an error has occured, construct a VehiclePropertyError object and set the message and code appropriatly for the error.

The get method when invoked MUST run the following steps:

  1. Make a request to the system to get the property indicated in the property parameter
  2. If the property is not supported construct a VehiclePropertyError object and set the code members to VehiclePropertyError.PROPERTY_UNAVAILABLE and message member to "Unsupported property".
  3. When the request has been completed:
    1. if successful invoke the successCallback and pass the VehiclePropertyType as the argument.
    2. if there has been an error, construct a VehiclePropertyError object and set the message and code appropriatly for the error.

The set method when invoked MUST run the following steps:

  1. Make a request to the system to set the property indicated in the property parameter to the value indicated in the value parameter.
  2. If the property is not supported construct a VehiclePropertyError object and set the code members to VehiclePropertyError.PROPERTY_UNAVAILABLE and message member to "Unsupported property".
  3. When the request has been completed:
    1. if successful invoke the successCallback and pass the VehiclePropertyType as the argument.
    2. if there has been an error, construct a VehiclePropertyError object and set the message and code appropriatly for the error.

The getHistory method when invoked MUST run the following steps:

  1. Make a request to the system to get the values for the property indicated in the property parameter after the time startTime and after the time endTime.
  2. If the property is not supported construct a VehiclePropertyError object and set the code members to VehiclePropertyError.PROPERTY_UNAVAILABLE and message member to "Unsupported property".
  3. When the request has been completed:
    1. if successful invoke the successCallback and pass the array of VehiclePropertyType as the argument.
    2. if there has been an error, construct a VehiclePropertyError object and set the message and code appropriatly for the error.

7. VehiclePropertyType Interface

The VehiclePropertyType interface represents the base interface for all vehicle properties.

[NoInterfaceObject]
interface VehiclePropertyType : Event {
    readonly    attribute Date timeStamp;;
};

7.1 Attributes

timeStamp; of type Date, readonly
MUST return the type time at which this property was recieved.

8. VehiclePropertyError Interface

The VehiclePropertyError interface represents the an error returned by the vehicle information system. manager.

[NoInterfaceObject]
interface VehiclePropertyError {
    const unsigned short PERMISSION_DENIED = 1;
    const unsigned short PROPERTY_UNAVAILABLE = 2;
    const unsigned short TIMEOUT = 3;
    const unsigned short UNKNOWN = 10;
    readonly    attribute unsigned short code;
    readonly    attribute DOMString      message;
};

8.1 Attributes

code of type unsigned short, readonly
MUST return error code.
message of type DOMString, readonly
MUST return error message

8.2 Constants

PERMISSION_DENIED of type unsigned short
const unsigned short PROPERTY_UNAVAILABLE = 2
PROPERTY_UNAVAILABLE of type unsigned short
const unsigned short TIMEOUT = 3
TIMEOUT of type unsigned short
const unsigned short UNKNOWN = 10
UNKNOWN of type unsigned short
readonly attribute unsigned short code

9. VehiclePropertyCallback Callback

The VehiclePropertyCallback is called during the navigator.vehicle.get() operation

10. VehiclePropertyErrorCallback Callback

The VehiclePropertyErrorCallback is called during the navigator.vehicle.get() operation

11. VehiclePropertyListCallback Callback

The VehiclePropertyListCallback is called during the navigator.vehicle.getHistory() operation

12. SupportedPropertiesCallback Callback

The SupportedPropertiesCallback is called during the navigator.vehicle.getSupported() operation

13. VehicleSpeed Interface

The VehicleSpeed interface represents vehicle speed.

[NoInterfaceObject]
interface VehicleSpeed : VehiclePropertyType {
    readonly    attribute unsigned long VehicleSpeed;
};

13.1 Attributes

VehicleSpeed of type unsigned long, readonly
Must return Vehicle Speed in kilometers per hour.

14. EngineSpeed Interface

The EngineSpeed interface represents engine speed.

[NoInterfaceObject]
interface EngineSpeed : VehiclePropertyType {
    readonly    attribute unsigned long EngineSpeed;
};

14.1 Attributes

EngineSpeed of type unsigned long, readonly
Must return Engine Speed in rotations per minute.

15. VehiclePowerMode Interface

The VehiclePowerMode interface represents the current vehidle power mode.

[NoInterfaceObject]
interface VehiclePowerMode : VehiclePropertyType {
    const unsigned short VEHICLEPOWERMODE_OFF = 0;
    const unsigned short VEHICLEPOWERMODE_ACCESSORY1 = 1;
    const unsigned short VEHICLEPOWERMODE_ACCESSORY2 = 2;
    const unsigned short VEHICLEPOWERMODE_RUN = 3;
    readonly    attribute octet VehiclePowerMode;
};

15.1 Attributes

VehiclePowerMode of type octet, readonly
Must return Vehicle Power mode (see VEHICLEPOWERMODE)

15.2 Constants

VEHICLEPOWERMODE_ACCESSORY1 of type unsigned short
const unsigned short VEHICLEPOWERMODE_ACCESSORY2 = 2
VEHICLEPOWERMODE_ACCESSORY2 of type unsigned short
const unsigned short VEHICLEPOWERMODE_RUN = 3
VEHICLEPOWERMODE_OFF of type unsigned short
const unsigned short VEHICLEPOWERMODE_ACCESSORY1 = 1
VEHICLEPOWERMODE_RUN of type unsigned short
readonly attribute octet VehiclePowerMode

16. TripMeters Interface

The TripMeters interface represents the current trip meters.

[NoInterfaceObject]
interface TripMeters : VehiclePropertyType {
                attribute sequence unsigned long TripMeters;
};

16.1 Attributes

TripMeters of type sequence unsigned long,
Must return trip meters. Changing any items in the array will reset the item's value to '0'.

17. Acceleration Interface

The Acceleration interface represents vehicle acceleration.

[NoInterfaceObject]
interface Acceleration : VehiclePropertyType {
    readonly    attribute unsigned long X;
    readonly    attribute unsigned long Y;
    readonly    attribute unsigned long Z;
};

17.1 Attributes

X of type unsigned long, readonly
Must return acceleration on the "X" axis as 1/1000 G (gravitational force).
Y of type unsigned long, readonly
Must return acceleration on the "Y" axis as 1/1000 G (gravitational force).
Z of type unsigned long, readonly
Must return acceleration on the "Z" axis as 1/1000 G (gravitational force).

18. Transmission Interface

The Transmission interface represents the current transmssion gear and mode.

[NoInterfaceObject]
interface Transmission : VehiclePropertyType {
    const unsigned short TRANSMISSIONPOSITION_NEUTRAL = 0;
    const unsigned short TRANSMISSIONPOSITION_FIRST = 1;
    const unsigned short TRANSMISSIONPOSITION_SECOND = 2;
    const unsigned short TRANSMISSIONPOSITION_THIRD = 3;
    const unsigned short TRANSMISSIONPOSITION_FORTH = 4;
    const unsigned short TRANSMISSIONPOSITION_FIFTH = 5;
    const unsigned short TRANSMISSIONPOSITION_SIXTH = 6;
    const unsigned short TRANSMISSIONPOSITION_SEVENTH = 7;
    const unsigned short TRANSMISSIONPOSITION_EIGHTH = 8;
    const unsigned short TRANSMISSIONPOSITION_NINTH = 9;
    const unsigned short TRANSMISSIONPOSITION_TENTH = 10;
    const unsigned short TRANSMISSIONPOSITION_CVT = 64;
    const unsigned short TRANSMISSIONPOSITION_REVERSE = 128;
    const unsigned short TRANSMISSIONPOSITION_PARK = 255;
    const unsigned short TRANSMISSIONMODE_NORMAL = 0;
    const unsigned short TRANSMISSIONMODE_SPORT = 1;
    const unsigned short TRANSMISSIONMODE_ECONOMY = 2;
    const unsigned short TRANSMISSIONMODE_OEMCUSTOM1 = 3;
    const unsigned short TRANSMISSIONMODE_OEMCUSTOM2 = 4;
    readonly    attribute octet GearPosition;
    readonly    attribute octet Mode;
};

18.1 Attributes

GearPosition of type octet, readonly
Must return transmission gear position (see TRANSMISSIONPOSITION)
Mode of type octet, readonly
Must return transmission Mode (see TRANSMISSIONMODE)

18.2 Constants

TRANSMISSIONMODE_ECONOMY of type unsigned short
const unsigned short TRANSMISSIONMODE_OEMCUSTOM1 = 3
TRANSMISSIONMODE_NORMAL of type unsigned short
const unsigned short TRANSMISSIONMODE_SPORT = 1
TRANSMISSIONMODE_OEMCUSTOM1 of type unsigned short
const unsigned short TRANSMISSIONMODE_OEMCUSTOM2 = 4
TRANSMISSIONMODE_OEMCUSTOM2 of type unsigned short
readonly attribute octet GearPosition
TRANSMISSIONMODE_SPORT of type unsigned short
const unsigned short TRANSMISSIONMODE_ECONOMY = 2
TRANSMISSIONPOSITION_CVT of type unsigned short
const unsigned short TRANSMISSIONPOSITION_REVERSE = 128
TRANSMISSIONPOSITION_EIGHTH of type unsigned short
const unsigned short TRANSMISSIONPOSITION_NINTH = 9
TRANSMISSIONPOSITION_FIFTH of type unsigned short
const unsigned short TRANSMISSIONPOSITION_SIXTH = 6
TRANSMISSIONPOSITION_FIRST of type unsigned short
const unsigned short TRANSMISSIONPOSITION_SECOND = 2
TRANSMISSIONPOSITION_FORTH of type unsigned short
const unsigned short TRANSMISSIONPOSITION_FIFTH = 5
TRANSMISSIONPOSITION_NEUTRAL of type unsigned short
const unsigned short TRANSMISSIONPOSITION_FIRST = 1
TRANSMISSIONPOSITION_NINTH of type unsigned short
const unsigned short TRANSMISSIONPOSITION_TENTH = 10
TRANSMISSIONPOSITION_PARK of type unsigned short
const unsigned short TRANSMISSIONMODE_NORMAL = 0
TRANSMISSIONPOSITION_REVERSE of type unsigned short
const unsigned short TRANSMISSIONPOSITION_PARK = 255
TRANSMISSIONPOSITION_SECOND of type unsigned short
const unsigned short TRANSMISSIONPOSITION_THIRD = 3
TRANSMISSIONPOSITION_SEVENTH of type unsigned short
const unsigned short TRANSMISSIONPOSITION_EIGHTH = 8
TRANSMISSIONPOSITION_SIXTH of type unsigned short
const unsigned short TRANSMISSIONPOSITION_SEVENTH = 7
TRANSMISSIONPOSITION_TENTH of type unsigned short
const unsigned short TRANSMISSIONPOSITION_CVT = 64
TRANSMISSIONPOSITION_THIRD of type unsigned short
const unsigned short TRANSMISSIONPOSITION_FORTH = 4

19. CruiseControlStatus Interface

The CruiseControlStatus interface represents cruise control settings.

[NoInterfaceObject]
interface CruiseControlStatus : VehiclePropertyType {
    readonly    attribute boolean        Activated;
    readonly    attribute unsigned short Speed;
};

19.1 Attributes

Activated of type boolean, readonly
Must return whether or not the Cruise Control system is active (true) or inactive (false)
Speed of type unsigned short, readonly
Must return target Cruise Control speed in kilometers per hour (kph)

20. WheelBrake Interface

The WheelBrake interface represents wheel brake status.

[NoInterfaceObject]
interface WheelBrake : VehiclePropertyType {
    readonly    attribute boolean Engaged;
};

20.1 Attributes

Engaged of type boolean, readonly
Must return Wheel Brake status: Engaged (true) or Disengaged (false)

21. LightStatus Interface

The LightStatus interface represents exterior light statuses.

[NoInterfaceObject]
interface LightStatus : VehiclePropertyType {
    readonly    attribute boolean Head;
    readonly    attribute boolean RightTurn;
    readonly    attribute boolean LeftTurn;
    readonly    attribute boolean Brake;
    readonly    attribute boolean Fog;
    readonly    attribute boolean Hazard;
    readonly    attribute boolean Parking;
    readonly    attribute boolean HighBeam;
};

21.1 Attributes

Brake of type boolean, readonly
Must return Brake light status: on (true), off (false)
Fog of type boolean, readonly
Must return Fog light status: on (true), off (false)
Hazard of type boolean, readonly
Must return Hazard light status: on (true), off (false)
Head of type boolean, readonly
Must return headlight status: on (true), off (false)
HighBeam of type boolean, readonly
Must return HighBeam light status: on (true), off (false)
LeftTurn of type boolean, readonly
Must return left turn signal status: on (true), off (false)
Parking of type boolean, readonly
Must return Parking light status: on (true), off (false)
RightTurn of type boolean, readonly
Must return right turn signal status: on (true), off (false)

22. InteriorLightStatus Interface

The InteriorLightStatus interface represents interior light status.

[NoInterfaceObject]
interface InteriorLightStatus : VehiclePropertyType {
    readonly    attribute boolean Passenger;
    readonly    attribute boolean Driver;
    readonly    attribute boolean Center;
};

22.1 Attributes

Center of type boolean, readonly
Must return Center interior light status: on (true), off (false)
Driver of type boolean, readonly
Must return Driver interior light status: on (true), off (false)
Passenger of type boolean, readonly
Must return passenger interior light status: on (true), off (false)

23. Horn Interface

The Horn interface represents horn status.

[NoInterfaceObject]
interface Horn : VehiclePropertyType {
    readonly    attribute boolean On;
};

23.1 Attributes

On of type boolean, readonly
Must return Horn status: On (true) or off (false)

24. Fuel Interface

The Fuel interface represents vehicle fuel status.

[NoInterfaceObject]
interface Fuel : VehiclePropertyType {
    readonly    attribute unsigned short Level;
    readonly    attribute unsigned short Range;
    readonly    attribute unsigned short InstantConsumption;
    readonly    attribute unsigned short InstantEconomy;
                attribute unsigned short AverageEconomy;
};

24.1 Attributes

AverageEconomy of type unsigned short,
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'
InstantConsumption of type unsigned short, readonly
Must return instant fuel consumption in milliliters of fuel per second
InstantEconomy of type unsigned short, readonly
Must return instant fuel 'economy' in kilometers per liter of fuel
Level of type unsigned short, readonly
Must return fuel level as a percentage of fullness
Range of type unsigned short, readonly
Must return estimated fuel range in kilometers

25. EngineOil Interface

The EngineOil interface represents engine oil status.

[NoInterfaceObject]
interface Horn : VehiclePropertyType {
    readonly    attribute unsigned short Remaining;
    readonly    attribute long           Temperature;
    readonly    attribute unsigned short Pressure;
};

25.1 Attributes

Pressure of type unsigned short, readonly
Must return Engine Oil Pressure in kPa
Remaining of type unsigned short, readonly
Must return remaining engine oil as percentage of fullness
Temperature of type long, readonly
Must return Engine Oil Temperature in Celcius

26. ExteriorBrightness Interface

The ExteriorBrightness interface represents brightness outside the vehicle.

[NoInterfaceObject]
interface ExteriorBrightness : VehiclePropertyType {
    readonly    attribute unsigned long ExteriorBrightness;
};

26.1 Attributes

ExteriorBrightness of type unsigned long, readonly
Must return the brightness outside the vehicle in lux

27. Temperature Interface

The Temperature interface represents temperature inside and outside the vehicle.

[NoInterfaceObject]
interface Temperature : VehiclePropertyType {
    readonly    attribute signed short Interior;
    readonly    attribute signed short Exterior;
};

27.1 Attributes

Exterior of type signed short, readonly
Must return the temperature of the exterior of the vehicle in celcius
Interior of type signed short, readonly
Must return the temperature of the interior of the vehicle in celcius

28. RainSensor Interface

The RainSensor interface represents intensity of rain.

[NoInterfaceObject]
interface RainSensor : VehiclePropertyType {
    readonly    attribute unsigned short RainSensor;
};

28.1 Attributes

RainSensor of type unsigned short, readonly
Must return level of rain intensity 0: No Rain - 10: Heaviest Rain

29. WindshieldWiper Interface

The WindshieldWiper interface represents the status of the windshield wiper.

[NoInterfaceObject]
interface WindshieldWiper : VehiclePropertyType {
    const unsigned short WIPERSPEED_OFF = 0;
    const unsigned short WIPERSPEED_SLOWEST = 1;
    const unsigned short WIPERSPEED_FASTEST = 5;
    const unsigned short WIPERSPEED_AUTO = 10;
    readonly    attribute unsigned short WindshieldWiper;
};

29.1 Attributes

WindshieldWiper of type unsigned short, readonly
Must return Level of windshield whiper speed (see WIPERSPEED)

29.2 Constants

WIPERSPEED_AUTO of type unsigned short
readonly attribute unsigned short WindshieldWiper
WIPERSPEED_FASTEST of type unsigned short
const unsigned short WIPERSPEED_AUTO = 10
WIPERSPEED_OFF of type unsigned short
const unsigned short WIPERSPEED_SLOWEST= 1
WIPERSPEED_SLOWEST of type unsigned short
const unsigned short WIPERSPEED_FASTEST = 5

30. DefrostDictionary Dictionary

dictionary DefrostDictionary {
    unsigned short window;
    boolean        defrost;
};

30.1 Dictionary DefrostDictionary Members

defrost of type boolean
indicates whether defrost is active (true) for this window or inactive (false)
window of type unsigned short
window id (see WindowStatus.WINDOWLOCATION)

31. HVAC Interface

The HVAC interface to get status and control the vehicle HVAC system.

[NoInterfaceObject]
interface HVAC : VehiclePropertyType {
    const unsigned short AIRFLOWDIRECTION_FRONTPANEL = 0;
    const unsigned short AIRFLOWDIRECTION_FLOORDUCT = 1;
    const unsigned short AIRFLOWDIRECTION_FRONT = 0x02;
    const unsigned short AIRFLOWDIRECTION_DEFROSTER = 0x04;
                attribute unsigned short    AirflowDirection;
                attribute unsigned short    FanSpeed;
                attribute unsigned short    TargetTemperature;
                attribute boolean           AirConditioning;
                attribute boolean           AirRecirculation;
                attribute boolean           Heater;
                attribute DefrostDictionary Defrost;
                attribute boolean           SteeringWheelHeater;
                attribute boolean           SeatHeater;
};

31.1 Attributes

AirConditioning of type boolean,
Must return air conditioning on (true) / off (false)
AirRecirculation of type boolean,
Must return air recirculation on (true) / off (false)
AirflowDirection of type unsigned short,
Must return airflow direction. The value represents a bitmask of HVAC.AIRFLOWDIRECTION(s). For example:
Example 2
navigator.vehicle.get("HVAC", onsuccess, onerror);
  
function onsuccess(value) {
    var hvacsettings = value;
    value.AirflowDirection = value.AIRFLOWDIRECTION_FRONT | value.AIRFLOWDIRECTION_DEFROSTER;
    navigator.vehicle.set("HVAC", value, onsetsuccess, onerror);
}
function onerror(e) {
    window.console.error(e.message);
}
function onsetsuccess() {
    window.console.log("success!");
}
Defrost of type DefrostDictionary,
Must return the defrost status of all windows equiped with defrosters. This will return a dictionary of DefrostDictionary that represents each window and its defrost status
FanSpeed of type unsigned short,
Must return speed of the fan (0-7)
Heater of type boolean,
Must return heater on (true) / off (false)
SeatHeater of type boolean,
Must return seat heater status: on (true) / off (false)
SteeringWheelHeater of type boolean,
ust return air recirculation on (true) / off (false).
TargetTemperature of type unsigned short,
Must return target desired temperature in celcius

31.2 Constants

AIRFLOWDIRECTION_DEFROSTER of type unsigned short
attribute unsigned short AirflowDirection
AIRFLOWDIRECTION_FLOORDUCT of type unsigned short
const unsigned short AIRFLOWDIRECTION_FRONT = 0x02
AIRFLOWDIRECTION_FRONT of type unsigned short
const unsigned short AIRFLOWDIRECTION_DEFROSTER = 0x04
AIRFLOWDIRECTION_FRONTPANEL of type unsigned short
const unsigned short AIRFLOWDIRECTION_FLOORDUCT= 1

A. References

A.1 Normative references

[HTML5]
Robin Berjon; Steve Faulkner; Travis Leithead; Erika Doyle Navara; Edward O'Connor; Silvia Pfeiffer. HTML5. 6 August 2013. W3C Candidate Recommendation. URL: http://www.w3.org/TR/html5/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Internet RFC 2119. URL: http://www.ietf.org/rfc/rfc2119.txt
[WEBIDL]
Cameron McCormack. Web IDL. 19 April 2012. W3C Candidate Recommendation. URL: http://www.w3.org/TR/WebIDL/