static irqreturn_t pm_interrupt(struct serio *serio,
  unsigned char data, unsigned int flags)
{
 struct pm *pm = serio_get_drvdata(serio);
 struct input_dev *dev = pm->dev;

pm->data[pm->idx] = data;

if (pm->data[0] & 0x80) {
  if (PM_MAX_LENGTH == ++pm->idx) {
   //input_report_abs(dev, ABS_X, pm->data[2] * 128 + pm->data[1]);
   //input_report_abs(dev, ABS_Y, pm->data[4] * 128 + pm->data[3]);
   input_report_abs(dev, ABS_Y, pm->data[1] * 128 + pm->data[2]);
   input_report_abs(dev, ABS_X, pm->data[3] * 128 + pm->data[4]);
   input_report_key(dev, BTN_TOUCH, !!(pm->data[0] & 0x40));
   input_sync(dev);
   pm->idx = 0;
  }
 }

return IRQ_HANDLED;
}

在驱动中如做上修改。

并在应用中加入如下文件:

/**************************************
Copyright: 2013, Tkai
File name: penmount_init.c
Description: 将串口属性由TTY改为M_MOUSE
Author: 陆晓来
Version: v1.0
Date: 2013.3.15
History: 无
**************************************/
#include "stdio.h"
#include "stdlib.h"
#include "sys/ioctl.h"
#include "sys/stat.h"
#include "unistd.h"
#include "fcntl.h"
#include "termios.h"
#include "errno.h"
#include "/opt/OMAP3530/linux-03.00.01.06/include/linux/tty.h"  //根据内核目录修改
#include "/opt/OMAP3530/linux-03.00.01.06/include/linux/serio.h"//根据内核目录修改
#define SERIO_ANY 0xff
#define device "/dev/ttyS0"    //根据实际使用串口资源修改

/*************************************************
Function: setLine()
Description: 设置串口参数
Calls: NULL
Called By: main()
Input: fd->串口文件操作符,flags->数据位数,speed->波特率
Output: NULL
Return: void
Others: NULL
*************************************************/
static void setLine(int fd, int flags, int speed)
{
 struct termios t;
 tcgetattr(fd, &t);
 t.c_cflag = flags | CREAD | HUPCL | CLOCAL;
 t.c_iflag = IGNBRK | IGNPAR;
 t.c_oflag = 0;
 t.c_lflag = 0;
 t.c_cc[VMIN ] = 1;
 t.c_cc[VTIME] = 0;
 cfsetispeed(&t, speed);
 cfsetospeed(&t, speed);
 tcsetattr(fd, TCSANOW, &t);
}

/*************************************************
Function: main()
Description: 主函数,打开串口设置参数并改变属性
Calls: setLine()
Called By: NULL
Input: void
Output: NULL
Return: 执行成功返回整数0,其它返回-1
Others: NULL
*************************************************/
int main(void)
{
 int fd;
 fd = open(device, O_RDWR | O_NOCTTY | O_NONBLOCK);
 if (fd < 0)
 {
  fprintf(stderr, "inputattach: '%s' - %s\n",
   device, strerror(errno));
  return -1;
 }
 setLine(fd, CS8, B9600);
 int ldisc = N_MOUSE;
 if (ioctl(fd, TIOCSETD, &ldisc))
 {
  fprintf(stderr, "inputattach: can't set line discipline\n");
  return -1;
 }
 unsigned long devt = SERIO_PENMOUNT|(SERIO_ANY << 8)|(SERIO_ANY << 16);
 if (ioctl(fd, SPIOCSTYPE, &devt))
 {
  fprintf(stderr, "inputattach: can't set device type\n");
  return -1;
 }
 read(fd,NULL,0);
 return 0; 
}

penmount串口触摸屏加载的更多相关文章

  1. linux内核启动以及文件系统的加载过程

    Linux 内核启动及文件系统加载过程 当u-boot 开始执行 bootcmd 命令,就进入 Linux 内核启动阶段.普通 Linux 内核的启动过程也可以分为两个阶段.本文以项目中使用的 lin ...

  2. ubuntu arm妙算加载cp210x驱动

    在妙算TK1上安装ros后,插上usb串口竟然没有驱动 无奈装 从http://www.silabs.com/products/mcu/pages/usbtouartbridgevcpdrivers. ...

  3. mkimage工具 加载地址和入口地址 内核启动分析

    第三章第二节 mkimage工具制作Linux内核的压缩镜像文件,需要使用到mkimage工具.mkimage这个工具位于u-boot-2013. 04中的tools目录下,它可以用来制作不压缩或者压 ...

  4. Delphi静态加载DLL和动态加载DLL示例

    下面以Delphi调用触摸屏动态库xtkutility.dll为例子,说明如何静态加载DLL和动态加载DLL. 直接上代码. 1.静态加载示例 unit Unit1; interface uses W ...

  5. [转]在BBB启动时自动加载dtbo(或执行脚本、运行程序)

    启动时自动加载dtbo,实际上就是做了一个cape.官方推荐的方法是用eeprom来实现,请参考我的博文<为BBB制作专属自己的cape(一)>和<为BBB制作专属自己的cape(四 ...

  6. Linux驱动的两种加载方式过程分析

    一.概念简述 在Linux下可以通过两种方式加载驱动程序:静态加载和动态加载. 静态加载就是把驱动程序直接编译进内核,系统启动后可以直接调用.静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新 ...

  7. 嵌入式linux加载引导内核和根文件系统的方法

    总体来说,嵌入式Linux内核和根文件的引导与PC机差不多.嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我 们将内核和根文件系统直接烧入到Flash中(包括NOR和NAN ...

  8. 用UBOOT自带loadb命令加载应用程序到SDRAM中运行的方法

    S3C44B0开发板中,用UBOOT自带loadb命令加载应用程序到SDRAM中运行的方法    1.开发板说明:  开发板上已有移植好的UBOOT运行.   2.交叉编译工具链为arm-linu-g ...

  9. 转:A10/A20 Bootloader加载过程分析

    来自:http://blog.csdn.net/allen6268198/article/details/12905425 A10/A20 Bootloader加载过程分析 注:由于全志A10和A20 ...

随机推荐

  1. span标签之间的空隙

    出现的问题: 在html中,当有两个以及两个以上的span标签并列的时候,如果任意两个span之间换行书写的话,那么他们在页面上展现的时候往往会有空隙 解决的办法有两个: 1.将两个span标签写在同 ...

  2. 织梦dedecms简略标题调用标签用法指南

    我们在使用织梦DEDECMS建站过程中,为了使调用的文章标题简短且相对完整(原文标题太长),只好使用了调用简略标题这个方法,使标题显示为简短标题,指向标题时显示完整的标题.并获得文章静态地址链接 下面 ...

  3. Linux命令行 3大技巧归纳

    在软件开发的世界中,作为web端程序猿打交道最多的操作系统相信就是Linux系统了吧.而对于Linux系统的使用,如果能掌握一些小技巧,在程序开发.调试的过程中,相信做事的效率也会有一些提升.下面就和 ...

  4. atexit注册的函数是在main函数之后执行?

    跟atexit函数相识已久,man手册里对atexit的解释是这么一段: The atexit() function registers the given function to be called ...

  5. 安装JAVA JDK注意事项

    1 WIN8系统 安装JDK  我安装的是1.6版本,   64位的 : 2 安装好后  cmd  输入 java -version  正常 java  命令  正常 javac 命令不正常    提 ...

  6. C++ sstream 中处理字符串

    C++引入ostringstream.istringstream.stringstream这三个类,要使用他们创建对象就必须包含<sstream>这个头文件. istringstream的 ...

  7. oracle11g导入到10g

    oracle11g导入到10g http://www.doc88.com/p-0827386468478.html

  8. UML类图常见关系总结

    Unified Modeling Language (UML)又称统一建模语言或标准建模语言. 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realizat ...

  9. Objective-C数据类型、数据类型转换

    数据类型 1.Objective-C数据类型可以分为:基本数据类型.对象数据类型和id类型. 2.基本数据类型有:int.float.double和char类型. 3.对象类型就是类或协议所声明的指针 ...

  10. SQL中如何检查死锁

    SQL中如何检查死锁 编写人:CC阿爸 2014-6-15 在日常SQL数据库的操作中,SQL偶尔会出现表被死锁的问题.比如: 在执行事务时,突然中止事务.系统肯定会锁表. 大批量数据操作时,由于网络 ...