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. jquery19 ajax()

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  2. 【深入篇】Andorid中常用的控件及属性

    TextView  android:autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web/email/phone/map/al ...

  3. sync---强制将被改变的内容立刻写入磁盘

    sync命令用于强制被改变的内容立刻写入磁盘,更新超块信息. 在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率.sync命令则 ...

  4. JDBC连接池C3P0

    连接池 1)传统方式找DriverManager要连接.数目是有限的. 2)传统方式的close().并没有将Connection重用.仅仅是切断应用程序和数据库的桥梁,即无发送到SQL命令到数据库端 ...

  5. NYOJ_75 日期计算 (推断这一天是这一年中的第几天)

    题目地址 如题,输入一个日期,格式如:2010 10 24 ,推断这一天是这一年中的第几天. 分析:   官方给的最优答案用了for 和switch语句结合,十分巧妙. 代码 /* 如题,输入一个日期 ...

  6. Trafodion:Transactional SQL on HBase

    Trafodion: Transactional SQL on HBase HBase上实时分布式事务处理 介绍 HBase的SQL能力一直不足.Phoenix缺乏Join能力,eBay提出的kyli ...

  7. 6.Windows 二进制文件 (.exe)安装--终端安装

    转自:http://www.runoob.com/nodejs/nodejs-tutorial.html 32 位安装包下载地址 : http://nodejs.org/dist/v0.10.26/n ...

  8. Filebeat之input和output(包含Elasticsearch Output 、Logstash Output、 Redis Output、 File Output和 Console Output)

    前提博客 https://i.cnblogs.com/posts?categoryid=972313 Filebeat啊,根据input来监控数据,根据output来使用数据!!! Filebeat的 ...

  9. numpy_basic

    一.Numpy是什么 Numerical Python,数值的Python,补充了Python语言所欠缺的数值计算能力. Numpy是其它数据分析及机器学习库的底层库. Numpy完全标准C语言实现, ...

  10. mysql中load data Infile运用

    速度比insert要快20倍.共享一下java程序操作. package com.mysql.csv; import java.sql.Connection; import java.sql.Driv ...