Usb: non-compliant port partner implementation
Adds vendor code for non-compliant charger feature. Minor port of commit 96ccf93453583642a15dd96b1e4d6bf0645fc10b Test: atest VtsAidlUsbTargetTest Test: manual test on device Bug: 301380358 Change-Id: Ie1a48b1acaaae9a53f3b9bfebcfee7a2f4814810 (cherry picked from commit 96ccf93453583642a15dd96b1e4d6bf0645fc10b)
This commit is contained in:
parent
ff36b058f5
commit
90ece745e5
1 changed files with 42 additions and 0 deletions
|
@ -69,6 +69,11 @@ constexpr char kI2CPath[] = "/sys/devices/platform/108d0000.hsi2c/i2c-";
|
|||
constexpr char kContaminantDetectionPath[] = "-0025/contaminant_detection";
|
||||
constexpr char kDisplayPortDrmPath[] = "/sys/devices/platform/110f0000.drmdp/drm-displayport/";
|
||||
constexpr char kDisplayPortUsbPath[] = "/sys/class/typec/port0-partner/";
|
||||
constexpr char kComplianceWarningsPath[] = "device/non_compliant_reasons";
|
||||
constexpr char kComplianceWarningBC12[] = "bc12";
|
||||
constexpr char kComplianceWarningDebugAccessory[] = "debug-accessory";
|
||||
constexpr char kComplianceWarningMissingRp[] = "missing_rp";
|
||||
constexpr char kComplianceWarningOther[] = "other";
|
||||
constexpr char kStatusPath[] = "-0025/contaminant_detection_status";
|
||||
constexpr char kSinkLimitEnable[] = "-0025/usb_limit_sink_enable";
|
||||
constexpr char kSourceLimitEnable[] = "-0025/usb_limit_source_enable";
|
||||
|
@ -319,6 +324,42 @@ Status queryMoistureDetectionStatus(std::vector<PortStatus> *currentPortStatus)
|
|||
return Status::SUCCESS;
|
||||
}
|
||||
|
||||
Status queryNonCompliantChargerStatus(std::vector<PortStatus> *currentPortStatus) {
|
||||
string reasons, path;
|
||||
|
||||
for (int i = 0; i < currentPortStatus->size(); i++) {
|
||||
(*currentPortStatus)[i].supportsComplianceWarnings = true;
|
||||
path = string(kTypecPath) + "/" + (*currentPortStatus)[i].portName + "/" +
|
||||
string(kComplianceWarningsPath);
|
||||
if (ReadFileToString(path.c_str(), &reasons)) {
|
||||
std::vector<string> reasonsList = Tokenize(reasons.c_str(), "[], \n\0");
|
||||
for (string reason : reasonsList) {
|
||||
if (!strncmp(reason.c_str(), kComplianceWarningDebugAccessory,
|
||||
strlen(kComplianceWarningDebugAccessory))) {
|
||||
(*currentPortStatus)[i].complianceWarnings.push_back(ComplianceWarning::DEBUG_ACCESSORY);
|
||||
continue;
|
||||
}
|
||||
if (!strncmp(reason.c_str(), kComplianceWarningBC12,
|
||||
strlen(kComplianceWarningBC12))) {
|
||||
(*currentPortStatus)[i].complianceWarnings.push_back(ComplianceWarning::BC_1_2);
|
||||
continue;
|
||||
}
|
||||
if (!strncmp(reason.c_str(), kComplianceWarningMissingRp,
|
||||
strlen(kComplianceWarningMissingRp))) {
|
||||
(*currentPortStatus)[i].complianceWarnings.push_back(ComplianceWarning::MISSING_RP);
|
||||
continue;
|
||||
}
|
||||
if (!strncmp(reason.c_str(), kComplianceWarningOther,
|
||||
strlen(kComplianceWarningOther))) {
|
||||
(*currentPortStatus)[i].complianceWarnings.push_back(ComplianceWarning::OTHER);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return Status::SUCCESS;
|
||||
}
|
||||
|
||||
string appendRoleNodeHelper(const string &portName, PortRole::Tag tag) {
|
||||
string node("/sys/class/typec/" + portName);
|
||||
|
||||
|
@ -983,6 +1024,7 @@ void queryVersionHelper(android::hardware::usb::Usb *usb,
|
|||
status = getPortStatusHelper(usb, currentPortStatus);
|
||||
queryMoistureDetectionStatus(currentPortStatus);
|
||||
queryPowerTransferStatus(currentPortStatus);
|
||||
queryNonCompliantChargerStatus(currentPortStatus);
|
||||
pthread_mutex_lock(&usb->mDisplayPortLock);
|
||||
if (!usb->mDisplayPortFirstSetupDone &&
|
||||
usb->getDisplayPortUsbPathHelper(&displayPortUsbPath) == Status::SUCCESS) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue