特定のキーボードデバイスをASCIIモードに切り替えるには?

特定のキーボードデバイスをASCIIモードに切り替えるには?

バーコードスキャナはUSBキーボードデバイスのように動作し、最初は私の状況も変わりませんでした。画面を開き、nanoUSBポートを介してスキャナーを接続した後、バーコードを読み、バーコードのすぐ下に書かれた文字列を見ました。

何をすべきかわかりませんが、まだではありません。スキャナ(キーボードに似たデバイス)はシステムにいくつかのジャンクを送信します。

私は書いた単純なNodeJSコードキャプチャされたコンテンツダンプ:

data:  <Buffer 04 00 62 60 5b 00 00 00> string:  b`[
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 5f 5b 00 00 00> string:  b_[
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 60 62 00 00 00> string:  b`b
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 5c 5d 00 00 00> string:  b\]
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 5d 5a 00 00 00> string:  b]Z
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 5c 5d 00 00 00> string:  b\]
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 5c 61 00 00 00> string:  b\a
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 00 00 28 00 00 00 00 00> string:  (
data:  <Buffer 00 00 00 00 00 00 00 00> string:  

私はSIP-4-1ここshowkey同じバーコードの出力です)

同じスキャナがWindowsでもうまく機能します。キーボードモードや何かと関連があるようです。特定のUSBキーボードデバイスのモードをどのように変更しますか?

答え1

スキャナーはジャンクメールを送信しません。これは、レガシー8バイトの「ブート」レポート記述子を含むレガシーUSB HIDキーボードデバイスの完全なレガシー入力レポートです。

これをデコードすると、スキャナが「S」、「I」などのキーを直接送信しないことがわかります。代わりに、⎇ Altキーを使用して入力することをシミュレートします。その過程でオペレーティングシステムについてはかなり間違った仮定をすることになり、その一部または全体が簡単に間違っている可能性があります。

たとえば、

  • レポート入力
    04 00 62 60 5b 00 00 00
    E262はUSB HID使用コード、、60が同時に押されているボタンです5B
  • E262およびは、およびのUSB HID使用コード60です。5B⎇ Left AltIns/0↑/8PgDn/3
  • 083 10は「S」のコードです。
  • レポート入力
    00 00 00 00 00 00 00 00
    すべてのキーが解放されたことを示します。

残りは「I」、「P」、「-」、「4」、「-」、および「1」にデコードされ、すべてこのように入力され、小数点以下の3桁も入力されます⎇ Alt。 (最後の2つの入力レポートはNewsとReleasesです⮠ Return。)

ここでいくつかの壊れた家を見ることができます。

  • スキャナは、キーボードドライバが入力レポートを特定の方向に解析すると仮定します。これは保証されておらず、スキャナはプロセス全体を押しながら順番に押して離した修飾キーの別々のIns/0レポートを正しく生成する必要があります。これは予期しない実行に依存し、スキャナが実際に送信する↑/8PgDn/34つのキーをすべて同時に押して放す
  • スキャナは、これが⎇ Left Altこの目的に使用されるキーであると仮定します。ただし、一部のオペレーティングシステムとキーボードレイアウトでは、⇮ Alt Gr/の⎇ Right Alt代わりにE640入力によって報告された最初のバイトでエンコードされている)場合がありますE2

    実際、現在のオペレーティングシステム、キーボードドライバ、およびキーボードレイアウトは、これらのコードを使用した文字入力をまったくサポートしていない可能性があります。 (例えば、FreeBSDのsysconsカーネル端末エミュレータの場合に当てはまります。もちろん、Microsoft Windowsの場合も同様です。ただし、noshツールキットの場合console-fb-realizer、LXDEなどのGUI、XFCE4、そしてそれは見えるUbuntuですべてのGUIを利用可能;したくありません。 )

  • スキャナは NumLock が閉じていると仮定します。 NumLockがオンの場合は、Shiftキーを押すふりをしてロックの意味を変更する必要があります。

一部のスキャナでは、特殊な「制御」バーコードをスキャンしてそれを修正できます。おそらくここで起こるでしょう。オペレーティングシステム、キーボードドライバ、およびキーボードレイアウトが処理できない動作モードにスキャナを切り替える「制御」バーコードをスキャンしました。この場合、スキャナーのマニュアルを参照して、この動作をオフにする制御コードを見つける必要があります。

例:NLS-HR32シリーズスキャナーの場合、これはスキャナーを「ALT +キーボードモード2」または「ALT +キーボードモード3」に設定する効果であり、「ALT +キーボードを無効にする」または「ALT +キーボードモード3」に戻す必要があります。 「Alt+キーボードモード1」。

関連情報