Changeset 25432
- Timestamp:
- 05/10/08 16:09:44 (6 days ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
haiku/trunk/src/add-ons/kernel/bus_managers/usb/Device.cpp
r24804 r25432 371 371 372 372 // Initialize all the endpoints that are now active 373 InitEndpoints( );373 InitEndpoints(-1); 374 374 375 375 // Wait some for the configuration being finished … … 381 381 382 382 void 383 Device::InitEndpoints( )383 Device::InitEndpoints(int32 interfaceIndex) 384 384 { 385 385 int8 hubAddress = 0; … … 388 388 389 389 for (size_t j = 0; j < fCurrentConfiguration->interface_count; j++) { 390 if (interfaceIndex >= 0 && j != (size_t)interfaceIndex) 391 continue; 392 390 393 usb_interface_info *interfaceInfo = fCurrentConfiguration->interface[j].active; 391 394 for (size_t i = 0; i < interfaceInfo->endpoint_count; i++) { … … 424 427 } 425 428 } 429 426 430 427 431 status_t … … 451 455 if (!fCurrentConfiguration) 452 456 return B_OK; 453 ClearEndpoints(); 454 457 458 ClearEndpoints(-1); 455 459 fCurrentConfiguration = NULL; 456 460 return B_OK; … … 459 463 460 464 void 461 Device::ClearEndpoints( )465 Device::ClearEndpoints(int32 interfaceIndex) 462 466 { 463 467 for (size_t j = 0; j < fCurrentConfiguration->interface_count; j++) { 468 if (interfaceIndex >= 0 && j != (size_t)interfaceIndex) 469 continue; 470 464 471 usb_interface_info *interfaceInfo = fCurrentConfiguration->interface[j].active; 465 472 for (size_t i = 0; i < interfaceInfo->endpoint_count; i++) { … … 475 482 Device::SetAltInterface(const usb_interface_info *interface) 476 483 { 484 uint8 interfaceNumber = interface->descr->interface_number; 477 485 // Tell the device to set the alternate settings 478 486 status_t result = fDefaultPipe->SendRequest( … … 480 488 USB_REQUEST_SET_INTERFACE, // request 481 489 interface->descr->alternate_setting, // value 482 interface ->descr->interface_number,// index490 interfaceNumber, // index 483 491 0, // length 484 492 NULL, // buffer … … 489 497 return result; 490 498 491 // Update descriptor 499 // Clear the no longer active endpoints 500 ClearEndpoints(interfaceNumber); 501 502 // Update the active pointer of the interface list 492 503 usb_interface_list *interfaceList 493 = &fCurrentConfiguration->interface[interface ->descr->interface_number];504 = &fCurrentConfiguration->interface[interfaceNumber]; 494 505 interfaceList->active 495 506 = &interfaceList->alt[interface->descr->alternate_setting]; 496 507 497 ClearEndpoints(); 498 InitEndpoints(); 499 508 // Initialize the new endpoints 509 InitEndpoints(interfaceNumber); 500 510 return result; 501 511 } haiku/trunk/src/add-ons/kernel/bus_managers/usb/usb_p.h
r24894 r25432 444 444 status_t SetAltInterface(const usb_interface_info *interface); 445 445 446 void InitEndpoints( );447 void ClearEndpoints( );446 void InitEndpoints(int32 interfaceIndex); 447 void ClearEndpoints(int32 interfaceIndex); 448 448 449 449 virtual status_t ReportDevice(
