From 5863fb61e142ec8494443ba341e240f9fe86934b Mon Sep 17 00:00:00 2001 From: Josh Gao Date: Wed, 13 Apr 2016 12:18:58 -0700 Subject: [PATCH] adb: add support for 'wait-for-any'. Allow waiting for a device in any state. Bug: http://b/28168212 Change-Id: I1876ecd70089ca88f2da5de4182e13724ec50501 (cherry picked from commit 86441c31fe256f37625743e2818377ce5e3dec05) --- adb/commandline.cpp | 6 +++--- adb/services.cpp | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/adb/commandline.cpp b/adb/commandline.cpp index 9b3c3e275..f904df78d 100644 --- a/adb/commandline.cpp +++ b/adb/commandline.cpp @@ -1057,11 +1057,11 @@ static bool wait_for_device(const char* service, TransportType t, const char* se return false; } - if (components[3] != "bootloader" && components[3] != "device" && components[3] != "recovery" && - components[3] != "sideload") { + if (components[3] != "any" && components[3] != "bootloader" && components[3] != "device" && + components[3] != "recovery" && components[3] != "sideload") { fprintf(stderr, "adb: unknown state %s; " - "expected 'bootloader', 'device', 'recovery', or 'sideload'\n", + "expected 'any', 'bootloader', 'device', 'recovery', or 'sideload'\n", components[3].c_str()); return false; } diff --git a/adb/services.cpp b/adb/services.cpp index d5e963b72..67e8e414b 100644 --- a/adb/services.cpp +++ b/adb/services.cpp @@ -370,7 +370,7 @@ static void wait_for_state(int fd, void* data) { std::string error = "unknown error"; const char* serial = sinfo->serial.length() ? sinfo->serial.c_str() : NULL; atransport* t = acquire_one_transport(sinfo->transport_type, serial, &is_ambiguous, &error); - if (t != nullptr && t->connection_state == sinfo->state) { + if (t != nullptr && (sinfo->state == kCsAny || sinfo->state == t->connection_state)) { SendOkay(fd); break; } else if (!is_ambiguous) { @@ -534,6 +534,8 @@ asocket* host_service_to_socket(const char* name, const char* serial) { sinfo->state = kCsSideload; } else if (!strcmp(name, "-bootloader")) { sinfo->state = kCsBootloader; + } else if (!strcmp(name, "-any")) { + sinfo->state = kCsAny; } else { return nullptr; }