Snap for 12238800 from 600d262d0a to mainline-tzdata6-release

Change-Id: I08dfd340c80191a086a627c608dfe6fb21f3cf68
This commit is contained in:
Android Build Coastguard Worker 2024-08-16 12:56:09 +00:00
commit 2da45a442c
18 changed files with 405 additions and 376 deletions

2
OWNERS
View file

@ -1,4 +1,4 @@
per-file powerhint.json = jychen@google.com,jenhaochen@google.com,wvw@google.com,joaodias@google.com
# per-file for Pixel device makefiles, see go/pixel-device-mk-owner-checklist for details.
per-file *.mk,*/BoardConfig.mk=file:device/google/gs-common:main:/MK_OWNERS
per-file *.mk,*/BoardConfig.mk,{**/,}Android.bp=file:device/google/gs-common:main:/MK_OWNERS

View file

@ -217,9 +217,34 @@ PRODUCT_SOONG_NAMESPACES += \
device/google/felix
# Increment the SVN for any official public releases
PRODUCT_VENDOR_PROPERTIES += \
ro.vendor.build.svn=53
ifdef RELEASE_SVN_FELIX
TARGET_SVN ?= $(RELEASE_SVN_FELIX)
else
# Set this for older releases that don't use build flag
TARGET_SVN ?= 55
endif
PRODUCT_VENDOR_PROPERTIES += \
ro.vendor.build.svn=$(TARGET_SVN)
# Set device family property for SMR
PRODUCT_PROPERTY_OVERRIDES += \
ro.build.device_family=F10
# Set build properties for SMR builds
ifeq ($(RELEASE_IS_SMR), true)
ifneq (,$(RELEASE_BASE_OS_FELIX))
PRODUCT_BASE_OS := $(RELEASE_BASE_OS_FELIX)
endif
endif
# Set build properties for EMR builds
ifeq ($(RELEASE_IS_EMR), true)
ifneq (,$(RELEASE_BASE_OS_FELIX))
PRODUCT_PROPERTY_OVERRIDES += \
ro.build.version.emergency_base_os=$(RELEASE_BASE_OS_FELIX)
endif
endif
# Vibrator HAL
$(call soong_config_set,haptics,kernel_ver,v$(subst .,_,$(TARGET_LINUX_KERNEL_VERSION)))
PRODUCT_VENDOR_PROPERTIES +=\
@ -229,6 +254,10 @@ PRODUCT_VENDOR_PROPERTIES +=\
persist.vendor.vibrator.hal.chirp.enabled=0
ACTUATOR_MODEL := luxshare_ict_lt_xlra1906d
# Override Output Distortion Gain
PRODUCT_VENDOR_PROPERTIES += \
vendor.audio.hapticgenerator.distortion.output.gain=0.52
# Fingerprint
include device/google/gs101/fingerprint/fpc1540/sw42/fpc1540.mk
FPC_MODULE_TYPE=1542_C
@ -279,14 +308,26 @@ PRODUCT_COPY_FILES += \
# Location
ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
PRODUCT_COPY_FILES += \
device/google/felix/location/gps.xml.f10:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/gps.xml \
device/google/felix/location/lhd.conf.f10:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/lhd.conf \
device/google/felix/location/scd.conf.f10:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/scd.conf
ifneq (,$(filter 6.1, $(TARGET_LINUX_KERNEL_VERSION)))
PRODUCT_COPY_FILES += \
device/google/felix/location/gps.6.1.xml.f10:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/gps.xml
else
PRODUCT_COPY_FILES += \
device/google/felix/location/gps.xml.f10:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/gps.xml
endif
else
PRODUCT_COPY_FILES += \
device/google/felix/location/gps_user.xml.f10:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/gps.xml \
device/google/felix/location/lhd_user.conf.f10:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/lhd.conf \
device/google/felix/location/scd_user.conf.f10:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/scd.conf
ifneq (,$(filter 6.1, $(TARGET_LINUX_KERNEL_VERSION)))
PRODUCT_COPY_FILES += \
device/google/felix/location/gps_user.6.1.xml.f10:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/gps.xml
else
PRODUCT_COPY_FILES += \
device/google/felix/location/gps_user.xml.f10:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/gps.xml
endif
endif
PRODUCT_PACKAGES += \
@ -405,3 +446,6 @@ PRODUCT_PACKAGES += \
NoCutoutOverlay \
AvoidAppsInCutoutOverlay
# Bluetooth device id
PRODUCT_PRODUCT_PROPERTIES += \
bluetooth.device_id.product_id=20494

View file

@ -1,7 +1,7 @@
<compatibility-matrix version="1.0" type="framework" level="7">
<hal format="aidl" optional="true">
<name>com.google.hardware.pixel.display</name>
<version>12</version>
<version>13</version>
<interface>
<name>IDisplay</name>
<instance>secondary</instance>

106
location/gps.6.1.xml.f10 Normal file
View file

@ -0,0 +1,106 @@
<?xml version="1.0" encoding="utf-8"?>
<glgps xmlns="http://www.glpals.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.glpals.com/ glconfig.xsd" >
<hal
PortName="/dev/ttyBCM"
BaudRate="921600"
GpioNStdbyPath="/sys/devices/platform/10940000.spi/spi_master/spi5/spi5.0/nstandby"
CustGpioDelayMs="250"
LogEnabled="true"
Log="JAVA"
SecondaryConfigPath="/data/vendor/gps/overlay/gps_overlay.xml"
LogDirectory="/sdcard/gps/broadcom/storage/"
CtrlPipe="/data/vendor/gps/glgpsctrl"
NmeaOutName="/data/vendor/gps/nmea_out"
acSuplServer="supl.google.com"
SuplPort="7275"
SuplLogEnable="true"
SuplLogFullName="/data/vendor/gps/suplflow.txt"
tlsEnable="true"
SuplSslMethod="SSLv23_NO_TLSv1_2"
SuplEnable="true"
SuplUseApn="false"
SuplUseApnNI="true"
SuplUseFwCellInfo="false"
SuplDummyCellInfo ="true"
SuplTlsCertDirPath="/etc/security/cacerts"
SuplTlsCertPath="/vendor/etc/gnss/gps.cer"
SuplUT1Seconds="20"
SuplUT2Seconds="20"
SuplUT3Seconds="20"
TcpConnectionTimeout="20"
SuplLppCapable="true"
SuplEcidCapable="true"
SuplVersion="2"
SuplMinorVersion="0"
SuplOtdoaCapable="true"
SuplOtdoaCapable2="true"
SuplGlonassCapable = "true"
SuplGalileoCapable = "true"
SuplBdsCapable = "true"
SuplMgpsCapable = "true"
RtoEnable="true"
RtiEnable="true"
HttpSyncLto="true"
LtoFileName="lto2.dat"
LtoDir="/data/vendor/gps/"
LtoSyncThresholdDays="1"
GnssYearOfHardware="2020"
CpGuardTimeSec="1"
CpLppGuardTimeSec="1"
IgnoreInjectedSystemTime="true"
AttributionAppPkgName="com.google.android.carrierlocation"
AssertEnabled="true"
CpLppeCancelDbhOnAgnssProvideLoc="true"
CpLppeUseAgnssLocForEmptyDbh="true"
CpLppHighAccuracyShapeMode="1"
ReAidingOnHotStart="false"
ReAidingIntervalSec="3600"
RuntimeSwLteFilterEnable="true"
PpsDevice="/sys/devices/platform/bbd_pps/pps_assert"
SensorsMask="0x244"
MaxThreadNum="13"
/>
<gll
PpsEnable="true"
LogPriMask="LOG_INFO"
LogFacMask="LOG_NMEA | LOG_GLLIOS | LOG_GLLAPI"
FrqPlan="FRQ_PLAN_26MHZ_2PPM_49_152MHZ_300PPB"
MultiCarrRFMode="GL_MULTI_CARR_RF_MODE_L1_L5"
MultiCarrLnaMask="L1_EXT_ON|L5_EXT_ON"
RfType="GL_RF_4776_BRCM"
ExtL5Bias="13.0"
WarmStandbyTimeout1Seconds="10"
WarmStandbyTimeout2Seconds="15"
EnableGnssPropagateInStandby="true"
RfPathLossDb_Ap="2.9"
RfPathLossDb_Cp="2.9"
RfPathLossDb_Ap_L5="3.7"
RfPathLossDb_Cp_L5="3.7"
OnChipGpsCarrierType="3,2,3,3,2,3,2,3,3,3,1,2,1,3,2,1,2,3,1,1,1,1,3,3,3,3,3,1,2,3,2,3"
EnableOnChipStopNotification="2"
PowerMode="3"
MinGpsWeekNumber="2216"
OnChipAccMask="50"
EnableB1C="false"
RTICacheTimeoutSec="3600"
/>
<gll_features
EnableNicAutoSwitch="true"
EnableNavic="true"
/>
</glgps>

View file

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<glgps xmlns="http://www.glpals.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.glpals.com/ glconfig.xsd" >
<hal
PortName="/dev/ttyBCM"
BaudRate="921600"
GpioNStdbyPath="/sys/devices/platform/10940000.spi/spi_master/spi5/spi5.0/nstandby"
CustGpioDelayMs="250"
LogEnabled="false"
Log="JAVA"
LogDirectory="/sdcard/gps/broadcom/storage/"
CtrlPipe="/data/vendor/gps/glgpsctrl"
NmeaOutName="/data/vendor/gps/nmea_out"
acSuplServer="supl.google.com"
SuplPort="7275"
SuplLogEnable="false"
SuplLogFullName="/data/vendor/gps/suplflow.txt"
tlsEnable="true"
SuplSslMethod="SSLv23_NO_TLSv1_2"
SuplEnable="true"
SuplUseApn="false"
SuplUseApnNI="true"
SuplUseFwCellInfo="false"
SuplDummyCellInfo ="true"
SuplTlsCertDirPath="/etc/security/cacerts"
SuplTlsCertPath="/vendor/etc/gnss/gps.cer"
SuplUT1Seconds="20"
SuplUT2Seconds="20"
SuplUT3Seconds="20"
TcpConnectionTimeout="20"
SuplLppCapable="true"
SuplEcidCapable="true"
SuplVersion="2"
SuplMinorVersion="0"
SuplOtdoaCapable="true"
SuplOtdoaCapable2="true"
SuplGlonassCapable = "true"
SuplGalileoCapable = "true"
SuplBdsCapable = "true"
SuplMgpsCapable = "true"
RtoEnable="true"
RtiEnable="true"
HttpSyncLto="true"
LtoFileName="lto2.dat"
LtoDir="/data/vendor/gps/"
LtoSyncThresholdDays="1"
GnssYearOfHardware="2020"
CpGuardTimeSec="1"
CpLppGuardTimeSec="1"
IgnoreInjectedSystemTime="true"
AttributionAppPkgName="com.google.android.carrierlocation"
AssertEnabled="false"
CpLppeCancelDbhOnAgnssProvideLoc="true"
CpLppeUseAgnssLocForEmptyDbh="true"
CpLppHighAccuracyShapeMode="1"
ReAidingOnHotStart="false"
ReAidingIntervalSec="3600"
RuntimeSwLteFilterEnable="true"
PpsDevice="/sys/devices/platform/bbd_pps/pps_assert"
SensorsMask="0x244"
MaxThreadNum="13"
/>
<gll
PpsEnable="true"
LogPriMask="LOG_INFO"
LogFacMask="LOG_NMEA | LOG_GLLIOS | LOG_GLLAPI"
FrqPlan="FRQ_PLAN_26MHZ_2PPM_49_152MHZ_300PPB"
MultiCarrRFMode="GL_MULTI_CARR_RF_MODE_L1_L5"
MultiCarrLnaMask="L1_EXT_ON|L5_EXT_ON"
RfType="GL_RF_4776_BRCM"
ExtL5Bias="13.0"
WarmStandbyTimeout1Seconds="10"
WarmStandbyTimeout2Seconds="15"
EnableGnssPropagateInStandby="true"
RfPathLossDb_Ap="2.9"
RfPathLossDb_Cp="2.9"
RfPathLossDb_Ap_L5="3.7"
RfPathLossDb_Cp_L5="3.7"
OnChipGpsCarrierType="3,2,3,3,2,3,2,3,3,3,1,2,1,3,2,1,2,3,1,1,1,1,3,3,3,3,3,1,2,3,2,3"
EnableOnChipStopNotification="0"
PowerMode="3"
MinGpsWeekNumber="2216"
OnChipAccMask="50"
EnableB1C="false"
RTICacheTimeoutSec="3600"
/>
<gll_features
EnableNicAutoSwitch="true"
EnableNavic="true"
/>
</glgps>

View file

@ -1959,18 +1959,6 @@
"Duration": 50,
"Value": "1"
},
{
"PowerHint": "THERMAL_FLASH_LED_REDUCE_CRITICAL",
"Node": "LimitFlashCurrent",
"Duration": 0,
"Value": "100"
},
{
"PowerHint": "THERMAL_FLASH_LED_REDUCE_NONE",
"Node": "LimitFlashCurrent",
"Duration": 0,
"Value": "1500"
},
{
"PowerHint": "EXPENSIVE_RENDERING",
"Node": "PowerHALRenderingState",
@ -2209,11 +2197,12 @@
"TargetTimeFactor": 1.0,
"StaleTimeFactor": 15.0,
"HeuristicBoost_On": true,
"HBoostOnMissedCycles": 8,
"HBoostOffMaxAvgRatio": 4.0,
"HBoostOffMissedCycles": 5,
"HBoostPidPuFactor": 0.5,
"HBoostUclampMin": 722,
"HBoostModerateJankThreshold": 2,
"HBoostOffMaxAvgDurRatio": 4.0,
"HBoostSevereJankPidPu": 0.5,
"HBoostSevereJankThreshold": 8,
"HBoostUclampMinCeilingRange": [480, 722],
"HBoostUclampMinFloorRange": [230, 410],
"JankCheckTimeFactor": 1.2,
"LowFrameRateThreshold": 25,
"MaxRecordsNum": 300
@ -2244,11 +2233,12 @@
"TargetTimeFactor": 1.0,
"StaleTimeFactor": 15.0,
"HeuristicBoost_On": true,
"HBoostOnMissedCycles": 8,
"HBoostOffMaxAvgRatio": 4.0,
"HBoostOffMissedCycles": 5,
"HBoostPidPuFactor": 0.5,
"HBoostUclampMin": 722,
"HBoostModerateJankThreshold": 2,
"HBoostOffMaxAvgDurRatio": 4.0,
"HBoostSevereJankPidPu": 0.5,
"HBoostSevereJankThreshold": 8,
"HBoostUclampMinCeilingRange": [480, 722],
"HBoostUclampMinFloorRange": [230, 410],
"JankCheckTimeFactor": 1.2,
"LowFrameRateThreshold": 25,
"MaxRecordsNum": 300
@ -2279,11 +2269,12 @@
"TargetTimeFactor": 1.0,
"StaleTimeFactor": 15.0,
"HeuristicBoost_On": true,
"HBoostOnMissedCycles": 8,
"HBoostOffMaxAvgRatio": 4.0,
"HBoostOffMissedCycles": 5,
"HBoostPidPuFactor": 0.5,
"HBoostUclampMin": 722,
"HBoostModerateJankThreshold": 2,
"HBoostOffMaxAvgDurRatio": 4.0,
"HBoostSevereJankPidPu": 0.5,
"HBoostSevereJankThreshold": 8,
"HBoostUclampMinCeilingRange": [480, 722],
"HBoostUclampMinFloorRange": [230, 410],
"JankCheckTimeFactor": 1.2,
"LowFrameRateThreshold": 25,
"MaxRecordsNum": 300

View file

@ -29,8 +29,8 @@
<item>30</item>
</integer-array>
<integer-array name="antenna_y">
<item>103</item>
<item>103</item>
<item>44</item>
<item>44</item>
</integer-array>
<bool name="nfc_observe_mode_supported">true</bool>
</resources>

View file

@ -550,318 +550,28 @@
"Type":"NPU",
"HotThreshold":["NAN", "NAN", "NAN", "NAN", "NAN", "NAN", "NAN"],
"Multiplier":0.001
},
{
"Name":"battery_cycle",
"Type":"BCL_VOLTAGE",
"Multiplier":1,
"SendCallback":false
},
{
"Name":"critical-battery-cell",
"Type":"BCL_VOLTAGE",
"VirtualSensor":true,
"Formula":"COUNT_THRESHOLD",
"TriggerSensor": "vdroop1",
"Combination":["battery", "battery_cycle", "vdroop1"],
"Coefficient":[-10000, 400, 1000],
"HotThreshold":["NAN", "NAN", "NAN", "NAN", "NAN", 3.00, "NAN"],
"Multiplier":1,
"SendCallback":true
},
{
"Name":"FLASH_LED_REDUCE",
"Type":"UNKNOWN",
"VirtualSensor":true,
"Formula":"COUNT_THRESHOLD",
"TriggerSensor": "vdroop1",
"Combination":["battery", "battery_cycle", "vdroop1"],
"Coefficient":[-10000, 400, 1000],
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 3.00, "NAN", "NAN"],
"Multiplier":1,
"SendCallback":true,
"SendPowerHint":true
},
{
"Name":"soc",
"Type":"BCL_PERCENTAGE",
"HotThreshold":["NAN", "NAN", 80, "NAN", "NAN", "NAN", "NAN"],
"Multiplier":1
},
{
"Name":"BCL_TPU_LOW_TEMP",
"Type":"BCL_CURRENT",
"VirtualSensor":true,
"Formula":"WEIGHTED_AVG",
"TriggerSensor": "ocp_tpu",
"Combination":["ocp_tpu", "battery"],
"Coefficient":[1, -10],
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 13000, "NAN", "NAN"],
"Multiplier":1,
"SendCallback":true,
"BindedCdevInfo": [
{
"CdevRequest": "tpu_cooling",
"LimitInfo": [0, 0, 0, 0, 7, 7, 7]
}
]
},
{
"Name":"BCL_GPU_LOW_TEMP",
"Type":"BCL_CURRENT",
"VirtualSensor":true,
"Formula":"WEIGHTED_AVG",
"TriggerSensor": "ocp_gpu",
"Combination":["ocp_gpu", "battery"],
"Coefficient":[1, -10],
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 13000, "NAN", "NAN"],
"Multiplier":1,
"SendCallback":true,
"BindedCdevInfo": [
{
"CdevRequest": "thermal-gpufreq-0",
"LimitInfo": [0, 0, 0, 0, 9, 9, 9]
}
]
},
{
"Name":"BCL_BATOILO_GPU_LOW_TEMP",
"Type":"BCL_CURRENT",
"VirtualSensor":true,
"Formula":"COUNT_THRESHOLD",
"TriggerSensor": "batoilo",
"Combination":["batoilo", "ocp_gpu", "battery"],
"Coefficient":[5000, 12000, -1000 ],
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 3.0, "NAN", "NAN"],
"Multiplier":1,
"SendCallback":true,
"BindedCdevInfo": [
{
"CdevRequest": "thermal-gpufreq-0",
"LimitInfo": [0, 0, 0, 0, 9, 9, 9]
}
]
},
{
"Name":"BCL_BATOILO_TPU_LOW_TEMP",
"Type":"BCL_CURRENT",
"VirtualSensor":true,
"Formula":"COUNT_THRESHOLD",
"TriggerSensor": "batoilo",
"Combination":["batoilo", "ocp_tpu", "battery"],
"Coefficient":[5000, 12000, -1000],
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 3.0, "NAN", "NAN"],
"Multiplier":1,
"SendCallback":true,
"BindedCdevInfo": [
{
"CdevRequest": "tpu_cooling",
"LimitInfo": [0, 0, 0, 0, 7, 7, 7]
}
]
},
{
"Name":"BCL_BATOILO_GPU",
"Type":"BCL_CURRENT",
"VirtualSensor":true,
"Formula":"COUNT_THRESHOLD",
"TriggerSensor": "batoilo",
"Combination":["batoilo", "ocp_gpu"],
"Coefficient":[5000, 12000],
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 2.0, "NAN", "NAN"],
"Multiplier":1,
"SendCallback":true,
"BindedCdevInfo": [
{
"CdevRequest": "thermal-gpufreq-0",
"LimitInfo": [0, 0, 0, 0, 4, 4, 4]
}
]
},
{
"Name":"BCL_BATOILO_TPU",
"Type":"BCL_CURRENT",
"VirtualSensor":true,
"Formula":"COUNT_THRESHOLD",
"TriggerSensor": "batoilo",
"Combination":[
"batoilo",
"ocp_tpu"
],
"Coefficient":[5000, 12000],
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 2.0, "NAN", "NAN"],
"Multiplier":1,
"SendCallback":true,
"BindedCdevInfo": [
{
"CdevRequest": "tpu_cooling",
"LimitInfo": [0, 0, 0, 0, 6, 6, 6]
}
]
},
{
"Name":"batoilo",
"Type":"BCL_CURRENT",
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 5000, "NAN", "NAN"],
"HotHysteresis":[0.0, 0.0, 0.0, 0.0, 100, 0.0, 0.0],
"Multiplier":1,
"SendCallback":true,
"PollingDelay":0,
"PassiveDelay":60000,
"BindedCdevInfo": [
{
"CdevRequest": "thermal-cpufreq-2",
"LimitInfo": [0, 0, 0, 0, 7, 7, 7]
},
{
"CdevRequest": "thermal-gpufreq-0",
"LimitInfo": [0, 0, 0, 0, 3, 3, 3]
},
{
"CdevRequest": "tpu_cooling",
"LimitInfo": [0, 0, 0, 0, 5, 5, 5]
}
]
},
{
"Name":"BCL_AUDIO_BAACL",
"Type":"BCL_VOLTAGE",
"VirtualSensor":true,
"Formula":"COUNT_THRESHOLD",
"TriggerSensor": "soc",
"Combination":["battery", "soc"],
"Coefficient":[-10000, 80],
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 2.0, "NAN", "NAN"],
"Multiplier":1,
"SendCallback":true
},
{
"Name":"vdroop1",
"Type":"BCL_VOLTAGE",
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 1000, "NAN", "NAN"],
"HotHysteresis":[0.0, 0.0, 0.0, 0.0, 100, 0.0, 0.0],
"Multiplier":1,
"SendCallback":true,
"PollingDelay":0,
"PassiveDelay":60000,
"BindedCdevInfo": [
{
"CdevRequest": "thermal-cpufreq-2",
"LimitInfo": [0, 0, 0, 0, 7, 7, 7]
},
{
"CdevRequest": "thermal-gpufreq-0",
"LimitInfo": [0, 0, 0, 0, 2, 2, 2]
},
{
"CdevRequest": "tpu_cooling",
"LimitInfo": [0, 0, 0, 0, 3, 3, 3]
}
]
},
{
"Name":"vdroop2",
"Type":"BCL_VOLTAGE",
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 1200, "NAN", "NAN"],
"HotHysteresis":[0.0, 0.0, 0.0, 0.0, 100, 0.0, 0.0],
"Multiplier":1,
"SendCallback":true,
"PollingDelay":0,
"PassiveDelay":60000,
"BindedCdevInfo": [
{
"CdevRequest": "thermal-cpufreq-2",
"LimitInfo": [0, 0, 0, 0, 7, 7, 7]
},
{
"CdevRequest": "thermal-gpufreq-0",
"LimitInfo": [0, 0, 0, 0, 4, 4, 4]
},
{
"CdevRequest": "tpu_cooling",
"LimitInfo": [0, 0, 0, 0, 3, 3, 3]
}
]
},
{
"Name":"smpl_gm",
"Type":"BCL_VOLTAGE",
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 1100, "NAN", "NAN"],
"HotHysteresis":[0.0, 0.0, 0.0, 0.0, 100, 0.0, 0.0],
"Multiplier":1,
"SendCallback":true,
"PollingDelay":0,
"PassiveDelay":60000,
"BindedCdevInfo": [
{
"CdevRequest": "thermal-cpufreq-2",
"LimitInfo": [0, 0, 0, 0, 7, 7, 7]
},
{
"CdevRequest": "thermal-gpufreq-0",
"LimitInfo": [0, 0, 0, 0, 3, 3, 3]
},
{
"CdevRequest": "tpu_cooling",
"LimitInfo": [0, 0, 0, 0, 3, 3, 3]
}
]
},
{
"Name":"ocp_cpu1",
"Type":"BCL_CURRENT",
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 8000, "NAN", "NAN"],
"HotHysteresis":[0.0, 0.0, 0.0, 0.0, 100, 0.0, 0.0],
"Multiplier":1,
"Hidden":true
},
{
"Name":"ocp_cpu2",
"Type":"BCL_CURRENT",
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 12000, "NAN", "NAN"],
"HotHysteresis":[0.0, 0.0, 0.0, 0.0, 100, 0.0, 0.0],
"Multiplier":1,
"Hidden":true
},
{
"Name":"ocp_tpu",
"Type":"BCL_CURRENT",
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 12000, "NAN", "NAN"],
"HotHysteresis":[0.0, 0.0, 0.0, 0.0, 100, 0.0, 0.0],
"Multiplier":1
},
{
"Name":"ocp_gpu",
"Type":"BCL_CURRENT",
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 12000, "NAN", "NAN"],
"HotHysteresis":[0.0, 0.0, 0.0, 0.0, 100, 0.0, 0.0],
"Multiplier":1
}
],
"CoolingDevices":[
{
"Name":"thermal-cpufreq-0",
"Type":"CPU",
"WritePath":"/dev/thermal/cdev-by-name/thermal-cpufreq-0/user_vote",
"State2Power":[516, 456, 392, 296, 264, 216, 184, 140, 100, 68, 28]
"WritePath":"/dev/thermal/cdev-by-name/thermal-cpufreq-0/user_vote"
},
{
"Name":"thermal-cpufreq-1",
"Type":"CPU",
"WritePath":"/dev/thermal/cdev-by-name/thermal-cpufreq-1/user_vote",
"State2Power":[2466, 2166, 1840, 1544, 1260, 1024, 816, 642, 538, 410, 342, 276, 224, 162, 104]
"WritePath":"/dev/thermal/cdev-by-name/thermal-cpufreq-1/user_vote"
},
{
"Name":"thermal-cpufreq-2",
"Type":"CPU",
"WritePath":"/dev/thermal/cdev-by-name/thermal-cpufreq-2/user_vote",
"State2Power":[4920, 4614, 4092, 3684, 3198, 2820, 2354, 2184, 1862, 1476, 1338, 1110, 928, 738, 552, 450, 362, 188]
"WritePath":"/dev/thermal/cdev-by-name/thermal-cpufreq-2/user_vote"
},
{
"Name":"thermal-gpufreq-0",
"Type":"GPU",
"WritePath":"/dev/thermal/cdev-by-name/thermal-gpufreq-0/user_vote",
"State2Power":[1925, 1528, 1258, 928, 795, 703, 573, 481, 396, 314, 236]
"WritePath":"/dev/thermal/cdev-by-name/thermal-gpufreq-0/user_vote"
},
{
"Name":"chg_mdis",

View file

@ -872,26 +872,22 @@
{
"Name":"thermal-cpufreq-0",
"Type":"CPU",
"WritePath":"/dev/thermal/cdev-by-name/thermal-cpufreq-0/user_vote",
"State2Power":[516, 456, 392, 296, 264, 216, 184, 140, 100, 68, 28]
"WritePath":"/dev/thermal/cdev-by-name/thermal-cpufreq-0/user_vote"
},
{
"Name":"thermal-cpufreq-1",
"Type":"CPU",
"WritePath":"/dev/thermal/cdev-by-name/thermal-cpufreq-1/user_vote",
"State2Power":[2466, 2166, 1840, 1544, 1260, 1024, 816, 642, 538, 410, 342, 276, 224, 162, 104]
"WritePath":"/dev/thermal/cdev-by-name/thermal-cpufreq-1/user_vote"
},
{
"Name":"thermal-cpufreq-2",
"Type":"CPU",
"WritePath":"/dev/thermal/cdev-by-name/thermal-cpufreq-2/user_vote",
"State2Power":[4920, 4614, 4092, 3684, 3198, 2820, 2354, 2184, 1862, 1476, 1338, 1110, 928, 738, 552, 450, 362, 188]
"WritePath":"/dev/thermal/cdev-by-name/thermal-cpufreq-2/user_vote"
},
{
"Name":"thermal-gpufreq-0",
"Type":"GPU",
"WritePath":"/dev/thermal/cdev-by-name/thermal-gpufreq-0/user_vote",
"State2Power":[1925, 1528, 1258, 928, 795, 703, 573, 481, 396, 314, 236]
"WritePath":"/dev/thermal/cdev-by-name/thermal-gpufreq-0/user_vote"
},
{
"Name":"chg_mdis",

View file

@ -40,10 +40,6 @@ void HwApiBase::saveName(const std::string &name, const std::ios *stream) {
mNames[stream] = name;
}
bool HwApiBase::has(const std::ios &stream) {
return !!stream;
}
void HwApiBase::debug(int fd) {
dprintf(fd, "Kernel:\n");

View file

@ -24,6 +24,7 @@
#include <map>
#include <sstream>
#include <string>
#include <type_traits>
#include "utils.h"
@ -67,7 +68,8 @@ class HwApiBase {
void saveName(const std::string &name, const std::ios *stream);
template <typename T>
void open(const std::string &name, T *stream);
bool has(const std::ios &stream);
template <typename T>
bool has(const T &stream);
template <typename T>
bool get(T *value, std::istream *stream);
template <typename T>
@ -93,6 +95,16 @@ void HwApiBase::open(const std::string &name, T *stream) {
utils::openNoCreate(mPathPrefix + name, stream);
}
template <typename T>
bool HwApiBase::has(const T &stream) {
if constexpr (std::is_same<T, std::fstream>::value || std::is_same<T, std::ofstream>::value ||
std::is_same<T, std::ifstream>::value)
return stream.is_open() && !stream.fail();
ALOGE("File stream is not of the correct type");
return false;
}
template <typename T>
bool HwApiBase::get(T *value, std::istream *stream) {
ATRACE_NAME("HwApi::get");

View file

@ -110,10 +110,12 @@ inline bool getProperty<bool>(const std::string &key, const bool def) {
template <typename T>
static void openNoCreate(const std::string &file, T *outStream) {
auto mode = std::is_base_of_v<std::ostream, T> ? std::ios_base::out : std::ios_base::in;
if (!std::filesystem::exists(file)) {
ALOGE("File does not exist: %s", file.c_str());
return;
}
// Force 'in' mode to prevent file creation
outStream->open(file, mode | std::ios_base::in);
outStream->open(file);
if (!*outStream) {
ALOGE("Failed to open %s (%d): %s", file.c_str(), errno, strerror(errno));
}

View file

@ -78,6 +78,9 @@ class HwApi : public Vibrator::HwApi, private HwApiBase {
open("calibration/q_stored", &mQ);
open("default/vibe_state", &mVibeState);
open("default/num_waves", &mEffectCount);
open("default/braking_time_bank", &mEffectBrakingTimeBank);
open("default/braking_time_index", &mEffectBrakingTimeIndex);
open("default/braking_time_ms", &mEffectBrakingTimeMs);
open("default/owt_free_space", &mOwtFreeSpace);
open("default/f0_comp_enable", &mF0CompEnable);
open("default/redc_comp_enable", &mRedcCompEnable);
@ -89,6 +92,16 @@ class HwApi : public Vibrator::HwApi, private HwApiBase {
bool setRedc(std::string value) override { return set(value, &mRedc); }
bool setQ(std::string value) override { return set(value, &mQ); }
bool getEffectCount(uint32_t *value) override { return get(value, &mEffectCount); }
bool hasEffectBrakingTimeBank() override { return has(mEffectBrakingTimeBank); }
bool setEffectBrakingTimeBank(uint32_t value) override {
return set(value, &mEffectBrakingTimeBank);
}
bool setEffectBrakingTimeIndex(uint32_t value) override {
return set(value, &mEffectBrakingTimeIndex);
}
bool getEffectBrakingTimeMs(uint32_t *value) override {
return get(value, &mEffectBrakingTimeMs);
}
bool pollVibeState(uint32_t value, int32_t timeoutMs) override {
return poll(value, &mVibeState, timeoutMs);
}
@ -282,6 +295,9 @@ class HwApi : public Vibrator::HwApi, private HwApiBase {
std::ofstream mRedc;
std::ofstream mQ;
std::ifstream mEffectCount;
std::ofstream mEffectBrakingTimeBank;
std::ofstream mEffectBrakingTimeIndex;
std::ifstream mEffectBrakingTimeMs;
std::ifstream mVibeState;
std::ifstream mOwtFreeSpace;
std::ofstream mF0CompEnable;

View file

@ -58,7 +58,7 @@ static constexpr int8_t MAX_PAUSE_TIMING_ERROR_MS = 1; // ALERT Irq Handling
static constexpr uint32_t MAX_TIME_MS = UINT16_MAX;
static constexpr auto ASYNC_COMPLETION_TIMEOUT = std::chrono::milliseconds(100);
static constexpr auto POLLING_TIMEOUT = 20;
static constexpr auto POLLING_TIMEOUT = 50;
static constexpr int32_t COMPOSE_DELAY_MAX_MS = 10000;
/* nsections is 8 bits. Need to preserve 1 section for the first delay before the first effect. */
@ -485,8 +485,9 @@ Vibrator::Vibrator(std::unique_ptr<HwApi> hwApiDefault, std::unique_ptr<HwCal> h
mFfEffects.resize(WAVEFORM_MAX_INDEX);
mEffectDurations.resize(WAVEFORM_MAX_INDEX);
mEffectDurations = {
1000, 100, 12, 1000, 300, 130, 150, 500, 100, 5, 12, 1000, 1000, 1000,
1000, 100, 9, 1000, 300, 130, 150, 500, 100, 5, 12, 1000, 1000, 1000,
}; /* 11+3 waveforms. The duration must < UINT16_MAX */
mEffectBrakingDurations.resize(WAVEFORM_MAX_INDEX);
mEffectCustomData.reserve(WAVEFORM_MAX_INDEX);
uint8_t effectIndex;
@ -519,6 +520,11 @@ Vibrator::Vibrator(std::unique_ptr<HwApi> hwApiDefault, std::unique_ptr<HwCal> h
if (mFfEffects[effectIndex].id != effectIndex) {
ALOGW("Unexpected effect index: %d -> %d", effectIndex, mFfEffects[effectIndex].id);
}
if (mHwApiDef->hasEffectBrakingTimeBank()) {
mHwApiDef->setEffectBrakingTimeIndex(effectIndex);
mHwApiDef->getEffectBrakingTimeMs(&mEffectBrakingDurations[effectIndex]);
}
} else {
/* Initiate placeholders for OWT effects. */
numBytes = effectIndex == WAVEFORM_COMPOSE ? FF_CUSTOM_DATA_LEN_MAX_COMP
@ -677,8 +683,21 @@ Vibrator::Vibrator(std::unique_ptr<HwApi> hwApiDefault, std::unique_ptr<HwCal> h
mSupportedPrimitives = defaultSupportedPrimitives;
}
mPrimitiveMaxScale = {1.0f, 0.95f, 0.75f, 0.9f, 1.0f, 1.0f, 1.0f, 0.75f, 0.75f};
mPrimitiveMinScale = {0.0f, 0.01f, 0.11f, 0.23f, 0.0f, 0.25f, 0.02f, 0.03f, 0.16f};
mPrimitiveMaxScale.resize(WAVEFORM_MAX_INDEX, 100);
mPrimitiveMaxScale[WAVEFORM_CLICK_INDEX] = 95;
mPrimitiveMaxScale[WAVEFORM_THUD_INDEX] = 75;
mPrimitiveMaxScale[WAVEFORM_SPIN_INDEX] = 90;
mPrimitiveMaxScale[WAVEFORM_LIGHT_TICK_INDEX] = 75;
mPrimitiveMaxScale[WAVEFORM_LOW_TICK_INDEX] = 75;
mPrimitiveMinScale.resize(WAVEFORM_MAX_INDEX, 0);
mPrimitiveMinScale[WAVEFORM_CLICK_INDEX] = 1;
mPrimitiveMinScale[WAVEFORM_THUD_INDEX] = 11;
mPrimitiveMinScale[WAVEFORM_SPIN_INDEX] = 23;
mPrimitiveMinScale[WAVEFORM_SLOW_RISE_INDEX] = 25;
mPrimitiveMinScale[WAVEFORM_QUICK_FALL_INDEX] = 2;
mPrimitiveMinScale[WAVEFORM_LIGHT_TICK_INDEX] = 3;
mPrimitiveMinScale[WAVEFORM_LOW_TICK_INDEX] = 16;
// ====== Get GPIO status and init it ================
mGPIOStatus = mHwGPIO->getGPIO();
@ -850,7 +869,7 @@ ndk::ScopedAStatus Vibrator::getPrimitiveDuration(CompositePrimitive primitive,
return status;
}
*durationMs = mEffectDurations[effectIndex];
*durationMs = mEffectDurations[effectIndex] + mEffectBrakingDurations[effectIndex];
} else {
*durationMs = 0;
}
@ -863,7 +882,6 @@ ndk::ScopedAStatus Vibrator::compose(const std::vector<CompositeEffect> &composi
ALOGD("Vibrator::compose");
uint16_t size;
uint16_t nextEffectDelay;
uint16_t totalDuration = 0;
if (composite.size() > COMPOSE_SIZE_MAX || composite.empty()) {
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
@ -871,7 +889,6 @@ ndk::ScopedAStatus Vibrator::compose(const std::vector<CompositeEffect> &composi
/* Check if there is a wait before the first effect. */
nextEffectDelay = composite.front().delayMs;
totalDuration += nextEffectDelay;
if (nextEffectDelay > COMPOSE_DELAY_MAX_MS || nextEffectDelay < 0) {
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
} else if (nextEffectDelay > 0) {
@ -904,16 +921,7 @@ ndk::ScopedAStatus Vibrator::compose(const std::vector<CompositeEffect> &composi
if (!status.isOk()) {
return status;
}
// Add a max and min threshold to prevent the device crash(overcurrent) or no
// feeling
if (effectScale > mPrimitiveMaxScale[static_cast<uint32_t>(e_curr.primitive)]) {
effectScale = mPrimitiveMaxScale[static_cast<uint32_t>(e_curr.primitive)];
}
if (effectScale < mPrimitiveMinScale[static_cast<uint32_t>(e_curr.primitive)]) {
effectScale = mPrimitiveMinScale[static_cast<uint32_t>(e_curr.primitive)];
}
effectVolLevel = intensityToVolLevel(effectScale, effectIndex);
totalDuration += mEffectDurations[effectIndex];
}
/* Fetch the next composite effect delay and fill into the current section */
@ -926,13 +934,14 @@ ndk::ScopedAStatus Vibrator::compose(const std::vector<CompositeEffect> &composi
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
}
nextEffectDelay = delay;
totalDuration += delay;
}
if (effectIndex == 0 && nextEffectDelay == 0) {
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
}
nextEffectDelay += mEffectBrakingDurations[effectIndex];
ch.constructComposeSegment(effectVolLevel, effectIndex, 0 /*repeat*/, 0 /*flags*/,
nextEffectDelay /*delay*/);
}
@ -1395,24 +1404,31 @@ binder_status_t Vibrator::dump(int fd, const char **args, uint32_t numArgs) {
dprintf(fd, " FF effect:\n");
dprintf(fd, " Physical waveform:\n");
dprintf(fd, "==== Base ====\n\tId\tIndex\tt ->\tt'\ttrigger button\n");
dprintf(fd, "==== Base ====\n\tId\tIndex\tt ->\tt'\tBrake\ttrigger button\n");
uint8_t effectId;
for (effectId = 0; effectId < WAVEFORM_MAX_PHYSICAL_INDEX; effectId++) {
dprintf(fd, "\t%d\t%d\t%d\t%d\t%X\n", mFfEffects[effectId].id,
dprintf(fd, "\t%d\t%d\t%d\t%d\t%d\t%X\n", mFfEffects[effectId].id,
mFfEffects[effectId].u.periodic.custom_data[1], mEffectDurations[effectId],
mFfEffects[effectId].replay.length, mFfEffects[effectId].trigger.button);
mFfEffects[effectId].replay.length, mEffectBrakingDurations[effectId],
mFfEffects[effectId].trigger.button);
}
if (mIsDual) {
dprintf(fd, "==== Flip ====\n\tId\tIndex\tt ->\tt'\ttrigger button\n");
dprintf(fd, "==== Flip ====\n\tId\tIndex\tt ->\tt'\tBrake\ttrigger button\n");
for (effectId = 0; effectId < WAVEFORM_MAX_PHYSICAL_INDEX; effectId++) {
dprintf(fd, "\t%d\t%d\t%d\t%d\t%X\n", mFfEffectsDual[effectId].id,
dprintf(fd, "\t%d\t%d\t%d\t%d\t%d\t%X\n", mFfEffectsDual[effectId].id,
mFfEffectsDual[effectId].u.periodic.custom_data[1], mEffectDurations[effectId],
mFfEffectsDual[effectId].replay.length,
mFfEffectsDual[effectId].replay.length, mEffectBrakingDurations[effectId],
mFfEffectsDual[effectId].trigger.button);
}
}
dprintf(fd, "Base: OWT waveform:\n");
dprintf(fd, "==== Scales ====\n\tId\tMinScale\tMaxScale\n");
for (effectId = 0; effectId < WAVEFORM_MAX_PHYSICAL_INDEX; effectId++) {
dprintf(fd, "\t%d\t%d\t\t%d\n", effectId, mPrimitiveMinScale[effectId],
mPrimitiveMaxScale[effectId]);
}
dprintf(fd, "\nBase: OWT waveform:\n");
dprintf(fd, "\tId\tBytes\tData\tt\ttrigger button\n");
for (effectId = WAVEFORM_MAX_PHYSICAL_INDEX; effectId < WAVEFORM_MAX_INDEX; effectId++) {
uint32_t numBytes = mFfEffects[effectId].u.periodic.custom_len * 2;
@ -1520,10 +1536,6 @@ ndk::ScopedAStatus Vibrator::getSimpleDetails(Effect effect, EffectStrength stre
case Effect::HEAVY_CLICK:
effectIndex = WAVEFORM_CLICK_INDEX;
intensity *= 1.0f;
// WAVEFORM_CLICK_INDEX is 2, but the primitive CLICK index is 1.
if (intensity > mPrimitiveMaxScale[WAVEFORM_CLICK_INDEX - 1]) {
intensity = mPrimitiveMaxScale[WAVEFORM_CLICK_INDEX - 1];
}
break;
default:
return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
@ -1765,6 +1777,17 @@ uint32_t Vibrator::intensityToVolLevel(float intensity, uint32_t effectIndex) {
volLevel = calc(intensity, mClickEffectVol);
break;
}
// The waveform being played must fall within the allowable scale range
if (effectIndex < WAVEFORM_MAX_INDEX) {
if (volLevel > mPrimitiveMaxScale[effectIndex]) {
volLevel = mPrimitiveMaxScale[effectIndex];
}
if (volLevel < mPrimitiveMinScale[effectIndex]) {
volLevel = mPrimitiveMinScale[effectIndex];
}
}
return volLevel;
}

View file

@ -62,6 +62,15 @@ class Vibrator : public BnVibrator {
virtual bool setQ(std::string value) = 0;
// Reports the number of effect waveforms loaded in firmware.
virtual bool getEffectCount(uint32_t *value) = 0;
// Checks whether braking time bank is supported.
virtual bool hasEffectBrakingTimeBank() = 0;
// Specifies the bank of the effect for querying braking time.
// 0: RAM bank, 2: OWT bank
virtual bool setEffectBrakingTimeBank(uint32_t value) = 0;
// Specifies the index of an effect whose braking time is to be read.
virtual bool setEffectBrakingTimeIndex(uint32_t value) = 0;
// Gets the braking time duration of SVC effects (returns 0 if not SVC).
virtual bool getEffectBrakingTimeMs(uint32_t *value) = 0;
// Blocks until timeout or vibrator reaches desired state
// (2 = ASP enabled, 1 = haptic enabled, 0 = disabled).
virtual bool pollVibeState(uint32_t value, int32_t timeoutMs = -1) = 0;
@ -218,6 +227,7 @@ class Vibrator : public BnVibrator {
std::vector<ff_effect> mFfEffects;
std::vector<ff_effect> mFfEffectsDual;
std::vector<uint32_t> mEffectDurations;
std::vector<uint32_t> mEffectBrakingDurations;
std::vector<std::vector<int16_t>> mEffectCustomData;
std::vector<std::vector<int16_t>> mEffectCustomDataDual;
std::future<void> mAsyncHandle;
@ -233,8 +243,8 @@ class Vibrator : public BnVibrator {
bool mIsChirpEnabled;
uint32_t mSupportedPrimitivesBits = 0x0;
std::vector<CompositePrimitive> mSupportedPrimitives;
std::vector<float> mPrimitiveMaxScale;
std::vector<float> mPrimitiveMinScale;
std::vector<uint32_t> mPrimitiveMaxScale;
std::vector<uint32_t> mPrimitiveMinScale;
bool mConfigHapticAlsaDeviceDone{false};
bool mGPIOStatus;
bool mIsDual{false};

View file

@ -14,6 +14,9 @@ on property:vendor.all.modules.ready=1
chown system system /sys/bus/i2c/devices/15-0043/calibration/redc_stored
chown system system /sys/bus/i2c/devices/15-0043/default/vibe_state
chown system system /sys/bus/i2c/devices/15-0043/default/num_waves
chown system system /sys/bus/i2c/devices/15-0043/default/braking_time_bank
chown system system /sys/bus/i2c/devices/15-0043/default/braking_time_index
chown system system /sys/bus/i2c/devices/15-0043/default/braking_time_ms
chown system system /sys/bus/i2c/devices/15-0043/default/f0_offset
chown system system /sys/bus/i2c/devices/15-0043/default/owt_free_space
chown system system /sys/bus/i2c/devices/15-0043/default/f0_comp_enable
@ -25,6 +28,9 @@ on property:vendor.all.modules.ready=1
chown system system /sys/bus/i2c/devices/15-0042/calibration/redc_stored
chown system system /sys/bus/i2c/devices/15-0042/default/vibe_state
chown system system /sys/bus/i2c/devices/15-0042/default/num_waves
chown system system /sys/bus/i2c/devices/15-0042/default/braking_time_bank
chown system system /sys/bus/i2c/devices/15-0042/default/braking_time_index
chown system system /sys/bus/i2c/devices/15-0042/default/braking_time_ms
chown system system /sys/bus/i2c/devices/15-0042/default/f0_offset
chown system system /sys/bus/i2c/devices/15-0042/default/owt_free_space
chown system system /sys/bus/i2c/devices/15-0042/default/f0_comp_enable
@ -56,6 +62,9 @@ service vendor.vibrator.cs40l26 /vendor/bin/hw/android.hardware.vibrator-service
calibration/q_stored
default/vibe_state
default/num_waves
default/braking_time_bank
default/braking_time_index
default/braking_time_ms
default/f0_offset
default/owt_free_space
default/f0_comp_enable

View file

@ -39,6 +39,10 @@ class MockApi : public ::aidl::android::hardware::vibrator::Vibrator::HwApi {
MOCK_METHOD1(setRedc, bool(std::string value));
MOCK_METHOD1(setQ, bool(std::string value));
MOCK_METHOD1(getEffectCount, bool(uint32_t *value));
MOCK_METHOD0(hasEffectBrakingTimeBank, bool());
MOCK_METHOD1(setEffectBrakingTimeBank, bool(uint32_t value));
MOCK_METHOD1(setEffectBrakingTimeIndex, bool(uint32_t value));
MOCK_METHOD1(getEffectBrakingTimeMs, bool(uint32_t *value));
MOCK_METHOD2(pollVibeState, bool(uint32_t value, int32_t timeoutMs));
MOCK_METHOD0(hasOwtFreeSpace, bool());
MOCK_METHOD1(getOwtFreeSpace, bool(uint32_t *value));

View file

@ -74,7 +74,7 @@ static constexpr std::array<EffectLevel, 2> V_TICK_DEFAULT = {1, 100};
static constexpr std::array<EffectLevel, 2> V_CLICK_DEFAULT{1, 100};
static constexpr std::array<EffectLevel, 2> V_LONG_DEFAULT{1, 100};
static constexpr std::array<EffectDuration, 14> EFFECT_DURATIONS{
0, 100, 30, 1000, 300, 130, 150, 500, 100, 15, 20, 1000, 1000, 1000};
1000, 100, 9, 1000, 300, 130, 150, 500, 100, 5, 12, 1000, 1000, 1000};
// Constants With Prescribed Values
@ -375,6 +375,11 @@ TEST_F(VibratorTest, Constructor) {
.WillOnce(DoAll(SetArgPointee<0>(supportedPrimitivesBits), Return(true)));
EXPECT_CALL(*mMockApi, setMinOnOffInterval(MIN_ON_OFF_INTERVAL_US)).WillOnce(Return(true));
EXPECT_CALL(*mMockApi, setEffectBrakingTimeBank(0)).WillRepeatedly(Return(true));
for (uint32_t i = 0; i < WAVEFORM_MAX_PHYSICAL_INDEX; i++) {
EXPECT_CALL(*mMockApi, setEffectBrakingTimeIndex(i)).WillRepeatedly(Return(true));
EXPECT_CALL(*mMockApi, getEffectBrakingTimeMs(_)).WillRepeatedly(Return(true));
}
createVibrator(std::move(mockapi), std::move(mockcal), std::move(mockgpio), false);
}