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. 7.Web Service 调用天气代码

    1. 2500多个城市天气预报 WEB服务公用事业 Endpoint:http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx Disco: ...

  2. Android SecurityException

    public boolean checkNetwork() { boolean result = false; try { Context context = this.getApplicationC ...

  3. 12、UVC&V4L2的关系

    UVC是一种usb视频设备驱动.用来支持usb视频设备,凡是usb接口的摄像头都能够支持 V4L2是Linux下的视频采集框架.用来统一接口,向应用层提供API UVC: USB video clas ...

  4. Mybatis 一对多 多对1

    http://blog.csdn.net/z69183787/article/details/46833565 http://blog.csdn.net/rain097790/article/deta ...

  5. 【hadoop之翊】——CentOS6.5 Linux上面编译Hadoop2.4源代码

    今天来说说编译hadoop源代码的事情吧~ 1.首先下载源代码 地址:http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.4.0/ 2.加压t ...

  6. actionbar-去掉背景的阴影

    今天发现一个问题,就是actionbar跟界面的交界处,会有一个阴影,通过调查发现,这个阴影是actionbar的.然后通过在网上找资料,完美解决了问题.解决方法如下 1.在这个actionbar所在 ...

  7. 引用 Windows Server 2003 FTP服务器配置详解

    引用 昆神之星 的 Windows Server 2003 FTP服务器配置详解 1.FTP文件传输协议,主要用于计算机之间文件传输,是互联网上仅次于www的第二大服务.本文主要演示如何在Window ...

  8. 洛谷P2147 [SDOI2008]Cave 洞穴勘测

    题目描述 辉辉热衷于洞穴勘测. 某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假 ...

  9. JavaScript学习总结(6)——js弹出框、对话框、提示框、弹窗总结

    一.JS的三种最常见的对话框 [javascript] view plaincopy //====================== JS最常用三种弹出对话框 =================== ...

  10. 洛谷 P1000 超级玛丽游戏

    P1000 超级玛丽游戏 题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 题目描述 超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级 ...