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 传输序列中的位置,该请求是 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 结构的 Length 成员可以为 0,以指示应仅释放目标,并且不应 (传输任何 I/O 数据,或者,如果控制器在没有运行时钟) 的情况下无法释放设备,则表示应进行 0 字节传输。
对于 SpbRequestSequencePositionContinue 和 SpbRequestSequencePositionLast 的位置值,传输方向可能与以前的传输相比发生了变化,SPB 控制器驱动程序可能需要指示总线 (例如 I2C 控制器) 发出新的 START 条件。 有关传输方向的详细信息,请参阅 SPB_TRANSFER_DIRECTION。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 支持从Windows 8开始。 |
标头 | spbcx.h (包括 Spb.h) |