struktur USBD_PIPE_INFORMATION (usb.h)

Struktur USBD_PIPE_INFORMATION digunakan oleh driver klien USB untuk menyimpan informasi tentang pipa dari antarmuka tertentu.

Sintaks

typedef struct _USBD_PIPE_INFORMATION {
  USHORT           MaximumPacketSize;
  UCHAR            EndpointAddress;
  UCHAR            Interval;
  USBD_PIPE_TYPE   PipeType;
  USBD_PIPE_HANDLE PipeHandle;
  ULONG            MaximumTransferSize;
  ULONG            PipeFlags;
} USBD_PIPE_INFORMATION, *PUSBD_PIPE_INFORMATION;

Anggota

MaximumPacketSize

Menentukan ukuran paket maksimum, dalam byte, yang ditangani pipa ini. Nilai ini harus kurang dari atau sama dengan nilai wMaxPacketSize dalam deskriptor titik akhir. Tumpukan USB mengabaikan nilai ini jika bendera USBD_PF_CHANGE_MAX_PACKET tidak diatur dalam anggota PipeFlags .

Untuk titik akhir isochronous berkecepatan tinggi, nilai MaximumPacketSize yang diterima mencakup jumlah byte yang dapat ditransfer dalam transaksi tambahan, jika titik akhir mendukungnya. Untuk informasi selengkapnya, lihat Keterangan.

EndpointAddress

Menentukan alamat bus untuk pipa ini.

Interval

Berisi interval polling, yang ditunjukkan oleh bidang bInterval di deskriptor titik akhir yang sesuai (USB_ENDPOINT_DESCRIPTOR). Nilai ini hanya berlaku untuk pipa interupsi dan isochronous. Untuk jenis pipa lainnya, nilai ini harus diabaikan. Ini mencerminkan konfigurasi perangkat dalam firmware. Driver tidak dapat mengubahnya.

Interval polling, bersama dengan kecepatan perangkat dan jenis pengontrol host, menentukan frekuensi di mana driver harus memulai transfer. Nilai dalam Interval tidak mewakili jumlah waktu tetap. Ini adalah nilai relatif, dan frekuensi polling aktual juga akan bergantung pada apakah perangkat dan pengontrol host USB beroperasi pada kecepatan rendah, penuh, atau tinggi.

Jika pengontrol host atau perangkat beroperasi dengan kecepatan rendah, periode waktu antara transfer (juga dikenal sebagai "periode polling") diukur dalam satuan 1 bingkai milidetik, dan periode tersebut terkait dengan nilai dalam Interval seperti yang ditunjukkan pada tabel berikut:

Interval Periode Polling (bingkai 1 milidetik) Interupsi Isochronous
0 hingga 15 8 Didukung. Tidak didukung.
16 hingga 35 16 Didukung. Tidak didukung.
36 hingga 255 32 Didukung. Tidak didukung.
 

Untuk perangkat dan pengontrol host yang dapat beroperasi dengan kecepatan penuh, periode diukur dalam satuan 1 bingkai milidetik. Untuk transfer isochronous berkecepatan penuh, nilai Interval dan periode polling selalu 1. Nilai tersebut menunjukkan bahwa data dapat ditransfer di setiap bingkai. Untuk transfer interupsi berkecepatan penuh, periode polling berasal dari nilai Interval . Tabel berikut menunjukkan nilai yang didukung untuk titik akhir interupsi dan isochronous.

Interval Periode Polling (bingkai 1 milidetik) Interupsi Isochronous
1 1 Didukung. Didukung.
2 hingga 3 2 Didukung. Tidak didukung.
4 hingga 7 4 Didukung. Tidak didukung.
8 hingga 15 8 Didukung. Tidak didukung.
16 hingga 31 16 Didukung. Tidak didukung.
32 hingga 255 32 Didukung. Tidak didukung.
 

Untuk perangkat dan pengontrol host yang dapat beroperasi dengan kecepatan tinggi, periode diukur dalam satuan mikroframe. Periode polling berasal dari nilai Interval dengan menggunakan rumus Polling period = 2 ** (Interval - 1). Nilai terhitung ditunjukkan dalam tabel berikut:

Interval Periode Polling (mikroframe) Interupsi Isochronous
1 1 Didukung. Didukung.
2 2 Didukung. Didukung.
3 4 Didukung. Didukung.
4 8 Didukung. Didukung.
5 16 Didukung. Tidak didukung.
6 hingga 255 32 Didukung. Tidak didukung.
 

Periode polling yang didukung untuk transfer isochronous berkecepatan tinggi adalah 1, 2, 4, dan 8. Jika driver klien mengirimkan permintaan URB_FUNCTION_ISOCH_TRANSFER untuk titik akhir isochronous berkecepatan tinggi dengan periode polling yang lebih besar dari 8, permintaan gagal dengan status USBD_STATUS_INVALID_PARAMETER. Untuk informasi tentang transfer isochronous, lihat Cara Mentransfer Data ke Titik Akhir USB Isochronous.

Pemetaan dalam tabel sebelumnya antara periode dan interval polling valid di Microsoft Windows 2000 dan versi yang lebih baru dari sistem operasi Windows.

PipeType

Menentukan jenis transfer apa yang digunakan pipa ini. Nilai-nilai ini didefinisikan dalam enumerasi USBD_PIPE_TYPE .

PipeHandle

Menentukan handel buram ke pipa massal atau interupsi. Driver pengontrol host mengembalikan handel ini ketika driver klien memilih konfigurasi perangkat dengan URB jenis URB_FUNCTION_SELECT_CONFIGURATION atau ketika driver klien mengubah pengaturan untuk antarmuka dengan URB jenis URB_FUNCTION_SELECT_INTERFACE.

MaximumTransferSize

Menentukan ukuran maksimum, dalam byte, untuk permintaan transfer pada pipa ini. Di Windows Server 2003, Windows XP dan sistem operasi yang lebih baru, anggota ini tidak digunakan dan tidak berisi data yang valid.

Untuk informasi tentang ukuran transfer maksimum setiap jenis titik akhir USB di versi Windows yang berbeda, lihat Transfer USB dan Ukuran Paket.

Catatan Untuk WinUSB, jangan gunakan MaximumTransferSize untuk menentukan ukuran maksimum transfer USB. Sebagai gantinya, gunakan nilai MAXIMUM_TRANSFER_SIZE yang diambil oleh WinUsb_GetPipePolicy.
 

PipeFlags

Berisi bitwise-OR dari bendera pipa yang dapat digunakan driver untuk menentukan karakteristik pipa tertentu yang dapat dikonfigurasi. Driver menentukan karakteristik pipa ini ketika memilih konfigurasi perangkat USB dengan permintaan URB yang jenis fungsinya URB_FUNCTION_SELECT_CONFIGURATION.

Tabel berikut menjelaskan arti setiap bendera pipa:

Nama bendera Makna
USBD_PF_CHANGE_MAX_PACKET Menunjukkan bahwa driver mengesampingkan ukuran paket maksimum titik akhir dengan nilai yang ditentukan dalam MaximumPacketSize. Nilai ini harus kurang dari atau sama dengan maksimum default yang ditentukan dalam deskriptor titik akhir pipa.

Keterangan

Struktur ini berisi informasi untuk titik akhir, yang diambil dari deskriptor antarmuka perangkat. Untuk penjelasan tentang cara mendapatkan informasi dalam USBD_PIPE_INFORMATION dari deskriptor antarmuka, lihat Cara Memilih Konfigurasi untuk Perangkat USB.

Nilai MaximumPacketSize berasal dari 11 bit pertama dari bidang wMaxPacketSize dari deskriptor titik akhir, yang menunjukkan jumlah maksimum byte yang dapat dikirim atau diterima pengontrol host dari titik akhir dalam satu transaksi.

Biasanya, untuk transfer berkecepatan tinggi, pengontrol host mengirim atau menerima satu transaksi per mikroframe. Namun, kecepatan tinggi, bandwidth tinggi isochronous atau interupsi titik akhir mendukung tingkat data yang lebih tinggi melalui transaksi tambahan. Ini memungkinkan pengontrol host untuk mentransfer hingga 3072 byte dalam satu mikroframe. Jumlah transaksi tambahan yang didukung oleh jenis titik akhir tersebut ditunjukkan oleh bit 12..11 dari wMaxPacketSize (bit paling tidak signifikan adalah 0). Angka itu bisa 0, 1, atau 2. Jika 12..11 menunjukkan 0, transaksi tambahan per mikroframe tidak didukung oleh titik akhir. Jika jumlahnya 1, maka pengontrol host dapat mengirim transaksi tambahan (total dua transaksi per mikroframe); 2 menunjukkan dua transaksi tambahan (total tiga transaksi per mikroframe).

Nilai yang diterima dalam MaximumPacketSize untuk titik akhir isochronous (kecepatan tinggi dan bandwidth tinggi) menunjukkan jumlah total byte yang dapat dikirim atau diterima pengontrol host dari titik akhir dalam satu mikroframe. Nilai mencakup jumlah byte dalam transaksi tambahan, jika titik akhir mendukungnya. Misalnya, pertimbangkan karakteristik titik akhir isochronous berikut:

  • wMaxPacketSize adalah 1.024
  • Bit 12..11 menunjukkan 2
  • Interval adalah 1.
Dalam contoh sebelumnya, nilai yang diterima dalam MaximumPacketSize adalah 3.072 byte (Total transaksi * wMaxPacketSize). Karena Interval adalah 1, periode polling adalah 1. Dengan demikian, pengontrol host dapat mentransfer 3.072 byte di setiap mikroframe bingkai. Dalam satu permintaan I/O (dijelaskan dalam satu URB), pengontrol host dapat mentransfer tidak lebih dari 24.576 byte.

Persyaratan

Persyaratan Nilai
Header usb.h (termasuk Usb.h)

Lihat juga

Struktur USB

USB_ENDPOINT_DESCRIPTOR