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

Commit 76e47e0e authored by Scott Anderson's avatar Scott Anderson Committed by Android Git Automerger
Browse files

am 9526a788: Merge "adb: Add ability to specify device path" into ics-aah

* commit '9526a788':
  adb: Add ability to specify device path
parents a61bcad5 9526a788
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -17,8 +17,10 @@ host:kill
    upgrade.

host:devices
host:devices-l
    Ask to return the list of available Android devices and their
    state. After the OKAY, this is followed by a 4-byte hex len,
    state. devices-l includes the device paths in the state.
    After the OKAY, this is followed by a 4-byte hex len,
    and a string that will be dumped as-is by the client, then
    the connection is closed

@@ -88,6 +90,9 @@ host:<request>
    Returns the serial number of the corresponding device/emulator.
    Note that emulator serial numbers are of the form "emulator-5554"

<host-prefix>:get-devpath
    Returns the device path of the corresponding device/emulator.

<host-prefix>:get-state
    Returns the state of a given device as a string.

+22 −9
Original line number Diff line number Diff line
@@ -1201,17 +1201,20 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r
    }

    // return a list of all connected devices
    if (!strcmp(service, "devices")) {
    if (!strncmp(service, "devices", 7)) {
        char buffer[4096];
        int use_long = !strcmp(service+7, "-l");
        if (use_long || service[7] == 0) {
            memset(buf, 0, sizeof(buf));
            memset(buffer, 0, sizeof(buffer));
            D("Getting device list \n");
        list_transports(buffer, sizeof(buffer));
            list_transports(buffer, sizeof(buffer), use_long);
            snprintf(buf, sizeof(buf), "OKAY%04x%s",(unsigned)strlen(buffer),buffer);
            D("Wrote device list \n");
            writex(reply_fd, buf, strlen(buf));
            return 0;
        }
    }

    // add a new TCP transport, device or emulator
    if (!strncmp(service, "connect:", 8)) {
@@ -1276,6 +1279,16 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r
        writex(reply_fd, buf, strlen(buf));
        return 0;
    }
    if(!strncmp(service,"get-devpath",strlen("get-devpath"))) {
        char *out = "unknown";
         transport = acquire_one_transport(CS_ANY, ttype, serial, NULL);
       if (transport && transport->devpath) {
            out = transport->devpath;
        }
        snprintf(buf, sizeof buf, "OKAY%04x%s",(unsigned)strlen(out),out);
        writex(reply_fd, buf, strlen(buf));
        return 0;
    }
    // indicates a new emulator instance has started
    if (!strncmp(service,"emulator:",9)) {
        int  port = atoi(service+9);
+3 −2
Original line number Diff line number Diff line
@@ -190,6 +190,7 @@ struct atransport
        /* used to identify transports for clients */
    char *serial;
    char *product;
    char *devpath;
    int adb_port; // Use for emulators (local transport)

        /* a list of adisconnect callbacks called when the transport is kicked */
@@ -253,7 +254,7 @@ int adb_main(int is_daemon, int server_port);
** get_device_transport does an acquire on your behalf before returning
*/
void init_transport_registration(void);
int  list_transports(char *buf, size_t  bufsize);
int  list_transports(char *buf, size_t  bufsize, int show_devpath);
void update_transports(void);

asocket*  create_device_tracker(void);
@@ -286,7 +287,7 @@ void register_socket_transport(int s, const char *serial, int port, int local);
void unregister_transport(atransport *t);
void unregister_all_tcp_transports();

void register_usb_transport(usb_handle *h, const char *serial, unsigned writeable);
void register_usb_transport(usb_handle *h, const char *serial, const char *devpath, unsigned writeable);

/* this should only be used for transports with connection_state == CS_NOPERM */
void unregister_usb_transport(usb_handle *usb);
+17 −5
Original line number Diff line number Diff line
@@ -84,8 +84,8 @@ void help()
        "                                 returns an error if more than one USB device is present.\n"
        " -e                            - directs command to the only running emulator.\n"
        "                                 returns an error if more than one emulator is running.\n"
        " -s <serial number>            - directs command to the USB device or emulator with\n"
        "                                 the given serial number. Overrides ANDROID_SERIAL\n"
        " -s <specific device>          - directs command to the device or emulator with the given\n"
        "                                 serial number or device path. Overrides ANDROID_SERIAL\n"
        "                                 environment variable.\n"
        " -p <product name or path>     - simple product name like 'sooner', or\n"
        "                                 a relative/absolute path to a product\n"
@@ -93,7 +93,8 @@ void help()
        "                                 If -p is not specified, the ANDROID_PRODUCT_OUT\n"
        "                                 environment variable is used, which must\n"
        "                                 be an absolute path.\n"
        " devices                       - list all connected devices\n"
        " devices [-l]                  - list all connected devices\n"
        "                                 ('-l' means list device paths)\n"
        " connect <host>[:<port>]       - connect to a device via TCP/IP\n"
        "                                 Port 5555 is used by default if no port number is specified.\n"
        " disconnect [<host>[:<port>]]  - disconnect from a TCP/IP device.\n"
@@ -159,6 +160,7 @@ void help()
        "  adb kill-server              - kill the server if it is running\n"
        "  adb get-state                - prints: offline | bootloader | device\n"
        "  adb get-serialno             - prints: <serial-number>\n"
        "  adb get-devpath              - prints: <device-path>\n"
        "  adb status-window            - continuously print device status for a specified device\n"
        "  adb remount                  - remounts the /system partition on the device read-write\n"
        "  adb reboot [bootloader|recovery] - reboots the device, optionally into the bootloader or recovery program\n"
@@ -1016,7 +1018,16 @@ top:

    if(!strcmp(argv[0], "devices")) {
        char *tmp;
        snprintf(buf, sizeof buf, "host:%s", argv[0]);
        char *listopt;
        if (argc < 2)
            listopt = "";
        else if (argc == 2 && !strcmp(argv[1], "-l"))
            listopt = argv[1];
        else {
            fprintf(stderr, "Usage: adb devices [-l]\n");
            return 1;
        }
        snprintf(buf, sizeof buf, "host:%s%s", argv[0], listopt);
        tmp = adb_query(buf);
        if(tmp) {
            printf("List of devices attached \n");
@@ -1298,7 +1309,8 @@ top:
    /* passthrough commands */

    if(!strcmp(argv[0],"get-state") ||
        !strcmp(argv[0],"get-serialno"))
        !strcmp(argv[0],"get-serialno") ||
        !strcmp(argv[0],"get-devpath"))
    {
        char *tmp;

+22 −4
Original line number Diff line number Diff line
@@ -370,7 +370,7 @@ static int list_transports_msg(char* buffer, size_t bufferlen)
    char  head[5];
    int   len;

    len = list_transports(buffer+4, bufferlen-4);
    len = list_transports(buffer+4, bufferlen-4, 0);
    snprintf(head, sizeof(head), "%04x", len);
    memcpy(buffer, head, 4);
    len += 4;
@@ -601,6 +601,8 @@ static void transport_registration_func(int _fd, unsigned ev, void *data)
            free(t->product);
        if (t->serial)
            free(t->serial);
        if (t->devpath)
            free(t->devpath);

        memset(t,0xee,sizeof(atransport));
        free(t);
@@ -762,6 +764,10 @@ retry:
                result = t;
                break;
            }
            if (t->devpath && !strcmp(serial, t->devpath)) {
                result = t;
                break;
            }
        } else {
            if (ttype == kTransportUsb && t->type == kTransportUsb) {
                if (result) {
@@ -837,7 +843,7 @@ static const char *statename(atransport *t)
    }
}

int list_transports(char *buf, size_t  bufsize)
int list_transports(char *buf, size_t  bufsize, int show_devpath)
{
    char*       p   = buf;
    char*       end = buf + bufsize;
@@ -850,6 +856,12 @@ int list_transports(char *buf, size_t bufsize)
        const char* serial = t->serial;
        if (!serial || !serial[0])
            serial = "????????????";
        if (show_devpath) {
            const char* devpath = t->devpath;
            if (!devpath || !devpath[0])
                devpath = "????????????";
            len = snprintf(p, end - p, "%s\t%s\t%s\n", serial, devpath, statename(t));
        } else
            len = snprintf(p, end - p, "%s\t%s\n", serial, statename(t));

        if (p + len >= end) {
@@ -911,6 +923,9 @@ atransport *find_transport(const char *serial)
        if (t->serial && !strcmp(serial, t->serial)) {
            break;
        }
        if (t->devpath && !strcmp(serial, t->devpath)) {
            break;
        }
     }
    adb_mutex_unlock(&transport_lock);

@@ -956,7 +971,7 @@ void unregister_all_tcp_transports()

#endif

void register_usb_transport(usb_handle *usb, const char *serial, unsigned writeable)
void register_usb_transport(usb_handle *usb, const char *serial, const char *devpath, unsigned writeable)
{
    atransport *t = calloc(1, sizeof(atransport));
    D("transport: %p init'ing for usb_handle %p (sn='%s')\n", t, usb,
@@ -965,6 +980,9 @@ void register_usb_transport(usb_handle *usb, const char *serial, unsigned writea
    if(serial) {
        t->serial = strdup(serial);
    }
    if(devpath) {
        t->devpath = strdup(devpath);
    }
    register_transport(t);
}

Loading