現在發現乙個問題,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 寫中斷...