CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 9074|回复: 3

[嵌入式学习]power键 程序应用

[复制链接]
发表于 2014-8-19 15:54:47 | 显示全部楼层 |阅读模式
本帖最后由 @allen 于 2014-9-1 20:41 编辑

更多的基于cubieboard 的学习贴可搜:嵌入式学习

原文 :http://blog.csdn.net/lanmanck/article/details/8423669  

因为我只用到了power 键输入,所以我删了其他部分
做成了按住 power 键  2秒就调用"shuttdown"命令 。 当然也可以改成一按就调用其他命令,这样有需要按键的人就不用去外接个电路,有个power键凑合着用

不用等长按6秒断电,长按2秒关机如下

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <string.h>
  5. #include <sys/types.h>
  6. #include <fcntl.h>
  7. #include <errno.h>
  8. #include <time.h>
  9. #include <linux/input.h>

  10. struct input_event event;

  11. int main(int argc, char **argv)
  12. {
  13.     char          name[64];           /* RATS: Use ok, but could be better */
  14.     char          buf[256] = { 0, };  /* RATS: Use ok */
  15.     unsigned char mask[EV_MAX/8 + 1]; /* RATS: Use ok */
  16.     int           version;
  17.     int           fd = 0;
  18.     int           rc;
  19.     int           i, j;
  20.     char        *tmp;
  21. long unsigned int p_time;
  22. long unsigned int r_time;
  23.         char  *type;

  24. #define test_bit(bit) (mask[(bit)/8] & (1 << ((bit)%8)))


  25.     if (argc > 1) {
  26.         sprintf(name, "/dev/input/event%d", atoi(argv[1]));
  27.         if ((fd = open(name, O_RDWR, 0)) >= 0) {
  28.             printf("%s: open, fd = %d\n", name, fd);
  29.             for (i = 0; i < LED_MAX; i++) {
  30.                 event.time.tv_sec  = time(0);
  31.                 event.time.tv_usec = 0;
  32.                 event.type         = EV_LED;
  33.                 event.code         = i;
  34.                 event.value        = 0;
  35.                 write(fd, &event, sizeof(event));
  36.             }
  37.             
  38.             while ((rc = read(fd, &event, sizeof(event))) > 0) {
  39. /*               printf("%lu.%06lu type 0x%04x; code 0x%04x;"
  40.                        " value 0x%08x; ",
  41.                        event.time.tv_sec,
  42.                        event.time.tv_usec,
  43.                        event.type, event.code, event.value);*/
  44.                 switch (event.type) {
  45.                 case EV_KEY:
  46.                     if (event.code > BTN_MISC) {
  47.                         printf("Button %d %s",
  48.                                event.code & 0xff,
  49.                                event.value ? "press" : "release");
  50.                     } else {
  51.                         printf("Key %d (0x%x) %s",
  52.                                event.code & 0xff,
  53.                                event.code & 0xff,
  54.                                event.value ? "press\n" : "release\n");
  55.                                                 if(event.value){
  56.                                                 
  57.                                                 type= "press";
  58.                                                 }
  59.                                                 else {                 
  60.                               
  61.                                                 type= "release";                                                
  62.                                                 }

  63.         if(type=="press"){
  64.         
  65.               p_time = time(0);
  66.               printf("p_time = %lu\n",p_time);

  67.         }
  68.         else{
  69.         
  70.                r_time = time(0);
  71.                printf("r_time = %lu\n",r_time);
  72.                printf("r_time-p_time = %lu\n",r_time - p_time);
  73.                if((r_time - p_time)>=2){
  74.                                         printf("\n");
  75.                                         system ("echo \n");
  76.                                         system ("echo turn off leds!\n");
  77.                                         system ("echo 0 > /sys/class/leds/blue\:ph21\:led1/brightness");
  78.                                         system("echo 0 > /sys/class/leds/orange\:ph20\:led2/brightness");
  79.                                         system("echo 0 > /sys/class/leds/white\:ph11\:led3/brightness");
  80.                                         system("echo 0 > /sys/class/leds/green\:ph07\:led4/brightness ");
  81.                                         system ("/sbin/shutdown -h now");
  82.                                  }
  83.         }                                                
  84. // printf("   value 0x%08x; ",event.value);
  85.                                        
  86.                     }
  87.                     break;
  88.                 case EV_FF:  printf("FF");   break;
  89.                     break;
  90.                 }
  91.                                                                
  92.             }
  93.             printf("rc = %d, (%s)\n", rc, strerror(errno));
  94.             close(fd);
  95.         }
  96.     }
  97.     return 0;
  98. }
复制代码
$arm-linux-gnueabihf-gcc guanji.c -o guanji

拷贝到板子上,
#./guanji 1 &                  

1 是因为power 对应  /dev/input/event1  , 红外 对应/dev/input/event0 ,我板子的lubuntu  server 是这样的,其他应该有变化吧,
cat /dev/input/even1 按下按键,看有没有反映就是不是知道对应
  

回复

使用道具 举报

发表于 2014-12-29 16:33:34 | 显示全部楼层
看看是什么惊喜
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-3-29 08:10 , Processed in 0.021625 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部