2 Copyright (C) 2012 Intel Corporation
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
14 You should have received a copy of the GNU Lesser General Public
15 License along with this library; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 #ifndef VEHICLEPROPERTY_H
21 #define VEHICLEPROPERTY_H
30 #include "abstractpropertytype.h"
31 #include "mappropertytype.hpp"
34 namespace ButtonEvents {
35 enum ButtonEventType {
41 Preset1Button = 1 << 4,
42 Preset2Button = 1 << 5,
43 Preset3Button = 1 << 6,
44 Preset4Button = 1 << 7,
46 NavigateUpButton = 1 << 9,
47 NavigateDownButton = 1 << 10,
48 NavigateLeftButton = 1 << 11,
49 NavigateRightButton = 1 << 12
53 namespace TurnSignals {
63 namespace Transmission {
64 enum TransmissionPositions
83 /** TODO: deprecate in 0.13. Replaced with Drive::Mode: **/
101 extern const char* Park;
102 extern const char* Reverse;
103 extern const char* Neutral;
104 extern const char* Low;
105 extern const char* Drive;
106 extern const char* Overdrive;
111 /**< Vehicle Power Modes
112 * Off = Vehicle is off and key is in the "off" position.
113 * Accessory1 = Vehicle is off and key is in Accessory1 position.
114 * Accessory2 = Vehicle is off and key is in Accessory2 position.
115 * Run = Vehichle is running. Key is in the running position.
139 UnknownPosition = -1,
195 extern const char * Closed;
196 extern const char * Open;
197 extern const char * Ajar;
239 enum AirflowDirection
250 extern const char * FloorPanel;
251 extern const char * FloorDuct;
252 extern const char * Bilevel;
253 extern const char * DefrostFloor;
277 namespace Measurement
287 #include <boost/preprocessor/comma.hpp>
289 #define PROPERTYTYPE(property, propertyType, baseClass, valueType) \
290 class propertyType : public baseClass { \
291 public: propertyType(): baseClass(property) {} \
292 propertyType(valueType val) : baseClass(property, val) {} \
295 #define PROPERTYTYPE1(property, propertyType, baseClass, valueType) \
296 class propertyType : public baseClass { \
297 public: propertyType(): baseClass(#property) {} \
298 propertyType(valueType val) : baseClass(#property, val) {} \
301 #define PROPERTYTYPEBASIC(property, valueType) \
302 class property ## Type : public BasicPropertyType<valueType> { \
303 public: property ## Type(): BasicPropertyType(property) {} \
304 property ## Type(valueType val) : BasicPropertyType(property, val) {} \
307 #define PROPERTYTYPEBASIC1(property, valueType) \
308 class property ## Type : public BasicPropertyType<valueType> { \
309 public: property ## Type(): BasicPropertyType( #property) {} \
310 property ## Type(valueType val) : BasicPropertyType(#property, val) {} \
313 #define PROPERTYTYPENOVAL(property, propertyType, baseClass) \
314 class propertyType : public baseClass { \
315 public: propertyType(): baseClass(property) {} \
318 class VehicleProperty;
321 typedef std::vector<std::string> PropertyList;
322 typedef std::set<std::string> PropertySet;
324 class VehicleProperty
331 * \brief factory constructs a static instance of VehicleProperty. This should be called once before VehicleProperty is used in the app
333 static void factory();
337 * \brief destroys static instance of VehicleProperty. This should be called at application shutdown
339 static void shutdown();
341 typedef std::string Property;
344 * \brief PropertyTypeFactoryCallback callback used to construct a AbstractPropertyType for a property
345 * \see registerProperty
347 typedef std::function<AbstractPropertyType* (void)> PropertyTypeFactoryCallback;
349 /// Various property types:
351 static const Property NoValue;
353 /**< Vehicle Velocity in km/h */
354 static const Property VehicleSpeed;
355 PROPERTYTYPE(VehicleSpeed, VehicleSpeedType, BasicPropertyType<uint16_t>, uint16_t)
356 //typedef BasicPropertyType<uint16_t> VehicleSpeedType;
358 /**< Engine Speed in rotations per minute */
359 static const Property EngineSpeed;
360 PROPERTYTYPE(EngineSpeed, EngineSpeedType, BasicPropertyType<uint16_t>, uint16_t)
361 //typedef BasicPropertyType<uint16_t> EngineSpeedType;
363 /**< Transmission Shift Position
372 static const Property TransmissionShiftPosition;
373 PROPERTYTYPE(TransmissionShiftPosition, TransmissionShiftPositionType,
374 BasicPropertyType<Transmission::TransmissionPositions>, Transmission::TransmissionPositions )
375 //typedef BasicPropertyType<Transmission::TransmissionPositions> TransmissionShiftPositionType;
377 /**< Transmission Gear Position
385 static const Property TransmissionGearPosition;
386 PROPERTYTYPE(TransmissionGearPosition, TransmissionGearPositionType,
387 BasicPropertyType<Transmission::TransmissionPositions>, Transmission::TransmissionPositions)
388 //typedef BasicPropertyType<Transmission::TransmissionPositions> TransmissionGearPositionType;
390 /// TODO: deprecate in 0.13. Replaced by Drive::Mode
391 static const Property TransmissionMode;
392 PROPERTYTYPE(TransmissionMode, TransmissionModeType,
393 BasicPropertyType<Transmission::Mode>, Transmission::Mode)
394 //typedef BasicPropertyType<Transmission::Mode> TransmissionModeType;
396 /**< TransmissionModeW3C
397 * see Transmission::W3C::Park, Transmission::W3C::Drive, etc
399 static const Property TransmissionModeW3C;
400 PROPERTYTYPE(TransmissionModeW3C, TransmissionModeW3CType, StringPropertyType, std::string)
402 /**< Throttle position 0-100% */
403 static const Property ThrottlePosition;
404 PROPERTYTYPE(ThrottlePosition, ThrottlePositionType, BasicPropertyType<uint16_t> , uint16_t)
405 //typedef BasicPropertyType<uint16_t> ThrottlePositionType;
407 /**< Wheel brake position. Engaged = true, Idle = false */
408 static const Property WheelBrake;
409 PROPERTYTYPE(WheelBrake, WheelBrakeType, BasicPropertyType<bool>, bool)
410 //typedef BasicPropertyType<bool> WheelBrakeType;
412 static const Property WheelBrakePressure;
413 PROPERTYTYPE(WheelBrakePressure, WheelBrakePressureType, BasicPropertyType<uint16_t>, uint16_t)
414 //typedef BasicPropertyType<uint16_t> WheelBrakePressureType;
416 /**< Steering wheel angle (0-359)
417 * TODO: Deprecate in 0.13. Replace with SteeringWheelAngleW3C
419 static const Property SteeringWheelAngle;
420 PROPERTYTYPE(SteeringWheelAngle, SteeringWheelAngleType, BasicPropertyType<uint16_t>, uint16_t)
421 //typedef BasicPropertyType<uint16_t> SteeringWheelAngleType;
423 /// TODO: Rename to "SteeringWheel" in 0.13
424 static const Property SteeringWheelAngleW3C;
425 PROPERTYTYPE(SteeringWheelAngleW3C, SteeringWheelAngleW3CType, BasicPropertyType<int16_t>, int16_t)
427 /**< 0=off, 1=right, 2=left, 3=hazard */
428 static const Property TurnSignal;
429 PROPERTYTYPE(TurnSignal, TurnSignalType, BasicPropertyType<TurnSignals::TurnSignalType> ,TurnSignals::TurnSignalType)
430 //typedef BasicPropertyType<TurnSignals::TurnSignalType> TurnSignalType;
432 /**< Clutch pedal status 0=off, 1=on */
433 static const Property ClutchStatus;
434 PROPERTYTYPE(ClutchStatus, ClutchStatusType,BasicPropertyType<bool>,bool)
435 //typedef BasicPropertyType<bool> ClutchStatusType;
437 /**< Oil pressure TODO: units */
438 static const Property EngineOilPressure;
439 PROPERTYTYPE(EngineOilPressure, EngineOilPressureType,BasicPropertyType<uint16_t>, uint16_t)
440 //typedef BasicPropertyType<uint16_t> EngineOilPressureType;
442 /**< Engine coolant temperature in degrees celcius **/
443 static const Property EngineCoolantTemperature;
444 PROPERTYTYPE(EngineCoolantTemperature, EngineCoolantTemperatureType, BasicPropertyType<uint>, uint)
445 //typedef BasicPropertyType<int> EngineCoolantTemperatureType;
447 static const Property EngineCoolantLevel;
448 PROPERTYTYPE(EngineCoolantLevel, EngineCoolantLevelType, BasicPropertyType<uint>, uint)
451 static const Property MachineGunTurretStatus;
452 PROPERTYTYPE(MachineGunTurretStatus, MachineGunTurretStatusType, BasicPropertyType<bool>, bool)
453 //typedef BasicPropertyType<bool> MachineGunTurretStatusType;
455 /**< Acceleration on the 'x' axis in 1/1000 gravitational acceleration "g-force" */
456 static const Property AccelerationX;
457 PROPERTYTYPE(AccelerationX, AccelerationXType, BasicPropertyType<uint16_t>, uint16_t)
458 //typedef BasicPropertyType<uint16_t> AccelerationType;
460 /**< Acceleration on the 'y' axis in 1/1000 gravitational acceleration "g-force" */
461 static const Property AccelerationY;
462 PROPERTYTYPE(AccelerationY, AccelerationYType, BasicPropertyType<uint16_t>, uint16_t)
464 /**< Acceleration on the 'z' axis in 1/1000 gravitational acceleration "g-force" */
465 static const Property AccelerationZ;
466 PROPERTYTYPE(AccelerationZ, AccelerationZType, BasicPropertyType<uint16_t>, uint16_t)
468 /**< Mass Air Flow. grams/sec */
469 static const Property MassAirFlow;
470 PROPERTYTYPE(MassAirFlow, MassAirFlowType, BasicPropertyType<uint16_t>, uint16_t)
471 //typedef BasicPropertyType<uint16_t> MassAirFlowType;
473 /**< Button Event @see ButtonEvents::ButtonEventType */
474 static const Property ButtonEvent;
475 PROPERTYTYPE(ButtonEvent, ButtonEventType, BasicPropertyType<ButtonEvents::ButtonEventType>, ButtonEvents::ButtonEventType)
476 //typedef BasicPropertyType<ButtonEvents::ButtonEventType> ButtonEventType;
478 /**< Air intake temperature in degrees celcius */
479 static const Property AirIntakeTemperature;
480 PROPERTYTYPE(AirIntakeTemperature, AirIntakeTemperatureType, BasicPropertyType<int>, int)
481 //typedef BasicPropertyType<int> AirIntakeTemperatureType;
483 /**< Battery voltage in volts */
484 static const Property BatteryVoltage;
485 PROPERTYTYPE(BatteryVoltage, BatteryVoltageType, BasicPropertyType<double>, double)
486 //typedef BasicPropertyType<double> BatteryVoltageType;
488 static const Property BatteryCurrent;
489 PROPERTYTYPE(BatteryCurrent, BatteryCurrentType, BasicPropertyType<double>, double)
490 //typedef BasicPropertyType<double> BatteryCurrentType;
492 static const Property BatteryChargeLevel;
493 PROPERTYTYPEBASIC(BatteryChargeLevel, uint16_t)
495 /**< Interior Air Temperature in degrees celcius */
496 static const Property InteriorTemperature;
497 PROPERTYTYPE(InteriorTemperature, InteriorTemperatureType, BasicPropertyType<int>, int)
498 //typedef BasicPropertyType<int> InteriorTemperatureType;
500 static const Property ExteriorTemperature;
501 PROPERTYTYPE(ExteriorTemperature, ExteriorTemperatureType, BasicPropertyType<int>, int)
502 //typedef BasicPropertyType<int> ExteriorTemperatureType;
504 /**< Engine Oil Temperature in degrees celcius */
505 static const Property EngineOilTemperature;
506 PROPERTYTYPE(EngineOilTemperature, EngineOilTemperatureType, BasicPropertyType<int>, int)
507 //typedef BasicPropertyType<int> EngineOilTemperatureType;
509 static const Property EngineOilRemaining;
510 PROPERTYTYPE(EngineOilRemaining, EngineOilRemainingType,BasicPropertyType<uint16_t>, uint16_t)
511 //typedef BasicPropertyType<uint16_t> EngineOilRemainingType;
513 /**< Vehicle Identification Number (ISO 3779) 17 chars**/
514 static const Property VIN;
515 PROPERTYTYPE(VIN, VINType, StringPropertyType, std::string)
516 //class VINType: public StringPropertyType { public: VINType(std::string val):StringPropertyType(VIN,val){} };
518 /**< World Manufacturer Identifier (SAE) 3 characters. */
519 static const Property WMI;
520 PROPERTYTYPE(WMI, WMIType, StringPropertyType, std::string)
521 //class WMIType: public StringPropertyType { public: WMIType(std::string val):StringPropertyType(WMI,val){} };
523 /**< Tire pressure in kPa */
524 static const Property TirePressure;
525 PROPERTYTYPEBASIC(TirePressure, uint16_t)
527 /**< Tire pressure low */
528 static const Property TirePressureLow;
529 PROPERTYTYPEBASIC(TirePressureLow, bool)
531 /**< Tire temperature in degrees C */
532 static const Property TireTemperature;
533 PROPERTYTYPEBASIC(TireTemperature, int16_t)
535 /**< Vehicle Power Mode.
536 *@see Power::PowerModes
538 static const Property VehiclePowerMode;
539 PROPERTYTYPE(VehiclePowerMode, VehiclePowerModeType, BasicPropertyType<Power::PowerModes> ,Power::PowerModes)
540 //typedef BasicPropertyType<Power::PowerModes> VehiclePowerModeType;
542 static const Property TripMeters;
543 PROPERTYTYPE(TripMeters, TripMetersType, ListPropertyType<BasicPropertyType<uint16_t> >, AbstractPropertyType*)
544 //typedef ListPropertyType<BasicPropertyType<uint16_t> > TripMetersType;
546 static const Property CruiseControlActive;
547 PROPERTYTYPE(CruiseControlActive, CruiseControlActiveType, BasicPropertyType<bool>, bool)
548 //typedef BasicPropertyType<bool> CruiseControlActiveType;
550 static const Property CruiseControlSpeed;
551 PROPERTYTYPE(CruiseControlSpeed, CruiseControlSpeedType, BasicPropertyType<uint16_t>, uint16_t)
552 //typedef BasicPropertyType<uint16_t> CruiseControlSpeedType;
554 static const Property LightHead;
555 PROPERTYTYPE(LightHead, LightHeadType, BasicPropertyType<bool>, bool)
556 static const Property LightRightTurn;
557 PROPERTYTYPE(LightRightTurn, LightRightTurnType, BasicPropertyType<bool>, bool)
558 static const Property LightLeftTurn;
559 PROPERTYTYPE(LightLeftTurn, LightLeftTurnType, BasicPropertyType<bool>, bool)
560 static const Property LightBrake;
561 PROPERTYTYPE(LightBrake, LightBrakeType, BasicPropertyType<bool>, bool)
562 static const Property LightFog;
563 PROPERTYTYPE(LightFog, LightFogType, BasicPropertyType<bool>, bool)
564 static const Property LightHazard;
565 PROPERTYTYPE(LightHazard, LightHazardType, BasicPropertyType<bool>, bool)
566 static const Property LightParking;
567 PROPERTYTYPE(LightParking, LightParkingType, BasicPropertyType<bool>, bool)
568 static const Property LightHighBeam;
569 PROPERTYTYPE(LightHighBeam, LightHighBeamType, BasicPropertyType<bool>, bool)
570 static const Property LightAutomatic;
571 PROPERTYTYPEBASIC(LightAutomatic, bool)
572 static const Property LightDynamicHighBeam;
573 PROPERTYTYPEBASIC(LightDynamicHighBeam, bool)
576 static const Property InteriorLightDriver;
577 PROPERTYTYPE(InteriorLightDriver, InteriorLightDriverType, BasicPropertyType<bool>, bool)
578 static const Property InteriorLightCenter;
579 PROPERTYTYPE(InteriorLightCenter, InteriorLightCenterType, BasicPropertyType<bool>, bool)
580 static const Property InteriorLightPassenger;
581 PROPERTYTYPE(InteriorLightPassenger, InteriorLightPassengerType, BasicPropertyType<bool>, bool)
583 static const Property EngineLoad;
584 PROPERTYTYPE(EngineLoad, EngineLoadType, BasicPropertyType<uint16_t>, uint16_t)
586 static const Property Horn;
587 PROPERTYTYPE(Horn, HornType, BasicPropertyType<bool>, bool)
589 static const Property FuelLevel;
590 PROPERTYTYPE(FuelLevel, FuelLevelType, BasicPropertyType<uint16_t>, uint16_t)
592 static const Property FuelRange;
593 PROPERTYTYPE(FuelRange, FuelRangeType, BasicPropertyType<uint16_t> , uint16_t)
595 static const Property FuelConsumption;
596 PROPERTYTYPE(FuelConsumption, FuelConsumptionType, BasicPropertyType<uint>, uint)
598 static const Property FuelEconomy;
599 PROPERTYTYPE(FuelEconomy, FuelEconomyType, BasicPropertyType<uint16_t>, uint16_t)
601 static const Property FuelAverageEconomy;
602 PROPERTYTYPE(FuelAverageEconomy, FuelAverageEconomyType, BasicPropertyType<uint16_t> , uint16_t)
604 static const Property FuelAverageConsumption;
605 PROPERTYTYPEBASIC(FuelAverageConsumption, uint)
607 static const Property FuelTimeSinceRestart;
608 PROPERTYTYPEBASIC(FuelTimeSinceRestart, uint)
610 static const Property FuelConsumptionSinceRestart;
611 PROPERTYTYPEBASIC(FuelConsumptionSinceRestart, uint)
613 static const Property FuelType;
614 PROPERTYTYPE(FuelType, FuelTypeType, BasicPropertyType<Fuel::Type>, Fuel::Type)
616 static const Property FuelPositionSide;
617 PROPERTYTYPE(FuelPositionSide, FuelPositionSideType, BasicPropertyType<Fuel::RefuelPosition>, Fuel::RefuelPosition)
619 static const Property ExteriorBrightness;
620 PROPERTYTYPE(ExteriorBrightness, ExteriorBrightnessType, BasicPropertyType<uint16_t>, uint16_t)
622 static const Property Latitude;
623 PROPERTYTYPE(Latitude, LatitudeType, BasicPropertyType<double>, double)
625 static const Property Longitude;
626 PROPERTYTYPE(Longitude, LongitudeType, BasicPropertyType<double>, double)
628 static const Property Altitude;
629 PROPERTYTYPE(Altitude, AltitudeType, BasicPropertyType<double> , double)
631 static const Property Direction;
632 PROPERTYTYPE(Direction, DirectionType, BasicPropertyType<uint16_t>, uint16_t)
634 static const Property VehicleWidth;
635 PROPERTYTYPE(VehicleWidth, VehicleWidthType, BasicPropertyType<uint>, uint)
636 static const Property VehicleHeight;
637 PROPERTYTYPE(VehicleHeight, VehicleHeightType, BasicPropertyType<uint>, uint)
638 static const Property VehicleLength;
639 PROPERTYTYPE(VehicleLength, VehicleLengthType, BasicPropertyType<uint>, uint)
640 //typedef BasicPropertyType<uint> VehicleSizeType;
642 static const Property VehicleType;
643 PROPERTYTYPE(VehicleType, VehicleTypeType, BasicPropertyType<Vehicle::Type>, Vehicle::Type)
644 //typedef BasicPropertyType<Vehicle::Type> VehicleTypeType;
646 static const Property DoorsPerRow;
647 PROPERTYTYPE(DoorsPerRow, DoorsPerRowType, ListPropertyType<BasicPropertyType<uint16_t> >, AbstractPropertyType*)
648 //typedef ListPropertyType<BasicPropertyType<uint16_t> > DoorsPerRowType;
650 static const Property TransmissionGearType;
651 PROPERTYTYPE(TransmissionGearType, TransmissionGearTypeType, BasicPropertyType<Transmission::Type>, Transmission::Type)
652 //typedef BasicPropertyType<Transmission::Type> TransmissionGearTypeType;
654 static const Property FrontWheelRadius;
655 PROPERTYTYPE(FrontWheelRadius, FrontWheelRadiusType, BasicPropertyType<uint16_t>, uint16_t)
656 static const Property RearWheelRadius;
657 PROPERTYTYPE(RearWheelRadius, RearWheelRadiusType, BasicPropertyType<uint16_t>, uint16_t)
658 // /typedef BasicPropertyType<uint16_t> WheelRadiusType;
660 static const Property WheelTrack;
661 PROPERTYTYPE(WheelTrack, WheelTrackType, BasicPropertyType<uint>, uint)
662 // typedef BasicPropertyType<uint> WheelTrackType;
664 static const Property BrakePressure;
665 PROPERTYTYPEBASIC(BrakePressure, uint16_t)
666 //typedef BasicPropertyType<uint16_t> BrakePressureType;
668 /// TODO: deprecated. remove in 0.13. Use DistanceTotal
669 static const Property Odometer;
670 PROPERTYTYPEBASIC(Odometer, uint)
672 static const Property DistanceTotal;
673 PROPERTYTYPEBASIC(DistanceTotal, uint)
675 static const Property DistanceSinceStart;
676 PROPERTYTYPEBASIC(DistanceSinceStart, uint)
678 /**< Transmission Fluid Level 0-100%.
680 static const Property TransmissionFluidLevel;
681 PROPERTYTYPEBASIC(TransmissionFluidLevel, uint16_t)
682 //typedef BasicPropertyType<uint16_t> TransmissionFluidLevelType;
684 /**< Brake Fluid Level 0-100%.
686 static const Property BrakeFluidLevel;
687 PROPERTYTYPEBASIC(BrakeFluidLevel, uint16_t)
688 //typedef BasicPropertyType<uint16_t> BrakeFluidLevelType;
690 /**< Washer Fluid Level 0-100%.
692 static const Property WasherFluidLevel;
693 PROPERTYTYPEBASIC(WasherFluidLevel, uint16_t)
694 //typedef BasicPropertyType<uint16_t> WasherFluidLevelType;
696 /**< Securty Alert Status
697 * status of security alert
698 * @see Security::Status
700 static const Property SecurityAlertStatus;
701 PROPERTYTYPEBASIC(SecurityAlertStatus, Security::Status)
702 //typedef BasicPropertyType<Security::Status> SecurityAlertStatusType;
704 /**< Parking Brake Status
705 * status of parking break active (true) or inactive (false)
707 static const Property ParkingBrakeStatus;
708 PROPERTYTYPEBASIC(ParkingBrakeStatus, bool)
709 //typedef BasicPropertyType<bool> ParkingBrakeStatusType;
711 /**< Parking Light Status
712 * status of parking lights active (true) or inactive (false)
714 static const Property ParkingLightStatus;
715 PROPERTYTYPEBASIC(ParkingLightStatus,bool)
716 //typedef BasicPropertyType<bool> ParkingLightStatusType;
718 /**< Hazard Lights Status
719 * status of parking lights active (true) or inactive (false)
721 static const Property HazardLightStatus;
722 PROPERTYTYPEBASIC(HazardLightStatus, bool)
723 //typedef BasicPropertyType<bool> HazardLightStatusType;
725 static const Property AntilockBrakingSystem;
726 PROPERTYTYPEBASIC(AntilockBrakingSystem, bool)
727 //typedef BasicPropertyType<bool> AntilockBrakingSystemType;
729 static const Property TractionControlSystem;
730 PROPERTYTYPEBASIC(TractionControlSystem, bool)
731 //typedef BasicPropertyType<bool> TractionControlSystemType;
733 static const Property VehicleTopSpeedLimit;
734 PROPERTYTYPEBASIC(VehicleTopSpeedLimit,uint16_t)
735 //typedef BasicPropertyType<uint16_t> VehicleTopSpeedLimitType;
737 static const Property AirbagStatus;
738 PROPERTYTYPEBASIC(AirbagStatus, Airbag::Status)
740 /// TODO: deprecate in 0.13. Use DoorStatusW3C
741 static const Property DoorStatus;
742 PROPERTYTYPEBASIC(DoorStatus, Door::Status)
744 /** use with Door::W3C::*
746 static const Property DoorStatusW3C;
747 PROPERTYTYPE(DoorStatusW3C, DoorStatusW3CType, StringPropertyType, std::string)
749 static const Property DoorLockStatus;
750 PROPERTYTYPEBASIC(DoorLockStatus, bool)
752 static const Property ChildLockStatus;
753 PROPERTYTYPEBASIC(ChildLockStatus, bool)
755 static const Property SeatBeltStatus;
756 PROPERTYTYPEBASIC(SeatBeltStatus, bool)
758 static const Property WindowLockStatus;
759 PROPERTYTYPEBASIC(WindowLockStatus, bool)
761 static const Property OccupantStatus;
762 PROPERTYTYPEBASIC(OccupantStatus, Seat::Occupant)
764 static const Property ObstacleDistance;
765 PROPERTYTYPEBASIC(ObstacleDistance, double)
767 static const Property RainSensor;
768 PROPERTYTYPEBASIC(RainSensor, uint16_t)
769 //typedef BasicPropertyType<uint16_t> RainSensorType;
771 static const Property WindshieldWiper;
772 PROPERTYTYPEBASIC(WindshieldWiper,Window::WiperSpeed)
773 //typedef BasicPropertyType<Window::WiperSpeed> WindshieldWiperType;
775 /// TODO: Deprecated. Remove in 0.13
776 static const Property AirflowDirection;
777 PROPERTYTYPEBASIC(AirflowDirection,HVAC::AirflowDirection)
779 static const Property AirflowDirectionW3C;
780 PROPERTYTYPE(AirflowDirectionW3C, AirflowDirectionW3CType, StringPropertyType, std::string)
782 static const Property FanSpeed;
783 PROPERTYTYPEBASIC(FanSpeed, uint16_t)
785 static const Property TargetTemperature;
786 PROPERTYTYPEBASIC(TargetTemperature, int)
788 static const Property AirConditioning;
789 PROPERTYTYPEBASIC(AirConditioning,bool)
791 static const Property AirRecirculation;
792 PROPERTYTYPEBASIC(AirRecirculation,bool)
794 static const Property Heater;
795 PROPERTYTYPEBASIC(Heater, bool)
797 /// TODO: deprecated. remove in 0.13
798 static const Property Defrost;
799 PROPERTYTYPEBASIC(Defrost, bool )
801 static const Property DefrostWindow;
802 PROPERTYTYPEBASIC(DefrostWindow, bool )
804 static const Property DefrostMirror;
805 PROPERTYTYPEBASIC(DefrostMirror, bool )
807 static const Property SteeringWheelHeater;
808 PROPERTYTYPEBASIC(SteeringWheelHeater,bool)
809 //typedef BasicPropertyType<bool> SteeringWheelHeaterType;
811 static const Property SeatHeater;
812 PROPERTYTYPEBASIC(SeatHeater,int)
813 //typedef BasicPropertyType<bool> SeatHeaterType;
815 static const Property SeatCooler;
816 PROPERTYTYPEBASIC(SeatCooler,bool)
817 // /typedef BasicPropertyType<bool> SeatCoolerType;
819 static const Property WindowStatus;
820 PROPERTYTYPEBASIC(WindowStatus, uint16_t)
822 static const Property Sunroof;
823 PROPERTYTYPEBASIC(Sunroof, uint16_t)
824 //typedef BasicPropertyType<uint16_t> SunroofType;
826 static const Property SunroofTilt;
827 PROPERTYTYPEBASIC(SunroofTilt,uint16_t)
828 //typedef BasicPropertyType<uint16_t> SunroofTiltType;
830 static const Property ConvertibleRoof;
831 PROPERTYTYPEBASIC(ConvertibleRoof, bool)
832 //typedef BasicPropertyType<bool> ConvertibleRoofType;
834 static const Property NightMode;
835 PROPERTYTYPEBASIC(NightMode, bool)
837 static const Property DrivingMode;
838 PROPERTYTYPEBASIC(DrivingMode, Driving::Mode)
840 static const Property DrivingModeW3C;
841 PROPERTYTYPEBASIC(DrivingModeW3C, bool)
843 static const Property KeyId;
844 PROPERTYTYPE(KeyId, KeyIdType, StringPropertyType, std::string)
846 static const Property Language;
847 PROPERTYTYPE(Language, LanguageType, StringPropertyType, std::string)
849 static const Property MeasurementSystem;
850 PROPERTYTYPEBASIC(MeasurementSystem, Measurement::Type)
852 static const Property MirrorSettingPan;
853 static const Property MirrorSettingTilt;
855 PROPERTYTYPEBASIC(MirrorSettingPan, uint16_t)
856 PROPERTYTYPEBASIC(MirrorSettingTilt, uint16_t)
858 static const Property SteeringWheelPositionSlide;
859 static const Property SteeringWheelPositionTilt;
861 PROPERTYTYPEBASIC(SteeringWheelPositionSlide, uint16_t)
862 PROPERTYTYPEBASIC(SteeringWheelPositionTilt, uint16_t)
864 static const Property SeatPositionRecline;
865 static const Property SeatPositionSlide;
866 static const Property SeatPositionCushionHeight;
867 static const Property SeatPositionHeadrest;
868 static const Property SeatPositionBackCushion;
869 static const Property SeatPositionSideCushion;
871 PROPERTYTYPEBASIC(SeatPositionRecline, uint16_t)
872 PROPERTYTYPEBASIC(SeatPositionSlide, uint16_t)
873 PROPERTYTYPEBASIC(SeatPositionCushionHeight, uint16_t)
874 PROPERTYTYPEBASIC(SeatPositionHeadrest, uint16_t)
875 PROPERTYTYPEBASIC(SeatPositionBackCushion, uint16_t)
876 PROPERTYTYPEBASIC(SeatPositionSideCushion, uint16_t)
878 static const Property DashboardIllumination;
879 PROPERTYTYPEBASIC(DashboardIllumination, uint16_t)
881 static const Property GeneratedVehicleSoundMode;
882 PROPERTYTYPEBASIC(GeneratedVehicleSoundMode, Vehicle::SoundMode)
884 static const Property DriverId;
885 PROPERTYTYPE(DriverId, DriverIdType, StringPropertyType, std::string)
888 /** END PROPERTIES **/
892 * \brief capabilities
893 * \return returns list of all registered properties
894 * \see VehicleProperty::registerProperty
896 static PropertyList capabilities();
899 * \brief customProperties
900 * \return returns list of custom properties defined by plugins using VehicleProperty::registerProperty
902 static PropertyList customProperties();
904 /*! \brief getPropertyTypeForPropertyNameValue returns an AbstractPropertyType* for the property name
905 * with the value specified by 'value'. Ownership of the returned AbstractPropertyType* is
906 * transfered to the caller.
908 static AbstractPropertyType* getPropertyTypeForPropertyNameValue(Property name, std::string value="");
910 /*! \brief registerProperty registers properties with the Vehicle Property system. Returns true if property
911 * has been registered successfully.
912 * \param name - name of property. Name cannot match any existing property or it will be rejected and
913 * this method will return false.
914 * \param factor - callback function that returns an AbstractPropertyType representation of the value.
915 * custom properties will need to return a custom AbstractPropertyType based object.
918 * #include <vehicleproperty.h>
919 * #include <abstractpropertytype.h>
921 * //Somewhere in a source plugin:
923 * Property VehicleJetEngineStatus = "VehicleJetEngineStatus";
924 * VehicleProperty::registerProperty(VehicleJetEngineStatus, [](){return new BasicPropertyType<bool>(VehicleJetEngineStatus, false);});
926 * //other initialization
928 static bool registerProperty(Property name, PropertyTypeFactoryCallback factory);
936 static VehicleProperty* thereCanOnlyBeOne;
938 static bool registerPropertyPriv(Property name, PropertyTypeFactoryCallback factory);
940 static std::map<Property, PropertyTypeFactoryCallback> registeredPropertyFactoryMap;
941 static PropertyList mCapabilities;
942 static PropertyList mCustomProperties;
945 #endif // VEHICLEPROPERTY_H