|
|
|
|
@ -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;
|
|
|
|
|
|