penmount串口触摸屏加载

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; 
}

时间: 2024-08-06 09:15:24

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

Android系统定制——Download Android System 及加载system镜像文件

定制android系统(配置及相关系统的镜像文件),具体可参考:Driver_All_in_One_V1.0--MT6735_6753.pdf文档,特别需要理解的是Download部分. 与之对应的软件是:Smart Phone Flash Tool,一般是在菜单栏的Download部分进行选择操作. Download-agent(下载代理):选择 \升级固件与升级固件的工具\SP_Flash_Tool_exe_Windows_v5.1536.00.000 文件(通常不用特别选择,使用默认的即可

Android应用setContentView与LayoutInflater加载解析机制源码分析

[工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重分享成果] 1 背景 其实之所以要说这个话题有几个原因: 理解xml等控件是咋被显示的原理,通常大家写代码都是直接在onCreate里setContentView就完事,没怎么关注其实现原理. 前面分析<Android触摸屏事件派发机制详解与源码分析三(Activity篇)>时提到了一些关于布局嵌套的问题,当时没有深入解释. 所以接下来主要分析的就是View或者ViewGroup对象是如何添加至应用程

Linux内核启动及文件系统加载过程

上接博文<u-boot之u-boot-2009.11启动过程分析> 当u-boot开始执行bootcmd命令,就进入Linux内核启动阶段,与u-boot类似,普通Linux内核的启动过程也可以分为两个阶段,但针对压缩了的内核如uImage就要包括内核自解压过程了.本文以项目中使用的linux-2.6.37版源码为例分三个阶段来描述内核启动全过程.第一阶段为内核自解压过程,第二阶段主要工作是设置ARM处理器工作模式.使能MMU.设置一级页表等,而第三阶段则主要为C代码,包括内核初始化的全部工作

一步步学习操作系统(2)——在STM32上实现一个可动态加载kernel的&quot;my-boot&quot;

如果要做嵌入式Linux,我们首先要在板子上烧写的往往不是kernel,而是u-boot,这时需要烧写工具帮忙.当u-boot烧写成功后,我们就可以用u-boot附带的网络功能来烧写kernel了.每当板子上电时,u-boot一般会被加载到内存的前半段,如果我们的kernel之前就已经被烧写到开发板了,那么u-boot会加载kernel到内存的后半段并跳转到kernel的起始地址处执行(或者直接跳转到kernel的起始地址处执行,如果kernel可以直接在flash上执行的话.) 如上图所示,绿

Linux内核启动及加载根文件系统

</pre></h1><p><span style="font-family:KaiTi_GB2312;font-size:18px;">上接博文<<a target=_blank href="http://blog.csdn.net/gqb_driver/article/details/8931775" style="text-decoration: none; font-family: 'Mi

ubuntu arm妙算加载cp210x驱动

在妙算TK1上安装ros后,插上usb串口竟然没有驱动 无奈装 从http://www.silabs.com/products/mcu/pages/usbtouartbridgevcpdrivers.aspx#Linux下载 cp210x的驱动 编译生成cp210x.ko insmod cp210x.ko,就可以看到ttyUSB0了. 另外我们还需要ubuntu上电自动加载驱动模块 步骤如下 1. depmod -a 2. 在/etc/modules加入cp210x 3. 拷贝cp210x.ko

uboot加载内核

1.bootcmd:这个参数包含了一些命令,这些命令将在u-boot进入主循环后执行示例: bootcmd=boot_logo;nand read 10000003c0000 300000;bootm          //需要注意的是在bootcmd变量的最后添加了bootm命令. 意思是启动u-boot后,执行boot_logo显示logo信息,然后从nand flash中读内核映像到内存,然后启动内核. 2.bootargs这个参数设置要传递给内核的信息,主要用来告诉内核分区信息和根文件系

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

一.概念简述 在Linux下可以通过两种方式加载驱动程序:静态加载和动态加载. 静态加载就是把驱动程序直接编译进内核,系统启动后可以直接调用.静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新编译和下载内核,效率较低.若采用静态加载的驱动较多,会导致内核容量很大,浪费存储空间. 动态加载利用了Linux的module特性,可以在系统启动后用insmod命令添加模块(.ko),在不需要的时候用rmmod命令卸载模块,采用这种动态加载的方式便于驱动程序的调试,同时可以针对产品的功能需求,进行

移动网站性能优化:网页加载技术概览

性能一直是网站成功的关键.越来越多的研究已经证明,不管是小型电商,还是像沃尔玛那样的连锁店,即使是页面加载时间方面的细微改善,都可以带来更多的业务,更多的广告收入,更多的用户粘性和更多的客户满意度. 在过去几年,Web开发者都是基于改善硬件或者提高带宽速度来优化用户体验.但是最近几年,爆炸式的移动Web浏览器的使用打破了这个途径.低带宽,高延迟,小内存,低处理器性能的移动设备环境,迫使开发者不得不想办法通过优化前端页面的性能来满足用户的性能预期. 在强调如何解决移动端性能问题上,这篇文章总结了一