Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/usbhub/utils.c

    rf9a0cef r9223dc5c  
    506506                int hc, uint16_t port, usb_target_t target) {
    507507
     508        usb_device_request_setup_packet_t request;
    508509        int opResult;
    509510        printf("[usb_hub] finalizing add device\n");
    510         opResult = usb_hub_clear_port_feature(hc, target.address,
    511             port, USB_HUB_FEATURE_C_PORT_RESET);
    512         if (opResult != EOK) {
    513                 goto release;
    514         }
    515 
    516         /* Request address at from host controller. */
    517         usb_address_t new_device_address = usb_drv_request_address(hc);
    518         if (new_device_address < 0) {
    519                 printf("[usb_hub] failed to get free USB address\n");
    520                 opResult = new_device_address;
    521                 goto release;
    522         }
    523         printf("[usb_hub] setting new address\n");
    524         opResult = usb_drv_req_set_address(hc, USB_ADDRESS_DEFAULT,
    525             new_device_address);
    526 
     511        usb_address_t new_device_address =
     512                        usb_drv_request_address(hc);
     513        usb_hub_set_set_address_request
     514                        (&request, new_device_address);
     515        opResult = usb_drv_sync_control_write(
     516                        hc, target,
     517                        &request,
     518                        NULL, 0
     519                        );
    527520        if (opResult != EOK) {
    528521                printf("[usb_hub] could not set address for new device\n");
    529                 goto release;
    530         }
    531 
    532 release:
    533         printf("[usb_hub] releasing default address\n");
     522                //will retry later...
     523                return;
     524        }
     525
    534526        usb_drv_release_default_address(hc);
    535         if (opResult != EOK) {
    536                 return;
    537         }
    538527
    539528        devman_handle_t child_handle;
    540529        opResult = usb_drv_register_child_in_devman(hc, hub->device,
    541             new_device_address, &child_handle);
     530        new_device_address, &child_handle);
    542531        if (opResult != EOK) {
    543532                printf("[usb_hub] could not start driver for new device \n");
     
    554543        printf("[usb_hub] new device address %d, handle %d\n",
    555544            new_device_address, child_handle);
     545        sleep(60);
    556546       
    557547}
     
    630620        //something connected/disconnected
    631621        if (usb_port_connect_change(&status)) {
    632                 opResult = usb_hub_clear_port_feature(hc, target.address,
    633                     port, USB_HUB_FEATURE_C_PORT_CONNECTION);
    634                 // TODO: check opResult
    635622                if (usb_port_dev_connected(&status)) {
    636623                        printf("[usb_hub] some connection changed\n");
     
    642629        //port reset
    643630        if (usb_port_reset_completed(&status)) {
    644                 printf("[usb_hub] port reset complete\n");
     631                printf("[usb_hub] finalizing add device\n");
    645632                if (usb_port_enabled(&status)) {
    646633                        usb_hub_finalize_add_device(hub, hc, port, target);
     
    683670                        lst_item != &usb_hub_list;
    684671                        lst_item = lst_item->next) {
     672                printf("[usb_hub] checking hub changes\n");
    685673                usb_hub_info_t * hub_info = ((usb_hub_info_t*)lst_item->data);
    686674                /*
     
    691679                target.address = hub_info->usb_device->address;
    692680                target.endpoint = 1;/// \TODO get from endpoint descriptor
    693                 printf("[usb_hub] checking changes for hub at addr %d\n",
    694                     target.address);
     681                printf("checking changes for hub at addr %d \n",target.address);
    695682
    696683                size_t port_count = hub_info->port_count;
Note: See TracChangeset for help on using the changeset viewer.