嵌入式Linux中TP除錯筆記
阿新 • • 發佈:2019-01-08
觸控式螢幕一般是通過IIC來傳輸觸控點的座標給Linux核心,一般而言,其步驟是:
當人觸控觸控式螢幕時,觸控式螢幕會產生一箇中斷訊號給Linux核心,核心接收到中斷訊號後便會通過IIC去觸控IC裡讀取資料,因此除錯TP驅動時,應該進行下列步驟(這裡我以ft6x6為例):
步驟一:先通過dmesg來檢視觸控驅動是否已經成功初始化,一般而言,在init函式裡應該有printk或類似的函式來進行列印來判斷i2c_add_driver函式是否成功地把tp驅動新增到IIC總線上;
步驟二:使用命令
cat /proc/interrupts
檢視裝置的中斷IO口和其他資訊,一般而言,如果裝置中斷出發後,當TP被觸控後與之對應的IO的數值會改變,如下圖:
執行兩次cat /proc/interrupts,可以看到數值由0變為130了,說明其識別到了中斷訊號,而且其終端埠為GPIOB。
步驟三:
參看具體的中斷資料,
使用命令:cat /dev/input/event0裡資料,如果每點選一次TP便有資料顯示錶示TP已與MCU成功通訊起來了。
步驟四:
使用網上的一份TP程式碼來檢視具體的座標:
#include <stdio.h> #include <linux/input.h> static int event0_fd = -1; struct input_event ev0[64]; static int handle_event0() { int button = 0, realx=0, realy=0, i, rd; rd = read(event0_fd, ev0, sizeof(struct input_event)* 64); if(rd < sizeof(struct input_event)) return 0; for(i=0;i<rd/sizeof(struct input_event); i++) { if(EV_ABS == ev0[i].type) { if(ev0[i].code == 0) { realx = ev0[i].value; } else if(ev0[i].code == 1) { realy = ev0[i].value; } } printf("event(%d):type:%d; code:%3d; value:%3d; realx:%3d; realy:%3d\n",i,ev0[i].type,ev0[i].code,ev0[i].value,realx,realy); } return 1; } int main(void) { int done = 1; event0_fd = open("/dev/event1",02); if(event0_fd <0) { printf("open input device error\n"); return -1; } while (done) { printf("begin handle_event0...\n"); done = handle_event0(); printf("end handle_event0...\n"); } if(event0_fd > 0) { close(event0_fd); event0_fd = -1; } return 0; }