123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- #define LOG_TAG "LocSvc_GnssMeasurementInterface"
- #include <log_util.h>
- #include "GnssMeasurement.h"
- #include "MeasurementAPIClient.h"
- namespace android {
- namespace hardware {
- namespace gnss {
- namespace V2_0 {
- namespace implementation {
- void GnssMeasurement::GnssMeasurementDeathRecipient::serviceDied(
- uint64_t cookie, const wp<IBase>& who) {
- LOC_LOGE("%s] service died. cookie: %llu, who: %p",
- __FUNCTION__, static_cast<unsigned long long>(cookie), &who);
- auto gssMeasurement = mGnssMeasurement.promote();
- if (gssMeasurement != nullptr) {
- gssMeasurement->handleClientDeath();
- }
- }
- GnssMeasurement::GnssMeasurement(const sp<GnssMeasurement>& self) :
- mSelf(self), mApi(new MeasurementAPIClient()) {
- }
- GnssMeasurement::~GnssMeasurement() {
- if (mApi) {
- mApi->destroy();
- mApi = nullptr;
- }
- }
- void GnssMeasurement::handleClientDeath() {
- close();
- if (mApi != nullptr) {
- mApi->measurementSetCallback(nullptr);
- mApi->measurementSetCallback_1_1(nullptr);
- mApi->measurementSetCallback_2_0(nullptr);
- }
- mGnssMeasurementCbIface = nullptr;
- mGnssMeasurementCbIface_1_1 = nullptr;
- mGnssMeasurementCbIface_2_0 = nullptr;
- }
- Return<GnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallback(
- const sp<V1_0::IGnssMeasurementCallback>& callback) {
- Return<GnssMeasurement::GnssMeasurementStatus> ret =
- IGnssMeasurement::GnssMeasurementStatus::ERROR_GENERIC;
- if (mGnssMeasurementCbIface != nullptr) {
- LOC_LOGE("%s]: GnssMeasurementCallback is already set", __FUNCTION__);
- return IGnssMeasurement::GnssMeasurementStatus::ERROR_ALREADY_INIT;
- }
- if (callback == nullptr) {
- LOC_LOGE("%s]: callback is nullptr", __FUNCTION__);
- return ret;
- }
- if (mApi == nullptr) {
- LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__);
- return ret;
- }
- clearInterfaces();
- mGnssMeasurementCbIface = callback;
- if (mGnssMeasurementDeathRecipient == nullptr) {
- mGnssMeasurementDeathRecipient = new GnssMeasurementDeathRecipient(mSelf);
- }
- mGnssMeasurementCbIface->linkToDeath(mGnssMeasurementDeathRecipient, 0);
- return mApi->measurementSetCallback(callback);
- }
- void GnssMeasurement::clearInterfaces() {
- if (mGnssMeasurementCbIface != nullptr) {
- mGnssMeasurementCbIface->unlinkToDeath(mGnssMeasurementDeathRecipient);
- mGnssMeasurementCbIface = nullptr;
- }
- if (mGnssMeasurementCbIface_1_1 != nullptr) {
- mGnssMeasurementCbIface_1_1->unlinkToDeath(mGnssMeasurementDeathRecipient);
- mGnssMeasurementCbIface_1_1 = nullptr;
- }
- if (mGnssMeasurementCbIface_2_0 != nullptr) {
- mGnssMeasurementCbIface_2_0->unlinkToDeath(mGnssMeasurementDeathRecipient);
- mGnssMeasurementCbIface_2_0 = nullptr;
- }
- }
- Return<void> GnssMeasurement::close() {
- if (mApi == nullptr) {
- LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__);
- return Void();
- }
- clearInterfaces();
- mApi->measurementClose();
- return Void();
- }
- Return<GnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallback_1_1(
- const sp<V1_1::IGnssMeasurementCallback>& callback, bool enableFullTracking) {
- Return<GnssMeasurement::GnssMeasurementStatus> ret =
- IGnssMeasurement::GnssMeasurementStatus::ERROR_GENERIC;
- if (mGnssMeasurementCbIface_1_1 != nullptr) {
- LOC_LOGE("%s]: GnssMeasurementCallback is already set", __FUNCTION__);
- return IGnssMeasurement::GnssMeasurementStatus::ERROR_ALREADY_INIT;
- }
- if (callback == nullptr) {
- LOC_LOGE("%s]: callback is nullptr", __FUNCTION__);
- return ret;
- }
- if (nullptr == mApi) {
- LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__);
- return ret;
- }
- clearInterfaces();
- mGnssMeasurementCbIface_1_1 = callback;
- if (mGnssMeasurementDeathRecipient == nullptr) {
- mGnssMeasurementDeathRecipient = new GnssMeasurementDeathRecipient(mSelf);
- }
- mGnssMeasurementCbIface_1_1->linkToDeath(mGnssMeasurementDeathRecipient, 0);
- GnssPowerMode powerMode = enableFullTracking?
- GNSS_POWER_MODE_M1 : GNSS_POWER_MODE_M2;
- return mApi->measurementSetCallback_1_1(callback, powerMode);
- }
- Return<V1_0::IGnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallback_2_0(
- const sp<V2_0::IGnssMeasurementCallback>& callback,
- bool enableFullTracking) {
- Return<GnssMeasurement::GnssMeasurementStatus> ret =
- IGnssMeasurement::GnssMeasurementStatus::ERROR_GENERIC;
- if (mGnssMeasurementCbIface_2_0 != nullptr) {
- LOC_LOGE("%s]: GnssMeasurementCallback is already set", __FUNCTION__);
- return IGnssMeasurement::GnssMeasurementStatus::ERROR_ALREADY_INIT;
- }
- if (callback == nullptr) {
- LOC_LOGE("%s]: callback is nullptr", __FUNCTION__);
- return ret;
- }
- if (nullptr == mApi) {
- LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__);
- return ret;
- }
- clearInterfaces();
- mGnssMeasurementCbIface_2_0 = callback;
- if (mGnssMeasurementDeathRecipient == nullptr) {
- mGnssMeasurementDeathRecipient = new GnssMeasurementDeathRecipient(mSelf);
- }
- mGnssMeasurementCbIface_2_0->linkToDeath(mGnssMeasurementDeathRecipient, 0);
- GnssPowerMode powerMode = enableFullTracking ?
- GNSS_POWER_MODE_M1 : GNSS_POWER_MODE_M2;
- return mApi->measurementSetCallback_2_0(callback, powerMode);
- }
- }
- }
- }
- }
- }
|