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

AVC_FUNCTION

AvcCommandType

AvcResponseCode

AVC_FUNCTION_FIND_PEER_DO

AVC_FUNCTION_PEER_DO_LIST

AVC_FUNCTION_GET_SUBUNIT_INFO