Snap for 11919022 from 1e3b1303f5 to mainline-tzdata6-release

Change-Id: Ie8766af4d7b27f1e61d428dcf8913cba67f9e7c3
This commit is contained in:
Android Build Coastguard Worker 2024-06-03 15:30:33 +00:00
commit 2fe1716cda
17 changed files with 130 additions and 97 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 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 for Pixel device makefiles, see go/pixel-device-mk-owner-checklist for details.
per-file *.mk,*/BoardConfig.mk=file:device/google/gs-common:main:/OWNERS per-file *.mk,*/BoardConfig.mk=file:device/google/gs-common:main:/MK_OWNERS

View file

@ -1344,7 +1344,7 @@
<path name="bluetooth-sco-headset-microphones" /> <path name="bluetooth-sco-headset-microphones" />
</path> </path>
<path name="usb-headset-microphones"> <path name="usb-microphones">
<ctl name="BUILDIN MIC ID CAPTURE LIST" id="0" value="0" /> <ctl name="BUILDIN MIC ID CAPTURE LIST" id="0" value="0" />
<ctl name="BUILDIN MIC ID CAPTURE LIST" id="1" value="3" /> <ctl name="BUILDIN MIC ID CAPTURE LIST" id="1" value="3" />
<ctl name="BUILDIN MIC ID CAPTURE LIST" id="2" value="2" /> <ctl name="BUILDIN MIC ID CAPTURE LIST" id="2" value="2" />
@ -1354,6 +1354,15 @@
<ctl name="MIC Record Soft Gain (dB)" value="0" /> <ctl name="MIC Record Soft Gain (dB)" value="0" />
</path> </path>
<path name="usb-headset-microphones">
<path name="usb-microphones" />
</path>
<path name="usb-device-microphones">
<path name="usb-microphones" />
</path>
<!-- cs35l41 specific path to load firmware in cs35l41.c --> <!-- cs35l41 specific path to load firmware in cs35l41.c -->
<path name="cs35l41-load-protection-firmware-start"> <path name="cs35l41-load-protection-firmware-start">
<!-- Enable it after get the protection firmware --> <!-- Enable it after get the protection firmware -->

View file

@ -19,18 +19,10 @@ $(call inherit-product-if-exists, vendor/google/products/sources_pixel.mk)
TARGET_RECOVERY_DEFAULT_ROTATION := ROTATION_RIGHT TARGET_RECOVERY_DEFAULT_ROTATION := ROTATION_RIGHT
ifdef RELEASE_GOOGLE_FELIX_KERNEL_VERSION TARGET_LINUX_KERNEL_VERSION := $(RELEASE_KERNEL_FELIX_VERSION)
TARGET_LINUX_KERNEL_VERSION := $(RELEASE_GOOGLE_FELIX_KERNEL_VERSION)
endif
ifdef RELEASE_GOOGLE_FELIX_KERNEL_DIR
# Keeps flexibility for kasan and ufs builds # Keeps flexibility for kasan and ufs builds
TARGET_KERNEL_DIR ?= $(RELEASE_GOOGLE_FELIX_KERNEL_DIR) TARGET_KERNEL_DIR ?= $(RELEASE_KERNEL_FELIX_DIR)
TARGET_BOARD_KERNEL_HEADERS ?= $(RELEASE_GOOGLE_FELIX_KERNEL_DIR)/kernel-headers TARGET_BOARD_KERNEL_HEADERS ?= $(RELEASE_KERNEL_FELIX_DIR)/kernel-headers
else
TARGET_KERNEL_DIR ?= device/google/felix-kernel
TARGET_BOARD_KERNEL_HEADERS ?= device/google/felix-kernel/kernel-headers
endif
$(call inherit-product-if-exists, vendor/google_devices/felix/prebuilts/device-vendor-felix.mk) $(call inherit-product-if-exists, vendor/google_devices/felix/prebuilts/device-vendor-felix.mk)
$(call inherit-product-if-exists, vendor/google_devices/gs201/prebuilts/device-vendor.mk) $(call inherit-product-if-exists, vendor/google_devices/gs201/prebuilts/device-vendor.mk)
@ -226,9 +218,10 @@ PRODUCT_SOONG_NAMESPACES += \
# Increment the SVN for any official public releases # Increment the SVN for any official public releases
PRODUCT_VENDOR_PROPERTIES += \ PRODUCT_VENDOR_PROPERTIES += \
ro.vendor.build.svn=47 ro.vendor.build.svn=52
# Vibrator HAL # Vibrator HAL
$(call soong_config_set,haptics,kernel_ver,v$(subst .,_,$(TARGET_LINUX_KERNEL_VERSION)))
PRODUCT_VENDOR_PROPERTIES +=\ PRODUCT_VENDOR_PROPERTIES +=\
ro.vendor.vibrator.hal.long.frequency.shift=0 \ ro.vendor.vibrator.hal.long.frequency.shift=0 \
ro.vendor.vibrator.hal.gpio.num=44 \ ro.vendor.vibrator.hal.gpio.num=44 \
@ -270,13 +263,6 @@ PRODUCT_PACKAGES += \
# Trusty liboemcrypto.so # Trusty liboemcrypto.so
PRODUCT_SOONG_NAMESPACES += vendor/google_devices/felix/prebuilts PRODUCT_SOONG_NAMESPACES += vendor/google_devices/felix/prebuilts
ifneq (,$(filter AP1%,$(RELEASE_PLATFORM_VERSION)))
PRODUCT_SOONG_NAMESPACES += vendor/google_devices/felix/prebuilts/trusty/24Q1
else ifneq (,$(filter AP2% AP3%,$(RELEASE_PLATFORM_VERSION)))
PRODUCT_SOONG_NAMESPACES += vendor/google_devices/felix/prebuilts/trusty/24Q2
else
PRODUCT_SOONG_NAMESPACES += vendor/google_devices/felix/prebuilts/trusty/trunk
endif
# Set zram size # Set zram size
PRODUCT_VENDOR_PROPERTIES += \ PRODUCT_VENDOR_PROPERTIES += \

View file

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

View file

@ -21,18 +21,15 @@ USES_DEVICE_GOOGLE_FELIX := true
BOARD_KERNEL_CMDLINE += swiotlb=noforce BOARD_KERNEL_CMDLINE += swiotlb=noforce
RELEASE_GOOGLE_PRODUCT_RADIO_DIR := $(RELEASE_GOOGLE_FELIX_RADIO_DIR) RELEASE_GOOGLE_PRODUCT_RADIO_DIR := $(RELEASE_GOOGLE_FELIX_RADIO_DIR)
ifneq (,$(filter AP1%,$(RELEASE_PLATFORM_VERSION))) RELEASE_GOOGLE_BOOTLOADER_FELIX_DIR ?= pdk# Keep this for pdk TODO: b/327119000
RELEASE_GOOGLE_PRODUCT_BOOTLOADER_DIR := bootloader/24Q1 RELEASE_GOOGLE_PRODUCT_BOOTLOADER_DIR := bootloader/$(RELEASE_GOOGLE_BOOTLOADER_FELIX_DIR)
else ifneq (,$(filter AP2% AP3%,$(RELEASE_PLATFORM_VERSION))) $(call soong_config_set,felix_bootloader,prebuilt_dir,$(RELEASE_GOOGLE_BOOTLOADER_FELIX_DIR))
RELEASE_GOOGLE_PRODUCT_BOOTLOADER_DIR := bootloader/24Q2
else
RELEASE_GOOGLE_PRODUCT_BOOTLOADER_DIR := bootloader/trunk
endif
# Enable load module in parallel # Enable load module in parallel
BOARD_BOOTCONFIG += androidboot.load_modules_parallel=true BOARD_BOOTCONFIG += androidboot.load_modules_parallel=true
# The modules which need to be loaded in sequential # The modules which need to be loaded in sequential
BOARD_KERNEL_CMDLINE += fips140.load_sequential=1
BOARD_KERNEL_CMDLINE += exynos_drm.load_sequential=1 BOARD_KERNEL_CMDLINE += exynos_drm.load_sequential=1
BOARD_KERNEL_CMDLINE += panel-samsung-ana6707-f10.load_sequential=1 BOARD_KERNEL_CMDLINE += panel-samsung-ana6707-f10.load_sequential=1
BOARD_KERNEL_CMDLINE += s2mpg12-regulator.load_sequential=1 BOARD_KERNEL_CMDLINE += s2mpg12-regulator.load_sequential=1

View file

@ -221,6 +221,9 @@
<!-- Indicates whether to enable hinge angle sensor when using unfold animation --> <!-- Indicates whether to enable hinge angle sensor when using unfold animation -->
<bool name="config_unfoldTransitionHingeAngle">true</bool> <bool name="config_unfoldTransitionHingeAngle">true</bool>
<!-- Indicates whether to enable haptics during unfold animation -->
<bool name="config_unfoldTransitionHapticsEnabled">true</bool>
<!-- Timeout for receiving the keyguard drawn event from System UI. --> <!-- Timeout for receiving the keyguard drawn event from System UI. -->
<integer name="config_keyguardDrawnTimeout">1700</integer> <integer name="config_keyguardDrawnTimeout">1700</integer>

View file

@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AuthCredentialPatternContainerStyle"> <style name="AuthNonBioCredentialPatternContainerStyle">
<item name="android:gravity">center</item> <item name="android:gravity">center</item>
<item name="android:maxHeight">@dimen/biometric_auth_pattern_view_max_size</item> <item name="android:maxHeight">@dimen/biometric_auth_pattern_view_max_size</item>
<item name="android:maxWidth">@dimen/biometric_auth_pattern_view_max_size</item> <item name="android:maxWidth">@dimen/biometric_auth_pattern_view_max_size</item>

View file

@ -148,5 +148,8 @@
4 : DEVICE_POSTURE_FLIPPED 4 : DEVICE_POSTURE_FLIPPED
--> -->
<integer name="config_face_auth_supported_posture">1</integer> <integer name="config_face_auth_supported_posture">1</integer>
<!-- Whether to use a machine learning model for back gesture falsing. -->
<bool name="config_useBackGestureML">false</bool>
</resources> </resources>

View file

@ -1,7 +1,7 @@
730000,670000 365000,335000
1810000,1835000,670000 1810000,1835000,335000
720000,740000,670000 720000,740000,335000
0,710000,730000 0,710000,365000
750000,1800000,730000 750000,1800000,365000
1845000,50000000,730000 1845000,50000000,365000

1 730000,670000 365000,335000
2 1810000,1835000,670000 1810000,1835000,335000
3 720000,740000,670000 720000,740000,335000
4 0,710000,730000 0,710000,365000
5 750000,1800000,730000 750000,1800000,365000
6 1845000,50000000,730000 1845000,50000000,365000
7

View file

@ -70,7 +70,7 @@
<gll <gll
PpsEnable="true" PpsEnable="true"
LogPriMask="LOG_INFO" LogPriMask="LOG_INFO"
LogFacMask="LOG_NMEA | LOG_GLLIOS | LOG_GLLAPI | LOG_MEASAPI" LogFacMask="LOG_NMEA | LOG_GLLIOS | LOG_GLLAPI"
FrqPlan="FRQ_PLAN_26MHZ_2PPM_49_152MHZ_300PPB" FrqPlan="FRQ_PLAN_26MHZ_2PPM_49_152MHZ_300PPB"
MultiCarrRFMode="GL_MULTI_CARR_RF_MODE_L1_L5" MultiCarrRFMode="GL_MULTI_CARR_RF_MODE_L1_L5"
MultiCarrLnaMask="L1_EXT_ON|L5_EXT_ON" MultiCarrLnaMask="L1_EXT_ON|L5_EXT_ON"

View file

@ -2196,16 +2196,27 @@
"PID_Du": 0.0, "PID_Du": 0.0,
"UclampMin_On": true, "UclampMin_On": true,
"UclampMin_Init": 232, "UclampMin_Init": 232,
"UclampMin_LoadUp": 480,
"UclampMin_LoadReset": 480,
"UclampMin_High": 480, "UclampMin_High": 480,
"UclampMin_Low": 2, "UclampMin_Low": 2,
"UclampMax_EfficientBase": 500,
"UclampMax_EfficientOffset": 200,
"SamplingWindow_P": 1, "SamplingWindow_P": 1,
"SamplingWindow_I": 0, "SamplingWindow_I": 0,
"SamplingWindow_D": 1, "SamplingWindow_D": 1,
"ReportingRateLimitNs": 83333330, "ReportingRateLimitNs": 83333330,
"EarlyBoost_On": false,
"EarlyBoost_TimeFactor": 0.0,
"TargetTimeFactor": 1.0, "TargetTimeFactor": 1.0,
"StaleTimeFactor": 15.0 "StaleTimeFactor": 15.0,
"HeuristicBoost_On": true,
"HBoostOnMissedCycles": 8,
"HBoostOffMaxAvgRatio": 4.0,
"HBoostOffMissedCycles": 5,
"HBoostPidPuFactor": 0.5,
"HBoostUclampMin": 722,
"JankCheckTimeFactor": 1.2,
"LowFrameRateThreshold": 25,
"MaxRecordsNum": 300
}, },
{ {
"Name": "REFRESH_90FPS", "Name": "REFRESH_90FPS",
@ -2220,16 +2231,27 @@
"PID_Du": 0.0, "PID_Du": 0.0,
"UclampMin_On": true, "UclampMin_On": true,
"UclampMin_Init": 162, "UclampMin_Init": 162,
"UclampMin_LoadUp": 480,
"UclampMin_LoadReset": 480,
"UclampMin_High": 480, "UclampMin_High": 480,
"UclampMin_Low": 2, "UclampMin_Low": 2,
"UclampMax_EfficientBase": 500,
"UclampMax_EfficientOffset": 200,
"SamplingWindow_P": 1, "SamplingWindow_P": 1,
"SamplingWindow_I": 0, "SamplingWindow_I": 0,
"SamplingWindow_D": 1, "SamplingWindow_D": 1,
"ReportingRateLimitNs": 111111110, "ReportingRateLimitNs": 111111110,
"EarlyBoost_On": false,
"EarlyBoost_TimeFactor": 0.0,
"TargetTimeFactor": 1.0, "TargetTimeFactor": 1.0,
"StaleTimeFactor": 15.0 "StaleTimeFactor": 15.0,
"HeuristicBoost_On": true,
"HBoostOnMissedCycles": 8,
"HBoostOffMaxAvgRatio": 4.0,
"HBoostOffMissedCycles": 5,
"HBoostPidPuFactor": 0.5,
"HBoostUclampMin": 722,
"JankCheckTimeFactor": 1.2,
"LowFrameRateThreshold": 25,
"MaxRecordsNum": 300
}, },
{ {
"Name": "REFRESH_60FPS", "Name": "REFRESH_60FPS",
@ -2244,16 +2266,27 @@
"PID_Du": 0.0, "PID_Du": 0.0,
"UclampMin_On": true, "UclampMin_On": true,
"UclampMin_Init": 162, "UclampMin_Init": 162,
"UclampMin_LoadUp": 480,
"UclampMin_LoadReset": 480,
"UclampMin_High": 480, "UclampMin_High": 480,
"UclampMin_Low": 2, "UclampMin_Low": 2,
"UclampMax_EfficientBase": 500,
"UclampMax_EfficientOffset": 200,
"SamplingWindow_P": 1, "SamplingWindow_P": 1,
"SamplingWindow_I": 0, "SamplingWindow_I": 0,
"SamplingWindow_D": 1, "SamplingWindow_D": 1,
"ReportingRateLimitNs": 166666660, "ReportingRateLimitNs": 166666660,
"EarlyBoost_On": false,
"EarlyBoost_TimeFactor": 0.0,
"TargetTimeFactor": 1.0, "TargetTimeFactor": 1.0,
"StaleTimeFactor": 15.0 "StaleTimeFactor": 15.0,
"HeuristicBoost_On": true,
"HBoostOnMissedCycles": 8,
"HBoostOffMaxAvgRatio": 4.0,
"HBoostOffMissedCycles": 5,
"HBoostPidPuFactor": 0.5,
"HBoostUclampMin": 722,
"JankCheckTimeFactor": 1.2,
"LowFrameRateThreshold": 25,
"MaxRecordsNum": 300
}, },
{ {
"Name": "UiHighBoostWithoutPid", "Name": "UiHighBoostWithoutPid",
@ -2273,9 +2306,9 @@
"UclampMin_Init": 250, "UclampMin_Init": 250,
"UclampMin_High": 197, "UclampMin_High": 197,
"UclampMin_Low": 197, "UclampMin_Low": 197,
"UclampMax_EfficientBase": 500,
"UclampMax_EfficientOffset": 200,
"ReportingRateLimitNs": 1, "ReportingRateLimitNs": 1,
"EarlyBoost_On": false,
"EarlyBoost_TimeFactor": 0.0,
"TargetTimeFactor": 1.0, "TargetTimeFactor": 1.0,
"StaleTimeFactor": 5.0 "StaleTimeFactor": 5.0
}, },
@ -2297,9 +2330,9 @@
"UclampMin_Init": 250, "UclampMin_Init": 250,
"UclampMin_High": 53, "UclampMin_High": 53,
"UclampMin_Low": 53, "UclampMin_Low": 53,
"UclampMax_EfficientBase": 500,
"UclampMax_EfficientOffset": 200,
"ReportingRateLimitNs": 1, "ReportingRateLimitNs": 1,
"EarlyBoost_On": false,
"EarlyBoost_TimeFactor": 0.0,
"TargetTimeFactor": 1.0, "TargetTimeFactor": 1.0,
"StaleTimeFactor": 5.0 "StaleTimeFactor": 5.0
}, },
@ -2321,9 +2354,9 @@
"UclampMin_Init": 250, "UclampMin_Init": 250,
"UclampMin_High": 0, "UclampMin_High": 0,
"UclampMin_Low": 0, "UclampMin_Low": 0,
"UclampMax_EfficientBase": 500,
"UclampMax_EfficientOffset": 200,
"ReportingRateLimitNs": 1, "ReportingRateLimitNs": 1,
"EarlyBoost_On": false,
"EarlyBoost_TimeFactor": 0.0,
"TargetTimeFactor": 1.0, "TargetTimeFactor": 1.0,
"StaleTimeFactor": 5.0 "StaleTimeFactor": 5.0
} }

View file

@ -175,4 +175,10 @@
If equals to 0, it means there's no limit on the max number of channels to include per network.--> If equals to 0, it means there's no limit on the max number of channels to include per network.-->
<integer translatable="false" name="config_wifiInitialPartialScanMaxNewChannelsPerNetwork">3</integer> <integer translatable="false" name="config_wifiInitialPartialScanMaxNewChannelsPerNetwork">3</integer>
<!-- Boolean indicating whether to disable firmware roaming when the device goes into idle mode.
true: firmware roaming will be disabled when the device goes into idle mode, and then
re-activated when the device exits idle mode.
false: firmware roaming will not be affected. -->
<bool translatable="false" name ="config_wifiDisableFirmwareRoamingInIdleMode">true</bool>
</resources> </resources>

View file

@ -836,36 +836,6 @@
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 12000, "NAN", "NAN"], "HotThreshold":["NAN", "NAN", "NAN", "NAN", 12000, "NAN", "NAN"],
"HotHysteresis":[0.0, 0.0, 0.0, 0.0, 100, 0.0, 0.0], "HotHysteresis":[0.0, 0.0, 0.0, 0.0, 100, 0.0, 0.0],
"Multiplier":1 "Multiplier":1
},
{
"Name":"soft_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
},
{
"Name":"soft_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
},
{
"Name":"soft_ocp_tpu",
"Type":"BCL_CURRENT",
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 8500, "NAN", "NAN"],
"HotHysteresis":[0.0, 0.0, 0.0, 0.0, 100, 0.0, 0.0],
"Multiplier":1,
"Hidden":true
},
{
"Name":"soft_ocp_gpu",
"Type":"BCL_CURRENT",
"HotThreshold":["NAN", "NAN", "NAN", "NAN", 9000, "NAN", "NAN"],
"HotHysteresis":[0.0, 0.0, 0.0, 0.0, 100, 0.0, 0.0],
"Multiplier":1,
"Hidden":true
} }
], ],
"CoolingDevices":[ "CoolingDevices":[

View file

@ -60,6 +60,7 @@ cc_library {
srcs: [ srcs: [
"Vibrator.cpp", "Vibrator.cpp",
], ],
shared_libs: ["//hardware/google/pixel:PixelVibratorFlagsL26"],
export_include_dirs: ["."], export_include_dirs: ["."],
vendor_available: true, vendor_available: true,
visibility: [":__subpackages__"], visibility: [":__subpackages__"],

View file

@ -104,18 +104,25 @@ class HwApi : public Vibrator::HwApi, private HwApiBase {
.code = FF_GAIN, .code = FF_GAIN,
.value = value, .value = value,
}; };
if (value > 100) {
ALOGE("Invalid gain");
return false;
}
if (write(fd, (const void *)&gain, sizeof(gain)) != sizeof(gain)) { if (write(fd, (const void *)&gain, sizeof(gain)) != sizeof(gain)) {
return false; return false;
} }
return true; return true;
} }
bool setFFEffect(int fd, struct ff_effect *effect, uint16_t timeoutMs) override { bool setFFEffect(int fd, struct ff_effect *effect, uint16_t timeoutMs) override {
if (effect == nullptr) {
ALOGE("Invalid ff_effect");
return false;
}
if (ioctl(fd, EVIOCSFF, effect) < 0) { if (ioctl(fd, EVIOCSFF, effect) < 0) {
ALOGE("setFFEffect fail"); ALOGE("setFFEffect fail");
return false; return false;
} else {
return true;
} }
return true;
} }
bool setFFPlay(int fd, int8_t index, bool value) override { bool setFFPlay(int fd, int8_t index, bool value) override {
struct input_event play = { struct input_event play = {
@ -186,14 +193,17 @@ class HwApi : public Vibrator::HwApi, private HwApiBase {
} }
bool uploadOwtEffect(int fd, const uint8_t *owtData, const uint32_t numBytes, struct ff_effect *effect, bool uploadOwtEffect(int fd, const uint8_t *owtData, const uint32_t numBytes, struct ff_effect *effect,
uint32_t *outEffectIndex, int *status) override { uint32_t *outEffectIndex, int *status) override {
(*effect).u.periodic.custom_len = numBytes / sizeof(uint16_t); if (owtData == nullptr || effect == nullptr || outEffectIndex == nullptr) {
delete[] ((*effect).u.periodic.custom_data); ALOGE("Invalid argument owtData, ff_effect or outEffectIndex");
(*effect).u.periodic.custom_data = new int16_t[(*effect).u.periodic.custom_len]{0x0000};
if ((*effect).u.periodic.custom_data == nullptr) {
ALOGE("Failed to allocate memory for custom data\n");
*status = EX_NULL_POINTER; *status = EX_NULL_POINTER;
return false; return false;
} }
if (status == nullptr) {
ALOGE("Invalid argument status");
return false;
}
(*effect).u.periodic.custom_len = numBytes / sizeof(uint16_t);
memcpy((*effect).u.periodic.custom_data, owtData, numBytes); memcpy((*effect).u.periodic.custom_data, owtData, numBytes);
if ((*effect).id != -1) { if ((*effect).id != -1) {
@ -204,7 +214,6 @@ class HwApi : public Vibrator::HwApi, private HwApiBase {
(*effect).id = -1; (*effect).id = -1;
if (ioctl(fd, EVIOCSFF, effect) < 0) { if (ioctl(fd, EVIOCSFF, effect) < 0) {
ALOGE("Failed to upload effect %d (%d): %s", *outEffectIndex, errno, strerror(errno)); ALOGE("Failed to upload effect %d (%d): %s", *outEffectIndex, errno, strerror(errno));
delete[] ((*effect).u.periodic.custom_data);
*status = EX_ILLEGAL_STATE; *status = EX_ILLEGAL_STATE;
return false; return false;
} }

View file

@ -44,7 +44,6 @@ namespace aidl {
namespace android { namespace android {
namespace hardware { namespace hardware {
namespace vibrator { namespace vibrator {
static constexpr uint8_t FF_CUSTOM_DATA_LEN = 2;
static constexpr uint16_t FF_CUSTOM_DATA_LEN_MAX_COMP = 2044; // (COMPOSE_SIZE_MAX + 1) * 8 + 4 static constexpr uint16_t FF_CUSTOM_DATA_LEN_MAX_COMP = 2044; // (COMPOSE_SIZE_MAX + 1) * 8 + 4
static constexpr uint16_t FF_CUSTOM_DATA_LEN_MAX_PWLE = 2302; static constexpr uint16_t FF_CUSTOM_DATA_LEN_MAX_PWLE = 2302;
@ -488,19 +487,23 @@ Vibrator::Vibrator(std::unique_ptr<HwApi> hwApiDefault, std::unique_ptr<HwCal> h
mEffectDurations = { mEffectDurations = {
1000, 100, 12, 1000, 300, 130, 150, 500, 100, 5, 12, 1000, 1000, 1000, 1000, 100, 12, 1000, 300, 130, 150, 500, 100, 5, 12, 1000, 1000, 1000,
}; /* 11+3 waveforms. The duration must < UINT16_MAX */ }; /* 11+3 waveforms. The duration must < UINT16_MAX */
mEffectCustomData.reserve(WAVEFORM_MAX_INDEX);
uint8_t effectIndex; uint8_t effectIndex;
uint16_t numBytes = 0;
for (effectIndex = 0; effectIndex < WAVEFORM_MAX_INDEX; effectIndex++) { for (effectIndex = 0; effectIndex < WAVEFORM_MAX_INDEX; effectIndex++) {
if (effectIndex < WAVEFORM_MAX_PHYSICAL_INDEX) { if (effectIndex < WAVEFORM_MAX_PHYSICAL_INDEX) {
/* Initialize physical waveforms. */ /* Initialize physical waveforms. */
mEffectCustomData.push_back({RAM_WVFRM_BANK, effectIndex});
mFfEffects[effectIndex] = { mFfEffects[effectIndex] = {
.type = FF_PERIODIC, .type = FF_PERIODIC,
.id = -1, .id = -1,
// Length == 0 to allow firmware control of the duration // Length == 0 to allow firmware control of the duration
.replay.length = 0, .replay.length = 0,
.u.periodic.waveform = FF_CUSTOM, .u.periodic.waveform = FF_CUSTOM,
.u.periodic.custom_data = new int16_t[2]{RAM_WVFRM_BANK, effectIndex}, .u.periodic.custom_data = mEffectCustomData[effectIndex].data(),
.u.periodic.custom_len = FF_CUSTOM_DATA_LEN, .u.periodic.custom_len =
static_cast<uint32_t>(mEffectCustomData[effectIndex].size()),
}; };
// Bypass the waveform update due to different input name // Bypass the waveform update due to different input name
if ((strstr(inputEventName, "cs40l26") != nullptr) || if ((strstr(inputEventName, "cs40l26") != nullptr) ||
@ -518,12 +521,16 @@ Vibrator::Vibrator(std::unique_ptr<HwApi> hwApiDefault, std::unique_ptr<HwCal> h
} }
} else { } else {
/* Initiate placeholders for OWT effects. */ /* Initiate placeholders for OWT effects. */
numBytes = effectIndex == WAVEFORM_COMPOSE ? FF_CUSTOM_DATA_LEN_MAX_COMP
: FF_CUSTOM_DATA_LEN_MAX_PWLE;
std::vector<int16_t> tempVec(numBytes, 0);
mEffectCustomData.push_back(std::move(tempVec));
mFfEffects[effectIndex] = { mFfEffects[effectIndex] = {
.type = FF_PERIODIC, .type = FF_PERIODIC,
.id = -1, .id = -1,
.replay.length = 0, .replay.length = 0,
.u.periodic.waveform = FF_CUSTOM, .u.periodic.waveform = FF_CUSTOM,
.u.periodic.custom_data = nullptr, .u.periodic.custom_data = mEffectCustomData[effectIndex].data(),
.u.periodic.custom_len = 0, .u.periodic.custom_len = 0,
}; };
} }
@ -532,18 +539,21 @@ Vibrator::Vibrator(std::unique_ptr<HwApi> hwApiDefault, std::unique_ptr<HwCal> h
// ====================HAL internal effect table== Flip ================================== // ====================HAL internal effect table== Flip ==================================
if (mIsDual) { if (mIsDual) {
mFfEffectsDual.resize(WAVEFORM_MAX_INDEX); mFfEffectsDual.resize(WAVEFORM_MAX_INDEX);
mEffectCustomDataDual.reserve(WAVEFORM_MAX_INDEX);
for (effectIndex = 0; effectIndex < WAVEFORM_MAX_INDEX; effectIndex++) { for (effectIndex = 0; effectIndex < WAVEFORM_MAX_INDEX; effectIndex++) {
if (effectIndex < WAVEFORM_MAX_PHYSICAL_INDEX) { if (effectIndex < WAVEFORM_MAX_PHYSICAL_INDEX) {
/* Initialize physical waveforms. */ /* Initialize physical waveforms. */
mEffectCustomDataDual.push_back({RAM_WVFRM_BANK, effectIndex});
mFfEffectsDual[effectIndex] = { mFfEffectsDual[effectIndex] = {
.type = FF_PERIODIC, .type = FF_PERIODIC,
.id = -1, .id = -1,
// Length == 0 to allow firmware control of the duration // Length == 0 to allow firmware control of the duration
.replay.length = 0, .replay.length = 0,
.u.periodic.waveform = FF_CUSTOM, .u.periodic.waveform = FF_CUSTOM,
.u.periodic.custom_data = new int16_t[2]{RAM_WVFRM_BANK, effectIndex}, .u.periodic.custom_data = mEffectCustomDataDual[effectIndex].data(),
.u.periodic.custom_len = FF_CUSTOM_DATA_LEN, .u.periodic.custom_len =
static_cast<uint32_t>(mEffectCustomDataDual[effectIndex].size()),
}; };
// Bypass the waveform update due to different input name // Bypass the waveform update due to different input name
if ((strstr(inputEventName, "cs40l26") != nullptr) || if ((strstr(inputEventName, "cs40l26") != nullptr) ||
@ -563,12 +573,16 @@ Vibrator::Vibrator(std::unique_ptr<HwApi> hwApiDefault, std::unique_ptr<HwCal> h
} }
} else { } else {
/* Initiate placeholders for OWT effects. */ /* Initiate placeholders for OWT effects. */
numBytes = effectIndex == WAVEFORM_COMPOSE ? FF_CUSTOM_DATA_LEN_MAX_COMP
: FF_CUSTOM_DATA_LEN_MAX_PWLE;
std::vector<int16_t> tempVec(numBytes, 0);
mEffectCustomDataDual.push_back(std::move(tempVec));
mFfEffectsDual[effectIndex] = { mFfEffectsDual[effectIndex] = {
.type = FF_PERIODIC, .type = FF_PERIODIC,
.id = -1, .id = -1,
.replay.length = 0, .replay.length = 0,
.u.periodic.waveform = FF_CUSTOM, .u.periodic.waveform = FF_CUSTOM,
.u.periodic.custom_data = nullptr, .u.periodic.custom_data = mEffectCustomDataDual[effectIndex].data(),
.u.periodic.custom_len = 0, .u.periodic.custom_len = 0,
}; };
} }

View file

@ -218,6 +218,8 @@ class Vibrator : public BnVibrator {
std::vector<ff_effect> mFfEffects; std::vector<ff_effect> mFfEffects;
std::vector<ff_effect> mFfEffectsDual; std::vector<ff_effect> mFfEffectsDual;
std::vector<uint32_t> mEffectDurations; std::vector<uint32_t> mEffectDurations;
std::vector<std::vector<int16_t>> mEffectCustomData;
std::vector<std::vector<int16_t>> mEffectCustomDataDual;
std::future<void> mAsyncHandle; std::future<void> mAsyncHandle;
::android::base::unique_fd mInputFd; ::android::base::unique_fd mInputFd;
::android::base::unique_fd mInputFdDual; ::android::base::unique_fd mInputFdDual;