1 Commits
bq1 ... vic

Author SHA1 Message Date
a767abb133 gs201: Initialize for Evolution X 10.x
Change-Id: Iffb170290bb1742a5dc0d2809a61543d9230443f
Signed-off-by: AnierinB <anierin@evolution-x.org>
2025-05-12 03:51:27 +00:00
438 changed files with 12623 additions and 3561 deletions

1
.gitupstream Normal file
View File

@@ -0,0 +1 @@
https://android.googlesource.com/device/google/gs201

View File

@@ -34,3 +34,11 @@ license {
"NOTICE",
],
}
prebuilt_etc {
name: "preinstalled-packages-product-gs201-device-debug.xml",
src: "preinstalled-packages-product-gs201-device-debug.xml",
product_specific: true,
sub_dir: "sysconfig",
filename_from_src: true,
}

View File

@@ -1,13 +1,29 @@
#
# SPDX-FileCopyrightText: 2019 The Android Open-Source Project
# SPDX-FileCopyrightText: The LineageOS Project
# SPDX-FileCopyrightText: The Calyx Institute
# SPDX-License-Identifier: Apache-2.0
# Copyright (C) 2019 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 build/make/target/board/BoardConfigMainlineCommon.mk
include build/make/target/board/BoardConfigPixelCommon.mk
# HACK : To fix up after bring up multimedia devices.
TARGET_SOC := gs201
TARGET_SOC_NAME := google
USES_DEVICE_GOOGLE_GS201 := true
$(call soong_config_set,CitadelProvision,target_soc,gs201)
TARGET_ARCH := arm64
TARGET_ARCH_VARIANT := armv8-2a
TARGET_CPU_ABI := arm64-v8a
@@ -30,6 +46,7 @@ TARGET_2ND_CPU_VARIANT_RUNTIME := cortex-a53
BOARD_KERNEL_CMDLINE += dyndbg=\"func alloc_contig_dump_pages +p\"
BOARD_KERNEL_CMDLINE += earlycon=exynos4210,0x10A00000 console=ttySAC0,115200 androidboot.console=ttySAC0 printk.devkmsg=on
BOARD_KERNEL_CMDLINE += cma_sysfs.experimental=Y
BOARD_KERNEL_CMDLINE += cgroup_disable=memory
BOARD_KERNEL_CMDLINE += rcupdate.rcu_expedited=1 rcu_nocbs=all rcutree.enable_rcu_lazy
BOARD_KERNEL_CMDLINE += stack_depot_disable=off page_pinner=on
BOARD_KERNEL_CMDLINE += swiotlb=1024
@@ -38,8 +55,13 @@ BOARD_KERNEL_CMDLINE += disable_dma32=on
BOARD_BOOTCONFIG += androidboot.boot_devices=14700000.ufs
TARGET_NO_BOOTLOADER := true
TARGET_NO_RADIOIMAGE := true
BOARD_PREBUILT_BOOTIMAGE := $(wildcard $(TARGET_KERNEL_DIR)/boot.img)
ifneq (,$(BOARD_PREBUILT_BOOTIMAGE))
TARGET_NO_KERNEL := true
else
TARGET_NO_KERNEL := false
endif
BOARD_USES_GENERIC_KERNEL_IMAGE := true
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT := true
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true
@@ -59,14 +81,11 @@ TARGET_RECOVERY_UI_LIB := \
AB_OTA_UPDATER := true
AB_OTA_PARTITIONS += \
system \
system_dlkm \
system_ext \
product \
vbmeta_system \
vbmeta_vendor \
vendor \
vendor_dlkm
system \
system_dlkm \
system_ext \
product \
vbmeta_system
ifneq ($(PRODUCT_BUILD_BOOT_IMAGE),false)
AB_OTA_PARTITIONS += boot
@@ -88,6 +107,41 @@ ifneq ($(PRODUCT_BUILD_PVMFW_IMAGE),false)
AB_OTA_PARTITIONS += pvmfw
endif
# EMULATOR common modules
BOARD_EMULATOR_COMMON_MODULES := liblight
OVERRIDE_RS_DRIVER := libRSDriverArm.so
BOARD_EGL_CFG := device/google/gs201/conf/egl.cfg
#BOARD_USES_HGL := true
USE_OPENGL_RENDERER := true
NUM_FRAMEBUFFER_SURFACE_BUFFERS := 3
BOARD_USES_EXYNOS5_COMMON_GRALLOC := true
BOARD_USES_ALIGN_RESTRICTION := false
BOARD_USES_GRALLOC_ION_SYNC := true
# This should be the same value as USE_SWIFTSHADER in device.mk
BOARD_USES_SWIFTSHADER := false
# Gralloc4
ifeq ($(BOARD_USES_SWIFTSHADER),true)
$(call soong_config_set,arm_gralloc,gralloc_arm_no_external_afbc,true)
$(call soong_config_set,arm_gralloc,mali_gpu_support_afbc_basic,false)
$(call soong_config_set,arm_gralloc,mali_gpu_support_afbc_wideblk,false)
$(call soong_config_set,arm_gralloc,gralloc_init_afbc,false)
$(call soong_config_set,arm_gralloc,dpu_support_1010102_afbc,false)
else
$(call soong_config_set,arm_gralloc,gralloc_arm_no_external_afbc,false)
$(call soong_config_set,arm_gralloc,mali_gpu_support_afbc_basic,true)
$(call soong_config_set,arm_gralloc,mali_gpu_support_afbc_wideblk,true)
$(call soong_config_set,arm_gralloc,gralloc_init_afbc,true)
$(call soong_config_set,arm_gralloc,dpu_support_1010102_afbc,true)
endif # ifeq ($(BOARD_USES_SWIFTSHADER),true)
$(call soong_config_set,arm_gralloc,gralloc_ion_sync_on_lock,$(BOARD_USES_GRALLOC_ION_SYNC))
# Graphics
#BOARD_USES_EXYNOS_DATASPACE_FEATURE := true
# Enable chain partition for system.
BOARD_AVB_VBMETA_SYSTEM := system system_dlkm system_ext product
BOARD_AVB_VBMETA_SYSTEM_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
@@ -105,27 +159,18 @@ BOARD_AVB_BOOT_ALGORITHM := SHA256_RSA2048
BOARD_AVB_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION := 2
# Enable chain partition for vendor.
BOARD_AVB_VBMETA_VENDOR := vendor
BOARD_AVB_VBMETA_VENDOR_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_VBMETA_VENDOR_ALGORITHM := SHA256_RSA2048
BOARD_AVB_VBMETA_VENDOR_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_VBMETA_VENDOR_ROLLBACK_INDEX_LOCATION := 3
# Enable chained vbmeta for init_boot images
BOARD_AVB_INIT_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_INIT_BOOT_ALGORITHM := SHA256_RSA2048
BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX_LOCATION := 4
# Verified Boot
BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --flags 3
TARGET_USERIMAGES_USE_EXT4 := true
TARGET_USERIMAGES_USE_F2FS := true
BOARD_USERDATAIMAGE_PARTITION_SIZE := 11796480000
PRODUCT_FS_COMPRESSION := 1
BOARD_FLASH_BLOCK_SIZE := 4096
BOARD_MOUNT_SDCARD_RW := true
# product.img
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE := ext4
@@ -135,16 +180,33 @@ TARGET_COPY_OUT_PRODUCT := product
BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_SYSTEM_EXT := system_ext
# vendor.img
BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := ext4
# vendor_dlkm.img
BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_VENDOR_DLKM := vendor_dlkm
# persist.img
BOARD_PERSISTIMAGE_FILE_SYSTEM_TYPE := ext4
########################
# Video Codec
########################
# 1. Exynos C2
BOARD_USE_CODEC2_HIDL_1_2 := true
BOARD_USE_CSC_FILTER := false
BOARD_USE_DEC_SW_CSC := true
BOARD_USE_ENC_SW_CSC := true
BOARD_SUPPORT_MFC_ENC_RGB := true
BOARD_USE_BLOB_ALLOCATOR := false
BOARD_SUPPORT_MFC_ENC_BT2020 := true
BOARD_SUPPORT_FLEXIBLE_P010 := true
$(call soong_config_set,video_codec,target_soc_name,$(TARGET_SOC_NAME))
$(call soong_config_set_bool,video_codec,board_use_codec2_hidl_1_2,$(BOARD_USE_CODEC2_HIDL_1_2))
$(call soong_config_set_bool,video_codec,board_use_csc_filter,$(BOARD_USE_CSC_FILTER))
$(call soong_config_set_bool,video_codec,board_use_dec_sw_csc,$(BOARD_USE_DEC_SW_CSC))
$(call soong_config_set_bool,video_codec,board_use_enc_sw_csc,$(BOARD_USE_ENC_SW_CSC))
$(call soong_config_set_bool,video_codec,board_support_mfc_enc_rgb,$(BOARD_SUPPORT_MFC_ENC_RGB))
$(call soong_config_set_bool,video_codec,board_use_blob_allocator,$(BOARD_USE_BLOB_ALLOCATOR))
$(call soong_config_set_bool,video_codec,board_support_mfc_enc_bt2020,$(BOARD_SUPPORT_MFC_ENC_BT2020))
$(call soong_config_set_bool,video_codec,board_support_flexible_p010,$(BOARD_SUPPORT_FLEXIBLE_P010))
$(call soong_config_set_bool,video_codec,board_use_codec2_aidl,$(if $(BOARD_USE_CODEC2_AIDL),true,false))
########################
BOARD_SUPER_PARTITION_SIZE := 8531214336
BOARD_SUPER_PARTITION_GROUPS := google_dynamic_partitions
# Set size to BOARD_SUPER_PARTITION_SIZE - overhead (4MiB) (b/182237294)
@@ -160,31 +222,151 @@ BOARD_GOOGLE_DYNAMIC_PARTITIONS_PARTITION_LIST := \
# Set error limit to BOARD_SUPER_PARTITON_SIZE - 500MB
BOARD_SUPER_PARTITION_ERROR_LIMIT := 8006926336
# Reserve space for gapps install
-include vendor/lineage/config/BoardConfigReservedSize.mk
# Build a separate system_dlkm partition
BOARD_USES_SYSTEM_DLKMIMAGE := true
BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm
# Testing related defines
BOARD_PERFSETUP_SCRIPT := platform_testing/scripts/perf-setup/p10c10-setup.sh
#
# AUDIO & VOICE
#
BOARD_USES_GENERIC_AUDIO := true
$(call soong_config_set,aoc_audio_func,ext_hidl,true)
ifneq (,$(filter eng, $(TARGET_BUILD_VARIANT)))
$(call soong_config_set,aoc_audio_func,dump_usecase_data,true)
$(call soong_config_set,aoc_audio_func,hal_socket_control,true)
$(call soong_config_set,aoc_audio_func,record_tuning_keys,true)
endif
ifneq (,$(filter aosp_%,$(TARGET_PRODUCT)))
$(call soong_config_set,aoc_audio_func,aosp_build,true)
endif
# Primary AudioHAL Configuration
#BOARD_USE_COMMON_AUDIOHAL := true
#BOARD_USE_CALLIOPE_AUDIOHAL := false
#BOARD_USE_AUDIOHAL := true
# Compress Offload Configuration
#BOARD_USE_OFFLOAD_AUDIO := true
#BOARD_USE_OFFLOAD_EFFECT := false
# SoundTriggerHAL Configuration
#BOARD_USE_SOUNDTRIGGER_HAL := false
# Vibrator HAL actuator model and adaptive haptics configuration
$(call soong_config_set,haptics,actuator_model,$(ACTUATOR_MODEL))
$(call soong_config_set,haptics,adaptive_haptics_feature,$(ADAPTIVE_HAPTICS_FEATURE))
# HWComposer
BOARD_HWC_VERSION := hwc3
TARGET_RUNNING_WITHOUT_SYNC_FRAMEWORK := false
BOARD_HDMI_INCAPABLE := true
TARGET_USES_HWC2 := true
HWC_SUPPORT_RENDER_INTENT := true
HWC_SUPPORT_COLOR_TRANSFORM := true
#BOARD_USES_DISPLAYPORT := true
# if AFBC is enabled, must set ro.vendor.ddk.set.afbc=1
BOARD_USES_EXYNOS_AFBC_FEATURE := true
#BOARD_USES_HDRUI_GLES_CONVERSION := true
BOARD_LIBACRYL_DEFAULT_COMPOSITOR := fimg2d_gs201
BOARD_LIBACRYL_G2D_HDR_PLUGIN := libacryl_hdr_plugin
$(call soong_config_set,acryl,libacryl_g2d_hdr_plugin,//hardware/google/graphics/gs201/libacryl_plugins:libacryl_hdr_plugin)
$(call soong_config_set,acryl,libacryl_c_include,hardware/google/graphics/$(TARGET_BOARD_PLATFORM)/libcap)
# HWCServices
BOARD_USES_HWC_SERVICES := true
# WiFiDisplay
# BOARD_USES_VIRTUAL_DISPLAY := true
# BOARD_USES_VDS_EXYNOS_HWC := true
# BOARD_USES_WIFI_DISPLAY:= true
# BOARD_USES_EGL_SURFACE_FOR_COMPOSITION_MIXED := true
# BOARD_USES_VDS_YUV420SPM := true
# BOARD_USES_VDS_OTHERFORMAT := true
# BOARD_USES_VDS_DEBUG_FLAG := true
# BOARD_USES_DISABLE_COMPOSITIONTYPE_GLES := true
# BOARD_USES_SECURE_ENCODER_ONLY := true
# BOARD_USES_TSMUX := true
# SCALER
BOARD_USES_DEFAULT_CSC_HW_SCALER := true
BOARD_DEFAULT_CSC_HW_SCALER := 4
BOARD_USES_SCALER_M2M1SHOT := true
# Device Tree
BOARD_USES_DT := true
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
BOARD_PREBUILT_DTBIMAGE_DIR := $(TARGET_KERNEL_DIR)
BOARD_PREBUILT_DTBOIMAGE := $(BOARD_PREBUILT_DTBIMAGE_DIR)/dtbo.img
# PLATFORM LOG
TARGET_USES_LOGD := true
# LIBHWJPEG
#TARGET_USES_UNIVERSAL_LIBHWJPEG := true
#LIBHWJPEG_HWSCALER_ID := 0
#Keymaster
#BOARD_USES_KEYMASTER_VER1 := true
#FMP
#BOARD_USES_FMP_DM_CRYPT := true
#BOARD_USES_FMP_FSCRYPTO := true
BOARD_USES_METADATA_PARTITION := true
# SKIA
#BOARD_USES_SKIA_MULTITHREADING := true
#BOARD_USES_FIMGAPI_V5X := true
# SECCOMP Policy
BOARD_SECCOMP_POLICY = device/google/gs201/seccomp_policy
#CURL
BOARD_USES_CURL := true
# Sensor HAL
BOARD_USES_EXYNOS_SENSORS_DUMMY := true
# VISION
# Exynos vision framework (EVF)
#TARGET_USES_EVF := true
# HW acceleration
#TARGET_USES_VPU_KERNEL := true
#TARGET_USES_SCORE_KERNEL := true
#TARGET_USES_CL_KERNEL := false
# exynos RIL
TARGET_EXYNOS_RIL_SOURCE := true
ENABLE_VENDOR_RIL_SERVICE := true
# GNSS
# BOARD_USES_EXYNOS_GNSS_DUMMY := true
# Bluetooth defines
# TODO(b/123695868): Remove the need for this
BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := \
build/make/target/board/mainline_arm64/bluetooth
#VNDK
BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED := true
BOARD_VNDK_VERSION := current
# H/W align restriction of MM IPs
BOARD_EXYNOS_S10B_FORMAT_ALIGN := 64
# Boot.img
BOARD_RAMDISK_USE_LZ4 := true
#BOARD_KERNEL_BASE := 0x80000000
#BOARD_KERNEL_PAGESIZE := 2048
#BOARD_KERNEL_OFFSET := 0x80000
#BOARD_RAMDISK_OFFSET := 0x4000000
BOARD_BOOT_HEADER_VERSION := 4
BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOT_HEADER_VERSION)
@@ -243,26 +425,10 @@ endif
BOARD_SYSTEM_KERNEL_MODULES_LOAD := $(strip $(shell cat $(KERNEL_MODULE_DIR)/system_dlkm.modules.load 2>/dev/null))
BOARD_SYSTEM_KERNEL_MODULES := $(addprefix $(KERNEL_MODULE_DIR)/, $(notdir $(BOARD_SYSTEM_KERNEL_MODULES_LOAD)))
# SEPolicy
BOARD_VENDOR_SEPOLICY_DIRS += \
hardware/google/pixel-sepolicy/googlebattery \
hardware/google/pixel-sepolicy/input \
hardware/google/pixel-sepolicy/powerstats \
device/google/gs201/sepolicy/certificates \
device/google/gs201/sepolicy/recovery \
device/google/gs201/sepolicy/vendor
# Using BUILD_COPY_HEADERS
BUILD_BROKEN_USES_BUILD_COPY_HEADERS := true
PRODUCT_PRIVATE_SEPOLICY_DIRS += \
device/google/gs201/sepolicy/product/private
PRODUCT_PUBLIC_SEPOLICY_DIRS += \
device/google/gs201/sepolicy/product/public
SYSTEM_EXT_PRIVATE_SEPOLICY_DIRS += \
device/google/gs201/sepolicy/system_ext/private
SYSTEM_EXT_PUBLIC_SEPOLICY_DIRS += \
device/google/gs201/sepolicy/system_ext/public
include device/google/gs201/sepolicy/gs201-sepolicy.mk
# Battery options
BOARD_KERNEL_CMDLINE += at24.write_timeout=100
@@ -273,4 +439,8 @@ BOARD_KERNEL_CMDLINE += log_buf_len=1024K
# Protected VM firmware
BOARD_PVMFWIMAGE_PARTITION_SIZE := 0x00100000
# pick up library for cleaning digital car keys on factory reset
-include vendor/google_devices/gs-common/proprietary/BoardConfigVendor.mk
include device/google/gs201/BoardConfigLineage.mk
include device/google/gs201/BoardConfigEvolution.mk

View File

@@ -1,5 +1,5 @@
#
# Copyright (C) 2026 The Evolution X Project
# Copyright (C) 2024 The Evolution X Project
#
# SPDX-License-Identifier: Apache-2.0
#
@@ -9,4 +9,3 @@ BUILD_BROKEN_DUP_RULES := true
DISABLE_ARTIFACT_PATH_REQUIREMENTS := true
SPOOF_FIRST_API_LEVEL_32 := true

37
BoardConfigLineage.mk Normal file
View File

@@ -0,0 +1,37 @@
#
# SPDX-FileCopyrightText: 2021-2024 The LineageOS Project
# SPDX-FileCopyrightText: 2021-2024 The Calyx Institute
# SPDX-License-Identifier: Apache-2.0
#
# Manifests
DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE += vendor/lineage/config/device_framework_matrix.xml
DEVICE_MANIFEST_FILE += device/google/gs201/android.hardware.security.rkp-service.citadel.xml
ifneq ($(BOARD_WITHOUT_RADIO),true)
DEVICE_MANIFEST_FILE += device/google/gs201/manifest_radio_ds.xml
endif
# Partitions
AB_OTA_PARTITIONS += \
vendor \
vendor_dlkm
BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := ext4
BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_VENDOR_DLKM := vendor_dlkm
# Enable chain partition for vendor.
BOARD_AVB_VBMETA_VENDOR := vendor
BOARD_AVB_VBMETA_VENDOR_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_VBMETA_VENDOR_ALGORITHM := SHA256_RSA2048
BOARD_AVB_VBMETA_VENDOR_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_VBMETA_VENDOR_ROLLBACK_INDEX_LOCATION := 3
AB_OTA_PARTITIONS += \
vbmeta_vendor
# Reserve space for gapps install
-include vendor/lineage/config/BoardConfigReservedSize.mk
# Verified Boot
BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --flags 3

85
CleanSpec.mk Normal file
View File

@@ -0,0 +1,85 @@
# Copyright (C) 2012 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.
#
# If you don't need to do a full clean build but would like to touch
# a file or delete some intermediate files, add a clean step to the end
# of the list. These steps will only be run once, if they haven't been
# run before.
#
# E.g.:
# $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
# $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
#
# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
# files that are missing or have been moved.
#
# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
# Use $(OUT_DIR) to refer to the "out" directory.
#
# If you need to re-do something that's already mentioned, just copy
# the command and add it to the bottom of the list. E.g., if a change
# that you made last week required touching a file and a change you
# made today requires touching the same file, just copy the old
# touch step and add it to the end of the list.
#
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
# For example:
#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates)
#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)
#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f)
#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
$(call add-clean-step, find $(PRODUCT_OUT) -name "*.apk" | xargs rm)
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libsurfaceflinger_intermediates)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libui_intermediates)
$(call add-clean-step, rm -f $(PRODUCT_OUT)/root/default.prop)
$(call add-clean-step, rm -f $(TARGET_OUT)/build.prop)
$(call add-clean-step, rm -f $(PRODUCT_OUT)/system/etc/mixer_paths_lb.xml)
$(call add-clean-step, rm -f $(PRODUCT_OUT)/system/etc/permissions/android.hardware.camera.xml)
$(call add-clean-step, rm -f $(PRODUCT_OUT)/root/*)
# Power HAL 1.0
$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/init/android.hardware.power@1.0-service.rc)
$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.power@1.0-service)
# Power HAL HIDL
$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/etc/init/android.hardware.power@1.3-service.pixel-libperfmgr.rc)
# Health storage HAL
$(call add-clean-step, find $(PRODUCT_OUT) -type f -name "*android.hardware.health.storage@1.0*" -print0 | xargs -0 rm -f)
# USB HAL to AIDL
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.usb-service)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.usb.gadget-service)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.usb-service.rc)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.usb.gadget-service.rc)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/vintf/manifest/android.hardware.usb-servic.xml)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/vintf/manifest/android.hardware.usb.gadget-servic.xml)
# Power Stats HAL 1.0 to AIDL
$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.power.stats@1.0-service.gs201)
$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/etc/init/android.hardware.power.stats@1.0-service.gs201.rc)
$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/etc/vintf/manifest/android.hardware.power.stats@1.0-service.gs201.xml)
# Health HAL to AIDL
$(call add-clean-step, find $(PRODUCT_OUT)/system -type f -name "*charger*" -print0 | xargs -0 rm -f)
$(call add-clean-step, find $(PRODUCT_OUT)/vendor -type f -name "*health@*" -print0 | xargs -0 rm -f)
$(call add-clean-step, find $(PRODUCT_OUT)/recovery/root -type f -name "*charger*" -print0 | xargs -0 rm -f)
$(call add-clean-step, find $(PRODUCT_OUT)/recovery/root -type f -name "*health@*" -print0 | xargs -0 rm -f)

2
OWNERS Normal file
View File

@@ -0,0 +1,2 @@
# per-file for Pixel device makefiles, see go/pixel-device-mk-owner-checklist for details.
per-file *.mk,{**/,}Android.bp=file:device/google/gs-common:main:/MK_OWNERS

2
PREUPLOAD.cfg Normal file
View File

@@ -0,0 +1,2 @@
[Builtin Hooks]
jsonlint = true

View File

@@ -1,7 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
SPDX-FileCopyrightText: 2022 The LineageOS Project
SPDX-License-Identifier: Apache-2.0
<!-- Copyright (C) 2022 The LineageOS 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.
-->
<config>
<!-- Specify the explicit set of other applications that AI services are allowed to

View File

@@ -0,0 +1,7 @@
<manifest version="1.0" type="device">
<hal format="aidl">
<name>android.hardware.security.keymint</name>
<version>3</version>
<fqname>IRemotelyProvisionedComponent/strongbox</fqname>
</hal>
</manifest>

View File

@@ -1,6 +1,17 @@
#
# SPDX-FileCopyrightText: 2020 The Android Open-Source Project
# SPDX-License-Identifier: Apache-2.0
# Copyright 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.
#
#
@@ -36,3 +47,9 @@ $(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_vendor.mk)
ifneq ($(BOARD_WITHOUT_RADIO),true)
$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_vendor.mk)
endif
#$(call inherit-product, device/google/gs201/device.mk)
#$(call inherit-product-if-exists, vendor/google_devices/gs201/proprietary/device-vendor.mk)
# TODO: fix
# PRODUCT_RESTRICT_VENDOR_FILES := all

View File

@@ -1,11 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
SPDX-FileCopyrightText: 2021 The Android Open Source Project
SPDX-FileCopyrightText: The LineageOS Project
SPDX-License-Identifier: Apache-2.0
Autogenerated skeleton compatibility matrix.
Use with caution. Modify it to suit your needs.
All HALs are set to optional.
Many entries other than HALs are zero-filled and
require human attention.
-->
<compatibility-matrix version="9.0" type="device">
<hal format="hidl">
<compatibility-matrix version="1.0" type="device">
<hal format="hidl" optional="true">
<name>android.frameworks.displayservice</name>
<version>1.0</version>
<interface>
@@ -13,7 +14,7 @@
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<hal format="hidl" optional="true">
<name>android.frameworks.schedulerservice</name>
<version>1.0</version>
<interface>
@@ -21,7 +22,7 @@
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<hal format="hidl" optional="true">
<name>android.frameworks.sensorservice</name>
<version>1.0</version>
<interface>
@@ -29,7 +30,7 @@
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<hal format="hidl" optional="true">
<name>android.hardware.graphics.composer</name>
<version>2.1</version>
<interface>
@@ -37,7 +38,7 @@
<instance>vr</instance>
</interface>
</hal>
<hal format="hidl">
<hal format="hidl" optional="true">
<name>android.hidl.allocator</name>
<version>1.0</version>
<interface>
@@ -45,7 +46,7 @@
<instance>ashmem</instance>
</interface>
</hal>
<hal format="hidl">
<hal format="hidl" optional="true">
<name>android.hidl.manager</name>
<version>1.0</version>
<interface>
@@ -53,7 +54,7 @@
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<hal format="hidl" optional="true">
<name>android.hidl.memory</name>
<version>1.0</version>
<interface>
@@ -61,7 +62,7 @@
<instance>ashmem</instance>
</interface>
</hal>
<hal format="hidl">
<hal format="hidl" optional="true">
<name>android.hidl.token</name>
<version>1.0</version>
<interface>
@@ -69,7 +70,7 @@
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<hal format="hidl" optional="true">
<name>android.system.wifi.keystore</name>
<version>1.0</version>
<interface>
@@ -77,11 +78,7 @@
<instance>default</instance>
</interface>
</hal>
<hal format="aidl">
<name>com.google.pixel.camera.services.binder</name>
<interface>
<name>IServiceBinder</name>
<instance>default</instance>
</interface>
</hal>
<vndk>
<version>0.0.0</version>
</vndk>
</compatibility-matrix>

View File

@@ -1,10 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
SPDX-FileCopyrightText: 2020 The Android Open Source Project
SPDX-License-Identifier: Apache-2.0
<!-- Copyright 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.
-->
<config>
<component-override package="com.android.bluetooth" >
<component class=".sap.SapService" enabled="true" />
</component-override>
<component-override package="com.google.android.apps.tips" >
<component class=".TipsMain" enabled="true" />
</component-override>
</config>

2
conf/OWNERS Normal file
View File

@@ -0,0 +1,2 @@
# per-file for Pixel fstab
per-file fstab.*=file:device/google/gs-common:main:/FSTAB_OWNERS

1
conf/egl.cfg Normal file
View File

@@ -0,0 +1 @@
0 1 mali

7
conf/fstab.modem Normal file
View File

@@ -0,0 +1,7 @@
# Android fstab file.
# <src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
# Create the specific fstab file for modem partition as flexibility
/dev/block/platform/14700000.ufs/by-name/efs /mnt/vendor/efs f2fs noatime,sync wait,check,formattable
/dev/block/platform/14700000.ufs/by-name/efs_backup /mnt/vendor/efs_backup f2fs noatime,sync wait,check,formattable
/dev/block/platform/14700000.ufs/by-name/modem_userdata /mnt/vendor/modem_userdata f2fs noatime,sync wait,check,formattable
/dev/block/platform/14700000.ufs/by-name/modem /mnt/vendor/modem_img ext4 noatime,ro,context=u:object_r:modem_img_file:s0 wait,slotselect

5
conf/fstab.persist Normal file
View File

@@ -0,0 +1,5 @@
# Android fstab file.
# <src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
# Keep persist in an fstab file, since we need to run fsck on it after abnormal shutdown.
/dev/block/platform/14700000.ufs/by-name/persist /mnt/vendor/persist ext4 noatime,nosuid,nodev,data=journal,commit=1 wait,check,formattable,metadata_csum
/dev/block/platform/14700000.ufs/by-name/persist /mnt/vendor/persist f2fs noatime,nosuid,nodev,sync wait,check,formattable

View File

@@ -0,0 +1,15 @@
#!/vendor/bin/sh
# This script sets up `ro.vendor.sjtag_ap_is_unlocked` for the non-fused
# device. For a fused device, this property should be set by
# betterbug->ss-restart-detector when PD is acquired.
SJTAG_STATUS=0x$(cat /sys/devices/platform/sjtag_ap/interface/status)
SOFT_LOCK_BIT=4
AUTH_PASS_BIT=8
# Unlocked or locked but auth passed.
if test "$((SJTAG_STATUS & (1 << SOFT_LOCK_BIT)))" = 0 -o \
"$((SJTAG_STATUS & (1 << AUTH_PASS_BIT)))" != 0 ; then
setprop ro.vendor.sjtag_ap_is_unlocked true
fi

60
conf/init.debug.rc Normal file
View File

@@ -0,0 +1,60 @@
# SJTAG
on init
chown system system /sys/devices/platform/sjtag_ap/interface/access_lvl
chown system system /sys/devices/platform/sjtag_ap/interface/auth
chown system system /sys/devices/platform/sjtag_ap/interface/begin
chown system system /sys/devices/platform/sjtag_ap/interface/dbg_domain
chown system system /sys/devices/platform/sjtag_ap/interface/dbg_itvl
chown system system /sys/devices/platform/sjtag_ap/interface/end
chown system system /sys/devices/platform/sjtag_ap/interface/pubkey
chown system system /sys/devices/platform/sjtag_gsa/interface/access_lvl
chown system system /sys/devices/platform/sjtag_gsa/interface/auth
chown system system /sys/devices/platform/sjtag_gsa/interface/begin
chown system system /sys/devices/platform/sjtag_gsa/interface/dbg_domain
chown system system /sys/devices/platform/sjtag_gsa/interface/dbg_itvl
chown system system /sys/devices/platform/sjtag_gsa/interface/end
chown system system /sys/devices/platform/sjtag_gsa/interface/pubkey
# HSUM separated main user from the SYSTEM user, granting write permissions
# for write only SJTAG sysfs files
chmod 220 /sys/devices/platform/sjtag_ap/interface/auth
chmod 220 /sys/devices/platform/sjtag_ap/interface/begin
chmod 220 /sys/devices/platform/sjtag_ap/interface/end
chmod 220 /sys/devices/platform/sjtag_gsa/interface/auth
chmod 220 /sys/devices/platform/sjtag_gsa/interface/begin
chmod 220 /sys/devices/platform/sjtag_gsa/interface/end
on property:vendor.debug.ramdump.force_crash=true
write /sys/kernel/pixel_debug/trigger "null"
on property:power.battery_input.suspended=true
write /sys/kernel/debug/google_charger/input_suspend 1
on property:power.battery_input.suspended=false
write /sys/kernel/debug/google_charger/input_suspend 0
# Bluetooth
on post-fs-data
chown bluetooth system /dev/logbuffer_btlpm
chown bluetooth system /dev/logbuffer_btpower
chown bluetooth system /dev/logbuffer_tty18
# pKVM performance is different on A0 and B0 chips.
# Add extra tag to metrics collected on A0 to separate the results.
on property:ro.revision=PROTO1.0
setprop debug.hypervisor.metrics_tag "hwrev_a0"
on property:ro.revision=PROTO1.1
setprop debug.hypervisor.metrics_tag "hwrev_a0"
on property:ro.revision=EVT1.0
setprop debug.hypervisor.metrics_tag "hwrev_a0"
service vendor.check_ap_pd_auth_sh /vendor/bin/init.check_ap_pd_auth.sh
class main
user root
group root system
oneshot
# Enable etm/etm2dram when ramdump is enabled, and ap-sjtag is unlocked.
on property:ro.boot.ramdump=enabled && property:ro.vendor.sjtag_ap_is_unlocked=true
write /sys/devices/platform/exynos-etm/etm_on 1
write /sys/devices/platform/etm2dram/arm 1

View File

@@ -0,0 +1,20 @@
on post-fs
## ensure correct calibration file permissions
chown root system /mnt/vendor/persist/sensorcal.json
chmod 0640 /mnt/vendor/persist/sensorcal.json
start vendor.flash-nanohub-fw
on post-fs-data
mkdir /data/vendor/sensor
chown root system /data/vendor/sensor
chmod 0770 /data/vendor/sensor
service vendor.flash-nanohub-fw /vendor/bin/nanoapp_cmd download
oneshot
disabled
user root
group system
on post-fs-data
mkdir /data/system/nanohub_lock/
restorecon /data/system/nanohub_lock

19
conf/init.factory.rc Normal file
View File

@@ -0,0 +1,19 @@
# Factory specific init.rc
on early-init
mount debugfs /sys/kernel/debug /sys/kernel/debug
on init
export PATH /product/bin:/apex/com.android.runtime/bin:/apex/com.android.art/bin:/system_ext/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin:/vendor/bin/factory
on boot
# FTM log folder
mkdir /data/ftmlog 0775 system system
# Audio test folder
mkdir /data/AudioTest 0775 system system
on property:sys.boot_completed=1
# Bump nnapi min clamp & add adbd to it for factory (b/222226268)
write /proc/vendor_sched/nnapi_uclamp_min 512
exec - root root -- /vendor/bin/factory/factory_post_boot

1095
conf/init.gs201.rc Normal file

File diff suppressed because it is too large Load Diff

423
conf/init.gs201.usb.rc Normal file
View File

@@ -0,0 +1,423 @@
on early-boot
mkdir /config/usb_gadget/g1
mkdir /config/usb_gadget/g1/strings/0x409
mkdir /config/usb_gadget/g1/configs/b.1
write /config/usb_gadget/g1/idVendor 0x18d1
write /config/usb_gadget/g1/strings/0x409/serialnumber ${ro.serialno}
write /config/usb_gadget/g1/strings/0x409/manufacturer ${ro.product.manufacturer}
write /config/usb_gadget/g1/strings/0x409/product ${ro.product.model}
write /config/usb_gadget/g1/configs/b.1/MaxPower 0x384
write /config/usb_gadget/g1/os_desc/b_vendor_code 0x1
write /config/usb_gadget/g1/os_desc/qw_sign "MSFT100"
# ffs function
mkdir /config/usb_gadget/g1/functions/ffs.adb 0770 shell shell
mkdir /config/usb_gadget/g1/functions/ffs.mtp
mkdir /config/usb_gadget/g1/functions/ffs.ptp
mkdir /dev/usb-ffs 0775 shell shell
mkdir /dev/usb-ffs/adb 0770 shell shell
mkdir /dev/usb-ffs/mtp 0770 mtp mtp
mkdir /dev/usb-ffs/ptp 0770 mtp mtp
mount functionfs adb /dev/usb-ffs/adb rmode=0770,fmode=0660,uid=2000,gid=2000,no_disconnect=1
mount functionfs mtp /dev/usb-ffs/mtp rmode=0770,fmode=0660,uid=1024,gid=1024,no_disconnect=1
mount functionfs ptp /dev/usb-ffs/ptp rmode=0770,fmode=0660,uid=1024,gid=1024,no_disconnect=1
setprop sys.usb.mtp.device_type 3
setprop sys.usb.mtp.batchcancel true
symlink /config/usb_gadget/g1/configs/b.1 /config/usb_gadget/g1/os_desc/b.1
# mtp function
mkdir /config/usb_gadget/g1/functions/mtp.gs0
# ptp function
mkdir /config/usb_gadget/g1/functions/ptp.gs1
# accessory function
mkdir /config/usb_gadget/g1/functions/accessory.gs2
# audio_source function
mkdir /config/usb_gadget/g1/functions/audio_source.gs3
# rndis function
mkdir /config/usb_gadget/g1/functions/rndis.gs4
# Modify class/subclass/protocol for rndis.gs4
# Remote NDIS: Class: Wireless Controller (0xe0), Subclass: 0x1, Protocol: 0x3
write /config/usb_gadget/g1/functions/rndis.gs4/class e0
write /config/usb_gadget/g1/functions/rndis.gs4/subclass 01
write /config/usb_gadget/g1/functions/rndis.gs4/protocol 03
write /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.ncm/compatible_id RNDIS
write /config/usb_gadget/g1/functions/rndis.gs4/ifname rndis%d
setprop vendor.usb.rndis.config rndis.gs4
# midi function
mkdir /config/usb_gadget/g1/functions/midi.gs5
# acm function
mkdir /config/usb_gadget/g1/functions/acm.gs6
# dm function
mkdir /config/usb_gadget/g1/functions/dm.gs7
# uts function
mkdir /config/usb_gadget/g1/functions/uts.gs8
# ncm function
mkdir /config/usb_gadget/g1/functions/ncm.gs9
write /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm/compatible_id WINNCM
write /config/usb_gadget/g1/functions/ncm.gs9/ifname ncm%d
# etr_miu function
mkdir /config/usb_gadget/g1/functions/etr_miu.gs11
# acm function for uwb
mkdir /config/usb_gadget/g1/functions/acm.uwb0
# uvc function
mkdir /config/usb_gadget/g1/functions/uvc.0
write /config/usb_gadget/g1/functions/uvc.0/function_name "Android Webcam"
write /config/usb_gadget/g1/functions/uvc.0/streaming_maxpacket 3072
# write /config/usb_gadget/g1/functions/uvc.0/streaming_maxburst 5
# write /config/usb_gadget/g1/functions/uvc.0/streaming_interval 2
# setup control params
mkdir /config/usb_gadget/g1/functions/uvc.0/control/header/h
symlink /config/usb_gadget/g1/functions/uvc.0/control/header/h /config/usb_gadget/g1/functions/uvc.0/control/class/fs/h
symlink /config/usb_gadget/g1/functions/uvc.0/control/header/h /config/usb_gadget/g1/functions/uvc.0/control/class/ss/h
mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m
# advertise 360p resolution for webcam encoded as mjpeg
mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/wHeight 360
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/wWidth 640
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwMaxVideoFrameBufferSize 460800
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwDefaultFrameInterval 333333
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwFrameInterval "166666
333333
416666
666666"
# advertise 480p resolution for webcam encoded as mjpeg
mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/wHeight 480
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/wWidth 640
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwMaxVideoFrameBufferSize 614400
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwDefaultFrameInterval 333333
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwFrameInterval "166666
333333
416666
666666"
# advertise 720p resolution for webcam encoded as mjpeg
mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/wHeight 720
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/wWidth 1280
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMaxVideoFrameBufferSize 1843200
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwDefaultFrameInterval 333333
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwFrameInterval "166666
333333
416666
666666"
# advertise 1080p resolution for webcam encoded as mjpeg
mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/wHeight 1080
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/wWidth 1920
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMaxVideoFrameBufferSize 4147200
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwDefaultFrameInterval 333333
write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwFrameInterval "166666
333333
416666
666666"
# TODO: Add uncompressed streams
# setup streaming params
mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/header/h
symlink /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m /config/usb_gadget/g1/functions/uvc.0/streaming/header/h/m
symlink /config/usb_gadget/g1/functions/uvc.0/streaming/header/h /config/usb_gadget/g1/functions/uvc.0/streaming/class/fs/h
symlink /config/usb_gadget/g1/functions/uvc.0/streaming/header/h /config/usb_gadget/g1/functions/uvc.0/streaming/class/hs/h
symlink /config/usb_gadget/g1/functions/uvc.0/streaming/header/h /config/usb_gadget/g1/functions/uvc.0/streaming/class/ss/h
# remove write permissions for 'others'
chmod 664 /config/usb_gadget/g1/functions/uvc.0/control/header/h/bcdUVC
chmod 664 /config/usb_gadget/g1/functions/uvc.0/control/header/h/dwClockFrequency
chmod 664 /config/usb_gadget/g1/functions/uvc.0/control/terminal/output/default/bSourceID
chmod 664 /config/usb_gadget/g1/functions/uvc.0/function_name
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming_interval
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming_maxburst
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming_maxpacket
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/bmCapabilities
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwDefaultFrameInterval
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwFrameInterval
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMaxBitRate
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMaxVideoFrameBufferSize
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMinBitRate
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/wHeight
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/wWidth
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/bmCapabilities
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwDefaultFrameInterval
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwFrameInterval
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwMaxBitRate
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwMaxVideoFrameBufferSize
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwMinBitRate
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/wHeight
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/wWidth
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/bmCapabilities
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwDefaultFrameInterval
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwFrameInterval
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwMaxBitRate
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwMaxVideoFrameBufferSize
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwMinBitRate
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/wHeight
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/wWidth
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/bmCapabilities
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwDefaultFrameInterval
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwFrameInterval
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMaxBitRate
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMaxVideoFrameBufferSize
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMinBitRate
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/wHeight
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/wWidth
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bDefaultFrameIndex
chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bmaControls
# chown file/folder permission
chown system system /config/usb_gadget/
chown system system /config/usb_gadget/g1
chown system system /config/usb_gadget/g1/UDC
chown system system /config/usb_gadget/g1/bDeviceClass
chown system system /config/usb_gadget/g1/bDeviceProtocol
chown system system /config/usb_gadget/g1/bDeviceSubClass
chown system system /config/usb_gadget/g1/bMaxPacketSize0
chown system system /config/usb_gadget/g1/bcdDevice
chown system system /config/usb_gadget/g1/bcdUSB
chown system system /config/usb_gadget/g1/configs
chown system system /config/usb_gadget/g1/configs/b.1
chown system system /config/usb_gadget/g1/configs/b.1/MaxPower
chown system system /config/usb_gadget/g1/configs/b.1/bmAttributes
chown system system /config/usb_gadget/g1/configs/b.1/strings
chown system system /config/usb_gadget/g1/functions
chown system system /config/usb_gadget/g1/functions/accessory.gs2
chown system system /config/usb_gadget/g1/functions/acm.gs6
chown system system /config/usb_gadget/g1/functions/acm.gs6/port_num
chown system system /config/usb_gadget/g1/functions/acm.uwb0
chown system system /config/usb_gadget/g1/functions/acm.uwb0/port_num
chown system system /config/usb_gadget/g1/functions/audio_source.gs3
chown system system /config/usb_gadget/g1/functions/dm.gs7
chown system system /config/usb_gadget/g1/functions/ffs.adb
chown system system /config/usb_gadget/g1/functions/ffs.mtp
chown system system /config/usb_gadget/g1/functions/ffs.ptp
chown system system /config/usb_gadget/g1/functions/midi.gs5
chown system system /config/usb_gadget/g1/functions/midi.gs5/buflen
chown system system /config/usb_gadget/g1/functions/midi.gs5/id
chown system system /config/usb_gadget/g1/functions/midi.gs5/in_ports
chown system system /config/usb_gadget/g1/functions/midi.gs5/index
chown system system /config/usb_gadget/g1/functions/midi.gs5/out_ports
chown system system /config/usb_gadget/g1/functions/midi.gs5/qlen
chown system system /config/usb_gadget/g1/functions/mtp.gs0
chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc
chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP
chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP/compatible_id
chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP/sub_compatible_id
chown system system /config/usb_gadget/g1/functions/ncm.gs9
chown system system /config/usb_gadget/g1/functions/ncm.gs9/dev_addr
chown system system /config/usb_gadget/g1/functions/ncm.gs9/host_addr
chown system system /config/usb_gadget/g1/functions/ncm.gs9/ifname
chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc
chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm
chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm/compatible_id
chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm/sub_compatible_id
chown system system /config/usb_gadget/g1/functions/ncm.gs9/qmult
chown system system /config/usb_gadget/g1/functions/ptp.gs1
chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc
chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc/interface.MTP
chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc/interface.MTP/compatible_id
chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc/interface.MTP/sub_compatible_id
chown system system /config/usb_gadget/g1/functions/rndis.gs4
chown system system /config/usb_gadget/g1/functions/rndis.gs4/class
chown system system /config/usb_gadget/g1/functions/rndis.gs4/dev_addr
chown system system /config/usb_gadget/g1/functions/rndis.gs4/host_addr
chown system system /config/usb_gadget/g1/functions/rndis.gs4/ifname
chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc
chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.rndis
chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.rndis/compatible_id
chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.rndis/sub_compatible_id
chown system system /config/usb_gadget/g1/functions/rndis.gs4/protocol
chown system system /config/usb_gadget/g1/functions/rndis.gs4/qmult
chown system system /config/usb_gadget/g1/functions/rndis.gs4/subclass
chown system system /config/usb_gadget/g1/functions/uvc.0/
chown system system /config/usb_gadget/g1/functions/uvc.0/control
chown system system /config/usb_gadget/g1/functions/uvc.0/control/bInterfaceNumber
chown system system /config/usb_gadget/g1/functions/uvc.0/control/class
chown system system /config/usb_gadget/g1/functions/uvc.0/control/class/fs
chown system system /config/usb_gadget/g1/functions/uvc.0/control/class/fs/h
chown system system /config/usb_gadget/g1/functions/uvc.0/control/class/ss
chown system system /config/usb_gadget/g1/functions/uvc.0/control/class/ss/h
chown system system /config/usb_gadget/g1/functions/uvc.0/control/header
chown system system /config/usb_gadget/g1/functions/uvc.0/control/header/h
chown system system /config/usb_gadget/g1/functions/uvc.0/control/header/h/bcdUVC
chown system system /config/usb_gadget/g1/functions/uvc.0/control/header/h/dwClockFrequency
chown system system /config/usb_gadget/g1/functions/uvc.0/control/processing
chown system system /config/usb_gadget/g1/functions/uvc.0/control/processing/default
chown system system /config/usb_gadget/g1/functions/uvc.0/control/processing/default/bmControls
chown system system /config/usb_gadget/g1/functions/uvc.0/control/processing/default/bSourceID
chown system system /config/usb_gadget/g1/functions/uvc.0/control/processing/default/bUnitID
chown system system /config/usb_gadget/g1/functions/uvc.0/control/processing/default/iProcessing
chown system system /config/usb_gadget/g1/functions/uvc.0/control/processing/default/wMaxMultiplier
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default/bAssocTerminal
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default/bmControls
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default/bTerminalID
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default/iTerminal
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default/wObjectiveFocalLengthMax
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default/wObjectiveFocalLengthMin
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default/wOcularFocalLength
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default/wTerminalType
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/output
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/output/default
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/output/default/bAssocTerminal
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/output/default/bSourceID
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/output/default/bTerminalID
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/output/default/iTerminal
chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/output/default/wTerminalType
chown system system /config/usb_gadget/g1/functions/uvc.0/function_name
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming_interval
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming_maxburst
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming_maxpacket
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/bInterfaceNumber
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/class
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/class/fs
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/class/fs/h
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/class/hs
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/class/hs/h
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/class/ss
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/class/ss/h
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/color_matching
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/color_matching/default
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/color_matching/default/bColorPrimaries
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/color_matching/default/bMatrixCoefficients
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/color_matching/default/bTransferCharacteristics
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/header
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/header/h
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/header/h/bmInfo
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/header/h/bStillCaptureMethod
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/header/h/bTerminalLink
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/header/h/bTriggerSupport
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/header/h/bTriggerUsage
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/header/h/m
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/bFrameIndex
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/bmCapabilities
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwDefaultFrameInterval
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwFrameInterval
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMaxBitRate
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMaxVideoFrameBufferSize
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMinBitRate
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/wHeight
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/wWidth
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/bFrameIndex
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/bmCapabilities
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwDefaultFrameInterval
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwFrameInterval
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwMaxBitRate
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwMaxVideoFrameBufferSize
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwMinBitRate
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/wHeight
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/wWidth
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/bFrameIndex
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/bmCapabilities
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwDefaultFrameInterval
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwFrameInterval
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwMaxBitRate
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwMaxVideoFrameBufferSize
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwMinBitRate
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/wHeight
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/wWidth
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/bFrameIndex
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/bmCapabilities
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwDefaultFrameInterval
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwFrameInterval
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMaxBitRate
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMaxVideoFrameBufferSize
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMinBitRate
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/wHeight
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/wWidth
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bAspectRatioX
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bAspectRatioY
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bDefaultFrameIndex
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bFormatIndex
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bmaControls
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bmFlags
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bmInterlaceFlags
chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/uncompressed
chown system system /config/usb_gadget/g1/idProduct
chown system system /config/usb_gadget/g1/idVendor
chown system system /config/usb_gadget/g1/max_speed
chown system system /config/usb_gadget/g1/os_desc
chown system system /config/usb_gadget/g1/os_desc/b.1
chown system system /config/usb_gadget/g1/os_desc/b_vendor_code
chown system system /config/usb_gadget/g1/os_desc/qw_sign
chown system system /config/usb_gadget/g1/os_desc/use
chown system system /config/usb_gadget/g1/strings
chown system system /config/usb_gadget/g1/strings/0x409
chown system system /config/usb_gadget/g1/strings/0x409/manufacturer
chown system system /config/usb_gadget/g1/strings/0x409/product
chown system system /config/usb_gadget/g1/strings/0x409/serialnumber
setprop vendor.usb.functions.ready 1
on boot
write /config/usb_gadget/g1/bcdDevice 0x0510
# Set USB timeout
write sys/module/usbcore/parameters/initial_descriptor_timeout 500
# Use USB Gadget HAL
setprop sys.usb.configfs 2
# Enable in-kernel media-presence polling for SD cards
write /sys/module/block/parameters/events_dfl_poll_msecs 2000
on property:sys.usb.ffs.ready=1 && property:sys.usb.config=adb && property:sys.usb.configfs=1
write /config/usb_gadget/g1/idProduct 0x4EE7
write /config/usb_gadget/g1/idVendor 0x18D1
on property:vendor.usb.config=*
start usbd
on property:persist.vendor.usb.usbradio.config=*
start usbd
on charger
mkdir /config/usb_gadget/g1
mkdir /config/usb_gadget/g1/strings/0x409
mkdir /config/usb_gadget/g1/configs/b.1
write /config/usb_gadget/g1/strings/0x409/serialnumber ${ro.serialno}
write /config/usb_gadget/g1/strings/0x409/manufacturer ${ro.product.manufacturer}
write /config/usb_gadget/g1/strings/0x409/product ${ro.product.model}
write /config/usb_gadget/g1/configs/b.1/MaxPower 0x384
write /config/usb_gadget/g1/os_desc/b_vendor_code 0x1
write /config/usb_gadget/g1/os_desc/qw_sign "MSFT100"
write /config/usb_gadget/g1/bcdDevice 0x0510
mkdir /config/usb_gadget/g1/functions/midi.gs5
symlink /config/usb_gadget/g1/configs/b.1 /config/usb_gadget/g1/os_desc/b.1
setprop sys.usb.controller "11210000.dwc3"
setprop sys.usb.configfs 1
on property:ro.bootmode=charger
setprop sys.usb.config charger
on property:sys.usb.config=charger && property:sys.usb.configfs=1
write /config/usb_gadget/g1/idVendor 0x18d1
write /config/usb_gadget/g1/idProduct 0x4eea
write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "midi"
symlink /config/usb_gadget/g1/functions/midi.gs5 /config/usb_gadget/g1/configs/b.1/f1
write /config/usb_gadget/g1/UDC ${sys.usb.controller}
write /sys/class/typec/port0/device/update_sdp_enum_timeout 0x1
setprop sys.usb.state ${sys.usb.config}
on property:ro.bootmode=usbuwb
setprop persist.vendor.usb.usbradio.config uwb_acm
on property:vendor.usb.contaminantdisable=true
exec /vendor/bin/hw/disable_contaminant_detection.sh
# WAR for kernel 5.10 with CONFIG_USB_DUMMY_HCD enabled
on property:sys.usb.controller=dummy_udc.0
setprop sys.usb.controller "11210000.dwc3"

45
conf/init.modem.rc Normal file
View File

@@ -0,0 +1,45 @@
on init
# Modem temperature driver
chown radio system /sys/devices/platform/cp-tm1/cp_temp
on post-fs-data
# Log data folder
mkdir /data/vendor 0771 radio system
mkdir /data/vendor/log 0771 radio system
mkdir /data/vendor/log/cbd 0771 radio system
mkdir /data/vendor/log/rfsd 0771 radio system
mkdir /data/vendor/slog 0771 system system
# Modem extended log folder
mkdir /data/vendor/radio/extended_logs 0771 radio system
# Modem MDS log folder
mkdir /data/vendor/radio/mds 0771 radio system
# Modem OTA UECap folder
mkdir /data/vendor/radio/ota_uecap 0773 radio system
# Unzipped modem images folder
mkdir /data/vendor/radio/image 0771 radio system
# Modem stat folder
mkdir /data/vendor/modem_stat 0771 radio system
write /data/vendor/modem_stat/debug.txt ""
chown radio system /data/vendor/modem_stat/debug.txt
chmod 0664 /data/vendor/modem_stat/debug.txt
# Modem replay folder
mkdir /mnt/vendor/modem_userdata/replay 0775 radio system
on fs
# Mount modem partition
mount_all /vendor/etc/fstab.modem --early
restorecon_recursive /mnt/vendor/efs
chown radio system /mnt/vendor/efs
restorecon_recursive /mnt/vendor/efs_backup
chown radio system /mnt/vendor/efs_backup
restorecon_recursive /mnt/vendor/modem_userdata
chown radio system /mnt/vendor/modem_userdata
restorecon_recursive /mnt/vendor/modem_img
restorecon_recursive /mnt/vendor/persist/modem

109
conf/soundtrigger_conf.h Normal file
View File

@@ -0,0 +1,109 @@
/*
* Copyright (C) 2017 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.
*/
#ifndef __EXYNOS_SOUNDTRIGGERCONF_H__
#define __EXYNOS_SOUNDTRIGGERCONF_H__
/********************************************************************/
/** ALSA Framework Sound Card & Sound Device Information */
/** */
/** You can find Sound Device Name from /dev/snd. */
/** Sound Device Name consist of Card Number & Device Number. */
/** */
/********************************************************************/
/* Sound Card and Mixer card Numbers based on Target Device */
/* You have to match this number with real kernel information */
#define VTS_SOUND_CARD 0
#define VTS_MIXER_CARD 0
/* PCM Nodes number for seamless and normal recording*/
#define VTS_TRICAP_DEVICE_NODE 13
#define VTS_RECORD_DEVICE_NODE 14
/* sysfs file paths for loading model binaries into VTS kernel driver */
#define VTS_HOTWORD_MODEL "/sys/devices/platform/13810000.vts/vts_google_model"
#define VTS_SVOICE_MODEL "/sys/devices/platform/13810000.vts/vts_svoice_model"
#define AUDIO_PRIMARY_HAL_LIBRARY_PATH "/vendor/lib/libaudioproxy.so"
// VTS Capture(Input) PCM Configuration
#define DEFAULT_VTS_CHANNELS 1 // Mono
#define DEFAULT_VTS_SAMPLING_RATE 16000 // 16KHz
#define PRIMARY_VTS_PERIOD_SIZE 160 // 160 frames, 10ms in case of 16KHz Stream
#define PRIMARY_VTS_PERIOD_COUNT 1024 // Buffer count => Total 327680 Bytes = 160 * 1(Mono) * 2(16bit PCM) * 1024(Buffer count)
/* VTS mixer controls */
#define VTS_ACTIVE_KEYPHRASE_CTL_NAME "VTS Active Keyphrase" /* default: 0-"SVOICE", 1-"GOOGLE", 2-"SENSORY" */
#define VTS_EXECUTION_MODE_CTL_NAME "VTS Execution Mode" /* 0-"OFF-MODE", 1-"VOICE-TRIG-MODE", 2-"SOUND-DECTECT-MODE", 3-"VT-ALWAYS-MODE" 4-"GOOGLE-TRI-MODE */
#define VTS_VOICERECOGNIZE_START_CTL_NAME "VTS VoiceRecognize Start" /* 0-"Off", 1-On" */
#define VTS_VOICETRIGGER_VALUE_CTL_NAME "VTS VoiceTrigger Value" /* 0 ~ 2000 ms*/
#define MAIN_MIC_CONTROL_COUNT 8
#define HEADSET_MIC_CONTROL_COUNT 8
#define MODEL_RECOGNIZE_CONTROL_COUNT 4
/* MIC Mixer controls for VTS */
char *main_mic_ctlname[] = {
"VTS DMIC SEL",
"VTS DMIC IF RCH EN",
"VTS DMIC IF LCH EN",
"VTS SYS SEL",
"VTS HPF EN",
"VTS HPF SEL",
"DMIC1 Switch",
"VTS Virtual Output Mux",
};
char *headset_mic_ctlname[] = {
"AUXPDM1 Rate",
"AUXPDM1 Input",
"AUXPDM1 Output Switch",
"AUXPDM Switch",
"VTS DMIC SEL",
"VTS DMIC IF RCH EN",
"VTS DMIC IF LCH EN",
"VTS SYS SEL",
"VTS HPF EN",
"VTS HPF SEL",
};
/* MIC Mixer control values */
/* FIXME : Double check this values */
int main_mic_ctlvalue[] = {
0, //"VTS DMIC SEL",
1, //"VTS DMIC IF RCH EN",
1, //"VTS DMIC IF LCH EN",
1, //"VTS SYS SEL",
1, //"VTS HPF EN",
1, //"VTS HPF SEL",
1, //"DMIC1 Switch",
1, //"VTS Virtual Output Mux",
};
int headset_mic_ctlvalue[] = {
3, //"AUXPDM1 Rate",
0, //"AUXPDM1 Input",
1, //"AUXPDM1 Output Switch",
1, //"AUXPDM Switch",
1, //"VTS DMIC SEL",
1, //"VTS DMIC IF RCH EN",
1, //"VTS DMIC IF LCH EN",
1, //"VTS SYS SEL",
1, //"VTS HPF EN",
1, //"VTS HPF SEL",
};
#endif // __EXYNOS_SOUNDTRIGGERCONF_H__

238
conf/ueventd.gs201.rc Normal file
View File

@@ -0,0 +1,238 @@
/dev/mali0 0666 system system
/dev/ion 0666 system system
/dev/ump 0666 system graphics
/dev/exynos-mem 0660 system graphics
/dev/video0 0660 system camera
/dev/video1 0660 system camera
/dev/video2 0660 system camera
/dev/video3 0660 system camera
/dev/video20 0660 system system
# media0 is used for GSC, DECON, etc
/dev/media0 0660 system camera
# media1 is used for DECON Ext WB
/dev/media1 0660 system graphics
# Various devices use the v4l-subdev interface
# We declare all such nodes simultaneously here
/dev/v4l-subdev0 0660 system camera
/dev/v4l-subdev1 0660 system camera
/dev/v4l-subdev2 0660 system camera
/dev/v4l-subdev3 0660 system camera
/dev/v4l-subdev4 0660 system camera
/dev/v4l-subdev5 0660 system camera
/dev/v4l-subdev6 0660 system camera
/dev/v4l-subdev7 0660 system camera
/dev/v4l-subdev8 0660 system camera
/dev/v4l-subdev9 0660 system camera
/dev/v4l-subdev10 0660 system camera
/dev/v4l-subdev11 0660 system camera
/dev/v4l-subdev12 0660 system camera
/dev/v4l-subdev13 0660 system camera
/dev/v4l-subdev14 0660 system camera
/dev/v4l-subdev15 0660 system camera
/dev/v4l-subdev16 0660 system camera
/dev/v4l-subdev17 0660 system camera
/dev/v4l-subdev18 0660 system camera
/dev/v4l-subdev19 0660 system camera
# v4l-subdev20 is used for DECON Ext WB
/dev/v4l-subdev20 0660 system graphics
/dev/v4l-subdev21 0660 system graphics
/dev/v4l-subdev32 0660 system graphics
# gscalers
/dev/video23 0660 media graphics
/dev/video26 0660 media graphics
/dev/video24 0660 media graphics
/dev/video27 0660 media graphics
/dev/video29 0660 media graphics
/dev/video30 0660 media graphics
# video31 is used for DECON Ext WB
/dev/video31 0660 media graphics
# mscalers
/dev/video50 0660 mediacodec drmrpc
/dev/m2m1shot_scaler0 0660 mediacodec drmrpc
/dev/video55 0666 system graphics
/dev/g2d 0660 system graphics
/dev/fimg2d 0666 system graphics
/dev/HPD 0660 system system
# wfd
/dev/tsmux 0660 media graphics
/dev/repeater 0660 media graphics
# mfc
/dev/video6 0660 mediacodec mediadrm
/dev/video7 0660 mediacodec mediadrm
/dev/video8 0660 mediacodec mediadrm
/dev/video9 0660 mediacodec mediadrm
/dev/video10 0660 mediacodec mediadrm
/dev/video11 0660 mediacodec mediadrm
# camera
/dev/media2 0660 media media
/dev/hdcp2 0660 media media
# jpeg
/dev/m2m1shot_jpeg 0660 media media
/dev/video12 0666 system system
# audio
/dev/seiren 0660 system audio
/dev/acd-audio_output_tuning 0660 system audio
/dev/acd-audio_bulk_tx 0660 system audio
/dev/acd-audio_bulk_rx 0660 system audio
/dev/acd-audio_input_tuning 0660 system audio
/dev/acd-audio_input_bulk_tx 0660 system audio
/dev/acd-audio_input_bulk_rx 0660 system audio
/dev/acd-sound_trigger 0660 system audio
/dev/acd-hotword_notification 0660 system audio
/dev/acd-hotword_pcm 0660 system audio
/dev/acd-ambient_pcm 0660 system audio
/dev/acd-model_data 0660 system audio
/dev/acd-debug 0660 system audio
/dev/acd-audio_tap* 0660 system audio
/dev/acd-audio_dcdoff_ref 0660 system audio
/dev/acd-mel_processor 0660 system audio
/dev/amcs 0660 system audio
/dev/acd-audio_rtp_* 0660 system radio
# Secure MEM driver
/dev/s5p-smem 0660 drm drmrpc
# cbd
/dev/block/by-name/modem 0640 root radio
/dev/block/by-name/modem_a 0640 root radio
/dev/block/by-name/modem_b 0640 root radio
# DM tools
/dev/umts_dm0 0660 system system
/dev/umts_router 0660 system system
/dev/ttyGS0 0660 system system
/dev/ttyGS1 0660 system system
/dev/ttyGS2 0660 system system
# IPC RIL
/dev/umts_boot0 0660 radio system
/dev/umts_ipc0 0660 radio radio
/dev/umts_ipc1 0660 radio radio
/dev/umts_rfs0 0660 radio radio
# IPC OEM
/dev/oem_ipc* 0660 radio radio
/dev/oem_test 0660 radio radio
# interactive governor parameters
/sys/devices/system/cpu/cpu* cpufreq/interactive/timer_rate 0660 system system
/sys/devices/system/cpu/cpu* cpufreq/interactive/timer_slack 0660 system system
/sys/devices/system/cpu/cpu* cpufreq/interactive/min_sample_time 0660 system system
/sys/devices/system/cpu/cpu* cpufreq/interactive/hispeed_freq 0660 system system
/sys/devices/system/cpu/cpu* cpufreq/interactive/target_loads 0660 system system
/sys/devices/system/cpu/cpu* cpufreq/interactive/go_hispeed_load 0660 system system
/sys/devices/system/cpu/cpu* cpufreq/interactive/above_hispeed_delay 0660 system system
/sys/devices/system/cpu/cpu* cpufreq/interactive/boost 0660 system system
/sys/devices/system/cpu/cpu* cpufreq/interactive/boostpulse 0200 system system
/sys/devices/system/cpu/cpu* cpufreq/interactive/input_boost 0660 system system
/sys/devices/system/cpu/cpu* cpufreq/interactive/boostpulse_duration 0660 system system
/sys/devices/system/cpu/cpu* cpufreq/interactive/io_is_busy 0660 system system
# Vision (VPU, SCORE)
/dev/vertex0 0660 media media
/dev/vertex1 0660 media media
# AoC
/dev/aoc 0660 system system
# AoC stats (UmfwStat)
/dev/acd-com.google.umfw_stat 0660 system system
# Sensors (USF)
/dev/acd-com.google.usf 0660 system system
/dev/acd-com.google.usf.non_wake_up 0660 system system
# CHRE
/dev/acd-com.google.chre 0660 system system
/dev/acd-com.google.chre.non_wake_up 0660 system system
# LWIS
/dev/lwis* 0660 system system
# NFC
/dev/st21nfc 0660 nfc nfc
# SecureElement
/dev/st54j_se 0660 secure_element secure_element
/dev/st54spi 0660 secure_element secure_element
/dev/st33spi 0660 secure_element secure_element
#bigocean
/dev/bigocean 0660 mediacodec mediadrm
# Trusty
/dev/trusty-ipc-dev0 0660 system drmrpc
/dev/trusty-log0 0660 system system
# RPMB
/dev/sg1 0660 system system
# Citadel
/dev/gsc0 0660 hsm hsm
# Storage: for factory reset protection feature
/dev/block/by-name/frp 0660 system system
# Storage: for UDFPS calibration data sideload feature
/dev/block/by-name/mfg_data 0660 system system
# TPU
/dev/janeiro 0660 system system
# DSP
/dev/gxp 0666 system camera
# TOE
/dev/dit2 0660 radio radio
# Bluetooth
/dev/ttySAC18 0660 bluetooth system
/dev/btpower 0660 bluetooth system
# BT Wifi Coexistence
/dev/wbrc 0660 system system
# TUI
/dev/tui-driver 0660 system system
# DMA-BUF heaps
/dev/dma_heap/crypto 0444 system graphics
/dev/dma_heap/crypto-uncached 0444 system graphics
/dev/dma_heap/faceauth_tpu-secure 0444 system graphics
/dev/dma_heap/faimg-secure 0444 system graphics
/dev/dma_heap/famodel-secure 0444 system graphics
/dev/dma_heap/faprev-secure 0444 system graphics
/dev/dma_heap/farawimg-secure 0444 system graphics
/dev/dma_heap/tui-secure 0444 system graphics
/dev/dma_heap/vframe-secure 0444 system drmrpc
/dev/dma_heap/vscaler-secure 0444 system graphics
/dev/dma_heap/vstream-secure 0444 system drmrpc
/dev/dma_heap/sensor_direct_heap 0444 system graphics
/dev/dma_heap/aaudio_playback_heap 0444 system audio
/dev/dma_heap/aaudio_capture_heap 0444 system audio
# Direct Charging
/dev/logbuffer_pca9468_tcpm 0600 system system
# Raw HID devices
/dev/hidraw* 0660 system system
# Wlan
/dev/wlan 0660 wifi wifi
# ODPM
/sys/bus/iio/devices/iio:device* enabled_rails 0660 system system
# sysfs LED nodes for external USB devices
/sys/devices/platform/11210000.usb/11210000.dwc3/xhci-hcd-exynos.5.auto/usb2/2-1* brightness 0664 system system
/sys/devices/platform/11210000.usb/11210000.dwc3/xhci-hcd-exynos.5.auto/usb2/2-1* multi_intensity 0664 system system
/sys/devices/platform/11210000.usb/11210000.dwc3/xhci-hcd-exynos.4.auto/usb2/2-1* brightness 0664 system system
/sys/devices/platform/11210000.usb/11210000.dwc3/xhci-hcd-exynos.4.auto/usb2/2-1* multi_intensity 0664 system system

178
convert_to_ext4.sh Normal file
View File

@@ -0,0 +1,178 @@
#!/bin/sh
PERSIST_BLK='/dev/block/by-name/persist'
EFS_BLK='/dev/block/by-name/efs'
MNT_BASE='/mnt/product'
MNT_OLD="$MNT_BASE/convert_old"
MNT_NEW="$MNT_BASE/convert_new"
function log() {
if [ ! -z "$1" ]; then
echo "partition_convert: $1" > /dev/kmsg
fi
}
function check_success() {
RES=$?
if [ $RES -ne 0 ]; then
log "Failed: $1"
else
log "Success: $1"
fi
return $RES
}
function get_fs_type()
{
BLOCK=$1
EXT4_MAGIC=$(xxd $BLOCK -s 0x438 -l 2 -p)
if [ "$EXT4_MAGIC" = "53ef" ]; then
echo "ext4"
else
F2FS_MAGIC=$(xxd $BLOCK -s 0x400 -l 4 -p)
if [ "$F2FS_MAGIC" = "1020f5f2" ]; then
echo "f2fs"
else
echo "unknown"
fi
fi
}
# Flow:
# 1. If persist is f2fs we need to make efs ext4 and copy out the files. Once files are copied
# successfully, format persist as ext4 to mark completion of step.
# 2. If persist is ext4 and efs is ext4, we need to copy from efs to persist (use dd). Once
# everything is copied successfully, erase efs to allow it to be formatted to f2fs later.
# 3. If persist is ext4 and efs is not ext4, we have already migrated - do nothing.
# If persist is already ext4 and efs is not ext4 we have already migrated.
PERSIST_FS=$(get_fs_type $PERSIST_BLK)
EFS_FS=$(get_fs_type $EFS_BLK)
if [ "$PERSIST_FS" = "ext4" ]; then
if [ "$EFS_FS" != "ext4" ]; then
log "persist ext4 migration already done"
exit 0
fi
fi
if [ "$PERSIST_FS" = "unknown" ]; then
log "persist partition hasn't been initialized"
exit 0
fi
RETRIES=10
while [[ $RETRIES -gt 0 ]]; do
# Sleep for 1 second here, as other failure points will trigger continue
sleep 1
RETRIES=$((RETRIES-1))
# If persist is still f2fs, we need to copy to efs.
if [ "$PERSIST_FS" = "f2fs" ]; then
# Format efs as ext4
/system/bin/mke2fs -t ext4 -b 4096 $EFS_BLK
check_success "/system/bin/mke2fs -t ext4 -b 4096 $EFS_BLK"
if [ $? -ne 0 ]; then
continue
fi
#Create directory to mount persist partition
mkdir -p $MNT_OLD
check_success "mkdir $MNT_OLD"
if [ $? -ne 0 ]; then
continue
fi
# Create directory to mount efs partition
mkdir -p $MNT_NEW
check_success "mkdir $MNT_NEW"
if [ $? -ne 0 ]; then
rm -rf $MNT_OLD
continue
fi
# Mount persist
mount -t f2fs $PERSIST_BLK $MNT_OLD
check_success "mount -t f2fs $PERSIST_BLK $MNT_OLD"
if [ $? -ne 0 ]; then
rm -rf $MNT_NEW
rm -rf $MNT_OLD
continue
fi
# Mount efs
mount -t ext4 $EFS_BLK $MNT_NEW
check_success "mount -t ext4 $EFS_BLK $MNT_NEW"
if [ $? -ne 0 ]; then
umount $MNT_OLD
rm -rf $MNT_NEW
rm -rf $MNT_OLD
continue
fi
cp -rp $MNT_OLD/.* $MNT_NEW/
cp -rp $MNT_OLD/* $MNT_NEW/
check_success "cp -rp $MNT_OLD/* $MNT_NEW/"
if [ $? -ne 0 ]; then
umount $MNT_NEW
umount $MNT_OLD
rm -rf $MNT_NEW
rm -rf $MNT_OLD
continue
fi
# Calculate md5sum of all files and compare between persist and efs
(cd $MNT_NEW; find . -type f | xargs md5sum | sort) > $MNT_BASE/new.md5sums
(cd $MNT_OLD; find . -type f | xargs md5sum | sort) > $MNT_BASE/old.md5sums
diff $MNT_BASE/new.md5sums $MNT_BASE/old.md5sums
check_success "diff $MNT_BASE/new.md5sums $MNT_BASE/old.md5sums"
RES=$?
rm $MNT_BASE/new.md5sums $MNT_BASE/old.md5sums
umount $MNT_NEW
umount $MNT_OLD
rm -rf $MNT_NEW
rm -rf $MNT_OLD
if [ $RES -ne 0 ]; then
continue
fi
/system/bin/mke2fs -t ext4 -b 4096 $PERSIST_BLK
check_success "/system/bin/mke2fs -t ext4 -b 4096 $PERSIST_BLK"
if [ $? -ne 0 ]; then
continue
fi
PERSIST_FS="ext4"
fi
# copy efs to persist
dd if=$EFS_BLK of=$PERSIST_BLK
check_success "dd if=$EFS_BLK of=$PERSIST_BLK"
if [ $? -ne 0 ]; then
continue
fi
sync
check_success "sync"
if [ $? -ne 0 ]; then
continue
fi
# compare md5sum for integrity
EFS_MD5SUM=$(dd if=$EFS_BLK 2>/dev/null | md5sum)
PERSIST_MD5SUM=$(dd if=$PERSIST_BLK 2>/dev/null | md5sum)
if [ "$PERSIST_MD5SUM" != "$EFS_MD5SUM" ]; then
log "dd md5sum mismatch"
continue
fi
dd if=/dev/zero of=$EFS_BLK bs=1M count=64
check_success "dd if=/dev/zero of=$EFS_BLK bs=1M count=64"
if [ $? -ne 0 ]; then
continue
fi
log "Migration succeeded"
break
done

View File

@@ -1,8 +1,18 @@
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<!--
SPDX-FileCopyrightText: 2019 Google Inc.
SPDX-License-Identifier: Apache-2.0
<!-- Copyright (C) 2019 Google Inc.
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.
-->
<!--

View File

@@ -1,8 +1,22 @@
#
# SPDX-FileCopyrightText: 2020 The Android Open-Source Project
# SPDX-License-Identifier: Apache-2.0
# 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.
#
ifneq ($(BOARD_WITHOUT_RADIO),true)
-include vendor/google_devices/gs201/proprietary/telephony/device-vendor.mk
endif
include device/google/gs201/device.mk
ifneq ($(BOARD_WITHOUT_RADIO),true)

View File

@@ -1,6 +1,16 @@
#
# SPDX-FileCopyrightText: 2020 The Android Open-Source Project
# SPDX-License-Identifier: Apache-2.0
# 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.
include device/google/gs201/device-common.mk

829
device.mk

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
SPDX-FileCopyrightText: 2021 The Android Open Source Project
SPDX-FileCopyrightText: The LineageOS Project
SPDX-License-Identifier: Apache-2.0
-->
<compatibility-matrix version="9.0" type="framework" level="7">
<hal format="hidl">
<compatibility-matrix version="1.0" type="framework" level="7">
<hal format="hidl" optional="true">
<name>android.vendor.samsung_slsi.telephony.hardware.radio</name>
<version>1.1</version>
<interface>
@@ -14,7 +8,7 @@
<instance>slot2</instance>
</interface>
</hal>
<hal format="hidl">
<hal format="hidl" optional="true">
<name>com.fingerprints42.extension</name>
<version>1.0</version>
<interface>
@@ -46,24 +40,9 @@
<instance>default</instance>
</interface>
</hal>
<hal format="aidl">
<name>com.google.edgetpu</name>
<version>2</version>
<interface>
<name>IEdgeTpuVendorService</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl">
<name>com.google.edgetpu.dba</name>
<interface>
<name>IDevice</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl">
<name>com.google.face.debug</name>
<version>3-4</version>
<hal format="aidl" optional="true">
<name>com.google.face.debug</name>
<version>3-4</version>
<interface>
<name>IDebugHost</name>
<instance>default</instance>
@@ -73,48 +52,39 @@
<instance>default</instance>
</interface>
</hal>
<hal format="aidl">
<name>com.google.flood</name>
<hal format="aidl" optional="true">
<name>com.google.edgetpu</name>
<version>2</version>
<interface>
<name>IFloodService</name>
<name>IEdgeTpuVendorService</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl">
<name>com.google.hardware.pixel.display</name>
<version>16</version>
<hal format="aidl" optional="true">
<name>com.google.edgetpu.dba</name>
<version>1</version>
<interface>
<name>IDevice</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl" optional="true">
<name>com.google.edgetpu.tachyon</name>
<version>1</version>
<interface>
<name>IComputeService</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl" optional="true">
<name>com.google.hardware.pixel.display</name>
<version>13</version>
<interface>
<name>IDisplay</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl">
<name>com.google.input</name>
<version>2-6</version>
<interface>
<name>ITouchContextService</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl">
<name>com.google.input</name>
<version>6</version>
<interface>
<name>ITwoshayFileDumpService</name>
<instance>touchflow_default</instance>
<instance>touchflow_outer</instance>
<instance>twoshay</instance>
</interface>
</hal>
<hal format="aidl">
<name>com.google.pixel.camera.connectivity.hal.provider</name>
<interface>
<name>ICameraProvider</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl">
<hal format="aidl" optional="true">
<name>hardware.qorvo.uwb</name>
<version>2</version>
<interface>
@@ -122,7 +92,7 @@
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<hal format="hidl" optional="true">
<name>vendor.goodix.hardware.biometrics.fingerprint</name>
<version>2.1</version>
<interface>
@@ -130,30 +100,15 @@
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<name>vendor.google.audiometricext</name>
<version>1.0</version>
<interface>
<name>IAudioMetricExt</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl">
<name>vendor.google.battery_mitigation</name>
<interface>
<name>IBatteryMitigation</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl">
<hal format="aidl" optional="true">
<name>vendor.google.google_battery</name>
<version>4</version>
<version>2-3</version>
<interface>
<name>IGoogleBattery</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<hal format="hidl" optional="true">
<name>vendor.google.radioext</name>
<version>1.5</version>
<interface>
@@ -161,15 +116,7 @@
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<name>vendor.google.whitechapel.audio.audioext</name>
<version>4.0</version>
<interface>
<name>IAudioExt</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl">
<hal format="aidl" optional="true">
<name>vendor.google.wifi_ext</name>
<version>2-4</version>
<interface>
@@ -177,7 +124,7 @@
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<hal format="hidl" optional="true">
<name>vendor.samsung_slsi.telephony.hardware.oemservice</name>
<version>1.0</version>
<interface>
@@ -187,7 +134,7 @@
<instance>sced0</instance>
</interface>
</hal>
<hal format="hidl">
<hal format="hidl" optional="true">
<name>vendor.samsung_slsi.telephony.hardware.radioExternal</name>
<version>1.1</version>
<interface>

View File

@@ -0,0 +1,6 @@
#!/vendor/bin/sh
max77759tcpc_path=/sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025
if [ -d $max77759tcpc_path ]; then
echo 0 > $max77759tcpc_path/contaminant_detection;
fi

Binary file not shown.

20
dumpstate/Android.bp Normal file
View File

@@ -0,0 +1,20 @@
package {
default_applicable_licenses: ["Android-Apache-2.0"],
}
cc_binary {
name: "dump_power",
srcs: ["dump_power.cpp"],
cflags: [
"-Wall",
"-Wextra",
"-Werror",
],
shared_libs: [
"libbase",
"libdump",
"libdumpstateutil",
],
vendor: true,
relative_install_path: "dump",
}

10
dumpstate/OWNERS Normal file
View File

@@ -0,0 +1,10 @@
aaronding@google.com
rurumihong@google.com
adamshih@google.com
wilsonsung@google.com
lucaswei@google.com
cyanhsieh@google.com
rogerliao@google.com
cyuanjen@google.com
robinpeng@google.com
pattjin@google.com

1
dumpstate/README.txt Normal file
View File

@@ -0,0 +1 @@
Please refer to go/pixel-recycle to modularize your code in this space.

819
dumpstate/dump_power.cpp Normal file
View File

@@ -0,0 +1,819 @@
/*
* Copyright 2023 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 <cstring>
#include <dirent.h>
#include <dump/pixel_dump.h>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <sys/sysinfo.h>
#include <time.h>
#include <vector>
#include <android-base/file.h>
#include <android-base/strings.h>
#include "DumpstateUtil.h"
void printTitle(const char *msg) {
printf("\n------ %s ------\n", msg);
}
int getCommandOutput(const char *cmd, std::string *output) {
char buffer[1024];
FILE *pipe = popen(cmd, "r");
if (!pipe) {
return -1;
}
while (fgets(buffer, sizeof buffer, pipe) != NULL) {
*output += buffer;
}
pclose(pipe);
if (output->back() == '\n')
output->pop_back();
return 0;
}
bool isValidFile(const char *file) {
FILE *fp = fopen(file, "r");
if (fp != NULL) {
fclose(fp);
return true;
}
return false;
}
bool isValidDir(const char *directory) {
DIR *dir = opendir(directory);
if (dir == NULL)
return false;
closedir(dir);
return true;
}
bool isUserBuild() {
return ::android::os::dumpstate::PropertiesHelper::IsUserBuild();
}
int getFilesInDir(const char *directory, std::vector<std::string> *files) {
std::string content;
struct dirent *entry;
DIR *dir = opendir(directory);
if (dir == NULL)
return -1;
files->clear();
while ((entry = readdir(dir)) != NULL)
files->push_back(entry->d_name);
closedir(dir);
sort(files->begin(), files->end());
return 0;
}
void dumpPowerStatsTimes() {
const char *title = "Power Stats Times";
char rBuff[128];
struct timespec rTs;
struct sysinfo info;
int ret;
printTitle(title);
sysinfo(&info);
const time_t boottime = time(NULL) - info.uptime;
ret = clock_gettime(CLOCK_REALTIME, &rTs);
if (ret)
return;
struct tm *nowTime = std::localtime(&rTs.tv_sec);
std::strftime(rBuff, sizeof(rBuff), "%m/%d/%Y %H:%M:%S", nowTime);
printf("Boot: %s", ctime(&boottime));
printf("Now: %s\n", rBuff);
}
int readContentsOfDir(const char* title, const char* directory, const char* strMatch,
bool useStrMatch = false, bool printDirectory = false) {
std::vector<std::string> files;
std::string content;
std::string fileLocation;
int ret;
ret = getFilesInDir(directory, &files);
if (ret < 0)
return ret;
printTitle(title);
for (auto &file : files) {
if (useStrMatch && std::string::npos == std::string(file).find(strMatch)) {
continue;
}
fileLocation = std::string(directory) + std::string(file);
if (!android::base::ReadFileToString(fileLocation, &content)) {
continue;
}
if (printDirectory) {
printf("\n\n%s\n", fileLocation.c_str());
}
if (content.back() == '\n')
content.pop_back();
printf("%s\n", content.c_str());
}
return 0;
}
void dumpAcpmStats() {
const char* acpmDir = "/sys/devices/platform/acpm_stats/";
const char* statsSubStr = "_stats";
const char* acpmTitle = "ACPM stats";
readContentsOfDir(acpmTitle, acpmDir, statsSubStr, true, true);
}
void dumpPowerSupplyStats() {
const char* dumpList[][2] = {
{"CPU PM stats", "/sys/devices/system/cpu/cpupm/cpupm/time_in_state"},
{"Power supply property battery", "/sys/class/power_supply/battery/uevent"},
{"Power supply property dc", "/sys/class/power_supply/dc/uevent"},
{"Power supply property gcpm", "/sys/class/power_supply/gcpm/uevent"},
{"Power supply property gcpm_pps", "/sys/class/power_supply/gcpm_pps/uevent"},
{"Power supply property main-charger", "/sys/class/power_supply/main-charger/uevent"},
{"Power supply property pca94xx-mains", "/sys/class/power_supply/pca94xx-mains/uevent"},
{"Power supply property tcpm", "/sys/class/power_supply/tcpm-source-psy-i2c-max77759tcpc/uevent"},
{"Power supply property usb", "/sys/class/power_supply/usb/uevent"},
{"Power supply property wireless", "/sys/class/power_supply/wireless/uevent"},
};
for (const auto &row : dumpList) {
dumpFileContent(row[0], row[1]);
}
}
void dumpMaxFg() {
const char *maxfgLoc = "/sys/class/power_supply/maxfg";
const char *maxfgDualLoc = "/sys/class/power_supply/maxfg_base";
const char *maxfg [][2] = {
{"Power supply property maxfg", "/sys/class/power_supply/maxfg/uevent"},
{"m5_state", "/sys/class/power_supply/maxfg/m5_model_state"},
{"maxfg registers", "/sys/class/power_supply/maxfg/registers_dump"},
{"maxfg logbuffer", "/dev/logbuffer_maxfg"},
{"maxfg_monitor logbuffer", "/dev/logbuffer_maxfg_monitor"},
};
const char *maxfgDual [][2] = {
{"Power supply property maxfg_base", "/sys/class/power_supply/maxfg_base/uevent"},
{"Power supply property maxfg_secondary", "/sys/class/power_supply/maxfg_secondary/uevent"},
{"maxfg_base registers", "/sys/class/power_supply/maxfg_base/registers_dump"},
{"maxfg_secondary registers", "/sys/class/power_supply/maxfg_secondary/registers_dump"},
{"m5_state", "/sys/class/power_supply/maxfg_base/m5_model_state"},
{"maxfg_base logbuffer", "/dev/logbuffer_maxfg_base"},
{"maxfg_secondary logbuffer", "/dev/logbuffer_maxfg_secondary"},
{"maxfg_base logbuffer", "/dev/logbuffer_maxfg_base_monitor"},
{"maxfg_secondary logbuffer", "/dev/logbuffer_maxfg_secondary_monitor"},
{"dual_batt logbuffer", "/dev/logbuffer_dual_batt"},
};
const char *maxfgHistoryName = "Maxim FG History";
const char *maxfgHistoryDir = "/dev/maxfg_history";
std::string content;
if (isValidDir(maxfgLoc)) {
for (const auto &row : maxfg) {
dumpFileContent(row[0], row[1]);
}
} else if (isValidDir(maxfgDualLoc)){
for (const auto &row : maxfgDual) {
dumpFileContent(row[0], row[1]);
}
if (isValidFile(maxfgHistoryDir)) {
dumpFileContent(maxfgHistoryName, maxfgHistoryDir);
}
}
}
void dumpPowerSupplyDock() {
const char* powerSupplyPropertyDockTitle = "Power supply property dock";
const char* powerSupplyPropertyDockFile = "/sys/class/power_supply/dock/uevent";
dumpFileContent(powerSupplyPropertyDockTitle, powerSupplyPropertyDockFile);
}
void dumpLogBufferTcpm() {
const char* logbufferTcpmTitle = "Logbuffer TCPM";
const char* logbufferTcpmFile = "/dev/logbuffer_tcpm";
const char* debugTcpmFile = "/sys/kernel/debug/tcpm";
const char* tcpmLogTitle = "TCPM logs";
const char* tcpmFile = "/sys/kernel/debug/tcpm";
const char* tcpmFileAlt = "/sys/kernel/debug/usb/tcpm";
int retCode;
dumpFileContent(logbufferTcpmTitle, logbufferTcpmFile);
retCode = readContentsOfDir(tcpmLogTitle, isValidFile(debugTcpmFile) ? tcpmFile : tcpmFileAlt,
NULL);
if (retCode < 0)
printTitle(tcpmLogTitle);
}
void dumpTcpc() {
const char* max77759TcpcHead = "TCPC Device Attributes";
const char* directory = "/sys/class/typec/port0/device";
const char* max77759Tcpc [] {
"auto_discharge",
"bc12_enabled",
"cc_toggle_enable",
"contaminant_detection",
"contaminant_detection_status",
"frs",
"irq_hpd_count",
"manual_disable_vbus",
"non_compliant_reasons",
"sbu_pullup",
"update_sdp_enum_timeout",
"usb_limit_accessory_current",
"usb_limit_accessory_enable",
"usb_limit_sink_current",
"usb_limit_sink_enable",
"usb_limit_source_enable",
};
std::string content;
std::string tcpcRegistersPath(std::string(directory) + "/registers");
dumpFileContent("TCPC Registers", tcpcRegistersPath.c_str());
printTitle(max77759TcpcHead);
for (auto& tcpcVal : max77759Tcpc) {
std::string filename = std::string(directory) + "/" + std::string(tcpcVal);
printf("%s: ", tcpcVal);
android::base::ReadFileToString(filename, &content);
if (!content.empty() && (content.back() == '\n' || content.back() == '\r'))
content.pop_back();
printf("%s\n", content.c_str());
}
printf("\n");
}
void dumpPdEngine() {
const char* pdEngine [][3] {
{"TCPC logbuffer", "/dev/logbuffer_usbpd"},
{"pogo_transport logbuffer", "/dev/logbuffer_pogo_transport"},
{"PPS-google_cpm logbuffer", "/dev/logbuffer_cpm"},
{"PPS-pca9468 logbuffer", "/dev/logbuffer_pca9468"},
};
for (const auto &row : pdEngine) {
dumpFileContent(row[0], row[1]);
}
}
void dumpBatteryHealth() {
const char* batteryHealth [][2] {
{"Battery Health", "/sys/class/power_supply/battery/health_index_stats"},
{"Battery Health SoC Residency", "/sys/class/power_supply/battery/swelling_data"},
{"BMS", "/dev/logbuffer_ssoc"},
{"TTF", "/dev/logbuffer_ttf"},
{"TTF details", "/sys/class/power_supply/battery/ttf_details"},
{"TTF stats", "/sys/class/power_supply/battery/ttf_stats"},
{"aacr_state", "/sys/class/power_supply/battery/aacr_state"},
{"maxq", "/dev/logbuffer_maxq"},
{"TEMP/DOCK-DEFEND", "/dev/logbuffer_bd"},
};
for (const auto &row : batteryHealth) {
dumpFileContent(row[0], row[1]);
}
}
void dumpBatteryDefend() {
const char* defendConfig [][3] {
{"TRICKLE-DEFEND Config",
"/sys/devices/platform/google,battery/power_supply/battery/", "bd_"},
{"DWELL-DEFEND Config", "/sys/devices/platform/google,charger/", "charge_s"},
{"TEMP-DEFEND Config", "/sys/devices/platform/google,charger/", "bd_"},
};
std::vector<std::string> files;
struct dirent *entry;
std::string content;
std::string fileLocation;
for (auto &config : defendConfig) {
DIR *dir = opendir(config[1]);
if (dir == NULL)
continue;
printTitle(config[0]);
while ((entry = readdir(dir)) != NULL) {
if (std::string(entry->d_name).find(config[2]) != std::string::npos &&
strncmp(config[2], entry->d_name, strlen(config[2])) == 0) {
files.push_back(entry->d_name);
}
}
closedir(dir);
sort(files.begin(), files.end());
for (auto &file : files) {
fileLocation = std::string(config[1]) + std::string(file);
if (!android::base::ReadFileToString(fileLocation, &content) || content.empty()) {
content = "\n";
}
printf("%s: %s", file.c_str(), content.c_str());
if (content.back() != '\n')
printf("\n");
}
files.clear();
}
}
void dumpBatteryCaretaker() {
const char* aacpConfig [][3] {
{"AACP Version",
"/sys/devices/platform/google,battery/power_supply/battery/", "aacp_"},
{"AACR Config",
"/sys/devices/platform/google,battery/power_supply/battery/", "aacr_"},
{"AAFV Config",
"/sys/devices/platform/google,battery/power_supply/battery/", "aafv_"},
{"AACT Config",
"/sys/devices/platform/google,battery/power_supply/battery/", "aact_"},
{"AACC",
"/sys/devices/platform/google,battery/power_supply/battery/", "aacc"},
};
std::vector<std::string> files;
struct dirent *entry;
std::string content;
std::string fileLocation;
for (auto &config : aacpConfig) {
DIR *dir = opendir(config[1]);
if (dir == NULL)
continue;
printTitle(config[0]);
while ((entry = readdir(dir)) != NULL) {
if (std::string(entry->d_name).find(config[2]) != std::string::npos &&
strncmp(config[2], entry->d_name, strlen(config[2])) == 0) {
files.push_back(entry->d_name);
}
}
closedir(dir);
sort(files.begin(), files.end());
for (auto &file : files) {
fileLocation = std::string(config[1]) + std::string(file);
if (!android::base::ReadFileToString(fileLocation, &content) || content.empty()) {
content = "\n";
}
printf("%s: %s", file.c_str(), content.c_str());
if (content.back() != '\n')
printf("\n");
}
files.clear();
}
}
void printValuesOfDirectory(const char *directory, std::string debugfs, const char *strMatch) {
std::vector<std::string> files;
auto info = directory;
std::string content;
struct dirent *entry;
DIR *dir = opendir(debugfs.c_str());
if (dir == NULL)
return;
printTitle((debugfs + std::string(strMatch) + "/" + std::string(info)).c_str());
while ((entry = readdir(dir)) != NULL)
if (std::string(entry->d_name).find(strMatch) != std::string::npos)
files.push_back(entry->d_name);
closedir(dir);
sort(files.begin(), files.end());
for (auto &file : files) {
std::string fileDirectory = debugfs + file;
std::string fileLocation = fileDirectory + "/" + std::string(info);
if (!android::base::ReadFileToString(fileLocation, &content)) {
content = "\n";
}
printf("%s:\n%s", fileDirectory.c_str(), content.c_str());
if (content.back() != '\n')
printf("\n");
}
files.clear();
}
void dumpChg() {
const std::string pmic_bus = "/sys/devices/platform/10d60000.hsi2c/i2c-13/13-0066";
const char* chg_reg_dump_file = "/sys/class/power_supply/main-charger/device/registers_dump";
const std::string chg_name_cmd = "/sys/class/power_supply/main-charger/device/name";
const std::string pmic_name_cmd = pmic_bus + "/name";
const std::string pmic_reg_dump_file = pmic_bus + "/registers_dump";
const std::string reg_dump_str = " registers dump";
const char* chgConfig [][2] {
{"DC_registers dump", "/sys/class/power_supply/pca94xx-mains/device/registers_dump"},
};
std::string chg_name;
std::string pmic_name;
printf("\n");
int ret = android::base::ReadFileToString(chg_name_cmd, &chg_name);
if (ret && !chg_name.empty()) {
chg_name.erase(chg_name.length() - 1); // remove new line
const std::string chg_reg_dump_title = chg_name + reg_dump_str;
/* CHG reg dump */
dumpFileContent(chg_reg_dump_title.c_str(), chg_reg_dump_file);
}
ret = android::base::ReadFileToString(pmic_name_cmd, &pmic_name);
if (ret && !pmic_name.empty()) {
pmic_name.erase(pmic_name.length() - 1); // remove new line
const std::string pmic_reg_dump_title = pmic_name + reg_dump_str;
/* PMIC reg dump */
dumpFileContent(pmic_reg_dump_title.c_str(), pmic_reg_dump_file.c_str());
}
for (auto &config : chgConfig) {
dumpFileContent(config[0], config[1]);
}
}
void dumpChgUserDebug() {
const std::string debugfs = "/d/";
const char *maxFgDir = "/d/maxfg";
const char *maxFgStrMatch = "maxfg";
const char *maxBaseFgDir = "/d/maxfg_base";
const char *maxBaseFgStrMatch = "maxfg_base";
const char *chgTblName = "Charging table dump";
const char *chgTblDir = "/d/google_battery/chg_raw_profile";
const char *maxFgInfo [] {
"fg_model",
"algo_ver",
"model_ok",
};
if (isUserBuild())
return;
dumpFileContent(chgTblName, chgTblDir);
if (isValidDir(maxFgDir)) {
for (auto & directory : maxFgInfo) {
printValuesOfDirectory(directory, debugfs, maxFgStrMatch);
}
} else if (isValidDir(maxBaseFgDir)) {
for (auto & directory : maxFgInfo) {
printValuesOfDirectory(directory, debugfs, maxBaseFgStrMatch);
}
}
}
void dumpBatteryEeprom() {
const char *title = "Battery EEPROM";
const char *files[] {
"/sys/devices/platform/10da0000.hsi2c/i2c-15/15-0050/eeprom",
};
std::string result;
std::string xxdCmd;
printTitle(title);
for (auto &file : files) {
if (!isValidFile(file))
continue;
xxdCmd = "xxd " + std::string(file);
int ret = getCommandOutput(xxdCmd.c_str(), &result);
if (ret < 0)
return;
printf("%s\n", result.c_str());
}
}
void dumpChargerStats() {
const char *chgStatsTitle = "Charger Stats";
const char *chgStatsLocation = "/sys/class/power_supply/battery/charge_details";
const char *chargerStats [][3] {
{"Google Charger", "/sys/kernel/debug/google_charger/", "pps_"},
{"Google Battery", "/sys/kernel/debug/google_battery/", "ssoc_"},
};
std::vector<std::string> files;
std::string content;
struct dirent *entry;
dumpFileContent(chgStatsTitle, chgStatsLocation);
if (isUserBuild())
return;
for (auto &stat : chargerStats) {
DIR *dir = opendir(stat[1]);
if (dir == NULL)
return;
printTitle(stat[0]);
while ((entry = readdir(dir)) != NULL)
if (std::string(entry->d_name).find(stat[2]) != std::string::npos)
files.push_back(entry->d_name);
closedir(dir);
sort(files.begin(), files.end());
for (auto &file : files) {
std::string fileLocation = std::string(stat[1]) + file;
if (!android::base::ReadFileToString(fileLocation, &content)) {
content = "\n";
}
printf("%s: %s", file.c_str(), content.c_str());
if (content.back() != '\n')
printf("\n");
}
files.clear();
}
}
void dumpWlcLogs() {
const char *dumpWlcList [][2] {
{"WLC Logs", "/dev/logbuffer_wireless"},
{"WLC VER", "/sys/class/power_supply/wireless/device/version"},
{"WLC STATUS", "/sys/class/power_supply/wireless/device/status"},
{"WLC FW Version", "/sys/class/power_supply/wireless/device/fw_rev"},
{"RTX", "/dev/logbuffer_rtx"},
};
for (auto &row : dumpWlcList) {
if (!isValidFile(row[1]))
printTitle(row[0]);
dumpFileContent(row[0], row[1]);
}
}
void dumpGvoteables() {
const char *directory = "/sys/kernel/debug/gvotables/";
const char *statusName = "/status";
const char *title = "gvotables";
std::string content;
std::vector<std::string> files;
int ret;
if (isUserBuild())
return;
ret = getFilesInDir(directory, &files);
if (ret < 0)
return;
printTitle(title);
for (auto &file : files) {
std::string fileLocation = std::string(directory) + file + std::string(statusName);
if (!android::base::ReadFileToString(fileLocation, &content)) {
continue;
}
printf("%s: %s", file.c_str(), content.c_str());
if (content.back() != '\n')
printf("\n");
}
files.clear();
}
void dumpMitigation() {
const char *mitigationList [][2] {
{"Lastmeal" , "/data/vendor/mitigation/lastmeal.txt"},
{"Thismeal" , "/data/vendor/mitigation/thismeal.txt"},
};
for (auto &row : mitigationList) {
if (!isValidFile(row[1]))
printTitle(row[0]);
dumpFileContent(row[0], row[1]);
}
}
void dumpMitigationStats() {
int ret;
const char *directory = "/sys/devices/virtual/pmic/mitigation/last_triggered_count/";
const char *capacityDirectory = "/sys/devices/virtual/pmic/mitigation/last_triggered_capacity/";
const char *timestampDirectory =
"/sys/devices/virtual/pmic/mitigation/last_triggered_timestamp/";
const char *voltageDirectory = "/sys/devices/virtual/pmic/mitigation/last_triggered_voltage/";
const char *capacitySuffix = "_cap";
const char *timeSuffix = "_time";
const char *voltageSuffix = "_volt";
const char *countSuffix = "_count";
const char *title = "Mitigation Stats";
std::vector<std::string> files;
std::string content;
std::string fileLocation;
std::string source;
std::string subModuleName;
int count;
int soc;
int time;
int voltage;
ret = getFilesInDir(directory, &files);
if (ret < 0)
return;
printTitle(title);
printf("Source\t\tCount\tSOC\tTime\tVoltage\n");
for (auto &file : files) {
fileLocation = std::string(directory) + std::string(file);
if (!android::base::ReadFileToString(fileLocation, &content)) {
continue;
}
ret = atoi(android::base::Trim(content).c_str());
if (ret == -1)
continue;
count = ret;
subModuleName = std::string(file);
subModuleName.erase(subModuleName.find(countSuffix), strlen(countSuffix));
fileLocation = std::string(capacityDirectory) + std::string(subModuleName) +
std::string(capacitySuffix);
if (!android::base::ReadFileToString(fileLocation, &content)) {
continue;
}
ret = atoi(android::base::Trim(content).c_str());
if (ret == -1)
continue;
soc = ret;
fileLocation = std::string(timestampDirectory) + std::string(subModuleName) +
std::string(timeSuffix);
if (!android::base::ReadFileToString(fileLocation, &content)) {
continue;
}
ret = atoi(android::base::Trim(content).c_str());
if (ret == -1)
continue;
time = ret;
fileLocation = std::string(voltageDirectory) + std::string(subModuleName) +
std::string(voltageSuffix);
if (!android::base::ReadFileToString(fileLocation, &content)) {
continue;
}
ret = atoi(android::base::Trim(content).c_str());
if (ret == -1)
continue;
voltage = ret;
printf("%s \t%i\t%i\t%i\t%i\n", subModuleName.c_str(), count, soc, time, voltage);
}
}
void dumpMitigationDirs() {
const int paramCount = 4;
const char *titles[] = {
"Clock Divider Ratio",
"Clock Stats",
"Triggered Level",
"Instruction",
};
const char *directories[] = {
"/sys/devices/virtual/pmic/mitigation/clock_ratio/",
"/sys/devices/virtual/pmic/mitigation/clock_stats/",
"/sys/devices/virtual/pmic/mitigation/triggered_lvl/",
"/sys/devices/virtual/pmic/mitigation/instruction/",
};
const char *paramSuffix[] = {"_ratio", "_stats", "_lvl", ""};
const char *titleRowVal[] = {
"Source\t\tRatio",
"Source\t\tStats",
"Source\t\tLevel",
"",
};
const int eraseCnt[] = {6, 6, 4, 0};
const bool useTitleRow[] = {true, true, true, false};
std::vector<std::string> files;
std::string content;
std::string fileLocation;
std::string source;
std::string subModuleName;
std::string readout;
for (int i = 0; i < paramCount; i++) {
printTitle(titles[i]);
if (useTitleRow[i]) {
printf("%s\n", titleRowVal[i]);
}
getFilesInDir(directories[i], &files);
for (auto &file : files) {
fileLocation = std::string(directories[i]) + std::string(file);
if (!android::base::ReadFileToString(fileLocation, &content)) {
continue;
}
readout = android::base::Trim(content);
subModuleName = std::string(file);
subModuleName.erase(subModuleName.find(paramSuffix[i]), eraseCnt[i]);
if (useTitleRow[i]) {
printf("%s \t%s\n", subModuleName.c_str(), readout.c_str());
} else {
printf("%s=%s\n", subModuleName.c_str(), readout.c_str());
}
}
}
}
void dumpIrqDurationCounts() {
const char *title = "IRQ Duration Counts";
const char *colNames = "Source\t\t\t\tlt_5ms_cnt\tbt_5ms_to_10ms_cnt\tgt_10ms_cnt\tCode"
"\tCurrent Threshold (uA)\tCurrent Reading (uA)\n";
const int nonOdpmChannelCnt = 9;
const int odpmChCnt = 12;
enum Duration {
LT_5MS,
BT_5MS_10MS,
GT_10MS,
DUR_MAX,
};
const char *irqDurDirectories[] = {
"/sys/devices/virtual/pmic/mitigation/irq_dur_cnt/less_than_5ms_count",
"/sys/devices/virtual/pmic/mitigation/irq_dur_cnt/between_5ms_to_10ms_count",
"/sys/devices/virtual/pmic/mitigation/irq_dur_cnt/greater_than_10ms_count",
};
enum PowerWarn {
MAIN,
SUB,
PWRWARN_MAX,
};
const char *pwrwarnDirectories[] = {
"/sys/devices/virtual/pmic/mitigation/main_pwrwarn/",
"/sys/devices/virtual/pmic/mitigation/sub_pwrwarn/",
};
const char *lpfCurrentDirs[] = {
"/sys/devices/platform/acpm_mfd_bus@15500000/i2c-1/1-001f/s2mpg14-meter/"
"s2mpg14-odpm/iio:device1/lpf_current",
"/sys/devices/platform/acpm_mfd_bus@15510000/i2c-0/0-002f/s2mpg15-meter/"
"s2mpg15-odpm/iio:device0/lpf_current",
};
bool titlesInitialized = false;
std::vector<std::string> channelNames;
std::vector<std::string> channelData[DUR_MAX];
std::vector<std::string> pwrwarnThreshold[PWRWARN_MAX];
std::vector<std::string> pwrwarnCode[PWRWARN_MAX];
std::vector<std::string> lpfCurrentVals[PWRWARN_MAX];
std::vector<std::string> files;
std::string content;
std::string token;
std::string tokenCh;
std::string fileLocation;
for (int i = 0; i < DUR_MAX; i++) {
if (!android::base::ReadFileToString(irqDurDirectories[i], &content)) {
return;
}
std::istringstream tokenStream(content);
while (std::getline(tokenStream, token, '\n')) {
if (!titlesInitialized) {
tokenCh = token;
tokenCh.erase(tokenCh.find(':'), tokenCh.length());
channelNames.push_back(tokenCh);
}
// there is a space after the ':' which needs to be removed
token.erase(0, token.find(':') + 1);
channelData[i].push_back(token);
}
if (!titlesInitialized)
titlesInitialized = true;
}
for (int i = 0; i < PWRWARN_MAX; i++) {
getFilesInDir(pwrwarnDirectories[i], &files);
for (auto &file : files) {
fileLocation = std::string(pwrwarnDirectories[i]) + std::string(file);
if (!android::base::ReadFileToString(fileLocation, &content)) {
continue;
}
std::string readout;
readout = android::base::Trim(content);
std::string readoutThreshold = readout;
readoutThreshold.erase(0, readoutThreshold.find('=') + 1);
std::string readoutCode = readout;
readoutCode.erase(readoutCode.find('='), readoutCode.length());
pwrwarnThreshold[i].push_back(readoutThreshold);
pwrwarnCode[i].push_back(readoutCode);
}
}
for (int i = 0; i < PWRWARN_MAX; i++) {
if (!android::base::ReadFileToString(lpfCurrentDirs[i], &content)) {
continue;
}
std::istringstream tokenStream(content);
bool first = true;
while (std::getline(tokenStream, token, '\n')) {
token.erase(0, token.find(' '));
if (first) {
first = false;
continue;
}
lpfCurrentVals[i].push_back(token);
}
}
printTitle(title);
printf("%s", colNames);
for (uint i = 0; i < channelNames.size(); i++) {
std::string code = "";
std::string threshold = "";
std::string current = "";
std::string ltDataMsg = "";
std::string btDataMsg = "";
std::string gtDataMsg = "";
int pmicSel = 0;
int offset = 0;
std::string channelNameSuffix = " \t";
if (i >= nonOdpmChannelCnt) {
offset = nonOdpmChannelCnt;
if (i >= (odpmChCnt + nonOdpmChannelCnt)) {
pmicSel = 1;
offset = odpmChCnt + nonOdpmChannelCnt;
}
channelNameSuffix = "";
code = pwrwarnCode[pmicSel][i - offset];
threshold = pwrwarnThreshold[pmicSel][i - offset];
current = lpfCurrentVals[pmicSel][i - offset];
}
if (i < channelData[0].size())
ltDataMsg = channelData[0][i];
if (i < channelData[1].size())
btDataMsg = channelData[1][i];
if (i < channelData[2].size())
gtDataMsg = channelData[2][i];
std::string adjustedChannelName = channelNames[i] + channelNameSuffix;
printf("%s \t%s\t\t%s\t\t\t%s\t\t%s \t%s \t\t%s\n",
adjustedChannelName.c_str(),
ltDataMsg.c_str(),
btDataMsg.c_str(),
gtDataMsg.c_str(),
code.c_str(),
threshold.c_str(),
current.c_str());
}
}
int main() {
dumpPowerStatsTimes();
dumpAcpmStats();
dumpPowerSupplyStats();
dumpMaxFg();
dumpPowerSupplyDock();
dumpLogBufferTcpm();
dumpTcpc();
dumpPdEngine();
dumpBatteryHealth();
dumpBatteryDefend();
dumpBatteryCaretaker();
dumpChg();
dumpChgUserDebug();
dumpBatteryEeprom();
dumpChargerStats();
dumpWlcLogs();
dumpGvoteables();
dumpMitigation();
dumpMitigationStats();
dumpMitigationDirs();
dumpIrqDurationCounts();
}

1
dumpstate/item.mk Normal file
View File

@@ -0,0 +1 @@
PRODUCT_PACKAGES += dump_power

View File

@@ -1,7 +1,6 @@
[
{
"remote": "github",
"repository": "android_device_google_gs-common",
"target_path": "device/google/gs-common"
"repository": "device_google_gs101",
"target_path": "device/google/gs101"
}
]

8
evolution_common.mk Normal file
View File

@@ -0,0 +1,8 @@
#
# Copyright (C) 2024 The Evolution X Project
#
# SPDX-License-Identifier: Apache-2.0
#
# PixelParts
include packages/apps/PixelParts/device.mk

View File

@@ -0,0 +1,25 @@
//
// Copyright (C) 2022 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.
package {
default_applicable_licenses: ["Android-Apache-2.0"],
}
sh_binary {
name: "factory_post_boot",
src: "factory_post_boot.sh",
vendor: true,
sub_dir: "factory",
}

View File

@@ -0,0 +1,4 @@
#!/vendor/bin/sh
# Add adbd to nnapi vendor cgroup. (b/222226268)
echo `pidof adbd` > /proc/vendor_sched/set_task_group_nnapi

View File

@@ -0,0 +1,15 @@
package {
// See: http://go/android-license-faq
// A large-scale-change added 'default_applicable_licenses' to import
// all of the 'license_kinds' from "//device/google/gs201:device_google_gs201_license"
// to get the below license kinds:
// SPDX-license-identifier-Apache-2.0
default_applicable_licenses: [
"//device/google/gs201:device_google_gs201_license",
],
}
runtime_resource_overlay {
name: "FactoryOverlayFrameworkRes",
product_specific: true,
}

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
<!-- Pixel specific factory overlays -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.frameworkres.overlay.factory">
<application android:hasCode="false" />
<overlay
android:targetPackage="android"
android:isStatic="true"
android:priority="2"/>
</manifest>

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -0,0 +1,15 @@
package {
// See: http://go/android-license-faq
// A large-scale-change added 'default_applicable_licenses' to import
// all of the 'license_kinds' from "//device/google/gs201:device_google_gs201_license"
// to get the below license kinds:
// SPDX-license-identifier-Apache-2.0
default_applicable_licenses: [
"//device/google/gs201:device_google_gs201_license",
],
}
runtime_resource_overlay {
name: "FactoryOverlayLauncher3",
product_specific: true,
}

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
<!-- Pixel specific factory overlays -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.launcher3.overlay.factory">
<application android:hasCode="false" />
<overlay
android:targetPackage="com.android.launcher3"
android:targetName="favorites"
android:isStatic="true"
android:priority="2"/>
</manifest>

View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2009 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.
-->
<favorites xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3">
<!-- Hotseat (We use the screen as the position of the item in the hotseat) -->
<!-- Dialer, Capacity, ELabel, Language, Barcode -->
<resolve
launcher:container="-101"
launcher:screen="0"
launcher:x="0"
launcher:y="0" >
<favorite launcher:uri="#Intent;action=android.intent.action.DIAL;end" />
<favorite launcher:uri="tel:123" />
<favorite launcher:uri="#Intent;action=android.intent.action.CALL_BUTTON;end" />
</resolve>
<resolve
launcher:container="-101"
launcher:screen="4"
launcher:x="4"
launcher:y="0" >
<favorite
launcher:packageName="com.google_cte.barcodescanner"
launcher:className="com.google_cte.barcodescanner.MainActivity" />
</resolve>
</favorites>

View File

@@ -0,0 +1,15 @@
package {
// See: http://go/android-license-faq
// A large-scale-change added 'default_applicable_licenses' to import
// all of the 'license_kinds' from "//device/google/gs201:device_google_gs201_license"
// to get the below license kinds:
// SPDX-license-identifier-Apache-2.0
default_applicable_licenses: [
"//device/google/gs201:device_google_gs201_license",
],
}
runtime_resource_overlay {
name: "FactoryOverlaySettings",
product_specific: true,
}

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
<!-- Pixel specific factory overlays -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.providers.settings.overlay.factory">
<application android:hasCode="false" />
<overlay
android:targetPackage="com.android.providers.settings"
android:targetName="resources"
android:isStatic="true"
android:priority="2"/>
</manifest>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/**
* Copyright (c) 2009, 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.
*/
-->
<resources>
<integer name="def_lockscreen_sounds_enabled">0</integer>
<bool name="def_lockscreen_disabled">true</bool>
<bool name="def_dtmf_tones_enabled">false</bool>
<bool name="def_sound_effects_enabled">false</bool>
<bool name="def_charging_sounds_enabled">false</bool>
<string name="def_immersive_mode_confirmations" translatable="false">confirmed</string>
</resources>

85
factory_common.mk Normal file
View File

@@ -0,0 +1,85 @@
#
# Copyright 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.
#
$(call inherit-product, device/google/gs201/aosp_common.mk)
$(call inherit-product-if-exists, vendor/google_devices/gs201/factory/pixel/device-factory.mk)
PRODUCT_PROPERTY_OVERRIDES += service.adb.root=1 \
ro.vendor.factory=1
# Factory Libraries of Audio
PRODUCT_PACKAGES += audioroute libaudioroutelite
# Enable fatp by default for factory builds
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
persist.vendor.camera.fatp.enable=1
# Disable camera related features for factory builds
PRODUCT_PROPERTY_OVERRIDES += \
vendor.camera.debug.bypass_face_ssd_processor=1 \
vendor.camera.debug.csi_ebuf_enable=0 \
vendor.camera.debug.enable_face_detection=0 \
vendor.camera.debug.force_dpm_on=0 \
vendor.camera.debug.force_eis_on=0 \
vendor.camera.debug.force_eaf_on=0 \
vendor.camera.debug.force_mesh_warp_on=0 \
vendor.camera.debug.force_rectiface_node_on=0 \
vendor.camera.debug.force_steadiface_on=0 \
vendor.camera.debug.force_tnr_on=0 \
vendor.camera.debug.force_segmentation_node_on=0 \
vendor.camera.debug.enable_saliency=0 \
vendor.camera.debug.force_local_tone_mapping_on=0 \
vendor.camera.debug.local_tone_mapping_controller_v1.mode=0
# Disable ScreenDecorations for factory builds
PRODUCT_PROPERTY_OVERRIDES += \
debug.disable_screen_decorations=true
PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.set_idle_timer_ms?=80
PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.set_touch_timer_ms=200
PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.set_display_power_timer_ms=1000
PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.use_content_detection_for_refresh_rate=true
# factory should always has SELinux permissive
BOARD_BOOTCONFIG += androidboot.selinux=permissive
BOARD_KERNEL_CMDLINE += androidboot.selinux=permissive
# Disable DebugFS restrictions in factory builds
PRODUCT_SET_DEBUGFS_RESTRICTIONS := false
# Disable Bluetooth as default in factory build
DEVICE_PACKAGE_OVERLAYS += device/google/gs201/overlay-factory
PRODUCT_COPY_FILES += \
device/google/gs201/conf/init.factory.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.factory.rc
BOARD_SEPOLICY_DIRS += hardware/google/pixel-sepolicy/factory_boost
# Add factory-friendly changes
PRODUCT_PACKAGES += \
FactoryOverlaySettings \
FactoryOverlayLauncher3 \
FactoryOverlayFrameworkRes \
factory_post_boot
# To prevent rebooting due to crashing services
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
init.svc_debug.no_fatal.zygote=true \
persist.device_config.configuration.disable_rescue_party=true
# PixelLogger for RF testing
PRODUCT_PACKAGES_ENG += \
PixelLogger \

View File

@@ -0,0 +1,18 @@
# ----------------------------
# Add feature flags below
# ----------------------------
FPC_CONFIG_BUILD_VERSION=33
FPC_CONFIG_CAPACITIVE=1
FPC_CONFIG_MAX_NR_TEMPLATES=5
FPC_CONFIG_SENSE_TOUCH_CALIBRATION_PATH=/data/fpc/calibration_sense_touch.dat
FPC_CONFIG_TA_FS=1
FPC_DEFECTIVE_PIXEL_LIST_SIZE=5000
FPC_SENSOR_SDK_LOG_LEVEL=3
FPC_TEE_RUNTIME=TRUSTY
LIBFPC_NAME=libfpc1541_S_nav_debug.a
FPC_CONFIG_DEBUG=1
FPC_CONFIG_PRODUCT_DEFAULT=FPC_PRODUCT_TYPE1541_S
#
# File included from device/<manufacture>/<>/<device>.mk
# Packages to include into the build

View File

@@ -0,0 +1,21 @@
# ----------------------------
# Add feature flags below
# ----------------------------
FPC_CONFIG_BUILD_VERSION=33
FPC_CONFIG_CAPACITIVE=1
FPC_CONFIG_MAX_NR_TEMPLATES=5
FPC_CONFIG_NAVIGATION=0
FPC_CONFIG_SENSE_TOUCH_CALIBRATION_PATH=/data/fpc/calibration_sense_touch.dat
FPC_CONFIG_SENSORTEST=1
FPC_CONFIG_TA_FS=1
FPC_DEFECTIVE_PIXEL_LIST_SIZE=5000
FPC_SENSOR_SDK_LOG_LEVEL=3
FPC_TEE_RUNTIME=TRUSTY
LIBFPC_NAME=libfpc1541_S_nav_debug.a
FPC_CONFIG_DEBUG=1
FPC_CONFIG_ENGINEERING=1
FPC_CONFIG_PRODUCT_DEFAULT=FPC_PRODUCT_TYPE1541_S
#
# File included from device/<manufacture>/<>/<device>.mk
# Packages to include into the build

View File

@@ -0,0 +1,27 @@
package {
// See: http://go/android-license-faq
// A large-scale-change added 'default_applicable_licenses' to import
// all of the 'license_kinds' from "device_google_gs101_license"
// to get the below license kinds:
// SPDX-license-identifier-Apache-2.0
default_applicable_licenses: ["device_google_gs201_license"],
}
cc_binary {
srcs: [
"fp_test.cpp"
],
local_include_dirs: ["."],
name: "fp_test",
shared_libs: [
"liblog",
"libdl",
"libutils",
"libcutils",
"libhidlbase",
"android.hardware.biometrics.fingerprint@2.1"
],
proprietary:true,
}

View File

@@ -0,0 +1,200 @@
#include <stdint.h>
#include <stdio.h>
#include <log/log.h>
#include "fp_test.h"
#include <cutils/properties.h>
#define TAG "[FP_TEST] "
#define LOGI(format,...) ALOGI(TAG format,##__VA_ARGS__)
#define LOGD(format,...) ALOGD(TAG format,##__VA_ARGS__)
#define LOGE(format,...) ALOGE(TAG format,##__VA_ARGS__)
#define CLOGI(format,...) printf(TAG format,##__VA_ARGS__)
#define CLOGD(format,...) printf(TAG format,##__VA_ARGS__)
#define CLOGE(format,...) printf(TAG format,##__VA_ARGS__)
#define LOGI_BOTH(format,...) { \
ALOGI(TAG format,##__VA_ARGS__) \
prinft(TAG format, ##__VA_ARGS__) \
} \
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
#define STRING_SIZE 32
#define FPS_SRV_PROP "fps_hal"
#define FPS_SRV_FULL_PROP "init.svc.fps_hal"
#define FPS_SRV_STATUS_PROP "vendor.fp.status"
enum ErrorType {
OK,
ERROR
};
static const char* const cmdUsage[] = {
"-------fp_test tool usage--------",
"fp_test -e: Enable FPS service",
"fp_test -d: Disable FPS service",
"fp_test -i: Idle Mode",
"fp_test -n: Navigation Mode",
"fp_test -a: Authentication Mode",
"---------------------------------",
};
void toolUsage(void) {
int numCmdUsage = ARRAY_SIZE(cmdUsage);
for(int i = 0; i< numCmdUsage; i++)
CLOGI("%s\n",cmdUsage[i]);
}
int checkParameter(int num, char **strArray)
{
int ret = 0;
char parameter[STRING_SIZE] = {0,};
if (num != 2 || (strlen(strArray[1]) > STRING_SIZE)) {
return -ERROR;
}
strcpy(parameter, strArray[1]);
if (!strncmp(parameter, "-a", sizeof("-a"))) {
CLOGI("Start Authentication Mode!\n");
LOGI("Start Authentication Mode!\n");
ret = 'a';
} else if (!strncmp(parameter, "-n", sizeof("-n"))) {
CLOGI("Start Navigation Mode!\n");
LOGI("Start Navigation Mode!\n");
ret = 'n';
} else if (!strncmp(parameter, "-i", sizeof("-i"))) {
CLOGI("Start Idle Mode!\n");
LOGI("Start Idle Mode!\n");
ret = 'n';
} else if (!strncmp(parameter, "-e", sizeof("-e"))) {
CLOGI("Start enabling FPS service!\n");
LOGI("Start enabling FPS service!\n");
ret = 'e';
} else if (!strncmp(parameter, "-d", sizeof("-d"))) {
CLOGI("Start disabling FPS service!\n");
LOGI("Start disabling FPS service!\n");
ret = 'd';
} else {
ret = -ERROR;
}
return ret;
}
int enable_disable_fps(bool set)
{
int ret = 0;
// Set property to enable/disable fingerprint service
if (set == true) {
ret = property_set("ctl.start", FPS_SRV_PROP);
} else {
ret = property_set("ctl.stop", FPS_SRV_PROP);
}
if (ret != 0) {
CLOGE("Failed to %s FPS service\n", set? "enable" : "disable");
LOGE("Failed to %s FPS service\n", set? "enable" : "disable");
return -ERROR;
}
return ret;
}
int run_auth_cmd() {
RequestStatus hidlRet;
uint64_t operationId = 0;
uint32_t gid = 0;
char tempbuf[PROPERTY_VALUE_MAX];
property_get(FPS_SRV_FULL_PROP, tempbuf, 0);
LOGE("%s : current fp service status is %s!\n",__func__, tempbuf);
if (!strncmp(tempbuf, "stopped", strlen("stopped"))) {
return -ERROR;
}
sp<IBiometricsFingerprint> service = IBiometricsFingerprint::getService();
if (service == nullptr) {
CLOGE("%s : Fail to get FingerprintService!\n",__func__);
LOGE("%s : Fail to get FingerprintService!\n",__func__);
return -ERROR;
}
hidlRet = service->authenticate(operationId, gid);
if (hidlRet == RequestStatus::SYS_OK) {
return OK;
} else {
return -ERROR;
}
}
int run_cancel_cmd() {
RequestStatus hidlRet;
char tempbuf[PROPERTY_VALUE_MAX];
property_get(FPS_SRV_FULL_PROP, tempbuf, 0);
LOGE("%s : current fp service status is %s!\n",__func__, tempbuf);
if (!strncmp(tempbuf, "stopped", strlen("stopped"))) {
return -ERROR;
}
sp<IBiometricsFingerprint> service = IBiometricsFingerprint::getService();
if (service == nullptr) {
CLOGE("%s : Fail to get FingerprintService!\n",__func__);
LOGE("%s : Fail to get FingerprintService!\n",__func__);
return -ERROR;
}
hidlRet = service->cancel();
if (hidlRet == RequestStatus::SYS_OK) {
return OK;
} else {
return -ERROR;
}
}
int main(int argc, char *argv[])
{
int input=0;
int32_t ret = 0;
LOGI("%s",__func__);
input = checkParameter(argc, argv);
if (input == -ERROR){
LOGE("Invalid Parameter\n");
CLOGE("Invalid Parameter\n");
toolUsage();
return -ERROR;
}
switch (input) {
case 'e':
CLOGI("%s: Enable fingerprint service\n",__func__);
LOGI("%s: Enable fingerprint service\n",__func__);
ret = enable_disable_fps(true);
break;
case 'd':
CLOGI("%s: Disable fingerprint service\n",__func__);
LOGI("%s: Disable fingerprint service\n",__func__);
ret = enable_disable_fps(false);
break;
case 'a':
ret = run_auth_cmd();
break;
// For the rear fingerprint module, calling cancel() will go to the
// navigation mode by default.
// For other device not enabling naivgation feature, default mode will
// be "Idle" by invoking cancel().
case 'n':
case 'i':
default:
ret = run_cancel_cmd();
break;
}
if (ret != OK)
CLOGE("FP HIDL fail to excute cmd '%c'\n", input);
else
CLOGI("FP HIDL excute cmd '%c' successfully\n", input);
return ret;
}

View File

@@ -0,0 +1,16 @@
#ifndef FP_TEST
#define FP_TEST
#include <android/hardware/biometrics/fingerprint/2.1/IBiometricsFingerprint.h>
#include <android/hardware/biometrics/fingerprint/2.1/IBiometricsFingerprintClientCallback.h>
using android::hardware::biometrics::fingerprint::V2_1::IBiometricsFingerprint;
using android::hardware::biometrics::fingerprint::V2_1::IBiometricsFingerprintClientCallback;
using android::hardware::biometrics::fingerprint::V2_1::RequestStatus;
using android::sp;
int main(int argc, char *argv[]);
void toolUsage(void);
#endif //FP_TEST

View File

@@ -0,0 +1,8 @@
# Fingerprint
include device/google/gs201/fingerprint/fpc1540/fingerprint_config.mk
PRODUCT_PACKAGES += \
android.hardware.biometrics.fingerprint@2.1-service.fpc \
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.fingerprint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.fingerprint.xml

View File

@@ -0,0 +1,10 @@
# Fingerprint
include device/google/gs201/fingerprint/fpc1540/fingerprint_config_factory.mk
PRODUCT_PACKAGES += \
fpc_tee_test\
SensorTestTool \
PRODUCT_PACKAGES += \
com.fingerprints.extension.xml \
com.fingerprints.extension \

1
firmware/BCM.btaddr Normal file
View File

@@ -0,0 +1 @@
22:22:3b:ff:0d:50

Binary file not shown.

22
init.display.sh Executable file
View File

@@ -0,0 +1,22 @@
#!/vendor/bin/sh
modules_dir=
for f in /vendor/lib/modules/*/modules.dep /vendor/lib/modules/modules.dep; do
if [[ -f "$f" ]]; then
modules_dir="$(dirname "$f")"
break
fi
done
if [[ -z "${modules_dir}" ]]; then
echo "Unable to locate kernel modules directory" 2>&1
exit 1
fi
panel_drv=`getprop ro.boot.primary_panel_drv`
if [[ -z "$panel_drv" ]]; then
panel_drv="panel-samsung-emul"
fi
modprobe -d "${modules_dir}" exynos-drm.ko
modprobe -d "${modules_dir}" $panel_drv.ko

View File

@@ -0,0 +1,24 @@
#
# Copyright (C) 2018 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.
#
on property:sys.boot_completed=1 && property:persist.vendor.limit.wlc.current=1
write /sys/class/power_supply/dc/current_max 75000
on property:sys.boot_completed=1 && property:persist.vendor.limit.wlc.current=0
write /sys/class/power_supply/dc/current_max 1100000
on property:vendor.disable.wlc=1
write /sys/class/power_supply/wireless/online 0

View File

@@ -1,7 +1,17 @@
//
// SPDX-FileCopyrightText: 2018 The Android Open Source Project
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2018 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.
package {
// See: http://go/android-license-faq

42
lineage_common.mk Normal file
View File

@@ -0,0 +1,42 @@
#
# SPDX-FileCopyrightText: 2021-2024 The LineageOS Project
# SPDX-FileCopyrightText: 2021-2024 The Calyx Institute
# SPDX-License-Identifier: Apache-2.0
#
# Overlays
DEVICE_PACKAGE_OVERLAYS += device/google/gs201/overlay-lineage
# AiAi Config
PRODUCT_COPY_FILES += \
device/google/gs201/allowlist_com.google.android.as.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/sysconfig/allowlist_com.google.android.as.xml
# Camera
PRODUCT_PRODUCT_PROPERTIES += \
ro.vendor.camera.extensions.package=com.google.android.apps.camera.services \
ro.vendor.camera.extensions.service=com.google.android.apps.camera.services.extensions.service.PixelExtensions
# Google Assistant
PRODUCT_PRODUCT_PROPERTIES += ro.opa.eligible_device=true
# Lineage Health
include hardware/google/pixel/lineage_health/device.mk
$(call soong_config_set,lineage_health,charging_control_supports_deadline,true)
$(call soong_config_set,lineage_health,charging_control_supports_limit,true)
$(call soong_config_set,lineage_health,charging_control_supports_toggle,false)
# Linker config
PRODUCT_VENDOR_LINKER_CONFIG_FRAGMENTS += \
device/google/gs201/linker.config.json
# Parts
PRODUCT_PACKAGES += \
GoogleParts
# Tethering
PRODUCT_PACKAGES += \
TetheringOverlay
# Touch
include hardware/google/pixel/touch/device.mk

175
location/gps.cer Normal file
View File

@@ -0,0 +1,175 @@
-----BEGIN CERTIFICATE-----
MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI
2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx
1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ
q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz
tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ
vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP
BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV
5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY
1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4
NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG
Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91
8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe
pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
MrY=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFZTCCA02gAwIBAgIPAWv6o5fPZQ5hxva1vuNrMA0GCSqGSIb3DQEBCwUAMDgx
CzAJBgNVBAYTAkpQMRcwFQYDVQQKDA5SYWt1dGVuIE1vYmlsZTEQMA4GA1UEAwwH
Um9vdCBDQTAeFw0xOTA3MTYxMTU1NDJaFw0yOTA3MTMxMTU1NDJaMD4xCzAJBgNV
BAYTAkpQMRcwFQYDVQQKEw5SYWt1dGVuIE1vYmlsZTEWMBQGA1UEAxMNREMgSXNz
dWluZyBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAObjAbQ8TkzF
A+/WvSE6fzDf+rlvBKY1dJJbiJ2/j0lc+tj56dE7+BhZ2JVmAYIYfEoUw69dwxTR
44EdZln3ZVFmMuOdfxvF9A46pMKzH1skr8ErDgjNyJ9f/JOuQ29p/7BvLC55aRzk
yj99BYdzJWKs+5W7jQlv7/HyJ/PQ+rUEBOx4o/YiTucDFduWdV6/x5mcEbKD3ufL
66vUEf3MHGegDkOWAMTchl1RmaYDlf3IMsXC7M2bFPFa/9y/vzaaY6EhnJ861co6
rkOhTZe/kJZwqQYFmWczBPZK/9zRy3C1zA09tCBk+CDNBrNXe+3dMLFmnW4npxUQ
oceTPhaaDo5lA6HkkARwVWLrporFZ2B/th2Bqtu6uObLSB6JMA2jxmKwKukM8/jp
C9tKV9X03rHQIQultc63rivPdgQvqYgW1PVdzV1a3pZEMk5zv257+fxgfUGzfUh7
tx0OY+BkykSP6ZK/BsbI/BY+rsS0L/0lmC22NU1p+qVeN3ZRHoqntB+FymaBfQ3/
yfKkDNfnMua5GzLyyYGYUDDx71rtfrs3hGDiwjvE4B0IvsU0E7Oerk5gLqx8t0q/
MmhI+CJJS1bH2sRBMcqfRAv+eyByFsvLY7Er/ztveaabX9xEwyPNFOcU+SZMhipv
EUKmUcOAHxzx4HbYEFyM0Z7WgUdlTd1xAgMBAAGjZjBkMB8GA1UdIwQYMBaAFPUI
BlLFno+y5xdHlCX349iVyS75MB0GA1UdDgQWBBQzVhTSCf8F31Zf0Bu661qymMko
JzAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADANBgkqhkiG9w0B
AQsFAAOCAgEADQEufjma/6fT/Do4Fh13lZhsowHSsGv5sFYly6224GsciE80ZwYg
R4EK/TAR0jorBXsu6sQc51pZ5SSHhIxfo2frfprTPaaWN6cZwfrb6UcnD/FaZ1jP
HzWrI3kRxG9JCDffzE8uMf8Rnc69n1j+TBerk4Ix3Zui2TaaF6LVceJ4RgeNkZl0
OFkGGFruHz/d83q7A6YjgN0iwMEabdtKH7Sq27LqGPeCS8NuGlrziNAxktdwaYlN
D5t6ntM/1nHYPmVqdioEU9vAnyB3BiXOlITPHEEMOSlItcUsJ6rN5DZJaJgkBxvN
Qdi6wmaDlxy8XFyy4KGFKWAl17FlfpqW5VtYQJ4aDpibGlGqamg0vm+IJDIGPlOs
KQcxG17cOw4MCflAtnzHKHBn52DegQKwxev2ZpqdwVw/NqPq0yTNEbCRqEyiq7+H
ljKEFiEjEjeXTcqR4DoCseA5UgcriuriV0OCvr8KTlviV4FEUu+IA9ut8YIvf2of
Zz0z8rO4H+Rb4tMi/yBRM09x3rEW4hXwO0qpCBNBa0wEJBxufF3f6l9efEle+YTR
XS92gutaoVluqMfRSJckjwWokToi32/FvF79guZymD0qHkOSi5dewsIW7zsdobvv
t2CWLfTAb9cx222ELBpVPkfcgUKfF4RCGWPzuAlK6OueuDrInOiz8ag=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFUjCCAzqgAwIBAgICBpAwDQYJKoZIhvcNAQELBQAwODELMAkGA1UEBhMCSlAx
FzAVBgNVBAoMDlJha3V0ZW4gTW9iaWxlMRAwDgYDVQQDDAdSb290IENBMB4XDTE5
MDcxNjEwNTkwMVoXDTM5MDcxNTEwNTkwMVowODELMAkGA1UEBhMCSlAxFzAVBgNV
BAoMDlJha3V0ZW4gTW9iaWxlMRAwDgYDVQQDDAdSb290IENBMIICIjANBgkqhkiG
9w0BAQEFAAOCAg8AMIICCgKCAgEAqiPMbNudotG8afkk5Fwo2QdDcFFmC+qGpGjw
yQs57QtGPRk1HsIhZFfr6zn8t1tZw6Zo+A0biFA7d2N93nYsseHBy/bZlhhOL+Js
Jb907UM09L5xaJIgnbFYVT1QjtB7ksLAy3rHpdSKiggfT1ynwM/u6wIdWRSx24QU
Vxpq5iFpVj041+/RnpCPASL5pSnbYZKQyOb/XsOaR+hz7aSjwiUzk2cRjAmRqYxY
qYVe135IAy377inJRtUPvi3IhtmUHJToiMLBH5tChkjkIpdRG1lVIj4vGdzrIb+Q
Kvg/k7BDVZ3sstsLvJ8evNonBzrqcr80ek/X+HFrgY/3M1VEru4ohLAiA877CuuG
UAfrxFh9qjP1yue+dlrQWk+WHMbGMzKI1zCKEMphJatyNHfpRtD8LUWtLV96DD78
qLwQwrSYrEMd2u/akeBFKINYWqpqkVBhSsV3eukXVIdSbtSAxZNv+4m6QddEcUvG
2ZLf+yCf2tl+LPGXNL08vwMVbQqcDw8m+nDP4vu0VUixddyoqnnDlWOoQESuQFQ1
IqYFQhRPs2dFRf5TJzkmbqRUXbaPxsrKGjTtVpPgENbv40nyRGyBbl1CzqpBFEp5
7w4MPYDIzWKYbRyCnUE5WScRBFmym7242KA3SOfkylzGMb8KGJxohVME+7oMbNf5
EjLWVgECAwEAAaNmMGQwHwYDVR0jBBgwFoAU9QgGUsWej7LnF0eUJffj2JXJLvkw
HQYDVR0OBBYEFPUIBlLFno+y5xdHlCX349iVyS75MA4GA1UdDwEB/wQEAwIBBjAS
BgNVHRMBAf8ECDAGAQH/AgEBMA0GCSqGSIb3DQEBCwUAA4ICAQCDGIeYrtivFt3p
8k5vXKFUT072C7wMvfrAGYCYgIdUthWCqJoMwnG3Fsg7Ngu70La7ESBzEKpnpPWz
eIdnREJkNP9iqiKHXnaUV2P/21AS1q6enVKBFOl7dYiVjqOZ+vac3a1UjLWkvm0g
x4sg/f3PpiEzZM7ecnQYk2wfMSq8Jw0w1Lf0SEeoYZTkf12cqSJVSa/G7gEdL/Cn
LO3yyBq0KPNdd87eIfvCLJj55UJ5dCr0JXRTUteBvJwflbPXmOqfI8fA05fwlJZS
o1SBpMI9cEBwaPXQM9CPNKaWLvyOR1KpviRzbCnaKf44Fs2OuZboo3avZrC9eUoU
HU2HKXRj8UMRlFeCdNugbOdGyK+CpXwMHVtIrtpf0iOUqo0rOekgnUSNi9qyjD1g
IV3Y/NLVl9fqe8q66IWUn8NYndxigMKWcMCBFUjfP0yMZeqSHFiIv7zk9PuV/62k
Yele7cK9iHnEUwWBj6VCEs6pZBS1QSmhRw3GWlSDc/gHXd38PG20zH7xg4z2H9Rc
Op9P1ZW2kjqv5D2+q/qtaePAyHn3B05UZrQYUmx7LaHNO7op6dZgCdoR0sVsR+Fc
Zyr0AhgiuTWrjtUEOGx2qJVwAsHkpqtlN+DaGT08dT64LvIf0bfGvmtm++/WEDWJ
HInwg85pGm+sEkYbYFRBD0woPBsL3g==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQsw
CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURp
Z2lDZXJ0IFRMUyBFQ0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2
MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ
bmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQgUm9vdCBHNTB2MBAG
ByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1TzvdlHJS
7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp
0zVozptjn4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICIS
B4CIfBFqMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49
BAMDA2gAMGUCMQCJao1H5+z8blUD2WdsJk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQ
LgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIxAJSdYsiJvRmEFOml+wG4
DXZDjC5Ty3zfDBeWUA==
-----END CERTIFICATE-----

97
manifest-gralloc3.xml Normal file
View File

@@ -0,0 +1,97 @@
<manifest version="1.0" type="device" target-level="7">
<hal format="hidl">
<name>android.hardware.graphics.allocator</name>
<transport>hwbinder</transport>
<version>2.0</version>
<interface>
<name>IAllocator</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<name>android.hardware.graphics.mapper</name>
<transport arch="32+64">passthrough</transport>
<version>2.0</version>
<interface>
<name>IMapper</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<name>android.hardware.graphics.composer</name>
<transport>hwbinder</transport>
<version>2.4</version>
<interface>
<name>IComposer</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<name>android.hardware.memtrack</name>
<transport>hwbinder</transport>
<version>1.0</version>
<interface>
<name>IMemtrack</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<name>android.hardware.drm</name>
<transport>hwbinder</transport>
<version>1.0</version>
<interface>
<name>ICryptoFactory</name>
<instance>default</instance>
</interface>
<interface>
<name>IDrmFactory</name>
<instance>default</instance>
</interface>
<fqname>@1.3::ICryptoFactory/clearkey</fqname>
<fqname>@1.3::IDrmFactory/clearkey</fqname>
<fqname>@1.3::ICryptoFactory/widevine</fqname>
<fqname>@1.3::IDrmFactory/widevine</fqname>
</hal>
<hal format="aidl">
<name>android.hardware.dumpstate</name>
<interface>
<name>IDumpstateDevice</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<name>android.hardware.bluetooth.audio</name>
<transport>hwbinder</transport>
<version>2.1</version>
<interface>
<name>IBluetoothAudioProvidersFactory</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl">
<name>android.hardware.boot</name>
<fqname>IBootControl/default</fqname>
</hal>
<hal format="hidl">
<name>android.hardware.sensors</name>
<transport>hwbinder</transport>
<version>1.0</version>
<interface>
<name>ISensors</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<name>android.hardware.neuralnetworks</name>
<transport>hwbinder</transport>
<fqname>@1.3::IDevice/google-edgetpu</fqname>
</hal>
<hal format="aidl">
<name>vendor.google.google_battery</name>
<version>2-3</version>
<interface>
<name>IGoogleBattery</name>
<instance>default</instance>
</interface>
</hal>
</manifest>

6
manifest.xml Normal file
View File

@@ -0,0 +1,6 @@
<manifest version="1.0" type="device" target-level="7">
<hal format="aidl">
<name>android.hardware.boot</name>
<fqname>IBootControl/default</fqname>
</hal>
</manifest>

13
manifest_media.xml Normal file
View File

@@ -0,0 +1,13 @@
<manifest version="1.0" type="device">
<!-- AIDL fragment -->
<hal format="aidl">
<name>android.hardware.media.c2</name>
<version>1</version>
<fqname>IComponentStore/default1</fqname>
</hal>
<hal format="aidl">
<name>android.hardware.media.c2</name>
<version>1</version>
<fqname>IComponentStore/default</fqname>
</hal>
</manifest>

18
manifest_media_aosp.xml Normal file
View File

@@ -0,0 +1,18 @@
<manifest version="1.0" type="device">
<!-- HIDL fragment -->
<hal format="hidl">
<name>android.hardware.media.c2</name>
<transport>hwbinder</transport>
<version>1.2</version>
<interface>
<name>IComponentStore</name>
<instance>default</instance>
</interface>
</hal>
<!-- AIDL fragment -->
<hal format="aidl">
<name>android.hardware.media.c2</name>
<version>1</version>
<fqname>IComponentStore/default</fqname>
</hal>
</manifest>

53
manifest_radio_ds.xml Normal file
View File

@@ -0,0 +1,53 @@
<manifest version="1.0" type="device">
<hal format="hidl">
<name>android.hardware.radio</name>
<transport>hwbinder</transport>
<fqname>@1.2::ISap/slot1</fqname>
<fqname>@1.2::ISap/slot2</fqname>
</hal>
<hal format="aidl">
<name>android.hardware.radio.config</name>
<fqname>IRadioConfig/default</fqname>
</hal>
<hal format="aidl">
<name>android.hardware.radio.data</name>
<fqname>IRadioData/slot1</fqname>
<fqname>IRadioData/slot2</fqname>
</hal>
<hal format="aidl">
<name>android.hardware.radio.messaging</name>
<fqname>IRadioMessaging/slot1</fqname>
<fqname>IRadioMessaging/slot2</fqname>
</hal>
<hal format="aidl">
<name>android.hardware.radio.modem</name>
<fqname>IRadioModem/slot1</fqname>
<fqname>IRadioModem/slot2</fqname>
</hal>
<hal format="aidl">
<name>android.hardware.radio.network</name>
<fqname>IRadioNetwork/slot1</fqname>
<fqname>IRadioNetwork/slot2</fqname>
</hal>
<hal format="aidl">
<name>android.hardware.radio.sim</name>
<fqname>IRadioSim/slot1</fqname>
<fqname>IRadioSim/slot2</fqname>
</hal>
<hal format="aidl">
<name>android.hardware.radio.voice</name>
<fqname>IRadioVoice/slot1</fqname>
<fqname>IRadioVoice/slot2</fqname>
</hal>
<hal format="hidl">
<name>android.hardware.secure_element</name>
<transport>hwbinder</transport>
<fqname>@1.2::ISecureElement/SIM1</fqname>
<fqname>@1.2::ISecureElement/SIM2</fqname>
</hal>
<hal format="hidl">
<name>vendor.samsung_slsi.telephony.hardware.radioExternal</name>
<transport>hwbinder</transport>
<fqname>@1.1::IOemSlsiRadioExternal/rilExternal</fqname>
</hal>
</manifest>

82
media_codecs.xml Normal file
View File

@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright (C) 2012 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.
-->
<!--
<!DOCTYPE MediaCodecs [
<!ELEMENT Include EMPTY>
<!ATTLIST Include href CDATA #REQUIRED>
<!ELEMENT MediaCodecs (Decoders|Encoders|Include)*>
<!ELEMENT Decoders (MediaCodec|Include)*>
<!ELEMENT Encoders (MediaCodec|Include)*>
<!ELEMENT MediaCodec (Type|Quirk|Include)*>
<!ATTLIST MediaCodec name CDATA #REQUIRED>
<!ATTLIST MediaCodec type CDATA>
<!ELEMENT Type EMPTY>
<!ATTLIST Type name CDATA #REQUIRED>
<!ELEMENT Quirk EMPTY>
<!ATTLIST Quirk name CDATA #REQUIRED>
]>
There's a simple and a complex syntax to declare the availability of a
media codec:
A codec that properly follows the OpenMax spec and therefore doesn't have any
quirks and that only supports a single content type can be declared like so:
<MediaCodec name="OMX.foo.bar" type="something/interesting" />
If a codec has quirks OR supports multiple content types, the following syntax
can be used:
<MediaCodec name="OMX.foo.bar" >
<Type name="something/interesting" />
<Type name="something/else" />
...
<Quirk name="requires-allocate-on-input-ports" />
<Quirk name="requires-allocate-on-output-ports" />
<Quirk name="output-buffers-are-unreadable" />
</MediaCodec>
Only the three quirks included above are recognized at this point:
"requires-allocate-on-input-ports"
must be advertised if the component does not properly support specification
of input buffers using the OMX_UseBuffer(...) API but instead requires
OMX_AllocateBuffer to be used.
"requires-allocate-on-output-ports"
must be advertised if the component does not properly support specification
of output buffers using the OMX_UseBuffer(...) API but instead requires
OMX_AllocateBuffer to be used.
"output-buffers-are-unreadable"
must be advertised if the emitted output buffers of a decoder component
are not readable, i.e. use a custom format even though abusing one of
the official OMX colorspace constants.
Clients of such decoders will not be able to access the decoded data,
naturally making the component much less useful. The only use for
a component with this quirk is to render the output to the screen.
Audio decoders MUST NOT advertise this quirk.
Video decoders that advertise this quirk must be accompanied by a
corresponding color space converter for thumbnail extraction,
matching surfaceflinger support that can render the custom format to
a texture and possibly other code, so just DON'T USE THIS QUIRK.
-->
<MediaCodecs>
<Include href="media_codecs_google_telephony.xml" />
</MediaCodecs>

251
media_codecs_aosp_c2.xml Normal file
View File

@@ -0,0 +1,251 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2018 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.
-->
<MediaCodecs>
<Settings>
<Setting name="supports-multiple-secure-codecs" value="true" />
<Setting name="supports-secure-with-non-secure-codec" value="true" />
</Settings>
<Decoders>
<MediaCodec name="c2.exynos.h264.decoder" type="video/avc">
<Limit name="size" min="32x32" max="3840x2160" />
<Limit name="alignment" value="2x2" />
<Limit name="block-size" value="16x16" />
<Limit name="block-count" range="1-32400" />
<Limit name="blocks-per-second" min="1" max="3888000" />
<Limit name="bitrate" range="1-120000000" />
<Limit name="performance-point-1920x1080" range="240" />
<Limit name="performance-point-3840x2160" range="120" />
<Limit name="concurrent-instances" max="16" />
<Feature name="adaptive-playback" />
<Feature name="can-swap-width-height" value="1" />
<Feature name="low-latency" />
</MediaCodec>
<MediaCodec name="c2.exynos.h264.decoder.secure" type="video/avc">
<Limit name="size" min="32x32" max="3840x2160" />
<Limit name="alignment" value="2x2" />
<Limit name="block-size" value="16x16" />
<Limit name="block-count" range="1-32400" />
<Limit name="blocks-per-second" min="1" max="3888000" />
<Limit name="bitrate" range="1-120000000" />
<Limit name="performance-point-1920x1080" range="240" />
<Limit name="performance-point-3840x2160" range="120" />
<Limit name="concurrent-instances" max="2" />
<Feature name="adaptive-playback" />
<Feature name="secure-playback" required="true" />
<Feature name="can-swap-width-height" value="1" />
<Feature name="low-latency" />
</MediaCodec>
<MediaCodec name="c2.exynos.hevc.decoder" type="video/hevc" >
<Limit name="size" min="64x64" max="3840x2176" />
<Limit name="alignment" value="2x2" />
<Limit name="block-size" value="16x16" />
<Limit name="block-count" range="1-32640" />
<Limit name="blocks-per-second" min="1" max="3916800" />
<Limit name="bitrate" range="1-120000000" />
<Limit name="performance-point-1920x1080" range="240" />
<Limit name="performance-point-3840x2160" range="120" />
<Limit name="concurrent-instances" max="16" />
<Feature name="adaptive-playback" />
<Feature name="can-swap-width-height" value="1" />
<Feature name="low-latency" />
</MediaCodec>
<MediaCodec name="c2.exynos.hevc.decoder.secure" type="video/hevc" >
<Limit name="size" min="64x64" max="3840x2160" />
<Limit name="alignment" value="2x2" />
<Limit name="block-size" value="16x16" />
<Limit name="block-count" range="1-32400" />
<Limit name="blocks-per-second" min="1" max="3888000" />
<Limit name="bitrate" range="1-120000000" />
<Limit name="performance-point-1920x1080" range="240" />
<Limit name="performance-point-3840x2160" range="120" />
<Limit name="concurrent-instances" max="2" />
<Feature name="adaptive-playback" />
<Feature name="secure-playback" required="true" />
<Feature name="can-swap-width-height" value="1" />
<Feature name="low-latency" />
</MediaCodec>
<MediaCodec name="c2.exynos.mpeg4.decoder" type="video/mp4v-es">
<Limit name="size" min="32x32" max="2048x2048" />
<Limit name="alignment" value="2x2" />
<Limit name="block-size" value="16x16" />
<Limit name="block-count" range="1-16384" />
<Limit name="blocks-per-second" min="1" max="979200" />
<Limit name="bitrate" range="1-80000000" />
<Limit name="performance-point-1280x720" range="240" />
<Limit name="performance-point-1920x1080" range="120" />
<Limit name="concurrent-instances" max="16" />
<Feature name="adaptive-playback" />
<Feature name="can-swap-width-height" value="1" />
<Feature name="low-latency" />
</MediaCodec>
<MediaCodec name="c2.exynos.h263.decoder" type="video/3gpp">
<Limit name="size" min="32x32" max="2048x1152" />
<Limit name="alignment" value="4x4" />
<Limit name="block-size" value="16x16" />
<Limit name="block-count" range="1-9216" />
<Limit name="blocks-per-second" min="1" max="979200" />
<Limit name="bitrate" range="1-80000000" />
<Limit name="performance-point-1280x720" range="240" />
<Limit name="performance-point-1920x1080" range="120" />
<Limit name="concurrent-instances" max="16" />
<Feature name="adaptive-playback" />
<Feature name="low-latency" />
</MediaCodec>
<MediaCodec name="c2.exynos.vp8.decoder" type="video/x-vnd.on2.vp8" >
<Limit name="size" min="32x32" max="3840x2160" />
<Limit name="alignment" value="1x1" />
<Limit name="block-size" value="16x16" />
<Limit name="block-count" range="1-32400" />
<Limit name="blocks-per-second" min="1" max="3888000" />
<Limit name="bitrate" range="1-80000000" />
<Limit name="performance-point-1920x1080" range="240" />
<Limit name="performance-point-3840x2160" range="120" />
<Limit name="concurrent-instances" max="16" />
<Feature name="adaptive-playback" />
<Feature name="can-swap-width-height" value="1" />
<Feature name="low-latency" />
</MediaCodec>
<MediaCodec name="c2.exynos.vp9.decoder" type="video/x-vnd.on2.vp9" >
<Limit name="size" min="64x64" max="3840x2176" />
<Limit name="alignment" value="1x1" />
<Limit name="block-size" value="64x64" />
<Limit name="block-count" range="1-2040" />
<Limit name="blocks-per-second" min="1" max="3888000" />
<Limit name="bitrate" range="1-80000000" />
<Limit name="performance-point-1920x1080" range="240" />
<Limit name="performance-point-3840x2160" range="120" />
<Limit name="concurrent-instances" max="16" />
<Feature name="adaptive-playback" />
<Feature name="can-swap-width-height" value="1" />
<Feature name="low-latency" />
</MediaCodec>
<MediaCodec name="c2.exynos.vp9.decoder.secure" type="video/x-vnd.on2.vp9" >
<Limit name="size" min="64x64" max="3840x2176" />
<Limit name="alignment" value="1x1" />
<Limit name="block-size" value="64x64" />
<Limit name="block-count" range="1-2040" />
<Limit name="blocks-per-second" min="1" max="3888000" />
<Limit name="bitrate" range="1-80000000" />
<Limit name="performance-point-1920x1080" range="240" />
<Limit name="performance-point-3840x2160" range="120" />
<Limit name="concurrent-instances" max="2" />
<Feature name="adaptive-playback" />
<Feature name="secure-playback" required="true" />
<Feature name="can-swap-width-height" value="1" />
<Feature name="low-latency" />
</MediaCodec>
</Decoders>
<Encoders>
<MediaCodec name="c2.exynos.h264.encoder" type="video/avc">
<Limit name="size" min="32x32" max="3840x2160" />
<Limit name="alignment" value="2x2" />
<Limit name="block-size" value="16x16" />
<Limit name="block-count" range="1-32400" />
<Limit name="blocks-per-second" min="1" max="3888000" />
<Limit name="bitrate" range="1-120000000" />
<Limit name="performance-point-1920x1080" range="240" />
<Limit name="performance-point-3840x2160" range="120" />
<Limit name="concurrent-instances" max="16" />
<Feature name="can-swap-width-height" value="1" />
<Feature name="vq-minimum-quality"/>
<Feature name="qp-bounds"/>
<Feature name="encoding-statistics"/>
<Feature name="bitrate-modes" value="VBR,CBR,CBR-FD" />
</MediaCodec>
<MediaCodec name="c2.exynos.hevc.encoder" type="video/hevc" >
<Limit name="size" min="64x64" max="3840x2176" />
<Limit name="alignment" value="2x2" />
<Limit name="block-size" value="32x32" />
<Limit name="block-count" range="1-8160" />
<Limit name="blocks-per-second" min="1" max="979200" />
<Limit name="bitrate" range="1-120000000" />
<Limit name="performance-point-1920x1080" range="240" />
<Limit name="performance-point-3840x2160" range="120" />
<Limit name="concurrent-instances" max="16" />
<Limit name="quality" range="0-100" default="57" />
<Feature name="can-swap-width-height" value="1" />
<Feature name="vq-minimum-quality"/>
<Feature name="qp-bounds"/>
<Feature name="encoding-statistics"/>
<Feature name="hdr-editing" />
<Feature name="bitrate-modes" value="VBR,CBR,CQ,CBR-FD" />
</MediaCodec>
<MediaCodec name="c2.exynos.mpeg4.encoder" type="video/mp4v-es">
<Limit name="size" min="32x32" max="2048x2048" />
<Limit name="alignment" value="2x2" />
<Limit name="block-size" value="16x16" />
<Limit name="block-count" range="1-16384" />
<Limit name="blocks-per-second" min="1" max="979200" />
<Limit name="bitrate" range="1-80000000" />
<Limit name="performance-point-1280x720" range="240" />
<Limit name="performance-point-1920x1080" range="120" />
<Limit name="concurrent-instances" max="16" />
<Feature name="can-swap-width-height" value="1" />
<Feature name="vq-minimum-quality"/>
<Feature name="qp-bounds"/>
<Feature name="encoding-statistics"/>
<Feature name="bitrate-modes" value="VBR,CBR" />
</MediaCodec>
<MediaCodec name="c2.exynos.h263.encoder" type="video/3gpp">
<Limit name="size" min="32x32" max="2048x1152" />
<Limit name="alignment" value="4x4" />
<Limit name="block-size" value="16x16" />
<Limit name="block-count" range="1-9216" />
<Limit name="blocks-per-second" min="1" max="979200" />
<Limit name="bitrate" range="1-80000000" />
<Limit name="performance-point-1280x720" range="240" />
<Limit name="performance-point-1920x1080" range="120" />
<Limit name="concurrent-instances" max="16" />
<Feature name="vq-minimum-quality"/>
<Feature name="qp-bounds"/>
<Feature name="encoding-statistics"/>
<Feature name="bitrate-modes" value="VBR,CBR" />
</MediaCodec>
<MediaCodec name="c2.exynos.vp8.encoder" type="video/x-vnd.on2.vp8" >
<Limit name="size" min="32x32" max="3840x2160" />
<Limit name="alignment" value="1x1" />
<Limit name="block-size" value="16x16" />
<Limit name="block-count" range="1-32400" />
<Limit name="blocks-per-second" min="1" max="3888000" />
<Limit name="bitrate" range="1-80000000" />
<Limit name="performance-point-1920x1080" range="240" />
<Limit name="performance-point-3840x2160" range="120" />
<Limit name="concurrent-instances" max="16" />
<Feature name="can-swap-width-height" value="1" />
<Feature name="vq-minimum-quality"/>
<Feature name="qp-bounds"/>
<Feature name="encoding-statistics"/>
<Feature name="bitrate-modes" value="VBR,CBR" />
</MediaCodec>
<MediaCodec name="c2.exynos.vp9.encoder" type="video/x-vnd.on2.vp9" >
<Limit name="size" min="64x64" max="3840x2176" />
<Limit name="alignment" value="1x1" />
<Limit name="block-size" value="64x64" />
<Limit name="block-count" range="1-2040" />
<Limit name="blocks-per-second" min="1" max="243000" />
<Limit name="bitrate" range="1-80000000" />
<Limit name="performance-point-1920x1080" range="240" />
<Limit name="performance-point-3840x2160" range="120" />
<Limit name="concurrent-instances" max="16" />
<Feature name="can-swap-width-height" value="1" />
<Feature name="vq-minimum-quality"/>
<Feature name="qp-bounds"/>
<Feature name="encoding-statistics"/>
<Feature name="bitrate-modes" value="VBR,CBR" />
</MediaCodec>
</Encoders>
</MediaCodecs>

52
media_codecs_bo_c2.xml Normal file
View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2018 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.
-->
<MediaCodecs>
<Include href="media_codecs_aosp_c2.xml" />
<Include href="media_codecs_dolby_c2.xml" />
<Decoders>
<MediaCodec name="c2.google.av1.decoder" type="video/av01">
<Limit name="size" min="96x96" max="3840x2160" />
<Limit name="alignment" value="1x1" />
<Limit name="block-size" value="16x16" />
<Limit name="block-count" range="36-32400" />
<Limit name="blocks-per-second" min="24" max="1944000" />
<Limit name="bitrate" range="1-120000000" />
<Limit name="frame-rate" range="1-120" />
<Limit name="concurrent-instances" max="16" />
<Limit name="performance-point-1920x1080" value="180" />
<Limit name="performance-point-1920x1079" value="120" />
<Limit name="performance-point-3840x2160" value="60" />
<Feature name="adaptive-playback" />
<Feature name="can-swap-width-height" value="1" />
</MediaCodec>
<MediaCodec name="c2.google.av1.decoder.secure" type="video/av01">
<Limit name="size" min="96x96" max="3840x2160" />
<Limit name="alignment" value="1x1" />
<Limit name="block-size" value="16x16" />
<Limit name="block-count" range="36-32400" />
<Limit name="blocks-per-second" min="24" max="1944000" />
<Limit name="bitrate" range="1-120000000" />
<Limit name="frame-rate" range="1-120" />
<Limit name="concurrent-instances" max="16" />
<Limit name="performance-point-1920x1080" value="180" />
<Limit name="performance-point-1920x1079" value="120" />
<Limit name="performance-point-3840x2160" value="60" />
<Feature name="adaptive-playback" />
<Feature name="secure-playback" required="true" />
<Feature name="can-swap-width-height" value="1" />
</MediaCodec>
</Decoders>
</MediaCodecs>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 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.
-->
<MediaCodecs>
</MediaCodecs>

View File

@@ -0,0 +1,264 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 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.
-->
<MediaCodecs>
<Decoders>
<MediaCodec name="c2.exynos.h264.decoder" type="video/avc" update="true">
<!-- measured 90%:528-534 med:528 N=2 -->
<Limit name="measured-frame-rate-320x240" range="528-531" /> <!-- v90%=1.0 -->
<!-- measured 90%:550-560 med:551 N=2 -->
<Limit name="measured-frame-rate-720x480" range="550-555" /> <!-- v90%=1.0 -->
<!-- measured 90%:540-561 med:541 N=2 -->
<Limit name="measured-frame-rate-1280x720" range="540-551" /> <!-- v90%=1.0 -->
<!-- measured 90%:409-413 med:410 N=2 -->
<Limit name="measured-frame-rate-1920x1088" range="409-411" /> <!-- v90%=1.0 -->
</MediaCodec>
<MediaCodec name="c2.exynos.h264.decoder.secure" type="video/avc" update="true">
<!-- measured 90%:528-534 med:528 N=2 -->
<Limit name="measured-frame-rate-320x240" range="528-531" /> <!-- v90%=1.0 -->
<!-- measured 90%:550-560 med:551 N=2 -->
<Limit name="measured-frame-rate-720x480" range="550-555" /> <!-- v90%=1.0 -->
<!-- measured 90%:540-561 med:541 N=2 -->
<Limit name="measured-frame-rate-1280x720" range="540-551" /> <!-- v90%=1.0 -->
<!-- measured 90%:409-413 med:410 N=2 -->
<Limit name="measured-frame-rate-1920x1088" range="409-411" /> <!-- v90%=1.0 -->
</MediaCodec>
<MediaCodec name="c2.exynos.hevc.decoder" type="video/hevc" update="true">
<!-- measured 90%:529-530 med:529 N=2 -->
<Limit name="measured-frame-rate-352x288" range="1150-1250" /> <!-- v90%=1.0 -->
<!-- measured 90%:528-530 med:529 N=2 -->
<Limit name="measured-frame-rate-640x360" range="528-529" /> <!-- v90%=1.0 -->
<!-- measured 90%:546-549 med:546 N=2 -->
<Limit name="measured-frame-rate-720x480" range="546-548" /> <!-- v90%=1.0 -->
<!-- measured 90%:547-560 med:547 N=2 -->
<Limit name="measured-frame-rate-1280x720" range="547-553" /> <!-- v90%=1.0 -->
<!-- measured 90%:569-574 med:570 N=2 -->
<Limit name="measured-frame-rate-1920x1080" range="569-572" /> <!-- v90%=1.0 -->
<!-- measured 90%:159-160 med:159 N=2 -->
<Limit name="measured-frame-rate-3840x2160" range="159-159" /> <!-- v90%=1.0 -->
</MediaCodec>
<MediaCodec name="c2.exynos.hevc.decoder.secure" type="video/hevc" update="true">
<!-- measured 90%:529-530 med:529 N=2 -->
<Limit name="measured-frame-rate-352x288" range="1150-1250" /> <!-- v90%=1.0 -->
<!-- measured 90%:528-530 med:529 N=2 -->
<Limit name="measured-frame-rate-640x360" range="528-529" /> <!-- v90%=1.0 -->
<!-- measured 90%:546-549 med:546 N=2 -->
<Limit name="measured-frame-rate-720x480" range="546-548" /> <!-- v90%=1.0 -->
<!-- measured 90%:547-560 med:547 N=2 -->
<Limit name="measured-frame-rate-1280x720" range="547-553" /> <!-- v90%=1.0 -->
<!-- measured 90%:569-574 med:570 N=2 -->
<Limit name="measured-frame-rate-1920x1080" range="569-572" /> <!-- v90%=1.0 -->
<!-- measured 90%:159-160 med:159 N=2 -->
<Limit name="measured-frame-rate-3840x2160" range="159-159" /> <!-- v90%=1.0 -->
</MediaCodec>
<MediaCodec name="c2.exynos.mpeg4.decoder" type="video/mp4v-es" update="true">
<!-- measured 90%:527-537 med:528 N=2 -->
<Limit name="measured-frame-rate-176x144" range="527-532" /> <!-- v90%=1.0 -->
<!-- measured 90%:387-391 med:387 N=2 -->
<Limit name="measured-frame-rate-480x360" range="387-389" /> <!-- v90%=1.0 -->
</MediaCodec>
<MediaCodec name="c2.exynos.h263.decoder" type="video/3gpp" update="true">
<!-- measured 90%:521-541 med:521 N=2 -->
<Limit name="measured-frame-rate-176x144" range="1300-1400" /> <!-- v90%=1.0 -->
<!-- measured 90%:528-540 med:528 N=2 -->
<Limit name="measured-frame-rate-352x288" range="528-534" /> <!-- v90%=1.0 -->
</MediaCodec>
<MediaCodec name="c2.exynos.vp8.decoder" type="video/x-vnd.on2.vp8" update="true">
<!-- measured 90%:451-555 med:452 SLOW N=2 -->
<Limit name="measured-frame-rate-320x180" range="451-500" /> <!-- v90%=1.1 -->
<!-- measured 90%:486-504 med:486 N=2 -->
<Limit name="measured-frame-rate-640x360" range="486-495" /> <!-- v90%=1.0 -->
<!-- measured 90%:518-566 med:518 N=2 -->
<Limit name="measured-frame-rate-1280x720" range="518-542" /> <!-- v90%=1.0 -->
<!-- measured 90%:386-387 med:386 N=2 -->
<Limit name="measured-frame-rate-1920x1080" range="386-386" /> <!-- v90%=1.0 -->
</MediaCodec>
<MediaCodec name="c2.exynos.vp9.decoder" type="video/x-vnd.on2.vp9" update="true">
<!-- measured 90%:523-536 med:524 N=2 -->
<Limit name="measured-frame-rate-320x180" range="523-529" /> <!-- v90%=1.0 -->
<!-- measured 90%:503-506 med:504 N=2 -->
<Limit name="measured-frame-rate-640x360" range="503-505" /> <!-- v90%=1.0 -->
<!-- measured 90%:510-518 med:511 N=2 -->
<Limit name="measured-frame-rate-1280x720" range="510-514" /> <!-- v90%=1.0 -->
<!-- measured 90%:349-351 med:350 N=2 -->
<Limit name="measured-frame-rate-1920x1080" range="349-350" /> <!-- v90%=1.0 -->
<!-- measured 90%:100-101 med:100 N=2 -->
<Limit name="measured-frame-rate-3840x2160" range="100-100" /> <!-- v90%=1.0 -->
</MediaCodec>
<MediaCodec name="c2.exynos.vp9.decoder.secure" type="video/x-vnd.on2.vp9" update="true">
<!-- measured 90%:523-536 med:524 N=2 -->
<Limit name="measured-frame-rate-320x180" range="523-529" /> <!-- v90%=1.0 -->
<!-- measured 90%:503-506 med:504 N=2 -->
<Limit name="measured-frame-rate-640x360" range="503-505" /> <!-- v90%=1.0 -->
<!-- measured 90%:510-518 med:511 N=2 -->
<Limit name="measured-frame-rate-1280x720" range="510-514" /> <!-- v90%=1.0 -->
<!-- measured 90%:349-351 med:350 N=2 -->
<Limit name="measured-frame-rate-1920x1080" range="349-350" /> <!-- v90%=1.0 -->
<!-- measured 90%:100-101 med:100 N=2 -->
<Limit name="measured-frame-rate-3840x2160" range="100-100" /> <!-- v90%=1.0 -->
</MediaCodec>
<MediaCodec name="c2.android.h263.decoder" type="video/3gpp" update="true">
<Limit name="measured-frame-rate-176x144" range="1504-2256" />
<Limit name="measured-frame-rate-352x288" range="893-1339" />
</MediaCodec>
<MediaCodec name="c2.android.avc.decoder" type="video/avc" update="true">
<!-- measured 90%:342-360 med:343 N=2 -->
<Limit name="measured-frame-rate-320x240" range="558-1084" /> <!-- v90%=1.0 -->
<!-- measured 90%:142-147 med:143 N=2 -->
<Limit name="measured-frame-rate-720x480" range="193-357" /> <!-- v90%=1.0 -->
<!-- measured 90%:54-56 med:55 N=2 -->
<Limit name="measured-frame-rate-1280x720" range="73-125" /> <!-- v90%=1.0 -->
<!-- measured 90%:25-26 med:26 N=2 -->
<Limit name="measured-frame-rate-1920x1080" range="25-41" /> <!-- v90%=1.0 -->
</MediaCodec>
<MediaCodec name="c2.android.hevc.decoder" type="video/hevc" update="true">
<Limit name="measured-frame-rate-352x288" range="583-1019" />
<!-- measured 90%:196-207 med:196 N=2 -->
<Limit name="measured-frame-rate-640x360" range="196-608" /> <!-- v90%=1.0 -->
<!-- measured 90%:177-180 med:178 N=2 -->
<Limit name="measured-frame-rate-720x480" range="177-495" /> <!-- v90%=1.0 -->
<!-- measured 90%:81-82 med:82 N=2 -->
<Limit name="measured-frame-rate-1280x720" range="81-165" /> <!-- v90%=1.0 -->
<!-- measured 90%:45-47 med:46 N=2 -->
<Limit name="measured-frame-rate-1920x1080" range="45-87" /> <!-- v90%=1.0 -->
</MediaCodec>
<MediaCodec name="c2.android.mpeg4.decoder" type="video/mp4v-es" update="true">
<Limit name="measured-frame-rate-176x144" range="1215-1823" />
<Limit name="measured-frame-rate-480x360" range="830-1246" />
<Limit name="measured-frame-rate-1280x720" range="265-397" />
</MediaCodec>
<MediaCodec name="c2.android.vp8.decoder" type="video/x-vnd.on2.vp8" update="true">
<Limit name="measured-frame-rate-320x180" range="847-1271" />
<Limit name="measured-frame-rate-640x360" range="412-618" />
<Limit name="measured-frame-rate-1280x720" range="119-178" />
<Limit name="measured-frame-rate-1920x1080" range="28-55" />
</MediaCodec>
<MediaCodec name="c2.android.vp9.decoder" type="video/x-vnd.on2.vp9" update="true">
<Limit name="measured-frame-rate-320x180" range="622-934" />
<Limit name="measured-frame-rate-640x360" range="418-627" />
<Limit name="measured-frame-rate-1280x720" range="123-185" />
<Limit name="measured-frame-rate-1920x1080" range="75-112" />
</MediaCodec>
<MediaCodec name="c2.google.av1.decoder" type="video/av01" update="true">
<Limit name="measured-frame-rate-352x288" range="630-748" />
<Limit name="measured-frame-rate-640x360" range="586-700" />
<Limit name="measured-frame-rate-720x480" range="575-690" />
<Limit name="measured-frame-rate-1280x720" range="247-460" />
<Limit name="measured-frame-rate-1920x1080" range="219-252" />
</MediaCodec>
<MediaCodec name="c2.google.av1.decoder.secure" type="video/av01" update="true">
<Limit name="measured-frame-rate-352x288" range="630-748" />
<Limit name="measured-frame-rate-640x360" range="586-700" />
<Limit name="measured-frame-rate-720x480" range="575-690" />
<Limit name="measured-frame-rate-1280x720" range="247-460" />
<Limit name="measured-frame-rate-1920x1080" range="219-252" />
</MediaCodec>
<MediaCodec name="c2.android.av1.decoder" type="video/av01" update="true">
<Limit name="measured-frame-rate-352x288" range="358-383" />
<Limit name="measured-frame-rate-640x360" range="207-221" />
<Limit name="measured-frame-rate-720x480" range="106-148" />
<Limit name="measured-frame-rate-1280x720" range="65-71" />
</MediaCodec>
<MediaCodec name="c2.android.av1-dav1d.decoder" type="video/av01" update="true">
<Limit name="measured-frame-rate-352x288" range="848-1033" />
<Limit name="measured-frame-rate-640x360" range="450-685" />
<Limit name="measured-frame-rate-720x480" range="406-484" />
<Limit name="measured-frame-rate-1280x720" range="148-187" />
</MediaCodec>
</Decoders>
<Encoders>
<MediaCodec name="c2.exynos.h264.encoder" type="video/avc" update="true">
<Limit name="measured-frame-rate-320x240" range="372-551" />
<Limit name="measured-frame-rate-720x480" range="221-308" />
<Limit name="measured-frame-rate-1280x720" range="151-190" />
<Limit name="measured-frame-rate-1920x1080" range="58-99" />
</MediaCodec>
<MediaCodec name="c2.exynos.hevc.encoder" type="video/hevc" update="true">
<Limit name="measured-frame-rate-320x240" range="371-553" />
<Limit name="measured-frame-rate-720x480" range="214-305" />
<Limit name="measured-frame-rate-1280x720" range="154-198" />
<Limit name="measured-frame-rate-1920x1080" range="46-97" />
</MediaCodec>
<MediaCodec name="c2.exynos.mpeg4.encoder" type="video/mp4v-es" update="true">
<Limit name="measured-frame-rate-176x144" range="380-566" />
<Limit name="measured-frame-rate-352x288" range="222-250" />
<Limit name="measured-frame-rate-640x480" range="103-124" />
</MediaCodec>
<MediaCodec name="c2.exynos.h263.encoder" type="video/3gpp" update="true">
<Limit name="measured-frame-rate-176x144" range="500-751" />
<Limit name="measured-frame-rate-352x288" range="236-355" />
<Limit name="measured-frame-rate-704x576" range="76-114" />
</MediaCodec>
<MediaCodec name="c2.exynos.vp8.encoder" type="video/x-vnd.on2.vp8" update="true">
<Limit name="measured-frame-rate-320x180" range="378-488" />
<Limit name="measured-frame-rate-640x360" range="267-351" />
<Limit name="measured-frame-rate-1280x720" range="113-170" />
<Limit name="measured-frame-rate-1920x1080" range="55-82" />
</MediaCodec>
<MediaCodec name="c2.exynos.vp9.encoder" type="video/x-vnd.on2.vp9" update="true">
<Limit name="measured-frame-rate-320x180" range="302-453" />
<Limit name="measured-frame-rate-640x360" range="188-283" />
<Limit name="measured-frame-rate-1280x720" range="160-240" />
<Limit name="measured-frame-rate-1920x1080" range="100-151" />
</MediaCodec>
<MediaCodec name="c2.android.h263.encoder" type="video/3gpp" update="true">
<Limit name="measured-frame-rate-176x144" range="1452-2178" />
</MediaCodec>
<MediaCodec name="c2.android.avc.encoder" type="video/avc" update="true">
<!-- measured 90%:345-350 med:345 N=2 -->
<Limit name="measured-frame-rate-320x240" range="345-347" /> <!-- v90%=1.0 -->
<!-- measured 90%:101-103 med:101 N=2 -->
<Limit name="measured-frame-rate-720x480" range="101-102" /> <!-- v90%=1.0 -->
<!-- measured 90%:54-55 med:54 N=2 -->
<Limit name="measured-frame-rate-1280x720" range="54-54" /> <!-- v90%=1.0 -->
<!-- measured 90%:28-30 med:29 N=2 -->
<Limit name="measured-frame-rate-1920x1080" range="28-29" /> <!-- v90%=1.0 -->
</MediaCodec>
<MediaCodec name="c2.android.hevc.encoder" type="video/hevc" update="true">
<!-- measured 90%:61-65 med:62 N=8 -->
<Limit name="measured-frame-rate-320x240" range="50-80" /> <!-- v90%=1.0 -->
</MediaCodec>
<MediaCodec name="c2.android.mpeg4.encoder" type="video/mp4v-es" update="true">
<Limit name="measured-frame-rate-176x144" range="1201-1801" />
</MediaCodec>
<MediaCodec name="c2.android.vp8.encoder" type="video/x-vnd.on2.vp8" update="true">
<!-- measured 90%:49-87 med:50 SLOW N=2 -->
<Limit name="measured-frame-rate-320x180" range="394-395" /> <!-- v90%=1.3 -->
<!-- measured 90%:55-57 med:56 N=2 -->
<Limit name="measured-frame-rate-640x360" range="196-197" /> <!-- v90%=1.0 -->
<!-- measured 90%:34-35 med:34 N=2 -->
<Limit name="measured-frame-rate-1280x720" range="34-34" /> <!-- v90%=1.0 -->
<!-- measured 90%:29-31 med:30 N=2 -->
<Limit name="measured-frame-rate-1920x1080" range="29-30" /> <!-- v90%=1.0 -->
</MediaCodec>
<MediaCodec name="c2.android.vp9.encoder" type="video/x-vnd.on2.vp9" update="true">
<Limit name="measured-frame-rate-320x180" range="345-518" />
<Limit name="measured-frame-rate-640x360" range="91-136" />
<Limit name="measured-frame-rate-1280x720" range="24-36" />
</MediaCodec>
<MediaCodec name="c2.android.av1.encoder" type="video/av01" update="true">
<!-- measured 90%:354-361 med:355 N=2 -->
<Limit name="measured-frame-rate-320x240" range="354-358" /> <!-- v90%=1.0 -->
<!-- measured 90%:81-85 med:81 N=2 -->
<Limit name="measured-frame-rate-720x480" range="81-83" /> <!-- v90%=1.0 -->
<!-- measured 90%:32-33 med:33 N=2 -->
<Limit name="measured-frame-rate-1280x720" range="32-33" /> <!-- v90%=1.0 -->
</MediaCodec>
</Encoders>
</MediaCodecs>

895
media_profiles.xml Normal file
View File

@@ -0,0 +1,895 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 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.
-->
<!DOCTYPE MediaSettings [
<!ELEMENT MediaSettings (CamcorderProfiles,
EncoderOutputFileFormat+,
VideoEncoderCap+,
AudioEncoderCap+,
VideoDecoderCap,
AudioDecoderCap)>
<!ELEMENT CamcorderProfiles (EncoderProfile+, ImageEncoding+, ImageDecoding, Camera)>
<!ELEMENT EncoderProfile (Video, Audio)>
<!ATTLIST EncoderProfile quality (high|low) #REQUIRED>
<!ATTLIST EncoderProfile fileFormat (mp4|3gp) #REQUIRED>
<!ATTLIST EncoderProfile duration (30|60) #REQUIRED>
<!ELEMENT Video EMPTY>
<!ATTLIST Video codec (h264|h263|m4v) #REQUIRED>
<!ATTLIST Video bitRate CDATA #REQUIRED>
<!ATTLIST Video width CDATA #REQUIRED>
<!ATTLIST Video height CDATA #REQUIRED>
<!ATTLIST Video frameRate CDATA #REQUIRED>
<!ELEMENT Audio EMPTY>
<!ATTLIST Audio codec (amrnb|amrwb|aac) #REQUIRED>
<!ATTLIST Audio bitRate CDATA #REQUIRED>
<!ATTLIST Audio sampleRate CDATA #REQUIRED>
<!ATTLIST Audio channels (1|2) #REQUIRED>
<!ELEMENT ImageEncoding EMPTY>
<!ATTLIST ImageEncoding quality (90|80|70|60|50|40) #REQUIRED>
<!ELEMENT ImageDecoding EMPTY>
<!ATTLIST ImageDecoding memCap CDATA #REQUIRED>
<!ELEMENT Camera EMPTY>
<!ATTLIST Camera previewFrameRate CDATA #REQUIRED>
<!ELEMENT EncoderOutputFileFormat EMPTY>
<!ATTLIST EncoderOutputFileFormat name (mp4|3gp) #REQUIRED>
<!ELEMENT VideoEncoderCap EMPTY>
<!ATTLIST VideoEncoderCap name (h264|h263|m4v|wmv) #REQUIRED>
<!ATTLIST VideoEncoderCap enabled (true|false) #REQUIRED>
<!ATTLIST VideoEncoderCap minBitRate CDATA #REQUIRED>
<!ATTLIST VideoEncoderCap maxBitRate CDATA #REQUIRED>
<!ATTLIST VideoEncoderCap minFrameWidth CDATA #REQUIRED>
<!ATTLIST VideoEncoderCap maxFrameWidth CDATA #REQUIRED>
<!ATTLIST VideoEncoderCap minFrameHeight CDATA #REQUIRED>
<!ATTLIST VideoEncoderCap maxFrameHeight CDATA #REQUIRED>
<!ATTLIST VideoEncoderCap minFrameRate CDATA #REQUIRED>
<!ATTLIST VideoEncoderCap maxFrameRate CDATA #REQUIRED>
<!ELEMENT AudioEncoderCap EMPTY>
<!ATTLIST AudioEncoderCap name (amrnb|amrwb|aac|wma) #REQUIRED>
<!ATTLIST AudioEncoderCap enabled (true|false) #REQUIRED>
<!ATTLIST AudioEncoderCap minBitRate CDATA #REQUIRED>
<!ATTLIST AudioEncoderCap maxBitRate CDATA #REQUIRED>
<!ATTLIST AudioEncoderCap minSampleRate CDATA #REQUIRED>
<!ATTLIST AudioEncoderCap maxSampleRate CDATA #REQUIRED>
<!ATTLIST AudioEncoderCap minChannels (1|2) #REQUIRED>
<!ATTLIST AudioEncoderCap maxChannels (1|2) #REQUIRED>
<!ELEMENT VideoDecoderCap EMPTY>
<!ATTLIST VideoDecoderCap name (wmv) #REQUIRED>
<!ATTLIST VideoDecoderCap enabled (true|false) #REQUIRED>
<!ELEMENT AudioDecoderCap EMPTY>
<!ATTLIST AudioDecoderCap name (wma) #REQUIRED>
<!ATTLIST AudioDecoderCap enabled (true|false) #REQUIRED>
]>
<!--
This file is used to declare the multimedia profiles and capabilities
on an android-powered device.
-->
<MediaSettings>
<!-- Each camcorder profile defines a set of predefined configuration parameters -->
<CamcorderProfiles cameraId="0">
<EncoderProfile quality="2160p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="3840"
height="2160"
frameRate="60" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="1920"
height="1080"
frameRate="60" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="720p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="8000000"
width="1280"
height="720"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="480p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="3000000"
width="720"
height="480"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse2160p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="3840"
height="2160"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="1920"
height="1080"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="8000000"
width="1280"
height="720"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="3000000"
width="720"
height="480"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="highspeed1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="42000000"
width="1920"
height="1080"
frameRate="240" />
<!-- audio setting is ignored -->
<Audio codec="aac"
bitRate="96000"
sampleRate="48000"
channels="1" />
</EncoderProfile>
<ImageEncoding quality="90" />
<ImageEncoding quality="80" />
<ImageEncoding quality="70" />
<ImageDecoding memCap="20000000" />
</CamcorderProfiles>
<CamcorderProfiles cameraId="1">
<EncoderProfile quality="1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="1920"
height="1080"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="720p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="8000000"
width="1280"
height="720"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="480p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="3000000"
width="720"
height="480"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="1920"
height="1080"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="8000000"
width="1280"
height="720"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="3000000"
width="720"
height="480"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<ImageEncoding quality="90" />
<ImageEncoding quality="80" />
<ImageEncoding quality="70" />
<ImageDecoding memCap="20000000" />
</CamcorderProfiles>
<CamcorderProfiles cameraId="2">
<EncoderProfile quality="2160p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="3840"
height="2160"
frameRate="60" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="1920"
height="1080"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="720p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="8000000"
width="1280"
height="720"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="480p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="3000000"
width="720"
height="480"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="1920"
height="1080"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="8000000"
width="1280"
height="720"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="3000000"
width="720"
height="480"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="highspeed1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="42000000"
width="1920"
height="1080"
frameRate="240" />
<!-- audio setting is ignored -->
<Audio codec="aac"
bitRate="96000"
sampleRate="48000"
channels="1" />
</EncoderProfile>
<ImageEncoding quality="90" />
<ImageEncoding quality="80" />
<ImageEncoding quality="70" />
<ImageDecoding memCap="20000000" />
</CamcorderProfiles>
<CamcorderProfiles cameraId="3">
<EncoderProfile quality="1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="1920"
height="1080"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="720p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="8000000"
width="1280"
height="720"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="480p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="3000000"
width="720"
height="480"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="1920"
height="1080"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="8000000"
width="1280"
height="720"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="3000000"
width="720"
height="480"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<ImageEncoding quality="90" />
<ImageEncoding quality="80" />
<ImageEncoding quality="70" />
<ImageDecoding memCap="20000000" />
</CamcorderProfiles>
<CamcorderProfiles cameraId="4">
<EncoderProfile quality="1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="1920"
height="1080"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="720p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="8000000"
width="1280"
height="720"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="480p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="3000000"
width="720"
height="480"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="1920"
height="1080"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="8000000"
width="1280"
height="720"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="3000000"
width="720"
height="480"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<ImageEncoding quality="90" />
<ImageEncoding quality="80" />
<ImageEncoding quality="70" />
<ImageDecoding memCap="20000000" />
</CamcorderProfiles>
<CamcorderProfiles cameraId="5">
<EncoderProfile quality="2160p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="3840"
height="2160"
frameRate="60" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="1920"
height="1080"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="720p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="8000000"
width="1280"
height="720"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="480p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="3000000"
width="720"
height="480"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse2160p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="3840"
height="2160"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="1920"
height="1080"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="8000000"
width="1280"
height="720"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="3000000"
width="720"
height="480"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="highspeed1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="42000000"
width="1920"
height="1080"
frameRate="240" />
<!-- audio setting is ignored -->
<Audio codec="aac"
bitRate="96000"
sampleRate="48000"
channels="1" />
</EncoderProfile>
<ImageEncoding quality="90" />
<ImageEncoding quality="80" />
<ImageEncoding quality="70" />
<ImageDecoding memCap="20000000" />
</CamcorderProfiles>
<CamcorderProfiles cameraId="6">
<EncoderProfile quality="1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="1920"
height="1080"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="720p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="8000000"
width="1280"
height="720"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="480p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="3000000"
width="720"
height="480"
frameRate="30" />
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="12000000"
width="1920"
height="1080"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="8000000"
width="1280"
height="720"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="60">
<Video codec="h264"
bitRate="3000000"
width="720"
height="480"
frameRate="30" />
<!-- Audio settings are not used for timealpse video recording -->
<Audio codec="aac"
bitRate="96000"
sampleRate="16000"
channels="1" />
</EncoderProfile>
<ImageEncoding quality="90" />
<ImageEncoding quality="80" />
<ImageEncoding quality="70" />
<ImageDecoding memCap="20000000" />
</CamcorderProfiles>
<EncoderOutputFileFormat name="3gp" />
<EncoderOutputFileFormat name="mp4" />
<!--
If a codec is not enabled, it is invisible to the applications
In other words, the applications won't be able to use the codec
or query the capabilities of the codec at all if it is disabled
-->
<!--
FIXME : we only check Mpeg4 encorder cap and other codec doesn't check
codec cap
-->
<VideoEncoderCap name="h264" enabled="true"
minBitRate="64000" maxBitRate="12000000"
minFrameWidth="128" maxFrameWidth="3840"
minFrameHeight="96" maxFrameHeight="2160"
minFrameRate="15" maxFrameRate="30" />
<VideoEncoderCap name="h263" enabled="true"
minBitRate="64000" maxBitRate="1000000"
minFrameWidth="128" maxFrameWidth="1920"
minFrameHeight="96" maxFrameHeight="1080"
minFrameRate="15" maxFrameRate="30" />
<VideoEncoderCap name="m4v" enabled="true"
minBitRate="64000" maxBitRate="2000000"
minFrameWidth="128" maxFrameWidth="1920"
minFrameHeight="96" maxFrameHeight="1080"
minFrameRate="15" maxFrameRate="30" />
<AudioEncoderCap name="aac" enabled="true"
minBitRate="758" maxBitRate="288000"
minSampleRate="8000" maxSampleRate="48000"
minChannels="1" maxChannels="1" />
<AudioEncoderCap name="heaac" enabled="true"
minBitRate="8000" maxBitRate="64000"
minSampleRate="16000" maxSampleRate="48000"
minChannels="1" maxChannels="1" />
<AudioEncoderCap name="aaceld" enabled="true"
minBitRate="16000" maxBitRate="192000"
minSampleRate="16000" maxSampleRate="48000"
minChannels="1" maxChannels="1" />
<AudioEncoderCap name="amrwb" enabled="true"
minBitRate="6600" maxBitRate="23050"
minSampleRate="16000" maxSampleRate="16000"
minChannels="1" maxChannels="1" />
<AudioEncoderCap name="amrnb" enabled="true"
minBitRate="5525" maxBitRate="12200"
minSampleRate="8000" maxSampleRate="8000"
minChannels="1" maxChannels="1" />
<!--
FIXME:
We do not check decoder capabilities at present
At present, we only check whether windows media is visible
for TEST applications. For other applications, we do
not perform any checks at all.
-->
<VideoDecoderCap name="wmv" enabled="false"/>
<AudioDecoderCap name="wma" enabled="false"/>
</MediaSettings>

3
modem/userdebug.mk Normal file
View File

@@ -0,0 +1,3 @@
ifneq ($(BOARD_WITHOUT_RADIO),true)
PRODUCT_PACKAGES += vcd
endif

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/**
* Copyright (c) 2009, 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.
*/
-->
<resources>
<!-- Don't enable BT until user wants it -->
<bool name="def_bluetooth_on">false</bool>
</resources>

View File

@@ -0,0 +1,7 @@
<resources>
<string-array name="logger_entries">
<item>shannondm</item>
<item>cnss_diag</item>
<item>brcm_gps</item>
</string-array>
</resources>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="config_logger_default_value" translatable="false">shannondm</string>
<string name="config_cfg_default_value" translatable="false">Built-in Mask #1</string>
<!-- default config file for cnss_diag logger -->
<string name="config_cfg_default_value_cnss_diag" translatable="false">cnss_diag.conf</string>
<!-- config file to enable brcm gps logger -->
<bool name="config_brcm_gps_enabled" translatable="false">true</bool>
</resources>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="config_message_no_message">
<item></item>
</string-array>
<string-array name="config_message_audio_warning">
<item>This will collect audio from your voice calls. Would you like to proceed?</item>
</string-array>
<string-array name="config_message_possible_audio_warning">
<item>This may collect audio from your voice calls. Would you like to proceed?</item>
<item>Pixel_Default.nprf</item>
<item>Built-in Mask #0</item>
<item>Built-in Mask #1</item>
<item>Built-in Mask #2</item>
<item>Built-in Mask #3</item>
</string-array>
<string name="config_privacy_warning_title">Privacy Warning</string>
<string name="default_config_selection_message">You are loading a user defined logging config. This may collect audio from your voice calls. Would you like to proceed?</string>
</resources>

View File

@@ -31,16 +31,6 @@
<!-- B y-intercept --> <item>-0.349361641294833436</item>
</string-array>
<!-- The fixed keyboard vibration strength in [0,1], or -1 to indicate the strength not fixed
and should depend on the touch feedback intensity user setting -->
<item name="config_keyboardHapticFeedbackFixedAmplitude" type="dimen">0.62</item>
<!-- Indicating if keyboard vibration settings supported or not. -->
<bool name="config_keyboardVibrationSettingsSupported">true</bool>
<!-- Indicating if ringtone vibration settings supported or not. -->
<bool name="config_ringtoneVibrationSettingsSupported">true</bool>
<!-- List of comma separated package names for which we the system will not show crash, ANR,
etc. dialogs. -->
<string translatable="false" name="config_appsNotReportingCrashes">com.google.android.euicc</string>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2021 The LineageOS 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.
-->
<resources>
<bool name="call_recording_enabled">true</bool>
<integer name="call_recording_audio_source">4</integer>
</resources>

View File

@@ -241,6 +241,12 @@
<item>"/system_ext/priv-app/SystemUI/SystemUI.apk"</item>
</string-array>
<!-- Bytes that the PinnerService will pin for Home app -->
<integer name="config_pinnerHomePinBytes">6291456</integer>
<!-- Bytes that the PinnerService will pin for WebView -->
<integer name="config_pinnerWebviewPinBytes">20971520</integer>
<!-- The default intensity level for alarm vibrations. See
Settings.System.ALARM_VIBRATION_INTENSITY more details on the constant values and
meanings. -->
@@ -309,12 +315,4 @@
<!-- Pre-scale volume at volume step 3 for Absolute Volume -->
<fraction name="config_prescaleAbsoluteVolume_index3">100%</fraction>
<!-- Whether to enable usb state update via udc sysfs. -->
<bool name="config_enableUdcSysfsUsbStateUpdate">true</bool>
<!-- Whether to enable APDU sender optimization i.e. a logical channel is opened and
kept open for multiple APDU commands within one session.-->
<bool name="euicc_optimize_apdu_sender">true</bool>
</resources>
</resources>

View File

@@ -1,7 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
SPDX-FileCopyrightText: 2021 The LineageOS Project
SPDX-License-Identifier: Apache-2.0
Copyright (C) 2021 The LineageOS 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.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.lineageos.settings"

View File

@@ -1,6 +1,17 @@
/*
* SPDX-FileCopyrightText: 2021 The LineageOS Project
* SPDX-License-Identifier: Apache-2.0
* Copyright (C) 2021 The LineageOS 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.
*/
package org.lineageos.settings;

View File

@@ -1,6 +1,17 @@
/*
* SPDX-FileCopyrightText: 2021 The LineageOS Project
* SPDX-License-Identifier: Apache-2.0
* Copyright (C) 2021 The LineageOS 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.
*/
package org.lineageos.settings;

42
pixelstats/Android.bp Normal file
View File

@@ -0,0 +1,42 @@
//
// Copyright (C) 2017 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.
package {
// See: http://go/android-license-faq
// A large-scale-change added 'default_applicable_licenses' to import
// all of the 'license_kinds' from "//device/google/gs201:device_google_gs201_license"
// to get the below license kinds:
// SPDX-license-identifier-Apache-2.0
default_applicable_licenses: [
"//device/google/gs201:device_google_gs201_license",
],
}
cc_binary {
name: "pixelstats-vendor",
init_rc: ["pixelstats-vendor.gs201.rc"],
srcs: [
"service.cpp",
],
shared_libs: [
"libbase",
"liblog",
"libutils",
"libpixelstats",
],
proprietary: true,
static_libs: ["chre_client"],
header_libs: ["chre_api"],
}

View File

@@ -0,0 +1,11 @@
on property:sys.boot_completed=1
chown system system /sys/class/power_supply/maxfg_base/fg_learning_events
chown system system /sys/class/power_supply/maxfg/fg_learning_events
start vendor.pixelstats_vendor
on post-fs-data
chown system system /sys/kernel/metrics/irq/stats_reset
service vendor.pixelstats_vendor /vendor/bin/pixelstats-vendor
class hal
user system
group system context_hub readproc
disabled

125
pixelstats/service.cpp Normal file
View File

@@ -0,0 +1,125 @@
/*
* Copyright (C) 2018 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 "pixelstats"
#include <android-base/logging.h>
#include <pixelstats/SysfsCollector.h>
#include <pixelstats/UeventListener.h>
#include <thread>
#include <pixelstats/SysfsCollector.h>
#include <pixelstats/UeventListener.h>
using android::hardware::google::pixel::SysfsCollector;
using android::hardware::google::pixel::UeventListener;
#define BLOCK_STATS_LENGTH 17
#define UFSHC_PATH(filename) "/dev/sys/block/bootdevice/" #filename
#define UFS_ERR_PATH(err_type) UFSHC_PATH(err_stats/) #err_type
const struct SysfsCollector::SysfsPaths sysfs_paths = {
.SlowioReadCntPath = UFSHC_PATH(slowio_read_cnt),
.SlowioWriteCntPath = UFSHC_PATH(slowio_write_cnt),
.SlowioUnmapCntPath = UFSHC_PATH(slowio_unmap_cnt),
.SlowioSyncCntPath = UFSHC_PATH(slowio_sync_cnt),
.CycleCountBinsPath = "/sys/class/power_supply/battery/cycle_counts",
.UFSLifetimeA = UFSHC_PATH(health_descriptor/life_time_estimation_a),
.UFSLifetimeB = UFSHC_PATH(health_descriptor/life_time_estimation_b),
.UFSLifetimeC = UFSHC_PATH(health_descriptor/life_time_estimation_c),
.F2fsStatsPath = "/sys/fs/f2fs/",
.ImpedancePath = "/sys/devices/platform/audiometrics/speaker_impedance",
.CodecPath = "/sys/devices/platform/audiometrics/codec_state",
.EEPROMPath = "/dev/battery_history",
.MitigationPath = "/sys/devices/virtual/pmic/mitigation",
.MitigationDurationPath = "/sys/devices/virtual/pmic/mitigation/irq_dur_cnt",
.BrownoutReasonProp = "vendor.brownout_reason",
.BrownoutLogPath = "/data/vendor/mitigation/lastmeal.txt",
.SpeakerTemperaturePath = "/sys/devices/platform/audiometrics/speaker_temp",
.SpeakerExcursionPath = "/sys/devices/platform/audiometrics/speaker_excursion",
.SpeakerHeartBeatPath = "/sys/devices/platform/audiometrics/speaker_heartbeat",
.UFSErrStatsPath = {
UFS_ERR_PATH(pa_err_count),
UFS_ERR_PATH(dl_err_count),
UFS_ERR_PATH(nl_err_count),
UFS_ERR_PATH(tl_err_count),
UFS_ERR_PATH(dme_err_count),
UFS_ERR_PATH(fatal_err_count),
UFS_ERR_PATH(auto_hibern8_err_count)
},
.BlockStatsLength = BLOCK_STATS_LENGTH,
.AmsRatePath = "/sys/devices/platform/audiometrics/ams_rate_read_once",
.MitigationPath = "/sys/devices/virtual/pmic/mitigation",
.ThermalStatsPaths = {
"/sys/devices/platform/100a0000.BIG/trip_counter",
"/sys/devices/platform/100a0000.MID/trip_counter",
"/sys/devices/platform/100a0000.LITTLE/trip_counter",
"/sys/devices/platform/100b0000.G3D/trip_counter",
"/sys/devices/platform/100b0000.TPU/trip_counter",
"/sys/devices/platform/100b0000.AUR/trip_counter",
},
.CCARatePath = "/sys/devices/platform/audiometrics/cca_count_read_once",
.TempResidencyAndResetPaths = {
{
"/sys/kernel/metrics/thermal/tr_by_group/tmu/stats",
"/sys/kernel/metrics/thermal/tr_by_group/tmu/stats_reset"
},
{
"/sys/kernel/metrics/thermal/tr_by_group/spmic/stats",
"/sys/kernel/metrics/thermal/tr_by_group/spmic/stats_reset"
}
},
.ResumeLatencyMetricsPath = "/sys/kernel/metrics/resume_latency/resume_latency_metrics",
.LongIRQMetricsPath = "/sys/kernel/metrics/irq/long_irq_metrics",
.StormIRQMetricsPath = "/sys/kernel/metrics/irq/storm_irq_metrics",
.IRQStatsResetPath = "/sys/kernel/metrics/irq/stats_reset",
.ModemPcieLinkStatsPath = "/sys/devices/platform/11920000.pcie/link_stats",
.WifiPcieLinkStatsPath = "/sys/devices/platform/14520000.pcie/link_stats",
.GMSRPath = {
"/sys/class/power_supply/maxfg/gmsr",
"/sys/class/power_supply/maxfg_base/gmsr",
},
.FGModelLoadingPath = {
"/sys/class/power_supply/maxfg/m5_model_state",
"/sys/class/power_supply/maxfg_base/m5_model_state"
},
.FGLogBufferPath = {
"/dev/logbuffer_maxfg_monitor",
"/dev/logbuffer_max77779fg_monitor",
"/dev/logbuffer_maxfg_base_monitor",
"/dev/logbuffer_maxfg_secondary_monitor"
},
.TotalCallCountPath = "/sys/devices/platform/audiometrics/call_count"
};
const struct UeventListener::UeventPaths ueventPaths = {
.AudioUevent = "/devices/virtual/amcs/amcs",
.TypeCPartnerUevent = "PRODUCT_TYPE=",
.FwUpdatePath = ""
};
int main() {
LOG(INFO) << "starting PixelStats";
UeventListener ueventListener(ueventPaths);
std::thread listenThread(&UeventListener::ListenForever, &ueventListener);
listenThread.detach();
SysfsCollector collector(sysfs_paths);
collector.collect(); // This blocks forever.
return 0;
}

47
powerstats/Android.bp Normal file
View File

@@ -0,0 +1,47 @@
// 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.
soong_namespace {
imports: [
"hardware/google/pixel",
"device/google/gs-common/powerstats",
],
}
package {
// See: http://go/android-license-faq
// A large-scale-change added 'default_applicable_licenses' to import
// all of the 'license_kinds' from "//device/google/gs201:device_google_gs201_license"
// to get the below license kinds:
// SPDX-license-identifier-Apache-2.0
default_applicable_licenses: [
"//device/google/gs201:device_google_gs201_license",
],
}
cc_library {
name: "android.hardware.power.stats-impl.gs201",
vendor_available: true,
export_include_dirs: ["include"],
defaults: ["powerstats_pixel_defaults"],
srcs: [
"*.cpp",
],
shared_libs: [
"android.hardware.power.stats-impl.gs-common",
"android.hardware.power.stats-impl.pixel",
],
}

View File

@@ -0,0 +1,663 @@
/*
* 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.
*/
#include <PowerStatsAidl.h>
#include <Gs201CommonDataProviders.h>
#include <AdaptiveDvfsStateResidencyDataProvider.h>
#include <AocTimedStateResidencyDataProvider.h>
#include <DevfreqStateResidencyDataProvider.h>
#include <DisplayMrrStateResidencyDataProvider.h>
#include <DvfsStateResidencyDataProvider.h>
#include <UfsStateResidencyDataProvider.h>
#include <dataproviders/GenericStateResidencyDataProvider.h>
#include <dataproviders/IioEnergyMeterDataProvider.h>
#include <dataproviders/PowerStatsEnergyConsumer.h>
#include <dataproviders/PowerStatsEnergyAttribution.h>
#include <dataproviders/PixelStateResidencyDataProvider.h>
#include <dataproviders/WlanStateResidencyDataProvider.h>
#include <android-base/logging.h>
#include <android-base/properties.h>
#include <android/binder_manager.h>
#include <android/binder_process.h>
#include <log/log.h>
using aidl::android::hardware::power::stats::AdaptiveDvfsStateResidencyDataProvider;
using aidl::android::hardware::power::stats::AocTimedStateResidencyDataProvider;
using aidl::android::hardware::power::stats::DevfreqStateResidencyDataProvider;
using aidl::android::hardware::power::stats::DisplayMrrStateResidencyDataProvider;
using aidl::android::hardware::power::stats::DvfsStateResidencyDataProvider;
using aidl::android::hardware::power::stats::UfsStateResidencyDataProvider;
using aidl::android::hardware::power::stats::EnergyConsumerType;
using aidl::android::hardware::power::stats::GenericStateResidencyDataProvider;
using aidl::android::hardware::power::stats::IioEnergyMeterDataProvider;
using aidl::android::hardware::power::stats::PixelStateResidencyDataProvider;
using aidl::android::hardware::power::stats::PowerStatsEnergyConsumer;
using aidl::android::hardware::power::stats::WlanStateResidencyDataProvider;
// TODO (b/181070764) (b/182941084):
// Remove this when Wifi/BT energy consumption models are available or revert before ship
using aidl::android::hardware::power::stats::EnergyConsumerResult;
using aidl::android::hardware::power::stats::Channel;
using aidl::android::hardware::power::stats::EnergyMeasurement;
class PlaceholderEnergyConsumer : public PowerStats::IEnergyConsumer {
public:
PlaceholderEnergyConsumer(std::shared_ptr<PowerStats> p, EnergyConsumerType type,
std::string name) : kType(type), kName(name), mPowerStats(p), mChannelId(-1) {
std::vector<Channel> channels;
mPowerStats->getEnergyMeterInfo(&channels);
for (const auto &c : channels) {
if (c.name == "VSYS_PWR_WLAN_BT") {
mChannelId = c.id;
break;
}
}
}
std::pair<EnergyConsumerType, std::string> getInfo() override { return {kType, kName}; }
std::optional<EnergyConsumerResult> getEnergyConsumed() override {
int64_t totalEnergyUWs = 0;
int64_t timestampMs = 0;
if (mChannelId != -1) {
std::vector<EnergyMeasurement> measurements;
if (mPowerStats->readEnergyMeter({mChannelId}, &measurements).isOk()) {
for (const auto &m : measurements) {
totalEnergyUWs += m.energyUWs;
timestampMs = m.timestampMs;
}
} else {
LOG(ERROR) << "Failed to read energy meter";
return {};
}
}
return EnergyConsumerResult{.timestampMs = timestampMs,
.energyUWs = totalEnergyUWs>>1};
}
std::string getConsumerName() override {
return kName;
};
private:
const EnergyConsumerType kType;
const std::string kName;
std::shared_ptr<PowerStats> mPowerStats;
int32_t mChannelId;
};
void addPlaceholderEnergyConsumers(std::shared_ptr<PowerStats> p) {
p->addEnergyConsumer(
std::make_unique<PlaceholderEnergyConsumer>(p, EnergyConsumerType::WIFI, "Wifi"));
p->addEnergyConsumer(
std::make_unique<PlaceholderEnergyConsumer>(p, EnergyConsumerType::BLUETOOTH, "BT"));
}
void addAoC(std::shared_ptr<PowerStats> p) {
// When the given timeout is 0, the timeout will be replaced with "120ms * statesCount".
static const uint64_t TIMEOUT_MILLIS = 0;
// AoC clock is synced from "libaoc.c"
static const uint64_t AOC_CLOCK = 24576;
std::string prefix = "/sys/devices/platform/19000000.aoc/control/";
// Add AoC cores (a32, ff1, hf0, and hf1)
std::vector<std::pair<std::string, std::string>> coreIds = {
{"AoC-A32", prefix + "a32_"},
{"AoC-FF1", prefix + "ff1_"},
{"AoC-HF1", prefix + "hf1_"},
{"AoC-HF0", prefix + "hf0_"},
};
std::vector<std::pair<std::string, std::string>> coreStates = {
{"DWN", "off"}, {"RET", "retention"}, {"WFI", "wfi"}};
p->addStateResidencyDataProvider(std::make_unique<AocTimedStateResidencyDataProvider>(coreIds,
coreStates, TIMEOUT_MILLIS, AOC_CLOCK));
// Add AoC voltage stats
std::vector<std::pair<std::string, std::string>> voltageIds = {
{"AoC-Voltage", prefix + "voltage_"},
};
std::vector<std::pair<std::string, std::string>> voltageStates = {{"NOM", "nominal"},
{"SUD", "super_underdrive"},
{"UUD", "ultra_underdrive"},
{"UD", "underdrive"}};
p->addStateResidencyDataProvider(
std::make_unique<AocTimedStateResidencyDataProvider>(voltageIds, voltageStates,
TIMEOUT_MILLIS, AOC_CLOCK));
// Add AoC monitor mode
std::vector<std::pair<std::string, std::string>> monitorIds = {
{"AoC", prefix + "monitor_"},
};
std::vector<std::pair<std::string, std::string>> monitorStates = {
{"MON", "mode"},
};
p->addStateResidencyDataProvider(
std::make_unique<AocTimedStateResidencyDataProvider>(monitorIds, monitorStates,
TIMEOUT_MILLIS, AOC_CLOCK));
// Add AoC restart count
const GenericStateResidencyDataProvider::StateResidencyConfig restartCountConfig = {
.entryCountSupported = true,
.entryCountPrefix = "",
.totalTimeSupported = false,
.lastEntrySupported = false,
};
const std::vector<std::pair<std::string, std::string>> restartCountHeaders = {
std::make_pair("RESTART", ""),
};
std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> cfgs;
cfgs.emplace_back(
generateGenericStateResidencyConfigs(restartCountConfig, restartCountHeaders),
"AoC-Count", "");
p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
"/sys/devices/platform/19000000.aoc/restart_count", cfgs));
}
void addDvfsStats(std::shared_ptr<PowerStats> p) {
// A constant to represent the number of nanoseconds in one millisecond
const int NS_TO_MS = 1000000;
std::string path = "/sys/devices/platform/acpm_stats/fvp_stats";
std::vector<std::pair<std::string, std::string>> adpCfgs = {
std::make_pair("CL0", "/sys/devices/system/cpu/cpufreq/policy0/stats"),
std::make_pair("CL1", "/sys/devices/system/cpu/cpufreq/policy4/stats"),
std::make_pair("CL2", "/sys/devices/system/cpu/cpufreq/policy6/stats")
};
p->addStateResidencyDataProvider(std::make_unique<AdaptiveDvfsStateResidencyDataProvider>(
path, NS_TO_MS, adpCfgs));
std::vector<DvfsStateResidencyDataProvider::Config> cfgs;
cfgs.push_back({"TPU", {
std::make_pair("1066MHz", "1066000"),
std::make_pair("845MHz", "845000"),
std::make_pair("627MHz", "627000"),
std::make_pair("401MHz", "401000"),
std::make_pair("226MHz", "226000"),
std::make_pair("0MHz", "0"),
}});
cfgs.push_back({"AUR", {
std::make_pair("1160MHz", "1160000"),
std::make_pair("750MHz", "750000"),
std::make_pair("373MHz", "373000"),
std::make_pair("178MHz", "178000"),
std::make_pair("0MHz", "0"),
}});
p->addStateResidencyDataProvider(std::make_unique<DvfsStateResidencyDataProvider>(
path, NS_TO_MS, cfgs));
}
void addSoC(std::shared_ptr<PowerStats> p) {
// A constant to represent the number of nanoseconds in one millisecond.
const int NS_TO_MS = 1000000;
// ACPM stats are reported in nanoseconds. The transform function
// converts nanoseconds to milliseconds.
std::function<uint64_t(uint64_t)> acpmNsToMs = [](uint64_t a) { return a / NS_TO_MS; };
const GenericStateResidencyDataProvider::StateResidencyConfig lpmStateConfig = {
.entryCountSupported = true,
.entryCountPrefix = "success_count:",
.totalTimeSupported = true,
.totalTimePrefix = "total_time_ns:",
.totalTimeTransform = acpmNsToMs,
.lastEntrySupported = true,
.lastEntryPrefix = "last_entry_time_ns:",
.lastEntryTransform = acpmNsToMs,
};
const GenericStateResidencyDataProvider::StateResidencyConfig downStateConfig = {
.entryCountSupported = true,
.entryCountPrefix = "down_count:",
.totalTimeSupported = true,
.totalTimePrefix = "total_down_time_ns:",
.totalTimeTransform = acpmNsToMs,
.lastEntrySupported = true,
.lastEntryPrefix = "last_down_time_ns:",
.lastEntryTransform = acpmNsToMs,
};
const GenericStateResidencyDataProvider::StateResidencyConfig reqStateConfig = {
.entryCountSupported = true,
.entryCountPrefix = "req_up_count:",
.totalTimeSupported = true,
.totalTimePrefix = "total_req_up_time_ns:",
.totalTimeTransform = acpmNsToMs,
.lastEntrySupported = true,
.lastEntryPrefix = "last_req_up_time_ns:",
.lastEntryTransform = acpmNsToMs,
};
const std::vector<std::pair<std::string, std::string>> powerStateHeaders = {
std::make_pair("SICD", "SICD"),
std::make_pair("SLEEP", "SLEEP"),
std::make_pair("SLEEP_SLCMON", "SLEEP_SLCMON"),
std::make_pair("SLEEP_HSI1ON", "SLEEP_HSI1ON"),
std::make_pair("STOP", "STOP"),
};
const std::vector<std::pair<std::string, std::string>> mifReqStateHeaders = {
std::make_pair("AOC", "AOC"),
std::make_pair("GSA", "GSA"),
std::make_pair("TPU", "TPU"),
};
const std::vector<std::pair<std::string, std::string>> slcReqStateHeaders = {
std::make_pair("AOC", "AOC"),
};
std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> cfgs;
cfgs.emplace_back(generateGenericStateResidencyConfigs(lpmStateConfig, powerStateHeaders),
"LPM", "LPM:");
cfgs.emplace_back(generateGenericStateResidencyConfigs(downStateConfig, powerStateHeaders),
"MIF", "MIF:");
cfgs.emplace_back(generateGenericStateResidencyConfigs(reqStateConfig, mifReqStateHeaders),
"MIF-REQ", "MIF_REQ:");
cfgs.emplace_back(generateGenericStateResidencyConfigs(downStateConfig, powerStateHeaders),
"SLC", "SLC:");
cfgs.emplace_back(generateGenericStateResidencyConfigs(reqStateConfig, slcReqStateHeaders),
"SLC-REQ", "SLC_REQ:");
p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
"/sys/devices/platform/acpm_stats/soc_stats", cfgs));
}
void setEnergyMeter(std::shared_ptr<PowerStats> p) {
std::vector<std::string> deviceNames { "s2mpg12-odpm", "s2mpg13-odpm" };
p->setEnergyMeterDataProvider(std::make_unique<IioEnergyMeterDataProvider>(deviceNames, true));
}
void addCPUclusters(std::shared_ptr<PowerStats> p) {
// A constant to represent the number of nanoseconds in one millisecond.
const int NS_TO_MS = 1000000;
std::function<uint64_t(uint64_t)> acpmNsToMs = [](uint64_t a) { return a / NS_TO_MS; };
const GenericStateResidencyDataProvider::StateResidencyConfig cpuStateConfig = {
.entryCountSupported = true,
.entryCountPrefix = "down_count:",
.totalTimeSupported = true,
.totalTimePrefix = "total_down_time_ns:",
.totalTimeTransform = acpmNsToMs,
.lastEntrySupported = true,
.lastEntryPrefix = "last_down_time_ns:",
.lastEntryTransform = acpmNsToMs,
};
const std::vector<std::pair<std::string, std::string>> cpuStateHeaders = {
std::make_pair("DOWN", ""),
};
std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> cfgs;
for (std::string name : {"CORE00", "CORE01", "CORE02", "CORE03", "CORE10", "CORE11",
"CORE20", "CORE21", "CLUSTER0", "CLUSTER1", "CLUSTER2"}) {
cfgs.emplace_back(generateGenericStateResidencyConfigs(cpuStateConfig, cpuStateHeaders),
name, name);
}
p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
"/sys/devices/platform/acpm_stats/core_stats", cfgs));
p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p,
EnergyConsumerType::CPU_CLUSTER, "CPUCL0", {"S4M_VDD_CPUCL0"}));
p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p,
EnergyConsumerType::CPU_CLUSTER, "CPUCL1", {"S3M_VDD_CPUCL1"}));
p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p,
EnergyConsumerType::CPU_CLUSTER, "CPUCL2", {"S2M_VDD_CPUCL2"}));
}
void addGPU(std::shared_ptr<PowerStats> p) {
// Add gpu energy consumer
std::map<std::string, int32_t> stateCoeffs;
// TODO (b/197721618): Measuring the GPU power numbers
stateCoeffs = {
{"202000", 890},
{"251000", 1102},
{"302000", 1308},
{"351000", 1522},
{"400000", 1772},
{"471000", 2105},
{"510000", 2292},
{"572000", 2528},
{"701000", 3127},
{"762000", 3452},
{"848000", 4044}};
p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterAndAttrConsumer(p,
EnergyConsumerType::OTHER, "GPU", {"S8S_VDD_G3D_L2", "S2S_VDD_G3D"},
{{UID_TIME_IN_STATE, "/sys/devices/platform/28000000.mali/uid_time_in_state"}},
stateCoeffs));
p->addStateResidencyDataProvider(std::make_unique<DevfreqStateResidencyDataProvider>("GPU",
"/sys/devices/platform/28000000.mali"));
}
void addMobileRadio(std::shared_ptr<PowerStats> p)
{
// A constant to represent the number of microseconds in one millisecond.
const int US_TO_MS = 1000;
// modem power_stats are reported in microseconds. The transform function
// converts microseconds to milliseconds.
std::function<uint64_t(uint64_t)> modemUsToMs = [](uint64_t a) { return a / US_TO_MS; };
const GenericStateResidencyDataProvider::StateResidencyConfig powerStateConfig = {
.entryCountSupported = true,
.entryCountPrefix = "count:",
.totalTimeSupported = true,
.totalTimePrefix = "duration_usec:",
.totalTimeTransform = modemUsToMs,
.lastEntrySupported = true,
.lastEntryPrefix = "last_entry_timestamp_usec:",
.lastEntryTransform = modemUsToMs,
};
const std::vector<std::pair<std::string, std::string>> powerStateHeaders = {
std::make_pair("SLEEP", "SLEEP:"),
};
std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> cfgs;
cfgs.emplace_back(generateGenericStateResidencyConfigs(powerStateConfig, powerStateHeaders),
"MODEM", "");
p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
"/sys/devices/platform/cpif/modem/power_stats", cfgs));
p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p,
EnergyConsumerType::MOBILE_RADIO, "MODEM",
{"VSYS_PWR_MODEM", "VSYS_PWR_RFFE", "VSYS_PWR_MMWAVE"}));
}
void addGNSS(std::shared_ptr<PowerStats> p)
{
// A constant to represent the number of microseconds in one millisecond.
const int US_TO_MS = 1000;
// gnss power_stats are reported in microseconds. The transform function
// converts microseconds to milliseconds.
std::function<uint64_t(uint64_t)> gnssUsToMs = [](uint64_t a) { return a / US_TO_MS; };
const GenericStateResidencyDataProvider::StateResidencyConfig gnssStateConfig = {
.entryCountSupported = true,
.entryCountPrefix = "count:",
.totalTimeSupported = true,
.totalTimePrefix = "duration_usec:",
.totalTimeTransform = gnssUsToMs,
.lastEntrySupported = true,
.lastEntryPrefix = "last_entry_timestamp_usec:",
.lastEntryTransform = gnssUsToMs,
};
const std::vector<std::pair<std::string, std::string>> gnssStateHeaders = {
std::make_pair("ON", "GPS_ON:"),
std::make_pair("OFF", "GPS_OFF:"),
};
std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> cfgs;
cfgs.emplace_back(generateGenericStateResidencyConfigs(gnssStateConfig, gnssStateHeaders),
"GPS", "");
p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
"/dev/bbd_pwrstat", cfgs));
p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p,
EnergyConsumerType::GNSS, "GPS", {"L9S_GNSS_CORE"}));
}
void addPCIe(std::shared_ptr<PowerStats> p) {
// Add PCIe power entities for Modem and WiFi
const GenericStateResidencyDataProvider::StateResidencyConfig pcieStateConfig = {
.entryCountSupported = true,
.entryCountPrefix = "Cumulative count:",
.totalTimeSupported = true,
.totalTimePrefix = "Cumulative duration msec:",
.lastEntrySupported = true,
.lastEntryPrefix = "Last entry timestamp msec:",
};
const std::vector<std::pair<std::string, std::string>> pcieStateHeaders = {
std::make_pair("UP", "Link up:"),
std::make_pair("DOWN", "Link down:"),
};
// Add PCIe - Modem
const std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> pcieModemCfgs = {
{generateGenericStateResidencyConfigs(pcieStateConfig, pcieStateHeaders), "PCIe-Modem",
"Version: 1"}
};
p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
"/sys/devices/platform/11920000.pcie/power_stats", pcieModemCfgs));
// Add PCIe - WiFi
const std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> pcieWifiCfgs = {
{generateGenericStateResidencyConfigs(pcieStateConfig, pcieStateHeaders),
"PCIe-WiFi", "Version: 1"}
};
p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
"/sys/devices/platform/14520000.pcie/power_stats", pcieWifiCfgs));
}
void addWifi(std::shared_ptr<PowerStats> p) {
// The transform function converts microseconds to milliseconds.
std::function<uint64_t(uint64_t)> usecToMs = [](uint64_t a) { return a / 1000; };
const GenericStateResidencyDataProvider::StateResidencyConfig stateConfig = {
.entryCountSupported = true,
.entryCountPrefix = "count:",
.totalTimeSupported = true,
.totalTimePrefix = "duration_usec:",
.totalTimeTransform = usecToMs,
.lastEntrySupported = true,
.lastEntryPrefix = "last_entry_timestamp_usec:",
.lastEntryTransform = usecToMs,
};
const GenericStateResidencyDataProvider::StateResidencyConfig pcieStateConfig = {
.entryCountSupported = true,
.entryCountPrefix = "count:",
.totalTimeSupported = true,
.totalTimePrefix = "duration_usec:",
.totalTimeTransform = usecToMs,
.lastEntrySupported = false,
};
const std::vector<std::pair<std::string, std::string>> stateHeaders = {
std::make_pair("AWAKE", "AWAKE:"),
std::make_pair("ASLEEP", "ASLEEP:"),
};
const std::vector<std::pair<std::string, std::string>> pcieStateHeaders = {
std::make_pair("L0", "L0:"),
std::make_pair("L1", "L1:"),
std::make_pair("L1_1", "L1_1:"),
std::make_pair("L1_2", "L1_2:"),
std::make_pair("L2", "L2:"),
};
const std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> cfgs = {
{generateGenericStateResidencyConfigs(stateConfig, stateHeaders), "WIFI", "WIFI"},
{generateGenericStateResidencyConfigs(pcieStateConfig, pcieStateHeaders), "WIFI-PCIE",
"WIFI-PCIE"}
};
p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>("/sys/wifi/power_stats",
cfgs));
}
void addWlan(std::shared_ptr<PowerStats> p) {
p->addStateResidencyDataProvider(std::make_unique<WlanStateResidencyDataProvider>(
"WLAN",
"/sys/kernel/wifi/power_stats"));
}
void addUfs(std::shared_ptr<PowerStats> p) {
p->addStateResidencyDataProvider(std::make_unique<UfsStateResidencyDataProvider>("/sys/bus/platform/devices/14700000.ufs/ufs_stats/"));
}
void addPowerDomains(std::shared_ptr<PowerStats> p) {
// A constant to represent the number of nanoseconds in one millisecond.
const int NS_TO_MS = 1000000;
std::function<uint64_t(uint64_t)> acpmNsToMs = [](uint64_t a) { return a / NS_TO_MS; };
const GenericStateResidencyDataProvider::StateResidencyConfig cpuStateConfig = {
.entryCountSupported = true,
.entryCountPrefix = "on_count:",
.totalTimeSupported = true,
.totalTimePrefix = "total_on_time_ns:",
.totalTimeTransform = acpmNsToMs,
.lastEntrySupported = true,
.lastEntryPrefix = "last_on_time_ns:",
.lastEntryTransform = acpmNsToMs,
};
const std::vector<std::pair<std::string, std::string>> cpuStateHeaders = {
std::make_pair("ON", ""),
};
std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> cfgs;
for (std::string name : {"pd-aur", "pd-tpu", "pd-bo", "pd-tnr", "pd-gdc", "pd-mcsc", "pd-itp",
"pd-ipp", "pd-g3aa", "pd-dns", "pd-pdp", "pd-csis",
"pd-mfc", "pd-g2d", "pd-disp", "pd-dpu", "pd-hsi0",
"pd-g3d", "pd-embedded_g3d", "pd-eh"}) {
cfgs.emplace_back(generateGenericStateResidencyConfigs(cpuStateConfig, cpuStateHeaders),
name, name + ":");
}
p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
"/sys/devices/platform/acpm_stats/pd_stats", cfgs));
}
void addDevfreq(std::shared_ptr<PowerStats> p) {
p->addStateResidencyDataProvider(std::make_unique<DevfreqStateResidencyDataProvider>(
"MIF",
"/sys/devices/platform/17000010.devfreq_mif/devfreq/17000010.devfreq_mif"));
p->addStateResidencyDataProvider(std::make_unique<DevfreqStateResidencyDataProvider>(
"INT",
"/sys/devices/platform/17000020.devfreq_int/devfreq/17000020.devfreq_int"));
p->addStateResidencyDataProvider(std::make_unique<DevfreqStateResidencyDataProvider>(
"INTCAM",
"/sys/devices/platform/17000030.devfreq_intcam/devfreq/17000030.devfreq_intcam"));
p->addStateResidencyDataProvider(std::make_unique<DevfreqStateResidencyDataProvider>(
"DISP",
"/sys/devices/platform/17000040.devfreq_disp/devfreq/17000040.devfreq_disp"));
p->addStateResidencyDataProvider(std::make_unique<DevfreqStateResidencyDataProvider>(
"CAM",
"/sys/devices/platform/17000050.devfreq_cam/devfreq/17000050.devfreq_cam"));
p->addStateResidencyDataProvider(std::make_unique<DevfreqStateResidencyDataProvider>(
"TNR",
"/sys/devices/platform/17000060.devfreq_tnr/devfreq/17000060.devfreq_tnr"));
p->addStateResidencyDataProvider(std::make_unique<DevfreqStateResidencyDataProvider>(
"MFC",
"/sys/devices/platform/17000070.devfreq_mfc/devfreq/17000070.devfreq_mfc"));
p->addStateResidencyDataProvider(std::make_unique<DevfreqStateResidencyDataProvider>(
"BO",
"/sys/devices/platform/17000080.devfreq_bo/devfreq/17000080.devfreq_bo"));
}
void addTPU(std::shared_ptr<PowerStats> p) {
std::map<std::string, int32_t> stateCoeffs;
stateCoeffs = {
// TODO (b/197721618): Measuring the TPU power numbers
{"226000", 10},
{"627000", 20},
{"845000", 30},
{"1066000", 40}};
p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterAndAttrConsumer(p,
EnergyConsumerType::OTHER, "TPU", {"S10M_VDD_TPU"},
{{UID_TIME_IN_STATE, "/sys/class/edgetpu/edgetpu-soc/device/tpu_usage"}},
stateCoeffs));
}
/**
* Unlike other data providers, which source power entity state residency data from the kernel,
* this data provider acts as a general-purpose channel for state residency data providers
* that live in user space. Entities are defined here and user space clients of this provider's
* vendor service register callbacks to provide state residency data for their given pwoer entity.
*/
void addPixelStateResidencyDataProvider(std::shared_ptr<PowerStats> p) {
auto pixelSdp = std::make_unique<PixelStateResidencyDataProvider>();
pixelSdp->addEntity("Bluetooth", {{0, "Idle"}, {1, "Active"}, {2, "Tx"}, {3, "Rx"}});
pixelSdp->start();
p->addStateResidencyDataProvider(std::move(pixelSdp));
}
void addCamera(std::shared_ptr<PowerStats> p) {
p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(
p,
EnergyConsumerType::CAMERA,
"CAMERA",
{"VSYS_PWR_CAM"}));
}
void addDisplayMrrByEntity(std::shared_ptr<PowerStats> p, std::string name, std::string path) {
p->addStateResidencyDataProvider(std::make_unique<DisplayMrrStateResidencyDataProvider>(
name, path));
}
void addDisplayMrr(std::shared_ptr<PowerStats> p) {
addDisplayMrrByEntity(p, "Display", "/sys/class/drm/card0/device/primary-panel/");
}
void addGs201CommonDataProviders(std::shared_ptr<PowerStats> p) {
setEnergyMeter(p);
addPixelStateResidencyDataProvider(p);
addAoC(p);
addDvfsStats(p);
addSoC(p);
addCPUclusters(p);
addGPU(p);
addMobileRadio(p);
addGNSS(p);
addPCIe(p);
addWifi(p);
addUfs(p);
addPowerDomains(p);
addDevfreq(p);
addTPU(p);
addCamera(p);
}
void addNFC(std::shared_ptr<PowerStats> p, const std::string& path) {
const GenericStateResidencyDataProvider::StateResidencyConfig nfcStateConfig = {
.entryCountSupported = true,
.entryCountPrefix = "Cumulative count:",
.totalTimeSupported = true,
.totalTimePrefix = "Cumulative duration msec:",
.lastEntrySupported = true,
.lastEntryPrefix = "Last entry timestamp msec:",
};
const std::vector<std::pair<std::string, std::string>> nfcStateHeaders = {
std::make_pair("IDLE", "Idle mode:"),
std::make_pair("ACTIVE", "Active mode:"),
std::make_pair("ACTIVE-RW", "Active Reader/Writer mode:"),
};
std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> cfgs;
cfgs.emplace_back(generateGenericStateResidencyConfigs(nfcStateConfig, nfcStateHeaders),
"NFC", "NFC subsystem");
p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
path, cfgs));
}

View File

@@ -0,0 +1,42 @@
/*
* Copyright (C) 2021 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.
*/
#pragma once
#include <PowerStatsAidl.h>
using aidl::android::hardware::power::stats::PowerStats;
void addAoC(std::shared_ptr<PowerStats> p);
void addCPUclusters(std::shared_ptr<PowerStats> p);
void addCamera(std::shared_ptr<PowerStats> p);
void addDevfreq(std::shared_ptr<PowerStats> p);
void addDisplayMrr(std::shared_ptr<PowerStats> p);
void addDisplayMrrByEntity(std::shared_ptr<PowerStats> p, std::string name, std::string path);
void addDvfsStats(std::shared_ptr<PowerStats> p);
void addGNSS(std::shared_ptr<PowerStats> p);
void addGs201CommonDataProviders(std::shared_ptr<PowerStats> p);
void addMobileRadio(std::shared_ptr<PowerStats> p);
void addNFC(std::shared_ptr<PowerStats> p, const std::string& path);
void addPCIe(std::shared_ptr<PowerStats> p);
void addPixelStateResidencyDataProvider(std::shared_ptr<PowerStats> p);
void addPowerDomains(std::shared_ptr<PowerStats> p);
void addSoC(std::shared_ptr<PowerStats> p);
void addTPU(std::shared_ptr<PowerStats> p);
void addUfs(std::shared_ptr<PowerStats> p);
void addWifi(std::shared_ptr<PowerStats> p);
void addWlan(std::shared_ptr<PowerStats> p);
void setEnergyMeter(std::shared_ptr<PowerStats> p);

View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2022 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.
-->
<!-- System packages to preinstall on gs201 debug devices, per user type.
Documentation at frameworks/base/data/etc/preinstalled-packages-platform.xml
-->
<config>
<!-- Battery Stats Viewer -->
<install-in-user-type package="com.android.frameworks.core.batterystatsviewer">
<install-in user-type="FULL" />
<install-in user-type="PROFILE" />
<do-not-install-in user-type="android.os.usertype.profile.CLONE" />
<do-not-install-in user-type="android.os.usertype.profile.PRIVATE" />
</install-in-user-type>
<!-- RCS (Rich Communication Services)
TODO(b/259401601): Check if this should be preinstalled for SYSTEM user -->
<install-in-user-type package="com.google.android.sample.rcsclient">
<install-in user-type="SYSTEM" />
<install-in user-type="FULL" />
<install-in user-type="PROFILE" />
<do-not-install-in user-type="android.os.usertype.profile.CLONE" />
<do-not-install-in user-type="android.os.usertype.profile.PRIVATE" />
</install-in-user-type>
</config>

View File

@@ -1,2 +0,0 @@
# fsck
persist.fsck.disable_linear_lookup=on

View File

@@ -0,0 +1,191 @@
<?xml version="1.0" encoding="utf-8"?>
<NODE FILTER="Basic Metrics">
<ITEM NAME="COMMON">
<ITEM NAME="COMMON_BASIC_INFORMATION" VALUE="0x0100" CHECKED="true"></ITEM>
<ITEM NAME="COMMON_CELL_INFORMATION" VALUE="0x0101" CHECKED="true"></ITEM>
<ITEM NAME="COMMON_DATA_INFORMATION" VALUE="0x0102" CHECKED="true"></ITEM>
<ITEM NAME="COMMON_SIG_MSG_INFORMATION" VALUE="0x0103" CHECKED="true"></ITEM>
<ITEM NAME="COMMON_SMS_INFORMATION" VALUE="0x0104" CHECKED="false"></ITEM>
<ITEM NAME="COMMON_HPLMN_TIMER_INFORMATION" VALUE="0x0105" CHECKED="false"></ITEM>
<ITEM NAME="COMMON_SIG_MSG_INFORMATION_MULTI" VALUE="0x0106" CHECKED="true"></ITEM>
<ITEM NAME="NR_RRC_SIGNALING_MESSAGE" VALUE="0x0108" CHECKED="true"></ITEM>
<ITEM NAME="NR_NAS_SIGNALING_MESSAGE" VALUE="0x0109" CHECKED="true"></ITEM>
<ITEM NAME="COMMON_PC5_SIG_MSG" VALUE="0x010A" CHECKED="true"></ITEM>
</ITEM>
<ITEM NAME="LTE">
<ITEM NAME="LTE_PHY_PHY_STATUS_INFO" VALUE="0x0200" CHECKED="true"></ITEM>
<ITEM NAME="LTE_PHY_CELL_SERCH_MEAS_INFO" VALUE="0x0201" CHECKED="true"></ITEM>
<ITEM NAME="LTE_PHY_NCELL_MEAS_INFO" VALUE="0x0202" CHECKED="true"></ITEM>
<ITEM NAME="LTE_PHY_SYSTEM_INF" VALUE="0x0204" CHECKED="false"></ITEM>
<ITEM NAME="LTE_PHY_CHAN_QUAL_INFO" VALUE="0x0205" CHECKED="true"></ITEM>
<ITEM NAME="LTE_PHY_PARAMETER_INFO" VALUE="0x0206" CHECKED="true"></ITEM>
<ITEM NAME="LTE_PHY_PHICH_INFO" VALUE="0x0207" CHECKED="false"></ITEM>
<ITEM NAME="LTE_PHY_THROUGHPUT_INFO" VALUE="0x0208" CHECKED="true"></ITEM>
<ITEM NAME="LTE_PHY_RCVD_SIGNAL_QUALITY_INFO" VALUE="0x0209" CHECKED="true"></ITEM>
<ITEM NAME="LTE_PHY_PHICH_TTIB_INFO" VALUE="0x020A" CHECKED="false"></ITEM>
<ITEM NAME="LTE_PHY_PUSCH_TTIB_INFO" VALUE="0x020B" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L1_RF_INFO" VALUE="0x0210" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L1_SYNC_INFO" VALUE="0x0211" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L1_DOWNLINK_INFO" VALUE="0x0212" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L1_UPLINK_INFO" VALUE="0x0213" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L1_DRX_CONFIG" VALUE="0x0214" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L1_EVENT" VALUE="0x0215" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L1_PUSCH_STATS" VALUE="0x0216" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L1_RACH_ATTEMPT" VALUE="0x0217" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L1_UL_SCHED_STATS" VALUE="0x0218" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L1_SECONDARY_CELL_INFO" VALUE="0x0219" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L1_OTDOA_MEASURE_REPORT_INFO" VALUE="0x021A" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L1_DOWNLINK_INFO2" VALUE="0x021B" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L1_RF_BLACKOUT_TIME" VALUE="0x0220" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L1_SAR_MTPL" VALUE="0x0221" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L1_ANTENNA_SELECTION" VALUE="0x0222" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L2_UL_SPECIFIC_PARAM" VALUE="0x0230" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L2_DL_SCH_CONFIG" VALUE="0x0231" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L2_UL_SCH_CONFIG" VALUE="0x0232" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L2_TIME_ALIGNMENT_TIMER" VALUE="0x0233" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L2_PHR_CONFIG" VALUE="0x0234" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L2_PREAMBLE_INFO" VALUE="0x0235" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L2_POWER_RAMPING_STEP" VALUE="0x0236" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L2_RA_SUPERVISION_INFO" VALUE="0x0237" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L2_MAX_HARQ_MSG3TX" VALUE="0x0238" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L2_RACH_INFO" VALUE="0x0239" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L2_RNTI_INFO" VALUE="0x023A" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L2_RA_FAILURE_INFO" VALUE="0x023B" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L2_UL_SYNC_STAT_INFO" VALUE="0x023C" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L2_D_SR_STATUS" VALUE="0x023D" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L2_BUFFER_STAT_INFO" VALUE="0x023E" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L2_MAC_THROUGHPUT_INFO" VALUE="0x023F" CHECKED="false"></ITEM>
<ITEM NAME="LTE_L2_RLC_INFO" VALUE="0x0240" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L2_RLC_STATUS_INFO" VALUE="0x0241" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L2_UL_PDCP_INFO" VALUE="0x0242" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L2_DL_PDCP_INFO" VALUE="0x0243" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L2_ROHC_CONF_INFO" VALUE="0x0244" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L2_UL_ROHC_INFO" VALUE="0x0245" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L2_DL_ROHC_INFO" VALUE="0x0246" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L2_TTI_BUNDLING" VALUE="0x0247" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L2_MAC_CE" VALUE="0x0248" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L2_TIMER_STATE" VALUE="0x0249" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L2_BSR_STATS" VALUE="0x024A" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L2_RLC_STATS" VALUE="0x024B" CHECKED="true"></ITEM>
<ITEM NAME="LTE_L2_PDCP_STATS" VALUE="0x024C" CHECKED="true"></ITEM>
<ITEM NAME="LTE_RRC_SERVING_CELL_INFO = 0x0250" VALUE="0x0250" CHECKED="true"></ITEM>
<ITEM NAME="LTE_RRC_STATUS_VARIABLE_INFO" VALUE="0x0251" CHECKED="true"></ITEM>
<ITEM NAME="LTE_RRC_PEER_MSG_INFO" VALUE="0x0252" CHECKED="true"></ITEM>
<ITEM NAME="LTE_RRC_TIMER_INFO" VALUE="0x0253" CHECKED="true"></ITEM>
<ITEM NAME="LTE_RRC_PEER_MULTI_MSG_INFO" VALUE="0x0254" CHECKED="true"></ITEM>
<ITEM NAME="LTE_RRC_RACH_MSG_INFO" VALUE="0x0255" CHECKED="true"></ITEM>
<ITEM NAME="LTE_RRC_TIMER_STATE_INFO" VALUE="0x0256" CHECKED="true"></ITEM>
<ITEM NAME="LTE_RRC_EVENT" VALUE="0x0257" CHECKED="true"></ITEM>
<ITEM NAME="LTE_NAS_SIM_DATA_INFO = 0x0258" VALUE="0x0258" CHECKED="false"></ITEM>
<ITEM NAME="LTE_NAS_STATE_VARIABLE_INFO" VALUE="0x0259" CHECKED="false"></ITEM>
<ITEM NAME="LTE_NAS_L3_MM_MSG_INFO" VALUE="0x025A" CHECKED="true"></ITEM>
<ITEM NAME="LTE_NAS_EPS_BEARER_CONTEXT" VALUE="0x025B" CHECKED="false"></ITEM>
<ITEM NAME="LTE_NAS_EPS_BEARER_QOS" VALUE="0x025C" CHECKED="false"></ITEM>
<ITEM NAME="LTE_NAS_PDP_INFO" VALUE="0x025D" CHECKED="false"></ITEM>
<ITEM NAME="LTE_NAS_IP_INFO" VALUE="0x025E" CHECKED="false"></ITEM>
<ITEM NAME="LTE_NAS_L3_SM_MSG_INFO" VALUE="0x025F" CHECKED="true"></ITEM>
<ITEM NAME="LTE_DATA_HANDOVER_STAT_INFO" VALUE="0x0262" CHECKED="true"></ITEM>
<ITEM NAME="LTE_DATA_CALL_DROP_INFO" VALUE="0x0263" CHECKED="true"></ITEM>
<ITEM NAME="LTE_NAS_TIN_INFO" VALUE="0x0264" CHECKED="false"></ITEM>
<ITEM NAME="LTE_NAS_ATTEMPT_INFO" VALUE="0x0265" CHECKED="false"></ITEM>
<ITEM NAME="LTE_NAS_EMM_TIMER_STATE_INFO" VALUE="0x0266" CHECKED="false"></ITEM>
<ITEM NAME="LTE_NAS_ESM_TIMER_STATE_INFO" VALUE="0x0267" CHECKED="false"></ITEM>
<ITEM NAME="LTE_VOLTE_TX_PACKET_INFO" VALUE="0x0270" CHECKED="false"></ITEM>
<ITEM NAME="LTE_VOLTE_RX_PACKET_INFO" VALUE="0x0271" CHECKED="false"></ITEM>
<ITEM NAME="LTE_VOLTE_TX_OVERALL_STAT_INFO" VALUE="0x0272" CHECKED="false"></ITEM>
<ITEM NAME="LTE_VOLTE_RX_OVERALL_STAT_INFO" VALUE="0x0273" CHECKED="false"></ITEM>
<ITEM NAME="LTE_VOLTE_TX_RTP_STAT_INFO" VALUE="0x0274" CHECKED="false"></ITEM>
<ITEM NAME="LTE_VOLTE_RX_RTP_STAT_INFO" VALUE="0x0275" CHECKED="false"></ITEM>
<ITEM NAME="LTE_VOLTE_RX_RTP_FRAME_INFO" VALUE= "0x0276" CHECKED="false"></ITEM>
<ITEM NAME="LTE_VOLTE_RTP_CALL_STATS" VALUE="0x0277" CHECKED="false"></ITEM>
<ITEM NAME="LTE_VOLTE_TX_RTP_INFO" VALUE="0x0278" CHECKED="false"></ITEM>
<ITEM NAME="LTE_VOLTE_RX_RTP_INFO" VALUE="0x0279" CHECKED="false"></ITEM>
<ITEM NAME="LTE_RRC_MBMS_SERVICE_INFO" VALUE="0x0280" CHECKED="false"></ITEM>
<ITEM NAME="LTE_RF_STATUS_RX_MODE_INFO" VALUE="0x0290" CHECKED="true"></ITEM>
<ITEM NAME="LTE_RF_STATUS_SENSOR_INFO" VALUE="0x0291" CHECKED="false"></ITEM>
<ITEM NAME="LTE_RF_STATUS_TX_SWAP_INFO" VALUE="0x0292" CHECKED="false"></ITEM>
<ITEM NAME="LTE_RF_STATUS_RF_POWER_INFO" VALUE="0x0293" CHECKED="false"></ITEM>
</ITEM>
<ITEM NAME="EDGE">
<ITEM NAME="EDGE_PHY_TIME_SLOT_INFO" VALUE="0x0300" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_PHY_RLC_INFO" VALUE="0x0301" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_RESERVED_MSG_02" VALUE="0x0302" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_PHY_SCELL_MEAS_REPT_INFO" VALUE="0x0303" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_PHY_DEDICATED_STATE_INFO" VALUE="0x0304" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_PHY_SCELL_INFO" VALUE="0x0305" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_PHY_NCELL_INFO" VALUE="0x0306" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_PHY_3G_NCELL_INFO" VALUE="0x0307" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_PHY_HANDOVER_INFO" VALUE="0x0308" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_PHY_HO_HISTORY_INFO" VALUE="0x0309" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_PHY_BASIC_INFO" VALUE="0x030A" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_PHY_MEASUREMENT_INFO" VALUE="0x030B" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_PHY_PWR_CNTRL_INFO" VALUE="0x030C" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_L2_QOS_INFO" VALUE="0x0310" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_L3_MM_GMM_INFO" VALUE="0x0311" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_L2_RLC_STATS" VALUE="0x0312" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_L3_EVENT" VALUE="0x0313" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_L1_SAR_MTPL" VALUE="0x0320" CHECKED="false"></ITEM>
<ITEM NAME="EDGE_L1_ANTENNA_SELECTION" VALUE="0x0321" CHECKED="false"></ITEM>
</ITEM>
<ITEM NAME="HSPA">
<ITEM NAME="HSPA_GP_POWER_CONTROL_INFO" VALUE="0x0400" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_GP_TRCH_BLER_INFO" VALUE="0x0401" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_GP_FINGER_INFO" VALUE="0x0402" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_GD_DPA_INFO" VALUE="0x0403" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_GD_DPA_INFO2" VALUE="0x0404" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_GD_DPA_INFO3" VALUE="0x0405" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_CM_STATE" VALUE="0x040D" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_TRANSPORT_CHANNEL" VALUE="0x040E" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_RL_STATUS" VALUE="0x040F" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_UMTS_RF_INFO" VALUE="0x0410" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_SEARCH_INFO" VALUE="0x0411" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_FREQ_SEARCH_INFO" VALUE="0x0412" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_POWER_CONTROL_INFO" VALUE="0x0413" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_OLPC_INFO" VALUE="0x0414" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_HSDPA_STATS" VALUE="0x0415" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_MID_TYPE_INFO" VALUE="0x0416" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_CELL_MEAS_INFO" VALUE="0x0417" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_INTER_FREQ_MEAS_INFO" VALUE="0x0418" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_INTER_RAT_MEAS_INFO" VALUE="0x0419" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_INTERNAL_MEAS_INFO" VALUE="0x041A" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_SERVING_CELL_INFO" VALUE="0x041B" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_INTRA_FREQ_RESEL_INFO" VALUE="0x041C" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_INTER_FREQ_RESEL_INFO" VALUE="0x041D" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_RESERVED_MSG_1E" VALUE="0x041E" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL1_CHIPSET_DELAY_INFO" VALUE="0x041F" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_URRC_STATUS_INFO" VALUE="0x0420" CHECKED="true"></ITEM>
<ITEM NAME="HSPA_URRC_RB_MAP_INFO" VALUE="0x0421" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_URRC_NETWORK_INFO" VALUE="0x0422" CHECKED="true"></ITEM>
<ITEM NAME="HSPA_URRC_EVENT" VALUE="0x0423" CHECKED="true"></ITEM>
<ITEM NAME="HSPA_UUL_RACH_CONFIG_INFO" VALUE="0x0428" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UUL_UDPCH_CONFIG_INFO" VALUE="0x0429" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UUL_POWER_INFO" VALUE="0x042A" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL2_UPDCP_CHAN_CONF_INFO" VALUE="0x0430" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL2_RLC_AM_CHAN_STAT_INFO" VALUE="0x0431" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL2_URLC_AM_CONFIG_INFO" VALUE="0x0432" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL2_RLC_UM_CHAN_STAT_INFO" VALUE="0x0433" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL2_URLC_UM_CONFIG_INFO" VALUE="0x0434" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL2_HSUPA_STATS" VALUE="0x0435" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL2_WCDMA_MAC_INFO" VALUE="0x0436" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL2_HS_MAC_INFO" VALUE="0x0437" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL2_EUL_MAC_INFO" VALUE="0x0438" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL2_EUL_MAC_STAT_INFO" VALUE="0x0439" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_MM_GMM_INFO" VALUE="0x043A" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL2_RLC_STATS" VALUE="0x043B" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL2_RLC_RESET" VALUE="0x043C" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL3_CC_INFO" VALUE="0x0450" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL3_SS_INFO" VALUE="0x0451" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_UL3_SM_INFO" VALUE="0x0452" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_VOC_RX_STAT = 0x0460" VALUE="0x0460" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_VOC_TX_STAT = 0x0461" VALUE="0x0461" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_L1_SAR_MTPL = 0x0470" VALUE="0x0470" CHECKED="false"></ITEM>
<ITEM NAME="HSPA_L1_ANTENNA_SELECTION" VALUE="0x0471" CHECKED="false"></ITEM>
</ITEM>
<ITEM NAME="CDMA">
<ITEM NAME="CDMA_COM_1X_MESSAGE" VALUE="0x0B00" CHECKED="false"></ITEM>
<ITEM NAME="CDMA_COM_EVDO_MESSAGE" VALUE="0x0B01" CHECKED="false"></ITEM>
<ITEM NAME="CDMA_COM_MRU_TABLE_UPDATE_MESSAGE" VALUE="0x0B10" CHECKED="false"></ITEM>
<ITEM NAME="CDMA_RTT_L3_MESSAGE" VALUE="0x0B30" CHECKED="false"></ITEM>
<ITEM NAME="CDMA_EVDO_L3_MESSAGE" VALUE="0x0B31" CHECKED="false"></ITEM>
</ITEM>
</NODE>

Some files were not shown because too many files have changed in this diff Show More