Toradex模块背光控制
在Windows CE系统中,背光调节可以在驱动程序之外控制。但有一点需要注意,如果控制背光引脚的寄存器和显示引脚的寄存器是同一个,那么当背光发生变化时,显示驱动状态也会发生相应的变化。详细的信息请参考显示寄存器设置。需要强调的是,这个应用只适用于 Colibri PXA 模块系列。
自动背光控制
默认情况下,在一定时间内当系统中没有用户操作活动,背光将会自动关闭。同样地,一旦发现有用户操作活动,背光将会立即启动。
背光超时的时间可以在控制面板中配置:
Control Panel -> Display
这些配置信息存储在注册表的以下键值中:
[HKCU\ControlPanel\Backlight] ACTimeout =dword:0x00000258 ;Time[seconds] before Backlight is turned off when on external power BatteryTimeout=dword:0x00000258 ;Time[seconds] before Backlight is turned off when on battery power
.
为了避免彻底关闭背光,可以增加以下注册表配置:
; never turn off backlight [HKCU\ControlPanel\Backlight] UseExt =dword:0x00000000 ; 0: don't switch off backlight when on external power UseBattery =dword:0x00000000 ; 0: don't switch off backlight when on battery power
.
在应用程序中控制背光
需要指出的是,您可以使用 ExtEscape() 函数,在应用程序中控制背光。该功能将使用户操作活动/超时检测功能不再起作用。下面的代码展示了 ExtEscape() 函数的基本结构。该函数设置背光状态为 new_backlight, 同时返回之前背光状态值 old_backlight.
DWORD old_backlight; DWORD new_backlight=0; ExtEscape(GetDC(NULL), BACKLIGHT, 4, (char*)&new_backlight, 4, (char*)&old_backlight);
变量r new_backlight 可以使用以下这些数值:
- (NULL) 读取当前背光状态值
- 0 在超时检测之前,立即关闭背光
- 255 开启背光,并重置超时检测定时器,不进行用户操作活动检测
- 256 强制关闭背光,不进行超时检测和用户操作活动检测
- 511 强制开启背光,不进行超时检测和用户操作活动检测
以下代码演示ExtEscape()函数的使用方法:
#define ESCAPECODEBASE 100000 #define MOUSECURSOR (ESCAPECODEBASE + 20) #define BACKLIGHT (ESCAPECODEBASE + 21) #define BACKLIGHT_FORCE_STATE 256 DWORD old_backlight; DWORD new_backlight=0; //Get Backlight Status ExtEscape(GetDC(NULL), BACKLIGHT, 0, NULL, 4, (char*)&old_backlight); //Disable Backlight until user activity new_backlight=0; ExtEscape(GetDC(NULL), BACKLIGHT, 4, (char*)&new_backlight, 4, (char*)&old_backlight); //Enable Backlight until timeout new_backlight=255; ExtEscape(GetDC(NULL), BACKLIGHT, 4, (char*)&new_backlight, 4, (char*)&old_backlight); //Force Backlight OFF new_backlight=0|BACKLIGHT_FORCE_STATE ; ExtEscape(GetDC(NULL), BACKLIGHT, 4, (char*)&new_backlight, 4, (char*)&old_backlight); //Force Backlight ON new_backlight=255|BACKLIGHT_FORCE_STATE ; ExtEscape(GetDC(NULL), BACKLIGHT, 4, (char*)&new_backlight, 4, (char*)&old_backlight);
Display On/Off Events
以下两个手动重置事件用于指示显示器处于打开或者关闭状态:
- DisplayOnEvent
- DisplayOffEvent
WaitForSingleObject() 函数用于获取显示器状态或者等待以上事件。
Linux中PWM背光控制
在我们的载板上,PWM<A> 用于调节LCD亮度。
PWM背光亮度可以通过以下系统文件调节(1代表最亮,255代表最暗):
root@colibri_t20:~# cat /sys/class/backlight/pwm-backlight/bl_power 0 root@colibri_t20:~# echo 1 > /sys/class/backlight/pwm-backlight/bl_power root@colibri_t20:~# echo 0 > /sys/class/backlight/pwm-backlight/bl_power root@colibri_t20:~# cat /sys/class/backlight/pwm-backlight/brightness 224 root@colibri_t20:~# echo 1 > /sys/class/backlight/pwm-backlight/brightness
需要注意的是,Ampire 5.7" LED VGA触摸TFT显示器连接了MECS Tellurium,背光调节的值正好相反(例如255为最亮,1为最暗)。
如果需要将背光自动设置到一个指定的值,你可以创建一个systemd服务。首先,创建文件 /etc/systemd/system/backlight.service.
注意: 在 Vybrid 模块中,PWM背光有一个实例数字(例如/sys/class/backlight/pwm-backlight.0)
[Unit] Description=Backlight brightness service, set and store display brightness setting After=multi-user.target [Service] Type=oneshot RemainAfterExit=true ExecStart=/bin/sh -c 'cat /etc/brightness > /sys/class/backlight/pwm-backlight/brightness' ExecStop=/bin/sh -c 'cat /sys/class/backlight/pwm-backlight/brightness > /etc/brightness' [Install] WantedBy=multi-user.target
重新加载并使能服务。
$ systemctl --system daemon-reload $ systemctl enable backlight
Latest News
Press Release:
Join Toradex at Japan IT Week Spring 2024