2013-11-25 47 views
1

我想開發自己的鍵盤驅動程序到我自己的鍵盤。我必須使用GPIO來識別關鍵事件,並使用I2c來獲取掃描代碼。 我打算開發這樣的鍵盤驅動程序。我自己的Linux Chorded鍵盤驅動程序和我的嵌入式應用程序的接口

#include <linux/gpio.h> 
#include <linux/interrupt.h> 

#define GPIO 1 //gpio PIN 
... 
if(gpio_request(GPIO, "Description")){ 
    Exception 
} 

gpio_direction_input(GPIO); 
... 
int irq = 0; 
if((irq = gpio_to_irq(GPIO)) < 0){ 
    Exception 
} 
… 

int init_module(){ 
    int result = request_irq(GPIO, handler_func, IRQF_TRIGGER_LOW,"Description", "Device id"); 
    if(result){ 
     Exception 
    } 
} 

void handler_func(...){ 
    //get scan code via i2c 
} 

我需要開發的接口,並具有處理以下操作

   在我的鍵盤,打印成的[KEY1]「1ABC」。
    1.當按下鍵時,顯示第一字符,因爲它是 - > 「1」
    2.特殊鍵組合用於其它輸入3個字符
         例如:
                     鍵盤輸入操作如下;

                    KEY1(直接壓)應顯示 「1」
                    F1 + KEY1(同時按下)應顯示的 「a」
                    F2 + KEY1(同時按下)應顯示 「b」 的
                    F3 + KEY1(同時按下)應顯示的 「c」

我的問題是如何應我開發這個接口?

回答

3

您最好按照模擬設備的鍵盤和GPIO Linux驅動程序。我打算將您鏈接到一些GPIO驅動程序。

此驅動程序包括這些特徵

  • 配置小鍵盤矩陣的大小(行,列)。
  • 支持切換事件。
  • 自動鍵重複。
  • 鎖定/解除鎖定鍵功能。

ADP5588 Keyboard - GPIO Linux Driver

ADP5589 Keyboard - GPIO Linux Driver

+0

非常感謝。這對我更有幫助 – deeman

2

你的問題有點模糊,所以我打算給你鏈接到描述了製造這種輸入設備的某些頁面:

什麼是重要的chording是將按鍵鍵版本中分離出來。這些行爲分別發送和most keyboards use them

如果你是在邏輯特別感興趣,然後讀取chorded keyboard維基百科文章可能會有所幫助:

在Engelbart的原始映射,他用五個向鍵:1,2,4,8,16。 鍵映射如下:a = 1,b = 2,c = 3,d = 4,依此類推。如果 用戶同時按下鍵1 + 2 = 3,則出現字母「c」 。

你需要做的是找出哪些字符通過查看被按下按鍵的組合需要,但只有當所有鍵都發佈發送的字符。

因此,如果我按下了按鍵1和按鍵2,則會設置按鍵1和按鍵2的位,但是隻有在釋放所有按鍵時才確定併發送該字符,此時所有按鍵位都將被重置。

這只是一種方法。這是你的系統,你可以任意複雜。

也許你想以n-gram frequency爲基礎,併發送字符短語而不是單個字符。也許你想基於按壓和釋放的字母序列,以任意和絃序列終止,而不是釋放所有按鍵。隨你便。

如果您使用的是普通鍵盤,而不是您自己構建的鍵盤,請注意與key rollover有關的問題。基本上,大多數鍵盤都可以同時按下哪些鍵。

+0

非常感謝您提供的信息 – deeman

1

的答案取決於內核版本和您所使用的架構。

如果您使用的是3.1或更高版本支持的體系結構,則可以使用gpio-keys驅動程序創建鍵盤事件設備文件,您可以在OpenFirmware設備樹中配置該文件,然後從用戶空間讀取該文件。這種方法相對於OP中提出的方法的優點是,您不必編寫任何新的內核代碼,並且可以使用在設備事件文件中執行阻止讀取的循環,將更高級別的驅動程序完全寫入用戶空間。(現在我意識到「不必編寫任何新的內核代碼」並不像編寫你自己的內核模塊那麼酷,所以這可能不被看作是每個人的優勢;-)

即使你是使用較舊的內核,您仍然可以使用gpio_keys驅動程序,該驅動程序使用舊版的「board file」配置方法,作爲user3072817提供的解決方案,提供了ADP5589 gpio驅動程序。這仍然爲您提供了一個設備文件的優點,您可以在其中對用戶空間進行阻止讀取。

要使用較新的gpio-key方法,您需要將gpio-keys部分添加到您的開發板的設備樹中,該部分應位於arch/<your arch>/boot/dts。綁定的語法在gpio_keys.txt中指定。您可以在BeagleBone here上看到漫畫觸摸屏的示例gpio-keys設備樹配置。這個例子還顯示了一個用Python編寫的gpio-key用戶空間驅動程序。記得用CONFIG_KEYBOARD_GPIO編譯你的內核。

相關問題