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
);
若要定义名为 MyEvtSerCxReceive
的 EvtSerCxReceive 回调函数,必须先提供 静态驱动程序验证程序(SDV)和其他验证工具所需的函数声明,如下所示。
EVT_SERCX_RECEIVE MyEvtSerCxReceive;
然后,按如下所示实现回调函数。
NTSTATUS
MyEvtSerCxReceive(
__in WDFDEVICE Device
)
{ ... }
有关函数声明的 SDV 要求的详细信息,请参阅 使用 KMDF 驱动程序的函数角色类型声明函数。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows 8 开始可用。 |
目标平台 | 桌面 |
标头 | sercx.h |
IRQL | 在 IRQL <调用 = DISPATCH_LEVEL |