2016-10-12 7 views
1

Если у меня есть AVCaptureDevice, как я могу получить связанный интерфейс USB, чтобы получить доступ к базовому оборудованию через IOKit?USB-интерфейс AVCaptureDevice

Я пробовал найти его через vid & pid, но это не сработает, если я подключу два устройства с тем же vid, pid. Вот код, я использую, чтобы извлечь VID и PID из AVCaptureDevice:

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithDeviceType:AVMediaTypeVideo]; 
NSString *modelID = [device modelID]; 

NSRange vidRange = [modelID rangeOfString:@"VendorID_"]; 
int vid = [[modelID substringWithRange:NSMakeRange(vidRange.location + 9, 5)] intValue]; 

NSRange pidRange = [modelID rangeOfString:@"ProductID_"]; 
int vid = [[modelID substringWithRange:NSMakeRange(pidRange.location + 10, 5)] intValue]; 

А потом искать соответствия IOService:

CFMutableDictionaryRef matchingDict = IOServiceMatching(kIOUSBDeviceClassName); 
CFNumberRef numberRef; 

numberRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &vid); 
CFDictionarySetValue(matchingDict, CFSTR(kUSBVendorID), numberRef); 
CFRelease(numberRef); 

numberRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &pid); 
CFDictionarySetValue(matchingDict, CFSTR(kUSBProductID), numberRef); 
CFRelease(numberRef); 

io_service_t camera = IOServiceGetMatchingService(kIOMasterPortDefault, matchingDict); 

ответ

1

Возможно сочетание AVCaptureDevicemodelID и uniqueID может помочь вам найти соответствие IOService. Форматирование двух идентификаторов выглядит как недокументированным, так и зависимым от транспорта и медиа-типа, но вы должны иметь возможность понять что-то. Вот предварительный отображение для USB аудио (потому что у меня нет каких-либо USB-камеры), на основе двух устройств:

modelID: USB Headphone Set:0C76:1607 
uniqueID: AppleUSBAudioEngine:Unknown Manufacturer:USB Headphone Set:14200000:2,1, 
    USB Headphone Set: 

    Product ID: 0x1607 
    Vendor ID: 0x0c76 (Solid State System Co., Ltd.) 
Version: 1.00 
Speed: Up to 12 Mb/sec 
    Location ID: 0x14200000/9 
    Current Available (mA): 1000 
    Current Required (mA): 100 
    Extra Operating Current (mA): 0 


uniqueID: AppleUSBAudioEngine:Burr-Brown from TI    :USB Audio CODEC :14200000:2, 
modelID: USB Audio CODEC :08BB:2902 
    USB Audio CODEC : 

    Product ID: 0x2902 
    Vendor ID: 0x08bb (Texas Instruments Japan) 
Version: 1.00 
Speed: Up to 12 Mb/sec 
Manufacturer: Burr-Brown from TI 
    Location ID: 0x14200000/10 
    Current Available (mA): 1000 
    Current Required (mA): 100 
    Extra Operating Current (mA): 0 

The (USB аудио) формата является то, что, как

modelID: name:vendorID:productID 
uniqueID: AppleUSBAudioEngine:Manufacturer or Unknown Manufacturer:location ID:??? 

If USB видео uniqueID аналогично, то комбинация productID, vendorID и locationID (USB-порт) должна быть достаточной, чтобы однозначно идентифицировать аппаратное обеспечение базового устройства, хотя и хрупким и недокументированным способом.

 Смежные вопросы

  • Нет связанных вопросов^_^