From acf4e01386e2cc3b262da66f64f23a1ddad14d12 Mon Sep 17 00:00:00 2001 From: Roy Luo Date: Mon, 6 Nov 2023 23:12:46 +0000 Subject: [PATCH] usb: update incompatible charger warning reason Report COMPLIANCE_WARNING_INPUT_POWER_LIMITED instead of COMPLIANCE_WARNING_OTHER to flag incompatible chargers. The underlying logic that generates the warning remains the same, what's changed is the enum that's being used. The purpose of the change is to have a warning type that better represents what actually happens and free up COMPLIANCE_WARNING_OTHER that was intended to act as a fallback reason code. The flag enable_input_power_limited_warning controls whether to switch to the new enum, while the flag enable_usb_data_compliance_warning controls the new enums that are added as FlaggedApi in the framework. Both flags need to be on to enable the change. Bug: 308700954 Bug: 301380358 Test: manual tests with local flag override Change-Id: I6595706d1b83d533fc2d3e29086773270e045ede --- usb/usb/Android.bp | 12 ++++++++++-- usb/usb/Usb.cpp | 22 +++++++++++++++++++--- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/usb/usb/Android.bp b/usb/usb/Android.bp index 1be9944..7a41437 100644 --- a/usb/usb/Android.bp +++ b/usb/usb/Android.bp @@ -46,21 +46,29 @@ cc_binary { "android.hardware.thermal@2.0", "android.hardware.thermal-V1-ndk", "android.hardware.usb.gadget@1.0", - "android.hardware.usb-V2-ndk", + "android.hardware.usb-V3-ndk", "android.hardware.usb.gadget-V1-ndk", "libcutils", "android.frameworks.stats-V2-ndk", "pixelatoms-cpp", "libbinder_ndk", - + "libprotobuf-cpp-lite", + "server_configurable_flags", ], static_libs: [ "libpixelusb-aidl", "libpixelstats", "libthermalutils", + "android.hardware.usb.flags-aconfig-c-lib", ], export_shared_lib_headers: [ "android.frameworks.stats-V2-ndk", "pixelatoms-cpp", ], } + +cc_aconfig_library { + name: "android.hardware.usb.flags-aconfig-c-lib", + vendor: true, + aconfig_declarations: "android.hardware.usb.flags-aconfig", +} diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp index adf4993..b328bbe 100644 --- a/usb/usb/Usb.cpp +++ b/usb/usb/Usb.cpp @@ -42,9 +42,13 @@ #include "Usb.h" #include +#include +#include #include #include +namespace usb_flags = android::hardware::usb::flags; + using aidl::android::frameworks::stats::IStats; using android::base::GetProperty; using android::base::Join; @@ -74,6 +78,7 @@ constexpr char kComplianceWarningBC12[] = "bc12"; constexpr char kComplianceWarningDebugAccessory[] = "debug-accessory"; constexpr char kComplianceWarningMissingRp[] = "missing_rp"; constexpr char kComplianceWarningOther[] = "other"; +constexpr char kComplianceWarningInputPowerLimited[] = "input_power_limited"; constexpr char kStatusPath[] = "-0025/contaminant_detection_status"; constexpr char kSinkLimitEnable[] = "-0025/usb_limit_sink_enable"; constexpr char kSourceLimitEnable[] = "-0025/usb_limit_source_enable"; @@ -350,9 +355,20 @@ Status queryNonCompliantChargerStatus(std::vector *currentPortStatus continue; } if (!strncmp(reason.c_str(), kComplianceWarningOther, - strlen(kComplianceWarningOther))) { - (*currentPortStatus)[i].complianceWarnings.push_back(ComplianceWarning::OTHER); - continue; + strlen(kComplianceWarningOther)) || + !strncmp(reason.c_str(), kComplianceWarningInputPowerLimited, + strlen(kComplianceWarningInputPowerLimited))) { + if (usb_flags::enable_usb_data_compliance_warning() && + usb_flags::enable_input_power_limited_warning()) { + ALOGI("Report through INPUT_POWER_LIMITED warning"); + (*currentPortStatus)[i].complianceWarnings.push_back( + ComplianceWarning::INPUT_POWER_LIMITED); + continue; + } else { + (*currentPortStatus)[i].complianceWarnings.push_back( + ComplianceWarning::OTHER); + continue; + } } } if ((*currentPortStatus)[i].complianceWarnings.size() > 0 &&