WebUSB API'den tam olarak yararlanmak için bir cihaz oluşturun.
Bu makalede, WebUSB API'den tam olarak yararlanmak için nasıl cihaz oluşturulacağı açıklanmaktadır. API'nin kendisi hakkında kısa bir tanıtım için Web'deki USB Cihazlara Erişim bölümünü inceleyin.
Arka plan
Evrensel Seri Yol (USB), çevre birimlerini masaüstü ve mobil bilgi işlem cihazlarına bağlamak için kullanılan en yaygın fiziksel arayüz haline gelmiştir. USB özellikleri, bir otobüsün elektriksel özelliklerini ve bir cihazla iletişim için genel bir modeli tanımlamanın yanı sıra bir dizi cihaz sınıfı spesifikasyonu da içerir. Bunlar, cihaz üreticilerinin uygulayabileceği depolama, ses, video, ağ iletişimi gibi belirli cihaz sınıflarına yönelik genel modellerdir. Bu cihaz sınıfı özelliklerinin avantajı, işletim sistemi tedarikçisinin sınıf spesifikasyonuna göre tek bir sürücü uygulayabilmesi ("sınıf sürücüsü") ve bu sınıfı uygulayan tüm cihazların desteklenmesidir. Bu, kendi cihaz sürücülerini yazması gereken her üreticiye göre büyük bir gelişmeydi.
Ancak bazı cihazlar bu standartlaştırılmış cihaz sınıflarından birine dahil değildir. Bunun yerine bir üretici, cihazını tedarikçiye özel sınıfı uyguluyor olarak etiketlemeyi tercih edebilir. Bu durumda işletim sistemi, tedarikçinin sürücü paketinde sağlanan bilgilere (genellikle tedarikçi firmaya özel belirli bir protokol uyguladığı bilinen bir dizi tedarikçi firma ve ürün kimliği) dayanarak hangi cihaz sürücüsünün yükleneceğini seçer.
USB'nin bir başka özelliği de bağlı oldukları ana makineye birden çok arayüz sunabilmesidir. Her arayüz standart bir sınıf uygulayabilir veya sağlayıcıya özel olabilir. Bir işletim sistemi cihazı işlemek için doğru sürücüleri seçtiğinde her bir arayüz farklı bir sürücü tarafından talep edilebilir. Örneğin, bir USB web kamerası genellikle biri USB video sınıfını uygulayan (kamera için) diğeri de USB ses sınıfını uygulayan (mikrofon için) iki arayüz sağlar. İşletim sistemi tek bir "web kamerası sürücüsü" yüklemez. Bunun yerine, cihazın farklı işlevlerinden sorumlu olan bağımsız video ve ses sınıfı sürücüleri yükler. Arayüz sınıflarının bu bileşimi daha fazla esneklik sağlar.
API temel bilgileri
Standart USB sınıflarının çoğuna karşılık gelen web API'leri vardır. Örneğin, bir sayfa getUserMedia()
kullanarak video sınıfı cihazından video yakalayabilir ya da KeyboardEvents veya PointerEvents dinleyerek ya da Gamepad veya WebHID API kullanarak insan arayüz (HID) sınıf cihazından giriş etkinlikleri alabilir.
Tüm cihazlarda standartlaştırılmış bir sınıf tanımı uygulanmadığı gibi tüm cihazlarda da mevcut web platformu API'lerine karşılık gelen özellikler uygulanmayabilir. Böyle bir durumda WebUSB API, sitelerin satıcıya özel bir arayüz talep etmesi ve doğrudan kendi sayfalarından bunun için destek uygulaması için bir yol sağlayarak bu boşluğu doldurabilir.
Bir cihazın WebUSB üzerinden erişilebilir olması için gerekli şartlar, işletim sistemlerinin USB cihazları yönetme biçimindeki farklılıklar nedeniyle platformdan platforma biraz farklılık gösterir. Ancak temel gereksinim, cihazda, sayfanın kontrol etmek istediği arayüzü talep eden bir sürücü bulunmamasıdır. Bu, işletim sistemi satıcısı tarafından sağlanan genel bir sınıf sürücüsü veya tedarikçi firma tarafından sağlanan bir cihaz sürücüsü olabilir. USB cihazları, her biri kendi sürücüsüne sahip olabilen birden çok arayüz sağlayabildiğinden, bazı arayüzleri bir sürücünün talep ettiği, diğerlerinin ise tarayıcı tarafından erişilebilir olduğu bir cihaz oluşturmak mümkündür.
Örneğin, ileri teknoloji bir USB klavye, işletim sisteminin giriş alt sistemi tarafından talep edilecek HID sınıfı bir arayüz ve bir yapılandırma aracı tarafından kullanılmak üzere WebUSB'de kalmaya devam eden satıcıya özel bir arayüz sağlayabilir. Bu araç üreticinin web sitesinde yayınlanabilir. Bu sayede kullanıcı, platforma özel herhangi bir yazılım yüklemeden cihazın makro tuşlar ve ışık efektleri gibi çalışma özelliklerini değiştirebilir. Böyle bir cihazın yapılandırma tanımlayıcısı aşağıdaki gibi görünür:
Değer | Alan | Açıklama |
---|---|---|
Yapılandırma açıklayıcısı | ||
0x09 |
bLength | Bu açıklayıcının boyutu |
0x02 |
bDescriptorType | Yapılandırma açıklayıcısı |
0x0039 |
wTotalLength | Bu tanımlayıcı dizisinin toplam uzunluğu |
0x02 |
bNumInterfaces | Arayüz sayısı |
0x01 |
bConfigurationValue | Yapılandırma 1 |
0x00 |
iConfiguration | Yapılandırma adı (yok) |
0b1010000 |
bmAttributes | Uzaktan uyandırma özelliğine sahip kendi kendine çalışan cihaz |
0x32 |
bMaxPower | Maksimum Güç, 2 mA'lık artışlarla ifade edilir |
Arayüz açıklayıcısı | ||
0x09 |
bLength | Bu açıklayıcının boyutu |
0x04 |
bDescriptorType | Arayüz açıklayıcısı |
0x00 |
bInterfaceNumber | Arayüz 0 |
0x00 |
bAlternateSetting | Alternatif ayar 0 (varsayılan) |
0x01 |
bNumEndpoints | 1 uç nokta |
0x03 |
bInterfaceClass | HID arayüz sınıfı |
0x01 |
bInterfaceSubClass | Önyükleme arayüzü alt sınıfı |
0x01 |
bInterfaceProtocol | Klavye |
0x00 |
iInterface | Arayüz adı (yok) |
HID açıklayıcı | ||
0x09 |
bLength | Bu açıklayıcının boyutu |
0x21 |
bDescriptorType | HID açıklayıcı |
0x0101 |
bcdHID | HID 1.1 sürümü |
0x00 |
bCountryCode | Donanım hedef ülkesi |
0x01 |
bNumDescriptors | Takip edilecek HID sınıfı açıklayıcı sayısı |
0x22 |
bDescriptorType | Rapor açıklayıcı türü |
0x003F |
wDescriptorLength | Rapor açıklayıcının toplam uzunluğu |
Uç nokta açıklayıcı | ||
0x07 |
bLength | Bu açıklayıcının boyutu |
0x05 |
bDescriptorType | Uç nokta açıklayıcı |
0b10000001 |
bEndpointAddress | Uç nokta 1 (Hindistan) |
0b00000011 |
bmAttributes | Kesinti |
0x0008 |
wMaxPacketSize | 8 baytlık paketler |
0x0A |
bInterval | 10 ms aralık |
Arayüz açıklayıcısı | ||
0x09 |
bLength | Bu açıklayıcının boyutu |
0x04 |
bDescriptorType | Arayüz açıklayıcısı |
0x01 |
bInterfaceNumber | Arayüz 1 |
0x00 |
bAlternateSetting | Alternatif ayar 0 (varsayılan) |
0x02 |
bNumEndpoints | 2 uç nokta |
0xFF |
bInterfaceClass | Tedarikçi firmaya özel arayüz sınıfı |
0x00 |
bInterfaceSubClass | |
0x00 |
bInterfaceProtocol | |
0x00 |
iInterface | Arayüz adı (yok) |
Uç nokta açıklayıcı | ||
0x07 |
bLength | Bu açıklayıcının boyutu |
0x05 |
bDescriptorType | Uç nokta açıklayıcı |
0b10000010 |
bEndpointAddress | Uç nokta 1 (Hindistan) |
0b00000010 |
bmAttributes | Toplu |
0x0040 |
wMaxPacketSize | 64 baytlık paketler |
0x00 |
bInterval | Toplu uç noktalar için kullanılamaz |
Uç nokta açıklayıcı | ||
0x07 |
bLength | Bu açıklayıcının boyutu |
0x05 |
bDescriptorType | Uç nokta açıklayıcı |
0b00000011 |
bEndpointAddress | Uç nokta 3 (OUT) |
0b00000010 |
bmAttributes | Toplu |
0x0040 |
wMaxPacketSize | 64 baytlık paketler |
0x00 |
bInterval | Toplu uç noktalar için kullanılamaz |
Yapılandırma açıklayıcısı, birleştirilen birden çok tanımlayıcıdan oluşur. Her biri, tanımlanabilmesi için bLength
ve bDescriptorType
alanlarıyla başlar. İlk arayüz, ilişkili bir HID tanımlayıcısına ve giriş etkinliklerini işletim sistemine yayınlamak için kullanılan tek bir uç noktaya sahip bir HID arayüzüdür. İkinci arayüz, cihaza komut göndermek ve buna karşılık yanıt almak için kullanılabilen iki uç noktaya sahip, tedarikçi firmaya özel bir arayüzdür.
WebUSB tanımlayıcıları
WebUSB, donanım yazılımı değişiklikleri olmadan birçok cihazla çalışabilse de, cihazın WebUSB desteğini belirten belirli tanımlayıcılarla işaretlenmesiyle ek işlevler etkinleştirilir. Örneğin, cihazınız takılı olduğunda tarayıcının kullanıcıyı yönlendirebileceği bir açılış sayfası URL'si belirtebilirsiniz.
İkili cihaz Nesne Deposu (BOS), USB 3.0'da kullanıma sunulan bir kavramdır ancak 2.1 sürümünün bir parçası olarak USB 2.0 cihazlara da geri getirilmiştir. WebUSB desteğinin bildirilmesi, BOS tanımlayıcısına aşağıdaki Platform Yeteneği Tanımlayıcısının eklenmesiyle başlar:
Değer | Alan | Açıklama |
---|---|---|
İkili cihaz Nesne Deposu tanımlayıcısı | ||
0x05 |
bLength | Bu açıklayıcının boyutu |
0x0F |
bDescriptorType | İkili cihaz Nesne Deposu tanımlayıcısı |
0x001D |
wTotalLength | Bu tanımlayıcı dizisinin toplam uzunluğu |
0x01 |
bNumDeviceCaps | BOS'teki cihaz özelliği tanımlayıcılarının sayısı |
WebUSB platform özelliği açıklayıcısı | ||
0x18 |
bLength | Bu açıklayıcının boyutu |
0x10 |
bDescriptorType | Cihaz özellikleri açıklayıcısı |
0x05 |
bDevCapabilityType | Platform özelliği açıklayıcısı |
0x00 |
bReserved | |
{0x38, 0xB6, 0x08, 0x34, 0xA9, 0x09, 0xA0, 0x47, 0x8B, 0xFD, 0xA0, 0x76, 0x88, 0x15, 0xB6, 0x65} |
PlatformCapablityUUID | Small-endian biçimindeki WebUSB platform özelliği açıklayıcısı GUID |
0x0100 |
bcdVersion | WebUSB açıklayıcı sürümü 1.0 |
0x01 |
bVendorCode | WebUSB için bRequest değeri |
0x01 |
iLandingPage | Açılış sayfası URL'si |
Platform özelliği UUID, bunu cihaz hakkında temel bilgiler sağlayan WebUSB Platform Özelliği açıklayıcısı olarak tanımlar. Tarayıcı, cihazla ilgili daha fazla bilgi getirebilmek için bVendorCode
değerini kullanarak cihaza ek istekler gönderir. Şu anda belirtilen tek istek, URL açıklayıcı döndüren GET_URL
isteğidir. Bunlar dize tanımlayıcılara benzer, ancak URL'leri en az bayt olarak kodlayacak şekilde tasarlanmıştır. "https://google.com"
için URL açıklayıcısı şöyle görünür:
Değer | Alan | Açıklama |
---|---|---|
URL açıklayıcısı | ||
0x0D |
bLength | Bu açıklayıcının boyutu |
0x03 |
bDescriptorType | URL açıklayıcısı |
0x01 |
bScheme | https:// |
"google.com" |
URL | UTF-8 kodlu URL içeriği |
Cihazınız ilk kez fişe takıldığında, tarayıcı şu standart GET_DESCRIPTOR
kontrol aktarımını yayınlayarak BOS açıklayıcısını okur:
bmRequestType | bRequest | wValue | wIndex | wLength | Veri (yanıt) |
---|---|---|---|---|---|
0b10000000 |
0x06 |
0x0F00 |
0x0000 |
* | BOS açıklayıcısı |
Bu istek genellikle iki kez yapılır. İlkinde ana makinenin büyük bir aktarım yapmadan wTotalLength
alanının değerini öğrenmesi için ilk kez yeterince büyük bir wLength
ile yapılır. Daha sonra da tam açıklayıcı uzunluğu bilindiğinde istek yapılır.
WebUSB Platform Capability açıklayıcısı, iLandingPage
alanı sıfır dışında bir değere ayarlanırsa tarayıcı, bRequest
öğesi platform özelliği tanımlayıcıdan bVendorCode
değerine ve wValue
değeri iLandingPage
değerine ayarlanmış şekilde bir kontrol aktarımı yayınlayarak WebUSB'ye özel bir GET_URL
isteği gerçekleştirir. GET_URL
(0x02
) için istek kodu wIndex
olur:
bmRequestType | bRequest | wValue | wIndex | wLength | Veri (yanıt) |
---|---|---|---|---|---|
0b11000000 |
0x01 |
0x0001 |
0x0002 |
* | URL açıklayıcısı |
Yine, ilk olarak okunan tanımlayıcının uzunluğunu kontrol etmek için bu istek iki kez gönderilebilir.
Platforma özgü konular
WebUSB API, USB cihazlarına erişmek için tutarlı bir arayüz sağlamaya çalışsa da geliştiriciler, cihazlara erişmek için web tarayıcısı gereksinimleri gibi uygulamalara uygulanan şartların farkında olmalıdırlar.
macOS
macOS için özel bir şey gerekmez. WebUSB kullanan bir web sitesi, cihaza bağlanabilir ve çekirdek sürücüsü veya başka bir uygulama tarafından talep edilmeyen arayüzler için hak talebinde bulunabilir.
Linux
Linux, macOS'e benzer. Ancak varsayılan olarak çoğu dağıtım, USB cihazlarını açma izniyle kullanıcı hesabı oluşturmaz. Udev adlı sistem arka plan programı, bir cihaza erişmesine izin verilen kullanıcı ve grubu atamaktan sorumludur. Bunun gibi bir kural, belirtilen tedarikçi firma ve ürün kimlikleri ile eşleşen bir cihazın sahipliğini, çevre birimlerine erişimi olan kullanıcılar için ortak bir grup olan plugdev
grubuna atar:
SUBSYSTEM=="usb", ATTR{idVendor}=="XXXX", ATTR{idProduct}=="XXXX", GROUP="plugdev"
XXXX
yerine cihazınızın onaltılı tedarikçi firma ve ürün kimliklerini yazın. Örneğin ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e11"
, bir Nexus One telefonla eşleşir. Bunlar, her zamanki "0x" ön eki olmadan yazılmalı ve doğru şekilde tanınması için hepsi küçük harfle yazılmalıdır. Cihazınızın kimliklerini bulmak için lsusb
komut satırı aracını çalıştırın.
Bu kural, /etc/udev/rules.d
dizinindeki bir dosyaya yerleştirilmelidir ve cihaz fişe takıldığında geçerli olur. Udev'i yeniden başlatmanıza
gerek yoktur.
Android
Android platformu Linux tabanlıdır ancak sistem yapılandırmasında herhangi bir değişiklik yapılması
gerekmez. Varsayılan olarak, işletim sisteminde yerleşik sürücü bulunmayan tüm cihazlar
tarayıcı tarafından kullanılabilir. Ancak geliştiriciler, kullanıcıların cihaza bağlanırken ek bir adımla karşılaşacaklarını bilmelidir. Kullanıcı requestDevice()
çağrısına yanıt olarak bir cihaz seçtiğinde Android, Chrome'un bu cihaza erişmesine izin verip vermeyeceğinizi soran bir istem görüntüler. Bu istem, bir kullanıcı cihaza bağlanma izni olan bir web sitesine geri döndüğünde ve web sitesi open()
'i çağırdığında da yeniden görünür.
Ayrıca, varsayılan olarak daha az sürücü dahil edildiğinden Android'de masaüstü Linux'tan daha fazla cihaza erişilebilir. Örneğin, Android SDK'da seri cihazlarla iletişim kurmak için bir API bulunmadığından, genellikle USB-seri adaptörler tarafından uygulanan USB CDC-ACM sınıfı dikkate değer bir eksikliktir.
ChromeOS
ChromeOS, Linux'a da dayanır ve sistem yapılandırmasında herhangi bir değişiklik gerektirmez. allow_broker hizmeti USB cihazlarına erişimi kontrol eder ve sahiplenilmemiş en az bir arayüz olduğu sürece tarayıcının bu cihazlara erişmesine izin verir.
Windows
Windows sürücü modelinde ek bir gereklilik bulunuyor. USB cihazı, kullanıcı uygulamasından açabilme olanağının üzerindeki platformlardan farklı olarak, sürücü yüklü olmasa bile varsayılan seçenek bu değildir. Bunun yerine, cihaza erişmek üzere kullanılan arayüz uygulamalarının sağlanması amacıyla, WinUSB adlı özel bir sürücünün yüklenmesi gerekir. Bu işlem, sistemde yüklü bir özel sürücü bilgileri dosyası (INF) ile veya numaralandırma sırasında Microsoft OS Uyumluluk Açıklayıcılarını sağlamak için cihazın donanım yazılımı değiştirilerek yapılabilir.
Sürücü Bilgileri Dosyası (INF)
Sürücü bilgi dosyası, Windows'a bir cihazla ilk kez karşılaştığında ne yapılacağını bildirir. Kullanıcının sistemi zaten WinUSB sürücüsünü içerdiğinden, INF dosyasının tedarikçi firmanızı ve ürün kimliğinizi bu yeni yükleme kuralıyla ilişkilendirmesi için tek gereken yeterlidir. Aşağıdaki dosya temel bir örnektir. .inf
uzantısına sahip bir dosyaya kaydedin, "X" ile işaretli bölümleri değiştirin, ardından sağ tıklayın ve içerik menüsünden "Yükle"yi seçin.
[Version]
Signature = "$Windows NT$"
Class = USBDevice
ClassGUID = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}
Provider = %ManufacturerName%
CatalogFile = WinUSBInstallation.cat
DriverVer = 09/04/2012,13.54.20.543
; ========== Manufacturer/Models sections ===========
[Manufacturer]
%ManufacturerName% = Standard,NTx86,NTia64,NTamd64
[Standard.NTx86]
%USB\MyCustomDevice.DeviceDesc% = USB_Install,USB\VID_XXXX&PID_XXXX
[Standard.NTia64]
%USB\MyCustomDevice.DeviceDesc% = USB_Install,USB\VID_XXXX&PID_XXXX
[Standard.NTamd64]
%USB\MyCustomDevice.DeviceDesc% = USB_Install,USB\VID_XXXX&PID_XXXX
; ========== Class definition ===========
[ClassInstall32]
AddReg = ClassInstall_AddReg
[ClassInstall_AddReg]
HKR,,,,%ClassName%
HKR,,NoInstallClass,,1
HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"
HKR,,LowerLogoVersion,,5.2
; =================== Installation ===================
[USB_Install]
Include = winusb.inf
Needs = WINUSB.NT
[USB_Install.Services]
Include = winusb.inf
Needs = WINUSB.NT.Services
[USB_Install.HW]
AddReg = Dev_AddReg
[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
; =================== Strings ===================
[Strings]
ManufacturerName = "Your Company Name Here"
ClassName = "Your Company Devices"
USB\MyCustomDevice.DeviceDesc = "Your Device Name Here"
[Dev_AddReg]
bölümü, cihazın DeviceInterfaceGUID grubunu yapılandırır. Bir uygulamanın Windows API aracılığıyla kendisini bulması ve ona bağlanması için her cihaz arayüzünün bir GUID'si olmalıdır. Rastgele bir GUID oluşturmak için New-Guid
PowerShell cmdlet'ini veya online bir aracı kullanın.
Geliştirme amacıyla Zadig aracı, USB arayüzü için yüklenen sürücünün WinUSB sürücüsüyle değiştirilmesini sağlayan kolay bir arayüz sağlar.
Microsoft OS uyumluluğu açıklayıcıları
Yukarıdaki INF dosya yaklaşımı her kullanıcının makinesinin önceden yapılandırılmasını gerektirdiği için kullanışsızdır. Windows 8.1 ve sonraki sürümler, özel USB tanımlayıcılarıyla alternatif bir çözüm sunar. Bu tanımlayıcılar, cihaz ilk kez takıldığında Windows işletim sistemine normalde INF dosyasına dahil edilecek bilgileri sağlar.
WebUSB açıklayıcılarını ayarladıktan sonra, Microsoft'un işletim sistemi uyumluluk tanımlayıcılarını da kolayca ekleyebilirsiniz. Öncelikle BOS açıklayıcısını bu ek platform özelliği açıklayıcıyla genişletin. wTotalLength
ve bNumDeviceCaps
öğelerini buna göre
güncellediğinizden emin olun.
Değer | Alan | Açıklama |
---|---|---|
Microsoft OS 2.0 platform özellikleri tanımlayıcısı | ||
0x1C |
bLength | Bu açıklayıcının boyutu |
0x10 |
bDescriptorType | Cihaz özellikleri açıklayıcısı |
0x05 |
bDevCapabilityType | Platform özelliği açıklayıcısı |
0x00 |
bReserved | |
{0xDF, 0x60, 0xDD, 0xD8, 0x89, 0x45, 0xC7, 0x4C, 0x9C, 0xD2, 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F} |
PlatformCapablityUUID | Microsoft OS 2.0 platform uyumluluğu açıklayıcısı GUID (küçük-endian biçiminde) |
0x06030000 |
dwWindowsVersion | Minimum uyumlu Windows sürümü (Windows 8.1) |
0x00B2 |
wMSOSDescriptorSetTotalLength | Açıklayıcı grubunun toplam uzunluğu |
0x02 |
bMS_VendorCode | bDaha fazla Microsoft açıklayıcısı almak için istek değeri |
0x00 |
bAltEnumCode | Cihaz, alternatif numaralandırmayı desteklemiyor |
WebUSB açıklayıcılarında olduğu gibi, bu tanımlayıcılarla ilgili kontrol aktarımlarında kullanılacak bir bRequest
değeri seçmeniz gerekir. Bu örnekte 0x02
değerini seçtim. wIndex
içine yerleştirilen 0x07
, cihazdan Microsoft OS 2.0 Açıklayıcı Grubu'nu alma komutudur.
bmRequestType | bRequest | wValue | wIndex | wLength | Veri (yanıt) |
---|---|---|---|---|---|
0b11000000 |
0x02 |
0x0000 |
0x0007 |
* | MS OS 2.0 Tanımlayıcı Grubu |
Bir USB cihazının birden çok işlevi olabilir. Bu nedenle, açıklayıcı grubunun ilk bölümünde, sonraki özelliklerin hangi işlevle ilişkili olduğu açıklanır. Aşağıdaki örnekte, birleşik bir cihazın 1. arayüzü yapılandırılır. Açıklayıcı, işletim sistemine bu arayüzle ilgili iki önemli bilgi verir. Uyumlu kimlik tanımlayıcısı, Windows'a bu cihazın WinUSB sürücüsüyle uyumlu olduğunu bildirir. Kayıt defteri özelliği açıklayıcısı, yukarıdaki INF örneğinin [Dev_AddReg]
bölümüne benzer şekilde çalışır ve bu işleve cihaz arayüzü GUID'si atayacak bir kayıt defteri özelliği ayarlar.
Değer | Alan | Açıklama |
---|---|---|
Microsoft OS 2.0 açıklayıcı kümesi başlığı | ||
0x000A |
wLength | Bu açıklayıcının boyutu |
0x0000 |
wDescriptorType | Açıklayıcı grubu üst bilgi açıklayıcı |
0x06030000 |
dwWindowsVersion | Minimum uyumlu Windows sürümü (Windows 8.1) |
0x00B2 |
wTotalLength | Açıklayıcı grubunun toplam uzunluğu |
Microsoft OS 2.0 yapılandırması alt kümesi başlığı | ||
0x0008 |
wLength | Bu açıklayıcının boyutu |
0x0001 |
wDescriptorType | Yapılandırma alt kümesi başlığı açıklaması |
0x00 |
bConfigurationValue | 1. yapılandırmaya uygulanır (normalde 1'den dizine eklenen yapılandırmalara rağmen 0'dan dizine eklenir) |
0x00 |
bReserved | 0 olarak ayarlanmalıdır |
0x00A8 |
wTotalLength | Bu başlık da dahil olmak üzere alt grubun toplam uzunluğu |
Microsoft OS 2.0 işlev alt kümesi başlığı | ||
0x0008 |
wLength | Bu açıklayıcının boyutu |
0x0002 |
wDescriptorType | İşlev alt kümesi başlığı açıklayıcısı |
0x01 |
bFirstInterface | İşlevin ilk arayüzü |
0x00 |
bReserved | 0 olarak ayarlanmalıdır |
0x00A0 |
wSubsetLength | Bu başlık da dahil olmak üzere alt grubun toplam uzunluğu |
Microsoft OS 2.0 uyumlu kimlik açıklayıcı | ||
0x0014 |
wLength | Bu açıklayıcının boyutu |
0x0003 |
wDescriptorType | Uyumlu kimlik açıklayıcı |
"WINUSB\0\0" |
CompatibileID | 8 bayta kadar dolgulu ASCII dizesi |
"\0\0\0\0\0\0\0\0" |
SubCompatibleID | 8 bayta kadar dolgulu ASCII dizesi |
Microsoft OS 2.0 kayıt defteri özelliği açıklayıcısı | ||
0x0084 |
wLength | Bu açıklayıcının boyutu |
0x0004 |
wDescriptorType | Kayıt defteri özelliği açıklayıcısı |
0x0007 |
wPropertyDataType | REG_MULTI_SZ |
0x002A |
wPropertyNameLength | Mülk adının uzunluğu |
"DeviceInterfaceGUIDs\0" |
PropertyName | UTF-16LE olarak kodlanmış boş sonlandırıcıya sahip mülk adı |
0x0050 |
wPropertyDataLength | Özellik değerinin uzunluğu |
"{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\0\0" |
PropertyData | GUID ve UTF-16LE olarak kodlanmış iki boş sonlandırıcı |
Windows, bu bilgi için cihazı yalnızca bir kez sorgular. Cihaz geçerli tanımlayıcılarla yanıt vermezse cihaz tekrar bağlandığında tekrar sorulmaz. Microsoft, bir cihazı numaralandırırken oluşturulan kayıt defteri girişlerini açıklayan bir USB Cihaz Kaydı Girişleri listesini sağlamıştır. Test sırasında bir cihaz için oluşturulan girişleri silin. Böylece Windows, tanımlayıcıları tekrar okumayı dener.
Daha fazla bilgi için Microsoft'un bu tanımlayıcıların nasıl kullanılacağıyla ilgili blog yayınına göz atın.
Örnekler
Hem WebUSB tanımlayıcıları hem de Microsoft OS tanımlayıcıları içeren WebUSB uyumlu cihazları uygulayan örnek kodlar şu projelerde bulunabilir: