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
);
若要定义名为 MyEvtSerCxTransmit
的 EvtSerCxTransmit 回调函数,必须先提供静态驱动程序验证程序 (SDV) 和其他验证工具所需的函数声明,如下所示。
EVT_SERCX_TRANSMIT MyEvtSerCxTransmit;
然后,按如下所示实现回调函数。
NTSTATUS
MyEvtSerCxTransmit(
__in WDFDEVICE Device
)
{ ... }
有关函数声明的 SDV 要求的详细信息,请参阅 使用 KMDF 驱动程序的函数角色类型声明函数。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从Windows 8开始可用。 |
目标平台 | 桌面 |
标头 | sercx.h |
IRQL | 在 IRQL <= DISPATCH_LEVEL 调用 |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈