rockchip: notify UsbFfs on gadget add/remove events

Signed-off-by: hmz007 <hmz007@gmail.com>
master
hmz007 3 months ago
parent a911f1c723
commit 0cddbf25e8

@ -41,6 +41,8 @@
#include "Usb.h"
using android::base::GetProperty;
using android::base::GetBoolProperty;
using android::base::SetProperty;
using android::base::Trim;
namespace aidl {
@ -682,6 +684,12 @@ static void uevent_event(uint32_t /*epevents*/, struct data *payload) {
char *cp;
int n;
const std::regex re_partner_add("(add)(.*)(-partner)");
const std::regex re_gadget_add("^add@/.*usb/gadget(\\.[0-9]+)?");
const std::regex re_gadget_remove("^remove@/.*usb/gadget(\\.[0-9]+)?");
bool adb_override = GetBoolProperty("persist.sys.usb.adb.override", true);
static const char* kPropertyUsbDisabled = "sys.usb.adb.disabled";
n = uevent_kernel_multicast_recv(payload->uevent_fd, msg, UEVENT_MSG_LEN);
if (n <= 0)
return;
@ -693,7 +701,18 @@ static void uevent_event(uint32_t /*epevents*/, struct data *payload) {
cp = msg;
while (*cp) {
if (std::regex_match(cp, std::regex("(add)(.*)(-partner)"))) {
if (adb_override && strstr(cp, "usb/gadget")) {
// Notify adbd usb_ffs_open_thread()
if (std::regex_search(cp, re_gadget_add)) {
ALOGD("gadget add -> resume adbd");
SetProperty(kPropertyUsbDisabled, "0");
} else if (std::regex_search(cp, re_gadget_remove)) {
ALOGD("gadget remove -> pause adbd");
SetProperty(kPropertyUsbDisabled, "1");
}
}
if (std::regex_match(cp, re_partner_add)) {
ALOGI("partner added");
pthread_mutex_lock(&payload->usb->mPartnerLock);
payload->usb->mPartnerUp = true;

Loading…
Cancel
Save