EVT_SERCX_TRANSMIT回调函数 (sercx.h)

EvtSerCxTransmit 事件回调函数 (UART) 准备串行控制器设备,以执行写入 (传输) 操作。

语法

EVT_SERCX_TRANSMIT EvtSercxTransmit;

NTSTATUS EvtSercxTransmit(
  [in] WDFDEVICE Device,
  [in] size_t Length
)
{...}

参数

[in] Device

表示串行控制器的框架设备对象的 WDFDEVICE 句柄。

[in] Length

要传输的字节数。 控制器驱动程序可以使用此值作为提示,以决定是使用 PIO 还是 DMA 来执行数据传输。

返回值

如果调用成功, EvtSerCxTransmit 函数将返回STATUS_SUCCESS。 否则,它将返回相应的错误状态代码。

注解

串行框架扩展 (SerCx) 调用此函数来配置串行控制器硬件以传输数据。 如有必要, EvtSerCxTransmit 函数可以启用中断。

EvtSerCxTransmit 函数不一定将输出数据写入传输 FIFO 缓冲区。 根据串行控制器硬件或传输类型,此函数可能会设置一个 DMA 操作来写入数据,或者它可能会计划一个传输/接收 DPC 函数来写入数据。 串行控制器驱动程序实现此 DPC 函数,以将数据传输到串行控制器并从控制器接收数据。 在 DPC 期间,DPC 函数确定数据是否可供传输,如果是,则使用 PIO 将数据传输到串行控制器中的传输 FIFO。

如果串行控制器中的传输 FIFO 已满或几乎已满,但 FIFO 的低水位中断已启用, 则 EvtSerCxTransmit 函数只需返回即可。 稍后,控制器驱动程序的 ISR 可以计划传输/接收 DPC 函数运行,并且此函数可以将更多输出数据传输到传输 FIFO。

若要注册 EvtSerCxTransmit 回调函数,控制器驱动程序在 EvtDriverDeviceAdd 回调期间调用 SerCxInitialize 方法。

示例

此回调的函数类型在 Sercx.h 中声明,如下所示。

typedef NTSTATUS
  EVT_SERCX_TRANSMIT(
    __in WDFDEVICE Device
    );

若要定义名为 MyEvtSerCxTransmitEvtSerCxTransmit 回调函数,必须先提供静态驱动程序验证程序 (SDV) 和其他验证工具所需的函数声明,如下所示。

EVT_SERCX_TRANSMIT MyEvtSerCxTransmit;

然后,按如下所示实现回调函数。

NTSTATUS
  MyEvtSerCxTransmit(
    __in WDFDEVICE Device
    )
{ ... }

有关函数声明的 SDV 要求的详细信息,请参阅 使用 KMDF 驱动程序的函数角色类型声明函数

要求

要求
最低受支持的客户端 从Windows 8开始可用。
目标平台 桌面
标头 sercx.h
IRQL 在 IRQL <= DISPATCH_LEVEL 调用

另请参阅

EvtDriverDeviceAdd

SerCxInitialize

WdfDpcEnqueue