LED 瞬态触发器¶
LED 定时器触发器当前没有激活一次性定时器的接口。目前的支持允许设置两个定时器,一个用于指定状态保持开启的时间,另一个用于指定状态保持关闭的时间。delay_on 值指定 LED 应该保持开启状态的时间段,然后是 delay_off 值,指定 LED 应该保持关闭状态的时间。开启和关闭周期重复进行,直到触发器被停用。没有提供一次性激活的功能来实现需要仅保持一次开启或关闭状态,然后永久保持原始状态的功能。
如果没有一次性定时器接口,用户空间仍然可以使用定时器触发器来设置定时器以保持状态,但是当用户空间应用程序崩溃或退出而没有停用定时器时,硬件将永久保持该状态。
瞬态触发器解决了对一次性定时器激活的需求。瞬态触发器可以像其他 LED 触发器一样启用和禁用。
当 LED 类设备驱动程序注册自身时,它可以指定其支持的所有 LED 触发器和一个默认触发器。在注册期间,将调用默认触发器的激活例程。在 LED 类设备注册期间,LED 状态不会改变。
当驱动程序注销时,将调用当前活动触发器的停用例程,并且 LED 状态更改为 LED_OFF。
驱动程序挂起会将 LED 状态更改为 LED_OFF,而恢复不会更改状态。请注意,挂起和恢复操作与当前启用的触发器之间没有显式交互。当驱动程序处于挂起状态时,LED 状态更改将被挂起。在驱动程序挂起时处于活动状态的任何计时器都将继续运行,而无法实际更改 LED 状态。一旦驱动程序恢复,触发器将再次开始工作。
LED 状态更改使用亮度控制,亮度是常见的 LED 类设备属性。当从用户空间通过 echo 0 > brightness 将亮度设置为 0 时,将导致停用当前触发器。
瞬态触发器使用标准注册和注销接口。在触发器注册期间,对于每个将此触发器指定为其默认触发器的 LED 类设备,将调用触发器激活例程。在注册期间,LED 状态不会改变,除非有另一个触发器处于活动状态,在这种情况下,LED 状态会更改为 LED_OFF。
在触发器注销期间,LED 状态会更改为 LED_OFF。
瞬态触发器激活例程不会更改 LED 状态。它创建其属性并进行初始化。瞬态触发器停用例程将取消在清理和删除其创建的属性之前处于活动状态的任何计时器。它会将 LED 状态恢复为非瞬态状态。当驱动程序被挂起时,无论瞬态状态如何,LED 状态都会更改为 LED_OFF。
瞬态触发器可以在支持此触发器的 LED 类设备上从用户空间启用和禁用,如下所示
echo transient > trigger
echo none > trigger
- 注意
添加一个新的属性 trigger state 来控制状态。
此触发器导出三个属性:activate、state 和 duration。当瞬态触发器被激活时,这些属性被设置为默认值。
duration 允许以毫秒为单位设置定时器值。初始值为 0。
activate 允许根据需要激活和停用由 duration 指定的计时器。初始值和默认值为 0。这将允许在触发器激活后设置 duration。
state 允许用户指定要保持指定持续时间的瞬态状态。
- activate
一次性计时器激活机制。激活时为 1,停用时为 0。当瞬态触发器启用时,默认值为零,以允许设置 duration。
activate 状态表示具有指定 duration 值的计时器正在运行。停用状态表示没有活动的计时器正在运行。
- duration
一次性计时器值。当 activate 设置时,duration 值用于启动只运行一次的计时器。除非用户通过 echo new_value > duration 执行设置,否则此值不会被触发器更改。
- state
要保持的瞬态状态。它有两个值 0 或 1。0 映射到 LED_OFF,1 映射到 LED_FULL。指定的状态将保持一次性计时器的持续时间,然后状态将更改为非瞬态状态,该状态是瞬态状态的反转。如果 state = LED_FULL,则当计时器耗尽时,状态将恢复为 LED_OFF。如果 state = LED_OFF,则当计时器耗尽时,状态将恢复为 LED_FULL。请注意,在将状态更改为指定状态之前,不会检查当前的 LED 状态。驱动程序可能会将这些值映射为反转,具体取决于其在 brightness_set() 接口中为 LED 定义的默认状态,该接口从 led brightness_set() 接口调用以控制 LED 状态。
当计时器过期时,activate 会恢复为停用状态,duration 将保留在设置值,以便在将来设置 activate 时使用。这将允许用户应用程序设置一次时间,并根据需要激活它以运行一次指定的值。当计时器过期时,状态将恢复为非瞬态状态,该状态是瞬态状态的反转
echo 1 > activate
当 duration 不为 0 时,启动计时器 = duration。
echo 0 > activate
取消当前正在运行的计时器。
echo n > duration
存储计时器值,以便下次激活时使用。当前活动的计时器(如果有)将继续运行指定的时间。
echo 0 > duration
存储计时器值,以便下次激活时使用。当前活动的计时器(如果有)将继续运行指定的时间。
echo 1 > state
存储所需的瞬态状态 LED_FULL,以保持指定的持续时间。
echo 0 > state
存储所需的瞬态状态 LED_OFF,以保持指定的持续时间。
不支持的内容¶
计时器激活是一次性的,不支持延长和/或缩短计时器。
示例¶
用例 1
echo transient > trigger
echo n > duration
echo 1 > state
根据需要重复以下步骤
echo 1 > activate - start timer = duration to run once
echo 1 > activate - start timer = duration to run once
echo none > trigger
此触发器旨在用于以下示例用例
用户空间应用程序使用 LED 作为活动指示器。
用户空间应用程序使用 LED 作为一种看门狗指示器 -- 只要应用程序处于活动状态,它就可以保持 LED 点亮,如果它死掉,LED 将自动熄灭。
任何需要瞬态 GPIO 输出的用户空间应用程序使用。