123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673 |
- /*
- * Copyright (c) 2021, The Linux Foundation. All rights reserved.
- * Not a Contribution
- */
- /*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #define LOG_TAG "GnssMeasurementInterfaceAidl"
- #include <log_util.h>
- #include "GnssMeasurementInterface.h"
- #include <android/binder_auto_utils.h>
- #include <aidl/android/hardware/gnss/BnGnss.h>
- #include <inttypes.h>
- #include <loc_misc_utils.h>
- using aidl::android::hardware::gnss::ElapsedRealtime;
- using aidl::android::hardware::gnss::GnssClock;
- using aidl::android::hardware::gnss::GnssData;
- using aidl::android::hardware::gnss::GnssMeasurement;
- using aidl::android::hardware::gnss::GnssSignalType;
- using aidl::android::hardware::gnss::GnssConstellationType;
- using aidl::android::hardware::gnss::GnssMultipathIndicator;
- namespace android {
- namespace hardware {
- namespace gnss {
- namespace aidl {
- namespace implementation {
- GnssMeasurementInterface::GnssMeasurementInterface() :
- mDeathRecipient(AIBinder_DeathRecipient_new(GnssMeasurementInterface::gnssMeasurementDied)),
- mTracking(false) {
- }
- ::ndk::ScopedAStatus GnssMeasurementInterface::setCallback(
- const std::shared_ptr<IGnssMeasurementCallback>& in_callback,
- bool in_enableFullTracking, bool in_enableCorrVecOutputs) {
- LOC_LOGd("setCallback: enableFullTracking: %d enableCorrVecOutputs: %d",
- (int)in_enableFullTracking,
- (int)in_enableCorrVecOutputs);
- std::unique_lock<std::mutex> lock(mMutex);
- if (nullptr == in_callback) {
- LOC_LOGe("callback is nullptr");
- return ndk::ScopedAStatus::fromExceptionCode(STATUS_INVALID_OPERATION);
- }
- AIBinder_linkToDeath(in_callback->asBinder().get(), mDeathRecipient, this);
- mGnssMeasurementCbIface = in_callback;
- lock.unlock();
- startTracking(in_enableFullTracking ? GNSS_POWER_MODE_M1 : GNSS_POWER_MODE_M2);
- return ndk::ScopedAStatus::ok();
- }
- ::ndk::ScopedAStatus GnssMeasurementInterface::close() {
- LOC_LOGd("()");
- if (nullptr != mGnssMeasurementCbIface) {
- AIBinder_unlinkToDeath(mGnssMeasurementCbIface->asBinder().get(), mDeathRecipient, this);
- mGnssMeasurementCbIface = nullptr;
- }
- std::unique_lock<std::mutex> lock(mMutex);
- mTracking = false;
- lock.unlock();
- locAPIStopTracking();
- return ndk::ScopedAStatus::ok();
- }
- void GnssMeasurementInterface::onGnssMeasurementsCb(
- GnssMeasurementsNotification gnssMeasurementsNotification) {
- std::unique_lock<std::mutex> lock(mMutex);
- LOC_LOGd("(count: %u active: %d)", gnssMeasurementsNotification.count, mTracking);
- if (mTracking) {
- auto gnssMeasurementCbIface = mGnssMeasurementCbIface;
- if (gnssMeasurementCbIface != nullptr) {
- GnssData gnssData = {};
- convertGnssData(gnssMeasurementsNotification, gnssData);
- printGnssData(gnssData);
- lock.unlock();
- gnssMeasurementCbIface->gnssMeasurementCb(gnssData);
- }
- }
- }
- void GnssMeasurementInterface::gnssMeasurementDied(void* cookie) {
- LOC_LOGe("IGnssMeasurementCallback service died");
- GnssMeasurementInterface* iface = static_cast<GnssMeasurementInterface*>(cookie);
- //clean up, i.e. iface->close();
- if (iface != nullptr) {
- iface->close();
- }
- }
- void GnssMeasurementInterface::startTracking(
- GnssPowerMode powerMode, uint32_t timeBetweenMeasurement) {
- LocationCallbacks locationCallbacks;
- memset(&locationCallbacks, 0, sizeof(LocationCallbacks));
- locationCallbacks.size = sizeof(LocationCallbacks);
- locationCallbacks.trackingCb = nullptr;
- locationCallbacks.batchingCb = nullptr;
- locationCallbacks.geofenceBreachCb = nullptr;
- locationCallbacks.geofenceStatusCb = nullptr;
- locationCallbacks.gnssLocationInfoCb = nullptr;
- locationCallbacks.gnssNiCb = nullptr;
- locationCallbacks.gnssSvCb = nullptr;
- locationCallbacks.gnssNmeaCb = nullptr;
- locationCallbacks.gnssMeasurementsCb = nullptr;
- if (nullptr != mGnssMeasurementCbIface) {
- locationCallbacks.gnssMeasurementsCb =
- [this](GnssMeasurementsNotification gnssMeasurementsNotification) {
- onGnssMeasurementsCb(gnssMeasurementsNotification);
- };
- }
- locAPISetCallbacks(locationCallbacks);
- TrackingOptions options = {};
- memset(&options, 0, sizeof(TrackingOptions));
- options.size = sizeof(TrackingOptions);
- options.minInterval = 1000;
- options.mode = GNSS_SUPL_MODE_STANDALONE;
- if (GNSS_POWER_MODE_INVALID != powerMode) {
- options.powerMode = powerMode;
- options.tbm = timeBetweenMeasurement;
- }
- std::unique_lock<std::mutex> lock(mMutex);
- mTracking = true;
- lock.unlock();
- LOC_LOGd("start tracking session");
- locAPIStartTracking(options);
- }
- void GnssMeasurementInterface::convertGnssData(GnssMeasurementsNotification& in, GnssData& out) {
- out.measurements.resize(in.count);
- for (size_t i = 0; i < in.count; i++) {
- out.measurements[i].flags = 0;
- convertGnssMeasurement(in.measurements[i], out.measurements[i]);
- }
- convertGnssClock(in.clock, out.clock);
- convertElapsedRealtimeNanos(in, out.elapsedRealtime);
- }
- void GnssMeasurementInterface::convertGnssMeasurement(
- GnssMeasurementsData& in, GnssMeasurement& out) {
- // flags
- convertGnssFlags(in, out);
- // svid
- convertGnssSvId(in, out.svid);
- // signalType
- convertGnssSignalType(in, out.signalType);
- // timeOffsetNs
- out.timeOffsetNs = in.timeOffsetNs;
- // state
- convertGnssState(in, out);
- // receivedSvTimeInNs
- out.receivedSvTimeInNs = in.receivedSvTimeNs;
- // receivedSvTimeUncertaintyInNs
- out.receivedSvTimeUncertaintyInNs = in.receivedSvTimeUncertaintyNs;
- // antennaCN0DbHz
- out.antennaCN0DbHz = in.carrierToNoiseDbHz;
- // basebandCN0DbHz
- out.basebandCN0DbHz = in.basebandCarrierToNoiseDbHz;
- // pseudorangeRateMps
- out.pseudorangeRateMps = in.pseudorangeRateMps;
- // pseudorangeRateUncertaintyMps
- out.pseudorangeRateUncertaintyMps = in.pseudorangeRateUncertaintyMps;
- // accumulatedDeltaRangeState
- convertGnssAccumulatedDeltaRangeState(in, out);
- // accumulatedDeltaRangeM
- out.accumulatedDeltaRangeM = in.adrMeters;
- // accumulatedDeltaRangeUncertaintyM
- out.accumulatedDeltaRangeUncertaintyM = in.adrUncertaintyMeters;
- // carrierCycles
- out.carrierCycles = in.carrierCycles;
- // carrierPhase
- out.carrierPhase = in.carrierPhase;
- // carrierPhaseUncertainty
- out.carrierPhaseUncertainty = in.carrierPhaseUncertainty;
- // multipathIndicator
- convertGnssMultipathIndicator(in, out);
- // snrDb
- out.snrDb = in.signalToNoiseRatioDb;
- // agcLevelDb
- out.agcLevelDb = in.agcLevelDb;
- // fullInterSignalBiasNs
- out.fullInterSignalBiasNs = in.fullInterSignalBiasNs;
- // fullInterSignalBiasUncertaintyNs
- out.fullInterSignalBiasUncertaintyNs = in.fullInterSignalBiasUncertaintyNs;
- // satelliteInterSignalBiasNs
- out.satelliteInterSignalBiasNs = in.satelliteInterSignalBiasNs;
- // satelliteInterSignalBiasUncertaintyNs
- out.satelliteInterSignalBiasUncertaintyNs = in.satelliteInterSignalBiasUncertaintyNs;
- // satellitePvt
- convertGnssSatellitePvt(in, out);
- // correlationVectors
- /* This is not supported, the corresponding flag is not set */
- }
- void GnssMeasurementInterface::convertGnssFlags(GnssMeasurementsData& in, GnssMeasurement& out) {
- if (in.flags & GNSS_MEASUREMENTS_DATA_SIGNAL_TO_NOISE_RATIO_BIT)
- out.flags |= out.HAS_SNR;
- if (in.flags & GNSS_MEASUREMENTS_DATA_CARRIER_FREQUENCY_BIT)
- out.flags |= out.HAS_CARRIER_FREQUENCY;
- if (in.flags & GNSS_MEASUREMENTS_DATA_CARRIER_CYCLES_BIT)
- out.flags |= out.HAS_CARRIER_CYCLES;
- if (in.flags & GNSS_MEASUREMENTS_DATA_CARRIER_PHASE_BIT)
- out.flags |= out.HAS_CARRIER_PHASE;
- if (in.flags & GNSS_MEASUREMENTS_DATA_CARRIER_PHASE_UNCERTAINTY_BIT)
- out.flags |= out.HAS_CARRIER_PHASE_UNCERTAINTY;
- if (in.flags & GNSS_MEASUREMENTS_DATA_AUTOMATIC_GAIN_CONTROL_BIT)
- out.flags |= out.HAS_AUTOMATIC_GAIN_CONTROL;
- if (in.flags & GNSS_MEASUREMENTS_DATA_FULL_ISB_BIT)
- out.flags |= out.HAS_FULL_ISB;
- if (in.flags & GNSS_MEASUREMENTS_DATA_FULL_ISB_UNCERTAINTY_BIT)
- out.flags |= out.HAS_FULL_ISB_UNCERTAINTY;
- if (in.flags & GNSS_MEASUREMENTS_DATA_SATELLITE_ISB_BIT)
- out.flags |= out.HAS_SATELLITE_ISB;
- if (in.flags & GNSS_MEASUREMENTS_DATA_SATELLITE_ISB_UNCERTAINTY_BIT)
- out.flags |= out.HAS_SATELLITE_ISB_UNCERTAINTY;
- if (in.flags & GNSS_MEASUREMENTS_DATA_SATELLITE_PVT_BIT)
- out.flags |= out.HAS_SATELLITE_PVT;
- if (in.flags & GNSS_MEASUREMENTS_DATA_CORRELATION_VECTOR_BIT)
- out.flags |= out.HAS_CORRELATION_VECTOR;
- }
- void GnssMeasurementInterface::convertGnssSvId(GnssMeasurementsData& in, int& out) {
- switch (in.svType) {
- case GNSS_SV_TYPE_GPS:
- out = in.svId;
- break;
- case GNSS_SV_TYPE_SBAS:
- out = in.svId;
- break;
- case GNSS_SV_TYPE_GLONASS:
- if (in.svId != 255) { // OSN is known
- out = in.svId - GLO_SV_PRN_MIN + 1;
- } else { // OSN is not known, report FCN
- out = in.gloFrequency + 92;
- }
- break;
- case GNSS_SV_TYPE_QZSS:
- out = in.svId;
- break;
- case GNSS_SV_TYPE_BEIDOU:
- out = in.svId - BDS_SV_PRN_MIN + 1;
- break;
- case GNSS_SV_TYPE_GALILEO:
- out = in.svId - GAL_SV_PRN_MIN + 1;
- break;
- case GNSS_SV_TYPE_NAVIC:
- out = in.svId - NAVIC_SV_PRN_MIN + 1;
- break;
- default:
- out = in.svId;
- break;
- }
- }
- void GnssMeasurementInterface::convertGnssSignalType(
- GnssMeasurementsData& in, GnssSignalType& out) {
- convertGnssConstellationType(in.svType, out.constellation);
- out.carrierFrequencyHz = in.carrierFrequencyHz;
- convertGnssMeasurementsCodeType(in.codeType, in.otherCodeTypeName, out);
- }
- void GnssMeasurementInterface::convertGnssConstellationType(
- GnssSvType& in, GnssConstellationType& out) {
- switch (in) {
- case GNSS_SV_TYPE_GPS:
- out = GnssConstellationType::GPS;
- break;
- case GNSS_SV_TYPE_SBAS:
- out = GnssConstellationType::SBAS;
- break;
- case GNSS_SV_TYPE_GLONASS:
- out = GnssConstellationType::GLONASS;
- break;
- case GNSS_SV_TYPE_QZSS:
- out = GnssConstellationType::QZSS;
- break;
- case GNSS_SV_TYPE_BEIDOU:
- out = GnssConstellationType::BEIDOU;
- break;
- case GNSS_SV_TYPE_GALILEO:
- out = GnssConstellationType::GALILEO;
- break;
- case GNSS_SV_TYPE_NAVIC:
- out = GnssConstellationType::IRNSS;
- break;
- case GNSS_SV_TYPE_UNKNOWN:
- default:
- out = GnssConstellationType::UNKNOWN;
- break;
- }
- }
- void GnssMeasurementInterface::convertGnssMeasurementsCodeType(
- GnssMeasurementsCodeType& inCodeType,
- char* inOtherCodeTypeName, GnssSignalType& out) {
- switch (inCodeType) {
- case GNSS_MEASUREMENTS_CODE_TYPE_A:
- out.codeType = out.CODE_TYPE_A;
- break;
- case GNSS_MEASUREMENTS_CODE_TYPE_B:
- out.codeType = out.CODE_TYPE_B;
- break;
- case GNSS_MEASUREMENTS_CODE_TYPE_C:
- out.codeType = out.CODE_TYPE_C;
- break;
- case GNSS_MEASUREMENTS_CODE_TYPE_I:
- out.codeType = out.CODE_TYPE_I;
- break;
- case GNSS_MEASUREMENTS_CODE_TYPE_L:
- out.codeType = out.CODE_TYPE_L;
- break;
- case GNSS_MEASUREMENTS_CODE_TYPE_M:
- out.codeType = out.CODE_TYPE_M;
- break;
- case GNSS_MEASUREMENTS_CODE_TYPE_N:
- out.codeType = out.CODE_TYPE_N;
- break;
- case GNSS_MEASUREMENTS_CODE_TYPE_P:
- out.codeType = out.CODE_TYPE_P;
- break;
- case GNSS_MEASUREMENTS_CODE_TYPE_Q:
- out.codeType = out.CODE_TYPE_Q;
- break;
- case GNSS_MEASUREMENTS_CODE_TYPE_S:
- out.codeType = out.CODE_TYPE_S;
- break;
- case GNSS_MEASUREMENTS_CODE_TYPE_W:
- out.codeType = out.CODE_TYPE_W;
- break;
- case GNSS_MEASUREMENTS_CODE_TYPE_X:
- out.codeType = out.CODE_TYPE_X;
- break;
- case GNSS_MEASUREMENTS_CODE_TYPE_Y:
- out.codeType = out.CODE_TYPE_Y;
- break;
- case GNSS_MEASUREMENTS_CODE_TYPE_Z:
- out.codeType = out.CODE_TYPE_Z;
- break;
- case GNSS_MEASUREMENTS_CODE_TYPE_OTHER:
- default:
- out.codeType = inOtherCodeTypeName;
- break;
- }
- }
- void GnssMeasurementInterface::convertGnssState(GnssMeasurementsData& in, GnssMeasurement& out) {
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_CODE_LOCK_BIT)
- out.state |= out.STATE_CODE_LOCK;
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_BIT_SYNC_BIT)
- out.state |= out.STATE_BIT_SYNC;
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_SUBFRAME_SYNC_BIT)
- out.state |= out.STATE_SUBFRAME_SYNC;
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_TOW_DECODED_BIT)
- out.state |= out.STATE_TOW_DECODED;
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_MSEC_AMBIGUOUS_BIT)
- out.state |= out.STATE_MSEC_AMBIGUOUS;
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_SYMBOL_SYNC_BIT)
- out.state |= out.STATE_SYMBOL_SYNC;
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_GLO_STRING_SYNC_BIT)
- out.state |= out.STATE_GLO_STRING_SYNC;
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_GLO_TOD_DECODED_BIT)
- out.state |= out.STATE_GLO_TOD_DECODED;
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_BDS_D2_BIT_SYNC_BIT)
- out.state |= out.STATE_BDS_D2_BIT_SYNC;
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_BDS_D2_SUBFRAME_SYNC_BIT)
- out.state |= out.STATE_BDS_D2_SUBFRAME_SYNC;
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_GAL_E1BC_CODE_LOCK_BIT)
- out.state |= out.STATE_GAL_E1BC_CODE_LOCK;
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_GAL_E1C_2ND_CODE_LOCK_BIT)
- out.state |= out.STATE_GAL_E1C_2ND_CODE_LOCK;
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_GAL_E1B_PAGE_SYNC_BIT)
- out.state |= out.STATE_GAL_E1B_PAGE_SYNC;
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_SBAS_SYNC_BIT)
- out.state |= out.STATE_SBAS_SYNC;
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_TOW_KNOWN_BIT)
- out.state |= out.STATE_TOW_KNOWN;
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_GLO_TOD_KNOWN_BIT)
- out.state |= out.STATE_GLO_TOD_KNOWN;
- if (in.stateMask & GNSS_MEASUREMENTS_STATE_2ND_CODE_LOCK_BIT)
- out.state |= out.STATE_2ND_CODE_LOCK;
- }
- void GnssMeasurementInterface::convertGnssAccumulatedDeltaRangeState(
- GnssMeasurementsData& in, GnssMeasurement& out) {
- if (in.adrStateMask & GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_VALID_BIT)
- out.accumulatedDeltaRangeState |= out.ADR_STATE_VALID;
- if (in.adrStateMask & GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_RESET_BIT)
- out.accumulatedDeltaRangeState |= out.ADR_STATE_RESET;
- if (in.adrStateMask & GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_CYCLE_SLIP_BIT)
- out.accumulatedDeltaRangeState |= out.ADR_STATE_CYCLE_SLIP;
- if (in.adrStateMask & GNSS_MEASUREMENTS_ACCUMULATED_DELTA_RANGE_STATE_HALF_CYCLE_RESOLVED_BIT)
- out.accumulatedDeltaRangeState |= out.ADR_STATE_HALF_CYCLE_RESOLVED;
- }
- void GnssMeasurementInterface::convertGnssMultipathIndicator(
- GnssMeasurementsData& in, GnssMeasurement& out) {
- switch (in.multipathIndicator) {
- case GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_PRESENT:
- out.multipathIndicator = GnssMultipathIndicator::PRESENT;
- break;
- case GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_NOT_PRESENT:
- out.multipathIndicator = GnssMultipathIndicator::NOT_PRESENT;
- break;
- case GNSS_MEASUREMENTS_MULTIPATH_INDICATOR_UNKNOWN:
- default:
- out.multipathIndicator = GnssMultipathIndicator::UNKNOWN;
- break;
- }
- }
- void GnssMeasurementInterface::convertGnssSatellitePvtFlags(GnssMeasurementsData& in,
- GnssMeasurement& out) {
- if (in.satellitePvt.flags & GNSS_SATELLITE_PVT_POSITION_VELOCITY_CLOCK_INFO_BIT)
- out.satellitePvt.flags |= out.satellitePvt.HAS_POSITION_VELOCITY_CLOCK_INFO;
- if (in.satellitePvt.flags & GNSS_SATELLITE_PVT_IONO_BIT)
- out.satellitePvt.flags |= out.satellitePvt.HAS_IONO;
- if (in.satellitePvt.flags & GNSS_SATELLITE_PVT_TROPO_BIT)
- out.satellitePvt.flags |= out.satellitePvt.HAS_TROPO;
- }
- void GnssMeasurementInterface::convertGnssSatellitePvt(
- GnssMeasurementsData& in, GnssMeasurement& out) {
- // flags
- convertGnssSatellitePvtFlags(in, out);
- // satPosEcef
- out.satellitePvt.satPosEcef.posXMeters = in.satellitePvt.satPosEcef.posXMeters;
- out.satellitePvt.satPosEcef.posYMeters = in.satellitePvt.satPosEcef.posYMeters;
- out.satellitePvt.satPosEcef.posZMeters = in.satellitePvt.satPosEcef.posZMeters;
- out.satellitePvt.satPosEcef.ureMeters = in.satellitePvt.satPosEcef.ureMeters;
- // satVelEcef
- out.satellitePvt.satVelEcef.velXMps = in.satellitePvt.satVelEcef.velXMps;
- out.satellitePvt.satVelEcef.velYMps = in.satellitePvt.satVelEcef.velYMps;
- out.satellitePvt.satVelEcef.velZMps = in.satellitePvt.satVelEcef.velZMps;
- out.satellitePvt.satVelEcef.ureRateMps = in.satellitePvt.satVelEcef.ureRateMps;
- // satClockInfo
- out.satellitePvt.satClockInfo.satHardwareCodeBiasMeters =
- in.satellitePvt.satClockInfo.satHardwareCodeBiasMeters;
- out.satellitePvt.satClockInfo.satTimeCorrectionMeters =
- in.satellitePvt.satClockInfo.satTimeCorrectionMeters;
- out.satellitePvt.satClockInfo.satClkDriftMps = in.satellitePvt.satClockInfo.satClkDriftMps;
- // ionoDelayMeters
- out.satellitePvt.ionoDelayMeters = in.satellitePvt.ionoDelayMeters;
- // tropoDelayMeters
- out.satellitePvt.tropoDelayMeters = in.satellitePvt.tropoDelayMeters;
- }
- void GnssMeasurementInterface::convertGnssClock(
- GnssMeasurementsClock& in, GnssClock& out) {
- // gnssClockFlags
- if (in.flags & GNSS_MEASUREMENTS_CLOCK_FLAGS_LEAP_SECOND_BIT)
- out.gnssClockFlags |= out.HAS_LEAP_SECOND;
- if (in.flags & GNSS_MEASUREMENTS_CLOCK_FLAGS_TIME_UNCERTAINTY_BIT)
- out.gnssClockFlags |= out.HAS_TIME_UNCERTAINTY;
- if (in.flags & GNSS_MEASUREMENTS_CLOCK_FLAGS_FULL_BIAS_BIT)
- out.gnssClockFlags |= out.HAS_FULL_BIAS;
- if (in.flags & GNSS_MEASUREMENTS_CLOCK_FLAGS_BIAS_BIT)
- out.gnssClockFlags |= out.HAS_BIAS;
- if (in.flags & GNSS_MEASUREMENTS_CLOCK_FLAGS_BIAS_UNCERTAINTY_BIT)
- out.gnssClockFlags |= out.HAS_BIAS_UNCERTAINTY;
- if (in.flags & GNSS_MEASUREMENTS_CLOCK_FLAGS_DRIFT_BIT)
- out.gnssClockFlags |= out.HAS_DRIFT;
- if (in.flags & GNSS_MEASUREMENTS_CLOCK_FLAGS_DRIFT_UNCERTAINTY_BIT)
- out.gnssClockFlags |= out.HAS_DRIFT_UNCERTAINTY;
- // leapSecond
- out.leapSecond = in.leapSecond;
- // timeNs
- out.timeNs = in.timeNs;
- // timeUncertaintyNs
- out.timeUncertaintyNs = in.timeUncertaintyNs;
- // fullBiasNs
- out.fullBiasNs = in.fullBiasNs;
- // biasNs
- out.biasNs = in.biasNs;
- // biasUncertaintyNs
- out.biasUncertaintyNs = in.biasUncertaintyNs;
- // driftNsps
- out.driftNsps = in.driftNsps;
- // driftUncertaintyNsps
- out.driftUncertaintyNsps = in.driftUncertaintyNsps;
- // hwClockDiscontinuityCount
- out.hwClockDiscontinuityCount = in.hwClockDiscontinuityCount;
- // referenceSignalTypeForIsb
- convertGnssConstellationType(in.referenceSignalTypeForIsb.svType,
- out.referenceSignalTypeForIsb.constellation);
- out.referenceSignalTypeForIsb.carrierFrequencyHz =
- in.referenceSignalTypeForIsb.carrierFrequencyHz;
- convertGnssMeasurementsCodeType(in.referenceSignalTypeForIsb.codeType,
- in.referenceSignalTypeForIsb.otherCodeTypeName,
- out.referenceSignalTypeForIsb);
- }
- void GnssMeasurementInterface::convertElapsedRealtimeNanos(
- GnssMeasurementsNotification& in, ElapsedRealtime& elapsedRealtime) {
- if (in.clock.flags & GNSS_MEASUREMENTS_CLOCK_FLAGS_ELAPSED_REAL_TIME_BIT) {
- elapsedRealtime.flags |= elapsedRealtime.HAS_TIMESTAMP_NS;
- elapsedRealtime.timestampNs = in.clock.elapsedRealTime;
- elapsedRealtime.flags |= elapsedRealtime.HAS_TIME_UNCERTAINTY_NS;
- elapsedRealtime.timeUncertaintyNs = in.clock.elapsedRealTimeUnc;
- LOC_LOGd("elapsedRealtime.timestampNs=%" PRIi64 ""
- " elapsedRealtime.timeUncertaintyNs=%lf elapsedRealtime.flags=0x%X",
- elapsedRealtime.timestampNs,
- elapsedRealtime.timeUncertaintyNs, elapsedRealtime.flags);
- }
- }
- void GnssMeasurementInterface::printGnssData(GnssData& data) {
- LOC_LOGd(" Measurements Info for %zu satellites", data.measurements.size());
- for (size_t i = 0; i < data.measurements.size(); i++) {
- LOC_LOGd("%zu : flags: 0x%08x,"
- " svid: %d,"
- " signalType.constellation: %u,"
- " signalType.carrierFrequencyHz: %.2f,"
- " signalType.codeType: %s,"
- " timeOffsetNs: %.2f,"
- " state: 0x%08x,"
- " receivedSvTimeInNs: %" PRIu64
- " receivedSvTimeUncertaintyInNs: %" PRIu64
- " antennaCN0DbHz: %.2f,"
- " basebandCN0DbHz: %.2f,"
- " pseudorangeRateMps : %.2f,"
- " pseudorangeRateUncertaintyMps : %.2f,\n"
- " accumulatedDeltaRangeState: 0x%08x,"
- " accumulatedDeltaRangeM: %.2f, "
- " accumulatedDeltaRangeUncertaintyM : %.2f, "
- " carrierCycles: %" PRIu64
- " carrierPhase: %.2f,"
- " carrierPhaseUncertainty: %.2f,"
- " multipathIndicator: %u,"
- " snrDb: %.2f,"
- " agcLevelDb: %.2f,"
- " fullInterSignalBiasNs: %.2f,"
- " fullInterSignalBiasUncertaintyNs: %.2f,"
- " satelliteInterSignalBiasNs: %.2f,"
- " satelliteInterSignalBiasUncertaintyNs: %.2f",
- i + 1,
- data.measurements[i].flags,
- data.measurements[i].svid,
- data.measurements[i].signalType.constellation,
- data.measurements[i].signalType.carrierFrequencyHz,
- data.measurements[i].signalType.codeType.c_str(),
- data.measurements[i].timeOffsetNs,
- data.measurements[i].state,
- data.measurements[i].receivedSvTimeInNs,
- data.measurements[i].receivedSvTimeUncertaintyInNs,
- data.measurements[i].antennaCN0DbHz,
- data.measurements[i].basebandCN0DbHz,
- data.measurements[i].pseudorangeRateMps,
- data.measurements[i].pseudorangeRateUncertaintyMps,
- data.measurements[i].accumulatedDeltaRangeState,
- data.measurements[i].accumulatedDeltaRangeM,
- data.measurements[i].accumulatedDeltaRangeUncertaintyM,
- data.measurements[i].carrierCycles,
- data.measurements[i].carrierPhase,
- data.measurements[i].carrierPhaseUncertainty,
- data.measurements[i].multipathIndicator,
- data.measurements[i].snrDb,
- data.measurements[i].agcLevelDb,
- data.measurements[i].fullInterSignalBiasNs,
- data.measurements[i].fullInterSignalBiasUncertaintyNs,
- data.measurements[i].satelliteInterSignalBiasNs,
- data.measurements[i].satelliteInterSignalBiasUncertaintyNs
- );
- LOC_LOGd(" satellitePvt.flags: 0x%04x,"
- " satellitePvt.satPosEcef.posXMeters: %.2f,"
- " satellitePvt.satPosEcef.posYMeters: %.2f,"
- " satellitePvt.satPosEcef.posZMeters: %.2f,"
- " satellitePvt.satPosEcef.ureMeters: %.2f,"
- " satellitePvt.satVelEcef.velXMps: %.2f,"
- " satellitePvt.satVelEcef.velYMps: %.2f,"
- " satellitePvt.satVelEcef.velZMps: %.2f,"
- " satellitePvt.satVelEcef.ureRateMps: %.2f,"
- " satellitePvt.satClockInfo.satHardwareCodeBiasMeters: %.2f,"
- " satellitePvt.satClockInfo.satTimeCorrectionMeters: %.2f,"
- " satellitePvt.satClockInfo.satClkDriftMps: %.2f,"
- " satellitePvt.ionoDelayMeters: %.2f,"
- " satellitePvt.tropoDelayMeters: %.2f",
- data.measurements[i].satellitePvt.flags,
- data.measurements[i].satellitePvt.satPosEcef.posXMeters,
- data.measurements[i].satellitePvt.satPosEcef.posYMeters,
- data.measurements[i].satellitePvt.satPosEcef.posZMeters,
- data.measurements[i].satellitePvt.satPosEcef.ureMeters,
- data.measurements[i].satellitePvt.satVelEcef.velXMps,
- data.measurements[i].satellitePvt.satVelEcef.velYMps,
- data.measurements[i].satellitePvt.satVelEcef.velZMps,
- data.measurements[i].satellitePvt.satVelEcef.ureRateMps,
- data.measurements[i].satellitePvt.satClockInfo.satHardwareCodeBiasMeters,
- data.measurements[i].satellitePvt.satClockInfo.satTimeCorrectionMeters,
- data.measurements[i].satellitePvt.satClockInfo.satClkDriftMps,
- data.measurements[i].satellitePvt.ionoDelayMeters,
- data.measurements[i].satellitePvt.tropoDelayMeters
- );
- }
- LOC_LOGd(" Clocks Info "
- " gnssClockFlags: 0x%04x,"
- " leapSecond: %d,"
- " timeNs: %" PRId64
- " timeUncertaintyNs: %.2f,"
- " fullBiasNs: %" PRId64
- " biasNs: %.2f,"
- " biasUncertaintyNs: %.2f,"
- " driftNsps: %.2f,"
- " driftUncertaintyNsps: %.2f,"
- " hwClockDiscontinuityCount: %u,"
- " referenceSignalTypeForIsb.constellation: %u,"
- " referenceSignalTypeForIsb.carrierFrequencyHz: %.2f,"
- " referenceSignalTypeForIsb.codeType: %s",
- data.clock.gnssClockFlags,
- data.clock.leapSecond,
- data.clock.timeNs,
- data.clock.timeUncertaintyNs,
- data.clock.fullBiasNs,
- data.clock.biasNs,
- data.clock.biasUncertaintyNs,
- data.clock.driftNsps,
- data.clock.driftUncertaintyNsps,
- data.clock.hwClockDiscontinuityCount,
- data.clock.referenceSignalTypeForIsb.constellation,
- data.clock.referenceSignalTypeForIsb.carrierFrequencyHz,
- data.clock.referenceSignalTypeForIsb.codeType.c_str());
- LOC_LOGd(" ElapsedRealtime "
- " flags: 0x%08x,"
- " timestampNs: %" PRId64", "
- " timeUncertaintyNs: %.2f",
- data.elapsedRealtime.flags,
- data.elapsedRealtime.timestampNs,
- data.elapsedRealtime.timeUncertaintyNs);
- }
- } // namespace implementation
- } // namespace aidl
- } // namespace gnss
- } // namespace hardware
- } // namespace android
|