精华内容
下载资源
问答
  • 很少用到的串口触摸屏驱动,本驱动本人工作中移植的,可以正常使。很少用到的串口触摸屏驱动,本驱动本人工作中移植的,可以正常使。
  • 最新USB COM 串口 触摸屏驱动及说明1375
  • 触摸屏驱动+串口驱动

    2013-06-27 20:35:05
    触摸屏驱动+串口驱动
  • cp -f ./ touchattach /usr/bin 配置开机自启动触控屏幕 , 在/etc/loacl.rc 加入: modprobe rtouch touchattach -rtouch --daemon /dev/ttyXXX # XXX根据实际情况而定 将触摸屏校正程序LinearAp拷贝值目标机的/usr/...
    1. 开启Framebuffer。
    # make menuconfig
    [*]VGA text console
    [*]Video mode selection support
    <*> Framebuffer Console support
    
    1. 将安装包/rtouch/目录内的"rtouch.c" 复制到"/kernel source code/drivers/input/touchscreen/"目录内。
    2. 编辑"/kernel source code/drivers/input/touchscreen/Makefile" , 加入:
    obj-$(CONFIG_TOUCHSCREEN_RTOUCH) += rtouch.o
    
    1. 编辑"/kernel source code/drivers/input/touchscreen/kconfig" , 加入:
    config TOUCHSCREEN_RTOUCH
    tristate "Risintech serial touchscreens"
    select SERIO
    help
    Say Y here if you have a Risintech serial touchscreen connected to
    your system.
    If unsure, say N.
    To compile this driver as a module, choose M here: the
    module will be called rtouch.
    
    1. 编辑kernel 的".config" 将SERIO 相关参数打开:
    CONFIG_SERIO=y
    CONFIG_SERIO_SERPORT=y
    CONFIG_SERIO_RAW=y
    CONFIG_INPUT_TOUCHSCREEN=y
    

    并增加下行:

    CONFIG_TOUCHSCREEN_RTOUCH=y
    
    1. 编译kernel。
    2. 并用新内核制作根文件系统。
    3. 将新根文件系统烧写到目标机上。
    4. 交叉编译机上执行安装包内/touchattach/目录内的cp.sh 编译touchattach,请自行修改cp.sh 加上自己的cross compiler。
    5. 将编译好的touchattach从交叉编译机复制到目标机的/usr/bin/下。
    cp -f ./ touchattach /usr/bin
    
    1. 配置开机自启动触控屏幕 , 在/etc/loacl.rc 加入:
    modprobe rtouch
    touchattach -rtouch --daemon /dev/ttyXXX       # XXX根据实际情况而定
    
    1. 将触摸屏校正程序LinearAp拷贝值目标机的/usr/bin/。
    2. 执行校正程序,但是报错“touchscreen device not found!”
    # LinearAp
    
    展开全文
  • 十三、Linux驱动之触摸屏驱动

    千次阅读 2018-11-29 12:18:01
     常用的触摸屏类型有两种:阻性触摸屏和容性触摸屏。阻性触摸屏是一种传感器,它将矩形区域中触摸点(X, Y)的物理位置转换为代表X坐标和Y坐标的电压。触摸屏包含上下叠合的两个透明层阻性材料,中间由一种弹性材料隔...

    1. 基本概念

        常用的触摸屏类型有两种:阻性触摸屏和容性触摸屏。阻性触摸屏是一种传感器,它将矩形区域中触摸点(X, Y)的物理位置转换为代表X坐标和Y坐标的电压。触摸屏包含上下叠合的两个透明层阻性材料,中间由一种弹性材料隔开。当触摸屏表面受到压力时,顶层和底层之间会产生触碰。所用的电阻式触摸屏都采用分压器原理来产生代表X坐标和Y坐标的电压。如下图所示,分压器是通过将两个电阻进行串联来实现的。上面的电阻R1连接正参考电压Vref,下面的电阻R2接地。连个电阻连接点处的电压测量值与下面那个电阻的阻值成正比。

    四线触摸屏示意图如下:

        四线触摸屏包含两个阻性层。其中一层在屏幕的左右边各有一条垂直总线,另一层在屏幕的底部和顶部各有一条水平总线,见上图。为了X轴方向进行测量,将左侧总线偏置为0V,右侧总线偏置为Vref。将顶部或底部总线连接到ADC,当顶层和底层相接触时即可做一次测量。

    2. 分析设备

    2.1 引脚连接

        本人使用的是JZ2440v3开发板,该开发板CPU使用的是S3C2440A,使用的是4线触摸屏,该4线连接在2440AIN4~AIN7引脚上,如图:

    2.2 s3c2440触摸屏接口

    查看s3c2440手册ADC & TOUCH SCREEN INTERFACE触摸屏章节触摸屏A/D转换器和触摸屏接口框图如下:


        值得注意的是两个中断产生的时间,INT_TC在点击触摸屏时发生,INT_ADC在数模转换完成时发生。手册中还提到了A/D的转换时间,如下公式:

        ADC的工作频率最大为2.5MHZ,正确使用需要设置寄存器ADCCON->PRSCVL更改分频系数,对于JZ2440这里要设置ADC的工作频率为1MHZ(即设置ADCCON的bit6为49)
    s3c2440手册提到了触摸屏接口的4种模式:
        1. 正常转换模式
        2. 分离式X/Y位置转换方式
        3. 自动X/Y位置转换模式
        4. 等待中断模式
    从数据手册中我们可以得到设置模式相关信息:
        1. 设置为自动X/Y位置转换模式
            设置寄存器ADCTSC=0x0c,系统会把X坐标存入寄存器ADCDAT0,把Y坐标存入ADCDAT1。
        2. 设置为等待中断模式
            设置寄存器ADCTSC=0xd3(设置等待按下中断信号到来)
            设置寄存器ADCTSC=0x1d3(设置等待松开中断信号到来)

    触摸屏工作流程:
        1. 选择XY坐标转换模式(独立转换/连续转换)
        2. 设置触摸屏到等待状态
        3. 如果中断发生,启动ADC转换(转换获得的坐标值会存入相应的寄存器中)
        4. 获得XY坐标,返回到步骤2

    3. 编写代码

        对于触摸屏驱动,也是使用输入子系统框架进行编写,输入子系统相关内容在九、Linux驱动之输入子系统分析里详细分析了,内核已经写好了驱动事件处理部分(触摸屏即对应tsdev.c),所以我们只需要写具体的驱动设备部分,然后内核会将两部分自动连接。先整理代码整体流程。

    3.1 代码流程

    3.1.1 在init入口函数中

        1. 分配一个input_dev结构体
        2. 设置input_dev的成员
            2.1 设置input_dev->evbit,即设置支持按键事件,绝对位移事件
           
    2.2 设置input_dev-> keybit,支持按键事件的触摸屏笔尖按下事件
           
    2.3 设置input_dev-> absbit,支持ABS_X、ABS_Y、 ABS_PRESSURE
               
    2.3.1 input_set_abs_params(ts.dev, ABS_X, 0, 0x3FF, 0, 0);  //ADC是10位,所以第四个参数设置为3FF
               
    2.3.2 input_set_abs_params(ts.dev, ABS_Y, 0, 0x3FF, 0, 0);  //ADC是10位,所以第四个参数设置为3FF
               
    2.3.3 input_set_abs_params(ts.dev, ABS_PRESSURE, 0, 1, 0, 0);  //压力最多就是1
       
    3. 注册input_dev驱动设备到内核中
        4. 设置触摸屏相关的硬件
            4.1 开启ADC时钟,使用clk_get ()和clk_enable()函数
           
    4.2 ioremap获取寄存器地址,设置寄存器ADCCON =(1<<14)|(49<<6),设置时钟分频
           
    4.3 设置寄存器ADCDLY=0xffff,ADC启动延时时间设为最大值,使触摸电压稳定后再发出IRQ_TC中断
           
    4.4 开启IRQ_TC中断、开启IRQ_ADC中断
           
    4.5 初始化定时器,增加触摸滑动功能
           
    4.6 最后设置寄存器ADCTSC=0x0d3,开启IRQ_TC中断,即设置触摸屏进入等待按下中断模式(当触摸屏被按下,进入IRQ_TC中断函数)

    3.1.2 在出口函数中

        1. 注销内核里的input_dev
       
    2. 释放input_dev
       
    3. 释放中断、删除定时器、iounmap注销地址

    3.1.3 在IRQ_TC中断函数中

        1. 若判断触摸屏当前为松开状态,设置寄存器ADCTSC =0XD3,即设置触摸屏为等待按下模式
       
    2. 若判断触摸屏当前为按下状态,设置为XY自动转换模式,启动一次ADC转换(ADC转换成功后,会进入IRQ_ADC中断函数)

    3.1.4 在IRQ_ADC中断函数中

        1. 若判断触摸屏当前为松开状态,设置寄存器ADCTSC =0XD3,即设置触摸屏为等待按下模式
        2. 若判断触摸屏当前为按下状态,获取ADCDAT0/1的低10位,计算出X/Y方向坐标值。多次测量(多次设置为XY自动转换模式并启动ADC转换,转换完成就会再次进入IRQ_ADC中断函数),测量4次后判断精度,满足则上报数据,否则设置成等待松开模式,10ms后启动定时器超时函数

    3.1.5 在定时器超时函数中

        1. 若判断触摸屏当前为松开状态,设置寄存器ADCTSC =0XD3,即设置触摸屏为等待按下模式
       
    2. 若判断触摸屏当前为按下状态,设置为XY自动转换模式,启动一次ADC转换(ADC转换成功后,会进入IRQ_ADC中断函数)

    3.2 编写代码

    触摸屏驱动程序s3c_ts.c完整代码如下:

    #include <linux/errno.h>
    #include <linux/kernel.h>
    #include <linux/module.h>
    #include <linux/slab.h>
    #include <linux/input.h>
    #include <linux/init.h>
    #include <linux/serio.h>
    #include <linux/delay.h>
    #include <linux/platform_device.h>
    #include <linux/clk.h>
    #include <asm/io.h>
    #include <asm/irq.h>
    #include <asm/plat-s3c24xx/ts.h>
    #include <asm/arch/regs-adc.h>
    #include <asm/arch/regs-gpio.h>
    
    static struct input_dev *s3c_ts_dev;
    
    struct s3c_ts_regs{
    	unsigned long adccon;
    	unsigned long adctsc;
    	unsigned long adcdly;
    	unsigned long adcdat0;
    	unsigned long adcdat1;
    	unsigned long adcupdn;
    };
    static  struct s3c_ts_regs * s3c_ts_regs;
    static struct timer_list ts_timer;
    
    /*进入等待按下模式*/
    static void enter_wait_pen_down_mode(void)
    {
    	s3c_ts_regs->adctsc=0xd3;		
    }
    
    /*进入等待松开模式*/
    static void enter_wait_pen_up_mode(void)
    {
    	s3c_ts_regs->adctsc = 0x1d3;
    }
    
    /*进入XY自动转换模式*/
    static void enter_measure_xy_mode(void)
    {
    	s3c_ts_regs->adctsc = (1<<3)|(1<<2);
    }
    
    /*启动一次ADC转换*/
    static void start_adc(void)
    {
    	s3c_ts_regs->adccon |=(1<<0); 
    }
    
    static void s3c_ts_timer_function(unsigned long data)
    {
    	if (s3c_ts_regs->adcdat0 & (1<<15))	//如果触摸屏当前为松开状态
    	{
    		input_report_abs(s3c_ts_dev, ABS_PRESSURE, 0);//上报压力值为0
    		input_report_key(s3c_ts_dev, BTN_TOUCH, 0);//上报BTN_TOUCH按键值松开
    		input_sync(s3c_ts_dev);//上报同步事件,通知系统有事件上报
    		enter_wait_pen_down_mode();///*进入等待按下模式*/
    	}
    	else
    	{
    		/* 进入测量X/Y坐标模式并启动一次ADC */
    		enter_measure_xy_mode();
    		start_adc();
    	}
    }
    static int s3c_filter_ts(int x[], int y[])
    {
    #define ERR_LIMIT 10
    
    	int avr_x, avr_y;
    	int det_x, det_y;
    
    	avr_x = (x[0] + x[1])/2;
    	avr_y = (y[0] + y[1])/2;
    
    	det_x = (x[2] > avr_x) ? (x[2] - avr_x) : (avr_x - x[2]);
    	det_y = (y[2] > avr_y) ? (y[2] - avr_y) : (avr_y - y[2]);
    
    	if ((det_x > ERR_LIMIT) || (det_y > ERR_LIMIT))
    		return 0;
    
    	avr_x = (x[1] + x[2])/2;
    	avr_y = (y[1] + y[2])/2;
    
    	det_x = (x[3] > avr_x) ? (x[3] - avr_x) : (avr_x - x[3]);
    	det_y = (y[3] > avr_y) ? (y[3] - avr_y) : (avr_y - y[3]);
    
    	if ((det_x > ERR_LIMIT) || (det_y > ERR_LIMIT))
    		return 0;
    	
    	return 1;
    }
    static irqreturn_t pen_down_up_irq(int irq, void *dev_id)
    {
    	if (s3c_ts_regs->adcdat0 & (1<<15))		//如果触摸屏当前为松开状态
    	{
    		input_report_abs(s3c_ts_dev, ABS_PRESSURE, 0);//上报压力值为0
    		input_report_key(s3c_ts_dev, BTN_TOUCH, 0);//上报BTN_TOUCH按键值松开
    		input_sync(s3c_ts_dev);//上报同步事件,通知系统有事件上报
    		enter_wait_pen_down_mode();///*进入等待按下模式*/
    	}
    	else
    	{
    		/* 进入测量X/Y坐标模式并启动一次ADC */
    		enter_measure_xy_mode();
    		start_adc();
    	}
    	return IRQ_HANDLED;
    }
    
    static irqreturn_t adc_irq(int irq, void *dev_id)
    {
    	static int cnt=0;
    	static int x[4],y[4];
    
    	if (s3c_ts_regs->adcdat0 & (1<<15))	//如果触摸屏当前为松开状态
    	{
    		input_report_abs(s3c_ts_dev, ABS_PRESSURE, 0);//上报压力值为0
    		input_report_key(s3c_ts_dev, BTN_TOUCH, 0);//上报BTN_TOUCH按键值松开
    		input_sync(s3c_ts_dev);//上报同步事件,通知系统有事件上报
    		enter_wait_pen_down_mode();///*进入等待按下模式*/
    		cnt=0;
    	}
    	else
    	{
    		x[cnt]=s3c_ts_regs->adcdat0 & 0x3ff;
    		y[cnt]=s3c_ts_regs->adcdat1 & 0x3ff;
    		cnt++;
    		if(cnt==4)
    		{
    			if (s3c_filter_ts(x, y))
    			{
    				input_report_abs(s3c_ts_dev, ABS_X, (x[0]+x[1]+x[2]+x[3])/4);//上报X方向值
    				input_report_abs(s3c_ts_dev, ABS_Y, (y[0]+y[1]+y[2]+y[3])/4);//上报Y方向值
    				input_report_abs(s3c_ts_dev, ABS_PRESSURE, 1);//上报压力方向值
    				input_report_key(s3c_ts_dev, BTN_TOUCH, 1);//上报BTN_TOUCH按键值按下
    				input_sync(s3c_ts_dev);//上报同步事件,通知系统有事件上报
    			}
    			cnt=0;
    			enter_wait_pen_up_mode();
    			/* 启动定时器处理长按/滑动的情况 */
    			mod_timer(&ts_timer, jiffies + HZ/100);
    		}
    		else
    		{
    			/* 进入测量X/Y坐标模式并启动一次ADC */
    			enter_measure_xy_mode();
    			start_adc();
    		}
    	}
    	return IRQ_HANDLED;
    }
    
    static int s3c_ts_init(void)
    {
    	struct clk* clk;
    	/*1.		分配一个input_dev结构体*/
    	s3c_ts_dev=input_allocate_device();
    	
    	/*2.		设置*/
    	/*2.1.	能产生哪类事件*/
    	set_bit(EV_KEY, s3c_ts_dev->evbit);
    	set_bit(EV_ABS, s3c_ts_dev->evbit);
    
    	/*2.2.	能产生这类事件的哪些事件*/
    	set_bit(BTN_TOUCH, s3c_ts_dev->keybit);
    	input_set_abs_params(s3c_ts_dev, ABS_X, 0, 0x3FF, 0, 0);//s3c2410手册ADC是10位,所以第四个参数设置为3FF
    	input_set_abs_params(s3c_ts_dev, ABS_Y, 0, 0x3FF, 0, 0);
    	input_set_abs_params(s3c_ts_dev, ABS_PRESSURE, 0, 1, 0, 0);
    	/*3.		注册*/
    	input_register_device(s3c_ts_dev);
    	
    	/*4.		硬件相关操作*/
    	/*4.1.	使能时钟(设置CLKCON[15])*/
    	clk=clk_get(NULL,"adc");
    	clk_enable(clk);
    
    	/*4.2.	设置s3c2440的ADC/ts寄存器*/
    	s3c_ts_regs=ioremap(0x58000000, sizeof(struct s3c_ts_regs));
    	s3c_ts_regs->adccon = (1<<14)|(49<<6);
    	
    	/*
    	*必须得进入等待按下中断或者等待松
    	*开中断模式"ts_pen"这个中断才能在触摸
    	*屏被按下或松开时被触发。
    	*/
    	request_irq(IRQ_TC, pen_down_up_irq, IRQF_SAMPLE_RANDOM, "ts_pen", NULL);
    	request_irq(IRQ_ADC, adc_irq, IRQF_SAMPLE_RANDOM, "adc", NULL);
    
    	s3c_ts_regs->adcdly = 0xffff;	//设置ADCDLY为最大值, 这使得电压稳定后再发出IRQ_TC中断
    
    	init_timer(&ts_timer);
    	ts_timer.function = s3c_ts_timer_function;
    	add_timer(&ts_timer);
    	
    	enter_wait_pen_down_mode();
    
    	return 0;
    }
    
    static void s3c_ts_exit(void)
    {
    	input_unregister_device(s3c_ts_dev);
    	input_free_device(s3c_ts_dev);
    
    	free_irq(IRQ_TC,NULL);
    	free_irq(IRQ_ADC,NULL);
    	iounmap(s3c_ts_regs);
    	
    	del_timer(&ts_timer);
    }
    module_init(s3c_ts_init);
    module_exit(s3c_ts_exit);
    MODULE_LICENSE("GPL");
    
    

    Makefile完整代码如下:

    KERN_DIR = /work/system/linux-2.6.22.6    //内核目录
    
    all:
    	make -C $(KERN_DIR) M=`pwd` modules 
    
    clean:
    	make -C $(KERN_DIR) M=`pwd` modules clean
    	rm -rf modules.order
    
    obj-m	+= s3c_ts.o
    

    4. 测试

    内核:linux-2.6.22.6
    编译器:arm-linux-gcc-3.4.5
    环境:ubuntu9.10

    4.1 配置内核

        1. 重新配置内核,将内核自带的触摸屏驱动配置为模块。在linux-2.6.22.6内核目录下执行:
          make menuconfig
        2. 配置步骤如下:
          Device Drivers  --->
              Input device support  --->
                  [*]   Touchscreens  --->
                      < >   S3C2410/S3C2440 touchscreens 
    (将内核自带的触摸屏驱动去掉)

    4.2 重烧内核

        1. 编译内核与模块
          make uImage
       
    2. 将linux-2.6.22.6/arch/arm/boot下的uImage烧写到开发板,网络文件系统启动。

    4.3 测试

         首先安装新驱动。在开发板目录上执行:
          insmod s3c_ts.ko
          ls /dev/event*

         
          此时新出现了/dev/event0这个设备,就是我们写的触摸屏驱动。继续执行:
          hexdump /dev/event0
          此时再点一下触摸屏,串口端输入如下:
         
        第1列表示hexdump序列号(如0000000)
        第2、3列表示秒(如013c 0000)
        第4、5列表示微妙(如c7c6 0000)
        第6列表示type(如0003表示ABS绝对位移类型,0001表示按键类型)
        第7列表示code(如0000表示x方向ABS_X,0001表示y方向ABS_Y,0018表示ABS_PRESSURE,014a表示BTN_TOUCH)
        第8、9列表示对应type的对应code值(如020b 0000)

    4.4 安装tslib

        1. tslib-1.4.tar.gz放到服务器上,在ubuntu执行以下命令:
          tar xzf tslib-1.4.tar.gz  (解压文件)
          cd tslib
          ./autogen.sh
          mkdir tmp
          echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
          ./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/tmp
          make 
    (编译)
          make install  (安装到tmp)
          cp tmp /work/nfs_root/first_fs/ts_dir -rfd  (将tmp目录复制到网络文件系统目录)

        2. 网络文件系统启动开发板,进入刚才安装好的tslib目录,执行:
          cd /ts_dir/tmp
          cp * / -rfd 
    (再将该目录里所有内容拷贝到开发板的根目录里)

        3. 安装lcd相关驱动,lcd相关内容参考十二、Linux驱动之LCD驱动开发板上执行命令如下:
          insmod cfbcopyarea.ko
          insmod cfbfillrect.ko
          insmod cfbimgblt.ko
          insmod lcd.ko 
    (安装lcd相关驱动)
          insmod s3c_ts.ko  (安装触摸屏驱动)

        4. 修改 /etc/ts.conf文件,开发板上执行命令如下:
          vi /etc/ts.conf
         

        改为(去掉第二行的#号和第一个空格)
         

        5. 设置触摸屏的环境变量。开发板上执行命令如下:
          export TSLIB_TSDEVICE=/dev/event0  (触摸屏是哪个设备就写哪个)
          export TSLIB_CALIBFILE=/etc/pointercal
          export TSLIB_CONFFILE=/etc/ts.conf
          export TSLIB_PLUGINDIR=/lib/ts
          export TSLIB_CONSOLEDEVICE=none
          export TSLIB_FBDEVICE=
    /dev/fb0   (lcd设备)

        6. 校验。开发板上执行如下:
          ts_calibrate  (开发板上此时会出现校验触摸点)
         

        7. 测试 。开发板上执行如下:
          ts_test  (就可以在lcd上绘画了!)
         
    PS:在第1点中将tmp目录复制到网络文件系统目录时,将一些测试程序如ts_calibrate 、ts_test 等拷贝到了网络文件系统bin目录下。

     

     

    展开全文
  • SAMKOON显控触摸屏SA5.0及以下版本USB驱动文件
  • 1)PenMount Device Driver for Linux 2)tslib resource 3)some exmples of touchscreen 4)Android penmount driver
  • Linux serial touch 设计总结概述:最近在做嵌入式linux下串口触摸屏设计,遇到一些问题,经过查找资料和请教同事,总算把问题解决了,事后有把linux相关的内核代码仔细看了一遍,为了有点成果,特别写了个总结。...

    Linux serial touch 设计总结

    概述:

    最近在做嵌入式linux下串口触摸屏设计,遇到一些问题,经过查找资料和请教同事,总算把问题解决了,事后有把linux相关的内核代码仔细看了一遍,为了有点成果,特别写了个总结。如有任何问题请联系yxj_5421@http://www.doczj.com/doc/87b94b1e227916888486d76d.html,转载请标明出处。

    系统资源:

    Linux:2.6.36 UI:QT+TSLIB

    硬件资源不关心

    设计方法:

    有两种实现途径。

    1、是将要使用的串口单独拿出来,作为一个platform总线设备实现,在嵌入式平

    台mach文件里面,加上串口中断号和寄存器首地址,然后将这个串口注册成

    一个platform总线设备。在驱动probe函数里面需要得到这个串口中断号以及

    寄存器映射地址,通过寄存器映射地址设置串口波特率,数据位,停止位等,

    通过中断号注册中断等,然后调用input_register_device注册一个input设备。

    在中断里面得到外面触摸屏的数据,然后根据input touch协议上报触摸数据。

    这种方法实现简单明了,不需要和linux的tty,serio等打交道。但是要求知道

    串口硬件spec,比如寄存器等,而且这个串口就只能给触摸屏使用了,不能作

    为tty使用。因为是嵌入式开发,因此很容易知道硬件spec,而且嵌入式平台

    一旦确定,那么这个串口肯定就是给触摸屏使用了。因此在嵌入式平台上,推

    荐使用这个方法。

    2、是将串口作为一个serio总线设备,利用linux内核提供serio总线驱动,通过设

    置对应的串口,调用serport提供的函数将串口当做serio总线设备,在驱动里

    面需要按照serio总线设备驱动的框架来实现,这方面的例子linux里面有很多,

    比如touchright.c,在模块init函数里面调用serio_register_driver注册serio总线

    设备驱动,如果serio总线上对应的serio设备存在,就调用connect函数,在

    这个函数里面调用input_register_device注册一个input设备。具体驱动不再分

    析了,很简单,相信各位都能看的懂。

    至此,两种方法都实现了串口触摸屏的驱动,讲到这里是不是就完了,非也,本文的重点还在后面,请看下面分析:

    第一种方法只要驱动模块被加载,就会在/dev/input下面创建一个eventx节点,tslib就能访问这个节点,获得触摸坐标,然后送给qt。

    第二种方法驱动模块加载后,并没有创建eventx节点,也就是说connect函数没有被调用,按照linux驱动模型来看,就是serio总线上还没有对应的serio设备,因此驱动加载时没有对应的设备,就不会调用connect函数,这时的串口还是作为一个linux tty设备存在。

    我遇到的问题就是serio驱动加载了,但是没有创建eventx节点,查找资料也只有一个说是要把tty设置成N_MOUSE,然后读,说的不清楚,也不知道怎么实现,经过自己摸索,终于把问题解决了。

    Linux 启动后串口形式:

    展开全文
  • 通常来说,玩家为了保证游戏正常运行,在新的驱动推出之后,会先观望一段时间;但Win10的强制更新包括显卡驱动,也许会造成某些游戏无法正常运行。 以上就是win10怎么样 win10系统介绍的全部内容了。

    Windows 10的一大变化是“开始”菜单的回归,Windows 10的“开始”菜单与旧版Windows非常相似,但增添了对Windows 8磁贴的支持。

    74868b56a7aa44eb199d002d894d3e73.png

    磁贴是可以移动、改变大小的,“开始”菜单具有高度的可定制性。Windows 10“开始”菜单中的磁贴功能与Windows 8中的磁贴相似。Windows 10还保留了能显示个性化信息的Windows 8动态磁贴。与以前的版本相比,“开始”菜单中的搜索栏功能更强大,用户开始输入搜索关键字时,Windows 10将开始尝试在本地计算机和Web上搜索相关信息

    兼容性

    Win10作为新一代系统,很多软件和游戏的兼容性,包括DirectX 12支持,都还需要等待微软与游戏厂商优化改进,总的来说,Win10要比之前的系统都好,不过Win10初期可能会出现很多兼容性问题,建议大家还是多耐心的等等,假以时日,win10一定会像xp和win7一样成为经典。win10系统也支持的全平台模式,意思就是如果你有笔记本、台式机、平板电脑、手机等等设备,可以同时多个设备一起运行。

    b4de28375df89b13cbdc02f87584fe9d.png

    稳定性

    褒贬不一,现在的win10 发行有一段时间了,微软发行前会进行稳定性测试,并且也在不断更新补丁,这也是一个新系统所经历的过程,希望会越来越稳定。

    9d0ddc281e9654974191c43fe3e3d9a7.png

    安全性

    由于集成有能保护用户不会受到互联网恶意件攻击的功能强大的反病毒工具,Windows 10是微软有史以来最安全的操作系统。尽管使Windows 10计算机远离病毒比以往更容易,用户仍然可以采取一些措施,确保数据的安全。有数款功能强大的免费工具,可以保护计算机不会感染恶意软件。用户还需要遵守一些原则,避免使自己面临受到攻击的风险。

    其他

    win10虽然添加了很多小功能,但是依然有一个令人困扰地方,就是自动的强制升级,这对于游戏用户来说并不是一个好消息。通常来说,玩家为了保证游戏正常运行,在新的驱动推出之后,会先观望一段时间;但Win10的强制更新包括显卡驱动,也许会造成某些游戏无法正常运行。

    以上就是win10怎么样 win10系统介绍的全部内容了。

    展开全文
  • SAMKOON显控AK系列HMI触摸屏USB驱动程序文件
  • 最近调试一个红外触摸屏,既有USB,又有串口两种协议,两种协议都会用到。 1. 需要通过串口发送命令去开关触摸屏的USB 触摸功能 2. 切换串口触摸的点数 static void gen_ir_process_data(struct gen_ir *pgen_ir...
  • RK3288 新的触摸屏驱动移植过程

    千次阅读 2018-10-30 09:55:19
    1.触摸屏驱动一般都可以从供应商得到驱动的DEMO, 1.png (43.59 KB, 下载次数: 4) 下载附件  2015-8-25 16:58 上传   这些就是我们从供应商那得到的代码,要移植一款驱动,就必须先看懂原来的驱动,...
  • 一、触摸屏概述触摸屏作为一种输入设备,是目前最简单、方便、自然的一种人机交互方式。按照触摸屏的工作原理和传输信息的介质,可以将触摸屏分为四种:电阻式、电容感应式、红外线式和表面声波式。每一种触摸屏都有...
  • 布拉本达触摸屏维修:上电黑屏、 花屏、暗屏、蓝屏、白屏、闪屏、碎屏,无背光、背光暗、对比度低、有背光无字符,上电无反应、上电烧保险,不能正常开机、进入不了系统,触摸无反应、触摸响应慢、触摸偏移、 触摸...
  • 电阻式触摸屏这种触摸屏利用压力感应进行控制触摸屏触摸屏.电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏,这是一种多层的复合薄膜,它以一层玻璃或硬塑料平板作为基层,表面涂有一层透明氧化金属...
  • linux 串口触摸屏调试记录

    千次阅读 2016-04-07 10:26:56
    这几天在调试串口触摸屏,网上找了下似乎说的都不大清楚,这里记录下. 实现方法网上说有好几种,这里是将串口作为一个serio总线设备,利用linux内核提供serio总线驱动,通过设置对应的串口,调用serport提供的函数将...
  • 将USB接口触摸屏插入电脑,HID标准触摸屏会自动安装驱动,等待驱动安装完成。点击触摸屏,看触摸屏是否在电脑上可以正常使用。2.鼠标右键点击我的电脑,点击“设备管理器”WIN7以上系统如果没有“设备管理器”点击”...
  • 关于 触摸屏驱动,其实也是input输入子系统,只不过是一个升级版罢了。 我所说的都是基于韦老大所说,再加上自己的理解。这里关于输入子系统再做一些补充: —————–入子系统体系————— 设备事件层: ...
  • 此代码来源开发板卖家例程,但又不局限于该单片机板,使用的是89C516单片机驱动触摸屏触摸屏驱动型号可以在头文件里面选择,支持多种。仅供学习使用,请于下载后24小时内删除。
  • 设计了一块嵌入式电路板,运行linux系统,主控CPU为px30,需要适配一块触摸驱动IC为GT917S的5.0寸触摸屏。 SDK中原本适配的驱动IC为gsl680,.config配置如下: 取消gslX680 touchpad driver for 9tripod linux,...
  • 51单片机也可以驱动触摸屏,看你们怕不(这压缩包还包括相应的字模软件,arm7的程序)
  • 代表触摸屏对应的按键被按下 ) */  input_report_key(&ts.dev, BTN_TOUCH, 1);  /*  报告触摸屏的状态, 1 表明触摸屏被按下  */  input_report_abs(&ts.dev, ABS_PRESSURE, 1);    /*  等待...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,268
精华内容 2,507
关键字:

串口触摸屏驱动