USBでNキー同時押しの可能性

USBキーボードでもNキーロールオーバーは可能のはずで,そうしたキーボードがないのはそれによるメリットがないからか。
体の構成上,意味のある入力として可能なのはおそらく10キー同時押し程度。普段の使い方を見るに5キー以上同時に押すことはなさそう。4キーであっても,そのうちの2つ3つはモディファイアキーである。通常のUSBキーボードではモディファイアキーは特権階級であり,すべて同時に押して認識可能である。しかも左右別々に*1
となると通常の使用においてはBoot Protocolの6キー同時押しで平気そう。私はPCゲームはやらないのでわからないが,そこら辺には不都合があるのかもしれない。しかし,Nキーである必要はないであろう。モディファイアキーを除いて10キー同時押し可能なら問題なさそうである。
また,Nキーロールオーバーとするとキーボードからの入力データサイズが大きくなってしまう。HIDのレポートディスクリプタは可変長にはできないようなので,1キーだけの入力でもNキー同時押し可能な文のデータサイズをホストに送信する必要がある。
Boot Protocolの通常キーのように1バイトで1キーコードを表すとすると,NキーではNバイト必要になる。モディファイアキーのようにビットマップにすればN/8バイトで済むが,入力データの作成(キーボード側)と解釈(ホスト側)に時間がかかるようになる気がする。キーボードに与えられる時間がどの程度か検討付けるための知識はないので概算すらしていないが,Nキー分のデータを送ること自体は問題ない気もしなくはない。

*1:Boot Protocolはモディファイアキーが通常のキーと同様の方法で送信されることも許容しているので,モディファイアキーを含めて6キー同時押しのキーボードもあるかもしれない

Set_Protocol Request

"Device Class Definition for Human Interface Devices (HID) version 1.11"のp.63に以下の記述がある。

Boot Keyboards must support the boot protocol and the Set_Protocol request. Boot Keyboards may support an alternative protocol (specified in the Report descriptor) for use in USB-aware operating environments.

これを読む限りSet_Protocol Requestをキーボードに対して送信すればBoot Protocol以外のProtocolでキーボードとやり取りできる模様。ただ,大抵のキーボードはalternative protocolもBoot Protocolと同じだと思われる。OS側が起動時,または起動後にSet_Protocol Requestを送信しているかは未調査。

キーボードの同時押しについて - forPCActionGamer Wiki*によると10キー同時押しのUSBキーボードもある。これらはBoot Protocolではないのをサポートしているのかもしれないが,Boot Protocolに余分なデータがくっついているだけなのかもしれない。というのも,Boot Protocolの用件に以下の記述があり,最初の8bytesさえ規定のものであれば後ろにデータを追加しても問題ないので。

Devices may append additional data to these boot reports, but the first 8 bytes of keyboard reports and the first 3 bytes of mouse reports must conform to the format defined by the Boot Report descriptor in order for the data to be correctly interpreted by the BIOS. The report may not exceed 8 bytes in length. The BIOS will ignore any extensions to reports.

10キー同時押しなら,キーボードからホストに送信するキーコードの数を10個にするだけで良いはず。キーコードは最後に送信されるのでこのように変更してもBoot Protocol上は問題ない。OSがちゃんとReport Descriptorを解釈するなら,これで10キー同時押しは可能と思われる。

丸子紅茶

一年ほど前に静岡で買った国産紅茶*1

寮住まいでキッチンもないのでリーフだと片づけ等が面倒くさく,めったに飲まないためずっと放置していて忘れていたが,ふと思い出したので飲んでみた。

水色は薄めで,香り,味等も含めダージリンに似ている。個人的にはかなり好みで常飲できそう。

やはりたまにはリーフも良いものだ。メンドイケドナ。

*1:茅原実里SALツアーで行ったのだ

[日記] わーくらいふばらんす

1月はモンハンと仕事しかしていない気がする。。

あとは新規に始まったアニメをいくつか見たくらいか。

今期一番注目は『まどかマギカ』だけど,ダウナーな感じで何とも言えない。

プログラミングできないプログラマ

プログラミングは難しい。ほとんどの人がやってできるのってコンパイルを通すまでなのではないかと思うときがある。プログラムを動作させる段階で多くの人が脱落する。ただ不思議なことにここで脱落した人たちの多くが自分はプログラミングができないとは考えていないことだ。これはおそらく最終的にはプログラムを動作させることができているからではないか。ただ動かせるように手を加えたのはその人自身ではなく,プログラミングが本当にできる人である。プログラムがきちんと動作しない原因をつきつめて,動くように修正するためのヒント(たいていは答えだ)を教えてくれる真のプログラマがいるおかげで仕事は回っているのだ。

まあ,プログラミングができないと思っていても仕事である以上,そうは言えないという事情もあるだろうけど。

Nキーロールオーバー

押下したすべてのキーを認識する機能。ゲーマー以外はほぼ必要なさそうなものだが,RealforceHHK Professionalなどのいわゆる高級キーボードは大抵サポートしている。ただしUSB接続の場合はUSB KeyboardのBoot Protocolに制限される模様。すなわち,モディファイアキーとその他6キーの同時押しをサポート。

詳しくは下記ページ(forPCActionGamer Wiki『キーボードの同時押しについて』)。

http://wikiwiki.jp/fpag/?%A5%AD%A1%BC%A5%DC%A1%BC%A5%C9%A4%CE%C6%B1%BB%FE%B2%A1%A4%B7%A4%CB%A4%C4%A4%A4%A4%C6


個人的に気になるポイントは次の2点。

  • ほとんどのUSBキーボードはBoot Protocolだけで,独自のプロトコルはサポートしていない?というか両方同じ?
  • 6キーより多く押されたときもphantom stateとしていない?

Device Class Definition for HIDのAppendixを年末年始あたりからぱらぱら読んでいるが,モンハンの影響で進捗は芳しくない。。