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 Cihazlarına Erişme bölümüne bakın.
Arka plan
Universal Serial Bus (USB), çevre birimlerini masaüstü ve mobil bilgisayar cihazlarına bağlamak için en yaygın fiziksel arayüz haline geldi. USB spesifikasyonları, veri yolunun elektriksel özelliklerini ve bir cihazla iletişim kurmak için genel bir modeli tanımlamanın yanı sıra bir dizi cihaz sınıfı spesifikasyonu içerir. Bunlar, cihaz üreticilerinin uygulayabileceği depolama, ses, video, ağ vb. belirli cihaz sınıfları için genel modellerdir. Bu cihaz sınıfı özelliklerinin avantajı, işletim sistemi tedarikçisinin sınıf spesifikasyonuna dayalı tek bir sürücü ("sınıf sürücüsü") uygulayabilmesi ve bu sınıfı uygulayan tüm cihazların desteklenmesidir. Bu, her üreticinin kendi cihaz sürücülerini yazması gerekmesine kıyasla büyük bir gelişmeydi.
Ancak bazı cihazlar bu standartlaştırılmış cihaz sınıflarından birine uymaz. Bunun yerine üretici, cihazını tedarikçiye özel sınıfı uygulayan olarak etiketleyebilir. Bu durumda işletim sistemi, tedarikçi firmanın sürücü paketinde sağlanan bilgilere göre hangi cihaz sürücüsünün yükleneceğini seçer. Bu bilgiler genellikle, belirli bir tedarikçiye özgü protokolü uyguladığı bilinen bir dizi tedarikçi firma ve ürün kimliğidir.
USB'nin bir diğer özelliği de cihazların bağlı oldukları ana makineye birden fazla arayüz sağlayabilmesidir. Her arayüz ya standartlaştırılmış bir sınıf uygulayabilir veya satıcıya özgü olabilir. Bir işletim sistemi, cihazı yönetmek için doğru sürücüleri seçtiğinde her arayüz için farklı bir sürücü hak talebinde bulunabilir. Örneğin, bir USB web kamerası genellikle biri USB video sınıfını (kamera için) diğeri USB ses sınıfını (mikrofon için) uygulayan 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ülerini 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ğu, ilgili web API'lerine sahiptir. Örneğin, bir sayfa getUserMedia()
kullanarak video sınıfı bir cihazdan video yakalayabilir veya KeyboardEvents ya da PointerEvents'i dinleyerek ya da Gamepad'i ya da WebHID API'yi kullanarak insan arayüzü (HID) sınıfı bir cihazdan giriş etkinlikleri alabilir.
Tüm cihazlar standartlaştırılmış bir sınıf tanımı uygulamadığı gibi, tüm cihazlar mevcut web platformu API'lerine karşılık gelen özellikleri de uygulamaz. Bu durumda WebUSB API, sitelerin tedarikçiye özel bir arayüz için hak talebinde bulunmasına ve doğrudan kendi sayfalarından bu arayüz için destek uygulamasına olanak tanıyarak bu boşluğu doldurabilir.
Bir cihazın WebUSB üzerinden erişilebilir olması için gereken belirli koşullar, işletim sistemlerinin USB cihazları yönetme biçimindeki farklılıklar nedeniyle platformdan platforma biraz farklılık gösterir. Ancak temel koşul, cihazda sayfanın kontrol etmek istediği arayüzü talep eden bir sürücü olmamasıdır. Bu, işletim sistemi tedarikçisi tarafından sağlanan genel bir sınıf sürücüsü veya tedarikçinin sağladığı bir cihaz sürücüsü olabilir. USB cihazlar, her biri kendi sürücüsüne sahip olabilecek birden fazla arayüz sağlayabileceğinden, bazı arayüzlerin bir sürücü tarafından talep edildiği ve diğerlerinin tarayıcıya erişilebilir bırakıldığı bir cihaz oluşturmak mümkündür.
Örneğin, üst düzey bir USB klavye, işletim sisteminin giriş alt sistemi tarafından talep edilecek bir HID sınıfı arayüzü ve bir yapılandırma aracı tarafından kullanılması için WebUSB'nin kullanabileceği tedarikçiye özel bir arayüz sağlayabilir. Bu araç, üreticinin web sitesinde sunulabilir. Böylece kullanıcı, platforma özgü bir yazılım yüklemeden cihazın davranışıyla ilgili makro tuşlar ve ışık efektleri gibi özellikleri değiştirebilir. Bu tür 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 tanımlayıcısı | ||
0x09 |
bLength | Bu tanımlayı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 | 1. yapılandırma |
0x00 |
iConfiguration | Yapılandırma adı (yok) |
0b1010000 |
bmAttributes | Uzaktan uyandırma özelliğine sahip kendinden güç alan cihaz |
0x32 |
bMaxPower | Maksimum Güç, 2 mA'lık artışlarla ifade edilir. |
Arayüz tanımlayıcısı | ||
0x09 |
bLength | Bu tanımlayıcının boyutu |
0x04 |
bDescriptorType | Arayüz tanımlayı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 tanımlayıcısı | ||
0x09 |
bLength | Bu tanımlayıcının boyutu |
0x21 |
bDescriptorType | HID tanımlayıcısı |
0x0101 |
bcdHID | HID 1.1 sürümü |
0x00 |
bCountryCode | Donanım hedef ülkesi |
0x01 |
bNumDescriptors | Takip edilecek HID sınıf tanımlayıcılarının sayısı |
0x22 |
bDescriptorType | Rapor açıklayıcı türü |
0x003F |
wDescriptorLength | Rapor açıklayıcının toplam uzunluğu |
Uç nokta tanımlayıcısı | ||
0x07 |
bLength | Bu tanımlayıcının boyutu |
0x05 |
bDescriptorType | Uç nokta tanımlayıcısı |
0b10000001 |
bEndpointAddress | 1. uç nokta (IN) |
0b00000011 |
bmAttributes | Kesme |
0x0008 |
wMaxPacketSize | 8 baytlık paketler |
0x0A |
bInterval | 10 ms aralık |
Arayüz tanımlayıcısı | ||
0x09 |
bLength | Bu tanımlayıcının boyutu |
0x04 |
bDescriptorType | Arayüz tanımlayıcısı |
0x01 |
bInterfaceNumber | Arayüz 1 |
0x00 |
bAlternateSetting | Alternatif ayar 0 (varsayılan) |
0x02 |
bNumEndpoints | 2 uç nokta |
0xFF |
bInterfaceClass | Tedarikçi firmaya özgü arayüz sınıfı |
0x00 |
bInterfaceSubClass | |
0x00 |
bInterfaceProtocol | |
0x00 |
iInterface | Arayüz adı (yok) |
Uç nokta tanımlayıcısı | ||
0x07 |
bLength | Bu tanımlayıcının boyutu |
0x05 |
bDescriptorType | Uç nokta tanımlayıcısı |
0b10000010 |
bEndpointAddress | 1. uç nokta (IN) |
0b00000010 |
bmAttributes | Toplu |
0x0040 |
wMaxPacketSize | 64 baytlık paketler |
0x00 |
bInterval | Toplu uç noktalar için geçerli değildir |
Uç nokta tanımlayıcısı | ||
0x07 |
bLength | Bu tanımlayıcının boyutu |
0x05 |
bDescriptorType | Uç nokta tanımlayıcısı |
0b00000011 |
bEndpointAddress | Uç Nokta 3 (ÇIKIŞ) |
0b00000010 |
bmAttributes | Toplu |
0x0040 |
wMaxPacketSize | 64 baytlık paketler |
0x00 |
bInterval | Toplu uç noktalar için kullanılamaz |
Yapılandırma tanımlayıcısı, birbirine bağlanmış birden fazla tanımlayıcıdan oluşur. Her biri, tanımlanabilmeleri için bLength
ve bDescriptorType
alanlarıyla başlar. İlk arayüz, ilişkili bir HID tanımlayıcısı ve işletim sistemine giriş etkinlikleri 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 yanıt almak için kullanılabilecek 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ışabilir. Ancak cihaz, WebUSB desteğini belirten belirli tanımlayıcılarla işaretlenerek ek işlevler etkinleştirilir. Örneğin, cihazınız güç kaynağına takılıyken 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'ta kullanıma sunulan ancak 2.1 sürümü kapsamında USB 2.0 cihazlara da geriye dönük olarak uygulanan bir kavramdır. WebUSB desteğini beyan etmek, BOS tanımlayıcısı içine aşağıdaki Platform Yeteneği Tanımlayıcısını eklemekle başlar:
Değer | Alan | Açıklama |
---|---|---|
İkili cihaz nesne deposu tanımlayıcısı | ||
0x05 |
bLength | Bu tanımlayı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'deki cihaz özelliği tanımlayıcılarının sayısı |
WebUSB platform özelliği tanımlayıcısı | ||
0x18 |
bLength | Bu tanımlayıcının boyutu |
0x10 |
bDescriptorType | Cihaz özellikleri tanımlayıcısı |
0x05 |
bDevCapabilityType | Platform özelliği tanımlayıcısı |
0x00 |
bReserved | |
{0x38, 0xB6, 0x08, 0x34, 0xA9, 0x09, 0xA0, 0x47, 0x8B, 0xFD, 0xA0, 0x76, 0x88, 0x15, 0xB6, 0x65} |
PlatformCapablityUUID | Küçük Endian biçiminde WebUSB platform özelliği tanımlayıcı GUID'si |
0x0100 |
bcdVersion | WebUSB tanımlayı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'si, bunu cihazla ilgili temel bilgiler sağlayan bir WebUSB Platform Özelliği tanımlayıcısı olarak tanımlar. Tarayıcı, cihazla ilgili daha fazla bilgi almak için cihaza ek istekler göndermek üzere bVendorCode
değerini kullanır. Şu anda belirtilen tek istek, URL tanımlayıcısı döndüren GET_URL
isteğidir. Bunlar dize tanımlayıcılarına benzer ancak URL'leri en az baytla kodlayacak şekilde tasarlanmıştır. "https://google.com"
için bir URL tanımlayıcısı şöyle görünür:
Değer | Alan | Açıklama |
---|---|---|
URL tanımlayıcısı | ||
0x0D |
bLength | Bu tanımlayıcının boyutu |
0x03 |
bDescriptorType | URL açıklayıcı |
0x01 |
bScheme | https:// |
"google.com" |
URL | UTF-8 kodlamalı URL içeriği |
Cihazınız ilk kez prize takıldığında tarayıcı, bu standart GET_DESCRIPTOR
kontrol aktarımını yayınlayarak BOS tanımlayıcısını okur:
bmRequestType | bRequest | wValue | wIndex | wLength | Veri (yanıt) |
---|---|---|---|---|---|
0b10000000 |
0x06 |
0x0F00 |
0x0000 |
* | BOS tanımlayıcısı |
Bu istek genellikle iki kez, ilkinde yeterince büyük bir wLength
ile yapılır. Böylece ana makine, büyük bir aktarım yapmadan wTotalLength
alanının değerini bulur ve daha sonra, tam tanımlayıcı uzunluğu bilindiğinde tekrar işlev görür.
WebUSB Platform Yeteneği tanımlayıcısında iLandingPage
alanı sıfır dışında bir değere ayarlanmışsa tarayıcı, platform özelliği tanımlayıcısında bVendorCode
değerine ayarlanmış ve wValue
iLandingPage
değerine ayarlanmış bir bRequest
ile kontrol aktarımı göndererek WebUSB'ye özel bir GET_URL
isteği gerçekleştirir. GET_URL
(0x02
) için istek kodu wIndex
alanına girilir:
bmRequestType | bRequest | wValue | wIndex | wLength | Veri (yanıt) |
---|---|---|---|---|---|
0b11000000 |
0x01 |
0x0001 |
0x0002 |
* | URL tanımlayıcısı |
Yine de bu istek, önce okunan tanımlayıcı uzunluğunu incelemek için iki kez gönderilebilir.
Platforma özgü dikkat edilmesi gereken noktalar
WebUSB API, USB cihazlara erişmek için tutarlı bir arayüz sunmaya çalışırken geliştiricilerin, cihazlara erişmek için web tarayıcıları gibi uygulamalara uygulanan şartlardan haberdar olması gerekir.
macOS
macOS için özel bir şey gerekmez. WebUSB kullanan bir web sitesi, cihaza bağlanabilir ve bir çekirdek sürücüsü veya başka bir uygulama tarafından hak talebinde bulunulmayan tüm arayüzler için hak talebinde bulunabilir.
Linux
Linux, macOS'e benzer ancak çoğu dağıtım, varsayılan olarak kullanıcı hesaplarını USB cihazlarını açma izniyle oluşturmaz. Bir cihaza erişmesine izin verilen kullanıcıyı ve grubu atamaktan udev adlı bir sistem hizmet programı sorumludur. Bu tür bir kural, belirli tedarikçi ve ürün kimlikleriyle 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
değerini, cihazınızın onaltılık tedarikçi ve ürün kimlikleriyle değiştirin. Örneğin, ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e11"
bir Nexus One telefonuyla eşleşir. Doğru şekilde tanınmaları için bu değerler, normal "0x" ön ekiyle yazılmamalı ve tümüyle küçük harflerle yazılmalıdır. Cihazınızın kimliklerini bulmak için komut satırı aracı lsusb
'ü çalıştırın.
Bu kural, /etc/udev/rules.d
dizinindeki bir dosyaya yerleştirilmelidir ve cihaz takılır takılmaz geçerli olur. udev'i yeniden başlatmanız gerekmez.
Yapay Zeka
Android platformu Linux tabanlıdır ancak sistem yapılandırmasında değişiklik gerektirmez. Varsayılan olarak, işletim sistemine 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şacağını bilmelidir. Kullanıcı, requestDevice()
çağrısına yanıt olarak bir cihaz seçtikten sonra Android, Chrome'un bu cihaza erişmesine izin verilip verilmeyeceğini soran bir istem görüntüler. Bu istem, kullanıcı bir 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'a kıyasla daha fazla cihaza erişilebilir. Örneğin, Android SDK'sında seri cihazla iletişim kurmak için API olmadığından, USB'den seri bağdaştırıcılar tarafından yaygın olarak uygulanan USB CDC-ACM sınıfı önemli bir eksikliktir.
ChromeOS
ChromeOS, Linux'u da temel alır ve sistem yapılandırmasında değişiklik gerektirmez. permission_broker hizmeti, USB cihazlarına erişimi kontrol eder ve hak talebinde bulunulmamış en az bir arayüz olduğu sürece tarayıcıya bu cihazlara erişmesine izin verir.
Windows
Windows sürücü modeli ek bir şart getirir. Yukarıdaki platformların aksine, sürücü yüklü olmasa bile bir USB cihazını kullanıcı uygulamasından açma özelliği varsayılan olarak etkin değildir. Bunun yerine, cihaza erişmek için kullanılan arayüz uygulamalarının sağlanması için WinUSB adlı özel bir sürücünün yüklenmesi gerekir. Bu işlem, sisteme yüklenen özel bir sürücü bilgi dosyası (INF) ile veya cihaz donanım yazılımını, numaralandırma sırasında Microsoft OS Compatibility Descriptors'ı sağlayacak şekilde değiştirerek yapılabilir.
Sürücü Bilgi Dosyası (INF)
Sürücü bilgileri dosyası, Windows'a bir cihazla ilk kez karşılaştığında ne yapacağını söyler. Kullanıcının sistemi zaten WinUSB sürücüsünü içerdiğinden, INF dosyasının tedarikçiniz ve ürün kimliğinizi bu yeni yükleme kuralıyla ilişkilendirmesi yeterlidir. Aşağıdaki dosya temel bir örnektir. Dosyayı .inf
uzantılı bir dosyaya kaydedin, "X" ile işaretlenmiş bölümleri değiştirin, ardından dosyayı sağ tıklayıp bağlam 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 için DeviceInterfaceGUID grubunu yapılandırır. Bir uygulamanın Windows API üzerinden cihaz arayüzünü bulup bağlayabilmesi için her cihaz arayüzünde bir GUID bulunmalı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üyü WinUSB sürücüsüyle değiştirmek için kolay bir arayüz sağlar.
Microsoft işletim sistemi uyumluluk tanımlayıcıları
Yukarıdaki INF dosyası yaklaşımı, her kullanıcının makinesinin önceden yapılandırılmasını gerektirdiği için zahmetli bir yöntemdir. Windows 8.1 ve sonraki sürümler, özel USB tanımlayıcıları kullanarak alternatif bir yöntem sunar. Bu tanımlayıcılar, cihaz ilk takıldığında Windows işletim sistemine normalde INF dosyasına eklenecek bilgileri sağlar.
WebUSB tanımlayıcılarını ayarladıktan sonra, Microsoft'un işletim sistemi uyumluluğu tanımlayıcılarını da kolayca ekleyebilirsiniz. Öncelikle BOS tanımlayıcını bu ek platform özelliği tanımlayıcıyla genişletin. Bu durumu hesaba katacak şekilde wTotalLength
ve bNumDeviceCaps
öğelerini güncellediğinizden emin olun.
Değer | Alan | Açıklama |
---|---|---|
Microsoft OS 2.0 platformu özelliği açıklayıcısı | ||
0x1C |
bLength | Bu tanımlayıcının boyutu |
0x10 |
bDescriptorType | Cihaz özellikleri tanımlayıcısı |
0x05 |
bDevCapabilityType | Platform özelliği tanımlayıcısı |
0x00 |
bReserved | |
{0xDF, 0x60, 0xDD, 0xD8, 0x89, 0x45, 0xC7, 0x4C, 0x9C, 0xD2, 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F} |
PlatformCapablityUUID | Küçük endian biçiminde Microsoft OS 2.0 platform uyumluluğu tanımlayıcısı GUID'si |
0x06030000 |
dwWindowsVersion | Uyumlu minimum Windows sürümü (Windows 8.1) |
0x00B2 |
wMSOSDescriptorSetTotalLength | Tanımlayıcı grubunun toplam uzunluğu |
0x02 |
bMS_VendorCode | Daha fazla Microsoft tanımlayıcısını almak için bRequest değeri |
0x00 |
bAltEnumCode | Cihaz, alternatif numaralandırmayı desteklemiyor |
WebUSB tanımlayı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
'yi seçtim. wIndex
konumunda bulunan 0x07
, cihazdan Microsoft OS 2.0 Tanımlayı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 |
USB cihazların birden fazla işlevi olabilir. Bu nedenle, tanımlayıcı grubunun ilk kısmı, sonraki özelliklerin hangi işlevle ilişkili olduğunu açıklar. Aşağıdaki örnekte, karma bir cihazın 1. arayüzü yapılandırılmaktadır. Tanımlayıcı, işletim sistemine bu arayüz hakkında 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 mülk tanımlayıcısı, yukarıdaki INF örneğindeki [Dev_AddReg]
bölümüne benzer şekilde çalışır ve bu işleve bir cihaz arayüzü GUID'si atamak için bir kayıt defteri mülkü ayarlar.
Değer | Alan | Açıklama |
---|---|---|
Microsoft OS 2.0 tanımlayıcı grubu başlığı | ||
0x000A |
wLength | Bu tanımlayıcının boyutu |
0x0000 |
wDescriptorType | Açıklayıcı grubu başlık açıklayıcısı |
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ırma alt kümesi başlığı | ||
0x0008 |
wLength | Bu tanımlayıcının boyutu |
0x0001 |
wDescriptorType | Yapılandırma alt kümesi başlığı açıklaması. |
0x00 |
bConfigurationValue | 1. yapılandırma için geçerlidir (yapılandırmalar normalde 1'den dizine eklenmesine rağmen 0'dan dizine eklenir) |
0x00 |
bReserved | 0 olarak ayarlanmalıdır |
0x00A8 |
wTotalLength | Bu başlık dahil olmak üzere alt kümenin toplam uzunluğu |
Microsoft OS 2.0 işlev alt kümesi başlığı | ||
0x0008 |
wLength | Bu tanımlayıcının boyutu |
0x0002 |
wDescriptorType | İşlev alt kümesi başlık tanımlayıcısı |
0x01 |
bFirstInterface | İşlevin ilk arayüzü |
0x00 |
bReserved | 0 olarak ayarlanmalıdır |
0x00A0 |
wSubsetLength | Bu başlık dahil olmak üzere alt kümenin toplam uzunluğu |
Microsoft OS 2.0 uyumlu kimlik tanımlayıcısı | ||
0x0014 |
wLength | Bu tanımlayıcının boyutu |
0x0003 |
wDescriptorType | Uyumlu kimlik tanımlayıcısı |
"WINUSB\0\0" |
CompatibileID | 8 bayta kadar doldurulmuş ASCII dizesi |
"\0\0\0\0\0\0\0\0" |
SubCompatibleID | 8 bayta kadar doldurulmuş ASCII dizesi |
Microsoft OS 2.0 kayıt defteri özelliği tanımlayıcısı | ||
0x0084 |
wLength | Bu tanımlayıcının boyutu |
0x0004 |
wDescriptorType | Kayıt otoritesi özelliği tanımlayıcısı |
0x0007 |
wPropertyDataType | REG_MULTI_SZ |
0x002A |
wPropertyNameLength | Tesis adının uzunluğu |
"DeviceInterfaceGUIDs\0" |
PropertyName | UTF-16LE olarak kodlanmış null sonlandırıcı içeren mülk adı |
0x0050 |
wPropertyDataLength | Özellik değerinin uzunluğu |
"{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\0\0" |
PropertyData | UTF-16LE olarak kodlanmış GUID ve iki null 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 bir sonraki bağlanışında bu soru tekrar sorulmaz. Microsoft, bir cihaz numaralandırılırken oluşturulan kayıt defteri girişlerini açıklayan USB Cihaz Kaydı Girişlerinin bir listesini sunmuştur. Test sırasında, Windows'un tanımlayıcıları tekrar okumaya zorlaması için cihaz için oluşturulan girişleri silin.
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ını hem de Microsoft OS tanımlayıcılarını içeren WebUSB uyumlu cihazları uygulayan örnek kodlar aşağıdaki projelerde bulunabilir: