Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 25fe126f authored by Tao Bao's avatar Tao Bao
Browse files

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
Merged-In: I367d7339fe68006aba09a1e3db6370d472296676
(cherry picked from commit 55d407ec)
parent ff9ac9e2
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -280,6 +280,9 @@ void parse_banner(const std::string& banner, atransport* t) {
    } else if (type == "sideload") {
    } else if (type == "sideload") {
        D("setting connection_state to kCsSideload");
        D("setting connection_state to kCsSideload");
        t->SetConnectionState(kCsSideload);
        t->SetConnectionState(kCsSideload);
    } else if (type == "rescue") {
        D("setting connection_state to kCsRescue");
        t->SetConnectionState(kCsRescue);
    } else {
    } else {
        D("setting connection_state to kCsHost");
        D("setting connection_state to kCsHost");
        t->SetConnectionState(kCsHost);
        t->SetConnectionState(kCsHost);
+2 −0
Original line number Original line Diff line number Diff line
@@ -107,6 +107,7 @@ enum ConnectionState {
    kCsHost,
    kCsHost,
    kCsRecovery,
    kCsRecovery,
    kCsSideload,
    kCsSideload,
    kCsRescue,
};
};


inline bool ConnectionStateIsOnline(ConnectionState state) {
inline bool ConnectionStateIsOnline(ConnectionState state) {
@@ -116,6 +117,7 @@ inline bool ConnectionStateIsOnline(ConnectionState state) {
        case kCsHost:
        case kCsHost:
        case kCsRecovery:
        case kCsRecovery:
        case kCsSideload:
        case kCsSideload:
        case kCsRescue:
            return true;
            return true;
        default:
        default:
            return false;
            return false;
+4 −3
Original line number Original line Diff line number Diff line
@@ -190,7 +190,7 @@ static void help() {
        "scripting:\n"
        "scripting:\n"
        " wait-for[-TRANSPORT]-STATE\n"
        " wait-for[-TRANSPORT]-STATE\n"
        "     wait for device to be in the given 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"
        "     TRANSPORT: usb, local, or any [default=any]\n"
        " get-state                print offline | bootloader | device\n"
        " get-state                print offline | bootloader | device\n"
        " get-serialno             print <serial-number>\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" &&
    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") {
        components[3] != "disconnect") {
        fprintf(stderr,
        fprintf(stderr,
                "adb: unknown state %s; "
                "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());
                components[3].c_str());
        return false;
        return false;
    }
    }
+2 −0
Original line number Original line Diff line number Diff line
@@ -227,6 +227,8 @@ asocket* host_service_to_socket(std::string_view name, std::string_view serial,
            sinfo->state = kCsDevice;
            sinfo->state = kCsDevice;
        } else if (name == "-recovery") {
        } else if (name == "-recovery") {
            sinfo->state = kCsRecovery;
            sinfo->state = kCsRecovery;
        } else if (name == "-rescue") {
            sinfo->state = kCsRescue;
        } else if (name == "-sideload") {
        } else if (name == "-sideload") {
            sinfo->state = kCsSideload;
            sinfo->state = kCsSideload;
        } else if (name == "-bootloader") {
        } else if (name == "-bootloader") {
+2 −0
Original line number Original line Diff line number Diff line
@@ -1012,6 +1012,8 @@ std::string atransport::connection_state_name() const {
            return "host";
            return "host";
        case kCsRecovery:
        case kCsRecovery:
            return "recovery";
            return "recovery";
        case kCsRescue:
            return "rescue";
        case kCsNoPerm:
        case kCsNoPerm:
            return UsbNoPermissionsShortHelpText();
            return UsbNoPermissionsShortHelpText();
        case kCsSideload:
        case kCsSideload: