LED 瞬态触发

leds 定时器触发器当前没有激活一次性定时器的接口。 目前的支持允许设置两个定时器,一个用于指定状态保持开启的时间,另一个用于指定状态保持关闭的时间。 delay_on 值指定 LED 应保持在开启状态的时间段,然后是 delay_off 值,指定 LED 应保持在关闭状态的时间段。 开启和关闭周期重复,直到触发器被停用。 没有一次性激活的规定来实现需要保持一次开启或关闭状态然后永远保持在原始状态的功能。

如果没有一次性定时器接口,用户空间仍然可以使用定时器触发器来设置定时器以保持状态,但是当用户空间应用程序崩溃或消失而没有停用定时器时,硬件将永久保持在该状态。

瞬态触发解决了对一次性定时器激活的需求。 可以像其他 leds 触发器一样启用和禁用瞬态触发器。

当 led 类设备驱动程序注册自身时,它可以指定其支持的所有 leds 触发器和默认触发器。 在注册期间,将调用默认触发器的激活例程。 在注册 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,当 duration 不为 0 时。

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 输出的用户空间应用程序使用。