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.
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.
Persyaratan
Persyaratan | Nilai |
---|---|
Header | usb.h (termasuk Usb.h) |