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

Commit 19792a66 authored by Dan Albert's avatar Dan Albert Committed by Gerrit Code Review
Browse files

Merge "Be tolerant of devices that don't report serials."

parents 8b32c30b d99d902a
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -853,7 +853,8 @@ const char* atransport::connection_state_name() const {

#if ADB_HOST

static void append_transport_info(std::string* result, const char* key, const char* value, bool sanitize) {
static void append_transport_info(std::string* result, const char* key,
                                  const char* value, bool sanitize) {
    if (value == nullptr || *value == '\0') {
        return;
    }
@@ -869,7 +870,7 @@ static void append_transport_info(std::string* result, const char* key, const ch
static void append_transport(atransport* t, std::string* result, bool long_listing) {
    const char* serial = t->serial;
    if (!serial || !serial[0]) {
        serial = "????????????";
        serial = "(no serial number)";
    }

    if (!long_listing) {
+27 −26
Original line number Diff line number Diff line
@@ -569,16 +569,15 @@ int usb_close(usb_handle *h)

static void register_device(const char* dev_name, const char* dev_path,
                            unsigned char ep_in, unsigned char ep_out,
                            int interface, int serial_index, unsigned zero_mask)
{
        /* Since Linux will not reassign the device ID (and dev_name)
        ** as long as the device is open, we can add to the list here
        ** once we open it and remove from the list when we're finally
        ** closed and everything will work out fine.
        **
        ** If we have a usb_handle on the list 'o handles with a matching
        ** name, we have no further work to do.
        */
                            int interface, int serial_index,
                            unsigned zero_mask) {
    // Since Linux will not reassign the device ID (and dev_name) as long as the
    // device is open, we can add to the list here once we open it and remove
    // from the list when we're finally closed and everything will work out
    // fine.
    //
    // If we have a usb_handle on the list 'o handles with a matching name, we
    // have no further work to do.
    adb_mutex_lock(&usb_lock);
    for (usb_handle* usb = handle_list.next; usb != &handle_list; usb = usb->next) {
        if (!strcmp(usb->fname, dev_name)) {
@@ -599,7 +598,8 @@ static void register_device(const char* dev_name, const char* dev_path,

    adb_cond_init(&usb->notify, 0);
    adb_mutex_init(&usb->lock, 0);
    /* initialize mark to 1 so we don't get garbage collected after the device scan */
    // Initialize mark to 1 so we don't get garbage collected after the device
    // scan.
    usb->mark = 1;
    usb->reaper_thread = 0;

@@ -615,11 +615,13 @@ static void register_device(const char* dev_name, const char* dev_path,
        usb->writeable = 0;
    }

    D("[ usb opened %s%s, fd=%d]\n", usb->fname, (usb->writeable ? "" : " (read-only)"), usb->desc);
    D("[ usb opened %s%s, fd=%d]\n", usb->fname,
      (usb->writeable ? "" : " (read-only)"), usb->desc);

    if (usb->writeable) {
        if (ioctl(usb->desc, USBDEVFS_CLAIMINTERFACE, &interface) != 0) {
            D("[ usb ioctl(%d, USBDEVFS_CLAIMINTERFACE) failed: %s]\n", usb->desc, strerror(errno));
            D("[ usb ioctl(%d, USBDEVFS_CLAIMINTERFACE) failed: %s]\n",
              usb->desc, strerror(errno));
            adb_close(usb->desc);
            free(usb);
            return;
@@ -627,18 +629,19 @@ static void register_device(const char* dev_name, const char* dev_path,
    }

    // Read the device's serial number.
    std::string serial_path =
            android::base::StringPrintf("/sys/bus/usb/devices/%s/serial", dev_path + 4);
    std::string serial_path = android::base::StringPrintf(
        "/sys/bus/usb/devices/%s/serial", dev_path + 4);
    std::string serial;
    if (!android::base::ReadFileToString(serial_path, &serial)) {
        D("[ usb read %s failed: %s ]\n", serial_path.c_str(), strerror(errno));
        adb_close(usb->desc);
        free(usb);
        return;
        // We don't actually want to treat an unknown serial as an error because
        // devices aren't able to communicate a serial number in early bringup.
        // http://b/20883914
        serial = "";
    }
    serial = android::base::Trim(serial);

        /* add to the end of the active handles */
    // Add to the end of the active handles.
    adb_mutex_lock(&usb_lock);
    usb->next = &handle_list;
    usb->prev = handle_list.prev;
@@ -649,20 +652,18 @@ static void register_device(const char* dev_name, const char* dev_path,
    register_usb_transport(usb, serial.c_str(), dev_path, usb->writeable);
}

static void* device_poll_thread(void* unused)
{
static void* device_poll_thread(void* unused) {
    D("Created device thread\n");
    for(;;) {
            /* XXX use inotify */
    while (true) {
        // TODO: Use inotify.
        find_usb_device("/dev/bus/usb", register_device);
        kick_disconnected_devices();
        sleep(1);
    }
    return NULL;
    return nullptr;
}

static void sigalrm_handler(int signo)
{
static void sigalrm_handler(int signo) {
    // don't need to do anything here
}