penmount串口触摸屏加载

发布者:幸福花开最新更新时间:2024-08-12 来源: cnblogs关键字:加载 手机看文章 扫描二维码
随时随地手机看文章

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' - %sn',
   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 disciplinen');
  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 typen');
  return -1;
 }
 read(fd,NULL,0);
 return 0; 
}


关键字:加载 引用地址:penmount串口触摸屏加载

上一篇:linux 简单的DMA例程
下一篇:ioctl和unlock_ioctl的区别

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved