linux USB觸屏無響應驅動出現EPIPE錯誤

2021-09-01 02:14:47 字數 2374 閱讀 8540

#linux觸屏無響應驅動出現epipe錯誤

使用的觸屏裝置是egalax通過usb接入的,使用的驅動是 kernel\linux-3.10.y\drivers\input\touchscreen\usbtouchscreen.c。出現問題時觸屏沒有反應,hexdump /dev/input/event0也沒有輸出,但是重啟qt程式後正常。問題很難復現,復現後也獲取不到多少有用資訊,後來直接將觸屏usb輸入輸出線短路復現此問題。後續發現觸屏無反應時出現epipe錯誤:

static

void

usbtouch_irq

(struct urb *urb)

usbtouch->type->

process_pkt

(usbtouch, usbtouch->data, urb->actual_length)

;exit:

usb_mark_last_busy

(inte***ce_to_usbdev

(usbtouch->inte***ce));

retval =

usb_submit_urb

(urb, gfp_atomic);if

(retval)

dev_err

(dev,

"%s - usb_submit_urb failed with result: %d\n"

,__func__

, retval)

;}

新增一些列印後發現,結束qt程式後,再開啟qt程式,驅動會重新open裝置。沒有找到比較好的辦法,於是在驅動層出現epipe錯誤的時候,向上層上報乙個特殊值,應用層監控/dev/input/event0,檢測到特殊值時,重啟qt程式,修改usbtouchscreen.c如下:

static

void

usbtouch_irq

(struct urb *urb)

else

input_sync

(usbtouch->input)

;goto exit;

default

:dev_dbg

(dev,

"%s - nonzero urb status received: %d\n"

,__func__

, urb->status)

;goto exit;

} usbtouch->type->

process_pkt

(usbtouch, usbtouch->data, urb->actual_length)

;exit:

usb_mark_last_busy

(inte***ce_to_usbdev

(usbtouch->inte***ce));

retval =

usb_submit_urb

(urb, gfp_atomic);if

(retval)

dev_err

(dev,

"%s - usb_submit_urb failed with result: %d\n"

,__func__

, retval)

;}

監控程式:

#include

#include

#include

#include

#include

bool

openfile

(int

& fdtouch)

printf

("open /dev/input/event0 success\n");

return

true;}

intmain

(int argc,

char

**argv)

;while(1

)if(fdtouch >0)

fdtouch =-1

;++loop;

printf

("retry open /dev/input/event0 times:%d\n"

,loop)

;usleep

(500

*1000);

}system

("killall -kill qtprograme");

//殺死qt程式,程序監控程式會重啟它的

break;}

}}else

if(len <0)

}usleep

(200

*1000);

}close

(fdtouch)

;return0;

}

目前測試未在出現問題。

zForce紅外觸屏處理晶元驅動分析

zforce紅外觸屏處理晶元驅動原始碼有兩套,分別為linux android wince系統實現。我用的是linux系統,應用不是qt實現的,介面都是opengl實現,所以,要自行處理觸屏輸入控制。linux的觸屏驅動使用了input子系統,前一天已經做了乙個基本學習,現在分析一下驅動實現。硬體介...

linux驅動中觸屏ic韌體公升級

在驅動開發過程中,我們有時會碰到這種應用 比如說某款晶元的韌體不是固定的,是可以後期公升級的。那麼在每次系統開機時,需要做個檢測,如果檢測到提供了新的韌體,那麼在第一次開機時就公升級韌體。之後由於儲存了新的韌體版本號可供檢測,就不用再開機公升級了。以一款i2c的觸控螢幕晶元為例,假設 商提供的新韌體...

arduino LCD屏使用(無驅動板)

lcd引腳介紹 1602採用標準的16腳介面,其中 第1腳 vss為地電源 第2腳 vdd接5v正電源 第3腳 v0為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產生 鬼影 使用時可以通過乙個10k的電位器調整對比度 第4腳 rs為暫存器選擇,高電平時選擇資料暫...