国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Linux驅(qū)動(dòng)之觸摸屏程序編寫

本篇博客分以下幾部分講解

1、介紹電阻式觸摸屏的原理

2、介紹觸摸屏驅(qū)動(dòng)的框架(輸入子系統(tǒng))

3、介紹程序用到的結(jié)構(gòu)體

4、介紹程序用到的函數(shù)

5、編寫程序

6、測(cè)試程序

 

1、介紹電阻式觸摸屏的原理

所謂的電阻式觸摸屏,只不過(guò)是在LCD屏幕上貼了一層膜,這層膜的大小與LCD的尺寸剛好相同,它分為上下兩層膜(假設(shè)上層為X膜,下層為Y膜),按下膜的不同位置,會(huì)產(chǎn)生不同的電壓值,這樣根據(jù)不同的電壓值可以確定觸點(diǎn)的位置,這就是觸摸屏的基本原理。其實(shí)是利用了最簡(jiǎn)單的電阻分壓原理。

下面的圖是四線式電阻觸摸屏的原理圖,它的四根線都接到芯片的IO口上

1、如圖14.4是什么都不設(shè)置的觸摸屏的情況,其中S1、S2、S3、S4是由芯片內(nèi)部寄存器控制的,四線電阻的四根線其實(shí)等效于接到了這個(gè)四個(gè)開(kāi)關(guān)上了。

2、如圖14.5是將觸摸屏設(shè)置為等待中斷的情況,可以看到只要觸摸板被按下,Y_ADC點(diǎn)的電壓就會(huì)發(fā)生變化,然后就會(huì)產(chǎn)生一個(gè)中斷事件報(bào)告CPU有按鍵按下待處理。

3、確定按鍵被按下后,通過(guò)設(shè)置觸摸屏ADC相關(guān)寄存器,設(shè)置為自動(dòng)測(cè)量坐標(biāo)模式,首先會(huì)進(jìn)入測(cè)量X坐標(biāo)模式,如圖14.6可以將Y_ADC的值測(cè)量出來(lái)

4、接著進(jìn)入測(cè)量Y坐標(biāo)模式,如圖14.7可以將X_ADC的值測(cè)量出來(lái)。x,y坐標(biāo)測(cè)量出來(lái)后會(huì)存放在相應(yīng)寄存中,然后又會(huì)產(chǎn)生一個(gè)中斷,等待CPU讀取x,y的坐標(biāo)值

5、CPU確認(rèn)讀取玩x,y坐標(biāo)的值之后就進(jìn)入等待松開(kāi)模式,當(dāng)Y_ADC的電壓為VCC時(shí)就認(rèn)為松開(kāi),并進(jìn)入相應(yīng)中斷。等待CPU處理。

 

 

2、介紹觸摸屏驅(qū)動(dòng)的框架(輸入子系統(tǒng))

觸摸對(duì)于linux內(nèi)核來(lái)說(shuō)也是一個(gè)輸入的器件,與按鍵一樣,只不過(guò)比按鍵的值豐富了許多。在Linux驅(qū)動(dòng)之輸入子系統(tǒng)簡(jiǎn)析已經(jīng)介紹過(guò)了輸入子系統(tǒng)的框架,這里再簡(jiǎn)單回顧一下。

輸入子系統(tǒng)按框架可以分為設(shè)備驅(qū)動(dòng)層、事件層、以及核心層。

整個(gè)調(diào)用過(guò)程如下:

app_read->evdev_read->kbtab_irq->input_report_key->input_event->evdev_event->evdev_read

應(yīng)用層           事件層          設(shè)備層         核心層                   核心層            事件層          事件層

如果要自己添加一個(gè)輸入子系統(tǒng)的設(shè)備,只需要添加設(shè)備層的文件即可。

1、在里面添加設(shè)備層input_dev結(jié)構(gòu)并初始化

2、編寫中斷處理程序

 

3、介紹程序用到的結(jié)構(gòu)體

其實(shí)編寫觸摸屏的驅(qū)動(dòng)程序就是編寫一個(gè)輸入子系統(tǒng)的設(shè)備層。它需要用的結(jié)構(gòu)體有

1、struct input_dev結(jié)構(gòu)體

struct input_dev {    void *private;    const char *name;//設(shè)備名字    const char *phys;//文件路徑,比如 input/buttons    const char *uniq;    struct input_id id;    unsigned long evbit[NBITS(EV_MAX)];//表示支持哪類事件,常用于以下幾種事件(可以多選)    //EV_SYN      同步事件,當(dāng)使用input_event()函數(shù)后,就要使用這個(gè)上報(bào)個(gè)同步事件    //EV_KEY       鍵盤事件    //EV_REL       (relative)相對(duì)坐標(biāo)事件,比如鼠標(biāo)    //EV_ABS       (absolute)絕對(duì)坐標(biāo)事件,比如搖桿、觸摸屏感應(yīng)        unsigned long keybit[NBITS(KEY_MAX)];//存放支持的鍵盤按鍵值    //鍵盤變量定義在:include/linux/input.h, 比如: KEY_L(按鍵L)、BTN_TOUCH(觸摸屏的按鍵)            unsigned long relbit[NBITS(REL_MAX)];//存放支持的相對(duì)坐標(biāo)值    unsigned long absbit[NBITS(ABS_MAX)];//存放支持的絕對(duì)坐標(biāo)值    unsigned long mscbit[NBITS(MSC_MAX)];    unsigned long ledbit[NBITS(LED_MAX)];    unsigned long sndbit[NBITS(SND_MAX)];    unsigned long ffbit[NBITS(FF_MAX)];    unsigned long swbit[NBITS(SW_MAX)];    ...    ...    int absmax[ABS_MAX + 1];//絕對(duì)坐標(biāo)的最大值    int absmin[ABS_MAX + 1];//絕對(duì)坐標(biāo)的最小值    int absfuzz[ABS_MAX + 1];//絕對(duì)坐標(biāo)的干擾值,默認(rèn)為0,    int absflat[ABS_MAX + 1];//絕對(duì)坐標(biāo)的平焊位置,默認(rèn)為0        ...    ...};

2、struct timer_list結(jié)構(gòu)體(用于觸摸屏的長(zhǎng)按處理)

struct timer_list {    struct list_head entry;    unsigned long expires;//期望定時(shí)器執(zhí)行的jiffies值,假設(shè)需要定時(shí)10ms,那么應(yīng)該設(shè)置expires = jiffies + HZ/100(10ms為100hz)    void (*function)(unsigned long);//定時(shí)器定時(shí)時(shí)間到了之后的回調(diào)函數(shù)    unsigned long data;//回調(diào)函數(shù)傳入的數(shù)據(jù)    struct tvec_t_base_s *base;#ifdef CONFIG_TIMER_STATS    void *start_site;    char start_comm[16];    int start_pid;#endif};

 

4、介紹程序用到的函數(shù)

觸摸屏程序用到的函數(shù)眾多大致分為以下幾類:

1、輸入子系統(tǒng)相關(guān)的函數(shù)

struct input_dev *input_allocate_device(void);//分配一個(gè)struct input_dev結(jié)構(gòu)體,返回的是struct input_dev *inline void set_bit(int nr, volatile unsigned long *addr);//這是一個(gè)內(nèi)聯(lián)函數(shù),在調(diào)用的時(shí)候展開(kāi),功能為設(shè)置*addr的nr位為1inline void input_set_abs_params(struct input_dev *dev, int axis, int min, int max, int fuzz, int flat);//設(shè)置絕對(duì)位移的參數(shù)//struct input_dev *dev表示哪個(gè)輸入子系統(tǒng)設(shè)備的絕對(duì)位移參數(shù)//axis表示哪個(gè)坐標(biāo)的絕對(duì)位移參數(shù),可以設(shè)置為ABS_X、ABS_Y、ABS_PRESSURE等,位于include/linux/input.h中//min絕對(duì)位移坐標(biāo)的最小值//max絕對(duì)位移坐標(biāo)的最大值//fuzz絕對(duì)位移坐標(biāo)的干擾值,默認(rèn)為0//flat絕對(duì)位移坐標(biāo)的平焊位置,默認(rèn)為0int input_register_device(struct input_dev *dev);//注冊(cè)輸入子系統(tǒng)設(shè)備驅(qū)動(dòng),輸入?yún)?shù)為struct input_dev *void input_unregister_device(struct input_dev *dev);//反注冊(cè)輸入子系統(tǒng)的設(shè)備驅(qū)動(dòng),輸入?yún)?shù)為struct input_dev *void input_free_device(s3c_ts_input);//釋放分配的input_dev結(jié)構(gòu),,輸入?yún)?shù)為struct input_dev *static inline void input_report_abs(struct input_dev *dev, unsigned int code, int value);//上傳絕對(duì)位移事件//struct input_dev *dev表示哪個(gè)輸入子系統(tǒng)設(shè)備的事件上傳//code表示絕對(duì)位移事件的哪類事件,可以取值A(chǔ)BS_PRESSURE、ABS_X、ABS_Y//value表示事件的按鍵值static inline void input_report_key(struct input_dev *dev, unsigned int code, int value);//上傳按鍵事件//struct input_dev *dev表示哪個(gè)輸入子系統(tǒng)設(shè)備的事件上傳//code表示按鍵事件的哪類事件,可以取值BTN_TOUCH等//value表示事件的按鍵值static inline void input_sync(struct input_dev *dev);//上傳同步事件,表示這次事件數(shù)據(jù)已經(jīng)傳送完成了

2、中斷相關(guān)的函數(shù)

int request_irq(unsigned int irq, irq_handler_t handler,unsigned long irqflags, const char *devname, void *dev_id);//注冊(cè)一個(gè)中斷//返回0表示注冊(cè)成功,反之注冊(cè)失敗//irq表示注冊(cè)的中斷號(hào):有IRQ_TC、IRQ_ADC等等,位于include\asm-arm\arch-s3c2410irqs.h//handler表示中斷出現(xiàn)后的回調(diào)函數(shù),函數(shù)原型為typedef irqreturn_t (*irq_handler_t)(int, void *);//irqflags表示中斷類型,可以設(shè)置為IRQF_SHARED、IRQF_DISABLED、IRQF_SAMPLE_RANDOM。位于include\linux\interrupt.h//char *devname表示中斷的名稱//void *dev_id傳給中斷回調(diào)函數(shù)的參數(shù)void free_irq(unsigned int irq, void *dev_id);//釋放中斷//irq表示中斷號(hào)//void *dev_id為傳給中斷回調(diào)函數(shù)的參數(shù)

3、定時(shí)器相關(guān)的函數(shù)

void fastcall init_timer(struct timer_list *timer);//初始化一個(gè)定時(shí)器*timerinline void add_timer(struct timer_list *timer);//將定時(shí)器*timer將入內(nèi)核int mod_timer(struct timer_list *timer, unsigned long expires);//更改定時(shí)器*timer的定時(shí)值

 

5、編寫程序

程序的大致思路為:

1、分配一個(gè)input_dev結(jié)構(gòu)體

2、設(shè)置input_dev結(jié)構(gòu)體

3、注冊(cè)input_dev結(jié)構(gòu)體

4、硬件相關(guān)的操作

  a、使能ADC時(shí)鐘  

  b、設(shè)置S3C2440的ADC/TS寄存器

  c、注冊(cè)INT_TC中斷

  d、注冊(cè)INT_ADC中斷

  f、設(shè)置一個(gè)定時(shí)器用于長(zhǎng)按處理

程序流程:

1、首先觸摸屏位于等待按下?tīng)顟B(tài);

2、待按鍵按下后,進(jìn)入INTC_TC中斷,在中斷里面設(shè)置為INT_ADC中斷等待ADC轉(zhuǎn)換完成;

3、轉(zhuǎn)換完成后進(jìn)入INT_ADC中斷:在里面上報(bào)X、Y坐標(biāo)值;改變定時(shí)器值,使得10ms后調(diào)用定時(shí)器處理函數(shù);設(shè)置為等待松開(kāi)模式。

4、若按鍵在10ms內(nèi)還未松開(kāi),定時(shí)器處理函數(shù)里面將觸摸屏設(shè)置為INT_ADC中斷模式,繼續(xù)轉(zhuǎn)到第3步。

5、若在10ms內(nèi)松開(kāi),則進(jìn)入INTC_TC中斷,在中斷里面設(shè)置為等待按鍵模式

下面是完整程序

#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <asm/io.h>        //含有iomap函數(shù)iounmap函數(shù)#include <asm/uaccess.h>//含有copy_from_user函數(shù)#include <linux/device.h>//含有類相關(guān)的處理函數(shù)#include <linux/fb.h>      //含有fb_info結(jié)構(gòu)體定義//#include <asm/dma-mapping.h> //含有dma_free_writecombine宏定義//#include <linux/dma-mapping.h>  //含有dma_free_writecombine宏定義#include <linux/platform_device.h>//含有平臺(tái)設(shè)備總線模型相關(guān)變量#include <linux/mm.h>#include <linux/slab.h>#include <linux/clk.h>#include <asm-generic/errno-base.h>  //含有各種錯(cuò)誤返回值#include <linux/input.h>                    //含有輸入子系統(tǒng)相關(guān)的類型#include <linux/irq.h>    //含有IRQ_HANDLED\IRQ_TYPE_EDGE_RISING#include <asm/irq.h>   //含有IRQT_BOTHEDGE觸發(fā)類型#include <linux/interrupt.h> //含有request_irq、free_irq函數(shù)struct ts_regs{    unsigned long adccon;    unsigned long adctsc;    unsigned long adcdly;    unsigned long adcdat0;    unsigned long adcdat1;    unsigned long adcupdn;};static struct input_dev *s3c_ts_input;     //新建一個(gè)輸入子系統(tǒng)的設(shè)備層結(jié)構(gòu)static struct ts_regs *ts_reg;                  //分配一個(gè)adc觸摸相關(guān)的寄存器static struct timer_list ts_timer;                       //定義一個(gè)定時(shí)器處理長(zhǎng)按的情況static void enter_wait_pen_down_mode(void)//進(jìn)入等待觸摸筆按下的模式{    ts_reg->adctsc = 0xd3;//設(shè)置等待按下 模式中斷}static void enter_wait_pen_up_mode(void)//進(jìn)入等待觸摸筆松開(kāi)的模式{    ts_reg->adctsc = 0x1d3;//設(shè)置等待松開(kāi) 模式中斷}static void enter_measure_xy_mode(void){    ts_reg->adctsc  = ((1<<2) | (1<<3));//設(shè)置自動(dòng)測(cè)量adc模式,上拉電阻必須去掉    ts_reg->adccon |= (1<<0);//啟動(dòng)adc轉(zhuǎn)換}static irqreturn_t pen_up_down_irq(int irq, void *dev_id){    if (ts_reg->adcdat0 & (1<<15))//如果是釋放中斷    {    //    printk("pen up\n");        enter_wait_pen_down_mode();//進(jìn)入等待按下模式    }    else//如果是按下中斷    {    //    printk("pen down\n");        //enter_wait_pen_up_mode();        enter_measure_xy_mode();//進(jìn)入自動(dòng)轉(zhuǎn)換adc模式等待ADC轉(zhuǎn)換完成進(jìn)入ADC中斷    }//    if (ts_reg->adcdat1 & (1<<15))//    {//        printk("pen up\n");//        enter_wait_pen_down_mode();//    }//    else//    {//        printk("pen down\n");//        enter_wait_pen_up_mode();//    }    return IRQ_HANDLED;}static int s3c_filter_ts(int x[], int y[])//adc軟件濾波{#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 = (avr_x > x[2])?(avr_x - x[2]):(x[2] - avr_x);    det_y = (avr_y > y[2])?(avr_y - y[2]):(y[2] - avr_y);    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 = (avr_x > x[3])?(avr_x - x[3]):(x[3] - avr_x);    det_y = (avr_y > y[3])?(avr_y - y[3]):(y[3] - avr_y);    if((det_x >ERR_LIMIT) || (det_y >ERR_LIMIT))        return 0;        return 1;    }static irqreturn_t adc_irq(int irq, void *dev_id){    static int x[4],y[4];    static int cnt=0;        int xvalue;    int yvalue;    int i;        /*優(yōu)化措施2,如果ADC完成時(shí),發(fā)現(xiàn)觸摸筆已經(jīng)松開(kāi),則丟棄此次結(jié)果*/    if (ts_reg->adcdat0 & (1<<15))//如果已經(jīng)松開(kāi)了    {        cnt = 0;//不能漏        input_report_abs(s3c_ts_input,ABS_PRESSURE,0);  //壓力為0        input_report_key(s3c_ts_input,BTN_TOUCH,0);      //0表示松開(kāi)        input_sync(s3c_ts_input);                                    //事件已經(jīng)處理完        enter_wait_pen_down_mode();//直接進(jìn)入等待按下模式    }    else    {          /*優(yōu)化措施3:多次測(cè)量求平均值*/        x[cnt] = ts_reg->adcdat0&0x3ff;        y[cnt] = ts_reg->adcdat1&0x3ff;        if(++cnt==4)//先++,再判斷        {            if(s3c_filter_ts(x,y))//如果差值小于10            {                xvalue = 0;                yvalue = 0;                for(i=0;i<4;i++)                {                    xvalue = x[i] + xvalue;                    yvalue = y[i] + yvalue;                }                xvalue /= 4;                yvalue /= 4;                input_report_abs(s3c_ts_input,ABS_X,xvalue);                input_report_abs(s3c_ts_input,ABS_Y,yvalue);                input_report_abs(s3c_ts_input,ABS_PRESSURE,1);//壓力值為1                input_report_key(s3c_ts_input,BTN_TOUCH,1);     //1表示按下                input_sync(s3c_ts_input);//事件已經(jīng)處理完畢                            //printk("x = %d ,y = %d\n",xvalue,yvalue);                mod_timer(&ts_timer,jiffies+HZ/100);//                                //enter_wait_pen_up_mode();//進(jìn)入等待松開(kāi)模式            }            //else//如果差值大于10則丟棄            //{                enter_wait_pen_up_mode();//進(jìn)入等待松開(kāi)模式            //}            cnt = 0;        }        else        {            enter_measure_xy_mode();//繼續(xù)進(jìn)入自動(dòng)測(cè)量模式        }    }            return IRQ_HANDLED;}static void s3c_ts_timer_funcitin(unsigned long t){    if (ts_reg->adcdat0 & (1<<15))//如果已經(jīng)松開(kāi)了    {        input_report_abs(s3c_ts_input,ABS_PRESSURE,0);  //壓力為0        input_report_key(s3c_ts_input,BTN_TOUCH,0);      //0表示松開(kāi)        input_sync(s3c_ts_input);                                    //事件已經(jīng)處理完畢                enter_wait_pen_down_mode();//直接進(jìn)入等待按下模式    }    else    {        enter_measure_xy_mode();//繼續(xù)進(jìn)入自動(dòng)測(cè)量模式    }}static int s3c_ts_init(void){    struct clk    *adc_clock;    int ret;    /* 1、分配一個(gè)input_dev結(jié)構(gòu)體 */    s3c_ts_input = input_allocate_device();//在設(shè)備層分配一個(gè)input_dev結(jié)構(gòu)    if (!s3c_ts_input)        return -ENOMEM;        /* 2、設(shè)置它 */        /* 2.1 能產(chǎn)生哪些事件 */    set_bit(EV_KEY, s3c_ts_input->evbit); //按鍵事件    set_bit(EV_ABS, s3c_ts_input->evbit);//絕對(duì)位移事件                    /* 2.2 能產(chǎn)生這類事件里的哪些事件 */       set_bit(BTN_TOUCH, s3c_ts_input->keybit);//按鍵事件里的BTN_TOUCH事件              input_set_abs_params(s3c_ts_input, ABS_X, 0, 0x3FF, 0, 0);    input_set_abs_params(s3c_ts_input, ABS_Y, 0, 0x3FF, 0, 0);    input_set_abs_params(s3c_ts_input, ABS_PRESSURE, 0, 1, 0, 0);    /* 3、注冊(cè) */    input_register_device(s3c_ts_input);//注冊(cè)設(shè)備驅(qū)動(dòng)            /* 4、硬件相關(guān)的操作 */   /* 4.1 使能時(shí)鐘(CLKCON[15])*/ //為了省電,內(nèi)核將不相關(guān)的外設(shè)時(shí)鐘關(guān)掉 用的是PCLK時(shí)鐘    adc_clock = clk_get(NULL, "adc");    clk_enable(adc_clock);//使能ACD時(shí)鐘       /* 4.2 設(shè)置S3C2440的ADC/TS寄存器 */   ts_reg = ioremap(0x58000000, sizeof(struct ts_regs));//將ADC相關(guān)的寄存器的物理地址轉(zhuǎn)換為虛擬地址   /*預(yù)分配使能、預(yù)分配系數(shù)=49+1;所以ADC時(shí)鐘為1M*/   ts_reg->adccon = (1<<14) | (49<<6);      /*優(yōu)化措施1,設(shè)置ADCDLY為最大值,這使得電壓穩(wěn)定后再發(fā)出IRQ_TC中斷*/   ts_reg->adcdly = 0xffffffff;    //設(shè)置adc延時(shí)值,等待數(shù)值穩(wěn)定后再讀取相應(yīng)的值      /*注冊(cè)INT_TC中斷*/  ret = request_irq(IRQ_TC, pen_up_down_irq, IRQF_SAMPLE_RANDOM,  "ts_pen", NULL);     if(ret)      return -1;     /*注冊(cè)INT_ADC中斷*/  ret = request_irq(IRQ_ADC,adc_irq,IRQF_SAMPLE_RANDOM,"adc",NULL);  if(ret)      return -1;   /*優(yōu)化措施4:使用定時(shí)器處理長(zhǎng)按滑動(dòng)的情況*/ init_timer(&ts_timer); ts_timer.function = s3c_ts_timer_funcitin; add_timer(&ts_timer);       /*進(jìn)入等待中斷模式*/  enter_wait_pen_down_mode();//等待進(jìn)入按下中斷   return 0;   }static void s3c_ts_exit(void){    input_unregister_device(s3c_ts_input);//反注冊(cè)    input_free_device(s3c_ts_input);//釋放分配的input_dev結(jié)構(gòu)    iounmap(ts_reg);    free_irq(IRQ_TC, NULL);//釋放觸摸中斷    free_irq(IRQ_ADC, NULL);//釋放adc中斷}module_init(s3c_ts_init);module_exit(s3c_ts_exit);MODULE_LICENSE("GPL");

 

6、測(cè)試程序

1、make menuconfog 去掉原來(lái)的觸摸屏驅(qū)動(dòng)程序

  Device Drives
    Input device supoport
      Generic input layer
        Touchscreens
          <>S3c2410/s3c2440 touchscreens
2、make uImage

3、重啟開(kāi)發(fā)版,進(jìn)入U(xiǎn)BOOT,下載編譯完成的uImage_nots文件到0x30000000地址處:nfs 30000000 192.168.1.5:/work/nfs_root/uImage_nolcd。然后bootm 30000000進(jìn)入此內(nèi)核

4、進(jìn)入系統(tǒng)后掛接網(wǎng)絡(luò)文件系統(tǒng)mount 0t nfs -o nolock,vers=2 192.168.1.5:/work/nfs_root/first_fs /mnt

5、切換到/mnt目錄。操作的就是服務(wù)器上的目錄

6、制作tslib庫(kù),tslib庫(kù)是介于觸摸屏驅(qū)動(dòng)程序與應(yīng)用程序之間的接口。

  a、從網(wǎng)上下載tslib-1.4.tar.gz安裝包

  b、tar xzf tslib-1.4.tar.gz解壓

  c、cd tslib切換到tslib目錄

  d、./autogen.sh運(yùn)行

  e、mkdir tmp新建一個(gè)temp目錄

  f、echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache

  g、./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/tmp將安裝目錄設(shè)置為新建的tmp目錄

  h、make編譯;make install安裝

  i、cd tmp切換到安裝目錄;cp * -rf /work/nfs_root/first_fs將當(dāng)前所有文件都拷貝到網(wǎng)絡(luò)文件系統(tǒng)下

7、使用tslib庫(kù),tslib庫(kù)已經(jīng)拷貝到了/mnt目錄下

8、先安裝10th_ts_drv.ko

9、修改 /etc/ts.conf第1行(去掉#號(hào)和第一個(gè)空格):

     # module_raw input
    改為:
     module_raw input

10、配置環(huán)境變量

export TSLIB_TSDEVICE=/dev/event0    //使用的輸入設(shè)備export TSLIB_CALIBFILE=/etc/pointercalexport TSLIB_CONFFILE=/etc/ts.confexport TSLIB_PLUGINDIR=/lib/tsexport TSLIB_CONSOLEDEVICE=noneexport TSLIB_FBDEVICE=/dev/fb0          //使用的顯示設(shè)備

11、運(yùn)行ts_calibrate程序進(jìn)行觸摸屏校驗(yàn)

12、運(yùn)行ts_test可以進(jìn)行寫字、畫(huà)圖等操作。

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
原創(chuàng))6410觸摸屏驅(qū)動(dòng)分析(s3c-ts.c)(Linux)(分析)
smdk6410 觸摸屏驅(qū)動(dòng)
淺析linux下鍵盤設(shè)備工作和注冊(cè)流程 -tty串口﹑hid鼠標(biāo)鍵盤和usb盤相關(guān) - ...
GTP968(ic)觸摸屏調(diào)試實(shí)際代碼的分析
Mini2440觸摸屏程序分析
Linux設(shè)備驅(qū)動(dòng)編程之中斷處理
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服