Linux驅動之按鍵驅動長按檢測

2021-10-07 16:21:57 字數 901 閱讀 7369

現在發現乙個問題,linux下的按鍵驅動,增加了長按檢測。但是在長按的時候不往應用層上報長按的值,很奇怪先做個記錄待以後分析。現在的模式是,周一到周五發現問題,到週末才會專心寫部落格填坑了。

問題已經解決,是因為原來是按鍵抬起後開啟定時器判斷,超時一段時間後就上報長按按鍵值。問題有兩點:

1.開啟定時器檢測按鍵長按的電平狀態條件判斷不對。

2.定時器超時一段時間後就上報長按,但是上報長按的電平狀態條件判斷也不對。

注:我這個按鍵,是按下高電平,抬起低電平

貼上原來的**如下:

void gpio_keys_ctimer(unsigned long data)

mod_timer(&ctimer, msecs_to_jiffies(50));

}static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)

if (type == ev_abs)

} else

else

}input_sync(input);

timerouts=0;

}

判斷按鍵長按的正確思路應該是:

按鍵按下後判斷保持高電平的時間,超時一段時間後視為長按。抬起後上報的鍵值由0改為2

所以正確**應該是:

if(!gpio_active)

改為if(!! gpio_active) 

if((button->long_press) && (timerouts*bdata->timer_debounce > 800) && state)

改為if((button->long_press) && (timerouts*bdata->timer_debounce > 800) && !state)

Linux驅動 按鍵驅動

開發板 tiny6410 核心版本 linux2.6.38 要想寫出案件驅動 需要複習的知識 1 混雜裝置的使用原理 2 系統呼叫驅動函式的原理 3 中斷處理機制 4 阻塞性裝置驅動的書寫規範 1 混雜裝置的註冊和使用比較簡單,以前也複習過,這裡不再複習 3 中斷處理機制 也有部落格內容中斷處理機制...

Linux系統按鍵驅動

linux系統下對於按鍵裝置不僅可以進行讀操作,還可以進行寫操作。對鍵盤 滑鼠等裝置進行寫操作可以實現模擬按鍵的功能。另外,想知道 dev input eventx分別是哪些裝置可以通過執行下面的命令進行檢視,如下所示 yuhaiping neolix cat proc bus input devi...

linux鍵盤按鍵驅動

1.先來介紹以下幾個結構體使用和函式,下面 中會用到 1 input dev驅動裝置結構體中常用成員如下 struct input dev2.然後開始寫 1 向核心申請input dev結構體 2 設定input dev的成員 3 註冊input dev 驅動裝置 4 初始化定時器和中斷 5 寫中斷...