EVT_SERCX_RECEIVE回调函数 (sercx.h)

EvtSerCxReceive 事件回调函数准备串行控制器设备 (UART) 执行读取 (接收) 操作。

语法

EVT_SERCX_RECEIVE EvtSercxReceive;

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

参数

[in] Device

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

[in] Length

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

返回值

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

注解

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

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

如果串行控制器中的接收 FIFO 为空或几乎为空,但启用了 FIFO 的高水位标记中断,则 DPC 例程可以简单地返回。 稍后,控制器驱动程序的 ISR 可以计划运行 DPC 例程,并且此例程可以从接收 FIFO 读取更多数据。

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

示例

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

typedef NTSTATUS
  EVT_SERCX_RECEIVE(
    __in WDFDEVICE Device
    );

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

EVT_SERCX_RECEIVE MyEvtSerCxReceive;

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

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

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

要求

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

另请参阅

EvtDriverDeviceAdd

SerCxInitialize

WdfDpcEnqueue