#include "Usb.h"
-#include <aidl/android/frameworks/stats/IStats.h>
-#include <pixelstats/StatsHelper.h>
-
-using aidl::android::frameworks::stats::IStats;
using android::base::GetProperty;
-using android::hardware::google::pixel::getStatsService;
-using android::hardware::google::pixel::PixelAtoms::VendorUsbPortOverheat;
-using android::hardware::google::pixel::reportUsbPortOverheat;
namespace android {
namespace hardware {
constexpr char kStatusPath[] = "i2c-max77759tcpc/contaminant_detection_status";
constexpr char kTypecPath[] = "/sys/class/typec";
constexpr char kDisableContatminantDetection[] = "vendor.usb.contaminantdisable";
-constexpr char kOverheatStatsPath[] = "/sys/devices/platform/google,usbc_port_cooling_dev/";
-constexpr char kOverheatStatsDev[] = "DRIVER=google,usbc_port_cooling_dev";
-constexpr char kThermalZoneForTrip[] = "VIRTUAL-USB-THROTTLING";
-constexpr char kThermalZoneForTempReadPrimary[] = "usb_pwr_therm2";
-constexpr char kThermalZoneForTempReadSecondary1[] = "usb_pwr_therm";
-constexpr char kThermalZoneForTempReadSecondary2[] = "qi_therm";
-constexpr int kSamplingIntervalSec = 5;
int32_t readFile(const std::string &filename, std::string *contents) {
FILE *fp;
: mLock(PTHREAD_MUTEX_INITIALIZER),
mRoleSwitchLock(PTHREAD_MUTEX_INITIALIZER),
mPartnerLock(PTHREAD_MUTEX_INITIALIZER),
- mPartnerUp(false),
- mOverheat(ZoneInfo(TemperatureType::USB_PORT, kThermalZoneForTrip,
- ThrottlingSeverity::CRITICAL),
- {ZoneInfo(TemperatureType::UNKNOWN, kThermalZoneForTempReadPrimary,
- ThrottlingSeverity::NONE),
- ZoneInfo(TemperatureType::UNKNOWN, kThermalZoneForTempReadSecondary1,
- ThrottlingSeverity::NONE),
- ZoneInfo(TemperatureType::UNKNOWN, kThermalZoneForTempReadSecondary2,
- ThrottlingSeverity::NONE)}, kSamplingIntervalSec) {
+ mPartnerUp(false) {
pthread_condattr_t attr;
if (pthread_condattr_init(&attr)) {
ALOGE("pthread_condattr_init failed: %s", strerror(errno));
* The caller of this method would reconstruct the V1_0::PortStatus
* object if required.
*/
-Status getPortStatusHelper(hidl_vec<PortStatus> *currentPortStatus_1_2, HALVersion version,
- android::hardware::usb::V1_3::implementation::Usb *usb) {
+Status getPortStatusHelper(hidl_vec<PortStatus> *currentPortStatus_1_2, HALVersion version) {
std::unordered_map<std::string, bool> names;
Status result = getTypeCPortNamesHelper(&names);
int i = -1;
(*currentPortStatus_1_2)[i].status_1_1.status.currentMode = V1_0::PortMode::NONE;
}
- // Query temperature for the first connect
- if (port.second && !usb->mPluggedTemperatureCelsius) {
- usb->mOverheat.getCurrentTemperature(kThermalZoneForTempReadPrimary,
- &usb->mPluggedTemperatureCelsius);
- ALOGV("USB Initial temperature: %f", usb->mPluggedTemperatureCelsius);
- }
ALOGI(
"%d:%s connected:%d canChangeMode:%d canChagedata:%d canChangePower:%d "
"supportedModes:%d",
pthread_mutex_lock(&usb->mLock);
if (usb->mCallback_1_0 != NULL) {
if (callback_V1_2 != NULL) {
- status = getPortStatusHelper(currentPortStatus_1_2, HALVersion::V1_2, usb);
+ status = getPortStatusHelper(currentPortStatus_1_2, HALVersion::V1_2);
if (status == Status::SUCCESS)
queryMoistureDetectionStatus(currentPortStatus_1_2);
} else if (callback_V1_1 != NULL) {
- status = getPortStatusHelper(currentPortStatus_1_2, HALVersion::V1_1, usb);
+ status = getPortStatusHelper(currentPortStatus_1_2, HALVersion::V1_1);
currentPortStatus_1_1.resize(currentPortStatus_1_2->size());
for (unsigned long i = 0; i < currentPortStatus_1_2->size(); i++)
currentPortStatus_1_1[i] = (*currentPortStatus_1_2)[i].status_1_1;
} else {
- status = getPortStatusHelper(currentPortStatus_1_2, HALVersion::V1_0, usb);
+ status = getPortStatusHelper(currentPortStatus_1_2, HALVersion::V1_0);
currentPortStatus.resize(currentPortStatus_1_2->size());
for (unsigned long i = 0; i < currentPortStatus_1_2->size(); i++)
currentPortStatus[i] = (*currentPortStatus_1_2)[i].status_1_1.status;
return Void();
}
-void report_overheat_event(android::hardware::usb::V1_3::implementation::Usb *usb) {
- VendorUsbPortOverheat overheat_info;
- std::string contents;
-
- overheat_info.set_plug_temperature_deci_c(usb->mPluggedTemperatureCelsius * 10);
- overheat_info.set_max_temperature_deci_c(usb->mOverheat.getMaxOverheatTemperature() * 10);
- if (ReadFileToString(std::string(kOverheatStatsPath) + "trip_time", &contents)) {
- overheat_info.set_time_to_overheat_secs(stoi(contents));
- } else {
- ALOGE("Unable to read trip_time");
- return;
- }
- if (ReadFileToString(std::string(kOverheatStatsPath) + "hysteresis_time", &contents)) {
- overheat_info.set_time_to_hysteresis_secs(stoi(contents));
- } else {
- ALOGE("Unable to read hysteresis_time");
- return;
- }
- if (ReadFileToString(std::string(kOverheatStatsPath) + "cleared_time", &contents)) {
- overheat_info.set_time_to_inactive_secs(stoi(contents));
- } else {
- ALOGE("Unable to read cleared_time");
- return;
- }
-
- const std::shared_ptr<IStats> stats_client = getStatsService();
- if (!stats_client) {
- ALOGE("Unable to get AIDL Stats service");
- } else {
- reportUsbPortOverheat(stats_client, overheat_info);
- }
-}
-
struct data {
int uevent_fd;
android::hardware::usb::V1_3::implementation::Usb *usb;
payload->usb->mPartnerUp = true;
pthread_cond_signal(&payload->usb->mPartnerCV);
pthread_mutex_unlock(&payload->usb->mPartnerLock);
- // Update Plugged temperature
- payload->usb->mOverheat.getCurrentTemperature(kThermalZoneForTempReadPrimary,
- &payload->usb->mPluggedTemperatureCelsius);
- ALOGI("Usb Plugged temp: %f", payload->usb->mPluggedTemperatureCelsius);
} else if (!strncmp(cp, "DEVTYPE=typec_", strlen("DEVTYPE=typec_")) ||
!strncmp(cp, "DRIVER=max77759tcpc",
strlen("DRIVER=max77759tcpc"))) {
pthread_mutex_unlock(&payload->usb->mRoleSwitchLock);
}
break;
- } else if (!strncmp(cp, kOverheatStatsDev, strlen(kOverheatStatsDev))) {
- ALOGV("Overheat Cooling device suez update");
- report_overheat_event(payload->usb);
}
/* advance to after the next \0 */
while (*cp++) {