代码框架分析led-class.c (led 子系统框架的入口)
维护 led 子系统的所有 led 设备,为 led 设备提供注册操作函数: led_classdev_register()devm_led_classdev_register()注销操作函数:led_classdev_unregister()devm_led_classdev_unregister();电源管理的休眠和恢复操作函数: led_classdev_suspend()led_classdev_resume();用户态操作接口:brightness 、max_brightnessled-core.c
抽象出 led 操作逻辑,封装成函数导出,供其它文件使用:led_init_core(): 核心初始化;led_blink_set(): 设置led闪烁时间:led_blink_set_oneshot() : 闪烁一次led_stop_software_blink() : led停止闪烁led_set_brightness() : 设置led的亮度led_update_brightness : 更新亮度led_sysfs_disable : 用户态关闭led_sysfs enable : 用户态打开leds_list : leds链表;leds_list_lock : leds链表锁led-triggers.c
维护 led 子系统的所有触发器,为触发器提供注册操作函数: led_trigger_register()devm_led_trigger_register()led_trigger_register_simple()注销操作函数: led_trigger_unregister()led_trigger_unregister_simple()以及其它触发器相关的操作函数ledtrig-timer.c、ledtrig-xxx.c
以 ledtrig-timer.c 为例入口函数调用 led_trigger_register() 注册触发器,注册时候传入 led_trigger 结构体,里面有 activate 和 deactivate 成员函数指针,作用是生成 delay_on 、 delay_off 文件同时还提供 delay_on 和 delay_off 的用户态操作接口卸载时,使用 led_trigger_unregister() 注销触发器leds-gpio.c、leds-xxx.c :
以 leds-gpio.c 为例在通过设备树或者其它途径匹配到设备信息后,将调用 probe() 函数,然后再根据设备信息设置 led_classdev,最后调用 devm_led_classdev_register() 注册 led 设备。led_classdev 结构体代表 led 实例:
struct led_classdev { const char *name;//名字 enum led_brightness brightness;//亮度 enum led_brightness max_brightness;//最大亮度 int flags; /* lower 16 bits reflect status */#define led_suspended (1 < < 0) /* upper 16 bits reflect control information */#define led_core_suspendresume (1 < < 16)#define led_blink_oneshot (1 < < 17)#define led_blink_oneshot_stop (1 < < 18)#define led_blink_invert (1 < < 19)#define led_sysfs_disable (1 < < 20)#define set_brightness_async (1 < < 21)#define set_brightness_sync (1 < < 22)#define led_dev_cap_flash (1 < /sys/class/leds/led1/brightnesscat /sys/class/leds/led1/brightnesscat /sys/class/leds/led1/max_brightness2、闪烁
cat /sys/class/leds/led1/trigger会看到 trigger_list[none] mmc0 mmc1 mmc2 timer其中的 timer 这个 trigger 是 ledtrig-timer.c 中模块初始化的时候注册进去的echo timer > /sys/class/leds/led1/trigger这一句会调用led_trigger_store()- > led_trigger_set()- > trigger- >activate(led_cdev);从而调用 ledtrig-timer.c 文件里 的timer_trig_activate(),在 /sys/class/leds/led1/ 下创建 delay_on、delay_off 两个文件echo 100 > /sys/class/leds/led1/delay_onecho 200 > /sys/class/leds/led1/delay_off这样会闪烁,亮 100ms 灭 200ms3、关闭 led
echo 0 > /sys/class/leds/led1/delay_on或echo 0 > /sys/class/leds/led1/brightness
利用TM4C129x构建嵌入式网络服务器(3)
时机是C5ISR的核心
浅谈KUKA机器人的X11现场布线
上海市经济信息化委副主任一行莅临思岚科技调研考察
HANMAC手机发布会在沪举行 致力打造私属定制手机
Linux Led子系统代码框架分析
Nvidia最新AI特技 可修改制作以假乱真的天气视频
3.15 晚会:过节,还是过“劫”? LED企业丑态百出
芯片设计不简单,董明珠对芯片棋局是否误判?
模组中的贵族—KK模组的替换品牌
水解UV胶和UVLED固化机整体解决方案
华为P10 Plus、小米Mix、Vivo X6play哪款手机性价比最高?配置、价格、外形、人气大比拼!
如何制作无线数字音频广播系统
华为:大批老用户可升级EMUI11和鸿蒙OS
工业过程智能制造的实现目标
如何降低紫外线灯管的击穿电压呢?
AMD引领嵌入式应用迈向新高度
什么是机载激光雷达?
国外研究人员开发出新型有机太阳能电池 暗房转换率高达25%
MCP存储器以及MCP存储器的应用介绍