syntax = "proto3"; /** *

Precise Vehicle Location

*

This set of messages define how to acquire vehicle location, either on demand or by interval and events.

*

Message Orchestration

*

HeaderMessage.puml

*

MQTT Topic Design

* * * * * * * * * * * * * * * * * * * * *
DirectionSubscribe TopicPublish Topic
Vehicle to Cloudvloc/"*"vloc/<device_id>
Cloud to Vehicle<device_id>/vloc<device_id>/vloc
*/ package messages; import "messages/VehicleMessageHeader.proto"; message RequestCurrentVehicleLocationTest /// Requests vehicle location on demand { string vehicle_identity = 1; /// At most this identity should be all that is required to trigger the request for location and should contain a salted hash } message ResponseCurrentVehicleLocation /// Response to vehicle location request { VehicleMessageHeading vehicleMessageHeading =1; VehicleCurrentLocation vehicleCurrentLocation =2; ResponseStatusEnum responseStatus = 3; } enum ResponseStatusEnum { SUCCESS = 0; /// A good GPS Location response was possible and GPS data is being returned in the payload FAIL_NO_RESPONSE = 1; /// No GPS information was able to be retrieved FAIL_DEGRADED_RESPONSE = 2; // GPS location available but degraded accuracy } message PublishCurrentVehicleLocation /// This is the event based version, proactively publishing location data without a cloud side request { VehicleMessageHeading vehicleMessageHeading =1; VehicleCurrentLocation vehicleCurrentLocation =2; } message VehicleCurrentLocation { string Timestamp = 1; double Latitude = 2; double Longitude = 3; double Heading = 4; double HorizontalAccuracy = 5; double Altitude = 6; double VerticalAccuracy = 7; VehicleCurrentLocationGNSSReceiver GNSSReceiver = 8; } message VehicleCurrentLocationGNSSReceiver { string FixType = 1; VehicleCurrentLocationGNSSReceiverMountingPosition MountingPosition = 2; } message VehicleCurrentLocationGNSSReceiverMountingPosition { int32 X = 1; int32 Y = 2; int32 Z = 3; }