Ala*_*irG 5 c hdmi raspberry-pi
所以我可以使用"tvservice -o"来关闭覆盆子Pi上的HDMI,并使用"tvservice -p"将其重新打开.重新打开之后我显然需要做"fbset -depth 8 && fbset -depth 16"来重新启用帧缓冲区,然后强制重写X11.
我的问题是,我如何在C中这样做?我有一个X11应用程序,我可以管理X11重绘没问题,但如何在C中禁用/重新启用HDMI,以及如何在重新启用HDMI后重新启用帧缓冲?
为了给出背景知识,我有一个无头应用程序作为一种媒体服务器运行,由Android应用程序控制.目前,我暂时禁用超时后关闭HDMI.然而,为了节省能量,我想在不使用应用程序时禁用HDMI,然后重新打开并使用libcec在屏幕上显示RPi应用程序,以确定电视何时使用RPi的HDMI连接打开HDMI和关闭.
如果你想使用纯C,请查看源代码tvservice,这是一个C程序.它可以在github上找到.它似乎使用了中vc_tv_hdmi_power_on_preferred();定义的函数#include "interface/vmcs_host/vc_tvservice.h"
如果您决定tvservice像@ moffeltje的答案那样调用该程序,您可以使用execl()它更安全 - 您必须提供二进制文件的完整路径.(使用execlp,您还可以控制环境变量):
pid_t pid;
pid = fork();
if (0 == pid) {
execl("/opt/vc/bin/tvservice", "-p", NULL);
}
if (-1 == pid) {
// Handle error here, close program?
}
Run Code Online (Sandbox Code Playgroud)