USB arabirimi ilişkilendirme tanımlayıcısı

USB arabirim ilişkilendirme tanımlayıcısı (IAD), cihazın bir işleve ait arabirimleri gruplandırmasını sağlar. Bu makalede, bir istemci sürücüsünün cihazın bir işlev için IAD içerip içermediğini nasıl belirleyebileceği açıklanmaktadır.

Evrensel Seri Veri Yolu Belirtimi olan düzeltme 2.0, bileşik cihazın tek bir işlev içinde birden fazla arabirimini gruplandırma özelliğini desteklemez. Ancak, USB cihazı çalışma grubu (DWG), birden çok arabirime sahip işlevlere izin veren USB cihaz sınıfları oluşturdu. USB Uygulayıcısı Forumu, arabirimleri gruplandırma mekanizmasını tanımlayan bir mühendislik değişiklik bildirimi (ECN) yayınladı.

ECN, donanım üreticilerinin arabirim gruplamalarını tanımlamasına olanak tanıyan arabirim ilişkilendirme tanımlayıcısı (IAD) olarak adlandırılan bir USB tanımlayıcısı belirtir. IAD kullanma olasılığı en yüksek olan cihaz sınıfları şunlardır:

  • USB video sınıfı belirtimi (sınıf kodu - 0x0E)
  • USB ses sınıfı belirtimi (sınıf kodu - 0x01)
  • USB Bluetooth sınıf belirtimi (sınıf kodu - 0xE0)

IAD'lerin nasıl kullanılacağı

Aşağıdaki alt bölümlerde, IAD'lerin nasıl kullanılacağı hakkında bilgiler açıklanmaktadır.

Üretici yazılımındaki IAD'leri Windows'a bildiren bileşik cihazlar

Bileşik cihaz üreticileri genellikle Evrensel Seri Veri Yolu Belirtimi tarafından belirtildiği gibi cihaz tanımlayıcısında cihaz sınıfı (bDeviceClass), alt sınıf (bDeviceSubClass) ve protokol (bDeviceProtocol) alanlarına sıfır değeri atar. Üretici, her bir arabirimi farklı bir cihaz sınıfı ve protokolüyle ilişkilendirebilir.

USB-IF çekirdek ekibi, işletim sistemine cihaz üretici yazılımında bir veya daha fazla IAD bulunduğunu bildiren özel bir sınıf ve protokol kodu kümesi hazırlar. Cihaz tanımlayıcısı aşağıdaki tabloda görünen değerlere sahip olmalıdır veya işletim sistemi cihazın KIMLIKlerini algılamaz veya cihazın arabirimlerini düzgün bir şekilde gruplandıramaz.

Cihaz tanımlayıcı alanı Gerekli değer
bDeviceClass 0xEF
bDeviceSubClass 0x02
bAygıtProtokolü 0x01

Kod değerleri, windows'un IAD'leri desteklemeyen sürümlerini uyarır ve cihazı doğru numaralandıran özel amaçlı bir veri yolu sürücüsü yükler. Cihaz tanımlayıcısında bu kodlar olmadan sistem cihazı numaralandıramayabilir veya cihaz düzgün çalışmayabilir.

Bir cihazda birden fazla IAD olabilir. Her IAD, IAD'nin tanımladığı arabirim grubundaki arabirimlerden hemen önce bulunmalıdır.

IAD'nin işlev sınıfı (bFunctionClass), alt sınıf (bFunctionSubclassClass) ve protokol (bFunctionProtocol) alanları, işlevdeki arabirimleri açıklayan USB cihaz sınıfı tarafından belirtilen değerleri içermelidir.

IAD'nin sınıf ve alt sınıf alanlarının, IAD'nin tanımladığı arabirim koleksiyonundaki arabirimlerin sınıf ve alt sınıf alanlarıyla eşleşmesi gerekmez. Microsoft, koleksiyonun ilk arayüzünün IAD'nin sınıf ve alt sınıf alanlarıyla eşleşen sınıf ve alt sınıf alanlarına sahip olmasını önerir. Aşağıdaki tabloda hangi alanların eşleşmesi gerektiği gösterilir.

IAD alanı Karşılık gelen arabirim alanı
bFunctionClass bArayüzSınıfı
bFunctionSubclassClass bArayüzAltSınıfı

IAD'nin bFirstInterface alanı işlevdeki ilk arabirimin sayısını gösterir. IAD'nin bInterfaceCount alanı, arabirim koleksiyonunda kaç arabirim olduğunu gösterir. IAD arabirim koleksiyonundaki arabirimler bitişik olmalıdır (arabirim numaraları listesinde boşluk olamaz) ve bu nedenle ilk arabirim numarasına sahip bir sayı koleksiyondaki tüm arabirimleri belirtmek için yeterlidir.

IAD içeriğine erişme

İstemci sürücüleri IAD tanımlayıcılara doğrudan erişemez. IAD mühendislik değişiklik bildirimi (ECN), cihazların yapılandırma tanımlayıcısı (GetDescriptor yapılandırması) için konak yazılımından istek aldıklarında döndüreceği yapılandırma bilgilerine IAD'lerin eklenmesi gerektiğini belirtir. Ana bilgisayar yazılımı, bir GetDescriptor isteğiyle doğrudan IAD'leri alamaz.

Ancak, istemci sürücüleri bir USB cihazının üst sürücüsünü cihazın donanım tanımlayıcıları (kimlikler) için sorgulayabilir ve cihazın donanım kimlikleri IAD alanları hakkında ekli bilgiler içerir.

USB arabirimi ilişkilendirme tanımlayıcısı örneği

Bu bölümde, bileşik USB cihazı için açıklayıcı düzen gösterilmektedir. Örnek cihazın iki işlevi vardır:

Video sınıfı fonksiyonu

Arabirim ilişkilendirme tanımlayıcısı (IAD) bu işlevi tanımlar. İşlev iki arabirim içerir: arabirim sıfır (0) ve arabirim bir (1).

Sistem, Kablosuz Mobil İletişim Cihazı Sınıfı Desteği bölümünde açıklandığı gibi işlev için donanım ve uyumlu tanımlayıcılar (kimlikler) oluşturur. İşletim sistemi uygun INF dosyasıyla eşleşdikten sonra sistem video sınıfı sürücü yığınını yükler.

İnsan giriş cihazı (HID) işlevi

Bu işlev yalnızca iki (2) arabirimini içerir.

Sistem, USB Bileşik Cihazlarda Arabirim Koleksiyonlarının Numaralandırması bölümünde açıklandığı gibi işlev için donanım ve uyumlu kimlikler oluşturur. İşletim sistemi uygun INF dosyasıyla eşleşdikten sonra sistem, insan giriş cihazı (HID) sınıf sürücüsünü yükler.

Tanımlayıcı aşağıdaki gibidir:

Cihaz tanımlayıcısı

    BYTE  bLength            0x12
    BYTE  bDescriptorType    0x01
    WORD  bcdUSB             0x0200
    BYTE  bDeviceClass       0xEF
    BYTE  bDeviceSubClass    0x02
    BYTE  bDeviceProtocol    0x01
    BYTE  bMaxPacketSize0    0x40
    WORD  idVendor           0x045E
    WORD  idProduct          0xFFFF
    WORD  bcdDevice          0x0100
    BYTE  iManufacturer      0x01
    WORD  iProduct           0x02
    WORD  iSerialNumber      0x02
    BYTE  bNumConfigurations 0x01

Yapılandırma tanımlayıcısı

    BYTE  bLength             0x09
    BYTE  bDescriptorType     0x02
    WORD  wTotalLength        0x...
    BYTE  bNumInterfaces      0x03
    BYTE  bConfigurationValue 0x01
    BYTE  iConfiguration      0x01
    BYTE  bmAttributes        0x80    // (BUS Powered)
    BYTE  bMaxPower           0x19    // (50 mA)

Arabirim ilişkilendirme tanımlayıcısı

    BYTE  bLength           0x08
    BYTE  bDescriptorType   0x0B
    BYTE  bFirstInterface   0x00
    BYTE  bInterfaceCount   0x02
    BYTE  bFunctionClass    0x0E
    BYTE  bFunctionSubClass 0x03
    BYTE  bFunctionProtocol 0x00
    BYTE  iFunction         0x04

Video denetim arabirimi tanımlayıcısı

    BYTE  bLength            0x09
    BYTE  bDescriptorType    0x04
    BYTE  bInterfaceNumber   0x00
    BYTE  bAlternateSetting  0x00
    BYTE  bNumEndpoints      0x01
    BYTE  bInterfaceClass    0x0E
    BYTE  bInterfaceSubClass 0x01
    BYTE  bInterfaceProtocol 0x00
    BYTE  iInterface         0x05

Video denetimi sınıfına özgü tanımlayıcı

    . . . .
    . . . .
    . . . .

Video denetimi uç nokta tanımlayıcısı

    . . . .
    . . . .
    . . . .

Video akışı arabirimi tanımlayıcısı

    BYTE  bLength            0x09
    BYTE  bDescriptorType    0x04
    BYTE  bInterfaceNumber   0x01
    BYTE  bAlternateSetting  0x00
    BYTE  bNumEndpoints      0x01
    BYTE  bInterfaceClass    0x0E
    BYTE  bInterfaceSubClass 0x02
    BYTE  bInterfaceProtocol 0x00
    BYTE  iInterface         0x06

Video akışı sınıfına özgü tanımlayıcı

    . . . .
    . . . .
    . . . .

Video akışı uç nokta tanımlayıcısı

    . . . .
    . . . .
    . . . .

İnsan giriş cihazları (HID) arabirim tanımlayıcısı

    BYTE  bLength            0x09
    BYTE  bDescriptorType    0x04
    BYTE  bInterfaceNumber   0x02
    BYTE  bAlternateSetting  0x00
    BYTE  bNumEndpoints      0x01
    BYTE  bInterfaceClass    0x03
    BYTE  bInterfaceSubClass 0x01
    BYTE  bInterfaceProtocol 0x01
    BYTE  iInterface         0x07

HID sınıfına özgü tanımlayıcı

    . . . .
    . . . .
    . . . .

HID uç nokta tanımlayıcısı

    . . . .
    . . . .
    . . . .