AVC_FUNCTION_COMMAND
Kode fungsi AVC_FUNCTION_COMMAND digunakan untuk mengirim permintaan AV/C dan menerima respons sebagai satu operasi.
Blok Status I/O
Jika berhasil, driver protokol AV/C mengatur Irp-IoStatus.Status> ke STATUS_SUCCESS.
Kemungkinan nilai pengembalian lainnya meliputi:
Tampilkan Nilai | Deskripsi |
---|---|
STATUS_TIMEOUT | Permintaan dibuat, tetapi tidak ada respons yang diterima sebelum semua waktu habis dan pemrosesan coba lagi selesai. Perangkat target mengabaikan permintaan jika permintaan sebelumnya masih diproses. Beberapa perangkat AV/C tidak patuh, dan menolak untuk merespons dalam batas waktu 100 md, bahkan setelah beberapa upaya berturut-turut. Struktur AVC_COMMAND_IRB memungkinkan penyesuaian anggota Batas Waktu dan Coba Lagi default (masing-masing 100ms dan 9), tetapi pengaturan default ini telah cukup untuk semua implementasi yang diketahui. |
STATUS_PENDING | Permintaan dibuat, dan respons sementara diterima. Merupakan tanggung jawab dari rutinitas penyelesaian untuk menangani respons akhir dan membebaskan sumber daya IRP dan IRB. |
STATUS_REQUEST_ABORTED | Saat mengirimkan permintaan AV/C, segera batalkan ketika status penyelesaian IRP STATUS_REQUEST_ABORTED. |
STATUS_* | Kode pengembalian lainnya menunjukkan bahwa terjadi kesalahan atau peringatan yang berada di luar cakupan protokol AV/C. |
Komentar
Fungsi ini menggunakan struktur AVC_COMMAND_IRB seperti yang ditunjukkan di bawah ini.
typedef struct _AVC_COMMAND_IRB {
AVC_IRB Common;
UCHAR SubunitAddrFlag : 1;
UCHAR AlternateOpcodesFlag : 1;
UCHAR TimeoutFlag : 1;
UCHAR RetryFlag : 1;
union {
UCHAR CommandType;
UCHAR ResponseCode;
};
PUCHAR SubunitAddr;
PUCHAR AlternateOpcodes;
LARGE_INTEGER Timeout;
UCHAR Retries;
UCHAR Opcode;
ULONG OperandLength;
UCHAR Operands[MAX_AVC_OPERAND_BYTES];
NODE_ADDRESS NodeAddress;
ULONG Generation;
} AVC_COMMAND_IRB, *PAVC_COMMAND_IRB;
Persyaratan
Header: Dinyatakan dalam avc.h. Sertakan avc.h.
AVC_COMMAND_IRB Input
Umum
Submember Fungsi anggota ini harus diatur ke AVC_FUNCTION_COMMAND dari enumerasi AVC_FUNCTION.
SubunitAddrFlag
Atur ini ke satu untuk mengambil alih alamat subunit yang avc.sys kaitkan dengan driver subunit. Alasan untuk mengambil alih meliputi: driver subunit mewakili beberapa subunit dalam satu instans; perintah unit harus dikirim; atau driver dimuat karena avc.sys tidak dapat menentukan jenis subunit atau ID. Jika ini diatur, anggota SubunitAddr harus menunjuk ke memori yang tidak dipagasi yang berisi alamat subunit yang diinginkan.
Ini harus diatur ke satu (dan SubunitAddr yang sesuai disediakan) jika pemanggil mengirimkan permintaan langsung ke avc.sys FDO.
Catatan
Jika bendera ini tidak diatur berdasarkan permintaan, atas respons dari permintaan yang berhasil, bendera ini diatur, dan anggota SubunitAddr menunjuk ke alamat subunit yang sebenarnya. Jangan mencoba mengubah isi atau membebaskan memori: ini adalah bagian dari ekstensi perangkat driver induk. Ini mungkin, tentu saja, diatur kembali ke nol, dan penunjuk SubunitAddr dibersihkan untuk menggunakan kembali struktur untuk subunit yang berbeda.
AlternateOpcodesFlag Atur ini ke satu jika jenis perintah dan opcode permintaan ini menghasilkan respons dengan opcode yang berbeda. Tanpa ini, hanya respons dengan opcode yang cocok yang diterima. Jika ini diatur, anggota AlternateOpcodes harus mengarahkan ke memori yang tidak dipagasi yang berisi daftar opcode alternatif.
TimeoutFlag
Atur ini ke satu jika waktu habis default tidak sesuai untuk subunit. Jika ini diatur, anggota Timeout harus diatur ke waktu habis yang diinginkan (dalam unit 100-ns).
Coba lagiFlag
Atur ini ke satu jika jumlah coba lagi default tidak sesuai untuk subunit. Jika ini diatur, anggota Coba lagi harus diatur ke jumlah coba lagi yang diinginkan.
CommandType Berdasarkan permintaan, anggota ini harus diatur ke salah satu enumerator dari enumerasi AvcCommandType . Tanggal adalah parameter yang diperlukan.
ResponseCode Sebagai respons, anggota ini diatur ke nilai dari enumerasi AvcResponseCode .
SubunitAddr
Atur ini ke alamat memori yang tidak dipagasi yang berisi alamat subunit yang diinginkan yang dikodekan sesuai dengan Bagian 5.3.3 dari 1394 Trade Association AV/C Digital Interface Command Set General Specification, Rev 3.0. Tidak ada panjang yang diperlukan karena pengodean alamat subunit menyiratkan ini. Parameter ini diabaikan jika SubunitAddrFlag adalah nol.
AlternateOpcodes Atur ini ke alamat memori yang tidak dipagasi yang berisi daftar opcode alternatif yang diinginkan. Byte pertama dari daftar opcode adalah jumlah opcode yang harus diikuti (setara dengan jumlah byte). Panjang total memori yang berisi daftar opcode alternatif adalah AlternateOpcodes[0]+1. Parameter ini diabaikan jika AlternateOpcodesFlag adalah nol.
Timeout
Atur ini ke batas waktu yang diinginkan dalam unit 100-ns. Misalnya, nilai batas waktu default adalah: Timeout.QuadPart = 1000000 (100ms dalam unit 100ns). Parameter ini diabaikan jika TimeoutFlag adalah nol.
Pengulangan Atur ini ke berapa kali yang diinginkanavc.sys harus mencoba mencoba kembali permintaan setelah setiap waktu habis tanpa respons. Perhatikan bahwa jumlah coba lagi nol berarti bahwa permintaan dicoba sekali. Jumlah total waktu yang dihabiskan untuk mencoba memproses perintah tanpa mendapatkan respons dihitung dengan rumus berikut:
Waktu habis * (Coba Lagi+ 1)
Parameter ini diabaikan jika RetryFlag adalah nol.
Opcode Atur ini ke opcode AV/C yang diinginkan (sesuai untuk jenis subunit). Tanggal adalah parameter yang diperlukan. Sebagai respons, jika AlternateOpcodesFlag ditetapkan, dan salah satu opcode alternatif digunakan untuk mencocokkan respons, ini diatur ke opcode alternatif tersebut.
OperandLength
Atur ini ke jumlah byte yang digunakan untuk menyimpan operand di anggota Operand. Tanggal adalah parameter yang diperlukan. Sebagai respons, parameter ini diatur ke jumlah byte dalam daftar operand yang digunakan oleh respons.
Operand
Atur ini ke daftar operand yang sesuai untuk jenis subunit dan opcode. Tanggal adalah parameter yang diperlukan. Pada respons, parameter ini berisi daftar operand respons.
NodeAddress Dipesan. Ini harus nol.
Generasi
Dicadangkan. Ini harus nol.
Kode fungsi AVC_FUNCTION_COMMAND tidak didukung oleh instans virtual avc.sys. Jika pemanggil ingin mengontrol perangkat eksternal, instans nonvirtual perangkat tersebut dapat ditemukan melalui mekanisme privat, atau melalui beberapa kombinasi kode fungsi AVC_FUNCTION_FIND_PEER_DO, AVC_FUNCTION_PEER_DO_LIST , dan AVC_FUNCTION_GET_SUBUNIT_INFO dari kode kontrol I/O IOCTL_AVC_CLASS.
Struktur ini mendefinisikan komponen umum dari permintaan perintah AV/C. Ini memegang opcode dan operan permintaan, dan opcode dan operan respons (setelah selesai). Ukuran daftar operand diperbaiki pada jumlah maksimum operand yang diperbolehkan yang diberikan alamat subunit satu-byte. Jika alamat subunit diperpanjang dengan cara apa pun, jumlah maksimum byte operand yang diizinkan dikurangi.
Penggunaan struktur ini yang direkomendasikan adalah dengan terlebih dahulu nol struktur (gunakan RtlZeroMemory) sebelum mengisi parameter.
Ini harus dipanggil di IRQL = PASSIVE_LEVEL.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk