├── images ├── 109.jpg ├── cut.jpg ├── pin.jpg ├── cut-2.jpg ├── DSC04024.jpg ├── DSC04025.jpg ├── DSC04026.jpg ├── DSC04027.jpg ├── DSC04028.jpg ├── DSC04029.jpg ├── DSC04030.jpg ├── DSC04031.jpg ├── DSC04032.jpg ├── DSC04034.jpg ├── DSC04035.jpg ├── DSC04037.jpg ├── DSC04040.jpg ├── DSC04041.jpg ├── kansei.jpg ├── kansei2.jpg ├── layout109.png ├── mouse_mode.jpg ├── keyboard_connector.png └── miniDIN7pin_male.jpg ├── USBKBD2X68K_US ├── usbkbs2x68k-us-keyboard-version.png ├── keymap_us.h └── USBKBD2X68K_US.ino ├── LICENSE ├── README.md └── USBKBD2X68K ├── keymap.h └── USBKBD2X68K.ino /images/109.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/109.jpg -------------------------------------------------------------------------------- /images/cut.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/cut.jpg -------------------------------------------------------------------------------- /images/pin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/pin.jpg -------------------------------------------------------------------------------- /images/cut-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/cut-2.jpg -------------------------------------------------------------------------------- /images/DSC04024.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/DSC04024.jpg -------------------------------------------------------------------------------- /images/DSC04025.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/DSC04025.jpg -------------------------------------------------------------------------------- /images/DSC04026.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/DSC04026.jpg -------------------------------------------------------------------------------- /images/DSC04027.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/DSC04027.jpg -------------------------------------------------------------------------------- /images/DSC04028.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/DSC04028.jpg -------------------------------------------------------------------------------- /images/DSC04029.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/DSC04029.jpg -------------------------------------------------------------------------------- /images/DSC04030.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/DSC04030.jpg -------------------------------------------------------------------------------- /images/DSC04031.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/DSC04031.jpg -------------------------------------------------------------------------------- /images/DSC04032.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/DSC04032.jpg -------------------------------------------------------------------------------- /images/DSC04034.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/DSC04034.jpg -------------------------------------------------------------------------------- /images/DSC04035.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/DSC04035.jpg -------------------------------------------------------------------------------- /images/DSC04037.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/DSC04037.jpg -------------------------------------------------------------------------------- /images/DSC04040.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/DSC04040.jpg -------------------------------------------------------------------------------- /images/DSC04041.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/DSC04041.jpg -------------------------------------------------------------------------------- /images/kansei.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/kansei.jpg -------------------------------------------------------------------------------- /images/kansei2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/kansei2.jpg -------------------------------------------------------------------------------- /images/layout109.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/layout109.png -------------------------------------------------------------------------------- /images/mouse_mode.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/mouse_mode.jpg -------------------------------------------------------------------------------- /images/keyboard_connector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/keyboard_connector.png -------------------------------------------------------------------------------- /images/miniDIN7pin_male.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/images/miniDIN7pin_male.jpg -------------------------------------------------------------------------------- /USBKBD2X68K_US/usbkbs2x68k-us-keyboard-version.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneken/USBKBD2X68K/HEAD/USBKBD2X68K_US/usbkbs2x68k-us-keyboard-version.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 TANEKEN 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # X68000キーボードコネクタにUSBキーボードとUSBマウスを接続します 2 | 3 | ## おことわり 4 | 自分が普段使用しているキーボードやマウスでテストを行っているため、すべてのUSB機器に対して稼働確認が取れているわけではありません。相性や根性が足りない場合動かないものもありますのでご了承ください。 5 | 6 | ## 必要機材(例) 7 | * Arduino Uno + USB HOSTシールド 8 | * Arduino pro mini(5V) + USB HOSTシールド(pro mini 5V用) 9 | * Arduino pro mini(3.3V) + USB HOSTシールド(pro mini 3.3v用) + レベルコンバータ 10 | 11 | X68000本体から5Vが流れてくるのでArduino側も5Vに合わせる必要があります。 12 | 3.3V版arduinoを使用の際はレベルコンバータを使用し5Vにします。 13 | 14 | ## テスト環境 15 | * ELECOM TK-FDM109MBK(2.4GHz無線キーボード/マウス) 16 | * ELECOM TK-FDM086MBK(2.4GHz無線キーボード/マウス) 17 | * SANWA SUPPLY USB-CVP22(USB-PS/2コンバータケーブル) + IBM RT3200 18 | * Logicool M171(ワイヤレスマウス) 19 | * ELECOM M-BT12BR(Bluetoothマウス) 20 | * Lenovo SK-8827 21 | 22 | ## 使えなかったもの 23 | * HHKB Lite2(USBハブを内蔵しているためUSBHOSTのライブラリで具合悪いらしい) 24 | 25 | ## 配線図 26 | ![](images/keyboard_connector.png) 27 | ``` 28 | // 本体側 Arduino側 29 | // ------------------------------------------- 30 | // 1:Vcc2 5V(out) -> 5V 31 | // 2:MSDATA(out) <- TX(1) 32 | // 3:KEYRxD(in) <- A0(14) softwareSerial TX 33 | // 4:KEYTxD(out) -> A1(15) softwareSerial RX 34 | // 5:READY(out) 35 | // 6:REMOTE(in) 36 | // 7:GND(--) -- GND 37 | ``` 38 | 39 | ## キーアサイン 40 | 109キーボードではすべてのキーをアサインすることができません。なので使用頻度の低いキーをアサインしていません。 41 | もし変更したいときはArduinoのソースを修正するか、[KeyWitch.x](http://retropc.net/x68000/software/system/key/keywitch/)等ソフトウェアでキーアサインを変更できるソフトを使用してください。 42 | 43 | 私はSted2でリズム画面に入るため記号入力や登録キーを押す必要がありますが、Keywitchでsted2を使用するときだけ「BREAK」と「COPY」を「記号入力」と「登録」に入れ替えて使用しています。 44 | 45 | 日本語109キーボードアサイン例 `赤字部分がX68000のキーアサイン` 46 | ![](images/layout109.png) 47 | 48 | キートップにテプラを貼りました 49 | ![](images/109.jpg) 50 | 51 | #### キーアサイン初期状態 52 | ``` 53 | // ・F11 -> かな(0x5a) 54 | // ・F12 -> ローマ字(0x5b) 55 | // ・LeftWin -> ひらがな(0x5f) 56 | // ・LeftAlt -> XF1(0x55) 57 | // ・無変換 -> XF2(0x56) 58 | // ・変換 -> XF3(0x57) 59 | // ・カタカナ -> XF4(0x58) 60 | // ・RightAlt -> XF5(0x59) 61 | // ・RgihtWin -> N/A 62 | // ・Menu -> OPT.1(0x72) 63 | // ・RightCtrl -> OPT.2(0x73) 64 | // ・END -> UNDO(0x3a) 65 | // ・ScrollLock-> HELP(0x54) 66 | // ・Pause -> BREAK(0x61) 67 | // ・PrintScr -> COPY(0x62) 68 | // ・NumLock -> CLR(0x3f) 69 | // ・Num / -> 記号入力(0x52) 70 | // ・Num * -> 登録(0x53) 71 | // ・Num - -> コード入力(0x5c) 72 | ``` 73 | 74 | ※記号入力/登録/コード入力をテンキーの一部にアサインしました。 75 | 76 | ## Arduino Pro Mini用のUSBHOSTを使用したバージョンの作成方法 77 | 78 | ### USBHOSTの加工 79 | 参考ページ:https://ht-deko.com/arduino/shield_usbhost_mini.html 80 | 81 | __カット部分__ 82 | ![](images/cut.jpg) 83 | __テスターでチェック__ 84 | ここが通電しなければOK 85 | ![](images/DSC04025.jpg) 86 | 87 | ### Arduinoの足付け 88 | そのまま足を付けると斜めになるので、下にUSBHOSTを敷いてはんだ付けすると良いよ 89 | ![](images/DSC04026.jpg) 90 | ![](images/DSC04027.jpg) 91 | 92 | USB端子とFTDI端子が反対になるように合わせる 93 | ![](images/DSC04030.jpg) 94 | 95 | USBの5VをRAWをつなげるためのケーブル(約43mm) 96 | ![](images/DSC04032.jpg) 97 | 裏側で結線する 98 | ![](images/DSC04034.jpg) 99 | 100 | レベルコンバータを両面テープで絶縁して貼り付ける 101 | ![](images/DSC04035.jpg) 102 | ![](images/DSC04037.jpg) 103 | 104 | A0とA1とVCCの足を曲げてLV4,LV3,LVに接続する。 105 | A2とA3は邪魔なので根本からカット 106 | ![](images/DSC04040.jpg) 107 | 108 | GND(黒)の接続とTXとLV1(白)を接続する 109 | ![](images/DSC04041.jpg) 110 | 111 | `概ね終了。あとはMiniDin7pとの接続` 112 | 113 | 実際に接続するのは5本 114 | ![](images/pin.jpg) 115 | 116 | ### PS/2ケーブルの加工 117 | キーボードコネクタは7ピンですが6ピン目のREMOTEはこの変換機では使用していないのでMiniDIN6pケーブルを加工して使用できます。また中央にあるプラスティックの足はニッパーなどで切断することで7ピン端子に刺すことが可能になります。 118 | 119 | [カモンのPSK-18](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=4AC4-DTEN)なんてお手頃です。1本から2つ採取できます。 120 | 121 | ![](images/miniDIN7pin_male.jpg) 122 | 123 | ### 完成 124 | ![](images/kansei.jpg) 125 | ![](images/kansei2.jpg) 126 | 127 | ## キーリピート間隔の設定(Ver.0.2) 128 | Ver.0.2よりswitch.xで設定したキーリピート間隔の設定値を反映させました。 129 | 計算式は「30ms + 設定値^2 * 5ms」なので、設定値2だと、30+2^2*5=50msになります。 130 | しかし実機キーボードとは挙動が異なるため、同じようにはなりません(でした 131 | 132 | ## USBマウスと本体マウスの同時使用について(Ver.0.3) 133 | X68000の純正キーボード側面にマウスを接続することでマウスも使用することが出来ます。ようするにキーボードコネクタから 134 | マウスの通信に必要なデータも流れています。 135 | UDBKBD2X68Kではキーボードとマウス両方使用できるようにマウスの通信処理もコーディングしていますが、 136 | 実際にマウスが繋がっていなくても、マウスがあることになってしまうため、USBKBD2X68Kを接続すると本体に接続したマウスが動かなくなる事象が報告されました。 137 | マウスが繋がっているかどうかの判定をロジックで行うことが出来なかったため(調査中です)、~~「MOUSE_MODE」のフラグを設けました。 138 | MOUSE_MODEを1にすることでキーボードとマウス両方使用できます。0にすることでマウスは使わない(本体マウスが有効)になります。~~ `Ver.0.4にて対応` 139 | 140 | ## マウスモードOFF機能(Ver.0.4) 141 | このアダプタを接続するとマウスポートに接続したマウスを使うことが出来なくなります。 142 | D2とGNDをショートさせることで、アダプタのマウス機能をOFFにすることが出来、マウスポートに刺したマウスが使うことが出来るようになります。 143 | ![](images/mouse_mode.jpg) 144 | 145 | 146 | ## USB-HUB使用時の挙動(半分諦め) 147 | USBハブに刺した順番に初期化処理を行うようです。キーボードを2つ接続すると先に認識したほうしか入力できない? 148 | 2021.2.14追記 USBハブ経由での接続の挙動が良くわからないため、正式対応を宣言しません。 149 | 150 | ## Bluetoothの挙動(サポート対象外) 151 | BluetoothキーボードとBluetoothマウスも使用可能です。 152 | 2021.2.14追記 ロジックは入っているので使用できるかもしれませんが、ペアリング等課題があるためサポート対象外にします。 153 | 154 | 155 | ## 実装していないコト 156 | * マウスカーソルのオーバーフロー処理 157 | * マウスの速度調整変更 158 | 159 | ## 履歴 160 | * 2020.11.09 Ver.0.1 とりあえず動いた版 161 | * 2020.12.30 Ver.0.2 キーリピート間隔の実装(しかし実機と挙動が異なる) 162 | * 2021.01.02 Ver.0.3 MOUSE_MODEでマウスを使用しないときはOFF出来るようにした 163 | * 2021.02.14 Ver.0.4 MOUSE_MODE廃止,MOUSE CONTROLを実装,記号入力/登録/コード入力をテンキーに割り当て 164 | 165 | ## 謝意 166 | USBキーボードをX68000に繋げるネタ、情報提供、共同作成したzα2さん、ありがとうございます。 167 | 168 | 技術的情報提供、相談に乗ってもらいましたハルぴこさん、ありがとうございます。 169 | 170 | ## 父のパソコンを超えろ 171 | -------------------------------------------------------------------------------- /USBKBD2X68K/keymap.h: -------------------------------------------------------------------------------- 1 | /* AT keycode conversion table */ 2 | const uint8_t keytable[] PROGMEM = { 3 | 0x00, // 00h [] 4 | 0x00, // 01h [] 5 | 0x00, // 02h [] 6 | 0x00, // 03h [] 7 | 0x1e, // 04h A 8 | 0x2e, // 05h B 9 | 0x2c, // 06h C 10 | 0x20, // 07h D 11 | 0x13, // 08h E 12 | 0x21, // 09h F 13 | 0x22, // 0Ah G 14 | 0x23, // 0Bh H 15 | 0x18, // 0Ch I 16 | 0x24, // 0Dh J 17 | 0x25, // 0Eh K 18 | 0x26, // 0Fh L 19 | 0x30, // 10h M 20 | 0x2f, // 11h N 21 | 0x19, // 12h O 22 | 0x1a, // 13h P 23 | 0x11, // 14h Q 24 | 0x14, // 15h R 25 | 0x1f, // 16h S 26 | 0x15, // 17h T 27 | 0x17, // 18h U 28 | 0x2d, // 19h V 29 | 0x12, // 1Ah W 30 | 0x2b, // 1Bh X 31 | 0x16, // 1Ch Y 32 | 0x2a, // 1Dh Z 33 | 0x02, // 1Eh ! 1 34 | 0x03, // 1Fh " 2 35 | 0x04, // 20h # 3 36 | 0x05, // 21h $ 4 37 | 0x06, // 22h % 5 38 | 0x07, // 23h & 6 39 | 0x08, // 24h ' 7 40 | 0x09, // 25h ( 8 41 | 0x0a, // 26h ) 9 42 | 0x0b, // 27h 0 43 | 0x1d, // 28h Enter 44 | 0x01, // 29h Esc 45 | 0x0f, // 2Ah Backspace 46 | 0x10, // 2Bh Tab 47 | 0x35, // 2Ch 空白 48 | 0x0c, // 2Dh - 49 | 0x0d, // 2Eh ^ 50 | 0x1b, // 2Fh ` @ 51 | 0x1c, // 30h [ 52 | 0x00, // 31h [] 53 | 0x29, // 32h ] 54 | 0x27, // 33h + ; 55 | 0x28, // 34h *: 56 | 0x60, // 35h 全角 57 | 0x31, // 36h < , 58 | 0x32, // 37h > . 59 | 0x33, // 38h ? / 60 | 0x5d, // 39h Caps Lock 61 | 0x63, // 3Ah F1 62 | 0x64, // 3Bh F2 63 | 0x65, // 3Ch F3 64 | 0x66, // 3Dh F4 65 | 0x67, // 3Eh F5 66 | 0x68, // 3Fh F6 67 | 0x69, // 40h F7 68 | 0x6a, // 41h F8 69 | 0x6b, // 42h F9 70 | 0x6c, // 43h F10 71 | 0x5a, // 44h かな 72 | 0x5b, // 45h ローマ字 73 | 0x62, // 46h COPY 74 | 0x54, // 47h HELP 75 | 0x61, // 48h BREAK 76 | 0x5e, // 49h INSERT 77 | 0x36, // 4Ah HOME 78 | 0x39, // 4Bh PAGE DOWN 79 | 0x37, // 4Ch DEL 80 | 0x3a, // 4Dh UNDO 81 | 0x38, // 4Eh PAGE UP 82 | 0x3d, // 4Fh RIGHT 83 | 0x3b, // 50h LEFT 84 | 0x3e, // 51h DOWN 85 | 0x3c, // 52h UP 86 | 0x3f, // 53h CLR 87 | 0x52, // 54h 記号入力 // 0x40 Num / 88 | 0x53, // 55h 登録 // 0x41 Num * 89 | 0x5c, // 56h コード入力 // 0x42 Num - 90 | 0x46, // 57h Num + 91 | 0x4e, // 58h Num Enter 92 | 0x4b, // 59h Num 1 93 | 0x4c, // 5Ah Num 2 94 | 0x4d, // 5Bh Num 3 95 | 0x47, // 5Ch Num 4 96 | 0x48, // 5Dh Num 5 97 | 0x49, // 5Eh Num 6 98 | 0x43, // 5Fh Num 7 99 | 0x44, // 60h Num 8 100 | 0x45, // 61h Num 9 101 | 0x4f, // 62h Num 0 102 | 0x51, // 63h Num . 103 | 0x00, // 64h [] 104 | 0x72, // 65h OPT.1 // 0x73, OPT.2 105 | 0x00, // 66h [] 106 | 0x00, // 67h [] 107 | 0x00, // 68h [] 108 | 0x00, // 69h [] 109 | 0x00, // 6Ah [] 110 | 0x00, // 6Bh [] 111 | 0x00, // 6Ch [] 112 | 0x00, // 6Dh [] 113 | 0x00, // 6Eh [] 114 | 0x00, // 6Fh [] 115 | 0x00, // 70h [] 116 | 0x00, // 71h [] 117 | 0x00, // 72h [] 118 | 0x00, // 73h [] 119 | 0x00, // 74h [] 120 | 0x00, // 75h [] 121 | 0x00, // 76h [] 122 | 0x00, // 77h [] 123 | 0x00, // 78h [] 124 | 0x00, // 79h [] 125 | 0x00, // 7Ah [] 126 | 0x00, // 7Bh [] 127 | 0x00, // 7Ch [] 128 | 0x00, // 7Dh [] 129 | 0x00, // 7Eh [] 130 | 0x00, // 7Fh [] 131 | 0x00, // 80h [] 132 | 0x00, // 81h [] 133 | 0x00, // 82h [] 134 | 0x00, // 83h [] 135 | 0x00, // 84h [] 136 | 0x00, // 85h [] 137 | 0x00, // 86h [] 138 | 0x34, // 87h _ 139 | 0x58, // 88h XF4 140 | 0x0e, // 89h [] 141 | 0x57, // 8Ah XF3 142 | 0x56, // 8Bh XF2 143 | }; 144 | 145 | /* 146 | 0x00, // 8Ch [] 147 | 0x00, // 8Dh [] 148 | 0x00, // 8Eh [] 149 | 0x00, // 8Fh [] 150 | 0x00, // 90h [] 151 | 0x00, // 91h [] 152 | 0x00, // 92h [] 153 | 0x00, // 93h [] 154 | 0x00, // 94h [] 155 | 0x00, // 95h [] 156 | 0x00, // 96h [] 157 | 0x00, // 97h [] 158 | 0x00, // 98h [] 159 | 0x00, // 99h [] 160 | 0x00, // 9Ah [] 161 | 0x00, // 9Bh [] 162 | 0x00, // 9Ch [] 163 | 0x00, // 9Dh [] 164 | 0x00, // 9Eh [] 165 | 0x00, // 9Fh [] 166 | 0x00, // A0h [] 167 | 0x00, // A1h [] 168 | 0x00, // A2h [] 169 | 0x00, // A3h [] 170 | 0x00, // A4h [] 171 | 0x00, // A5h [] 172 | 0x00, // A6h [] 173 | 0x00, // A7h [] 174 | 0x00, // A8h [] 175 | 0x00, // A9h [] 176 | 0x00, // AAh [] 177 | 0x00, // ABh [] 178 | 0x00, // ACh [] 179 | 0x00, // ADh [] 180 | 0x00, // AEh [] 181 | 0x00, // AFh [] 182 | 0x00, // B0h [] 183 | 0x00, // B1h [] 184 | 0x00, // B2h [] 185 | 0x00, // B3h [] 186 | 0x00, // B4h [] 187 | 0x00, // B5h [] 188 | 0x00, // B6h [] 189 | 0x00, // B7h [] 190 | 0x00, // B8h [] 191 | 0x00, // B9h [] 192 | 0x00, // BAh [] 193 | 0x00, // BBh [] 194 | 0x00, // BCh [] 195 | 0x00, // BDh [] 196 | 0x00, // BEh [] 197 | 0x00, // BFh [] 198 | 0x00, // C0h [] 199 | 0x00, // C1h [] 200 | 0x00, // C2h [] 201 | 0x00, // C3h [] 202 | 0x00, // C4h [] 203 | 0x00, // C5h [] 204 | 0x00, // C6h [] 205 | 0x00, // C7h [] 206 | 0x00, // C8h [] 207 | 0x00, // C9h [] 208 | 0x00, // CAh [] 209 | 0x00, // CBh [] 210 | 0x00, // CCh [] 211 | 0x00, // CDh [] 212 | 0x00, // CEh [] 213 | 0x00, // CFh [] 214 | 0x00, // D0h [] 215 | 0x00, // D1h [] 216 | 0x00, // D2h [] 217 | 0x00, // D3h [] 218 | 0x00, // D4h [] 219 | 0x00, // D5h [] 220 | 0x00, // D6h [] 221 | 0x00, // D7h [] 222 | 0x00, // D8h [] 223 | 0x00, // D9h [] 224 | 0x00, // DAh [] 225 | 0x00, // DBh [] 226 | 0x00, // DCh [] 227 | 0x00, // DDh [] 228 | 0x00, // DEh [] 229 | 0x00, // DFh [] 230 | 0x71, // E0h Left-Ctrl 231 | 0x70, // E1h Left-Shift 232 | 0x55, // E2h XF1 233 | 0x5f, // E3h ひらがな 234 | 0x00, // E4h [] 235 | 0x00, // E5h [] 236 | 0x59, // E6h XF5 237 | 0x72, // E7h OPT.1 238 | */ 239 | -------------------------------------------------------------------------------- /USBKBD2X68K_US/keymap_us.h: -------------------------------------------------------------------------------- 1 | /* AT keycode conversion table */ 2 | const uint8_t keytable[] PROGMEM = { 3 | 0x00, // 00h [] 4 | 0x00, // 01h [] 5 | 0x00, // 02h [] 6 | 0x00, // 03h [] 7 | 0x1e, // 04h A 8 | 0x2e, // 05h B 9 | 0x2c, // 06h C 10 | 0x20, // 07h D 11 | 0x13, // 08h E 12 | 0x21, // 09h F 13 | 0x22, // 0Ah G 14 | 0x23, // 0Bh H 15 | 0x18, // 0Ch I 16 | 0x24, // 0Dh J 17 | 0x25, // 0Eh K 18 | 0x26, // 0Fh L 19 | 0x30, // 10h M 20 | 0x2f, // 11h N 21 | 0x19, // 12h O 22 | 0x1a, // 13h P 23 | 0x11, // 14h Q 24 | 0x14, // 15h R 25 | 0x1f, // 16h S 26 | 0x15, // 17h T 27 | 0x17, // 18h U 28 | 0x2d, // 19h V 29 | 0x12, // 1Ah W 30 | 0x2b, // 1Bh X 31 | 0x16, // 1Ch Y 32 | 0x2a, // 1Dh Z 33 | 0x02, // 1Eh ! 1 34 | 0x03, // 1Fh " 2 35 | 0x04, // 20h # 3 36 | 0x05, // 21h $ 4 37 | 0x06, // 22h % 5 38 | 0x07, // 23h & 6 39 | 0x08, // 24h ' 7 40 | 0x09, // 25h ( 8 41 | 0x0a, // 26h ) 9 42 | 0x0b, // 27h 0 43 | 0x1d, // 28h Enter 44 | 0x01, // 29h Esc 45 | 0x0f, // 2Ah Backspace 46 | 0x10, // 2Bh Tab 47 | 0x35, // 2Ch 空白 48 | 0x0c, // 2Dh - 49 | 0x0d, // 2Eh ^ 50 | 0x1b, // 2Fh ` @ 51 | 0x1c, // 30h [ 52 | 0x00, // 31h [] 53 | 0x29, // 32h ] 54 | 0x27, // 33h + ; 55 | 0x28, // 34h *: 56 | 0x60, // 35h 全角 57 | 0x31, // 36h < , 58 | 0x32, // 37h > . 59 | 0x33, // 38h ? / 60 | 0x5d, // 39h Caps Lock 61 | 0x63, // 3Ah F1 62 | 0x64, // 3Bh F2 63 | 0x65, // 3Ch F3 64 | 0x66, // 3Dh F4 65 | 0x67, // 3Eh F5 66 | 0x68, // 3Fh F6 67 | 0x69, // 40h F7 68 | 0x6a, // 41h F8 69 | 0x6b, // 42h F9 70 | 0x6c, // 43h F10 71 | 0x72, // 44h OPT.1 72 | 0x73, // 45h OPT.2 73 | 0x62, // 46h COPY 74 | 0x54, // 47h HELP 75 | 0x61, // 48h BREAK 76 | 0x5e, // 49h INSERT 77 | 0x36, // 4Ah HOME 78 | 0x39, // 4Bh PAGE DOWN 79 | 0x37, // 4Ch DEL 80 | 0x3a, // 4Dh UNDO 81 | 0x38, // 4Eh PAGE UP 82 | 0x3d, // 4Fh RIGHT 83 | 0x3b, // 50h LEFT 84 | 0x3e, // 51h DOWN 85 | 0x3c, // 52h UP 86 | 0x3f, // 53h CLR 87 | 0x52, // 54h 記号入力 // 0x40 Num / 88 | 0x53, // 55h 登録 // 0x41 Num * 89 | 0x5c, // 56h コード入力 // 0x42 Num - 90 | 0x46, // 57h Num + 91 | 0x4e, // 58h Num Enter 92 | 0x4b, // 59h Num 1 93 | 0x4c, // 5Ah Num 2 94 | 0x4d, // 5Bh Num 3 95 | 0x47, // 5Ch Num 4 96 | 0x48, // 5Dh Num 5 97 | 0x49, // 5Eh Num 6 98 | 0x43, // 5Fh Num 7 99 | 0x44, // 60h Num 8 100 | 0x45, // 61h Num 9 101 | 0x4f, // 62h Num 0 102 | 0x51, // 63h Num . 103 | 0x00, // 64h [] 104 | 0x72, // 65h OPT.1 // 0x73, OPT.2 105 | 0x00, // 66h [] 106 | 0x00, // 67h [] 107 | 0x00, // 68h [] 108 | 0x00, // 69h [] 109 | 0x00, // 6Ah [] 110 | 0x00, // 6Bh [] 111 | 0x00, // 6Ch [] 112 | 0x00, // 6Dh [] 113 | 0x00, // 6Eh [] 114 | 0x00, // 6Fh [] 115 | 0x00, // 70h [] 116 | 0x00, // 71h [] 117 | 0x00, // 72h [] 118 | 0x00, // 73h [] 119 | 0x00, // 74h [] 120 | 0x00, // 75h [] 121 | 0x00, // 76h [] 122 | 0x00, // 77h [] 123 | 0x00, // 78h [] 124 | 0x00, // 79h [] 125 | 0x00, // 7Ah [] 126 | 0x00, // 7Bh [] 127 | 0x00, // 7Ch [] 128 | 0x00, // 7Dh [] 129 | 0x00, // 7Eh [] 130 | 0x00, // 7Fh [] 131 | 0x00, // 80h [] 132 | 0x00, // 81h [] 133 | 0x00, // 82h [] 134 | 0x00, // 83h [] 135 | 0x00, // 84h [] 136 | 0x00, // 85h [] 137 | 0x00, // 86h [] 138 | 0x34, // 87h _ 139 | 0x58, // 88h XF4 140 | 0x0e, // 89h [] 141 | 0x57, // 8Ah XF3 142 | 0x56, // 8Bh XF2 143 | }; 144 | 145 | /* 146 | 0x00, // 8Ch [] 147 | 0x00, // 8Dh [] 148 | 0x00, // 8Eh [] 149 | 0x00, // 8Fh [] 150 | 0x00, // 90h [] 151 | 0x00, // 91h [] 152 | 0x00, // 92h [] 153 | 0x00, // 93h [] 154 | 0x00, // 94h [] 155 | 0x00, // 95h [] 156 | 0x00, // 96h [] 157 | 0x00, // 97h [] 158 | 0x00, // 98h [] 159 | 0x00, // 99h [] 160 | 0x00, // 9Ah [] 161 | 0x00, // 9Bh [] 162 | 0x00, // 9Ch [] 163 | 0x00, // 9Dh [] 164 | 0x00, // 9Eh [] 165 | 0x00, // 9Fh [] 166 | 0x00, // A0h [] 167 | 0x00, // A1h [] 168 | 0x00, // A2h [] 169 | 0x00, // A3h [] 170 | 0x00, // A4h [] 171 | 0x00, // A5h [] 172 | 0x00, // A6h [] 173 | 0x00, // A7h [] 174 | 0x00, // A8h [] 175 | 0x00, // A9h [] 176 | 0x00, // AAh [] 177 | 0x00, // ABh [] 178 | 0x00, // ACh [] 179 | 0x00, // ADh [] 180 | 0x00, // AEh [] 181 | 0x00, // AFh [] 182 | 0x00, // B0h [] 183 | 0x00, // B1h [] 184 | 0x00, // B2h [] 185 | 0x00, // B3h [] 186 | 0x00, // B4h [] 187 | 0x00, // B5h [] 188 | 0x00, // B6h [] 189 | 0x00, // B7h [] 190 | 0x00, // B8h [] 191 | 0x00, // B9h [] 192 | 0x00, // BAh [] 193 | 0x00, // BBh [] 194 | 0x00, // BCh [] 195 | 0x00, // BDh [] 196 | 0x00, // BEh [] 197 | 0x00, // BFh [] 198 | 0x00, // C0h [] 199 | 0x00, // C1h [] 200 | 0x00, // C2h [] 201 | 0x00, // C3h [] 202 | 0x00, // C4h [] 203 | 0x00, // C5h [] 204 | 0x00, // C6h [] 205 | 0x00, // C7h [] 206 | 0x00, // C8h [] 207 | 0x00, // C9h [] 208 | 0x00, // CAh [] 209 | 0x00, // CBh [] 210 | 0x00, // CCh [] 211 | 0x00, // CDh [] 212 | 0x00, // CEh [] 213 | 0x00, // CFh [] 214 | 0x00, // D0h [] 215 | 0x00, // D1h [] 216 | 0x00, // D2h [] 217 | 0x00, // D3h [] 218 | 0x00, // D4h [] 219 | 0x00, // D5h [] 220 | 0x00, // D6h [] 221 | 0x00, // D7h [] 222 | 0x00, // D8h [] 223 | 0x00, // D9h [] 224 | 0x00, // DAh [] 225 | 0x00, // DBh [] 226 | 0x00, // DCh [] 227 | 0x00, // DDh [] 228 | 0x00, // DEh [] 229 | 0x00, // DFh [] 230 | 0x71, // E0h Left-Ctrl 231 | 0x70, // E1h Left-Shift 232 | 0x55, // E2h XF1 233 | 0x5f, // E3h ひらがな 234 | 0x00, // E4h [] 235 | 0x00, // E5h [] 236 | 0x59, // E6h XF5 237 | 0x72, // E7h OPT.1 238 | */ 239 | -------------------------------------------------------------------------------- /USBKBD2X68K/USBKBD2X68K.ino: -------------------------------------------------------------------------------- 1 | //---------------------------------------------------------------------- 2 | // USBKBD2X68K for Arduino uno(ATMEGA328p compatible) 3 | // X68000のキーボードコネクタにUSBキーボードとUSBマウスを接続 4 | //---------------------------------------------------------------------- 5 | // 2020.11.09 Ver.0.1 とりあえず動いた版 6 | // 2020.12.30 Ver.0.2 キーリピート間隔の実装(しかし実機と挙動が異なる) 7 | // 2021.01.02 Ver.0.3 MOUSE_MODEでマウスを使用しないときはOFF出来るようにした 8 | // 2021.02.14 Ver.0.4 MOUSE_MODE廃止,MOUSE CONTROLを実装,記号入力/登録/コード入力をテンキーに割り当て 9 | //---------------------------------------------------------------------- 10 | // このスケッチのコンパイルには以下のライブラリが必要です. 11 | // ・USB_Host_Shield_2.0 (https://github.com/felis/USB_Host_Shield_2.0) 12 | // ・MsTimer2 (http://playground.arduino.cc/Main/MsTimer2) 13 | //---------------------------------------------------------------------- 14 | // キーアサイン 15 | // ・F11 -> かな(0x5a) 16 | // ・F12 -> ローマ字(0x5b) 17 | // ・LeftWin -> ひらがな(0x5f) 18 | // ・LeftAlt -> XF1(0x55) 19 | // ・無変換 -> XF2(0x56) 20 | // ・変換 -> XF3(0x57) 21 | // ・カタカナ -> XF4(0x58) 22 | // ・RightAlt -> XF5(0x59) 23 | // ・RgihtWin -> N/A 24 | // ・Menu -> OPT.1(0x72) 25 | // ・RightCtrl -> OPT.2(0x73) 26 | // ・END -> UNDO(0x3a) 27 | // ・ScrollLock-> HELP(0x54) 28 | // ・Pause -> BREAK(0x61) 29 | // ・PrintScr -> COPY(0x62) 30 | // ・NumLock -> CLR(0x3f) 31 | // ・Num / -> 記号入力(0x52) 32 | // ・Num * -> 登録(0x53) 33 | // ・Num - -> コード入力(0x5c) 34 | //---------------------------------------------------------------------- 35 | // キーボードコネクタ配線(本体側) 36 | // 37 | // 7 6 5 38 | // 4 3 39 | // 2 1 40 | // 41 | // 本体側 Arduino側 42 | // ------------------------------------------- 43 | // 1:Vcc2 5V(out) -> 5V 44 | // 2:MSDATA(in) <- TX(1) 45 | // 3:KEYRxD(in) <- A0(14) softwareSerial TX 46 | // 4:KEYTxD(out) -> A1(15) softwareSerial RX 47 | // 5:READY(out) 48 | // 6:REMOTE(in) 49 | // 7:GND(--) -- GND 50 | // 51 | // mouse control 52 | // mouse -- D2(2)/A2(16) 53 | //---------------------------------------------------------------------- 54 | 55 | #define MYDEBUG 0 56 | 57 | #include 58 | #include 59 | #include 60 | #include 61 | #include 62 | #include "keymap.h" 63 | 64 | #define KBD_TX 14 //KeyBoard TX 65 | #define KBD_RX 15 //KeyBoard RX 66 | #define MOUSE_OFF 2 //Mouse Disable D2 67 | //#define MOUSE_OFF 16 //Mouse Disable A2 //zα2氏仕様 68 | 69 | SoftwareSerial KBDSerial(KBD_RX,KBD_TX); // RX(KEYTxD/MSCTRL), TX(KEYRxD) 70 | 71 | #define LOBYTE(x) ((char*)(&(x)))[0] 72 | #define HIBYTE(x) ((char*)(&(x)))[1] 73 | 74 | boolean LeftButton = false; // マウス左ボタン 75 | boolean MidButton = false; // マウス真ん中ボタン 76 | boolean RightButton = false; // マウス右ボタン 77 | byte dx; // マウスX軸 78 | byte dy; // マウスY軸 79 | uint8_t MSCTRL; 80 | uint8_t oldCTRL; 81 | byte MSDATA; 82 | 83 | // キーリピートの定義 84 | #define REPEATTIME 5 // キーを押し続けて、REP_INTERVALxREPEATTIMEmsec後にリピート開始 85 | #define EMPTY 0 // リピート管理テーブルが空状態 86 | #define MAXKEYENTRY 6 // リピート管理テーブルサイズ 87 | //#define REP_INTERVAL 50 // リピート間隔 88 | uint8_t REP_INTERVAL = 50; // リピート間隔 89 | uint8_t keyentry[MAXKEYENTRY]; // リピート管理テーブル 90 | uint8_t repeatWait[MAXKEYENTRY]; // リピート開始待ち管理テーブル 91 | 92 | //----------------------------------------------------------------------------- 93 | 94 | // 95 | // HIDキーボード レポートパーサークラスの定義 96 | // 97 | class KbdRptParser : public KeyboardReportParser { 98 | protected: 99 | virtual uint8_t HandleLockingKeys(USBHID *hid, uint8_t key); 100 | virtual void OnControlKeysChanged(uint8_t before, uint8_t after); 101 | virtual void OnKeyDown(uint8_t mod, uint8_t key); 102 | virtual void OnKeyUp(uint8_t mod, uint8_t key); 103 | virtual void OnKeyPressed(uint8_t key) {}; 104 | }; 105 | 106 | // 107 | // HIDマウス レポートパーサークラスの定義 108 | // 109 | class MouseRptParser : public MouseReportParser { 110 | protected: 111 | void OnMouseMove (MOUSEINFO *mi); 112 | void OnLeftButtonUp (MOUSEINFO *mi); 113 | void OnLeftButtonDown (MOUSEINFO *mi); 114 | void OnRightButtonUp (MOUSEINFO *mi); 115 | void OnRightButtonDown (MOUSEINFO *mi); 116 | void OnMiddleButtonUp (MOUSEINFO *mi); 117 | void OnMiddleButtonDown (MOUSEINFO *mi); 118 | }; 119 | 120 | //----------------------------------------------------------------------------- 121 | 122 | USB Usb; 123 | USBHub Hub(&Usb); 124 | 125 | BTD Btd(&Usb); 126 | BTHID bthid(&Btd); 127 | //BTHID bthid(&Btd, PAIR); 128 | //BTHID bthid(&Btd, PAIR, "0000"); 129 | 130 | HIDBoot<3> HidComposite(&Usb); 131 | HIDBoot<1> HidKeyboard(&Usb); 132 | HIDBoot<2> HidMouse(&Usb); 133 | //HIDBoot HidComposite(&Usb); 134 | //HIDBoot HidKeyboard(&Usb); 135 | //HIDBoot HidMouse(&Usb); 136 | 137 | KbdRptParser keyboardPrs; 138 | MouseRptParser MousePrs; 139 | 140 | //----------------------------------------------------------------------------- 141 | 142 | void MouseRptParser::OnMouseMove(MOUSEINFO *mi) 143 | { 144 | /* Serial.print("dx="); 145 | Serial.print(mi->dX, DEC); 146 | Serial.print(" dy="); 147 | Serial.println(mi->dY, DEC); */ 148 | dx = mi->dX; 149 | dy = mi->dY; 150 | 151 | }; 152 | void MouseRptParser::OnLeftButtonUp (MOUSEINFO *mi) { 153 | // Serial.println("L Butt Up"); 154 | LeftButton = false; 155 | }; 156 | void MouseRptParser::OnLeftButtonDown (MOUSEINFO *mi) { 157 | // Serial.println("L Butt Dn"); 158 | LeftButton = true; 159 | }; 160 | void MouseRptParser::OnRightButtonUp (MOUSEINFO *mi) { 161 | // Serial.println("R Butt Up"); 162 | RightButton = false; 163 | }; 164 | void MouseRptParser::OnRightButtonDown (MOUSEINFO *mi) { 165 | // Serial.println("R Butt Dn"); 166 | RightButton = true; 167 | }; 168 | void MouseRptParser::OnMiddleButtonUp (MOUSEINFO *mi) { 169 | // Serial.println("M Butt Up"); 170 | MidButton = false; 171 | }; 172 | void MouseRptParser::OnMiddleButtonDown (MOUSEINFO *mi) { 173 | // Serial.println("M Butt Dn"); 174 | MidButton = true; 175 | }; 176 | 177 | //-------------------------------------------------------------------------- 178 | 179 | 180 | uint8_t classType = 0; 181 | uint8_t subClassType = 0; 182 | 183 | // 184 | // keyboard 1 byte send (software serial) 185 | // 186 | void byte_send(char code) { 187 | KBDSerial.listen(); 188 | KBDSerial.write(code); 189 | 190 | #if MYDEBUG 191 | Serial.println(code); 192 | #endif 193 | } 194 | 195 | // 196 | // リピート管理テーブルのクリア 197 | // 198 | void claerKeyEntry() { 199 | for (uint8_t i=0; i >4 == 0x06) { 565 | } 566 | // キーリピート間隔(実機と異なる) 567 | if (MSCTRL>>4 == 0x07) { 568 | REP_INTERVAL = 30+(MSCTRL&B00001111)*(MSCTRL&B00001111)*5; 569 | rep_timer(); 570 | } 571 | } 572 | } 573 | -------------------------------------------------------------------------------- /USBKBD2X68K_US/USBKBD2X68K_US.ino: -------------------------------------------------------------------------------- 1 | //---------------------------------------------------------------------- 2 | // USBKBD2X68K for Arduino uno(ATMEGA328p compatible) 3 | // X68000のキーボードコネクタにUSBキーボードとUSBマウスを接続 4 | //---------------------------------------------------------------------- 5 | // US Keyboard Version 6 | //---------------------------------------------------------------------- 7 | // 2020.11.09 Ver.0.1 とりあえず動いた版 8 | // 2020.12.30 Ver.0.2 キーリピート間隔の実装(しかし実機と挙動が異なる) 9 | // 2021.01.02 Ver.0.3 MOUSE_MODEでマウスを使用しないときはOFF出来るようにした 10 | // 2021.02.14 Ver.0.4 MOUSE_MODE廃止,MOUSE CONTROLを実装,記号入力/登録/コード入力をテンキーに割り当て 11 | //---------------------------------------------------------------------- 12 | // このスケッチのコンパイルには以下のライブラリが必要です. 13 | // ・USB_Host_Shield_2.0 (https://github.com/felis/USB_Host_Shield_2.0) 14 | // ・MsTimer2 (http://playground.arduino.cc/Main/MsTimer2) 15 | //---------------------------------------------------------------------- 16 | // key assign 17 | // ・F11 -> OPT.1(0x72) 18 | // ・F12 -> OPT.2(0x73) 19 | // ・LeftWin -> XF1(0x55) 20 | // ・LeftAlt -> XF2(0x56) 21 | // ・RightAlt ->XF3(0x57) 22 | // ・RgihtWin -> XF4(0x58) 23 | // ・Menu -> XF5(0x59) 24 | // ・RightCtrl -> XF5(0x59) 25 | // ・END -> UNDO(0x3a) 26 | // ・ScrollLock-> HELP(0x54) 27 | // ・Pause -> BREAK(0x61) 28 | // ・PrintScr -> COPY(0x62) 29 | // ・NumLock -> CLR(0x3f) 30 | // ・Num / -> 記号入力(0x52) 31 | // ・Num * -> 登録(0x53) 32 | // ・Num - -> コード入力(0x5c) 33 | //---------------------------------------------------------------------- 34 | // not assign 35 | // かな(0x5a) 36 | //ローマ字(0x5b) 37 | //ひらがな(0x5f) 38 | //---------------------------------------------------------------------- 39 | // キーボードコネクタ配線(本体側) 40 | // 41 | // 7 6 5 42 | // 4 3 43 | // 2 1 44 | // 45 | // 本体側 Arduino側 46 | // ------------------------------------------- 47 | // 1:Vcc2 5V(out) -> 5V 48 | // 2:MSDATA(in) <- TX(1) 49 | // 3:KEYRxD(in) <- A0(14) softwareSerial TX 50 | // 4:KEYTxD(out) -> A1(15) softwareSerial RX 51 | // 5:READY(out) 52 | // 6:REMOTE(in) 53 | // 7:GND(--) -- GND 54 | // 55 | // mouse control 56 | // mouse -- D2(2)/A2(16) 57 | //---------------------------------------------------------------------- 58 | 59 | #define MYDEBUG 0 60 | 61 | #include 62 | #include 63 | #include 64 | #include 65 | #include 66 | #include "keymap_us.h" 67 | 68 | #define KBD_TX 14 //KeyBoard TX 69 | #define KBD_RX 15 //KeyBoard RX 70 | #define MOUSE_OFF 2 //Mouse Disable D2 71 | //#define MOUSE_OFF 16 //Mouse Disable A2 //zα2氏仕様 72 | 73 | SoftwareSerial KBDSerial(KBD_RX,KBD_TX); // RX(KEYTxD/MSCTRL), TX(KEYRxD) 74 | 75 | #define LOBYTE(x) ((char*)(&(x)))[0] 76 | #define HIBYTE(x) ((char*)(&(x)))[1] 77 | 78 | boolean LeftButton = false; // マウス左ボタン 79 | boolean MidButton = false; // マウス真ん中ボタン 80 | boolean RightButton = false; // マウス右ボタン 81 | byte dx; // マウスX軸 82 | byte dy; // マウスY軸 83 | uint8_t MSCTRL; 84 | uint8_t oldCTRL; 85 | byte MSDATA; 86 | 87 | // キーリピートの定義 88 | #define REPEATTIME 5 // キーを押し続けて、REP_INTERVALxREPEATTIMEmsec後にリピート開始 89 | #define EMPTY 0 // リピート管理テーブルが空状態 90 | #define MAXKEYENTRY 6 // リピート管理テーブルサイズ 91 | //#define REP_INTERVAL 50 // リピート間隔 92 | uint8_t REP_INTERVAL = 50; // リピート間隔 93 | uint8_t keyentry[MAXKEYENTRY]; // リピート管理テーブル 94 | uint8_t repeatWait[MAXKEYENTRY]; // リピート開始待ち管理テーブル 95 | 96 | //----------------------------------------------------------------------------- 97 | 98 | // 99 | // HIDキーボード レポートパーサークラスの定義 100 | // 101 | class KbdRptParser : public KeyboardReportParser { 102 | protected: 103 | virtual uint8_t HandleLockingKeys(USBHID *hid, uint8_t key); 104 | virtual void OnControlKeysChanged(uint8_t before, uint8_t after); 105 | virtual void OnKeyDown(uint8_t mod, uint8_t key); 106 | virtual void OnKeyUp(uint8_t mod, uint8_t key); 107 | virtual void OnKeyPressed(uint8_t key) {}; 108 | }; 109 | 110 | // 111 | // HIDマウス レポートパーサークラスの定義 112 | // 113 | class MouseRptParser : public MouseReportParser { 114 | protected: 115 | void OnMouseMove (MOUSEINFO *mi); 116 | void OnLeftButtonUp (MOUSEINFO *mi); 117 | void OnLeftButtonDown (MOUSEINFO *mi); 118 | void OnRightButtonUp (MOUSEINFO *mi); 119 | void OnRightButtonDown (MOUSEINFO *mi); 120 | void OnMiddleButtonUp (MOUSEINFO *mi); 121 | void OnMiddleButtonDown (MOUSEINFO *mi); 122 | }; 123 | 124 | //----------------------------------------------------------------------------- 125 | 126 | USB Usb; 127 | USBHub Hub(&Usb); 128 | 129 | BTD Btd(&Usb); 130 | BTHID bthid(&Btd); 131 | //BTHID bthid(&Btd, PAIR); 132 | //BTHID bthid(&Btd, PAIR, "0000"); 133 | 134 | HIDBoot<3> HidComposite(&Usb); 135 | HIDBoot<1> HidKeyboard(&Usb); 136 | HIDBoot<2> HidMouse(&Usb); 137 | //HIDBoot HidComposite(&Usb); 138 | //HIDBoot HidKeyboard(&Usb); 139 | //HIDBoot HidMouse(&Usb); 140 | 141 | KbdRptParser keyboardPrs; 142 | MouseRptParser MousePrs; 143 | 144 | //----------------------------------------------------------------------------- 145 | 146 | void MouseRptParser::OnMouseMove(MOUSEINFO *mi) 147 | { 148 | /* Serial.print("dx="); 149 | Serial.print(mi->dX, DEC); 150 | Serial.print(" dy="); 151 | Serial.println(mi->dY, DEC); */ 152 | dx = mi->dX; 153 | dy = mi->dY; 154 | 155 | }; 156 | void MouseRptParser::OnLeftButtonUp (MOUSEINFO *mi) { 157 | // Serial.println("L Butt Up"); 158 | LeftButton = false; 159 | }; 160 | void MouseRptParser::OnLeftButtonDown (MOUSEINFO *mi) { 161 | // Serial.println("L Butt Dn"); 162 | LeftButton = true; 163 | }; 164 | void MouseRptParser::OnRightButtonUp (MOUSEINFO *mi) { 165 | // Serial.println("R Butt Up"); 166 | RightButton = false; 167 | }; 168 | void MouseRptParser::OnRightButtonDown (MOUSEINFO *mi) { 169 | // Serial.println("R Butt Dn"); 170 | RightButton = true; 171 | }; 172 | void MouseRptParser::OnMiddleButtonUp (MOUSEINFO *mi) { 173 | // Serial.println("M Butt Up"); 174 | MidButton = false; 175 | }; 176 | void MouseRptParser::OnMiddleButtonDown (MOUSEINFO *mi) { 177 | // Serial.println("M Butt Dn"); 178 | MidButton = true; 179 | }; 180 | 181 | //-------------------------------------------------------------------------- 182 | 183 | 184 | uint8_t classType = 0; 185 | uint8_t subClassType = 0; 186 | 187 | // 188 | // keyboard 1 byte send (software serial) 189 | // 190 | void byte_send(char code) { 191 | KBDSerial.listen(); 192 | KBDSerial.write(code); 193 | 194 | #if MYDEBUG 195 | Serial.println(code); 196 | #endif 197 | } 198 | 199 | // 200 | // リピート管理テーブルのクリア 201 | // 202 | void claerKeyEntry() { 203 | for (uint8_t i=0; i >4 == 0x06) { 569 | } 570 | // キーリピート間隔(実機と異なる) 571 | if (MSCTRL>>4 == 0x07) { 572 | REP_INTERVAL = 30+(MSCTRL&B00001111)*(MSCTRL&B00001111)*5; 573 | rep_timer(); 574 | } 575 | } 576 | } 577 | --------------------------------------------------------------------------------