SPB_REQUEST_SEQUENCE_POSITION枚举 (spbcx.h)
SPB_REQUEST_SEQUENCE_POSITION 枚举指示 I/O 请求在 I/O 传输序列的传输列表中的位置。
语法
typedef enum _SPB_REQUEST_SEQUENCE_POSITION {
SpbRequestSequencePositionInvalid,
SpbRequestSequencePositionSingle,
SpbRequestSequencePositionFirst,
SpbRequestSequencePositionContinue,
SpbRequestSequencePositionLast,
SpbRequestSequencePositionMax
} SPB_REQUEST_SEQUENCE_POSITION, *PSPB_REQUEST_SEQUENCE_POSITION;
常数
SpbRequestSequencePositionInvalid 仅供内部使用。 |
SpbRequestSequencePositionSingle 单传输 I/O 请求。 此请求是不属于序列的读取或写入(IRP_MJ_READ 或 IRP_MJ_WRITE)请求,或者是包含单个传输的序列的 IOCTL_SPB_EXECUTE_SEQUENCE I/O 控制请求。 控制器应在执行传输之前选择目标,并在传输完成后释放目标。 |
SpbRequestSequencePositionFirst 序列中的第一个 I/O 请求。 此请求是紧跟锁(IOCTL_SPB_LOCK_CONTROLLER)I/O 控制请求的读取或写入请求,用于发出序列的开始信号。 控制器应在执行此传输之前选择目标,目标应在传输完成后保持选中状态。 |
SpbRequestSequencePositionContinue 序列中间的 I/O 请求。 此请求是读取或写入请求,既不是序列中的第一个传输,也不是最后一个传输请求。 在某些情况下,SPB 框架扩展(SpbCx)无法将上次传输标识为 SpbRequestSequencePositionContinue 而不是 SpbRequestSequencePositionLast。 有关详细信息,请参阅以下“备注”部分。 控制器应在启动此传输之前已选择目标,并且目标应在传输完成后保持选中状态。 |
SpbRequestSequencePositionLast 序列中的最后一个 I/O 请求。 此请求是在解锁(IOCTL_SPB_UNLOCK_CONTROLLER)I/O 控制请求之前立即发出信号序列结束的读取或写入请求。 在某些情况下,SpbCx 无法将上次传输标识为 SpbRequestSequencePositionContinue 而不是 SpbRequestSequencePositionLast。 有关详细信息,请参阅以下“备注”部分。 控制器应在启动此传输之前选择目标,并在传输完成后释放目标。 |
SpbRequestSequencePositionMax 仅供内部使用。 |
言论
SPB 控制器的客户端(外围驱动程序)可以通过向总线上的目标设备发送一系列读取和写入请求来执行 I/O 传输序列。 序列中的每个读取或写入请求都占据序列传输列表中的位置。 SPB_REQUEST_SEQUENCE_POSITION 枚举中的值指示此列表中读取和写入请求的相对位置。
SpbRequestGetParameters 方法从 I/O 请求中检索特定于 SPB 的参数值,并将其写入 SPB_REQUEST_PARAMETERS 结构。 这些参数中包含一个 SPB_REQUEST_SEQUENCE_POSITION 枚举值,该值指示 I/O 请求在 I/O 传输序列中的位置,该请求是它的一部分。
如果调用 SpbRequestGetParameters 以检索不属于序列的 I/O 请求的位置值,此方法会将适当的 SPB_REQUEST_SEQUENCE_POSITION 枚举值分配给请求。
对于读取和写入请求,位置值设置为以下值之一:SpbRequestSequencePositionSingle、SpbRequestSequencePositionFirst、SpbRequestSequencePositionContinue或 SpbRequestSequencePositionLast。
如果客户端发送不属于序列的简单读取或写入(IRP_MJ_READ 或 IRP_MJ_WRITE)请求,则位置值设置为 SpbRequestSequencePositionSingle。
如果客户端发送锁(IOCTL_SPB_LOCK_CONTROLLER)请求来向序列的开始发出信号,则序列中第一个传输(读取或写入请求)的位置值 SpbRequestSequencePositionFirst,序列中剩余传输的位置值 SpbRequestSequencePositionContinue。 在这种情况下,SpbCx 无法将 SpbRequestSequencePositionLast 分配给最后一次传输,因为它不知道客户端发送了最后一个读取或写入请求,直到客户端发送结束序列的解锁(IOCTL_SPB_UNLOCK_CONTROLLER)请求。
对于锁定请求,位置值设置为 SpbRequestSequencePositionFirst。 对于解锁请求,位置值设置为 SpbRequestSequencePositionLast。
某些控制器可能支持特殊作,例如,同时读取和写入目标设备的全双工总线传输。 客户端可以通过锁定控制器并发送一系列自定义 I/O 请求来执行自定义序列作,SpbCx 会将这些请求传递给 SPB 控制器驱动程序的 EvtSpbControllerIoOther 回调函数。 在这种情况下,序列中第一个自定义 I/O 请求的位置值 SpbRequestSequencePositionFirst,序列中其余自定义 I/O 请求的位置值 SpbRequestSequencePositionContinue。 当客户端解锁控制器时,序列将结束。 如果 EvtSpbControllerIoOther 回调函数收到不属于序列的自定义 I/O 请求,则此请求的位置值 SpbRequestSequencePositionSingle。
对于 SpbRequestSequencePositionLast的位置值,SPB_REQUEST_PARAMETERS 结构的 长度 成员可以为 0,以指示目标应仅释放,并且不应传输任何 I/O 数据(或者等效),以指示应发生 0 字节传输(如果控制器无法在不运行时钟的情况下释放设备)。
对于 SpbRequestSequencePositionContinue 和 SpbRequestSequencePositionLast的位置值,传输方向可能已从上一次传输变化,SPB 控制器驱动程序可能需要指示总线上可能出现的方向更改(例如,I2C 控制器发出新的 START 条件)。 有关传输方向的详细信息,请参阅 SPB_TRANSFER_DIRECTION。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows 8 开始支持。 |
标头 | spbcx.h (包括 Spb.h) |