adb: Recognize rescue mode.

This CL adds client support to recognize the rescue mode (which will be
served by recovery image). It also allows waiting for a device to enter
rescue mode. The support for the actual rescue commands will be added in
follow-up CLs.

Bug: 128415917
Test: `adb devices` recognizes devices under rescue mode.
Test: `adb wait-for-rescue` waits for device to be in rescue mode.
Change-Id: I367d7339fe68006aba09a1e3db6370d472296676
This commit is contained in:
Tao Bao 2019-04-07 23:24:03 -07:00
parent 8a9a1c5056
commit 55d407ec4a
5 changed files with 13 additions and 3 deletions

View File

@ -280,6 +280,9 @@ void parse_banner(const std::string& banner, atransport* t) {
} else if (type == "sideload") {
D("setting connection_state to kCsSideload");
t->SetConnectionState(kCsSideload);
} else if (type == "rescue") {
D("setting connection_state to kCsRescue");
t->SetConnectionState(kCsRescue);
} else {
D("setting connection_state to kCsHost");
t->SetConnectionState(kCsHost);

View File

@ -107,6 +107,7 @@ enum ConnectionState {
kCsHost,
kCsRecovery,
kCsSideload,
kCsRescue,
};
inline bool ConnectionStateIsOnline(ConnectionState state) {
@ -116,6 +117,7 @@ inline bool ConnectionStateIsOnline(ConnectionState state) {
case kCsHost:
case kCsRecovery:
case kCsSideload:
case kCsRescue:
return true;
default:
return false;

View File

@ -190,7 +190,7 @@ static void help() {
"scripting:\n"
" wait-for[-TRANSPORT]-STATE\n"
" wait for device to be in the given state\n"
" STATE: device, recovery, sideload, bootloader, or disconnect\n"
" STATE: device, recovery, rescue, sideload, bootloader, or disconnect\n"
" TRANSPORT: usb, local, or any [default=any]\n"
" get-state print offline | bootloader | device\n"
" get-serialno print <serial-number>\n"
@ -1037,11 +1037,12 @@ static bool wait_for_device(const char* service,
}
if (components[3] != "any" && components[3] != "bootloader" && components[3] != "device" &&
components[3] != "recovery" && components[3] != "sideload" &&
components[3] != "recovery" && components[3] != "rescue" && components[3] != "sideload" &&
components[3] != "disconnect") {
fprintf(stderr,
"adb: unknown state %s; "
"expected 'any', 'bootloader', 'device', 'recovery', 'sideload', or 'disconnect'\n",
"expected 'any', 'bootloader', 'device', 'recovery', 'rescue', 'sideload', or "
"'disconnect'\n",
components[3].c_str());
return false;
}

View File

@ -227,6 +227,8 @@ asocket* host_service_to_socket(std::string_view name, std::string_view serial,
sinfo->state = kCsDevice;
} else if (name == "-recovery") {
sinfo->state = kCsRecovery;
} else if (name == "-rescue") {
sinfo->state = kCsRescue;
} else if (name == "-sideload") {
sinfo->state = kCsSideload;
} else if (name == "-bootloader") {

View File

@ -1012,6 +1012,8 @@ std::string atransport::connection_state_name() const {
return "host";
case kCsRecovery:
return "recovery";
case kCsRescue:
return "rescue";
case kCsNoPerm:
return UsbNoPermissionsShortHelpText();
case kCsSideload: