Changeset 94368 in vbox
- Timestamp:
- Mar 25, 2022 7:26:37 AM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 150674
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vrdpusb.h
r94342 r94368 90 90 typedef struct REMOTEUSBIF 91 91 { 92 /** Op qaue user data to pass as the first parameter to the callbacks. */92 /** Opaque user data to pass as the first parameter to the callbacks. */ 93 93 void *pvUser; 94 94 … … 109 109 #define REMOTEUSBIF_OID "87012f58-2ad6-4f89-b7b1-92f72c7ea8cc" 110 110 111 112 typedef struct EMULATEDUSBIF 113 { 114 /** Opaque user data to pass as the first parameter to the callbacks. */ 115 void *pvUser; 116 117 DECLCALLBACKMEMBER(int, pfnQueryEmulatedUsbDataById, (void *pvUser, const char *pszId, void **ppvEmUsbCb, void **ppvEmUsbCbData, void **ppvObject)); 118 } EMULATEDUSBIF; 119 typedef EMULATEDUSBIF *PEMULATEDUSBIF; 120 121 #define EMULATEDUSBIF_OID "b7b4e194-ada0-4722-8e4e-1700ed9064f3" 122 111 123 /** @} */ 112 124 -
trunk/src/VBox/Main/include/EmulatedUSBImpl.h
r93115 r94368 24 24 #include "EmulatedUSBWrap.h" 25 25 26 #include <VBox/vrdpusb.h> 27 26 28 class Console; 27 29 class EUSBWEBCAM; … … 47 49 const void *pvData, uint32_t cbData); 48 50 51 PEMULATEDUSBIF i_getEmulatedUsbIf(); 52 49 53 HRESULT i_webcamAttachInternal(const com::Utf8Str &aPath, 50 54 const com::Utf8Str &aSettings, … … 57 61 static DECLCALLBACK(int) eusbCallbackEMT(EmulatedUSB *pThis, char *pszId, uint32_t iEvent, 58 62 void *pvData, uint32_t cbData); 63 64 static DECLCALLBACK(int) i_QueryEmulatedUsbDataById(void *pvUser, const char *pszId, void **ppvEmUsbCb, void **ppvEmUsbCbData, void **ppvObject); 59 65 60 66 HRESULT webcamPathFromId(com::Utf8Str *pPath, const char *pszId); … … 80 86 81 87 Data m; 88 EMULATEDUSBIF mEmUsbIf; 82 89 }; 83 90 -
trunk/src/VBox/Main/src-client/ConsoleImpl.cpp
r94342 r94368 10983 10983 return &pConsole->mRemoteUsbIf; 10984 10984 10985 if (UuidCopy == EMULATEDUSBIF_OID) 10986 return pConsole->mEmulatedUSB->i_getEmulatedUsbIf(); 10987 10985 10988 return NULL; 10986 10989 } -
trunk/src/VBox/Main/src-client/EmulatedUSBImpl.cpp
r93444 r94368 101 101 bool HasId(const char *pszId) { return RTStrCmp(pszId, mszUuid) == 0;} 102 102 103 void *getObjectPtr() { return mpvObject; } 104 103 105 EUSBDEVICESTATUS enmStatus; 104 106 }; … … 145 147 rc = pVMM->pfnCFGMR3InsertString(pEUSB, "Id", pThis->mszUuid); 146 148 AssertRCReturn(rc, rc); 147 /** @todo BUGBUG: No pointers via CFGM in 7.0! */148 rc = pVMM->pfnCFGMR3InsertInteger(pEUSB, "pfnCallback", (uintptr_t)EmulatedUSB::i_eusbCallback);149 AssertRCReturn(rc, rc);150 rc = pVMM->pfnCFGMR3InsertInteger(pEUSB, "pvCallback", (uintptr_t)pThis->mpEmulatedUSB);151 AssertRCReturn(rc, rc);152 149 153 150 PCFGMNODE pLunL0; … … 160 157 rc = pVMM->pfnCFGMR3InsertString(pConfig, "DevicePath", pThis->mPath.c_str()); 161 158 AssertRCReturn(rc, rc); 162 /** @todo BUGBUG: No pointers via CFGM in 7.0! */ 163 rc = pVMM->pfnCFGMR3InsertInteger(pConfig, "Object", (uintptr_t)pThis->mpvObject); 159 rc = pVMM->pfnCFGMR3InsertString(pConfig, "Id", pThis->mszUuid); 164 160 AssertRCReturn(rc, rc); 165 161 rc = emulatedWebcamInsertSettings(pConfig, pVMM, &pThis->mDrvSettings); … … 337 333 m.pConsole = pConsole; 338 334 335 mEmUsbIf.pvUser = this; 336 mEmUsbIf.pfnQueryEmulatedUsbDataById = EmulatedUSB::i_QueryEmulatedUsbDataById; 337 339 338 /* Confirm a successful initialization */ 340 339 autoInitSpan.setSucceeded(); … … 400 399 401 400 return hrc; 401 } 402 403 PEMULATEDUSBIF EmulatedUSB::i_getEmulatedUsbIf() 404 { 405 return &mEmUsbIf; 402 406 } 403 407 … … 603 607 } 604 608 609 /*static*/ 610 DECLCALLBACK(int) EmulatedUSB::i_QueryEmulatedUsbDataById(void *pvUser, const char *pszId, void **ppvEmUsbCb, void **ppvEmUsbCbData, void **ppvObject) 611 { 612 EmulatedUSB *pEmUsb = (EmulatedUSB *)pvUser; 613 614 AutoReadLock alock(pEmUsb COMMA_LOCKVAL_SRC_POS); 615 WebcamsMap::const_iterator it; 616 for (it = pEmUsb->m.webcams.begin(); it != pEmUsb->m.webcams.end(); ++it) 617 { 618 EUSBWEBCAM *p = it->second; 619 if (p->HasId(pszId)) 620 { 621 if (ppvEmUsbCb) 622 *ppvEmUsbCb = (void *)EmulatedUSB::i_eusbCallback; 623 if (ppvEmUsbCbData) 624 *ppvEmUsbCbData = pEmUsb; 625 if (ppvObject) 626 *ppvObject = p->getObjectPtr(); 627 628 return VINF_SUCCESS; 629 } 630 } 631 632 return VERR_NOT_FOUND; 633 } 634 605 635 HRESULT EmulatedUSB::webcamPathFromId(com::Utf8Str *pPath, const char *pszId) 606 636 { -
trunk/src/VBox/Main/src-client/UsbWebcamInterface.cpp
r93444 r94368 404 404 } 405 405 406 void *pv = NULL; 407 int rc = pDrvIns->pHlpR3->pfnCFGMQueryPtr(pCfg, "Object", &pv); 408 if (!RT_VALID_PTR(pv)) 409 rc = VERR_INVALID_PARAMETER; 410 AssertMsgRCReturn(rc, ("Configuration error: No/bad \"Object\" %p value! rc=%Rrc\n", pv, rc), rc); 406 char *pszId = NULL; 407 int rc = pDrvIns->pHlpR3->pfnCFGMQueryStringAlloc(pCfg, "Id", &pszId); 408 if (RT_SUCCESS(rc)) 409 { 410 RTUUID UuidEmulatedUsbIf; 411 rc = RTUuidFromStr(&UuidEmulatedUsbIf, EMULATEDUSBIF_OID); AssertRC(rc); 412 413 PEMULATEDUSBIF pEmulatedUsbIf = (PEMULATEDUSBIF)PDMDrvHlpQueryGenericUserObject(pDrvIns, &UuidEmulatedUsbIf); 414 AssertPtrReturn(pEmulatedUsbIf, VERR_INVALID_PARAMETER); 415 416 rc = pEmulatedUsbIf->pfnQueryEmulatedUsbDataById(pEmulatedUsbIf->pvUser, pszId, 417 NULL /*ppvEmUsbCb*/, NULL /*ppvEmUsbCbData*/, (void **)&pThis->pRemote); 418 pDrvIns->pHlpR3->pfnMMHeapFree(pDrvIns, pszId); 419 AssertRCReturn(rc, rc); 420 } 421 else 422 return rc; 411 423 412 424 /* Everything ok. Initialize. */ 413 pThis->pRemote = (EMWEBCAMREMOTE *)pv;414 425 pThis->pRemote->pEmWebcam->EmWebcamConstruct(pThis); 415 426
Note:
See TracChangeset
for help on using the changeset viewer.