From 877b2e40c3c062435142b135994cc149fe7e2c4c Mon Sep 17 00:00:00 2001 From: Yingjie Wang Date: Fri, 21 Dec 2018 17:56:30 +0800 Subject: [PATCH] Build dummy QMAA HAL to unblock framework Build dummy QMAA HAL to unblock framework when BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE flag is not defined. Change-Id: I62f71d7964e916619f0157e69a57cd83a62bba54 CRs-Fixed: 2378795 --- Android.mk | 5 +- android/Android.mk | 5 +- android/dummy/Android.mk | 63 ++++++++++ android/dummy/GnssDummy.cpp | 115 ++++++++++++++++++ android/dummy/GnssDummy.h | 96 +++++++++++++++ .../android.hardware.gnss@1.0-service-qti.rc | 4 + android/dummy/serviceDummy.cpp | 32 +++++ 7 files changed, 316 insertions(+), 4 deletions(-) create mode 100644 android/dummy/Android.mk create mode 100644 android/dummy/GnssDummy.cpp create mode 100644 android/dummy/GnssDummy.h create mode 100644 android/dummy/android.hardware.gnss@1.0-service-qti.rc create mode 100644 android/dummy/serviceDummy.cpp diff --git a/Android.mk b/Android.mk index 23b2a666..a995aff2 100644 --- a/Android.mk +++ b/Android.mk @@ -1,6 +1,7 @@ -ifneq ($(BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE),) LOCAL_PATH := $(call my-dir) include $(LOCAL_PATH)/build/target_specific_features.mk - +ifneq ($(BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE),) include $(call all-makefiles-under,$(LOCAL_PATH)) +else +include $(LOCAL_PATH)/android/Android.mk endif diff --git a/android/Android.mk b/android/Android.mk index 11d5889d..bff117ed 100644 --- a/android/Android.mk +++ b/android/Android.mk @@ -1,9 +1,10 @@ -ifneq ($(BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE),) LOCAL_PATH := $(call my-dir) +ifneq ($(BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE),) ifeq ($(GNSS_HIDL_VERSION),1.1) include $(LOCAL_PATH)/1.1/Android.mk else include $(LOCAL_PATH)/1.0/Android.mk endif - +else #QMAA flag set, build dummy android.hardware.gnss@1.0-impl-qti +include $(LOCAL_PATH)/dummy/Android.mk endif #BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE diff --git a/android/dummy/Android.mk b/android/dummy/Android.mk new file mode 100644 index 00000000..d4388888 --- /dev/null +++ b/android/dummy/Android.mk @@ -0,0 +1,63 @@ +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +#build dummy android.hardware.gnss@1.0-impl-qti +include $(CLEAR_VARS) +LOCAL_MODULE := android.hardware.gnss@1.0-impl-qti +LOCAL_VENDOR_MODULE := true +LOCAL_MODULE_RELATIVE_PATH := hw +LOCAL_SRC_FILES := GnssDummy.cpp + +LOCAL_SHARED_LIBRARIES := \ + liblog \ + libhidlbase \ + libhidltransport \ + libhwbinder \ + libcutils \ + libutils \ + android.hardware.gnss@1.0 \ + +LOCAL_CFLAGS += $(GNSS_CFLAGS) +include $(BUILD_SHARED_LIBRARY) + +BUILD_GNSS_HIDL_SERVICE := true +ifneq ($(BOARD_VENDOR_QCOM_LOC_PDK_FEATURE_SET), true) +ifneq ($(LW_FEATURE_SET),true) +#BUILD_GNSS_HIDL_SERVICE := false +endif # LW_FEATURE_SET +endif # BOARD_VENDOR_QCOM_LOC_PDK_FEATURE_SET + +ifeq ($(BUILD_GNSS_HIDL_SERVICE), true) +include $(CLEAR_VARS) +LOCAL_MODULE := android.hardware.gnss@1.0-service-qti +LOCAL_VENDOR_MODULE := true +LOCAL_MODULE_RELATIVE_PATH := hw +LOCAL_INIT_RC := android.hardware.gnss@1.0-service-qti.rc +LOCAL_SRC_FILES := \ + serviceDummy.cpp \ + +#LOCAL_C_INCLUDES:= \ + $(LOCAL_PATH)/location_api +#LOCAL_HEADER_LIBRARIES := \ + libgps.utils_headers \ + libloc_core_headers \ + libloc_pla_headers \ + liblocation_api_headers + + +LOCAL_SHARED_LIBRARIES := \ + liblog \ + libcutils \ + libdl \ + libbase \ + libutils \ + +LOCAL_SHARED_LIBRARIES += \ + libhwbinder \ + libhidlbase \ + libhidltransport \ + android.hardware.gnss@1.0 \ + +LOCAL_CFLAGS += $(GNSS_CFLAGS) +include $(BUILD_EXECUTABLE) +endif # BUILD_GNSS_HIDL_SERVICE diff --git a/android/dummy/GnssDummy.cpp b/android/dummy/GnssDummy.cpp new file mode 100644 index 00000000..b30b4370 --- /dev/null +++ b/android/dummy/GnssDummy.cpp @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. + * Not a Contribution + */ +/* + * Copyright (C) 2016 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. + */ +#include "GnssDummy.h" + +namespace android { +namespace hardware { +namespace gnss { +namespace V1_0 { +namespace implementation { + +Gnss::Gnss() { +} + +Gnss::~Gnss() { +} + +Return Gnss::setCallback(const sp& /*callback*/) { + return false; +} + +Return Gnss::start() { + return false; +} + +Return Gnss::stop() { + return false; +} + +Return Gnss::cleanup() { + return Void(); +} + +Return Gnss::injectLocation(double /*latitudeDegrees*/, + double /*longitudeDegrees*/, + float /*accuracyMeters*/) { + return false; +} + +Return Gnss::injectTime(int64_t /*timeMs*/, int64_t /*timeReferenceMs*/, + int32_t /*uncertaintyMs*/) { + return false; +} + +Return Gnss::deleteAidingData(V1_0::IGnss::GnssAidingData /*aidingDataFlags*/) { + return Void(); +} + +Return Gnss::setPositionMode(V1_0::IGnss::GnssPositionMode /*mode*/, + V1_0::IGnss::GnssPositionRecurrence /*recurrence*/, + uint32_t /*minIntervalMs*/, + uint32_t /*preferredAccuracyMeters*/, + uint32_t /*preferredTimeMs*/) { + return false; +} + +Return> Gnss::getExtensionAGnss() { + return nullptr; +} + +Return> Gnss::getExtensionGnssNi() { + return nullptr; +} + +Return> Gnss::getExtensionGnssMeasurement() { + return nullptr; +} + +Return> Gnss::getExtensionGnssConfiguration() { + return nullptr; +} + +Return> Gnss::getExtensionGnssGeofencing() { + return nullptr; +} + +Return> Gnss::getExtensionGnssBatching() { + return nullptr; +} + +Return> Gnss::getExtensionGnssDebug() { + return nullptr; +} + +Return> Gnss::getExtensionAGnssRil() { + return nullptr; +} + +IGnss* HIDL_FETCH_IGnss(const char* /*hal*/) { + IGnss* iface = nullptr; + iface = new Gnss(); + return iface; +} + +} // namespace implementation +} // namespace V1_0 +} // namespace gnss +} // namespace hardware +} // namespace android diff --git a/android/dummy/GnssDummy.h b/android/dummy/GnssDummy.h new file mode 100644 index 00000000..89c876f0 --- /dev/null +++ b/android/dummy/GnssDummy.h @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. + * Not a Contribution + */ +/* + * Copyright (C) 2016 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 "LocSvc_GnssInterface" + +#include +#include +#include + +#include +#include +#include +namespace android { +namespace hardware { +namespace gnss { +namespace V1_0 { +namespace implementation { + +using ::android::hardware::hidl_array; +using ::android::hardware::hidl_memory; +using ::android::hardware::hidl_string; +using ::android::hardware::hidl_vec; +using ::android::hardware::Return; +using ::android::hardware::Void; +using ::android::sp; +using ::android::hardware::gnss::V1_0::GnssLocation; + +struct Gnss : public IGnss { + Gnss(); + ~Gnss(); + + /* + * Methods from ::android::hardware::gnss::V1_0::IGnss follow. + * These declarations were generated from Gnss.hal. + */ + Return setCallback(const sp& callback) override; + Return start() override; + Return stop() override; + Return cleanup() override; + Return injectLocation(double latitudeDegrees, + double longitudeDegrees, + float accuracyMeters) override; + Return injectTime(int64_t timeMs, + int64_t timeReferenceMs, + int32_t uncertaintyMs) override; + Return deleteAidingData(V1_0::IGnss::GnssAidingData aidingDataFlags) override; + Return setPositionMode(V1_0::IGnss::GnssPositionMode mode, + V1_0::IGnss::GnssPositionRecurrence recurrence, + uint32_t minIntervalMs, + uint32_t preferredAccuracyMeters, + uint32_t preferredTimeMs) override; + Return> getExtensionAGnss() override; + Return> getExtensionGnssNi() override; + Return> getExtensionGnssMeasurement() override; + Return> getExtensionGnssConfiguration() override; + Return> getExtensionGnssGeofencing() override; + Return> getExtensionGnssBatching() override; + + Return> getExtensionAGnssRil() override; + + inline Return> getExtensionGnssNavigationMessage() override { + return nullptr; + } + + inline Return> getExtensionXtra() override { + return nullptr; + } + + Return> getExtensionGnssDebug() override; +}; + +extern "C" IGnss* HIDL_FETCH_IGnss(const char* name); + +} // namespace implementation +} // namespace V1_0 +} // namespace gnss +} // namespace hardware +} // namespace android + diff --git a/android/dummy/android.hardware.gnss@1.0-service-qti.rc b/android/dummy/android.hardware.gnss@1.0-service-qti.rc new file mode 100644 index 00000000..b5da6f97 --- /dev/null +++ b/android/dummy/android.hardware.gnss@1.0-service-qti.rc @@ -0,0 +1,4 @@ +service gnss_service /vendor/bin/hw/android.hardware.gnss@1.0-service-qti + class hal + user gps + group system gps radio diff --git a/android/dummy/serviceDummy.cpp b/android/dummy/serviceDummy.cpp new file mode 100644 index 00000000..10ce60b2 --- /dev/null +++ b/android/dummy/serviceDummy.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. + * Not a Contribution + */ +/* + * Copyright (C) 2016 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 "android.hardware.gnss@1.0-service-qti" + +#include +#include + +using android::hardware::gnss::V1_0::IGnss; +using android::hardware::defaultPassthroughServiceImplementation; + +int main() { + ALOGI("%s", __FUNCTION__); + return defaultPassthroughServiceImplementation(); +}