2016-09-08 15 views
1

現在、Atmelマイクロコントローラを使用しているUSB HIDキーボードで作業しています。すべて正常に動作していますが、私は通常異なるマシンで異なるキーボードレイアウトを使用します。今私はキーコードが常にすべてのマシン上の正しい文字にマッピングされるように、どのキーボードレイアウトにEN-USを使用するかをホストに伝えることができるかどうか疑問に思った。何か案は?USB HIDキーボードから言語レイアウトを送信

答えて

1

通常、USBキーボードには「キーボードレイアウト」という概念はありません。すべてのキーボードの同じ場所にあるキーは、レイアウト(EN、DEなど)に関係なく、同じメイク/ブレークコードを送信します。スキャンコードからchar/fuctionに正しい変換テーブル( - >キーボードドライバ)を提供するのは、ホスト内のキーボードドライバの仕事です。

マイクロで2つ以上の変換テーブルが必要な場合があります。また、マイクロに正しいテーブルを選択する方法を考えてください。

further reading

+0

ハードウェアスイッチのような意味ですか?これについてまだ考えていない... –

+0

2/4/8レイアウトをコード化できるハードウェアスイッチ(2-3ポートを使用するディップスイッチ)、または特別なキーの組み合わせ(Windowsでは{Left-ALT} + {あなたのソフトウェアが解釈して反応するように、Shiftキーを押してください。 – MikeD

3

USBキーボードは、キーボード上のキーの物理的な位置を表すキーコードではなく、ASCII/Unicodeのキーデータを送信します。これはおそらくローカリゼーションの面では悪いことですが、これは90年代からのプロトコルであり、物事を単純に保ち、時間のPC/AT標準の考え方を保ちたいと考えました。

ハードウェアは、物理的なボタンに印刷されたレイアウトを実行できないという問題があります。できることは、ドライバのマッピングについてのヒントです。 USB HIDこの程度にUSBディスクリプタデータにbCountryCodeフィールドを定義(6.2.1条、P 22):ローカライズされたハードウェアの国コードを識別する

数値表現。

残念ながら、これは(同じ言語などのためのキーボードの変種の間には区別が)underspecifiedされていないので、ハードウェアメーカーはあまりこのフィールドを使用したことがない、彼らはほとんど常に、すなわちNotSupported0x00を置きます。ハードウェアはこれほど多くは使用されていないため、OSサポートは決して開発されませんでした。

+0

例外は、ドライバにレイアウトを伝えるディップスイッチを持つSun/OracleキーボードのSolarisです。https://deskthority.net/wiki/Sun_Type_7#Dip_switches – jlliagre

関連する問題