GnssMeasurementInterface.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * Copyright (c) 2021, The Linux Foundation. All rights reserved.
  3. * Not a Contribution
  4. */
  5. /*
  6. * Copyright (C) 2020 The Android Open Source Project
  7. *
  8. * Licensed under the Apache License, Version 2.0 (the "License");
  9. * you may not use this file except in compliance with the License.
  10. * You may obtain a copy of the License at
  11. *
  12. * http://www.apache.org/licenses/LICENSE-2.0
  13. *
  14. * Unless required by applicable law or agreed to in writing, software
  15. * distributed under the License is distributed on an "AS IS" BASIS,
  16. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17. * See the License for the specific language governing permissions and
  18. * limitations under the License.
  19. */
  20. #include <aidl/android/hardware/gnss/BnGnssMeasurementInterface.h>
  21. #include <aidl/android/hardware/gnss/BnGnssMeasurementCallback.h>
  22. #include <atomic>
  23. #include <mutex>
  24. #include <thread>
  25. #include <LocationAPIClientBase.h>
  26. #include <gps_extended_c.h>
  27. using aidl::android::hardware::gnss::ElapsedRealtime;
  28. using aidl::android::hardware::gnss::GnssClock;
  29. using aidl::android::hardware::gnss::GnssData;
  30. using aidl::android::hardware::gnss::GnssMeasurement;
  31. using aidl::android::hardware::gnss::GnssSignalType;
  32. using aidl::android::hardware::gnss::GnssConstellationType;
  33. namespace android {
  34. namespace hardware {
  35. namespace gnss {
  36. namespace aidl {
  37. namespace implementation {
  38. using ::aidl::android::hardware::gnss::BnGnssMeasurementInterface;
  39. using ::aidl::android::hardware::gnss::IGnssMeasurementCallback;
  40. struct GnssMeasurementInterface : public BnGnssMeasurementInterface, public LocationAPIClientBase {
  41. public:
  42. GnssMeasurementInterface();
  43. ~GnssMeasurementInterface() {}
  44. ::ndk::ScopedAStatus setCallback(
  45. const std::shared_ptr<IGnssMeasurementCallback>& in_callback,
  46. bool in_enableFullTracking, bool in_enableCorrVecOutputs) override;
  47. ::ndk::ScopedAStatus close() override;
  48. // callbacks we are interested in
  49. void onGnssMeasurementsCb(GnssMeasurementsNotification gnssMeasurementsNotification) final;
  50. private:
  51. std::shared_ptr<IGnssMeasurementCallback> mGnssMeasurementCbIface = nullptr;
  52. // Synchronization lock for mGnssMeasurementCbIface
  53. mutable std::mutex mMutex;
  54. AIBinder_DeathRecipient* mDeathRecipient;
  55. bool mTracking;
  56. static void gnssMeasurementDied(void* cookie);
  57. void startTracking(GnssPowerMode powerMode = GNSS_POWER_MODE_INVALID,
  58. uint32_t timeBetweenMeasurement = GPS_DEFAULT_FIX_INTERVAL_MS);
  59. void convertGnssData(GnssMeasurementsNotification& in, GnssData& out);
  60. void convertGnssMeasurement(GnssMeasurementsData& in, GnssMeasurement& out);
  61. void convertGnssFlags(GnssMeasurementsData& in, GnssMeasurement& out);
  62. static void convertGnssSvId(GnssMeasurementsData& in, int& out);
  63. void convertGnssSignalType(GnssMeasurementsData& in, GnssSignalType& out);
  64. static void convertGnssConstellationType(GnssSvType& in, GnssConstellationType& out);
  65. void convertGnssMeasurementsCodeType(GnssMeasurementsCodeType& inCodeType,
  66. char* inOtherCodeTypeName, GnssSignalType& out);
  67. void convertGnssState(GnssMeasurementsData& in, GnssMeasurement& out);
  68. void convertGnssAccumulatedDeltaRangeState(GnssMeasurementsData& in, GnssMeasurement& out);
  69. void convertGnssMultipathIndicator(GnssMeasurementsData& in, GnssMeasurement& out);
  70. void convertGnssSatellitePvtFlags(GnssMeasurementsData& in, GnssMeasurement& out);
  71. void convertGnssSatellitePvt(GnssMeasurementsData& in, GnssMeasurement& out);
  72. void convertGnssClock(GnssMeasurementsClock& in, GnssClock& out);
  73. void convertElapsedRealtimeNanos(GnssMeasurementsNotification& in,
  74. ElapsedRealtime& elapsedRealtime);
  75. void printGnssData(GnssData& data);
  76. };
  77. } // namespace implementation
  78. } // namespace aidl
  79. } // namespace gnss
  80. } // namespace hardware
  81. } // namespace android