<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns="http://purl.org/rss/1.0/"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
>
<channel rdf:about="http://blog.livedoor.jp/hardyboy/">
<title>まごころせいじつ堂 - キーボード</title>
<link>http://blog.livedoor.jp/hardyboy/</link>
<description>浜町庄金　研究開発
　マイコンで遊んでばっかりで

</description>
<dc:language>ja</dc:language>
<admin:generatorAgent rdf:resource="http://blog.livedoor.com/?v=2.0" />
<items>
 <rdf:Seq>
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/7436895.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/6147545.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/5988173.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/5983665.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/5961040.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/5867751.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/5795992.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/5795398.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/5738305.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/5715599.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/5692581.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/5682263.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/5648286.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/5646232.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/5642891.html" />
 </rdf:Seq>
</items>
</channel>

<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/7436895.html">
<title>Arduinoで任意のUSBコードを送る　解決編</title>
<link>http://blog.livedoor.jp/hardyboy/archives/7436895.html</link>
<description>　Arduino Leonardo/MicroはUSBキーボードとして使えるが、Usageコードが101より大きいものは無視されるという問題があった。PS/2キーボード変換器の製作(18) USBキーボードの無視されるキーについて対策箇所はわかっていたが、当時はバイナリにパッチするという手段しか思い...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2014-08-06T01:15:57+09:00</dc:date>
<dc:subject>キーボード</dc:subject>
<content:encoded><![CDATA[　Arduino Leonardo/MicroはUSBキーボードとして使えるが、Usageコードが101より大きいものは無視されるという問題があった。<br /><a  target="_blank" href="http://blog.livedoor.jp/hardyboy/archives/5988173.html">PS/2キーボード変換器の製作(18) USBキーボードの無視されるキーについて</a><br />対策箇所はわかっていたが、当時はバイナリにパッチするという手段しか思いつかず強引にやっていた。<br /><a  target="_blank" href="http://blog.livedoor.jp/hardyboy/archives/5993170.html">PS/2キーボード変換器の製作(19) HEXファイルにパッチを当てる</a><br />　この後、Arduino IDEのフォルダ内にあるソースをいじると反映されることを知った。Arduino IDEは毎回ソースから全部ビルドしてたのか！コアな部分はコンパイル済と勝手に思っていた。<br /><a  target="_blank" href="http://www.imaginaryindustries.com/blog/?p=80">Turning an Arduino Leonardo into a joystick.</a>(Imarginary Industries)<br />　この記事ではUSBAPI.h、HID.cppを修正することによりジョイスティックのUSB-HIDを追加している。ということはArduino IDEにあるHID.cppのHID Report Descripterを修正することで日本語キーボードの機種で￥マークなどを入力できるようになるはずだ。<br />MacOSXだと修正対象のソースは<span  style="font-size: 13px;">Contents/Resources/Java/hardware/arduino/cores/arduino/</span>以下にある。<br /><a  target="_blank" href="https://gist.github.com/houmei/2ad9f7a713f46149e72f">https://gist.github.com/houmei/2ad9f7a713f46149e72f</a><br /><br />HID.cppを差し替え、ライブラリを組み込む。このライブラリはHID.cpp/USBAPI.hと一体化もできると思うが以前作ったのをそのまま流用しているのでこうなっている。<br /><br /><a  target="_blank" title="2014shot1" href="http://livedoor.blogimg.jp/hardyboy/imgs/b/c/bc54db37.jpg"><img  class="pict" alt="2014shot1" src="http://livedoor.blogimg.jp/hardyboy/imgs/b/c/bc54db37-s.jpg" align="left" border="0" height="360" hspace="5" width="480"></a><br  clear="all">
　これは<a  target="_blank" href="http://strawberry-linux.com/catalog/items?code=25005">Davinci</a>にArduino Microのファームウェアを書き込んだもの。pin4にスイッチを付けてフリスクの大きめのケースに入れてみた。たったこれだけ。日本語キーボードがついてるものがWindowsXPの古いノートPCしかなかったのでそれに接続して￥マークが入力できることを確認した。

<br /><br /><a  href="https://gist.github.com/houmei/0ac6873618caa02f22b4" target="_blank">https://gist.github.com/houmei/0ac6873618caa02f22b4</a><br /><br />　USBキーボードのUsageコードについては以下からどうぞ。注意点としてUSキーボードのレイアウトが基準。<br /><a  target="_blank" href="https://www.google.co.jp/search?q=USB+HID+to+PS%2F2+Scan+Code+Translation+Table&amp;rlz=1C5CHFA_enJP503JP505&amp;oq=USB+HID+to+PS%2F2+Scan+Code+Translation+Table&amp;aqs=chrome..69i57.441j0j7&amp;sourceid=chrome&amp;es_sm=91&amp;ie=UTF-8">USB HID to PS/2 Scan Code Translation Table</a><br /><br />　ああ、これで数年悩んでた問題が解決だ。変なバイナリパッチ作った時点で誰も突っ込んでくれないのね。<br /><br /><br />　ついでにPrint ScreenのUsageコード(0x46)を設定して最近話題のエビデンス画面スクリーンショット用ボタンにしてみた。これでハードコピー取り放題よ。<br /><a  href="http://livedoor.blogimg.jp/hardyboy/imgs/1/3/131340ad.jpg" title="2014shot2" target="_blank"><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/1/3/131340ad-s.jpg" alt="2014shot2" class="pict" align="left" border="0" height="360" hspace="5" width="480"></a><br  clear="all">



<br />&nbsp; <iframe  src="//www.youtube.com/embed/ftK0IXJAi1Q?rel=0" allowfullscreen="" frameborder="0" height="480" width="640"></iframe>]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/6147545.html">
<title>ArduinoIDE1.0.3 USB-HID特に変わらず</title>
<link>http://blog.livedoor.jp/hardyboy/archives/6147545.html</link>
<description>やっと今日Arduino1.0.3のソースがダウンロードできたので、USB0-HIDのキーボード部分をチェックした。//	Keyboard    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)	// 47
    0x09, 0x06,                    // USAGE (Keyboard)
    0xa1, 0x01,     ...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2012-12-16T04:18:36+09:00</dc:date>
<dc:subject>キーボード</dc:subject>
<content:encoded><![CDATA[やっと今日Arduino1.0.3のソースがダウンロードできたので、USB0-HIDのキーボード部分をチェックした。<br /><br /><span style="white-space: pre;">//	Keyboard</span><br /><div><span style="white-space: pre;"><code><pre>    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)	// 47
    0x09, 0x06,                    // USAGE (Keyboard)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x85, 0x02,                    //   REPORT_ID (2)
    0x05, 0x07,                    //   USAGE_PAGE (Keyboard)
   
	0x19, 0xe0,                    //   USAGE_MINIMUM (Keyboard LeftControl)
    0x29, 0xe7,                    //   USAGE_MAXIMUM (Keyboard Right GUI)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
    0x75, 0x01,                    //   REPORT_SIZE (1)
    
	0x95, 0x08,                    //   REPORT_COUNT (8)
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)
    0x95, 0x01,                    //   REPORT_COUNT (1)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x81, 0x03,                    //   INPUT (Cnst,Var,Abs)
    
	0x95, 0x06,                    //   REPORT_COUNT (6)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x25, 0x65,                    //   LOGICAL_MAXIMUM (101)
    0x05, 0x07,                    //   USAGE_PAGE (Keyboard)
    
	0x19, 0x00,                    //   USAGE_MINIMUM (Reserved (no event indicated))
    0x29, 0x65,                    //   USAGE_MAXIMUM (Keyboard Application)
    0x81, 0x00,                    //   INPUT (Data,Ary,Abs)
    0xc0,                          // END_COLLECTION

</pre>
</code>そんなわけで LOGICAL_MAXIMUM(101) 、USAGE_MAXIMUM(101) →0x65 で変わらず。<br />なんで毎回制限してんだろ？日本語キーボードなど国際化無視？<br />&nbsp;</span></div>]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/5988173.html">
<title>PS/2キーボード変換器の製作(18) USBキーボードの無視されるキーについて</title>
<link>http://blog.livedoor.jp/hardyboy/archives/5988173.html</link>
<description>正確にはArduino Leonardoで送信するキーのコードの一部が無視される現象について。　WindowsXPで日本語キーボードが使える状態にして[¥]、[ろ]キーに対応するUsageコード0x89,0x87を送信する。普通の日本語キーボードでは期待通りの表示。だがArduino Leonardoから対応する...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2012-10-08T05:08:14+09:00</dc:date>
<dc:subject>キーボード</dc:subject>
<content:encoded><![CDATA[正確にはArduino Leonardoで送信するキーのコードの一部が無視される現象について。<br /><div><br />　WindowsXPで日本語キーボードが使える状態にして[¥]、[ろ]キーに対応するUsageコード0x89,0x87を送信する。普通の日本語キーボードでは期待通りの表示。だがArduino Leonardoから対応するコード0x89,0x87を送信しても無視される。この動作はUbuntu12.04をインストールした日本語キーボード接続のPCでも同様。<br />　<a target="_blank" href="http://www.usblyzer.com/">USBlyzer</a>&nbsp;というのを使ってパケットを監視してみた。これは有料だがお試し期間がある。<br />すると、日本語キーボードを接続したときは0x89を含むパケットにInternational3、0x87を含むパケットにInternational1の注釈がはいる。 しかしArduino Leonardoの場合は0x89、0x87とも注釈がApplicationとなっている。おなじキーボードデバイスなのに違う扱いを受けているようだ。どこかに違いがあるはずだが、ディスクリプタをよく理解していないので時間がかかりそう。キーボードに種別があるような記述は見つけていないし、ディスクリプタ中に現れるbCountrycodeは日本語キーボードでも0だったため、使われる地域の指定は無関係だった。他にあるのか。<br /><br />　なお、調査中にわかったのだが、日本語キーボードの全角/半角キーはUsage 0x94にコードが割り当てられているが、実際に全角/半角の動作に切り替わるのは0x35[｀]だった。<br /><br />追記：なんとなくわかってきた。<br /><br /><a target="_blank" href="https://gist.github.com/3854088">https://gist.github.com/3854088<br /></a><br />普通の日本語キーボードのHID Report Descriptorでは<br /><br />Logical Minimum 0<br />Logical Maxmum 255<br />Usage Minimum (Undefined)<br />Usage Maximum 255<br /><br />だけど、Arduino Leonardoは<br /><br />Logical Minimum 0<br />Logical Maxmum 101<br />Usage Minimum (Undefined)<br />Usage Maximum 101 (アプリケーションキーまで)<br /><br />となっている。0x89や0x87のコードを送っても無視されるのは多分このせい。<br /><br />これらの記述はHID.cppの最初の方にある。これは……パッチを当てるしかないのか？<br /><br /><br />以下、資料：&nbsp;<br /><a target="_blank" href="http://mcn.oops.jp/wiki/index.php?USB%2FDescriptor">USB Descriptor<br /></a><a target="_blank" href="http://esyokunin.dee.cc/30xSub_USB_Siyou/331_Siyou1_HidKb/331_Siyou1_HidKb.html">マウス付きUSBキーボードのディスクリプタ構成を調べる<br /></a><a target="_blank" href="http://www.wdic.org/w/TECH/HID%E3%82%AF%E3%83%A9%E3%82%B9">HIDクラス<br /></a><a target="_blank" href="http://linux.die.net/Mobile-Guide/mobile-guide-p2c1s6-keyboard.html">http://linux.die.net/Mobile-Guide/mobile-guide-p2c1s6-keyboard.html<br /></a><a target="_blank" href="http://www2d.biglobe.ne.jp/~msyk/keyboard/layout/usbkeycode.html">USBキーボードのキーコード<br /></a><a target="_blank" href="http://msdn.microsoft.com/ja-jp/library/windows/hardware/gg487473.aspx">アーカイブ: HID デバイスのハードウェア ID<br /></a><a target="_blank" href="http://www.usb.org/developers/devclass_docs/HID1_11.pdf">Device Class Definition  for Human Interface  Devices (HID) [pdf]<br /></a><a target="_blank" href="http://www.usb.org/developers/devclass_docs/Hut1_11.pdf">HID Usage Tables[pdf]</a><a target="_blank" href="http://www.usb.org/developers/devclass_docs/Hut1_11.pdf">HID Usage Tables</a><br /><br /></div>]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/5983665.html">
<title>PS/2キーボード変換器の製作(17) USBキーボードの任意コードの送出</title>
<link>http://blog.livedoor.jp/hardyboy/archives/5983665.html</link>
<description>Arduino Leonardo＋IDE1.0.1ではKeyboard.press() / release()でUSB HIDキーボードのキーを押したような動作ができるが、引数としてアルファベットはASCIIコードを受け付け、HID Usage IDに変換してから送出しているので送れないキーがある。できれば余計な変換なしでHID Usa...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2012-10-06T21:17:29+09:00</dc:date>
<dc:subject>キーボード</dc:subject>
<content:encoded><![CDATA[Arduino Leonardo＋IDE1.0.1ではKeyboard.press() / release()でUSB HIDキーボードのキーを押したような動作ができるが、引数としてアルファベットはASCIIコードを受け付け、HID Usage IDに変換してから送出しているので送れないキーがある。できれば余計な変換なしでHID Usage IDをそのまま送りたい。<br />　キーボードのコードを送信している部分&nbsp;<a target="_blank" href="http://roboticsclub.org/redmine/projects/quadrotor/repository/revisions/58d82c77908eee0e1c222f7b38691e6532deb77b/entry/arduino-1.0/hardware/arduino/cores/arduino/HID.cpp">HID.cpp</a>内の<span style="background-color: rgb(250, 250, 250); color: rgb(72, 72, 72); font-size: 12px; white-space: pre-wrap; ">Keyboard_::sendReport(KeyReport* keys)</span>はUSBAPI.hではprivateで宣言されている。USBAPI.hをコピーしてここだけpublic宣言にすればダマせるかなとやってみたがそんなのは通用しなかった。ここはコンパイル済で提供されているのでいじると大げさだしそんな実力はない。ということで、sendReport()内で呼び出してるHID_SendReport()は隠されてないのでこれを呼び出すArduinoライブラリを作ってみた。<br /><br /><a target="_blank" href="https://gist.github.com/2ad9f7a713f46149e72f">https://gist.github.com/2ad9f7a713f46149e72f<br /></a><br />ほぼHID.cppからのコピペですよ。]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/5961040.html">
<title>PS/2キーボード変換器の製作(16) ArduinoIDE1.0.1</title>
<link>http://blog.livedoor.jp/hardyboy/archives/5961040.html</link>
<description>Bootloaderメモ：ArduinoのブートローダをいじってHIDのみホストに認識させることはできないだろうか？dfu-programmerATmega 32u4 bootloader without ISP connectionUSBメモ：Arduino Leonardoを使ってUSBキーボード相当を実現しようとすると日本語キーボードの一部(￥、＿)...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2012-10-04T00:10:38+09:00</dc:date>
<dc:subject>キーボード</dc:subject>
<content:encoded><![CDATA[Bootloaderメモ：<br />ArduinoのブートローダをいじってHIDのみホストに認識させることはできないだろうか？<br /><a target="_blank" href="http://dfu-programmer.sourceforge.net/">dfu-programmer</a><br /><br /><a target="_blank" href="http://arduino.cc/forum/index.php?topic=123488.0">ATmega 32u4 bootloader without ISP connection</a><br /><br />USBメモ：<br />Arduino Leonardoを使ってUSBキーボード相当を実現しようとすると日本語キーボードの一部(￥、＿)に対応するコードが送信できない。keyboard.press()を実現している部分をArduinoIDE1.0.1のソースから持ってきてそのままのコードを送れるように書き換えた。<br />ただしコンパイルが通った程度＆汚いのでとりあえず置いとく。今週ちゃんと書きなおす。<a href="https://gist.github.com/3827425" target="_blank"><br /><br />https://gist.github.com/3827425<br /></a>]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/5867751.html">
<title>PS/2キーボード変換器の製作(15) US配列→JP配列の問題点</title>
<link>http://blog.livedoor.jp/hardyboy/archives/5867751.html</link>
<description>US配列から日本語配列に変換する部分を作成した。
Arduino用のスケッチは以下のとおり。これはUSB HIDキーボードに文字を出力すると共にシリアルポートにデバッグ情報を流す。https://gist.github.com/3464019

ライブラリ(ps2kybd.h、ps2kybd.cpp)は前回から修正なし。
http...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2012-08-25T20:44:05+09:00</dc:date>
<dc:subject>キーボード</dc:subject>
<content:encoded><![CDATA[US配列から日本語配列に変換する部分を作成した。
<br />Arduino用のスケッチは以下のとおり。これはUSB HIDキーボードに文字を出力すると共にシリアルポートにデバッグ情報を流す。<br /><a href="https://gist.github.com/3464019" target="_blank">https://gist.github.com/3464019</a><br />

ライブラリ(ps2kybd.h、ps2kybd.cpp)は前回から修正なし。
<a target="_blank" href="https://gist.github.com/ab100bfb33a78ddf067d"><br />https://gist.github.com/ab100bfb33a78ddf067d</a><br />

<br /><br />記号の置き換えは、以下のパターンで行う。<br />(1)SHIFTを押していない状態でSHIFTを押したような入力……右シフトキーpress、置き換えコード、右シフトキーrelease<br />(2)SHIFTを押していない状態で記号の置き換え……置き換えコード<br />(3)SHIFTを押した状態でSHIFTを押したような入力……置き換えコード<br />(4)SHIFTを押した状態でSHIFTを押さないような入力……左右のシフトキーをrelease、置き換えコード、元のシフトキーをpress<br /><br />ALTキーを押した状態では、[`~]キーは変換せずにそのまま出力することで[ALT]+[漢字]と同じ操作になる。<br /><br />　これで記号の置き換え、漢字入力のON/OFFができた。<br /><br />　残った問題点。<br />(1)CapsLockの扱い。CapsLockはUSキーではSHIFT併用だが、日本語キーではそのまま。<br />→Capsフラグはライブラリ側にまかせているが、これをスケッチ側で対処<br />(2)[¥_]が入力できない　→Arduino LeonardoはいったんASCIIコードで受けて内部で変換しUSB HIDコードを送っている。USキーのレイアウトを前提にしているため、日本語配列の[¥_]は対応するものがない。<br />(3)このアダプタをWindowsXPに接続するたびにデバイスドライバの確認ダイアログが登場する。<br /><br />(2)、(3)は非常に大きな問題。<br /><br />(2)はUSB HIDを直接送出する方法を調べなければならない。<br />(3)はArduinoのブートローダを置き換えなければならない。<br /><br />うーん、これはけっこう難しいぞ……<br />]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/5795992.html">
<title>POS端末用PS/2キーボード FTP-CKB11の解析</title>
<link>http://blog.livedoor.jp/hardyboy/archives/5795992.html</link>
<description>　昔ジャンク屋で入手したPOS用のPS/2接続キーボード。テンキー以外はラベルを入れることができる。鍵付き。　裏面はツメで嵌めこまれているだけなので簡単に外れる。キーボードのくせに基板が複雑。16bitマイコンが載っていた。F2MC-16L MB90610A Series[pdf]　これは磁気カ...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2012-07-30T14:53:41+09:00</dc:date>
<dc:subject>キーボード</dc:subject>
<content:encoded><![CDATA[<div>　昔ジャンク屋で入手したPOS用のPS/2接続キーボード。テンキー以外はラベルを入れることができる。鍵付き。</div><div><img class="pict" hspace="5" alt="2011pos01" border="0" height="300" width="400" src="http://livedoor.blogimg.jp/hardyboy/imgs/0/2/0224a3f7.jpg"><br /><br />　裏面はツメで嵌めこまれているだけなので簡単に外れる。キーボードのくせに基板が複雑。16bitマイコンが載っていた。<br /><a target="_blank" href="http://www.fujitsu.com/downloads/MICRO/fma/pdf/e713603.pdf">F2MC-16L MB90610A Series[pdf]<br /></a><br /><img class="pict" hspace="5" alt="2012pos02" border="0" height="300" width="400" src="http://livedoor.blogimg.jp/hardyboy/imgs/8/b/8b0aed34.jpg"><br /><br />　これは磁気カードリーダーにも対応しているためだろう。フラッシュメモリも搭載されていたのでログを取るのかもしれない。<br /><br /><img class="pict" hspace="5" alt="2012pos03" border="0" height="300" width="400" src="http://livedoor.blogimg.jp/hardyboy/imgs/4/b/4b6d6ff1.jpg"><br /><br />解析結果<br /><br /><a target="_blank" title="pos_scancode" href="http://livedoor.blogimg.jp/hardyboy/imgs/6/9/6908c2b0.png"><img class="pict" hspace="5" alt="pos_scancode" border="0" height="306" width="480" src="http://livedoor.blogimg.jp/hardyboy/imgs/6/9/6908c2b0-s.png"></a><br />&nbsp;</div>]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/5795398.html">
<title>富士通コンポーネントKB8811-251のスキャンコード</title>
<link>http://blog.livedoor.jp/hardyboy/archives/5795398.html</link>
<description>　また脱線。　富士通コンポーネント(元 富士通高見澤)製のFKB8811-251。赤外線ワイヤレスのPS/2キーボード。10年くらい前に入手。赤外線受信機はマウス出力もある。赤外線を出すマウスもあったのだろうけど、私が買ったものにはついてなかった。　赤外線受信機側にCapsLock...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2012-07-30T09:30:49+09:00</dc:date>
<dc:subject>キーボード</dc:subject>
<content:encoded><![CDATA[<div>　また脱線。</div><br /><div>　富士通コンポーネント(元 富士通高見澤)製のFKB8811-251。赤外線ワイヤレスのPS/2キーボード。10年くらい前に入手。赤外線受信機はマウス出力もある。赤外線を出すマウスもあったのだろうけど、私が買ったものにはついてなかった。</div><div><br /><img src="http://livedoor.blogimg.jp/hardyboy/imgs/d/c/dcc71883.jpg" width="400" height="300" border="0" alt="2012kybd251_1" hspace="5" class="pict"><br /><br />　赤外線受信機側にCapsLock等のLEDがあるので、キーボード本体はキーに対応したコードを送るだけと思われる。<br /><br /><img src="http://livedoor.blogimg.jp/hardyboy/imgs/3/f/3fa7e4db.jpg" width="400" height="300" border="0" alt="2012kybd251_2" hspace="5" class="pict"><br /><br /><br />　FKB8811で検索するとラック用のコンパクトキーボードとして出てくる。これをワイヤレスにしてマルチメディア関連のキーを追加したものらしい。この追加されたキーのスキャンコードが気になって調べた。</div><div><br /><a href="http://akiba-pc.watch.impress.co.jp/hotline/20010714/ni_i_in.html" target="_blank">入力デバイスの新製品　2001年7月14日号(AKIBA PC Hotline!)<br /></a><br /><div>FKB8811-251</div><br /><div>機能<span style="white-space: pre; ">	</span>make / release<span style="white-space: pre; ">	</span>リピート</div></div><br />

<tt>
<pre>停止(■)	E0 3B / E0 F0 3B	なし
再生・一時停止(▶||)	E0 34 / E0 F0 34	なし
巻き戻し(|&lt;&lt;)	E0 15 / E0 F0 15	あり
早送り(&gt;&gt;|)	E0 4D / E0 F0 4D	あり
Vol-	E0 21 / E0 F0 21	あり
Mute	E0 23 / E0 F0 23	なし
Vol+	E0 32 / W0 F0 32	あり
App1	56 / F0 56	なし
App2	5E / F0 5E	なし
App3	8 / F0 8	なし
Email	18 / E0 18	なし
Internet	10 / E0 10	なし
ScreenSaver	65 / E0 65	なし
Sleep	E0 3F / E0 F0 3F	なし
</pre>
</tt>
<br />]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/5738305.html">
<title>PS/2キーボードの Power,Sleep,Wakeキー</title>
<link>http://blog.livedoor.jp/hardyboy/archives/5738305.html</link>
<description>またもや脱線。　ELECOM TK-FCM008BK、これ112キーとあり、普通のPS/2キーボードにはないPower、Sleep、Wakeキーが付いている。500円台だったので買って調べてみた。スキャンコード

キー名称 make / release

Power	E0 37 / E0 F0 37
Sleep	E0 3F / E0 F0 3F
Wake	E0 5E / E...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2012-07-24T20:00:43+09:00</dc:date>
<dc:subject>キーボード</dc:subject>
<content:encoded><![CDATA[またもや脱線。<br /><br />　ELECOM TK-FCM008BK、これ112キーとあり、普通のPS/2キーボードにはないPower、Sleep、Wakeキーが付いている。500円台だったので買って調べてみた。<br /><br /><img class="pict" hspace="5" alt="2012ps2" border="0" height="300" width="400" src="http://livedoor.blogimg.jp/hardyboy/imgs/c/7/c7f25684.jpg"><br /><br />スキャンコード<br />

キー名称 make / release<br />
<tt>
<pre>Power	E0 37 / E0 F0 37
Sleep	E0 3F / E0 F0 3F
Wake	E0 5E / E0 F0 5E
</pre>
</tt>Powerキーは押すと電源OFFすることができる。ONはできない。PC本体が電源OFFの時にはPS/2キーボードに給電されていないからだ。しかしPowerキーの位置、危険な香り。<br /><br />

<table cellpadding="5" border="0"><tbody><tr><td valign="top"><a target="_top" href="http://www.amazon.co.jp/exec/obidos/ASIN/B002N886NU/keisanki-22/"><img alt="ELECOM メンブレン式キーボード 112キー PS2 スタンダードサイズ ブラック TK-FCM008BK" border="0" src="http://ecx.images-amazon.com/images/I/41SW%2BFQnm2L._SL160_.jpg"></a></td><td valign="top"><span style=""><a target="_top" href="http://www.amazon.co.jp/exec/obidos/ASIN/B002N886NU/keisanki-22/">ELECOM メンブレン式キーボード 112キー PS2 スタンダードサイズ ブラック TK-FCM008BK</a><br /><br />エレコム  2009-08-21<br />売り上げランキング : 3869<br /><br /><a target="_top" href="http://www.amazon.co.jp/exec/obidos/ASIN/B002N886NU/keisanki-22/">Amazonで詳しく見る</a></span><span style=""> by <a href="http://www.goodpic.com/mt/aws/index.html">G-Tools</a></span></td></tr></tbody></table>]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/5715599.html">
<title>記事タイトルPS/2キーボード変換器の製作(14) US配列でPS/2→USB変換OK</title>
<link>http://blog.livedoor.jp/hardyboy/archives/5715599.html</link>
<description>PS/2のスキャンコードをUSB UserIDまで変換できた。次にArduino Leonardoで扱っているコードに変換する。変換方法はほぼ同じで、テーブルを別に用意する。https://gist.github.com/ab100bfb33a78ddf067dPrtScr / ScrLock / Break まわりが難航した。ここはスキャンコードが面...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2012-07-22T09:04:20+09:00</dc:date>
<dc:subject>キーボード</dc:subject>
<content:encoded><![CDATA[PS/2のスキャンコードをUSB UserIDまで変換できた。次にArduino Leonardoで扱っているコードに変換する。変換方法はほぼ同じで、テーブルを別に用意する。<br /><div><br /><a href="https://gist.github.com/ab100bfb33a78ddf067d" target="_blank">https://gist.github.com/ab100bfb33a78ddf067d<br /></a><br />PrtScr / ScrLock / Break まわりが難航した。ここはスキャンコードが面倒。<br />USBのコードをKeyboard.press()やKeyboard.release()で操作する時には充分に注意しないとスケッチの修正ができなくなる。Arduino IDEからソースをコンパイルする時にスケッチ画面に文字がタイプされてしまうからだ。<br /><br />・Windows7(64bit)(英語キーボード配列の設定)に本アダプタと英語キーボードを接続し確認<br />・WindowsXP(日本語キーボード配列の設定)に本アダプタと日本語キーボードを接続し確認<br /><br />○(1)PrintScreen / ALT+PrintScreen 正常動作<br />○(2)ScrLock正常動作(Excelで確認)<br />○(3)[目](App)キー正常動作<br />○(4)日本語入力/英数入力切り換え確認OK<br />○(5)接続したままPC本体電源ONでも動作OK。Windows7のパスワード入力も確認<br />×(6)[＼ろ] キーと[￥]キーを＼に対応させたいのだがうまくいかない(日本語キーボード接続時)<br />→これは無視してもよいか？<br /><br />Arduino Leonardoのライブラリの制限で、PC側の[無変換][変換][かな]キーに対応するコードを送ることができない。外付けキーボードの[無変換][変換][かな]キーを別のキーに割り当てることは可能。<br /><br />その他の問題点：<br />(a)アダプタを接続するたびにデバイスマネージャがデバイスドライバを探す。(WindowsXP)<br />Windows7ではドライバがインストールできなかったことを通知。でも気持ち悪い。<br />→できればArduino用のドライバを入れずに動かしたい<br /><br />(b)キーボードのステータスがわからない。<br />→PC本体からの指示を受け取る手段がない。PS/2キーボード側に送信するプログラムを書いていない。<br />※本体接続のキーボードのランプは点灯する。<br /><br />しばらく英語キーボード配列のPCに接続して使ってみる。並行してUS→JP変換のテーブルを作成。<br /><br />追記：<br />(6)は日本語キーボードのみの問題で、キーに対応するコードがArduino Leonardoから送れないため。<br />(a)はブートローダ差し替えでできそう。32U4はHWB端子を見てブートローダを起動するかどうかを判断するが、Arduinoのブートローダは関連するフューズビットを設定していないらしい。&nbsp;</div>]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/5692581.html">
<title>PS/2キーボード変換器の製作(13) ハードウェアはできたが……</title>
<link>http://blog.livedoor.jp/hardyboy/archives/5692581.html</link>
<description>ハードウェアはできた。Daviciマイコンボードに6Pのmini-DINコネクタを接続、CLKとDATAをプルアップしてケース収納。　あとはPS/2のスキャンコードをUSB-UIDに変換(済)、Arduino Leonardoのkeyboard.press()に変換、さらに日本語キーボードの配列に変換するだけなのだが、問...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2012-07-17T06:26:50+09:00</dc:date>
<dc:subject>キーボード</dc:subject>
<content:encoded><![CDATA[ハードウェアはできた。Daviciマイコンボードに6Pのmini-DINコネクタを接続、CLKとDATAをプルアップしてケース収納。<br /><img src="http://livedoor.blogimg.jp/hardyboy/imgs/d/9/d90280c0.jpg" width="400" height="300" border="0" alt="2012key01" hspace="5" class="pict"><br /><img src="http://livedoor.blogimg.jp/hardyboy/imgs/0/f/0f1a5d1c.jpg" width="400" height="300" border="0" alt="2012key02" hspace="5" class="pict"><br /><img src="http://livedoor.blogimg.jp/hardyboy/imgs/5/3/53acb6de.jpg" width="400" height="300" border="0" alt="2012key03" hspace="5" class="pict"><br /><br />　あとはPS/2のスキャンコードをUSB-UIDに変換(済)、Arduino Leonardoのkeyboard.press()に変換、さらに日本語キーボードの配列に変換するだけなのだが、問題点発覚。<br /><br />以前調査した、Arduino IDE1.0.1でのコード変換部分。<br /><a target="_blank" href="http://blog.livedoor.jp/hardyboy/archives/5532602.html">Arduino IDE1.0.1/Leonardで足らないUSBキーを追加する</a><br />
<tt>
<pre>[HID.cpp]
	uint8_t i;
	if (k &gt;= 136) {			// it's a non-printing key (not a modifier)
		k = k - 136;
	} else if (k &gt;= 128) {	// it's a modifier key
		_keyReport.modifiers |= (1&lt;&lt;(k-128));
		k = 0;
	} else {				// it's a printing key
		k = pgm_read_byte(_asciimap + k);
		if (!k) {
			setWriteError();
			return 0;
		}
		if (k &amp; 0x80) {						// it's a capital letter or other character reached with shift
			_keyReport.modifiers |= 0x02;	// the left shift modifier
			k &amp;= 0x7F;
		}
	}
</pre>
</tt>
<div>　上記ソースはkeybord.press()でコードを変換している箇所。与えられた数値が0x00〜0x7fを印字可能なキー、0x80〜0x87をモディファイアキー、0x88〜を表示不能な特殊キーとみなしている。0x00〜0x7fは const uint8_t _asciimap[128] で定義されてあるテーブルで変換される。0x88以上は、その値から0x88を引いた数値がUsageIDとしてUSB経由で送信される。つまり、ファンクションキーF7は #define KEY_F7 0xC8 と定義されているが、実際は0xC8ー0x88＝0x40が送信される。</div><div>　ここで漏れてしまうキーは、UIDが0x78より大きいもので、日本語キーボード関連で影響がありそうなものは</div><div>[ろ](0x87)、[かたかな/ひらがな](0x88)、[￥](0x89)、[変換](0x8a)、[無変換](0x8b)、[かたかな](0x92)、[ひらがな](0x93)、[全角/半角](0x94)。</div><div>特に最後の[全角/半角](0x94)は日本語キーボードと認識している場合どうしたものか。USB-HIDをそのまま送出する方法を探すしかないのか。</div><div><br />　ターゲットとなるPCがキーボードを日本語配列と認識している場合、ALT+[`]が[全角/半角]と同等か調査し、もし違っていればUSB-UIDを直接送出する方法を探す。<br /><br />追記：&nbsp;<br /><div>&nbsp; &nbsp; Keyboard.press(KEY_LEFT_ALT);</div><div>&nbsp; &nbsp; Keyboard.press('`');</div><div>&nbsp; &nbsp; delay(10);</div><div>&nbsp; &nbsp; Keyboard.release('`');</div><div>&nbsp; &nbsp; Keyboard.release(KEY_LEFT_ALT);</div>&nbsp;<br />WindowsXPにてこれで日本語入力が切り替わることを確認。助かった。MacOSXではそのままALT+`扱い。&nbsp;</div>]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/5682263.html">
<title>PS/2テンキーボード FMV-NTKB1の調査</title>
<link>http://blog.livedoor.jp/hardyboy/archives/5682263.html</link>
<description>ちょっと脱線。昔、USBポートのなかった頃のノートPCのオプションでPS/2接続のテンキーボードがあったのだが、この挙動が謎だった。スキャンコードを観測できるようになって、コードの割り当てがまったく違うことがわかった。富士通 FMV-NTKB1 テンキーボードキー名称 make/...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2012-07-13T02:57:21+09:00</dc:date>
<dc:subject>キーボード</dc:subject>
<content:encoded><![CDATA[ちょっと脱線。昔、USBポートのなかった頃のノートPCのオプションでPS/2接続のテンキーボードがあったのだが、この挙動が謎だった。スキャンコードを観測できるようになって、コードの割り当てがまったく違うことがわかった。<br /><br /><img class="pict" hspace="5" alt="2012tenkey" border="0" height="300" width="400" src="http://livedoor.blogimg.jp/hardyboy/imgs/a/f/af1a0504.jpg"><br /><br />富士通&nbsp;FMV-NTKB1 テンキーボード<br /><br />キー名称 make/releaseコード<br /><br /><div>NumLock 01 / 81</div><div>7home 02 / 82</div><div>4← 03 / 83</div><div>1End 04 / 84</div><div>/ 06 / 86</div><div>8↑ 07 / 87</div><div>5 08 / 88</div><div>2↓ 09 / 89</div><div>0Ins 0A / 8A</div><div>* 0B / 8B</div><div>9PgUp 0C / 8C</div><div>6→ 0D / 8D</div><div>3PgDn 0E / 8E</div><div>.Del 0F / 8F</div><div>- 10 / 90</div><div>+ 11 / 91</div><div>Enter 13 / 93</div><br /><div>キーリピートなし</div><br />　要は専用のオプションだったってことですね。<br />]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/5648286.html">
<title>PS/2キーボード変換器の製作(12) Scancode→USB UID変換</title>
<link>http://blog.livedoor.jp/hardyboy/archives/5648286.html</link>
<description>作業メモ：https://gist.github.com/3056964 　scancodeからUSB-UserIDへの変換ができた。256バイトのテーブルを使って通常と拡張モード(0xE0)付きのスキャンコードを変換。可変長で扱いが面倒なスキャンコードをUSB-UserIDの固定長にした。USB-UserIDは0x70に続く2バイトで...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2012-07-06T08:05:41+09:00</dc:date>
<dc:subject>キーボード</dc:subject>
<content:encoded><![CDATA[作業メモ：<a href="https://gist.github.com/3056964" target="_blank"><br />https://gist.github.com/3056964<br />&nbsp;<br /></a><br />　scancodeからUSB-UserIDへの変換ができた。256バイトのテーブルを使って通常と拡張モード(0xE0)付きのスキャンコードを変換。可変長で扱いが面倒なスキャンコードをUSB-UserIDの固定長にした。<br />USB-UserIDは0x70に続く2バイトで表現。先頭のbit15はキーを離した時に1、とした。<br />　また、CTRL,SHIFT,ALT,GUI(META)キーの状態取得、Caps/Num/Scrのロック状態を取得。<br /><br />　残りは特殊なキー[PrtScn]と[Pause/break]の取り扱い。特に[PrtScn]はalt併用状態をどう扱うか。<br />ここまでやれば英語キーボードの変換は一応済となる。<br /><br />　あとはUSB-UserIDから日本語キーボード配列向けのUSB-UserIDに変換するテーブルを作成、ケース組み込み。]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/5646232.html">
<title>PS/2キーボード 特殊なキーのスキャンコード</title>
<link>http://blog.livedoor.jp/hardyboy/archives/5646232.html</link>
<description>　スキャンコードが安定して取得できるようになったので、特殊なキーについて確認した。拡張：E0 リリース：F0[PrtScn]E0 12 E0 7C / E0 F0 7C E0 F0 12[Alt]+[PrtScn]84 / F0 84[PrtScn]とその他[Ctrl]、[Shift]、[Meta(Windows)]を組み合わせても[Alt]優先。※Windowsでの...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2012-07-05T10:39:44+09:00</dc:date>
<dc:subject>キーボード</dc:subject>
<content:encoded><![CDATA[<div>　スキャンコードが安定して取得できるようになったので、特殊なキーについて確認した。</div><br /><div>拡張：E0 リリース：F0</div><br /><div>[PrtScn]</div><div>E0 12 E0 7C / E0 F0 7C E0 F0 12</div><br /><div>[Alt]+[PrtScn]</div><div>84 / F0 84</div><br /><div>[PrtScn]とその他[Ctrl]、[Shift]、[Meta(Windows)]を組み合わせても[Alt]優先。</div><br /><div>※Windowsでのハードコピーが[PrtScn]と[Alt]+[PrtScn]なのはこの組み合わせしか区別がないから</div><br /><div>[Pause/Break]</div><div>E1 14 77 E1 F0 14 F0 77</div><br /><div>[Ctrl]+[Pause/Break]</div><div>E0 7E E0 F0 7E</div><br /><div>[Pause/Break]を押すとすべてのキーリピートが止まる。</div><br /><div>[App](windowsキーと一緒に追加されたマウスの右クリック相当のやつ)</div><div>E0 2F / E0 F0 2F</div><br /><br /><div>調査はMicrosoft Keyboard Elite(US版)でやったのでリファレンス的には問題ないだろう。</div><br />]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/5642891.html">
<title>PS/2キーボード変換器の製作(11) スキャンコード取得</title>
<link>http://blog.livedoor.jp/hardyboy/archives/5642891.html</link>
<description>ArduinoでPS/2キーボードのスキャンコード取得が安定してできるようになった。ライブラリはarduino.ccのplaygroundで公開されているps2keyboardExt2を基本にps2keyboardの割り込み部分を混ぜた。ps2keyboardの方は外部割り込みでスキャンコードを受け取ったあとFIFOに入れて...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2012-07-03T22:39:31+09:00</dc:date>
<dc:subject>キーボード</dc:subject>
<content:encoded><![CDATA[ArduinoでPS/2キーボードのスキャンコード取得が安定してできるようになった。ライブラリはarduino.ccのplaygroundで公開されているps2keyboardExt2を基本にps2keyboardの割り込み部分を混ぜた。ps2keyboardの方は外部割り込みでスキャンコードを受け取ったあとFIFOに入れている。(ここを自前で作ったら取り出し時に重複してしまった)<br /><br /><a target="_blank" href="https://gist.github.com/3039650">作りかけのライブラリとテスト用のスケッチ</a><br /><br />Arduino UNOとLeonardoで挙動が違う部分に引っかかったので注意。<br /><a target="_blank" href="http://blog.livedoor.jp/hardyboy/archives/5641339.html">Arduino Leonardoの外部割り込み番号とピンの割り当てが異なる</a>&nbsp;<br /><br />]]>
</content:encoded>
</item>

</rdf:RDF>
