#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為暫存器選擇,高電平時選擇資料暫...