/* Copyright (c) 2020 The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. * * Neither the name of The Linux Foundation nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // ============================================================================ // LocationApiMsg.proto // Location Api messages definition - structs, enums etc // ============================================================================ syntax = "proto3"; import "LocationApiDataTypes.proto"; // ============================================================================ // Proto file versioning // ============================================================================ enum LocationApiMsgVersion { LOCAPI_MSG_VER_INVALID = 0; // Major changes - compatibility breakage. Bump the first byte of version i.e. 1.x to 2.0 LOCAPI_MSG_VER_MAJOR = 1; // Minor - New features / API addition, new message/elemtent addition. // Bump the last byte of version i.e. x.2 to x.3 // Minor version 4: GTP Single shot WWAN change LOCAPI_MSG_VER_MINOR = 4; } // ============================================================================ // Enumerations // ============================================================================ // List of message IDs supported by Location Remote API enum PBELocMsgID { PB_E_LOCAPI_UNDEFINED_MSG_ID = 0; // registration PB_E_LOCAPI_CLIENT_REGISTER_MSG_ID = 1; PB_E_LOCAPI_CLIENT_DEREGISTER_MSG_ID = 2; PB_E_LOCAPI_CAPABILILTIES_MSG_ID = 3; PB_E_LOCAPI_HAL_READY_MSG_ID = 4; // tracking session PB_E_LOCAPI_START_TRACKING_MSG_ID = 5; PB_E_LOCAPI_STOP_TRACKING_MSG_ID = 6; PB_E_LOCAPI_UPDATE_CALLBACKS_MSG_ID = 7; PB_E_LOCAPI_UPDATE_TRACKING_OPTIONS_MSG_ID = 8; // control // >> this message id has been deprecated PB_E_LOCAPI_CONTROL_UPDATE_CONFIG_MSG_ID = 9; // this message id has been deprecated PB_E_LOCAPI_CONTROL_DELETE_AIDING_DATA_MSG_ID = 10; // this message id has been deprecated PB_E_LOCAPI_CONTROL_UPDATE_NETWORK_AVAILABILITY_MSG_ID = 11; // Position reports PB_E_LOCAPI_LOCATION_MSG_ID = 12; PB_E_LOCAPI_LOCATION_INFO_MSG_ID = 13; PB_E_LOCAPI_SATELLITE_VEHICLE_MSG_ID = 14; PB_E_LOCAPI_NMEA_MSG_ID = 15; PB_E_LOCAPI_DATA_MSG_ID = 16; // Get API to retrieve info from GNSS engine PB_E_LOCAPI_GET_GNSS_ENGERY_CONSUMED_MSG_ID = 17; PB_E_LOCAPI_LOCATION_SYSTEM_INFO_MSG_ID = 18; // engine position report PB_E_LOCAPI_ENGINE_LOCATIONS_INFO_MSG_ID = 19; // batching session PB_E_LOCAPI_START_BATCHING_MSG_ID = 20; PB_E_LOCAPI_STOP_BATCHING_MSG_ID = 21; PB_E_LOCAPI_UPDATE_BATCHING_OPTIONS_MSG_ID = 22; //batching reports PB_E_LOCAPI_BATCHING_MSG_ID = 23; // geofence session PB_E_LOCAPI_ADD_GEOFENCES_MSG_ID = 24; PB_E_LOCAPI_REMOVE_GEOFENCES_MSG_ID = 25; PB_E_LOCAPI_MODIFY_GEOFENCES_MSG_ID = 26; PB_E_LOCAPI_PAUSE_GEOFENCES_MSG_ID = 27; PB_E_LOCAPI_RESUME_GEOFENCES_MSG_ID = 28; //geofence breach PB_E_LOCAPI_GEOFENCE_BREACH_MSG_ID = 29; // Measurement reports PB_E_LOCAPI_MEAS_MSG_ID = 30; // Terrestria fix request/response msg PB_E_LOCAPI_GET_SINGLE_TERRESTRIAL_POS_REQ_MSG_ID = 31; PB_E_LOCAPI_GET_SINGLE_TERRESTRIAL_POS_RESP_MSG_ID = 32; // ping PB_E_LOCAPI_PINGTEST_MSG_ID = 99; // integration API config request PB_E_INTAPI_CONFIG_CONSTRAINTED_TUNC_MSG_ID = 200; PB_E_INTAPI_CONFIG_POSITION_ASSISTED_CLOCK_ESTIMATOR_MSG_ID = 201; PB_E_INTAPI_CONFIG_SV_CONSTELLATION_MSG_ID = 202; PB_E_INTAPI_CONFIG_AIDING_DATA_DELETION_MSG_ID = 203; PB_E_INTAPI_CONFIG_LEVER_ARM_MSG_ID = 204; PB_E_INTAPI_CONFIG_ROBUST_LOCATION_MSG_ID = 205; PB_E_INTAPI_CONFIG_MIN_GPS_WEEK_MSG_ID = 206; PB_E_INTAPI_CONFIG_DEAD_RECKONING_ENGINE_MSG_ID = 207; PB_E_INTAPI_CONFIG_MIN_SV_ELEVATION_MSG_ID = 208; PB_E_INTAPI_CONFIG_CONSTELLATION_SECONDARY_BAND_MSG_ID = 209; PB_E_INTAPI_CONFIG_ENGINE_RUN_STATE_MSG_ID = 210; PB_E_INTAPI_CONFIG_USER_CONSENT_TERRESTRIAL_POSITIONING_MSG_ID = 211; // integration API config retrieval request/response PB_E_INTAPI_GET_ROBUST_LOCATION_CONFIG_REQ_MSG_ID = 300; PB_E_INTAPI_GET_ROBUST_LOCATION_CONFIG_RESP_MSG_ID = 301; PB_E_INTAPI_GET_MIN_GPS_WEEK_REQ_MSG_ID = 302; PB_E_INTAPI_GET_MIN_GPS_WEEK_RESP_MSG_ID = 303; PB_E_INTAPI_GET_MIN_SV_ELEVATION_REQ_MSG_ID = 304; PB_E_INTAPI_GET_MIN_SV_ELEVATION_RESP_MSG_ID = 305; PB_E_INTAPI_GET_CONSTELLATION_SECONDARY_BAND_CONFIG_REQ_MSG_ID = 306; PB_E_INTAPI_GET_CONSTELLATION_SECONDARY_BAND_CONFIG_RESP_MSG_ID = 307; } enum PBClientType { PB_LOCATION_CLIENT_TYPE_INVALID = 0; PB_LOCATION_CLIENT_API = 1; PB_LOCATION_INTEGRATION_API = 2; } enum PBLocationCallbacksMask { PB_E_LOC_CB_INVALID = 0; /**< Register for DBT location report */ PB_E_LOC_CB_DISTANCE_BASED_TRACKING_BIT = 1; /**< Register for GNSS Location */ PB_E_LOC_CB_GNSS_LOCATION_INFO_BIT = 2; /**< Register for GNSS SV */ PB_E_LOC_CB_GNSS_SV_BIT = 4; /**< Register for GNSS NMEA */ PB_E_LOC_CB_GNSS_NMEA_BIT = 8; /**< Register for GNSS DATA */ PB_E_LOC_CB_GNSS_DATA_BIT = 16; /**< Register for Location system info */ PB_E_LOC_CB_SYSTEM_INFO_BIT = 32; /**< Register for Batching */ PB_E_LOC_CB_BATCHING_BIT = 64; /**< Register for Batching Status*/ PB_E_LOC_CB_BATCHING_STATUS_BIT = 128; /**< Register for Geofence Breach */ PB_E_LOC_CB_GEOFENCE_BREACH_BIT = 256; /**< Register for multiple engine reports */ PB_E_LOC_CB_ENGINE_LOCATIONS_INFO_BIT = 512; /**< Register for simple location */ PB_E_LOC_CB_SIMPLE_LOCATION_INFO_BIT = 1024; /**< Register for GNSS Measurements */ PB_E_LOC_CB_GNSS_MEAS_BIT = 2048; } enum PBEngineInfoCallbacksMask { PB_E_ENGINE_INFO_CB_INVALID = 0; /**< GNSS energy consumed */ // gnss energy consumed, once the info is delivered, // this bit will be cleared PB_E_ENGINE_INFO_CB_GNSS_ENERGY_CONSUMED_BIT = 1; } enum PBGeofenceBreachTypeMask { PB_GEOFENCE_BREACH_INVALID = 0; PB_GEOFENCE_BREACH_ENTER_BIT = 1; PB_GEOFENCE_BREACH_EXIT_BIT = 2; PB_GEOFENCE_BREACH_DWELL_IN_BIT = 4; PB_GEOFENCE_BREACH_DWELL_OUT_BIT = 8; } // ============================================================================ // Messages // ============================================================================ //******************************* // Common data structure //******************************* message PBLocAPINmeaSerializedPayload { uint64 timestamp = 1; string nmea = 2; } message PBLocAPIBatchNotification { PBBatchingStatus status = 1; repeated PBLocation location = 2; } message PBLocAPIGeofenceBreachNotification { uint64 timestamp = 1; //type of breach - PBGeofenceBreachTypeMask uint32 breachtype = 2; //location associated with breach PBLocation location = 3; repeated uint32 id = 4; } message PBGeofenceOption { // bitwise OR of PBGeofenceBreachTypeMask uint32 breachTypeMask = 1; // in milliseconds uint32 responsiveness = 2; // in seconds uint32 dwellTime = 3; } message PBGeofenceInfo { // in degrees double latitude = 1; // in degrees double longitude = 2; // in meters double radius = 3; } message PBGeofencePayload { uint32 gfClientId = 1; PBGeofenceOption gfOption = 2; PBGeofenceInfo gfInfo = 3; } message PBGeofencesAddedReqPayload { repeated PBGeofencePayload gfPayload = 1; } message PBGeofencesReqClientIdPayload { repeated uint32 gfIds = 1; } message PBGeofenceResponse { uint32 clientId = 1; PBLocationError error = 2; } message PBCollectiveResPayload { repeated PBGeofenceResponse resp = 1; } //******************************************** // IPC message structure - client registration //******************************************** // defintion for message with msg id of PB_E_LOCAPI_CLIENT_REGISTER_MSG_ID message PBLocAPIClientRegisterReqMsg { PBClientType mClientType = 1; } // defintion for message with msg id of PB_E_LOCAPI_CLIENT_DEREGISTER_MSG_ID // LocAPIClientDeregisterReqMsg - no struct member. // defintion for message with msg id of PB_E_LOCAPI_CAPABILILTIES_MSG_ID message PBLocAPICapabilitiesIndMsg { // Bitwise OR of PBLocationCapabilitiesMask uint64 capabilitiesMask = 1; } // defintion for message with msg id of PB_E_LOCAPI_HAL_READY_MSG_ID // LocAPIHalReadyIndMsg - no struct member. //***************************************** // IPC message structure - generic response //***************************************** message PBLocAPIGenericRespMsg { PBLocationError err = 1; } message PBLocAPICollectiveRespMsg { PBCollectiveResPayload collectiveRes = 1; } //********************************* // IPC message structure - tracking //********************************* // defintion for message with msg id of PB_E_LOCAPI_START_TRACKING_MSG_ID message PBLocAPIStartTrackingReqMsg { PBLocationOptions locOptions = 1; } // defintion for message with msg id of E_LOCAPI_STOP_TRACKING_MSG_ID // LocAPIStopTrackingReqMsg - no struct member. // defintion for message with msg id of PB_E_LOCAPI_UPDATE_CALLBACKS_MSG_ID message PBLocAPIUpdateCallbacksReqMsg { // bitwise OR of PBLocationCallbacksMask uint32 locationCallbacks = 1; } // defintion for message with msg id of PB_E_LOCAPI_UPDATE_TRACKING_OPTIONS_MSG_ID message PBLocAPIUpdateTrackingOptionsReqMsg { PBLocationOptions locOptions = 1; } //********************************* // IPC message structure - batching //********************************* // defintion for message with msg id of PB_E_LOCAPI_START_BATCHING_MSG_ID message PBLocAPIStartBatchingReqMsg { uint32 intervalInMs = 1; uint32 distanceInMeters = 2; PBBatchingMode batchingMode = 3; } // defintion for message with msg id of PB_E_LOCAPI_STOP_BATCHING_MSG_ID // LocAPIStopBatchingReqMsg - no struct member. // defintion for message with msg id of PB_E_LOCAPI_UPDATE_BATCHING_OPTIONS_MSG_ID message PBLocAPIUpdateBatchingOptionsReqMsg { uint32 intervalInMs = 1; uint32 distanceInMeters = 2; PBBatchingMode batchingMode = 3; } //********************************* // IPC message structure - geofence //********************************* // defintion for message with msg id of PB_E_LOCAPI_ADD_GEOFENCES_MSG_ID message PBLocAPIAddGeofencesReqMsg { PBGeofencesAddedReqPayload geofences = 1; } // defintion for message with msg id of PB_E_LOCAPI_REMOVE_GEOFENCES_MSG_ID message PBLocAPIRemoveGeofencesReqMsg { PBGeofencesReqClientIdPayload gfClientIds = 1; } // defintion for message with msg id of PB_E_LOCAPI_MODIFY_GEOFENCES_MSG_ID message PBLocAPIModifyGeofencesReqMsg { PBGeofencesAddedReqPayload geofences = 1; } // defintion for message with msg id of PB_E_LOCAPI_PAUSE_GEOFENCES_MSG_ID message PBLocAPIPauseGeofencesReqMsg { PBGeofencesReqClientIdPayload gfClientIds = 1; } // defintion for message with msg id of PB_E_LOCAPI_RESUME_GEOFENCES_MSG_ID message PBLocAPIResumeGeofencesReqMsg { PBGeofencesReqClientIdPayload gfClientIds = 1; } //********************************* // IPC message structure - control //********************************* // defintion for message with msg id of PB_E_LOCAPI_CONTROL_UPDATE_NETWORK_AVAILABILITY_MSG_ID message PBLocAPIUpdateNetworkAvailabilityReqMsg { bool mAvailability = 1; } // defintion for message with msg id of PB_E_LOCAPI_GET_GNSS_ENGERY_CONSUMED_MSG_ID // LocAPIGetGnssEnergyConsumedReqMsg - no struct member. //************************************ // IPC message structure - indications //************************************ // defintion for message with msg id of PB_E_LOCAPI_LOCATION_MSG_ID message PBLocAPILocationIndMsg { PBLocation locationNotification = 1; } // defintion for message with msg id of PB_E_LOCAPI_BATCHING_MSG_ID message PBLocAPIBatchingIndMsg { PBLocAPIBatchNotification batchNotification = 1; } // defintion for message with msg id of PB_E_LOCAPI_GEOFENCE_BREACH_MSG_ID message PBLocAPIGeofenceBreachIndMsg { PBLocAPIGeofenceBreachNotification gfBreachNotification = 1; } // defintion for message with msg id of PB_E_LOCAPI_LOCATION_INFO_MSG_ID message PBLocAPILocationInfoIndMsg { PBGnssLocationInfoNotification gnssLocationInfoNotification = 1; } // defintion for message with msg id of PB_E_LOCAPI_ENGINE_LOCATIONS_INFO_MSG_ID message PBLocAPIEngineLocationsInfoIndMsg { // max array size - PBLocApiOutputEngineType::PB_LOC_OUTPUT_ENGINE_COUNT repeated PBGnssLocationInfoNotification engineLocationsInfo = 1; } // defintion for message with msg id of PB_E_LOCAPI_SATELLITE_VEHICLE_MSG_ID message PBLocAPISatelliteVehicleIndMsg { PBLocApiGnssSvNotification gnssSvNotification = 1; } // defintion for message with msg id of PB_E_LOCAPI_NMEA_MSG_ID message PBLocAPINmeaIndMsg { PBLocAPINmeaSerializedPayload gnssNmeaNotification = 1; } // defintion for message with msg id of PB_E_LOCAPI_DATA_MSG_ID message PBLocAPIDataIndMsg { PBGnssDataNotification gnssDataNotification = 1; } // defintion for message with msg id of PB_E_LOCAPI_MEAS_MSG_ID message PBLocAPIMeasIndMsg { PBGnssMeasurementsNotification gnssMeasurementsNotification = 1; } // defintion for message with msg id of PB_E_LOCAPI_GET_TOTAL_ENGERY_CONSUMED_BY_GPS_ENGINE_MSG_ID message PBLocAPIGnssEnergyConsumedIndMsg { uint64 totalGnssEnergyConsumedSinceFirstBoot = 1; } // defintion for message with msg id of PB_E_LOCAPI_LOCATION_SYSTEM_INFO_MSG_ID message PBLocAPILocationSystemInfoIndMsg { PBLocationSystemInfo locationSystemInfo = 1; } //******************************************************************* // IPC message structure - Single-shot Terrestrial fix //******************************************************************* message PBLocAPIGetSingleTerrestrialPosReqMsg { uint32 timeoutMsec = 1; PBTerrestrialTechMask techMask = 2; float horQoS = 3; }; message PBLocAPIGetSingleTerrestrialPosRespMsg { PBLocationError errorCode = 1; PBLocation location = 2; }; //******************************************************************* // IPC message structure - Location Integration API Configure Request //******************************************************************* // defintion for message with msg id of PB_E_INTAPI_CONFIG_CONSTRAINTED_TUNC_MSG_ID message PBLocConfigConstrainedTuncReqMsg { bool mEnable = 1; float mTuncConstraint = 2; uint32 mEnergyBudget = 3; } // defintion for message with msg id of PB_E_INTAPI_CONFIG_POSITION_ASSISTED_CLOCK_ESTIMATOR_MSG_ID message PBLocConfigPositionAssistedClockEstimatorReqMsg { bool mEnable = 1; } // defintion for message with msg id of PB_E_INTAPI_CONFIG_SV_CONSTELLATION_MSG_ID message PBLocConfigSvConstellationReqMsg { PBGnssSvTypeConfig mConstellationEnablementConfig = 1; PBGnssSvIdConfig mBlacklistSvConfig = 2; bool mResetToDefault = 3; } // defintion for message with msg id of PB_E_INTAPI_CONFIG_CONSTELLATION_SECONDARY_BAND_MSG_ID message PBLocConfigConstellationSecondaryBandReqMsg { PBGnssSvTypeConfig mSecondaryBandConfig = 1; } // defintion for message with msg id of PB_E_LOCAPI_CONTROL_DELETE_AIDING_DATA_MSG_ID message PBLocConfigAidingDataDeletionReqMsg { PBAidingData mAidingData = 1; } // defintion for message with msg id of PB_E_INTAPI_CONFIG_LEVER_ARM_MSG_ID message PBLocConfigLeverArmReqMsg { PBLIALeverArmConfigInfo mLeverArmConfigInfo = 1; } // defintion for message with msg id of PB_E_INTAPI_CONFIG_ROBUST_LOCATION_MSG_ID message PBLocConfigRobustLocationReqMsg { bool mEnable = 1; bool mEnableForE911 = 2; } // defintion for message with msg id of PB_E_INTAPI_CONFIG_MIN_GPS_WEEK_MSG_ID message PBLocConfigMinGpsWeekReqMsg { uint32 mMinGpsWeek = 1; } // defintion for message with msg id of PB_E_INTAPI_CONFIG_DEAD_RECKONING_ENGINE_MSG_ID message PBLocConfigDrEngineParamsReqMsg { PBDeadReckoningEngineConfig mDreConfig = 1; } // defintion for message with msg id of PB_E_INTAPI_CONFIG_MIN_SV_ELEVATION_MSG_ID message PBLocConfigMinSvElevationReqMsg { uint32 mMinSvElevation = 1; } // defintion for message with msg id of PB_E_INTAPI_CONFIG_ENGINE_RUN_STATE_MSG_ID message PBLocConfigEngineRunStateReqMsg { PBLocApiPositioningEngineMask mEngType = 1; PBLocEngineRunState mEngState = 2; } // defintion for message with msg id of // PB_E_INTAPI_CONFIG_USER_CONSENT_TERRESTRIAL_POSITIONING_MSG_ID message PBLocConfigUserConsentTerrestrialPositioningReqMsg { bool userConsent = 1; } //****************************************************************************** // IPC message structure - Location Integration API Get request/response message //****************************************************************************** // defintion for message with msg id of PB_E_INTAPI_GET_ROBUST_LOCATION_CONFIG_REQ_MSG_ID // LocConfigGetRobustLocationConfigReqMsg - no struct member. // defintion for message with msg id of PB_E_INTAPI_GET_ROBUST_LOCATION_CONFIG_RESP_MSG_ID message PBLocConfigGetRobustLocationConfigRespMsg { PBGnssConfigRobustLocation mRobustLoationConfig = 1; } // defintion for message with msg id of PB_E_INTAPI_GET_MIN_GPS_WEEK_REQ_MSG_ID // LocConfigGetMinGpsWeekReqMsg - no struct member. // defintion for message with msg id of PB_E_INTAPI_GET_MIN_SV_ELEVATION_RESP_MSG_ID message PBLocConfigGetMinGpsWeekRespMsg { uint32 mMinGpsWeek = 1; } // defintion for message with msg id of PB_E_INTAPI_GET_MIN_SV_ELEVATION_REQ_MSG_ID // LocConfigGetMinSvElevationReqMsg - no struct member. // defintion for message with msg id of PB_E_INTAPI_GET_MIN_SV_ELEVATION_RESP_MSG_ID message PBLocConfigGetMinSvElevationRespMsg { uint32 mMinSvElevation = 1; } // defintion for message with msg id of // PB_E_INTAPI_GET_CONSTELLATION_SECONDARY_BAND_CONFIG_REQ_MSG_ID // LocConfigGetConstellationSecondaryBandConfigReqMsg - no struct member. // defintion for message with msg id of // PB_E_INTAPI_GET_CONSTELLATION_SECONDARY_BAND_CONFIG_RESP_MSG_ID message PBLocConfigGetConstltnSecondaryBandConfigRespMsg { PBGnssSvTypeConfig mSecondaryBandConfig = 1; } //***************************** // IPC message structure - ping //***************************** // defintion for message with msg id of PB_E_LOCAPI_PINGTEST_MSG_ID message PBLocAPIPingTestReqMsg { uint32 numberOfPing = 1; repeated uint32 data = 2; } message PBLocAPIPingTestIndMsg { uint32 numberOfPing = 1; repeated uint32 data = 2; } //******************************* // IPC message header structure //******************************* message PBLocAPIMsgHeader { /**< Processor string*/ string mSocketName = 1; /**< LocationMsgID */ PBELocMsgID msgId = 2; /**< Location remote API message version */ uint32 msgVersion = 3; /**< Message payload */ bytes payload = 4; /**< payload size */ uint32 payloadSize = 5; }