diff --git a/gps/brcm/Android.bp b/gps/brcm/Android.bp new file mode 100644 index 0000000..c0ffc2c --- /dev/null +++ b/gps/brcm/Android.bp @@ -0,0 +1,215 @@ +// 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. + +cc_prebuilt_library_shared { + name: "android.hardware.gnss@2.1-impl-google", + arch: { + arm64: { + srcs: ["bin/android.hardware.gnss@2.1-impl-google.so"], + shared_libs: [ + "liblog", + "libhidlbase", + // "libhidltransport", + "libutils", + "android.hardware.gnss@1.0", + "android.hardware.gnss@1.1", + "android.hardware.gnss@2.0", + "android.hardware.gnss@2.1", + "android.hardware.gnss.measurement_corrections@1.0", + "android.hardware.gnss.visibility_control@1.0", + "android.hardware.gnss-V2-ndk", + "libhardware", + "libc++", + "libc", + "libm", + "libdl", + ], + }, + }, + compile_multilib: "64", + vendor: true, + relative_install_path: "hw", + strip: { + none: true, + }, + // Bypass because libhidltransport is deprecated + check_elf_files: false, +} + +cc_prebuilt_binary { + name: "android.hardware.gnss@2.1-service-brcm", + arch: { + arm64: { + srcs: ["bin/android.hardware.gnss@2.1-service-brcm"], + shared_libs: [ + "liblog", + "libutils", + "libhardware", + "android.hardware.gnss@1.0", + "libhidlbase", + "android.hardware.gnss@1.1", + "android.hardware.gnss@2.0", + "android.hardware.gnss@2.1", + "android.hardware.gnss-V2-ndk", + "libc++", + "libc", + "libm", + "libdl", + ], + }, + }, + compile_multilib: "64", + vendor: true, + relative_install_path: "hw", + strip: { + none: true, + }, + // Bypass because libhidltransport is deprecated + // Bypass because libhwbinder is deprecated + check_elf_files: false, + vintf_fragments: ["android.hardware.gnss@2.1-service-brcm.xml"] +} + +cc_prebuilt_library_shared { + name: "flp.default", + arch: { + arm64: { + srcs: ["bin/flp.default.so"], + shared_libs: [ + "liblog", + "libcutils", + "libutils", + "libc++", + "libc", + "libm", + "libdl", + ], + }, + }, + compile_multilib: "64", + vendor: true, + relative_install_path: "hw", + strip: { + none: true, + }, + // Bypass because soname mismatch + check_elf_files: false, +} + +cc_prebuilt_binary { + name: "gpsd", + arch: { + arm64: { + srcs: ["bin/gpsd"], + shared_libs: [ + "liblog", + "libutils", + "libhardware_legacy", + "libcutils", + "libssl", + "libcrypto", + "android.frameworks.sensorservice@1.0", + "libhidlbase", + "libandroid_net", + "libc++", + "libc", + "libm", + "libdl", + ], + }, + }, + compile_multilib: "64", + vendor: true, + relative_install_path: "hw", + strip: { + none: true, + }, + // Bypass because libsitril-gps is Android.mk module + check_elf_files: false, +} + +cc_prebuilt_library_shared { + name: "gps.default", + arch: { + arm64: { + srcs: ["bin/gps.default.so"], + shared_libs: [ + "liblog", + "libcutils", + "libutils", + "libc++", + "libc", + "libm", + "libdl", + ], + }, + }, + compile_multilib: "64", + vendor: true, + relative_install_path: "hw", + strip: { + none: true, + }, + // Bypass because soname mismatch + check_elf_files: false, +} + +cc_prebuilt_binary { + name: "lhd", + arch: { + arm64: { + srcs: ["bin/lhd"], + shared_libs: [ + "liblog", + "libutils", + "libhardware_legacy", + "libc++", + "libc", + "libm", + "libz", + "android.hardware.contexthub@1.0", + "libhidlbase", + "libdl", + ], + }, + }, + compile_multilib: "64", + vendor: true, + relative_install_path: "hw", + strip: { + none: true, + }, +} + +cc_prebuilt_binary { + name: "scd", + arch: { + arm64: { + srcs: ["bin/scd"], + shared_libs: [ + "liblog", + "libutils", + "libssl", + "libcrypto", + "libandroid_net", + ], + }, + }, + compile_multilib: "64", + vendor: true, + relative_install_path: "hw", + strip: { + none: true, + }, +} diff --git a/gps/brcm/android.hardware.gnss@2.1-service-brcm.xml b/gps/brcm/android.hardware.gnss@2.1-service-brcm.xml new file mode 100644 index 0000000..97538b8 --- /dev/null +++ b/gps/brcm/android.hardware.gnss@2.1-service-brcm.xml @@ -0,0 +1,7 @@ + + + android.hardware.gnss + 2 + IGnss/default + + diff --git a/gps/brcm/bin/android.hardware.gnss@2.1-impl-google.so b/gps/brcm/bin/android.hardware.gnss@2.1-impl-google.so new file mode 100755 index 0000000..53f8a7d Binary files /dev/null and b/gps/brcm/bin/android.hardware.gnss@2.1-impl-google.so differ diff --git a/gps/brcm/bin/android.hardware.gnss@2.1-service-brcm b/gps/brcm/bin/android.hardware.gnss@2.1-service-brcm new file mode 100755 index 0000000..58df6c6 Binary files /dev/null and b/gps/brcm/bin/android.hardware.gnss@2.1-service-brcm differ diff --git a/gps/brcm/bin/flp.default.so b/gps/brcm/bin/flp.default.so new file mode 100755 index 0000000..5927607 Binary files /dev/null and b/gps/brcm/bin/flp.default.so differ diff --git a/gps/brcm/bin/gps.default.so b/gps/brcm/bin/gps.default.so new file mode 100755 index 0000000..343e47e Binary files /dev/null and b/gps/brcm/bin/gps.default.so differ diff --git a/gps/brcm/bin/gpsd b/gps/brcm/bin/gpsd new file mode 100755 index 0000000..c39f6ac Binary files /dev/null and b/gps/brcm/bin/gpsd differ diff --git a/gps/brcm/bin/lhd b/gps/brcm/bin/lhd new file mode 100755 index 0000000..019a703 Binary files /dev/null and b/gps/brcm/bin/lhd differ diff --git a/gps/brcm/bin/scd b/gps/brcm/bin/scd new file mode 100755 index 0000000..9dd12b5 Binary files /dev/null and b/gps/brcm/bin/scd differ diff --git a/gps/brcm/device.mk b/gps/brcm/device.mk new file mode 100644 index 0000000..f44f37d --- /dev/null +++ b/gps/brcm/device.mk @@ -0,0 +1,16 @@ +BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/gps/brcm/sepolicy +PRODUCT_COPY_FILES += \ + device/google/gs-common/gps/brcm/firmware/SensorHub.patch:$(TARGET_COPY_OUT_VENDOR)/firmware/SensorHub.patch + +PRODUCT_PACKAGES += \ + android.hardware.gnss@2.1-impl-google \ + gps.default \ + flp.default \ + gpsd \ + lhd \ + scd \ + android.hardware.gnss@2.1-service-brcm \ + android.hardware.location.gps.prebuilt.xml + +PRODUCT_PACKAGES_DEBUG += \ + init.gps_log.rc diff --git a/gps/brcm/firmware/SensorHub.patch b/gps/brcm/firmware/SensorHub.patch new file mode 100644 index 0000000..be98bf3 --- /dev/null +++ b/gps/brcm/firmware/SensorHub.patch @@ -0,0 +1,7050 @@ + + + + + + + + + + + + + + diff --git a/gps/brcm/sepolicy/file.te b/gps/brcm/sepolicy/file.te new file mode 100644 index 0000000..5d9dd83 --- /dev/null +++ b/gps/brcm/sepolicy/file.te @@ -0,0 +1,2 @@ +type sysfs_gps, sysfs_type, fs_type; +type sysfs_gps_assert, sysfs_type, fs_type; diff --git a/gps/brcm/sepolicy/file_contexts b/gps/brcm/sepolicy/file_contexts new file mode 100644 index 0000000..8ae128e --- /dev/null +++ b/gps/brcm/sepolicy/file_contexts @@ -0,0 +1,12 @@ +# gnss/gps data/log files +/data/vendor/gps(/.*)? u:object_r:vendor_gps_file:s0 + +# devices +/dev/bbd_control u:object_r:vendor_gnss_device:s0 +/dev/ttyBCM u:object_r:vendor_gnss_device:s0 + +# vendor binaries +/vendor/bin/hw/scd u:object_r:scd_exec:s0 +/vendor/bin/hw/lhd u:object_r:lhd_exec:s0 +/vendor/bin/hw/gpsd u:object_r:gpsd_exec:s0 +/vendor/bin/hw/android\.hardware\.gnss@[0-9]\.[0-9]-service-brcm u:object_r:hal_gnss_default_exec:s0 diff --git a/gps/brcm/sepolicy/genfs_contexts b/gps/brcm/sepolicy/genfs_contexts new file mode 100644 index 0000000..49dfdd0 --- /dev/null +++ b/gps/brcm/sepolicy/genfs_contexts @@ -0,0 +1,4 @@ +# GPS +genfscon sysfs /devices/platform/10940000.spi/spi_master/spi5/spi5.0/nstandby u:object_r:sysfs_gps:s0 +genfscon sysfs /devices/virtual/pps/pps0/assert_elapsed u:object_r:sysfs_gps_assert:s0 + diff --git a/gps/brcm/sepolicy/gpsd.te b/gps/brcm/sepolicy/gpsd.te new file mode 100644 index 0000000..2e5a497 --- /dev/null +++ b/gps/brcm/sepolicy/gpsd.te @@ -0,0 +1,20 @@ +init_daemon_domain(gpsd) + +# Allow gpsd to obtain wakelock +wakelock_use(gpsd) + +# Allow gpsd access data vendor gps files +allow gpsd vendor_gps_file:dir create_dir_perms; +allow gpsd vendor_gps_file:file create_file_perms; +allow gpsd vendor_gps_file:fifo_file create_file_perms; + +# Allow gpsd to access rild +binder_call(gpsd, rild); +allow gpsd hal_exynos_rild_hwservice:hwservice_manager find; + +# Allow gpsd to access sensor service +binder_call(gpsd, system_server); +allow gpsd fwk_sensor_hwservice:hwservice_manager find; + +# Allow gpsd to access pps gpio +allow gpsd sysfs_gps_assert:file r_file_perms; diff --git a/gps/brcm/sepolicy/hal_gnss_default.te b/gps/brcm/sepolicy/hal_gnss_default.te new file mode 100644 index 0000000..e300423 --- /dev/null +++ b/gps/brcm/sepolicy/hal_gnss_default.te @@ -0,0 +1,4 @@ +# Allow hal_gnss_default access data vendor gps files +allow hal_gnss_default vendor_gps_file:dir create_dir_perms; +allow hal_gnss_default vendor_gps_file:file create_file_perms; +allow hal_gnss_default vendor_gps_file:fifo_file create_file_perms; diff --git a/gps/brcm/sepolicy/lhd.te b/gps/brcm/sepolicy/lhd.te new file mode 100644 index 0000000..e980897 --- /dev/null +++ b/gps/brcm/sepolicy/lhd.te @@ -0,0 +1,23 @@ +type lhd, domain; +type lhd_exec, vendor_file_type, exec_type, file_type; +init_daemon_domain(lhd) + +# Allow lhd access PixelLogger unix socket in debug build only +userdebug_or_eng(` + typeattribute lhd mlstrustedsubject; + allow lhd logger_app:unix_stream_socket connectto; +') + +# Allow lhd access data vendor gps files +allow lhd vendor_gps_file:dir create_dir_perms; +allow lhd vendor_gps_file:file create_file_perms; +allow lhd vendor_gps_file:fifo_file create_file_perms; + +# Allow lhd to obtain wakelock +wakelock_use(lhd) + +# Allow lhd access /dev/bbd_control file +allow lhd vendor_gnss_device:chr_file rw_file_perms; + +# Allow lhd access nstandby gpio +allow lhd sysfs_gps:file rw_file_perms; diff --git a/gps/brcm/sepolicy/scd.te b/gps/brcm/sepolicy/scd.te new file mode 100644 index 0000000..28aaee0 --- /dev/null +++ b/gps/brcm/sepolicy/scd.te @@ -0,0 +1,17 @@ +type scd, domain; +type scd_exec, vendor_file_type, exec_type, file_type; +init_daemon_domain(scd) + +# Allow scd access PixelLogger unix socket in debug build only +userdebug_or_eng(` + typeattribute scd mlstrustedsubject; + allow scd logger_app:unix_stream_socket connectto; +') + +# Allow a base set of permissions required for network access. +net_domain(scd); + +# Allow scd access data vendor gps files +allow scd vendor_gps_file:dir create_dir_perms; +allow scd vendor_gps_file:file create_file_perms; +allow scd vendor_gps_file:fifo_file create_file_perms;