VirtualBox

Ignore:
Timestamp:
Mar 19, 2016 10:22:46 AM (9 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
106110
Message:

Main/USBProxyService: Save any additional USB device sources in the global configuration and load them during startup

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-server/generic/USBProxyBackendUsbIp.cpp

    r60089 r60107  
    286286    USBProxyBackend::init(aUsbProxyService, strId, strAddress);
    287287
     288    unconst(m_strBackend) = Utf8Str("USBIP");
     289
    288290    m = new Data;
    289291
     
    327329                    int rc2 = RTPollSetDestroy(m->hPollSet);
    328330                    AssertRC(rc2);
     331                    m->hPollSet = NIL_RTPOLLSET;
    329332                }
    330333            }
     
    336339                rc2 = RTPipeClose(m->hWakeupPipeW);
    337340                AssertRC(rc2);
     341                m->hWakeupPipeR = m->hWakeupPipeW = NIL_RTPIPE;
    338342            }
    339343        }
    340344        if (RT_FAILURE(rc))
     345        {
    341346            RTSemFastMutexDestroy(m->hMtxDevices);
     347            m->hMtxDevices = NIL_RTSEMFASTMUTEX;
     348        }
    342349    }
    343350
     
    888895    /* Make sure the Bus id is 0 terminated. */
    889896    pDev->szBusId[31] = '\0';
    890     RTStrAPrintf((char **)&pNew->pszAddress, "usbip://%s:%u:%s", m->pszHost, m->uPort, &pDev->szBusId[0]);
    891 
    892     pNew->idVendor           = pDev->u16VendorId;
    893     pNew->idProduct          = pDev->u16ProductId;
    894     pNew->bcdDevice          = pDev->u16BcdDevice;
    895     pNew->bDeviceClass       = pDev->bDeviceClass;
    896     pNew->bDeviceSubClass    = pDev->bDeviceSubClass;
    897     pNew->bDeviceProtocol    = pDev->bDeviceProtocol;
    898     pNew->bNumConfigurations = pDev->bNumConfigurations;
    899     pNew->enmState           = USBDEVICESTATE_USED_BY_HOST_CAPTURABLE;
    900     pNew->u64SerialHash      = 0;
    901     pNew->bBus               = (uint8_t)pDev->u32BusNum;
    902     pNew->bPort              = (uint8_t)pDev->u32DevNum;
    903 
    904     switch (pDev->u32Speed)
    905     {
    906         case USBIP_SPEED_LOW:
    907             pNew->enmSpeed = USBDEVICESPEED_LOW;
    908             pNew->bcdUSB = 1 << 8;
    909             break;
    910         case USBIP_SPEED_FULL:
    911             pNew->enmSpeed = USBDEVICESPEED_FULL;
    912             pNew->bcdUSB = 1 << 8;
    913             break;
    914         case USBIP_SPEED_HIGH:
    915             pNew->enmSpeed = USBDEVICESPEED_HIGH;
    916             pNew->bcdUSB = 2 << 8;
    917             break;
    918         case USBIP_SPEED_WIRELESS:
    919             pNew->enmSpeed = USBDEVICESPEED_VARIABLE;
    920             pNew->bcdUSB = 1 << 8;
    921             break;
    922         case USBIP_SPEED_SUPER:
    923             pNew->enmSpeed = USBDEVICESPEED_SUPER;
    924             pNew->bcdUSB = 3 << 8;
    925             break;
    926         case USBIP_SPEED_UNKNOWN:
    927         default:
    928             pNew->bcdUSB = 1 << 8;
    929             pNew->enmSpeed = USBDEVICESPEED_UNKNOWN;
    930     }
    931 
    932     /* link it */
    933     pNew->pNext = NULL;
    934     pNew->pPrev = *m->ppNext;
    935     *m->ppNext = pNew;
    936     m->ppNext = &pNew->pNext;
    937     m->cDevicesCur++;
    938 
    939     return VINF_SUCCESS;
     897    int rc = RTStrAPrintf((char **)&pNew->pszAddress, "usbip://%s:%u:%s", m->pszHost, m->uPort, &pDev->szBusId[0]);
     898    if (RT_SUCCESS(rc))
     899    {
     900        pNew->idVendor           = pDev->u16VendorId;
     901        pNew->idProduct          = pDev->u16ProductId;
     902        pNew->bcdDevice          = pDev->u16BcdDevice;
     903        pNew->bDeviceClass       = pDev->bDeviceClass;
     904        pNew->bDeviceSubClass    = pDev->bDeviceSubClass;
     905        pNew->bDeviceProtocol    = pDev->bDeviceProtocol;
     906        pNew->bNumConfigurations = pDev->bNumConfigurations;
     907        pNew->enmState           = USBDEVICESTATE_USED_BY_HOST_CAPTURABLE;
     908        pNew->u64SerialHash      = 0;
     909        pNew->bBus               = (uint8_t)pDev->u32BusNum;
     910        pNew->bPort              = (uint8_t)pDev->u32DevNum;
     911
     912        switch (pDev->u32Speed)
     913        {
     914            case USBIP_SPEED_LOW:
     915                pNew->enmSpeed = USBDEVICESPEED_LOW;
     916                pNew->bcdUSB = 1 << 8;
     917                break;
     918            case USBIP_SPEED_FULL:
     919                pNew->enmSpeed = USBDEVICESPEED_FULL;
     920                pNew->bcdUSB = 1 << 8;
     921                break;
     922            case USBIP_SPEED_HIGH:
     923                pNew->enmSpeed = USBDEVICESPEED_HIGH;
     924                pNew->bcdUSB = 2 << 8;
     925                break;
     926            case USBIP_SPEED_WIRELESS:
     927                pNew->enmSpeed = USBDEVICESPEED_VARIABLE;
     928                pNew->bcdUSB = 1 << 8;
     929                break;
     930            case USBIP_SPEED_SUPER:
     931                pNew->enmSpeed = USBDEVICESPEED_SUPER;
     932                pNew->bcdUSB = 3 << 8;
     933                break;
     934            case USBIP_SPEED_UNKNOWN:
     935            default:
     936                pNew->bcdUSB = 1 << 8;
     937                pNew->enmSpeed = USBDEVICESPEED_UNKNOWN;
     938        }
     939
     940        /* link it */
     941        pNew->pNext = NULL;
     942        pNew->pPrev = *m->ppNext;
     943        *m->ppNext = pNew;
     944        m->ppNext = &pNew->pNext;
     945        m->cDevicesCur++;
     946    }
     947
     948    if (RT_FAILURE(rc))
     949    {
     950        if (pNew->pszManufacturer)
     951            RTStrFree((char *)pNew->pszManufacturer);
     952        if (pNew->pszProduct)
     953            RTStrFree((char *)pNew->pszProduct);
     954        if (pNew->pszBackend)
     955            RTStrFree((char *)pNew->pszBackend);
     956        if (pNew->pszAddress)
     957            RTStrFree((char *)pNew->pszAddress);
     958        RTMemFree(pNew);
     959    }
     960
     961    return rc;
    940962}
    941963
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette