当前位置: 首页 > news >正文

6410键盘应用程序的开发

硬件电路分析
1.jpg 22222.jpg

3.jpg

内核配置支持输入子系统及其键盘驱动
5.jpg


查看/dev/input/eventX是什么类型的事件,
cat /proc/bus/input/devices 
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="gpio-keys"
P: Phys=gpio-keys/input0
S: Sysfs=/class/input/input0
U: Uniq=
H: Handlers=kbd event0 
B: EV=3
B: KEY=180 0 0 40000800 1ec0 0 0 0

I: Bus=0013 Vendor=dead Product=beef Version=0101
N: Name="S3C TouchScreen"
P: Phys=input(ts)
S: Sysfs=/class/input/input1
U: Uniq=
H: Handlers=mouse0 event1 
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=1000003
在linux/input.h 中有input_event结构的定义,该结构定义了键盘的模拟数据,这个文件还定义了标准按键的编码等

struct input_event {
    struct timeval time;  //按键时间
    __u16 type; //类型,在下面有定义
    __u16 code; //要模拟成什么按键
    __s32 value;//是按下还是释放
};

code:事件的代码.
如果事件的类型代码是EV_KEY,该代码code为设备键盘代码.代码植0~127为键盘上的按键代码,0x110~0x116 为鼠标上按键代码,其中0x110(BTN_ LEFT)为鼠标左键,0x111(BTN_RIGHT)为鼠标右键,0x112(BTN_ MIDDLE)为鼠标中键.其它代码含义请参看include /linux /input.h文件. 
如果事件的类型代码是EV_REL,code值表示轨迹的类型.如指示鼠标的X轴方 向REL_X (代 码为0x00),指示鼠标的Y轴方向REL_Y(代码为0x01),指示鼠标中轮子方向REL_WHEEL(代码为0x08).
type: 
#define EV_SYN            0x00
#define EV_KEY            0x01 //键盘
#define EV_REL            0x02 //相对坐标(轨迹球)
#define EV_ABS            0x03 //绝对坐标
#define EV_MSC            0x04 //其他
#define EV_SW            0x05
#define EV_LED            0x11 //LED
#define EV_SND            0x12//声音
#define EV_REP            0x14//repeat
#define EV_FF              0x15 
#define EV_PWR            0x16
#define EV_FF_STATUS  0x17
#define EV_MAX            0x1f
#define EV_CNT            (EV_MAX+1)
value:
事件的值.如果事件 的类型代码是EV_KEY,当按键按下时值为1,松开时值为0;如果事件的类型代码是EV_ REL,value的正数值和负数值分别代表两个不同方向的值.

对于键盘设备,也是采用Read方式打开设备文件,进而进行相应的操作。

6410开发板键盘的定义:
2.jpg
其中,键盘上的HOME与ESC标记反了,而其他正常,其方向键以此为:KEY_LEFT KEY_RIGHT KEY_UP KEY_DOWN KEY_REPLY,而Menu下的菜单分别为:KEY_MENU KEY_BACK KEY_SEND KEY_HOME KEY_END

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/input.h>

int
main ()
{
  int keys_fd;
  char ret[2];
  struct input_event t;

  keys_fd = open ("/dev/input/event0", O_RDONLY);
  if (keys_fd <= 0)
    {
      printf ("open /dev/input/event0 device error!\n");
      return 0;
    }

  while (1)
    {
      if (read (keys_fd, &t, sizeof (t)) == sizeof (t))
        {
          if (t.type == EV_KEY)
            if (t.value == 0 || t.value == 1)
        {
              printf ("key %d %s\n", t.code,
                      (t.value) ? "Pressed" : "Released");
          if(t.code==KEY_BACK)
              break;
        }
        }
    }
  close (keys_fd);

  return 0;
}


程序中出现的问题:
keyboard.c: can't emulate rawmode for keycode 139
key 139 Released
keyboard.c: can't emulate rawmode for keycode 158
key 158 Pressed

目前还不知道这个问题如何解决,不过估计问题出在驱动程序对QTE的支持上,板载的键盘有几个按键对QT不支持。不知道其他人是否有其他的见解。


本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2010/05/26/1744232.html,如需转载请自行联系原作者



相关文章:

  • String.format()的用法(C++ .net)
  • 车站——斐波那契(再做做)
  • Unity 编译 Android 的原理解析和 apk 打包分析
  • zabbix_agentd 服务启动
  • 12_03_Linux软件管理之三yum
  • MyEclipse下Maven的安装配置
  • python闭包与装饰器
  • PHP技能评测
  • 4月13
  • FancyBox的使用技巧 (汇总)
  • 使用Maven对JAVA程序打包-带主类、带依赖【转】
  • CSS3知识点整理一些demo
  • python loss layer: does not need backward computation?
  • [CSS] 点击事件触发的动画
  • ZooKeeper监控平台搭建
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • angular2开源库收集
  • const let
  • CSS相对定位
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • JSONP原理
  • k个最大的数及变种小结
  • Mithril.js 入门介绍
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Tornado学习笔记(1)
  • uva 10370 Above Average
  • 闭包,sync使用细节
  • 搞机器学习要哪些技能
  • 和 || 运算
  • 解决iview多表头动态更改列元素发生的错误
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 少走弯路,给Java 1~5 年程序员的建议
  • 实现简单的正则表达式引擎
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 新书推荐|Windows黑客编程技术详解
  • C# - 为值类型重定义相等性
  • 翻译 | The Principles of OOD 面向对象设计原则
  • (06)金属布线——为半导体注入生命的连接
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (10)STL算法之搜索(二) 二分查找
  • (C#)一个最简单的链表类
  • (简单) HDU 2612 Find a way,BFS。
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十六)一篇文章学会Java的常用API
  • (学习日记)2024.02.29:UCOSIII第二节
  • .describe() python_Python-Win32com-Excel
  • .net core webapi 大文件上传到wwwroot文件夹
  • .net mvc 获取url中controller和action
  • .NET MVC第三章、三种传值方式
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境