精华内容
下载资源
问答
  • 很少用到的串口触摸屏驱动,本驱动本人工作中移植的,可以正常使。很少用到的串口触摸屏驱动,本驱动本人工作中移植的,可以正常使。
  • 最新USB COM 串口 触摸屏驱动及说明1375
  • 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
    
    展开全文
  • 触摸屏驱动+串口驱动

    2013-06-27 20:35:05
    触摸屏驱动+串口驱动
  • 最近调试一个红外触摸屏,既有USB,又有串口两种协议,...2. 切换串口触摸的点数 static void gen_ir_process_data(struct gen_ir *pgen_ir) { struct input_dev *dev = pgen_ir-&gt;dev; char num = pgen_...

    最近调试一个红外触摸屏,既有USB,又有串口两种协议,两种协议都会用到。

    1. 需要通过串口发送命令去开关触摸屏的USB 触摸功能

    2. 切换串口触摸的点数

    static void gen_ir_process_data(struct gen_ir *pgen_ir)
    {
    	struct input_dev *dev = pgen_ir->dev;
    	char num = pgen_ir->data[41];
    	char mtouch = 0;
    	unsigned char *buf = pgen_ir->data;
    	
    	for(i=0; i< num; i++){
    		buf = &(pgen_ir->data[6*i+5]);
    
    		if(buf[0]==0x03 || (buf[0]==0x02 && touch[i] == 0xff))
    		{
    			mtouch = 1;
    			touch[i] = buf[0];
    		}			
    		else if(buf[0]==0x02 && touch[i] == 0x03){
    			mtouch = 0;
    			touch[i] = 0xFF;
    		}
    	
    		if(mtouch)
    		{
    			input_report_abs(dev, ABS_MT_POSITION_X, GEN_IR_GET_XC(buf));
    			input_report_abs(dev, ABS_MT_POSITION_Y, GEN_IR_GET_YC(buf));
    			input_mt_sync(dev);
    		}
    		else
    		{
    			if(num == 1)
    				input_mt_sync(dev);
    
    		}
    	}
    	input_sync(dev);
    }
    
    static irqreturn_t gen_ir_interrupt(struct serio *serio,
    		unsigned char data, unsigned int flags)
    {
    	struct gen_ir* pgen_ir = serio_get_drvdata(serio);
    	bool error = false;
    	char i = 0;
    	static unsigned int sum = 0;
    	static bool untouch = false;
    	pgen_ir->data[pgen_ir->idx] = data;
    
    	switch(pgen_ir->idx)
    	{
    		case 0:
    			if(pgen_ir->data[0] != 0x1F)
    				error = true;
    			break;
    		case 1:
    			if(pgen_ir->data[1] != 0xF7)
    				error = true;
    			break;
    		case 2:
    			if(pgen_ir->data[2] != 0x2B && pgen_ir->data[2] != 0xFC)
    				error = true;
    			break;
    		case 3:
    			if(pgen_ir->data[3] != 0 && pgen_ir->data[3] != 0x30)
    				error = true;
    			break;
    			
    		default:
    			break;
    	}
    	if(!error)
    		sum += data;
    	else
    		sum = 0;
    	if((pgen_ir->idx++) == 42 || error)
    	{
    		if( (unsigned char)(sum - pgen_ir->data[42]) == pgen_ir->data[42])
    		gen_ir_process_data(pgen_ir);
    
    		pgen_ir->idx = 0;
    		sum = 0;
    		untouch = false;
    	}
    
    	return IRQ_HANDLED;
    }
    
    static void gen_ir_disconnect(struct serio *serio)
    {
    	struct gen_ir* pgen_ir = serio_get_drvdata(serio);
    
    	input_get_device(pgen_ir->dev);
    	input_unregister_device(pgen_ir->dev);
    	serio_close(serio);
    	serio_set_drvdata(serio, NULL);
    	input_put_device(pgen_ir->dev);
    	kfree(pgen_ir);
    }
    
    static int gen_ir_connect(struct serio *serio, struct serio_driver *drv)
    {
    	struct gen_ir *pgen_ir;
    	struct input_dev *input_dev;
    	int err;
    
    	pgen_ir = kzalloc(sizeof(struct gen_ir), GFP_KERNEL);
    	input_dev = input_allocate_device();
    	if (!pgen_ir || !input_dev) {
    		err = -ENOMEM;
    		goto fail1;
    	}
    
    	pgen_ir->serio = serio;
    	pgen_ir->dev = input_dev;
    	snprintf(pgen_ir->phys, sizeof(pgen_ir->phys), "%s/input0", serio->phys);
    
    	input_dev->name = "Serial TouchScreen";
    	input_dev->phys = pgen_ir->phys;
    	input_dev->id.bustype = BUS_RS232;
    	input_dev->id.vendor = 0x1ff7;
    	input_dev->id.product = 0x0013;
    	input_dev->id.version = 0x0001;
    	input_dev->dev.parent = &serio->dev;
    
    	set_bit(EV_SYN, input_dev->evbit);
    	set_bit(EV_ABS, input_dev->evbit);
    	set_bit(ABS_MT_POSITION_X,  input_dev->absbit);
    	set_bit(ABS_MT_POSITION_Y,  input_dev->absbit);
    	set_bit(INPUT_PROP_DIRECT, input_dev->propbit); //这个属性必须设,否则触摸点只是一个圆圈,并且触点坐标跟指示位置还对不上
    	
    	input_set_abs_params(pgen_ir->dev, ABS_MT_POSITION_X, GEN_IR_MIN_XC, GEN_IR_MAX_XC, 0, 0);
    	input_set_abs_params(pgen_ir->dev, ABS_MT_POSITION_Y, GEN_IR_MIN_YC, GEN_IR_MAX_YC, 0, 0);
    	
    	serio_set_drvdata(serio, pgen_ir);
    	err = serio_open(serio, drv);
    	if (err)
    		goto fail2;
    
    	err = input_register_device(pgen_ir->dev);
    	if (err)
    		goto fail3;
    
    	return 0;
    .............
    }

     

    展开全文
  • 最近一直在ESP8266上折腾一块从淘宝上找回来的2.4'' TFT 的串口触摸屏,分辨率是240x320的基于 ILI9341驱动,具体型号是 TJCTM24024-SPI 就是下面的这块。 之前买了一块3.2''的,到手后找线路和驱动时...

    最近一直在ESP8266上折腾一块从淘宝上找回来的2.4'' TFT 的串口触摸屏,分辨率是240x320的基于 ILI9341驱动,具体型号是 TJCTM24024-SPI 就是下面的这块。

    之前买了一块3.2''的,到手后找线路和驱动时才知道是个并口的,要STM32才能正常驱动或者得去个转接块将并口转成SPI,真是坑死哥了!在Google上查了许久发现要在ESP8266上使用彩屏的TFT得选这个小的,找到后果断出手,到货后才发现还是和Google上能快速找到的ESP驱动的资料大相径庭,真是作啊~~~

    原因是大多在网上找到的ESP8266接2.8''~2.2''的TFT都是些不带触摸的,问淘宝上的卖家也是一头雾水(丫的根本不懂知道自已卖的是啥)。皇天不负有心人,最终还是让哥给找到了方法!

    先来讲讲线路与硬件的连接方法吧,我用的是NodeMCU 以下是它们的连接方式:

    MyTouchSPIShield.png

    (因为找不到TJCTM24024-SPI的fzz文件,所以只能用找资料找到的连接图了,待以后找到了它的fzz再做一个像样的吧。)

    固件

    在上面的 tft28esp.zip 文件中有一些示例,我没有直接去写一些应用与示例而是拿现成的,因为被折腾太久了心急于试试这个屏的显示效果所以直接实行拿来主义,

    以下是其中的一个触摸的示例,直接在Arduino IDE 打开上传到NodeMCU里面就可以跑了

    #include <Arduino.h>
    #include <SPI.h>
    
    #include <Adafruit_ILI9341esp.h>
    #include <Adafruit_GFX.h>
    #include <XPT2046.h>
    
    // Modify the following two lines to match your hardware
    // Also, update calibration parameters below, as necessary
    
    // For the esp shield, these are the default.
    #define TFT_DC 2
    #define TFT_CS 15
    
    Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
    XPT2046 touch(/*cs=*/ 4, /*irq=*/ 5);
    
    Adafruit_GFX_Button button;
    
    void setup() {
      delay(1000);
      
      Serial.begin(115200);
      SPI.setFrequency(ESP_SPI_FREQ);
    
      tft.begin();
      touch.begin(tft.width(), tft.height());  // Must be done before setting rotation
      Serial.print("tftx ="); Serial.print(tft.width()); Serial.print(" tfty ="); Serial.println(tft.height());
      tft.fillScreen(ILI9341_BLACK);
      // Replace these for your screen module
      touch.setCalibration(209, 1759, 1775, 273);
      button.initButton(&tft, 100, 100, 70, 40, ILI9341_DARKCYAN, ILI9341_BLUE, ILI9341_GREENYELLOW, "Clear", 2);
      button.drawButton();
      
    }
    
    static uint16_t prev_x = 0xffff, prev_y = 0xffff;
    
    void loop() {
        uint16_t x, y;
      if (touch.isTouching()) {
        touch.getPosition(x, y);
    //  Serial.print("x ="); Serial.print(x); Serial.print(" y ="); Serial.println(y);
        if (prev_x == 0xffff) {
          tft.drawPixel(x, y,ILI9341_BLUE);
        } else {
          tft.drawLine(prev_x, prev_y, x, y,ILI9341_BLUE);
        }
        prev_x = x;
        prev_y = y;
      } else {
        prev_x = prev_y = 0xffff;
      }
      
      
      button.press(button.contains(x, y)); // tell the button it is pressed
      
    
    // now we can ask the buttons if their state has changed
        if (button.justReleased()) {
            tft.fillScreen(ILI9341_BLACK);
            button.drawButton(); // draw normal
        }
    
        if (button.justPressed()) {
            button.drawButton(true); // draw invert!
        }
    
      delay(20);
    }
    

    运行效果如下:

    更简单的办法

    如果不想测试触摸功能,也可以直接用Adafruit 自带的示例:

    打开这个示例后记得要改一下Pin的声明,因为我用的是NodeMCU不是Uno:

    // For the Adafruit shield, these are the default.
    #define TFT_DC 2
    #define TFT_CS 5
    

    上传后就可以看到更丰富的测试的效果了:

    总的来说,对这个屏还是挺满意的价格也只是36加上运费也就40来块钱的样子,显示速度很流畅,触摸也挺准确的是一个可用来做一些高端IoT项目的可选件。

    其它参考

    展开全文
  • linux 串口触摸屏调试记录

    千次阅读 2016-04-07 10:26:56
    这几天在调试串口触摸屏,网上找了下似乎说的都不大清楚,这里记录下. 实现方法网上说有好几种,这里是将串口作为一个serio总线设备,利用linux内核提供serio总线驱动,通过设置对应的串口,调用serport提供的函数将...

    这几天在调试串口触摸屏,网上找了下似乎说的都不大清楚,这里记录下.

    实现方法网上说有好几种,这里是将串口作为一个serio总线设备,利用linux内核提供serio总线驱动,通过设置对应的串口,调用serport提供的函数将串口当做serio总线设备,在驱动里面需要按照serio总线设备驱动的框架来实现,在内核源码drivers/input/touchscreen下提供了两个例子,touchright.c和touchit123.c,可以参考这两个例子编写驱动.我的驱动是在网上抄的,源码如下

    /*
     *Egalax serial touchscreen driver
     *
     * Copyright (c) 2004-2016
     *
     * Based on Touchright driver (drivers/input/touchscreen/touchit213.c)
     *
     * Zolt??n B??sz??rm??nyi <zboszor@xxxxx>
     */
    /*
     * This program is free software; you can redistribute it and/or modify it
     * under the terms of the GNU General Public License version 2 as published
     * by the Free Software Foundation.
     */
    
    #include <linux/errno.h>
    #include <linux/kernel.h>
    #include <linux/module.h>
    #include <linux/slab.h>
    #include <linux/input.h>
    #include <linux/serio.h>
    #include <linux/init.h>
    
    #define DRIVER_DESC	"EETI Egalax serial touchscreen driver"
    
    MODULE_AUTHOR("Zolt??n B??sz??rm??nyi <zboszor@xxxxx>");
    MODULE_DESCRIPTION(DRIVER_DESC);
    MODULE_LICENSE("GPL");
    
    /*
     * Definitions & global arrays.
     */
    #define SERIO_EGALAX	0x3f
    #define EGALAX_FORMAT_MAX_LENGTH 6
    #define EGALAX_RESPONSE_BEGIN_BYTE 0x80
    #define EGALAX_FORMAT_PRESSURE_BIT 0x40
    #define EGALAX_FORMAT_TOUCH_BIT 0x01
    #define EGALAX_FORMAT_RESOLUTION 0x06
    
    #define EGALAX_MIN_XC 0
    #define EGALAX_MAX_XC 0x4000
    #define EGALAX_MIN_YC 0
    #define EGALAX_MAX_YC 0x4000
    
    #define EGALAX_GET_XC(data, resbits, shift) ((((data[1] & (resbits)) << 7) | (data[2] & 0x7f)) << shift)
    #define EGALAX_GET_YC(data, resbits, shift) ((((data[3] & (resbits)) << 7) | (data[4] & 0x7f)) << shift)
    #define EGALAX_GET_TOUCHED(data) (EGALAX_FORMAT_TOUCH_BIT & data[0])
    
    /*
     * Per-touchscreen data.
     */
    
    struct egalax {
    	struct input_dev *dev;
    	struct serio *serio;
    	int idx;
    	int bytes;
    	int resbits;
    	int shift;
    	unsigned char data[EGALAX_FORMAT_MAX_LENGTH];
    	char phys[32];
    };
    
    static void egalax_process_data(struct egalax *pegalax)
    {
    	struct input_dev *dev = pegalax->dev;
    	
    	if (++pegalax->idx == pegalax->bytes) {
    		input_report_abs(dev, ABS_X, EGALAX_GET_XC(pegalax->data, pegalax->resbits, pegalax->shift));
    		input_report_abs(dev, ABS_Y, EGALAX_GET_YC(pegalax->data, pegalax->resbits, pegalax->shift));
    		//input_report_key(dev, BTN_TOUCH, EGALAX_GET_TOUCHED(pegalax->data));
    		input_report_abs(dev, ABS_PRESSURE, EGALAX_GET_TOUCHED(pegalax->data));
    		input_sync(dev);
    		pegalax->idx = 0;
    	}
    }
    
    static irqreturn_t egalax_interrupt(struct serio *serio,
    		unsigned char data, unsigned int flags)
    {
    	struct egalax *pegalax = serio_get_drvdata(serio);
    
    	pegalax->data[pegalax->idx] = data;
    	if (EGALAX_RESPONSE_BEGIN_BYTE & pegalax->data[0]) {
    		pegalax->bytes = (EGALAX_FORMAT_PRESSURE_BIT & pegalax->data[0] ? 6 : 5);
    		switch ((EGALAX_FORMAT_RESOLUTION & pegalax->data[0]) >> 1) {
    		case 0:
    			pegalax->resbits = 0x0f;
    			pegalax->shift = 3;
    			break;
    		case 1:
    			pegalax->resbits = 0x1f;
    			pegalax->shift = 2;
    			break;
    		case 2:
    			pegalax->resbits = 0x3f;
    			pegalax->shift = 1;
    			break;
    		default:
    			pegalax->resbits = 0x7f;
    			pegalax->shift = 0;
    			break;
    		}
    		egalax_process_data(pegalax);
    	}
    	else
    		dev_dbg(&serio->dev, "unknown/unsynchronized data: %x\n",
    			pegalax->data[0]);
    
    	return IRQ_HANDLED;
    }
    
    static void egalax_disconnect(struct serio *serio)
    {
    	struct egalax *pegalax = serio_get_drvdata(serio);
    	input_get_device(pegalax->dev);
    	input_unregister_device(pegalax->dev);
    	serio_close(serio);
    	serio_set_drvdata(serio, NULL);
    	input_put_device(pegalax->dev);
    	kfree(pegalax);
    }
    
    /*
     * egalax_connect() is the routine that is called when someone adds a
     * new serio device that supports egalax protocol and registers it as
     * an input device. This is usually accomplished using inputattach.
     */
    
    static int egalax_connect(struct serio *serio, struct serio_driver *drv)
    {
    	struct egalax *pegalax;
    	struct input_dev *input_dev;
    	int err;
    	pegalax = kzalloc(sizeof(struct egalax), GFP_KERNEL);
    	input_dev = input_allocate_device();
    	if (!pegalax || !input_dev) {
    		err = -ENOMEM;
    		goto fail1;
    	}
    
    	pegalax->serio = serio;
    	pegalax->dev = input_dev;
    	snprintf(pegalax->phys, sizeof(pegalax->phys),
    		 "%s/input1", serio->phys);
    
    	input_dev->name = "EETI eGalaxTouch Serial TouchScreen";
    	input_dev->phys = pegalax->phys;
    	input_dev->id.bustype = BUS_RS232;
    	input_dev->id.vendor = SERIO_EGALAX;
    	input_dev->id.product = 0;
    	input_dev->id.version = 0x0001;
    	input_dev->dev.parent = &serio->dev;
    	input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
    	//input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
    	input_set_abs_params(pegalax->dev, ABS_X,
    			     EGALAX_MIN_XC, EGALAX_MAX_XC, 0, 0);
    	input_set_abs_params(pegalax->dev, ABS_Y,
    			     EGALAX_MIN_YC, EGALAX_MAX_YC, 0, 0);
    	input_set_abs_params(pegalax->dev, ABS_PRESSURE, 0, 1, 0, 0);
    	serio_set_drvdata(serio, pegalax);
    
    	err = serio_open(serio, drv);
    	if (err)
    		goto fail2;
    
    	err = input_register_device(pegalax->dev);
    	if (err)
    		goto fail3;
    
    	return 0;
    
    fail3:	serio_close(serio);
    fail2:	serio_set_drvdata(serio, NULL);
    fail1:	input_free_device(input_dev);
    	kfree(pegalax);
    	return err;
    }
    
    /*
     * The serio driver structure.
     */
    
    static struct serio_device_id egalax_serio_ids[] = {
    	{
    		.type	= SERIO_RS232,
    		.proto	= SERIO_EGALAX,
    		.id	= SERIO_ANY,
    		.extra	= SERIO_ANY,
    	},
    	{ 0 }
    };
    
    MODULE_DEVICE_TABLE(serio, egalax_serio_ids);
    
    static struct serio_driver egalax_drv = {
    	.driver		= {
    		.name	= "egalax",
    	},
    	.description	= DRIVER_DESC,
    	.id_table	= egalax_serio_ids,
    	.interrupt	= egalax_interrupt,
    	.connect	= egalax_connect,
    	.disconnect	= egalax_disconnect,
    };
    
    /*
     * The functions for inserting/removing us as a module.
     */
    
    static int __init egalax_init(void)
    {
    	return serio_register_driver(&egalax_drv);
    }
    
    static void __exit egalax_exit(void)
    {
    	serio_unregister_driver(&egalax_drv);
    }
    
    module_init(egalax_init);
    module_exit(egalax_exit);
    只是修改了最后一点,其中egalax_serio_ids中的几个参数在应用程序中需要用到,加上驱动编译内核更新后,此时这个驱动是没有起作用的,需要通过应用程序将串口与之绑定,后才能正常工作.

    应用程序如下,这个代码网上也有

    /*************************************
    
    NAME:seriotouch.c
    
    *************************************/
    
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <sys/ioctl.h>
    #include <fcntl.h>
    #include <linux/fs.h>
    #include <errno.h>
    #include <string.h>
    #include <linux/fb.h>
    #include <malloc.h>
    #include <sys/mman.h>
    #include <termio.h>
    #include <linux/serio.h>
    
    #define SERIO_ANY	0xff
    #define SERIO_EGALAX	0x3f
    
    int main(int argc, char* argv[])
    {
    	int dev,ret;
    	char comdev[20];
    	int ldisc;
    	unsigned long type;
    	struct termios option;
    	int fd = -1;
    	if(argc != 2)
    	{
    		printf("-----------------------------------------\n");
    		printf("\nUsage: %s [serial device(1-5)]\n", argv[0]);
    		printf("Example: %s 5 n", argv[0]);
    		printf("-----------------------------------------\n");
    		return 0;
    	}
    
    	dev = strtol(argv[1],NULL,10);
    	sprintf(comdev,"/dev/ttyAMA%d",dev);
    	fd = open(comdev,O_RDWR|O_NONBLOCK|O_NOCTTY);
    	if (fd < 0) {
    		perror(comdev);
    		exit(1);
    	}
    	
    	tcgetattr(fd, &option);
        option.c_iflag = IGNPAR | IGNBRK;
    	option.c_cflag = HUPCL | CS8 | CREAD | CLOCAL | B9600;
    	option.c_cc[VMIN] = 1;
    	option.c_cc[VTIME] = 0;
    	
    	cfsetispeed(&option,B9600);
    	cfsetospeed(&option,B9600);
    
    	ret = tcsetattr(fd, TCSANOW, &option);
    	if(ret < 0) {
    		perror("TCSANOW");
    		exit(1);
    	}
    
    	ldisc = N_MOUSE;
    	ret = ioctl(fd,TIOCSETD,&ldisc);
    	if(ret) {
    		perror("TIOCSETD");
    	}
    	type = SERIO_EGALAX | (SERIO_ANY << 8) | (SERIO_ANY << 16);
    	ret = ioctl(fd,SPIOCSTYPE, &type);
    	if(ret) {
    		perror("SPIOCSTYPE");
    	}
    	read(fd,NULL,0);
    	//close(fd);
    	return 0;
    }

    需要注意的是,应用程序最后这个read一定要执行,不然驱动里不会进行连接.

    编译生成可执行文件seriotouch

    应用程序配制完串口后需要与之前的驱动连接,看设置spiocstype的设置,需要保证这里的几个参数与驱动进行对应。

    系统启动后执行seriotouch 5 &

    后面这个5对应的是串口号,执行这个后会看到驱动里的connect执行了,同时会生成一个input节点,如下图


    此时将tslib里的tsdevice修改为这个,进行校准后,就可以正常使用了

    展开全文
  • 添加了触摸屏驱动之后,还无法绑定到具体哪个串口,开机后还无法起作用 需要open 某个/dev/ttySx设备, 设置成N_MOUSE,再read 一下才能跟驱动绑定起来 由于在某些情况下还要写串口,开关USB 的触摸功能,就直接...
  • 1)PenMount Device Driver for Linux 2)tslib resource 3)some exmples of touchscreen 4)Android penmount driver
  • Android 4.0 触摸屏驱动调试记录

    千次阅读 2013-05-24 13:43:34
    软件平台:Android 4.0 问题描述: ...触摸屏驱动也在2.3平台上能正 常使用,为什么移植到4.0上就出现问题了呢?   测试步骤: 1、getevent查看事件发现事件上报正常; 2、加串口打印,发现触摸点坐
  • android4.1触摸屏驱动怎么移植?

    千次阅读 2012-11-12 16:25:50
    我移植android4.1.2触摸屏驱动;下载的android系统编译完成后直接连接触摸屏getevent打印信息正常:如下 串口也可以完全打印触摸屏的信息! 我的idc文件配置是我在google官网上拷贝的;根据android4.0开发文档...
  • 软件平台:Android 4.0 问题描述: ...触摸屏驱动也在2.3平台上能正 常使用,为什么移植到4.0上就出现问题了呢?   测试步骤: 1、getevent查看事件发现事件上报正常; 2、加串口打印,发现触摸点坐
  • 我们的便携式气体分析仪,需要人来操作和配置,所以触摸屏就是我们必然的一个选择。本次我们计划采用3.5寸显示屏,串口通讯。 1、硬件设计 前面我们实验了串行通讯,这次来使用屏实现显示。这次我们计划使用的3.5...
  • 电阻式触摸屏,是一个很古老的产品,在早期的PDA上,我们看到过它的身影(90后,00后估计没有见过)。使用起来,需要先校准,然后才能正常使用,使用的过程中需要用力按压触摸屏,否则不会动作,这是由于其构造机理...
  • 1.LCD触摸屏直接下载官网驱动,这里选用的是3.5寸显示屏,解压后直接运行 sudo ./LCD35-show 然后重启。 注意:一定要先安装LCD驱动,因为安装驱动会修改/boot/config.txt文件,如果先设置串口,再安装LCD屏的话,...
  • android触摸屏ar1011驱动

    2019-05-21 06:50:07
    ar1011是TI出的一块串口类型的触摸控制芯片,支持4,5,8线。接口是串口的,这个芯片有点贵,但支持温度广。原理上是通过串口上传x,y,pre值。 1.在kernel下,把driver配置编译进去。具体修改源码.linux 和android ...
  • STM32驱动迪文触摸屏

    2014-09-02 11:02:39
    用STM32F103VC驱动北京迪文工业串口屏实现文本显示

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 206
精华内容 82
关键字:

串口触摸屏驱动