функция обратного вызова PTRANSFER_CODEC_VERBS (hdaudio.h)

Подпрограмма TransferCodecVerbs передает одну или несколько команд в кодеки или кодеки и извлекает ответы на эти команды.

Тип указателя функции для подпрограммы TransferCodecVerbs определяется следующим образом.

Синтаксис

PTRANSFER_CODEC_VERBS PtransferCodecVerbs;

NTSTATUS PtransferCodecVerbs(
  [in]      PVOID _context,
  [in]      ULONG Count,
  [in, out] PHDAUDIO_CODEC_TRANSFER CodecTransfer,
  [in]      PHDAUDIO_TRANSFER_COMPLETE_CALLBACK Callback,
  [in]      PVOID Context
)
{...}

Параметры

[in] _context

Указывает значение контекста из элемента Контекста структуры HDAUDIO_BUS_INTERFACE, HDAUDIO_BUS_INTERFACE_V2или структурыHDAUDIO_BUS_INTERFACE_BDL.

[in] Count

Указывает количество элементов в массиве codecTransfer .

[in, out] CodecTransfer

Указатель на массив HDAUDIO_CODEC_TRANSFER структур. Каждый элемент массива представляет собой структуру, содержащую хранилище для как выходной команды вызывающего объекта, так и соответствующего входного ответа из кодека.

[in] Callback

Указатель функции на подпрограмму обратного вызова. Этот параметр является указателем функции типа HDAUDIO_TRANSFER_COMPLETE_CALLBACK. Параметр можно указать как NULL. Дополнительные сведения см. в следующем разделе "Примечания".

[in] Context

Значение контекста для подпрограммы обратного вызова. Вызывающий объект приводит значение контекста к типу PVOID. После выполнения команд асинхронно драйвер шины HD Audio передает контекстное значение подпрограмме обратного вызова в качестве параметра вызова.

Возвращаемое значение

TransferCodecVerbs возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае подпрограмма возвращает соответствующий код ошибки. В следующей таблице показан возможный код состояния возврата.

Код возврата Описание
STATUS_NO_MEMORY
Указывает, что запрос не удалось добавить в очередь команд из-за нехватки непагаченной памяти.

Замечания

Эта подпрограмма отправляет одну или несколько команд кодека драйверу шины HD Audio. Драйвер шины выдает команды кодекам, извлекает ответы кодеков на команды и выводит ответы вызывающему объекту.

Вызывающий объект задает команды в массиве HDAUDIO_CODEC_TRANSFER структур. Каждая структура содержит хранилище как для команды, так и для ответа кодека этой команды. Перед вызовом TransferCodecVerbs вызывающий объект заполняет команды в каждой из структур в массиве. По завершении каждой команды драйвер аудиошины HD извлекает ответ кодека и записывает его в структуру. После завершения последней команды вызывающий объект может считывать ответы из массива.

Подпрограмма может работать синхронно или асинхронно:

  • Если вызывающий объект задает значение NULL для обратного вызова входного параметра, драйвер шины HD Audio завершает команды в массиве codecTransfer синхронно. (Другими словами, подпрограмма возвращается только после того, как кодеки обработали все команды и ответы на эти команды доступны.)
  • Если вызывающий объект задает значение, отличное от NULL для параметра обратного вызова , подпрограмма работает асинхронно. (Другими словами, подпрограмма возвращается сразу после добавления команд в внутреннюю очередь, не ожидая обработки всех команд кодеков. После обработки команд кодеки драйвер hd Audio bus вызывает подпрограмму обратного вызова. В асинхронном случае вызывающий объект не должен пытаться считывать ответы на команды, прежде чем водитель шины вызывает подпрограмму обратного вызова.
Тип указателя функции для параметра обратного вызова определяется следующим образом:
typedef VOID
  (*PHDAUDIO_TRANSFER_COMPLETE_CALLBACK)
    (HDAUDIO_CODEC_TRANSFER *, PVOID);

Первый параметр вызова — это указатель на элемент массива codecTransfer , содержащий команду codec и ответ, который активировал обратный вызов. Второй параметр вызова — это то же значение контекста, которое было указано ранее в параметре callbackContext подпрограммы TransferCodecVerbs.

В случае успешного выполнения TransferCodecVerbs возвращает STATUS_SUCCESS. Смысл этого кода состояния зависит от того, работает ли подпрограмма синхронно или асинхронно:

  • В синхронном случае (обратный вызов имеет значение NULL), STATUS_SUCCESS означает, что драйвер шины имеет все команды в массиве codecTransfer к кодекам и что подпрограмма написала все ответы на эти команды в массив. Однако вызывающий объект должен проверить отдельные ответы, чтобы определить, являются ли они допустимыми. Отдельные ответы могут быть недопустимыми из-за времени ожидания кодека или переполнения FIFO.
  • В асинхронном случае (обратный вызов не имеет значения NULL), STATUS_SUCCESS означает, что подпрограмма успешно добавила команды во внутреннюю очередь драйвера аудиоконференции HD. Вызывающий объект не должен пытаться прочитать ответы на эти команды, пока водитель шины не вызовет подпрограмму обратного вызова.
Если ответ недопустим из-за переполнения FIFO, скорее всего, причина заключается в том, что кодек ответил на команду, но ответ был потерян из-за недостаточного размера входного кольцевого буфера ответа (RIRB). Если переполнение FIFO не является причиной недопустимого ответа, вероятно, произошел сбой, так как кодек не ответил во времени (истекло время ожидания). В этом случае вызывающий объект может предположить, что команда не достигла кодека.

Если параметр обратного вызова имеет значение NULL, вызывающий объект должен работать в irQL PASSIVE_LEVEL. Если обратный вызов не имеет значения NULL, вызывающий объект может вызывать TransferCodecVerbs в IRQL <= DISPATCH_LEVEL, в этом случае вызов возвращается немедленно, не ожидая обработки кодеков всех команд; после завершения команд драйвер HD Audio bus вызывает подпрограмму обратного вызова в IRQL DISPATCH_LEVEL.

Вызывающий объект должен выделить массив codecTransfer из непагированного пула.

Требования

Требование Ценность
целевая платформа Рабочий стол
Заголовок hdaudio.h (include Hdaudio.h)
IRQL См. раздел "Примечания".

См. также

HDAUDIO_BUS_INTERFACE

HDAUDIO_BUS_INTERFACE_BDL

HDAUDIO_BUS_INTERFACE_V2

HDAUDIO_CODEC_TRANSFER