функция обратного вызова 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
Задает значение контекста из элемента 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, если вызов выполнен успешно. В противном случае подпрограмма возвращает соответствующий код ошибки. В следующей таблице показан возможный код состояния возврата.
Код возврата | Описание |
---|---|
|
Указывает, что запрос не удалось добавить в очередь команд из-за нехватки памяти без памяти. |
Комментарии
Эта подпрограмма отправляет одну или несколько команд кодека в драйвер шины HD Audio. Драйвер шины выдает команды кодекам, получает ответы кодеков на команды и выводит ответы вызывающей программе.
Вызывающий объект задает команды в массиве структур HDAUDIO_CODEC_TRANSFER. Каждая структура содержит хранилище для команды и ответа кодека на нее. Перед вызовом TransferCodecVerbs вызывающий объект заполняет команды в каждой из структур в массиве. По завершении каждой команды драйвер шины HD Audio извлекает ответ кодека и записывает его в структуру. После завершения последней команды вызывающий объект может считывать ответы из массива.
Подпрограмма может работать синхронно или асинхронно:
- Если вызывающий объект задает значение NULL для значения обратного вызова входного параметра, драйвер шины HD Audio выполняет команды в массиве codecTransfer синхронно. (Другими словами, подпрограмма возвращается только после того, как кодеки обработали все команды и ответы на них будут доступны.)
- Если вызывающий объект задает для параметра обратного вызова значение, отличное от NULL, подпрограмма работает асинхронно. (Другими словами, подпрограмма возвращается сразу после добавления команд во внутреннюю очередь, не дожидаясь, пока кодеки обработают все команды.) После того как кодеки обработают команды, драйвер шины HD Audio вызывает подпрограмму обратного вызова. В асинхронном случае вызывающий объект не должен пытаться считывать ответы на команды до того, как водитель шины вызовет подпрограмму обратного вызова.
typedef VOID
(*PHDAUDIO_TRANSFER_COMPLETE_CALLBACK)
(HDAUDIO_CODEC_TRANSFER *, PVOID);
Первый параметр вызова — это указатель на элемент массива codecTransfer , содержащий команду кодека и ответ, который активировал обратный вызов. Второй параметр вызова — это то же значение контекста, которое было указано ранее в параметре callbackContextподпрограммы TransferCodecVerbs.
В случае успешного выполнения TransferCodecVerbs возвращает STATUS_SUCCESS. Значение этого кода состояния зависит от того, работает ли подпрограмма синхронно или асинхронно:
- В синхронном случае (обратный вызов имеет значение NULL), STATUS_SUCCESS означает, что драйвер шины имеет все команды в массиве codecTransfer в кодеки, а подпрограмма записала все ответы на эти команды в массив. Однако вызывающий объект должен проверка отдельные ответы, чтобы определить, являются ли они допустимыми. Отдельные ответы могут быть недопустимыми из-за превышения времени ожидания кодека или переполнения FIFO.
- В асинхронном случае (обратный вызов не равен NULL), STATUS_SUCCESS означает только то, что подпрограмма успешно добавила команды во внутреннюю очередь драйвера шины HD Audio. Вызывающий объект не должен пытаться прочитать ответы на эти команды, пока водитель автобуса не вызовет подпрограмму обратного вызова.
Если параметр обратного вызова имеет значение NULL, вызывающий объект должен выполняться на PASSIVE_LEVEL IRQL. Если обратный вызов не равен NULL, вызывающий объект может вызвать Метод TransferCodecVerbs по адресу IRQL <= DISPATCH_LEVEL. В этом случае вызов возвращается немедленно, не дожидаясь, пока кодеки обработают все команды. После выполнения команд драйвер шины HD Audio вызывает подпрограмму обратного вызова в IRQL DISPATCH_LEVEL.
Вызывающий объект должен выделить массив codecTransfer из непагрегированного пула.
Требования
Требование | Значение |
---|---|
Целевая платформа | Персональный компьютер |
Верхняя часть | hdaudio.h (включая Hdaudio.h) |
IRQL | См. раздел "Примечания". |