9.16. 用户存在检测设备
以下各节说明了基于控制方法的用户存在检测(UPD)设备的操作和定义。
用户存在检测设备可以选择支持电源管理对象(例如 _PS0、_PS3),以允许 OS 管理设备的功耗。
ACPI 控制方法用户存在检测设备的即插即用 ID 为 ACPI000F。
表 9.12 用户存在检测设备
| 对象 | 说明 |
|---|---|
| _UPD | 当前的用户存在检测读数。[必需] |
| _UPP | 用户存在检测轮询频率,以十分之一秒为单位。[可选] |
9.16.1. _UPD(用户存在检测)
该控制方法返回用户存在检测读数,用于指示从该传感器的角度看用户当前是否存在。目前为 UPD 传感器读数定义了三种状态:不存在、存在和未知,分别由值 0x00、0x01 和 0xFF 表示。未知状态用于传达由于某些环境因素或其他瞬时因素,传感器当前无法确定用户是否存在。所有其他值均为保留。
参数:
无
返回值:
一个 Integer,包含用户存在代码:
0x00 - 不存在:该传感器当前未检测到用户。
0x01 - 存在:该传感器当前检测到用户。
0xFF - 未知:该传感器当前无法确定用户是存在还是不存在。
9.16.2. _UPP(用户存在轮询)
该可选对象求值为此用户存在传感器的建议轮询频率(以十分之一秒为单位)。值为零——或者在定义了其他 UPD 对象时该对象不存在——表示 OS 无需轮询传感器即可检测到用户存在的有意义变化(硬件能够生成异步通知)。
参数:
无
返回值:
一个 Integer,包含建议的轮询频率,以十分之一秒为单位。值为零表示不需要轮询。
本规范允许使用轮询,但强烈不建议这样做。OEM 应设计这样的系统:每当用户存在发生有意义的变化时,异步通知 OSPM——从而减轻 OS 承担与轮询相关的开销。
该值以十分之一秒为单位指定。例如,值 10 表示轮询频率为 1 秒。由于这是一个建议值,OSPM 在确定实际使用的轮询频率时还会考虑其他因素。
9.16.3. 用户存在传感器事件
为了向 OSPM 传达用户存在的变化,AML 代码应在用户存在发生变化时发出 Notify(upd_device, 0x80)。OS 接收此通知并调用 _UPD 控制方法来确定当前的用户存在状态。
每当用户存在状态(不存在、存在或未知)之间发生转换时,都应生成 UPD 通知——但粒度应当适当,既能提供合适的响应,又不会因不必要的中断而给系统带来过重负担。