1. 修改数码相框以自动关闭LCD
关闭LCD : 在读取触摸屏的函数中判断:如果15S内无数据,执行: echo auto > /sys/devices/platform/mylcd/power/control
打开LCD : 如果有触触摸屏动作发生, 执行: echo on > /sys/devices/platform/mylcd/power/control

alarm(时间) : 若干秒后,内核会发出SIGALRM给APP, APP可以提供信号处理函数
思路:
a. 注册信号处理: signal(SIGALRM, function);
该函数用来关闭LCD
b. 在读取输入事件的进程里, 执行: alarm(15)
c. 如果一直没有读到触摸屏的数据, 定时器就会超时导致function被调用从而关闭LCD
d. 如果读到触摸屏数据, 再次执行alarm(15), 会更新超时时间为当前之后的15S
如果之前关闭过LCD, 还需要执行: 打开LCD

下面三个函数都在input_manager.c中

static void *InputEventThreadFunction(void *pVoid)
{
  T_InputEvent tInputEvent;

  /* 定义函数指针 */
  int (*GetInputEvent)(PT_InputEvent ptInputEvent);
  GetInputEvent = (int (*)(PT_InputEvent))pVoid;

  while (1)
  {
    alarm(15); /* 如果15秒内没有按压触摸屏,则超时 */
    if(0 == GetInputEvent(&tInputEvent))
    {
      /* 唤醒主线程, 把tInputEvent的值赋给一个全局变量 */
      /* 访问临界资源前,先获得互斥量 */
      pthread_mutex_lock(&g_tMutex);
      g_tInputEvent = tInputEvent;

      /* 唤醒主线程 */
      pthread_cond_signal(&g_tConVar);

      /* 释放互斥量 */
      pthread_mutex_unlock(&g_tMutex);

      alarm(15); /* 如果读到触摸屏事件,修改超时时间 */

      /* 如果LCD已经被关闭,则打开它 */
      if (!g_bLCDOn) {
      system("echo on > /sys/devices/platform/mylcd/power/control");
      g_bLCDOn = 1;
      }
    }
  }

  return NULL;
}

int InputInit(void)
{
  int iError = 0;

  signal(SIGALRM, SigAlrmFn);

  // iError = StdinInit();
  iError |= TouchScreenInit();
  return iError;
}

static void SigAlrmFn(int Sigal)
{
  /* 关闭LCD */
  system("echo auto > /sys/devices/platform/mylcd/power/control");
  g_bLCDOn = 0;
}

http://blog.csdn.net/dsg333/article/details/4870639

配置内核添加驱动:
a. drivers/input/touchscreen/Makefile
#obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o
obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c_ts.o

make menuconfig :
Device Drivers --->
  Input device support --->
    [*] Touchscreens --->
      <*> Samsung S3C2410/generic touchscreen input driver

b. drivers/video/Makefile
obj-$(CONFIG_FB_S3C2410) += lcd_4.3.o

make uImage

echo auto > /sys/devices/platform/mylcd/power/control 无法使用,(执行sysfs.c下的control_store函数,echo on也是执行该函数,里面根据on和auto走不同分支)
因为dev->power.runtime_auto初始值是1,

成功使用echo auto > /sys/devices/platform/mylcd/power/control命令来关LCD的前提是dev->power.runtime_auto等于0
可以执行: echo on > /sys/devices/platform/mylcd/power/control 使得它等于0
但是也不适用于我们的情况,因为:
open(/dev/fb0)会让LCD的使用计数加1
再 echo on会让LCD的使用计数也加1
然后执行echo auto只能让使用计数减1变为1,lcd屏幕还是不会休眠

要再次修改驱动

在lcd的驱动中修改使用pm_runtime_forbid来增加计数,同时会把dev->power.runtime_auto设置为零

static int mylcd_open(struct fb_info *info, int user)
{
  //pm_runtime_get_sync(&lcd_dev.dev);
  pm_runtime_forbid(&lcd_dev.dev);//使用这个函数同样会导致增加计数,并且会使得dev->power.runtime_auto设置为零
return 0;
}

static int mylcd_release(struct fb_info *info, int user)
{
pm_runtime_mark_last_busy(&lcd_dev.dev);
//pm_runtime_put_sync_autosuspend(&lcd_dev.dev);
pm_runtime_allow(&lcd_dev.dev);
return 0;
}

2. 编写支持开关机(suspend)的应用程序
思路:
读按键, 得到某个值就执行 echo mem > /sys/power/state(休眠整个系统)

对于输入子系统,读到的数据是一个input_event结构体

struct input_event {
struct timeval time;//man gettimeofday 可以查看需要包含什么头文件
unsigned short type;//按键类型
unsigned short code;//按键值
int value;//按下还是松开
};

执行应用程序:./power /dev/event1

按下L按键,屏幕关闭;再次按下,屏幕打开

6、修改应用程序数码相框以支持自动关闭LCD的更多相关文章

  1. 让c#的exe只要被修改就无法运行,支持混淆和数字证书

    原文:让c#的exe只要被修改就无法运行,支持混淆和数字证书 首先用sdk的sn工具或者makecert工具生成公钥和密钥,推荐makecert,做自己的证书,我做了一个受信任的根证书放在受信任的根证 ...

  2. centos中文乱码修改字符编码使用centos支持中文

    如何你的centos显示中文乱码,只要修改字符编码使centos支持中文就可以了,没有这个文件可以创建它,下面是修改步骤 一.中文支持 安装中文语言包: 复制代码 代码如下: yum groupins ...

  3. 小程序Promise不支持finally解决方案

    小程序Promise不支持finally解决方案 代码片段 点击链接即可在微信开发者工具中查看代码wechatide://minicode/t2eidemj7P3X git地址 基本思路 小程序的Pr ...

  4. 怎样在 Ubuntu 中修改默认程序

    导读 作为一个新手,你需要知道如何在 Ubuntu 中修改任何默认程序,这也是我今天在这篇指南中所要讲的. 对于我来说,安装 VLC 多媒体播放器是安装完 Ubuntu 16.04 该做的事中最先做的 ...

  5. 如何在Ubuntu Unity上修改应用程序图标

    转自如何在Ubuntu Unity上修改应用程序图标 这篇文章将教大家在Ubuntu Unity上修改应用程序图标,这个教程适合于Ubuntu 14.04, Ubuntu 13.10, Ubuntu ...

  6. 凹凸曼的修改zencart 程序(经典!)

    ==================================================================================================== ...

  7. 林兴爆料小程序很快可以支持各个 App 直接打开小程序

    在微信开放平台基础高级产品经理林兴演讲的当场,他爆料了微信小程序一个轰动性新能力:小程序很快可以支持各个 App 直接打开小程序!没错,你没有听错,简单来说,在不久以后,所有的 App 里面都可以看到 ...

  8. 怎样在Ubuntu中修改默认程序

    这个新手指南会向你展示如何在 Ubuntu Linux 中修改默认程序.对于我来说,安装 VLC 多媒体播放器是安装完 Ubuntu 16.04 该做的事中最先做的几件事之一.为了能够使我双击一个视频 ...

  9. 神器如 dnSpy,无需源码也能修改 .NET 程序

    dnSpy 是 0xd4d 开发的 .NET 程序调试神器. 说它是神器真的毫不为过!它能在完全没有源码的情况下即时调试程序,甚至还能修改程序!本文讲向大家介绍如何使用 dnSpy 修改 .NET 程 ...

随机推荐

  1. 如何动态改变audio的播放的src

    如何动态改变audio的播放的src 一.总结 一句话总结:js方式在请求外部网站的时候行,php方式在请求内外部资源都行.因为php走在js前面,所以问题可以从php方面想办法. 1.如何使用js控 ...

  2. js实现删除确认提示框

    js实现删除确认提示框 一.实例描述 防止用户小心单击了“删除”按钮,在用户单击“删除”按钮后,给出一个提示,让用户确认此次操作是否正确. 二.效果 三.代码 <!DOCTYPE html> ...

  3. css3新特性选择器(补充)

    1.选择p标签中的第一个字符 p:first-letter{ color:red; font-size:25px; } 2.选择p标签中的第一行 p:first-line{ color:red; fo ...

  4. Kinect 开发 —— 控制PPT播放

    实现Kinect控制幻灯片播放很简单,主要思路是:使用Kinect捕捉人体动作,然后根据识别出来的动作向系统发出点击向前,向后按键的事件,从而使得幻灯片能够切换. 这里的核心功能在于手势的识别,我们在 ...

  5. element-ui一些注意点:

    1.change ($event,“你要传递的其他值”),使用el-select组件时,想传递多个值. 或者 在el-option上的value属性上传递对象 eg: :value="{'c ...

  6. host---域名查询

    host命令是常用的分析域名查询工具,可以用来测试域名系统工作是否正常. 选项 -a:显示详细的DNS信息: -c<类型>:指定查询类型,默认值为“IN“: -C:查询指定主机的完整的SO ...

  7. reboot---重启Linux系统

    reboot命令用来重新启动正在运行的Linux操作系统. 语法 reboot(选项) 选项 -d:重新开机时不把数据写入记录文件/var/tmp/wtmp.本参数具有“-n”参数效果: -f:强制重 ...

  8. 【Uva 1633】Dyslexic Gollum

    [Link]: [Description] 输入正整数n和k(1≤n≤400,1≤k≤10),求长度为n的01串中有多少个不含长度至少 为k的回文连续子串.例如,n=k=3时只有4个串满足条件:001 ...

  9. MyBatis学习总结(16)——Mybatis使用的几个建议

    1.Mapper层参数为Map,由Service层负责重载. Mapper由于机制的问题,不能重载,参数一般设置成Map,但这样会使参数变得模糊,如果想要使代码变得清晰,可以通过service层来实现 ...

  10. 洛谷 P2105 K皇后

    P2105 K皇后 题目描述 小Z最近捡到了一个棋盘,他想在棋盘上摆放K个皇后.他想知道在他摆完这K个皇后之后,棋盘上还有多少了格子是不会被攻击到的. (Ps:一个皇后会攻击到这个皇后所在的那一行,那 ...