├── .gitignore ├── LICENSE ├── MicroThinkPadAdapter ├── Debug │ ├── CDC.cpp.d │ ├── HID.cpp.d │ ├── HardwareSerial.cpp.d │ ├── IPAddress.cpp.d │ ├── MCP23S17_Input │ │ └── MCP23S17_InputsOnly.cpp.d │ ├── MicroThinkPadAdapter.cpp.d │ ├── MicroThinkPadAdapter.eep │ ├── MicroThinkPadAdapter.elf │ ├── MicroThinkPadAdapter.hex │ ├── Print.cpp.d │ ├── SPI │ │ └── SPI.cpp.d │ ├── Stream.cpp.d │ ├── Tone.cpp.d │ ├── TrackPointExtended │ │ └── TrackPoint.cpp.d │ ├── USBCore.cpp.d │ ├── WInterrupts.c.d │ ├── WMath.cpp.d │ ├── WString.cpp.d │ ├── main.cpp.d │ ├── malloc.c.d │ ├── new.cpp.d │ ├── realloc.c.d │ ├── wiring.c.d │ ├── wiring_analog.c.d │ ├── wiring_digital.c.d │ ├── wiring_pulse.c.d │ └── wiring_shift.c.d ├── MicroThinkPadAdapter.atsln ├── MicroThinkPadAdapter.atsuo ├── MicroThinkPadAdapter.cppproj ├── MicroThinkPadAdapter.ino ├── MicroThinkPadAdapter.sdf ├── MicroThinkPadAdapter.sln ├── MicroThinkPadAdapter.v12.suo ├── MicroThinkPadAdapter.vcxproj ├── MicroThinkPadAdapter.vcxproj.filters └── Visual Micro │ ├── .MicroThinkPadAdapter.vsarduino.h │ ├── Compile.vmps.xml │ ├── Configuration.Debug.vmps.xml │ └── Upload.vmps.xml ├── README.md ├── doc └── AdapterTest.jpg └── libraries ├── MCP23S17_Input ├── MCP23S17_InputsOnly.cpp └── MCP23S17_InputsOnly.h └── TrackPointExtended ├── TrackPoint.cpp └── TrackPoint.h /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files 2 | *.slo 3 | *.lo 4 | *.o 5 | *.obj 6 | 7 | # Compiled Dynamic libraries 8 | *.so 9 | *.dylib 10 | *.dll 11 | 12 | # Compiled Static libraries 13 | *.lai 14 | *.la 15 | *.a 16 | *.lib 17 | 18 | # Executables 19 | *.exe 20 | *.out 21 | *.app 22 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/CDC.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\CDC.cpp.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\CDC.cpp \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Platform.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Arduino.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/binary.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/WCharacter.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/WString.h \ 9 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/HardwareSerial.h \ 10 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Stream.h \ 11 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Print.h \ 12 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Printable.h \ 13 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/new.h \ 14 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBAPI.h \ 15 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 16 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h \ 17 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBDesc.h \ 18 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBCore.h \ 19 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBAPI.h 20 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/HID.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\HID.cpp.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\HID.cpp \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Platform.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Arduino.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/binary.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/WCharacter.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/WString.h \ 9 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/HardwareSerial.h \ 10 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Stream.h \ 11 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Print.h \ 12 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Printable.h \ 13 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/new.h \ 14 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBAPI.h \ 15 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 16 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h \ 17 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBDesc.h \ 18 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBCore.h \ 19 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBAPI.h \ 20 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBDesc.h 21 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/HardwareSerial.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\HardwareSerial.cpp.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\HardwareSerial.cpp \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Arduino.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/binary.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/WCharacter.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/WString.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/HardwareSerial.h \ 9 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Stream.h \ 10 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Print.h \ 11 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Printable.h \ 12 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/new.h \ 13 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBAPI.h \ 14 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 15 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h \ 16 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/wiring_private.h \ 17 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Arduino.h \ 18 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/HardwareSerial.h 19 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/IPAddress.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\IPAddress.cpp.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\IPAddress.cpp \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Arduino.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/binary.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/WCharacter.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/WString.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/HardwareSerial.h \ 9 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Stream.h \ 10 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Print.h \ 11 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Printable.h \ 12 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/new.h \ 13 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/USBAPI.h \ 14 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 15 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h \ 16 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/IPAddress.h \ 17 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Printable.h 18 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/MCP23S17_Input/MCP23S17_InputsOnly.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\MCP23S17_Input\MCP23S17_InputsOnly.cpp.o: \ 3 | D:\Arduino_workspace\arduino-thinkpad\libraries\MCP23S17_Input\MCP23S17_InputsOnly.cpp \ 4 | D:\Arduino_workspace\arduino-thinkpad\libraries\MCP23S17_Input\/MCP23S17_InputsOnly.h \ 5 | C:\Program\ Files\ (x86)\Arduino\libraries\SPI/SPI.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Arduino.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/binary.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/WCharacter.h \ 9 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/WString.h \ 10 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/HardwareSerial.h \ 11 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Stream.h \ 12 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Print.h \ 13 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Printable.h \ 14 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/new.h \ 15 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/USBAPI.h \ 16 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 17 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h 18 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/MicroThinkPadAdapter.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\MicroThinkPadAdapter.cpp.o: \ 3 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\MicroThinkPadAdapter.cpp \ 4 | C:\Program\ Files\ (x86)\Arduino\libraries\SPI/SPI.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Arduino.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/binary.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/WCharacter.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/WString.h \ 9 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/HardwareSerial.h \ 10 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Stream.h \ 11 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Print.h \ 12 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Printable.h \ 13 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/new.h \ 14 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/USBAPI.h \ 15 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 16 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h \ 17 | D:\Arduino_workspace\arduino-thinkpad\libraries/TrackPointExtended/TrackPoint.h \ 18 | D:\Arduino_workspace\arduino-thinkpad\libraries/MCP23S17_Input/MCP23S17_InputsOnly.h \ 19 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/arduino.h 20 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/MicroThinkPadAdapter.eep: -------------------------------------------------------------------------------- 1 | :00000001FF 2 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/MicroThinkPadAdapter.elf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rampadc/arduino-thinkpadkb-usb/13fd1dcdcd75948983f26547601e0926bbfc65b3/MicroThinkPadAdapter/Debug/MicroThinkPadAdapter.elf -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/MicroThinkPadAdapter.hex: -------------------------------------------------------------------------------- 1 | :100000000C9478010C946B060C9498060C94C5061D 2 | :100010000C94F2060C94A0010C94A0010C941F0700 3 | :100020000C94A0010C94A0010C94730E0C94FA0E85 4 | :100030000C94A0010C94A0010C94A0010C94A001BC 5 | :100040000C94A0010C94A0010C94A0010C94A001AC 6 | :100050000C94A0010C94A0010C94A0010C944C07EA 7 | :100060000C94A0010C94A0010C94A0010C94A0018C 8 | :100070000C94A0010C94A0010C94A0010C94A0017C 9 | :100080000C94A0010C94A0010C94A0010C94A0016C 10 | :100090000C94A0010C94A0010C94A0010C94A0015C 11 | :1000A0000C94A0010C94A0010C94A001000000008D 12 | :1000B000240027002A002D00300000000000250049 13 | :1000C00028002B002E003100000000002300260035 14 | :1000D00029002C002F000404040404030405020278 15 | :1000E00002020403020202020606060606060404D1 16 | :1000F00002020204040802011040804010204080E7 17 | :10010000408008020401804020100201108010206D 18 | :1001100040400000000200080E0000030401000B34 19 | :1001200000000000000000000000000000000000CF 20 | :10013000070605040100080A0B0C0D09080B000254 21 | :10014000020201000904000001020200000524006F 22 | :100150001001052401010104240206052406000102 23 | :100160000705810310004009040100020A00000095 24 | :100170000705020240000007058302400000050158 25 | :100180000902A1010901A10085010509190129033D 26 | :1001900015002501950375018102950175058103FF 27 | :1001A00005010930093109381581257F7508950346 28 | :1001B0008106C0C005010906A1018502050719E0F5 29 | :1001C00029E715002501750195088102950175083B 30 | :1001D0008103950675081500256505071900296531 31 | :1001E0008100C0090402000103000000092101018F 32 | :1001F00000012265000705840340000100000000A3 33 | :10020000000000002A2B2800000000000000000071 34 | :100210000000000000000000000000002C9EB4A0C0 35 | :10022000A1A2A434A6A7A5AE362D3738271E1F20BD 36 | :10023000212223242526B333B62EB7B89F84858682 37 | :100240008788898A8B8C8D8E8F90919293949596C6 38 | :100250009798999A9B9C9D2F3130A3AD3504050644 39 | :100260000708090A0B0C0D0E0F10111213141516A6 40 | :100270001718191A1B1C1DAFB1B0B50004030904EF 41 | :100280002203410072006400750069006E006F0077 42 | :1002900020004D006900630072006F002000200004 43 | :1002A00020001803410072006400750069006E00B0 44 | :1002B0006F0020004C004C004300120100020000BF 45 | :1002C00000404123378000010102000112010002B9 46 | :1002D000020000404123378000010102000100C1FB 47 | :1002E0008081C100CC0193039609B80AAD0DC50108 48 | :1002F00011241FBECFEFDAE0DEBFCDBF11E0A0E0DA 49 | :10030000B1E0EEE2F1E202C005900D92AC3CB10723 50 | :10031000D9F712E0ACECB1E001C01D92A439B107ED 51 | :10032000E1F712E0CEEED2E004C02297FE010E9477 52 | :100330008610C43ED107C9F70E94F80B0C948A10AE 53 | :100340000C9400000F938130910581F46F5F7F4F13 54 | :10035000D1F485ED91E062E043E026E001E00E9407 55 | :10036000A30581EE91E00E940C060DC0892B59F483 56 | :100370006F5F7F4F41F481EE91E00E94D90585EDDA 57 | :1003800091E00E9407040F91089580E090E06FEFE4 58 | :100390007FEF0E94A201089581E090E06FEF7FEF70 59 | :1003A0000E94A201089585ED91E00E942404089521 60 | :1003B000EF92FF921F93CF93DF93C0E0D0E0E82E3F 61 | :1003C000FF24FE01E655FE4F1081C7010C2E02C02E 62 | :1003D000959587950A94E2F780FF06C08EE792E034 63 | :1003E000612F0E94DC0B0CC08EE792E0612F0E940F 64 | :1003F0008C0A882329F08EE792E0612F0E94D40BAB 65 | :100400002196C230D105E9F6DF91CF911F91FF907F 66 | :10041000EF900895EF92FF920F931F93DF93CF9386 67 | :1004200000D000D000D0CDB7DEB70E949407611590 68 | :1004300071058105910541F40E94940762307105B0 69 | :100440008105910508F471C00E9494079B01AC01DD 70 | :100450006093D1017093D2018093D3019093D40122 71 | :100460008091CC019091CD01A091CE01B091CF01AE 72 | :10047000281739074A075B0740F42093CC013093D3 73 | :10048000CD014093CE015093CF018091CC0190914A 74 | :10049000CD01A091CE01B091CF0179018A01E81A76 75 | :1004A000F90A0A0B1B0BD801C7018A3F9105A10568 76 | :1004B000B105D8F18091D0018823B9F52093CC0102 77 | :1004C0003093CD014093CE015093CF0186EE91E061 78 | :1004D0000E94DB03809117029091180260E071E0A6 79 | :1004E0000E94E40C809117029091180268E071E07C 80 | :1004F0000E94E40C00911702109118020E949407C8 81 | :10050000AB01BC01C8012AE030E00E94D50C80910B 82 | :100510001702909118026AE071E00E94E70C62E015 83 | :1005200070E080E090E00E94A20785ED91E00E94DB 84 | :100530000804882331F185ED91E00E940B046C835F 85 | :100540007D838E83DE011196FE01349683E0019057 86 | :100550000D928150E1F72B81098102FF07C08EE7E0 87 | :1005600092E060E040E00E94AD0B0BC021958EE769 88 | :1005700092E06A81422F20E00E94AD0B802F0E9402 89 | :10058000D8018091E2019091E30108970CF058C0E6 90 | :100590001092E5011092E40140C06091E401709175 91 | :1005A000E50181EE91E00E94DA05892BB9F0E09136 92 | :1005B000E201F091E3018091E4019091E50134E0E2 93 | :1005C000EE0FFF1F3A95E1F7E80FF91FE05EFE4FCF 94 | :1005D0008FE792E060810E943C0B16C0E091E2013F 95 | :1005E000F091E3018091E4019091E50124E0EE0FA8 96 | :1005F000FF1F2A95E1F7E80FF91FE05EFE4F8FE736 97 | :1006000092E060810E94F90A8091E4019091E501F5 98 | :1006100001969093E5018093E4018091E40190912B 99 | :10062000E50140970CF4B9CF8091E2019091E3018C 100 | :1006300001969093E3018093E2012D9A2D9806C0D4 101 | :100640001092E3011092E2012C9A2C9826960FB694 102 | :10065000F894DEBF0FBECDBFCF91DF911F910F91F8 103 | :10066000FF90EF900895EF92FF920F931F9306EE85 104 | :1006700011E040E7E42E42E0F42EC801B70120E08B 105 | :1006800032EC41E050E00E94940360ED77E080E0BE 106 | :1006900090E00E94A207C8010E94DB03809117022C 107 | :1006A0009091180261E171E00E94E70C6AE070E04D 108 | :1006B00080E090E00E94A207C80160E040E00E9454 109 | :1006C000920387E062E00E945B0889E061E00E949B 110 | :1006D0005B0888E061E00E945B088FE792E00E947F 111 | :1006E000990A8EE792E00E948B0AC70160E875E2E2 112 | :1006F0000E944B0905ED11E0C8010E94BE05C8012A 113 | :1007000060EC0E948105C8010E94860581E063EDCE 114 | :1007100071E042E050E00E9416061F910F91FF9099 115 | :10072000EF900895089508950F931F93CF93DF934B 116 | :100730008B01FC0172AB61ABCB01B9010E944B098B 117 | :10074000C0E0D0E00AC0CA31D10561F0219668EC62 118 | :1007500070E080E090E00E94A207C8010E94AD090D 119 | :10076000882389F3DF91CF911F910F910895CF9343 120 | :10077000DF93EC01662339F015C063E070E080E0A0 121 | :1007800090E00E94A2070E94940729813A814B8140 122 | :100790005C81621B730B840B950B613271058105C3 123 | :1007A000910558F30E94940769837A838B839C8315 124 | :1007B000DF91CF91089560E00E94B70308952CB5B2 125 | :1007C000382F33702C7F322B3CBD2DB590E09595A2 126 | :1007D00087959595879581702E7F822B8DBD089585 127 | :1007E00081E161E00E94E80881E161E00E945B082C 128 | :1007F0008CB580618CBD8CB580648CBD8FE061E070 129 | :100800000E945B0880E161E00E945B080895089502 130 | :10081000FC0183850895DF93CF9300D00F92CDB76D 131 | :10082000DEB7DE011196FC01339683E001900D9254 132 | :100830008150E1F769817A818B8190E00F900F9070 133 | :100840000F90CF91DF910895CF93DF93EC011B863A 134 | :1008500089810E941B0920E0892B09F021E028876B 135 | :100860008E8181508F838F81883058F489852885C7 136 | :100870009F8130E002C0220F331F9A95E2F7822B4E 137 | :1008800089878E818F5F8E838E818B30C1F48A85BC 138 | :10089000813041F0813018F0823079F409C08985C7 139 | :1008A0008B8302C089858C838A858F5F8A8705C088 140 | :1008B00089858D831A8681E08B871E821986DF9158 141 | :1008C000CF9108951F93162F862F61E00E945B0839 142 | :1008D000812F60E00E94E8081F9108951F93162F52 143 | :1008E000862F60E00E945B08812F61E00E94E8088B 144 | :1008F0001F910895FF920F931F93CF93DF93EC0105 145 | :1009000068810E946E04CE0169810E946E0482E3B8 146 | :1009100090E00E94FB0788810E941B090197D9F390 147 | :1009200085E090E00E94FB0788810E941B09892BCB 148 | :10093000D9F3FF2400E011E088810E941B09019790 149 | :10094000D9F389810E941B09019709F4F12A888152 150 | :100950000E941B09892BD9F30F5F083011F0110F8A 151 | :10096000EBCF88810E941B090197D9F388810E94EF 152 | :100970001B09892BD9F388810E941B090197D9F3A0 153 | :1009800088810E941B09892BD9F3CE0168810E94BE 154 | :1009900062048F2DDF91CF911F910F91FF900895E9 155 | :1009A000DF92EF92FF920F931F93CF93DF93EC01AF 156 | :1009B000D62E69810E946E04CE0168810E946E0469 157 | :1009C0008CE291E00E94FB07CE0168810E946204E4 158 | :1009D0008CE291E00E94FB07CE0169810E946204D3 159 | :1009E0008AE090E00E94FB07CE0168810E946E04BD 160 | :1009F00088810E941B090197D9F3EE24FF24F39408 161 | :100A00000D2D10E0D0FE05C0CE0169810E946E045C 162 | :100A100004C0CE0169810E94620488810E941B0982 163 | :100A2000892BD9F388810E941B090197D9F381E0B2 164 | :100A3000D822FD24E39488E0E81621F01595079567 165 | :100A4000D02EDECFFF2029F0CE0169810E946E04F6 166 | :100A500004C0CE0169810E94620488810E941B0942 167 | :100A6000892BD9F388810E941B090197D9F3CE0104 168 | :100A700069810E946E0482E390E00E94FB078881F6 169 | :100A80000E941B090197D9F388810E941B09892BB9 170 | :100A9000D9F389810E941B09892BB1F3CE016881AA 171 | :100AA0000E946204DF91CF911F910F91FF90EF9010 172 | :100AB000DF900895EF92FF920F931F938C01F62E13 173 | :100AC000E42E62EE0E94D004C8010E947A04C8019C 174 | :100AD00061E80E94D004C8010E947A04C8016F2D09 175 | :100AE0000E94D004C8010E947A04C8016E2D0E94A1 176 | :100AF000D004C8010E947A041F910F91FF90EF90DB 177 | :100B00000895462F6AE40E945A0508950F931F9393 178 | :100B10008C016AEE0E94D004C8010E947A04C801C8 179 | :100B200064EF0E94D004C8010E947A04C801F80151 180 | :100B300060810E946E04C801F80161810E946E0408 181 | :100B40001F910F9108950F93CF93DF93EC0168836A 182 | :100B500049832A83002331F01E821F82188619865A 183 | :100B60001A861B86CE0168810E946E04CE016981BF 184 | :100B70000E946E04DF91CF910F9108950F931F9300 185 | :100B80008C01FC01828161E00E945B08F801828196 186 | :100B900061E00E94E80860ED77E080E090E00E946C 187 | :100BA000A207F801828160E00E94E8081F910F917E 188 | :100BB000089508956031710518F020E030E02AC0F2 189 | :100BC0006830710514F093E101C092E18F9881E4DF 190 | :100BD0008EBD0DB407FEFDCF8EB59EBD0DB407FED4 191 | :100BE000FDCF8EB51EBC0DB407FEFDCF4EB58F9A5E 192 | :100BF0006830710514F06850704020E030E081E00A 193 | :100C000090E002C0880F991F6A95E2F7482311F01F 194 | :100C100021E030E0C901089582E161E00E945B08B3 195 | :100C200082E00E94DF030E94F0030895853008F0FF 196 | :100C300051C0E82FF0E0EE0FFF1FE75EFD4F71831C 197 | :100C40006083823009F1833030F4882349F08130A9 198 | :100C500009F040C00DC0833021F18430D9F52EC099 199 | :100C6000809169008C7F842B80936900E89A0895B5 200 | :100C700080916900440F551F440F551F837F842BBB 201 | :100C800080936900E99A08958091690034E0440FE7 202 | :100C9000551F3A95E1F78F7C842B80936900EA9A7F 203 | :100CA00008958091690026E0440F551F2A95E1F7C9 204 | :100CB0008F73842B80936900EB9A089580916A006A 205 | :100CC00094E0440F551F9A95E1F78F7C842B809315 206 | :100CD0006A00EE9A08951F920F920FB60F92112498 207 | :100CE0002F933F934F935F936F937F938F939F9334 208 | :100CF000AF93BF93EF93FF938091190290911A02E3 209 | :100D0000892B29F0E0911902F0911A020995FF91BF 210 | :100D1000EF91BF91AF919F918F917F916F915F9173 211 | :100D20004F913F912F910F900FBE0F901F901895EC 212 | :100D30001F920F920FB60F9211242F933F934F9350 213 | :100D40005F936F937F938F939F93AF93BF93EF9333 214 | :100D5000FF9380911B0290911C02892B29F0E09156 215 | :100D60001B02F0911C020995FF91EF91BF91AF9189 216 | :100D70009F918F917F916F915F914F913F912F91B3 217 | :100D80000F900FBE0F901F9018951F920F920FB6E5 218 | :100D90000F9211242F933F934F935F936F937F9301 219 | :100DA0008F939F93AF93BF93EF93FF9380911D0217 220 | :100DB00090911E02892B29F0E0911D02F0911E02F4 221 | :100DC0000995FF91EF91BF91AF919F918F917F9185 222 | :100DD0006F915F914F913F912F910F900FBE0F90A8 223 | :100DE0001F9018951F920F920FB60F9211242F93F8 224 | :100DF0003F934F935F936F937F938F939F93AF93A3 225 | :100E0000BF93EF93FF9380911F0290912002892B53 226 | :100E100029F0E0911F02F09120020995FF91EF91D6 227 | :100E2000BF91AF919F918F917F916F915F914F9102 228 | :100E30003F912F910F900FBE0F901F9018951F920A 229 | :100E40000F920FB60F9211242F933F934F935F93FE 230 | :100E50006F937F938F939F93AF93BF93EF93FF9382 231 | :100E60008091210290912202892B29F0E0912102A8 232 | :100E7000F09122020995FF91EF91BF91AF919F915F 233 | :100E80008F917F916F915F914F913F912F910F9033 234 | :100E90000FBE0F901F9018951F920F920FB60F92D2 235 | :100EA00011242F933F938F939F93AF93BF93809180 236 | :100EB000270290912802A0912902B0912A02309134 237 | :100EC0002B020196A11DB11D232F2D5F2D3720F080 238 | :100ED0002D570196A11DB11D20932B02809327024F 239 | :100EE00090932802A0932902B0932A0280912302B2 240 | :100EF00090912402A0912502B09126020196A11D95 241 | :100F0000B11D8093230290932402A0932502B093F5 242 | :100F10002602BF91AF919F918F913F912F910F909A 243 | :100F20000FBE0F901F9018958FB7F894209127024D 244 | :100F3000309128024091290250912A028FBFB901B5 245 | :100F4000CA0108959B01AC017FB7F89480912302F8 246 | :100F500090912402A0912502B091260266B5A89B2B 247 | :100F600005C06F3F19F00196A11DB11D7FBFBA2FBB 248 | :100F7000A92F982F8827860F911DA11DB11D62E012 249 | :100F8000880F991FAA1FBB1F6A95D1F7BC012DC0FE 250 | :100F9000FFB7F8948091230290912402A09125023A 251 | :100FA000B0912602E6B5A89B05C0EF3F19F0019667 252 | :100FB000A11DB11DFFBFBA2FA92F982F88278E0F13 253 | :100FC000911DA11DB11DE2E0880F991FAA1FBB1F33 254 | :100FD000EA95D1F7861B970B885E9340C8F22150A3 255 | :100FE00030404040504068517C4F2115310541054B 256 | :100FF000510571F60895019739F0880F991F880FF0 257 | :10100000991F02970197F1F70895789484B582604B 258 | :1010100084BD84B5816084BD85B5826085BD85B59C 259 | :10102000816085BDEEE6F0E0808181608083E1E84B 260 | :10103000F0E0108280818260808380818160808383 261 | :10104000E0E8F0E0808181608083E1E9F0E0808188 262 | :1010500082608083808181608083E0E9F0E080812C 263 | :1010600081608083E1ECF0E0808184608083808116 264 | :1010700082608083808181608083E3ECF0E0808106 265 | :1010800081608083E0ECF0E0808182608083E2EC2C 266 | :10109000F0E0808181608083EAE7F0E08081846015 267 | :1010A0008083808182608083808181608083808171 268 | :1010B000806880830895CF93DF93482F50E0CA0162 269 | :1010C0008C509F4FFC0134914A525F4FFA0184913A 270 | :1010D000882369F190E0880F991FFC01E455FF4FC8 271 | :1010E000A591B491FC01E654FF4FC591D4916623BC 272 | :1010F00051F42FB7F8948C91932F909589238C936A 273 | :10110000888189230BC0623061F42FB7F8948C91E9 274 | :10111000932F909589238C938881832B88832FBF6D 275 | :1011200006C09FB7F8948C91832B8C939FBFDF915F 276 | :10113000CF910895883071F1893068F4823031F1AF 277 | :10114000833020F4813009F042C01DC0833089F023 278 | :101150008430E9F512C08B3059F18C3028F4893095 279 | :10116000E9F08A30A1F51EC08C3031F18E3079F56E 280 | :1011700029C0809180008F7703C0809180008F7D8F 281 | :1011800080938000089584B58F7702C084B58F7DE9 282 | :1011900084BD0895809190008F7707C08091900062 283 | :1011A0008F7D03C080919000877F80939000089589 284 | :1011B0008091C0008F7703C08091C0008F7D8093A5 285 | :1011C000C00008958091C200877F8093C200089577 286 | :1011D000FF920F931F93F62E482F50E0CA018E5EA8 287 | :1011E0009E4FFC012491CA018C509F4FFC01149129 288 | :1011F0004A525F4FFA0104910023C9F0222319F0EB 289 | :10120000822F0E949A08E02FF0E0EE0FFF1FE654B5 290 | :10121000FF4FA591B4919FB7F894FF2021F48C91D2 291 | :101220001095812302C08C91812B8C939FBF1F91BD 292 | :101230000F91FF9008950F931F93482F50E0CA011C 293 | :101240008E5E9E4FFC012491CA018C509F4FFC0181 294 | :1012500004914A525F4FFA011491112319F420E0CE 295 | :1012600030E015C0222319F0822F0E949A08812FA6 296 | :1012700090E0880F991F88539F4FFC01A591B4916E 297 | :101280008C9120E030E0802311F021E030E0C901B2 298 | :101290001F910F910895089520916C0230916D0275 299 | :1012A00080916E0290916F02281B390B2F73307062 300 | :1012B000C901089520916C0230916D0280916E02F7 301 | :1012C00090916F022817390719F42FEF3FEF09C0EB 302 | :1012D000E0916E02F0916F02E45DFD4F8081282F56 303 | :1012E00030E0C901089520916C0230916D02809127 304 | :1012F0006E0290916F022817390719F42FEF3FEF14 305 | :1013000013C0E0916E02F0916F02E45DFD4F208109 306 | :1013100080916E0290916F0201968F7390709093FE 307 | :101320006F0280936E0230E0C9010895109273023B 308 | :101330001092720288EE93E0A0E0B0E08093740215 309 | :1013400090937502A0937602B093770280EB91E0C0 310 | :10135000909371028093700208951F931091A701DA 311 | :101360006AE070E080E090E00E94A207111111E0B5 312 | :10137000812F1F9108950F931F93DF93CF930F92A7 313 | :10138000CDB7DEB78C0169838091A701882369F00E 314 | :1013900083E0BE016F5F7F4F41E050E00E94CE0DC1 315 | :1013A0001816190614F49C0107C081E090E0F801BA 316 | :1013B0009383828320E030E0C9010F90CF91DF91C9 317 | :1013C0001F910F91089583E00E94A30D0895CF937C 318 | :1013D000DF9312C082E00E942E0D2FEF8F3F920705 319 | :1013E000C9F0E0916C02F0916D02E45DFD4F8083E5 320 | :1013F000D0936D02C0936C02C0916C02D0916D02CB 321 | :101400002196CF73D07080916E0290916F02C817B1 322 | :10141000D90701F7DF91CF910895FC0180818E5F9C 323 | :10142000808380E86CE371E042E450E00E94470D65 324 | :101430000895FC0181819081913A59F4813209F03B 325 | :101440004CC080E060EA71E047E050E00E94470D48 326 | :1014500042C0913209F041C0803239F480EA91E013 327 | :1014600067E070E00E948B0D36C0823209F035C013 328 | :1014700082818093A7018091A0019091A101A09108 329 | :10148000A201B091A301805B9440A040B04019F547 330 | :101490008091A70180FD12C087E797E7909301082C 331 | :1014A000809300082BE088E190E00FB6F894A895AF 332 | :1014B000809360000FBE209360000DC088E10FB6DE 333 | :1014C000F89480936000109260000FBEA89510926F 334 | :1014D00001081092000881E0089580E00895FC0161 335 | :1014E00091818081813A31F4913089F080E09330AC 336 | :1014F00089F40DC0813269F49B3021F4828180939C 337 | :10150000A80105C09A3029F482818093A90181E065 338 | :10151000089580E008950895FC0120E070E0808146 339 | :1015200090E068237923161617060CF421E0822F29 340 | :1015300008950895EF92FF920F931F938C01E62E6A 341 | :10154000DC01ED91FC910480F581E02D0995F82EE8 342 | :10155000D801ED91FC910680F781E02DC8016E2D38 343 | :1015600009958F2D90E01F910F91FF90EF900895B6 344 | :1015700010927E02109282021092810282EC91E01F 345 | :101580009093800280937F020895EF92FF920F93D1 346 | :101590001F93DF93CF930F92CDB7DEB789838B0173 347 | :1015A0007A0184E0BE016F5F7F4F41E050E00E940E 348 | :1015B000CE0D84E4B801A7010E94CE0D0F90CF910B 349 | :1015C000DF911F910F91FF90EF90089582E048E026 350 | :1015D00050E00E94C50A0895FC0116821782108609 351 | :1015E00011861286138614823496BF010E94E60A81 352 | :1015F0000895DC01683810F0685829C0E62FF0E043 353 | :1016000067FF13C0E058F04081E090E002C0880F0F 354 | :10161000991FEA95E2F7809514962C911497282348 355 | :1016200014962C93149760E012C0E450FE4F64911E 356 | :10163000662319F420E030E01DC067FF08C014964F 357 | :101640008C9114978D7F14968C9314976F77FD016E 358 | :1016500090E0662321F08681861709F416829F5F49 359 | :1016600031969630B1F7CD011496BD010E94E60A7D 360 | :1016700021E030E0C9010895CF93DF93DC016838A1 361 | :1016800010F0685825C0E62FF0E067FF12C0E05860 362 | :10169000F04081E090E002C0880F991FEA95E2F7E0 363 | :1016A00014962C911497282B14962C93149760E081 364 | :1016B0000FC0E450FE4F64916623D9F167FF08C064 365 | :1016C00014968C911497826014968C9314976F776C 366 | :1016D00016968C9116978617A9F117968C911797E5 367 | :1016E000861781F118968C911897861759F11996DB 368 | :1016F0008C911997861731F11A968C911A97861743 369 | :1017000009F11B968C911B978617E1F0ED01E0E043 370 | :10171000F0E09E2F8E81882321F4EA0FFB1F668361 371 | :1017200006C09F5F31962196E630F10591F796301D 372 | :1017300049F481E090E013969C938E93129720E0F9 373 | :1017400030E007C0CD011496BD010E94E60A21E0F9 374 | :1017500030E0C901DF91CF910895DF93CF9300D09E 375 | :1017600000D0CDB7DEB7FC01808189836A834B83CB 376 | :101770002C8381E0BE016F5F7F4F44E050E00E9408 377 | :10178000C50A0F900F900F900F90CF91DF910895A1 378 | :10179000FC018081681739F06083CF0160E040E090 379 | :1017A00020E00E94AD0B0895FC0160952081262366 380 | :1017B000622F0E94C80B0895FC01862F6081682B60 381 | :1017C000CF010E94C80B089580E86EE771E045E6FE 382 | :1017D00050E00E94470D0895FC0180818F5F808357 383 | :1017E00080E863EE71E049E150E00E94470D089502 384 | :1017F000CF93DF930E94050883E992E00E94AE0D2B 385 | :101800000E943303C0E0D0E00E940A022097E1F377 386 | :101810000E940000F9CFCF92DF92EF92FF920F93D8 387 | :101820001F93CF93DF937C016B018A01C0E0D0E06E 388 | :101830000FC0D6016D916D01D701ED91FC91019022 389 | :10184000F081E02DC7010995C80FD91F0150104044 390 | :101850000115110571F7CE01DF91CF911F910F9105 391 | :10186000FF90EF90DF90CF900895EF92FF920F934B 392 | :101870001F938C01DC01ED91FC910190F081E02D32 393 | :101880006DE009957C01D801ED91FC910190F0810A 394 | :10189000E02DC8016AE009959C012E0D3F1DC9018C 395 | :1018A0001F910F91FF90EF900895CF93DF93EC017C 396 | :1018B0006115710519F420E030E00FC0DB010D90D7 397 | :1018C0000020E9F71197A61BB70BE881F981028088 398 | :1018D000F381E02DAD0109959C01C901DF91CF9104 399 | :1018E00008954F925F927F928F929F92AF92BF9294 400 | :1018F000CF92DF92EF92FF920F931F93DF93CF93DC 401 | :10190000CDB7DEB7A1970FB6F894DEBF0FBECDBF3F 402 | :101910002C01742ECB01223008F42AE019A231E206 403 | :10192000C32ED12CCC0EDD1E822E9924AA24BB24DA 404 | :10193000672D752FA50194010E94621079018A011B 405 | :10194000C801B701A50194010E944310472D461B11 406 | :101950000894C108D1084A3014F4405D01C0495CC4 407 | :10196000F6014083E114F1040105110521F07E2CFC 408 | :101970005F2DC801DDCFC201B6010E94550CA196B2 409 | :101980000FB6F894DEBF0FBECDBFCF91DF911F9190 410 | :101990000F91FF90EF90DF90CF90BF90AF909F900E 411 | :1019A0008F907F905F904F900895DC012115310555 412 | :1019B00041F4ED91FC910190F081E02D642F0995A7 413 | :1019C00008950E94710C08950E94550C0895EF929D 414 | :1019D000FF920F931F937C010E94550C8C01C7014D 415 | :1019E0000E94350C080F191FC8011F910F91FF901D 416 | :1019F000EF900895282F80918D028823C1F057FF22 417 | :101A00001AC015C0289A90938C028091F10081939E 418 | :101A1000E217F307B9F74115510539F08091F2004B 419 | :101A2000882319F48BE68093E800AFBF02C04FEF24 420 | :101A30005FEFCA010895AFB7F89427702093E900CB 421 | :101A40008091F200282F30E0241735070CF4A9010B 422 | :101A5000FB019B01240F311D94E6DACFDF93CF9376 423 | :101A60000F92CDB7DEB7BE016F5F7F4F41E050E010 424 | :101A70000E94FA0C019719F02FEF3FEF03C0898104 425 | :101A8000282F30E0C9010F90CF91DF910895FF9288 426 | :101A90000F931F93F82E142F052F40919002509111 427 | :101AA0009102212F302FC901DC01FB016EEF29C00B 428 | :101AB000F7FE02C0949101C0908120918E02309176 429 | :101AC0008F0224173507ACF48091E8008570E1F3AC 430 | :101AD0008091E80082FF03C02FEF3FEF17C0909383 431 | :101AE000F100C90101968F739070892B11F46093F6 432 | :101AF000E8002F5F3F4F30938F0220938E021197A3 433 | :101B000031961097A9F6812F902F9C01C9011F9142 434 | :101B10000F91FF9008959C018091E80082FFFCCF17 435 | :101B2000F901260F311D03C08091F1008193E21766 436 | :101B3000F307D1F7289A84E680938C028BEF809389 437 | :101B4000E800CB0108958093E9008091F20088239A 438 | :101B500019F08AE38093E8000895089510928D02A9 439 | :101B600081E08093D70080EA8093D80082E189BD2C 440 | :101B700009B400FEFDCF61E070E080E090E00E94DB 441 | :101B8000A20780E98093D8008CE08093E200109255 442 | :101B9000E000559A209A5D98289808955F926F9278 443 | :101BA0007F928F929F92AF92BF92CF92DF92EF92ED 444 | :101BB000FF920F931F93CF93DF93E82E842E752E01 445 | :101BC00080918D02882371F18B01242F352FC9015B 446 | :101BD000EC017AEFF72E67E0962E9E2050E4552E0A 447 | :101BE0008E2D90E040E2A42EB12CA822B9223AE337 448 | :101BF000632E20E4C22ED12CC822D92258C09FB710 449 | :101C0000F8949092E9008091E80085FD02C020E000 450 | :101C100004C08091F200252D281B9FBF222361F470 451 | :101C2000FA9419F42FEF3FEF4DC061E070E080E0CF 452 | :101C300090E00E94A2073BC0822F90E0C817D9070E 453 | :101C40000CF42C2FC21BD1094FB7F8949092E900E5 454 | :101C5000A114B10421F406C01092F10021502223F6 455 | :101C6000D9F719C0E7FC03C0F801922F10C0C801D2 456 | :101C7000322F06C0FC010196E491E093F10031504F 457 | :101C80003323C1F706C081918093F10091509923CD 458 | :101C9000D1F7020F111D8091E80085FF05C0209744 459 | :101CA00029F4C114D10411F06092E8004FBF2097CD 460 | :101CB00009F0A5CF5D9A84E680938B02282D372DFD 461 | :101CC000C9019C01C901DF91CF911F910F91FF9034 462 | :101CD000EF90DF90CF90BF90AF909F908F907F90CC 463 | :101CE0006F905F9008951F920F920FB60F9211247C 464 | :101CF0002F933F934F935F936F937F938F939F9314 465 | :101D0000AF93BF93EF93FF938091E1001092E100B6 466 | :101D1000982F83FF0FC01092E90081E08093EB00C1 467 | :101D20001092EC0082E38093ED0010928D0288E027 468 | :101D30008093F00092FF34C083E08093E9008091AB 469 | :101D4000F200882319F08AE38093E8008FB7F894B3 470 | :101D500092E09093E9009091F2008FBF992321F0D7 471 | :101D600080E792E00E94E70980918B02882351F07E 472 | :101D700080918B02815080938B0280918B0288230B 473 | :101D800009F45D9880918C02882351F080918C0237 474 | :101D9000815080938C0280918C02882309F42898CA 475 | :101DA000FF91EF91BF91AF919F918F917F916F9133 476 | :101DB0005F914F913F912F910F900FBE0F901F9009 477 | :101DC00018950F931F93DF93CF930F92CDB7DEB784 478 | :101DD00019828E010F5F1F4FC8010E940D0AC801B2 479 | :101DE0000E94EC0B898190E00F90CF91DF911F91C1 480 | :101DF0000F9108951F920F920FB60F921124EF9238 481 | :101E0000FF921F932F933F934F935F936F937F9313 482 | :101E10008F939F93AF93BF93EF93FF93DF93CF93F2 483 | :101E2000CDB7DEB76197DEBFCDBF1092E9008091DC 484 | :101E3000E80083FF0FC1FE0131969E01275F3F4FEF 485 | :101E400003C08091F1008193E217F307D1F7289A3C 486 | :101E500084E680938C0282EF8093E800998197FF5B 487 | :101E600005C08091E80080FFFCCF03C08EEF809317 488 | :101E7000E800292F30E0C90180769070892B09F0A5 489 | :101E8000C2C08A81882329F41092F1001092F100D7 490 | :101E9000D6C0813009F4D3C0833009F4D0C0853076 491 | :101EA00049F48091E80080FFFCCF8B8180688093AB 492 | :101EB000E300C5C0863009F07CC01C81EF80F88447 493 | :101EC0001230C1F51092E90010928F0210928E022A 494 | :101ED00010929102109290020E94E10E99E0FE0190 495 | :101EE0003996DF01292F1D922A95E9F799871A87DC 496 | :101EF00091E09E8790E8988B9AEF998B20918E02C3 497 | :101F000030918F02275F3F4F3C872B878D87109240 498 | :101F1000E90010928F0210928E02F0929102E092EC 499 | :101F2000900280E0BF0149E050E00E94470D0E940E 500 | :101F3000E10E85C01092E90010928F0210928E027D 501 | :101F4000F0929102E0929002123241F482E290E02B 502 | :101F50000E94E40B892B09F476C071C0113079F42A 503 | :101F600088E0E816F10419F481E0809392028091F0 504 | :101F70009202882309F06BC0EAEBF2E013C0133041 505 | :101F800009F061C08B81882319F4ECE7F2E00AC004 506 | :101F9000823019F4E0E8F2E005C0813009F053C066 507 | :101FA000E2EAF2E0449180E8BF0150E00E94470D70 508 | :101FB00046C0873009F447C0883021F481E080931F 509 | :101FC000F1003DC08930D9F523703070232BD9F54D 510 | :101FD000EFEDF2E091E031E026E39093E9003093F9 511 | :101FE000EB0084918093EC002093ED009F5F31968D 512 | :101FF000953099F78EE78093EA001092EA008B8182 513 | :1020000080938D021CC08F8198851092E9001092F8 514 | :102010008F0210928E0290939102809390028D8194 515 | :10202000882329F4CE0101960E94190A06C0823045 516 | :1020300051F4CE0101960E946F0A882321F08EEFA1 517 | :102040008093E80007C081E28093EB0003C0ECECD2 518 | :10205000F2E0A8CF6196DEBFCDBFCF91DF91FF91B7 519 | :10206000EF91BF91AF919F918F917F916F915F9110 520 | :102070004F913F912F911F91FF90EF900F900FBEC6 521 | :102080000F901F901895629FD001739FF001829F5F 522 | :10209000E00DF11D649FE00DF11D929FF00D839FF7 523 | :1020A000F00D749FF00D659FF00D9927729FB00D94 524 | :1020B000E11DF91F639FB00DE11DF91FBD01CF01A7 525 | :1020C00011240895A1E21A2EAA1BBB1BFD010DC00D 526 | :1020D000AA1FBB1FEE1FFF1FA217B307E407F507D8 527 | :1020E00020F0A21BB30BE40BF50B661F771F881FB4 528 | :1020F000991F1A9469F760957095809590959B014A 529 | :10210000AC01BD01CF010895EE0FFF1F0590F491C2 530 | :10211000E02D099412E0CEEED2E004C0FE010E9450 531 | :0E21200086102296C03FD107C9F7F894FFCF72 532 | :10212E00564D4450455F31007C005F564D4450453E 533 | :10213E0000564D4450565F317C5F564D445056000C 534 | :10214E0060C2C335363DC92DCAD1D4D3D20000806A 535 | :10215E003132333437383930CBCDCCD6D5CE0000F2 536 | :10216E007177657275696F700000008300CF000093 537 | :10217E00B3C1C474795DC85BB20000000000810079 538 | :10218E00617364666A6B6C3B5C0000870000000044 539 | :10219E00B100C56768C70027C6000000DA820000DC 540 | :1021AE007A7863766D2C2E00B0000000D000858406 541 | :1021BE00000000626E00002F20D7D900D8860000E4 542 | :1021CE0000E100000000000001010102000000001B 543 | :1021DE00BB090B0C4C0973095A09E309E709000006 544 | :0C21EE0000009A0A0B0C3C0BF90AEC0AEA 545 | :00000001FF 546 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/Print.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\Print.cpp.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\Print.cpp \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Arduino.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/binary.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/WCharacter.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/WString.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/HardwareSerial.h \ 9 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Stream.h \ 10 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Print.h \ 11 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Printable.h \ 12 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/new.h \ 13 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBAPI.h \ 14 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 15 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h \ 16 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Print.h 17 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/SPI/SPI.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\SPI\SPI.cpp.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\libraries\SPI\SPI.cpp \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h \ 6 | C:\Program\ Files\ (x86)\Arduino\libraries\SPI\/SPI.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Arduino.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/binary.h \ 9 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/WCharacter.h \ 10 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/WString.h \ 11 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/HardwareSerial.h \ 12 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Stream.h \ 13 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Print.h \ 14 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Printable.h \ 15 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/new.h \ 16 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/USBAPI.h 17 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/Stream.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\Stream.cpp.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\Stream.cpp \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Arduino.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/binary.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/WCharacter.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/WString.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/HardwareSerial.h \ 9 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Stream.h \ 10 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Print.h \ 11 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Printable.h \ 12 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/new.h \ 13 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBAPI.h \ 14 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 15 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h \ 16 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Stream.h 17 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/Tone.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\Tone.cpp.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\Tone.cpp \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Arduino.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/binary.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/WCharacter.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/WString.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/HardwareSerial.h \ 9 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Stream.h \ 10 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Print.h \ 11 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Printable.h \ 12 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/new.h \ 13 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBAPI.h \ 14 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 15 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h 16 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/TrackPointExtended/TrackPoint.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\TrackPointExtended\TrackPoint.cpp.o: \ 3 | D:\Arduino_workspace\arduino-thinkpad\libraries\TrackPointExtended\TrackPoint.cpp \ 4 | D:\Arduino_workspace\arduino-thinkpad\libraries\TrackPointExtended\/TrackPoint.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Arduino.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/binary.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/WCharacter.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/WString.h \ 9 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/HardwareSerial.h \ 10 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Stream.h \ 11 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Print.h \ 12 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Printable.h \ 13 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/new.h \ 14 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/USBAPI.h \ 15 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 16 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h 17 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/USBCore.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\USBCore.cpp.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\USBCore.cpp \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Platform.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Arduino.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/binary.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/WCharacter.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/WString.h \ 9 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/HardwareSerial.h \ 10 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Stream.h \ 11 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Print.h \ 12 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Printable.h \ 13 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/new.h \ 14 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBAPI.h \ 15 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 16 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h \ 17 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBDesc.h \ 18 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBCore.h \ 19 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBAPI.h \ 20 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/USBDesc.h 21 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/WInterrupts.c.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\WInterrupts.c.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\WInterrupts.c \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/wiring_private.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Arduino.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/binary.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h 9 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/WMath.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\WMath.cpp.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\WMath.cpp 4 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/WString.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\WString.cpp.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\WString.cpp \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/WString.h 5 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/main.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\main.cpp.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\main.cpp \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Arduino.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/binary.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/WCharacter.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/WString.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/HardwareSerial.h \ 9 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Stream.h \ 10 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Print.h \ 11 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/Printable.h \ 12 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/new.h \ 13 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/USBAPI.h \ 14 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 15 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h 16 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/malloc.c.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\malloc.c.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\avr-libc\malloc.c \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\avr-libc\/sectionname.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\avr-libc\/stdlib_private.h 6 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/new.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\new.cpp.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\new.cpp \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino/new.h 5 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/realloc.c.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\realloc.c.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\avr-libc\realloc.c \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\avr-libc\/sectionname.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\avr-libc\/stdlib_private.h 6 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/wiring.c.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\wiring.c.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\wiring.c \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/wiring_private.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Arduino.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/binary.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h 9 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/wiring_analog.c.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\wiring_analog.c.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\wiring_analog.c \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/wiring_private.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Arduino.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/binary.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h 9 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/wiring_digital.c.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\wiring_digital.c.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\wiring_digital.c \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/wiring_private.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Arduino.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/binary.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h 9 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/wiring_pulse.c.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\wiring_pulse.c.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\wiring_pulse.c \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/wiring_private.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Arduino.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/binary.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h 9 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Debug/wiring_shift.c.d: -------------------------------------------------------------------------------- 1 | \ 2 | C:\Users\CONG\AppData\Local\VMicro\Arduino\Builds\MicroThinkPadAdapter\micro\wiring_shift.c.o: \ 3 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\wiring_shift.c \ 4 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/wiring_private.h \ 5 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/Arduino.h \ 6 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\cores\arduino\/binary.h \ 7 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/pins_arduino.h \ 8 | C:\Program\ Files\ (x86)\Arduino\hardware\arduino\variants\micro/../leonardo/pins_arduino.h 9 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/MicroThinkPadAdapter.atsln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Atmel Studio Solution File, Format Version 11.00 4 | Project("{E66E83B9-2572-4076-B26E-6BE79FF3018A}") = "MicroThinkPadAdapter", "MicroThinkPadAdapter.cppproj", "{07B459B4-8D76-4638-BC6D-A459BA2D616B}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|AVR = Debug|AVR 9 | Release|AVR = Release|AVR 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {07B459B4-8D76-4638-BC6D-A459BA2D616B}.Debug|AVR.ActiveCfg = Release|AVR 13 | {07B459B4-8D76-4638-BC6D-A459BA2D616B}.Debug|AVR.Build.0 = Release|AVR 14 | {07B459B4-8D76-4638-BC6D-A459BA2D616B}.Release|AVR.ActiveCfg = Release|AVR 15 | {07B459B4-8D76-4638-BC6D-A459BA2D616B}.Release|AVR.Build.0 = Release|AVR 16 | EndGlobalSection 17 | GlobalSection(SolutionProperties) = preSolution 18 | HideSolutionNode = FALSE 19 | EndGlobalSection 20 | EndGlobal 21 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/MicroThinkPadAdapter.atsuo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rampadc/arduino-thinkpadkb-usb/13fd1dcdcd75948983f26547601e0926bbfc65b3/MicroThinkPadAdapter/MicroThinkPadAdapter.atsuo -------------------------------------------------------------------------------- /MicroThinkPadAdapter/MicroThinkPadAdapter.cppproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 2.0 5 | 6.1 6 | com.Atmel.AVRGCC8.CPP 7 | {07b459b4-8d76-4638-bc6d-a459ba2d616b} 8 | atmega32u4 9 | none 10 | Executable 11 | CPP 12 | $(MSBuildProjectName) 13 | .elf 14 | $(MSBuildProjectDirectory)\$(Configuration) 15 | MicroThinkPadAdapter 16 | MicroThinkPadAdapter 17 | MicroThinkPadAdapter 18 | Native 19 | true 20 | false 21 | 22 | 23 | 0 24 | true 25 | 0x20000000 26 | true 27 | 28 | 0 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | True 46 | True 47 | True 48 | True 49 | True 50 | True 51 | 52 | 53 | __AVR_ATmega32u4__ 54 | __AVR_ATmega32U4__ 55 | _VMDEBUG=1 56 | ARDUINO=101 57 | ARDUINO_MAIN 58 | F_CPU=16000000L 59 | __AVR__ 60 | __cplusplus 61 | 62 | 63 | 64 | 65 | C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino 66 | C:\Program Files (x86)\Arduino\hardware\arduino\variants\micro 67 | C:\Program Files (x86)\Arduino\libraries\SPI 68 | C:\Program Files (x86)\Arduino\libraries\SPI\utility 69 | D:\Arduino_workspace\arduino-thinkpad\libraries\TrackPointExtended 70 | D:\Arduino_workspace\arduino-thinkpad\libraries\TrackPointExtended\utility 71 | D:\Arduino_workspace\arduino-thinkpad\libraries\MCP23S17_Input 72 | D:\Arduino_workspace\arduino-thinkpad\libraries\MCP23S17_Input\utility 73 | C:\Program Files (x86)\Arduino\libraries 74 | C:\Program Files (x86)\Arduino\hardware\arduino\libraries 75 | C:\Program Files (x86)\Visual Micro\Visual Micro for Arduino\Micro Platforms\default\debuggers 76 | D:\Arduino_workspace\arduino-thinkpad\libraries 77 | c:\program files (x86)\arduino\hardware\tools\avr\avr\include\ 78 | c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\ 79 | c:\program files (x86)\arduino\hardware\tools\avr\avr\ 80 | c:\program files (x86)\arduino\hardware\tools\avr\lib\gcc\avr\4.3.2\include\ 81 | 82 | 83 | Optimize (-O1) 84 | True 85 | True 86 | Default (-g2) 87 | True 88 | -std=gnu99 -include=arduino.h 89 | True 90 | True 91 | 92 | 93 | __AVR_ATmega32u4__ 94 | __AVR_ATmega32U4__ 95 | _VMDEBUG=1 96 | ARDUINO=101 97 | ARDUINO_MAIN 98 | F_CPU=16000000L 99 | __AVR__ 100 | __cplusplus 101 | 102 | 103 | 104 | 105 | C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino 106 | C:\Program Files (x86)\Arduino\hardware\arduino\variants\micro 107 | C:\Program Files (x86)\Arduino\libraries\SPI 108 | C:\Program Files (x86)\Arduino\libraries\SPI\utility 109 | D:\Arduino_workspace\arduino-thinkpad\libraries\TrackPointExtended 110 | D:\Arduino_workspace\arduino-thinkpad\libraries\TrackPointExtended\utility 111 | D:\Arduino_workspace\arduino-thinkpad\libraries\MCP23S17_Input 112 | D:\Arduino_workspace\arduino-thinkpad\libraries\MCP23S17_Input\utility 113 | C:\Program Files (x86)\Arduino\libraries 114 | C:\Program Files (x86)\Arduino\hardware\arduino\libraries 115 | C:\Program Files (x86)\Visual Micro\Visual Micro for Arduino\Micro Platforms\default\debuggers 116 | D:\Arduino_workspace\arduino-thinkpad\libraries 117 | c:\program files (x86)\arduino\hardware\tools\avr\avr\include\ 118 | c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\ 119 | c:\program files (x86)\arduino\hardware\tools\avr\avr\ 120 | c:\program files (x86)\arduino\hardware\tools\avr\lib\gcc\avr\4.3.2\include\ 121 | 122 | 123 | 124 | 125 | Optimize (-O1) 126 | True 127 | True 128 | Default (-g2) 129 | True 130 | -include=arduino.h 131 | <segmentname>=<address>, for example .boot=0xff 132 | Default (-Wa,-g) 133 | 134 | 135 | 136 | 137 | COM10 138 | 139 | 140 | 141 | 142 | 143 | 144 | True 145 | True 146 | True 147 | True 148 | True 149 | True 150 | 151 | 152 | __AVR_ATmega32u4__ 153 | __AVR_ATmega32U4__ 154 | _VMDEBUG=1 155 | ARDUINO=101 156 | ARDUINO_MAIN 157 | F_CPU=16000000L 158 | __AVR__ 159 | __cplusplus 160 | 161 | 162 | 163 | 164 | C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino 165 | C:\Program Files (x86)\Arduino\hardware\arduino\variants\micro 166 | C:\Program Files (x86)\Arduino\libraries\SPI 167 | C:\Program Files (x86)\Arduino\libraries\SPI\utility 168 | D:\Arduino_workspace\arduino-thinkpad\libraries\TrackPointExtended 169 | D:\Arduino_workspace\arduino-thinkpad\libraries\TrackPointExtended\utility 170 | D:\Arduino_workspace\arduino-thinkpad\libraries\MCP23S17_Input 171 | D:\Arduino_workspace\arduino-thinkpad\libraries\MCP23S17_Input\utility 172 | C:\Program Files (x86)\Arduino\libraries 173 | C:\Program Files (x86)\Arduino\hardware\arduino\libraries 174 | C:\Program Files (x86)\Visual Micro\Visual Micro for Arduino\Micro Platforms\default\debuggers 175 | D:\Arduino_workspace\arduino-thinkpad\libraries 176 | c:\program files (x86)\arduino\hardware\tools\avr\avr\include\ 177 | c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\ 178 | c:\program files (x86)\arduino\hardware\tools\avr\avr\ 179 | c:\program files (x86)\arduino\hardware\tools\avr\lib\gcc\avr\4.3.2\include\ 180 | 181 | 182 | Optimize (-O1) 183 | True 184 | True 185 | Default (-g2) 186 | True 187 | -std=gnu99 -include=arduino.h 188 | True 189 | True 190 | 191 | 192 | __AVR_ATmega32u4__ 193 | __AVR_ATmega32U4__ 194 | _VMDEBUG=1 195 | ARDUINO=101 196 | ARDUINO_MAIN 197 | F_CPU=16000000L 198 | __AVR__ 199 | __cplusplus 200 | 201 | 202 | 203 | 204 | C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino 205 | C:\Program Files (x86)\Arduino\hardware\arduino\variants\micro 206 | C:\Program Files (x86)\Arduino\libraries\SPI 207 | C:\Program Files (x86)\Arduino\libraries\SPI\utility 208 | D:\Arduino_workspace\arduino-thinkpad\libraries\TrackPointExtended 209 | D:\Arduino_workspace\arduino-thinkpad\libraries\TrackPointExtended\utility 210 | D:\Arduino_workspace\arduino-thinkpad\libraries\MCP23S17_Input 211 | D:\Arduino_workspace\arduino-thinkpad\libraries\MCP23S17_Input\utility 212 | C:\Program Files (x86)\Arduino\libraries 213 | C:\Program Files (x86)\Arduino\hardware\arduino\libraries 214 | C:\Program Files (x86)\Visual Micro\Visual Micro for Arduino\Micro Platforms\default\debuggers 215 | D:\Arduino_workspace\arduino-thinkpad\libraries 216 | c:\program files (x86)\arduino\hardware\tools\avr\avr\include\ 217 | c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\ 218 | c:\program files (x86)\arduino\hardware\tools\avr\avr\ 219 | c:\program files (x86)\arduino\hardware\tools\avr\lib\gcc\avr\4.3.2\include\ 220 | 221 | 222 | 223 | 224 | Optimize (-O1) 225 | True 226 | True 227 | Default (-g2) 228 | True 229 | -include=arduino.h 230 | <segmentname>=<address>, for example .boot=0xff 231 | Default (-Wa,-g) 232 | 233 | 234 | 235 | 236 | COM10 237 | 238 | 239 | 240 | 241 | 242 | compile 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | compile 251 | 252 | 253 | 254 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/MicroThinkPadAdapter.ino: -------------------------------------------------------------------------------- 1 | /* 2 | Arduino sketch for ThinkPad T60 keyboard with TrackPoint 3 | Written for Arduino Micro, using: 4 | - MCP23S17 for columns inputs 5 | - CD4017 for rows outputs 6 | Can be adapted to any ThinkPad keyboards that share the same receptacle 7 | 8 | Coded in Atmel Studio 6 with VisualMicro. 9 | 10 | Created by CONG NGUYEN (26/04/2014) 11 | */ 12 | 13 | #include 14 | #include 15 | //Libraries 16 | #include 17 | #include 18 | 19 | //Bits definitions 20 | #define BIT0 (0x0001) 21 | #define BIT1 (0x0002) 22 | #define BIT2 (0x0004) 23 | #define BIT3 (0x0008) 24 | #define BIT4 (0x0010) 25 | #define BIT5 (0x0020) 26 | #define BIT6 (0x0040) 27 | #define BIT7 (0x0080) 28 | 29 | //Extra keycode definitions 30 | #define KEY_VOLUME_UP 0 31 | #define KEY_VOLUME_DOWN 0 32 | #define KEY_MUTE 0 33 | #define KEY_PREV_FILE 0 34 | #define KEY_NEXT_FILE 0 35 | 36 | #define KEY_PAUSE 0xD0 37 | #define KEY_PRINT_SCREEN 0xCE 38 | #define KEY_SCROLL_LOCK 0xCF 39 | #define KEYPAD_NUMLOCK 0xDB 40 | #define KEYPAD_0 0xEA 41 | #define KEYPAD_1 0xE1 42 | #define KEYPAD_2 0xE2 43 | #define KEYPAD_3 0xE3 44 | #define KEYPAD_4 0xE4 45 | #define KEYPAD_5 0xE5 46 | #define KEYPAD_6 0xE6 47 | #define KEYPAD_7 0xE7 48 | #define KEYPAD_8 0xE8 49 | #define KEYPAD_9 0xE9 50 | #define KEYPAD_SLASH 0xDC 51 | #define KEYPAD_ASTERISK 0xDD 52 | #define KEYPAD_MINUS 0xDE 53 | #define KEYPAD_PLUS 0xDF 54 | #define KEYPAD_ENTER 0xE0 55 | #define KEYPAD_PERIOD 0xEB 56 | 57 | //GPIO according to schematic 58 | #define FN_PIN 7 59 | #define CLOCK4017 9 //PB5 60 | #define RESET4017 8 //PB4 61 | #define TP_Data 3 //PD0 62 | #define TP_Clock 2 //PD1 63 | #define TP_Reset 6 //PD7 64 | #define TP_Clock_Int 1 //if using stream mode, define clock pin's corresponding interrupt number 65 | 66 | //TrackPoint variables 67 | TrackPoint trackpoint(TP_Clock, TP_Data, TP_Reset, false); 68 | void sendButtonState(uint8_t); 69 | 70 | //Keyboard scanning related 71 | MCP23S17_InputsOnly cols; 72 | volatile int row = 0; 73 | volatile int col = 0; 74 | void rowsClock(void); 75 | void rowsReset(void); 76 | 77 | /***** KEYBOARD MATRIX WITHOUT NUMLOCK *******/ 78 | uint8_t MATRIX_WITHOUT_NUMLOCK[8][16] = { 79 | {'`',KEY_F1,KEY_F2,'5','6','=',KEY_F8,'-',KEY_F9,KEY_INSERT,KEY_DELETE,KEY_PAGE_UP,KEY_HOME,0,0,KEY_LEFT_CTRL}, 80 | {'1','2','3','4','7','8','9','0',KEY_F10,KEY_F12,KEY_F11,KEY_PAGE_DOWN,KEY_END,KEY_PRINT_SCREEN,0,0}, 81 | {'q','w','e','r','u','i','o','p',0,0,KEY_VOLUME_UP,KEY_LEFT_GUI,0,KEY_SCROLL_LOCK,0,0}, 82 | {KEY_TAB,KEY_CAPS_LOCK,KEY_F3,'t','y',']',KEY_F7,'[',KEY_BACKSPACE,0,KEY_VOLUME_DOWN,0,0,0,KEY_LEFT_SHIFT,0}, 83 | {'a','s','d','f','j','k','l',';','\\',0,KEY_MUTE,KEY_RIGHT_GUI,0,0,0,0}, 84 | {KEY_ESC,0,KEY_F4,'g','h',KEY_F6,0,'\'',KEY_F5,0,0,0,KEY_UP_ARROW,KEY_LEFT_ALT,0,0}, 85 | {'z','x','c','v','m',',','.',0,KEY_RETURN,0,0,KEY_PREV_FILE,KEY_PAUSE,0,KEY_RIGHT_SHIFT,KEY_RIGHT_CTRL}, 86 | {0,0,0,'b','n',0,0,'/',' ',KEY_RIGHT_ARROW,KEY_DOWN_ARROW,KEY_NEXT_FILE,KEY_LEFT_ARROW,KEY_RIGHT_ALT,0,0} 87 | }; 88 | /******* SKETCH STARTS HERE ********/ 89 | void initGPIO(void); 90 | 91 | void setup() 92 | { 93 | //MCP23S17 has inputs by default 94 | pinMode(FN_PIN, INPUT_PULLUP); //active low 95 | pinMode(CLOCK4017, OUTPUT); 96 | pinMode(RESET4017, OUTPUT); 97 | 98 | Keyboard.begin(); 99 | Mouse.begin(); 100 | 101 | Serial.begin(9600); 102 | 103 | trackpoint.reset(); 104 | trackpoint.setSensitivityFactor(0xC0); 105 | trackpoint.setRemoteMode(); 106 | } 107 | 108 | void loop() 109 | { 110 | //TrackPoint in report mode 111 | TrackPoint::DataReport d = trackpoint.readData(); 112 | if (d.state & (1 << 2)) { // middle button down => scroll 113 | Mouse.move(0, 0, d.y); 114 | } else { 115 | Mouse.move(d.x, -d.y, 0); 116 | sendButtonState(d.state); 117 | } 118 | 119 | //Keyboard scanning 120 | if(row < 8) { 121 | for(col = 0; col < 16; col++) { 122 | if(cols.readPin(col)) { 123 | //current key is pressed 124 | Keyboard.press(MATRIX_WITHOUT_NUMLOCK[row][col]); 125 | } else { 126 | //current key is not pressed 127 | Keyboard.release(MATRIX_WITHOUT_NUMLOCK[row][col]); 128 | } 129 | } 130 | row++; 131 | rowsClock(); 132 | } else { 133 | row = 0; 134 | rowsReset(); 135 | } 136 | } 137 | 138 | /******* FUNCTIONS IMPLEMENTATIONS **********/ 139 | 140 | /* 141 | Direct port manipulation to increase speed 142 | CLOCK4017 9 //PB5 143 | RESET4017 8 //PB4 144 | */ 145 | 146 | void rowsClock(void) { 147 | PORTB |= BIT5; 148 | PORTB &= ~BIT5; 149 | } 150 | 151 | void rowsReset(void) { 152 | PORTB |= BIT4; 153 | PORTB &= ~BIT4; 154 | } 155 | 156 | //From Felix Klee's Trackpoint library 157 | void sendButtonState(byte state) { 158 | static const char hidStates[] = {MOUSE_LEFT, MOUSE_RIGHT}; 159 | 160 | for (byte i = 0; i < sizeof(hidStates); i++) { 161 | byte hidState = hidStates[i]; 162 | if (state & (1 << i)) { 163 | Mouse.press(hidState); 164 | } else if (Mouse.isPressed(hidState)) { 165 | Mouse.release(hidState); 166 | } 167 | } 168 | } 169 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/MicroThinkPadAdapter.sdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rampadc/arduino-thinkpadkb-usb/13fd1dcdcd75948983f26547601e0926bbfc65b3/MicroThinkPadAdapter/MicroThinkPadAdapter.sdf -------------------------------------------------------------------------------- /MicroThinkPadAdapter/MicroThinkPadAdapter.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2013 4 | VisualStudioVersion = 12.0.21005.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MicroThinkPadAdapter", "MicroThinkPadAdapter.vcxproj", "{DD80BD09-CA74-4707-91BF-85622753C487}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Win32 = Debug|Win32 11 | Release|Win32 = Release|Win32 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {DD80BD09-CA74-4707-91BF-85622753C487}.Debug|Win32.ActiveCfg = Debug|Win32 15 | {DD80BD09-CA74-4707-91BF-85622753C487}.Debug|Win32.Build.0 = Debug|Win32 16 | {DD80BD09-CA74-4707-91BF-85622753C487}.Release|Win32.ActiveCfg = Release|Win32 17 | {DD80BD09-CA74-4707-91BF-85622753C487}.Release|Win32.Build.0 = Release|Win32 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/MicroThinkPadAdapter.v12.suo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rampadc/arduino-thinkpadkb-usb/13fd1dcdcd75948983f26547601e0926bbfc65b3/MicroThinkPadAdapter/MicroThinkPadAdapter.v12.suo -------------------------------------------------------------------------------- /MicroThinkPadAdapter/MicroThinkPadAdapter.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | 14 | {DD80BD09-CA74-4707-91BF-85622753C487} 15 | MicroThinkPadAdapter 16 | 17 | 18 | 19 | Application 20 | true 21 | v120 22 | MultiByte 23 | 24 | 25 | Application 26 | false 27 | v120 28 | true 29 | MultiByte 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | Level3 45 | Disabled 46 | true 47 | C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino;C:\Program Files (x86)\Arduino\hardware\arduino\variants\standard;D:\Arduino_workspace\arduino-thinkpad\libraries\CD4017;D:\Arduino_workspace\arduino-thinkpad\libraries\CD4017\utility;D:\Arduino_workspace\arduino-thinkpad\libraries\Trackpoint;D:\Arduino_workspace\arduino-thinkpad\libraries\Trackpoint\utility;C:\Program Files (x86)\Arduino\libraries\SPI;C:\Program Files (x86)\Arduino\libraries\SPI\utility;D:\Arduino_workspace\arduino-thinkpad\libraries\MCP23S17_Input;D:\Arduino_workspace\arduino-thinkpad\libraries\MCP23S17_Input\utility;C:\Program Files (x86)\Arduino\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\libraries;C:\Program Files (x86)\Visual Micro\Visual Micro for Arduino\Micro Platforms\default\debuggers;D:\Arduino_workspace\arduino-thinkpad\libraries;c:\program files (x86)\arduino\hardware\tools\avr\avr\include\;c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\;c:\program files (x86)\arduino\hardware\tools\avr\avr\;c:\program files (x86)\arduino\hardware\tools\avr\lib\gcc\avr\4.3.2\include\;%(AdditionalIncludeDirectories) 48 | D:\Arduino_workspace\arduino-thinkpad\MicroThinkPadAdapter\Visual Micro\.MicroThinkPadAdapter.vsarduino.h;%(ForcedIncludeFiles) 49 | true 50 | __AVR_ATmega32u4__;__AVR_ATmega32U4__;ARDUINO=105;ARDUINO_MAIN;__AVR__;__avr__;F_CPU=16000000L;__cplusplus;%(PreprocessorDefinitions) 51 | 52 | 53 | true 54 | 55 | 56 | 57 | 58 | Level3 59 | MaxSpeed 60 | true 61 | true 62 | true 63 | 64 | 65 | true 66 | true 67 | true 68 | 69 | 70 | 71 | 72 | CppCode 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/MicroThinkPadAdapter.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Header Files 23 | 24 | 25 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Visual Micro/.MicroThinkPadAdapter.vsarduino.h: -------------------------------------------------------------------------------- 1 | /* 2 | Editor: http://www.visualmicro.com 3 | visual micro and the arduino ide ignore this code during compilation. this code is automatically maintained by visualmicro, manual changes to this file will be overwritten 4 | the contents of the Visual Micro sketch sub folder can be deleted prior to publishing a project 5 | all non-arduino files created by visual micro and all visual studio project or solution files can be freely deleted and are not required to compile a sketch (do not delete your own code!). 6 | note: debugger breakpoints are stored in '.sln' or '.asln' files, knowledge of last uploaded breakpoints is stored in the upload.vmps.xml file. Both files are required to continue a previous debug session without needing to compile and upload again 7 | 8 | Hardware: Arduino Micro, Platform=avr, Package=arduino 9 | */ 10 | 11 | #define __AVR_ATmega32u4__ 12 | #define __AVR_ATmega32U4__ 13 | #define _VMDEBUG 1 14 | #define ARDUINO 101 15 | #define ARDUINO_MAIN 16 | #define F_CPU 16000000L 17 | #define __AVR__ 18 | #define __cplusplus 19 | extern "C" void __cxa_pure_virtual() {;} 20 | 21 | // 22 | // 23 | void rowsClock(void); 24 | void rowsReset(void); 25 | void sendButtonState(byte state); 26 | 27 | #include "C:\Program Files (x86)\Arduino\hardware\arduino\variants\micro\pins_arduino.h" 28 | #include "C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino\arduino.h" 29 | #include "D:\CONG\Documents\GitHub\arduino-thinkpadkb-usb\MicroThinkPadAdapter\MicroThinkPadAdapter.ino" 30 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Visual Micro/Compile.vmps.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 101 Serial.begin(9600); 14 | 102 15 | 103 trackpoint.reset(); 16 | 104 trackpoint.setSensitivityFactor(0xC0); 17 | 105 trackpoint.setRemoteMode(); 18 | 106 } 19 | 107 20 | -->108 void loop() 21 | 109 { 22 | 110 //TrackPoint in stream mode 23 | 111 TrackPoint::DataReport d = trackpoint.readData(); 24 | 112 if (d.state & (1 << 2)) { // middle button down => scroll 25 | 113 Mouse.move(0, 0, d.y); 26 | 114 } else { 27 | 115 Mouse.move(d.x, -d.y, 0); 28 | 116 sendButtonState(d.state); 29 | 117 } 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Visual Micro/Configuration.Debug.vmps.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MicroThinkPadAdapter/Visual Micro/Upload.vmps.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 101 Serial.begin(9600); 14 | 102 15 | 103 trackpoint.reset(); 16 | 104 trackpoint.setSensitivityFactor(0xC0); 17 | 105 trackpoint.setRemoteMode(); 18 | 106 } 19 | 107 20 | -->108 void loop() 21 | 109 { 22 | 110 //TrackPoint in stream mode 23 | 111 TrackPoint::DataReport d = trackpoint.readData(); 24 | 112 if (d.state & (1 << 2)) { // middle button down => scroll 25 | 113 Mouse.move(0, 0, d.y); 26 | 114 } else { 27 | 115 Mouse.move(d.x, -d.y, 0); 28 | 116 sendButtonState(d.state); 29 | 117 } 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Introduction 2 | Using an Arduino Micro as a USB adapter for ThinkPad T60 keyboard with TrackPoint support. 3 | Supports different keyboards from the ThinkPad family that shares the same receptacle as T60. 4 | 5 | Photo: Modular approach that splits the circuit into the microcontroller side and receptacle + supporting ICs side. 6 | ![](/doc/AdapterTest.jpg) 7 | 8 | Part list: 9 | + 1x Arduino Micro 10 | + 16x 0805 10k resistors 11 | + 1x MCP23S17-E/SO 12 | + 1x CD74HC4017EE4 13 | 14 | # Files 15 | 16 | Library: TrackPointExtended.h, TrackPointExtended.cpp, MCP23S17_InputsOnly.h, MCP23S17_InputsOnly.cpp 17 | 18 | Example: MicroThinkPadAdapter.ino 19 | 20 | # License 21 | 22 | Copyright 2014 CONG NGUYEN 23 | 24 | Licensed under the Apache License, Version 2.0 (the "License"); 25 | you may not use this file except in compliance with the License. 26 | You may obtain a copy of the License at 27 | 28 | http://www.apache.org/licenses/LICENSE-2.0 29 | 30 | Unless required by applicable law or agreed to in writing, software 31 | distributed under the License is distributed on an "AS IS" BASIS, 32 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 33 | See the License for the specific language governing permissions and 34 | limitations under the License. -------------------------------------------------------------------------------- /doc/AdapterTest.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rampadc/arduino-thinkpadkb-usb/13fd1dcdcd75948983f26547601e0926bbfc65b3/doc/AdapterTest.jpg -------------------------------------------------------------------------------- /libraries/MCP23S17_Input/MCP23S17_InputsOnly.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * MCP23S17_InputsOnly.cpp 3 | * 4 | * Created: 2/12/2013 5:05:47 PM 5 | * Author: CONG 6 | */ 7 | 8 | 9 | #include "MCP23S17_InputsOnly.h" 10 | #include 11 | #include 12 | #include 13 | 14 | /* 15 | By default: 16 | - Use byte mode and bank 0 17 | - All pins are inputs 18 | 19 | Pin A0 is connected to ~CS of MCP23S17 20 | */ 21 | 22 | // default constructor 23 | MCP23S17_InputsOnly::MCP23S17_InputsOnly() 24 | { 25 | pinMode(A0, OUTPUT); 26 | SPI.setClockDivider(CLOCKDIV); 27 | SPI.begin(); 28 | 29 | } //MCP23S17_InputsOnly 30 | 31 | // default destructor 32 | MCP23S17_InputsOnly::~MCP23S17_InputsOnly() 33 | { 34 | } //~MCP23S17_InputsOnly 35 | 36 | int MCP23S17_InputsOnly::readPin(int pin) { 37 | if(pin < 0 || pin > 15) return 0; 38 | 39 | uint8_t portState = 0; 40 | uint8_t gpio = (pin < 8 ? GPIOA : GPIOB); 41 | PORTF &= ~BIT7; 42 | SPI.transfer(OPCODER); 43 | SPI.transfer(gpio); 44 | portState = SPI.transfer(0); 45 | //Serial.println(portState, BIN); 46 | PORTF |= BIT7; 47 | 48 | pin = (pin < 8 ? pin : pin-8); 49 | portState &= (1 << pin); //get that bit only but with all the trailing zeroes if there are any 50 | 51 | return (portState > 0 ? 1 : 0); 52 | } 53 | 54 | void MCP23S17_InputsOnly::writeData(uint8_t addr, uint8_t bData) { 55 | PORTF &= ~BIT7; 56 | SPI.transfer(OPCODEW); 57 | SPI.transfer(addr); 58 | SPI.transfer(bData); 59 | PORTF |= BIT7; 60 | } -------------------------------------------------------------------------------- /libraries/MCP23S17_Input/MCP23S17_InputsOnly.h: -------------------------------------------------------------------------------- 1 | /* 2 | * MCP23S17_InputsOnly.h 3 | * 4 | * Created: 2/12/2013 5:05:48 PM 5 | * Author: CONG 6 | */ 7 | 8 | 9 | #ifndef __MCP23S17_INPUTSONLY_H__ 10 | #define __MCP23S17_INPUTSONLY_H__ 11 | 12 | //MCP's related 13 | #define OPCODEW 0x40 14 | #define OPCODER 0x41 15 | #define GPIOA 0x12 16 | #define GPIOB 0x13 17 | #define BIT7 0x80 18 | 19 | //SPI related 20 | #define CLOCKDIV 2 21 | 22 | class MCP23S17_InputsOnly 23 | { 24 | //functions 25 | public: 26 | MCP23S17_InputsOnly(); 27 | ~MCP23S17_InputsOnly(); 28 | int readPin(int pin); //from pin 0 to pin 15 29 | protected: 30 | private: 31 | void writeData(unsigned char addr, unsigned char bData); 32 | }; //MCP23S17_InputsOnly 33 | 34 | #endif //__MCP23S17_INPUTSONLY_H__ 35 | -------------------------------------------------------------------------------- /libraries/TrackPointExtended/TrackPoint.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * TrackPoint.cpp 3 | * 4 | * Created: 14/03/2014 12:50:47 AM 5 | * Author: CONG NGUYEN 6 | * 7 | * Expanding on Felix Kee's TrackPoint class: https://github.com/feklee/arduino-trackpoint 8 | * Removed onesCounter and incomingParity 9 | */ 10 | 11 | 12 | #include "TrackPoint.h" 13 | 14 | // default constructor 15 | TrackPoint::TrackPoint(uint8_t clockPin, uint8_t dataPin, uint8_t resetPin, uint8_t streamMode) : _clkPin(clockPin), _dataPin(dataPin), _resetPin(resetPin) 16 | { 17 | if(streamMode) { 18 | bitcount = 0; 19 | n = 0; 20 | val = 0; 21 | incoming = 0; 22 | counter = 0; 23 | dataAvailable = 0; 24 | } 25 | 26 | gohi(_clkPin); 27 | gohi(_dataPin); 28 | } //TrackPoint 29 | 30 | // default destructor 31 | TrackPoint::~TrackPoint() 32 | { 33 | } //~TrackPoint 34 | 35 | uint8_t TrackPoint::reportAvailable(void) { 36 | return dataAvailable; 37 | } 38 | 39 | TrackPoint::DataReport TrackPoint::getStreamReport(void) { 40 | return data; 41 | } 42 | 43 | void TrackPoint::getDataBit(void) { 44 | dataAvailable = 0; 45 | 46 | val = (digitalRead(_dataPin) ? 1 : 0); 47 | n = bitcount-1; 48 | if(n <= 7) { 49 | incoming |= (val << n); 50 | } 51 | bitcount++; 52 | 53 | if(bitcount == 11) { 54 | switch(counter) { 55 | case 0: 56 | data.state = incoming; 57 | counter++; 58 | break; 59 | 60 | case 1: 61 | data.x = incoming; 62 | counter++; 63 | break; 64 | 65 | case 2: 66 | data.y = incoming; 67 | counter = 0; 68 | dataAvailable = 1; 69 | break; 70 | } 71 | bitcount = 0; 72 | incoming = 0; 73 | } 74 | } 75 | 76 | // errors are ignored 77 | void TrackPoint::writeToRamLocation(uint8_t location, uint8_t value) { 78 | write(0xe2); 79 | read(); // ACK 80 | write(0x81); 81 | read(); // ACK 82 | write(location); 83 | read(); // ACK 84 | write(value); 85 | read(); // ACK 86 | } 87 | 88 | // undefined in case of error 89 | uint8_t TrackPoint::readFromRamLocation(uint8_t location) { 90 | write(0xe2); 91 | read(); // ACK 92 | write(0x80); 93 | read(); // ACK 94 | write(location); 95 | read(); // ACK 96 | return read(); 97 | } 98 | 99 | void TrackPoint::setSensitivityFactor(uint8_t sensitivityFactor) { 100 | writeToRamLocation(0x4a, sensitivityFactor); 101 | } 102 | 103 | uint8_t TrackPoint::sensitivityFactor() { 104 | return readFromRamLocation(0x4a); 105 | } 106 | 107 | void TrackPoint::setRemoteMode() { 108 | write(0xf0); 109 | read(); 110 | } 111 | 112 | void TrackPoint::setStreamMode() { 113 | write(0xea); 114 | read(); 115 | write(0xf4); //enable report 116 | read(); 117 | 118 | //put mouse into idle mode, ready to send 119 | gohi(_clkPin); 120 | gohi(_dataPin); 121 | } 122 | 123 | void TrackPoint::reset() { 124 | pinMode(_resetPin, OUTPUT); 125 | digitalWrite(_resetPin, HIGH); 126 | delay(2000); // empirical value 127 | digitalWrite(_resetPin, LOW); 128 | } 129 | 130 | TrackPoint::DataReport TrackPoint::readData() { 131 | DataReport d; 132 | 133 | write(0xeb); 134 | read(); // ACK 135 | d.state = read(); 136 | d.x = read(); 137 | d.y = read(); 138 | 139 | return d; 140 | } 141 | 142 | // Comments and code below mostly unchanged from `ps2.h`. 143 | 144 | /* 145 | * according to some code I saw, these functions will 146 | * correctly set the clock and data pins for 147 | * various conditions. It's done this way so you don't need 148 | * pullup resistors. 149 | */ 150 | void TrackPoint::gohi(uint8_t pin) { 151 | pinMode(pin, INPUT); 152 | digitalWrite(pin, HIGH); 153 | } 154 | 155 | void TrackPoint::golo(uint8_t pin) { 156 | pinMode(pin, OUTPUT); 157 | digitalWrite(pin, LOW); 158 | } 159 | 160 | /* write a uint8_t to the PS2 device */ 161 | void TrackPoint::write(uint8_t data) { 162 | uint8_t i; 163 | uint8_t parity = 1; 164 | 165 | gohi(_dataPin); 166 | gohi(_clkPin); 167 | delayMicroseconds(300); 168 | golo(_clkPin); 169 | delayMicroseconds(300); 170 | golo(_dataPin); 171 | delayMicroseconds(10); 172 | gohi(_clkPin); // start bit 173 | /* wait for device to take control of clock */ 174 | while (digitalRead(_clkPin) == HIGH) 175 | ; // this loop intentionally left blank 176 | // clear to send data 177 | for (i=0; i < 8; i++) 178 | { 179 | if (data & 0x01) 180 | { 181 | gohi(_dataPin); 182 | } else { 183 | golo(_dataPin); 184 | } 185 | // wait for clock 186 | while (digitalRead(_clkPin) == LOW) 187 | ; 188 | while (digitalRead(_clkPin) == HIGH) 189 | ; 190 | parity = parity ^ (data & 0x01); 191 | data = data >> 1; 192 | } 193 | // parity bit 194 | if (parity) 195 | { 196 | gohi(_dataPin); 197 | } else { 198 | golo(_dataPin); 199 | } 200 | // clock cycle - like ack. 201 | while (digitalRead(_clkPin) == LOW) 202 | ; 203 | while (digitalRead(_clkPin) == HIGH) 204 | ; 205 | // stop bit 206 | gohi(_dataPin); 207 | delayMicroseconds(50); 208 | while (digitalRead(_clkPin) == HIGH) 209 | ; 210 | // mode switch 211 | while ((digitalRead(_clkPin) == LOW) || (digitalRead(_dataPin) == LOW)) 212 | ; 213 | // hold up incoming data 214 | golo(_clkPin); 215 | } 216 | 217 | 218 | /* 219 | * read a uint8_t of data from the ps2 device. Ignores parity. 220 | */ 221 | uint8_t TrackPoint::read(void) { 222 | uint8_t data = 0x00; 223 | uint8_t i; 224 | uint8_t bit = 0x01; 225 | 226 | // start clock 227 | gohi(_clkPin); 228 | gohi(_dataPin); 229 | delayMicroseconds(50); 230 | while (digitalRead(_clkPin) == HIGH) 231 | ; 232 | delayMicroseconds(5); // not sure why. 233 | while (digitalRead(_clkPin) == LOW) 234 | ; // eat start bit 235 | for (i=0; i < 8; i++) 236 | { 237 | while (digitalRead(_clkPin) == HIGH) 238 | ; 239 | if (digitalRead(_dataPin) == HIGH) 240 | { 241 | data = data | bit; 242 | } 243 | while (digitalRead(_clkPin) == LOW) 244 | ; 245 | bit = bit << 1; 246 | } 247 | // eat parity bit, ignore it. 248 | while (digitalRead(_clkPin) == HIGH) 249 | ; 250 | while (digitalRead(_clkPin) == LOW) 251 | ; 252 | // eat stop bit 253 | while (digitalRead(_clkPin) == HIGH) 254 | ; 255 | while (digitalRead(_clkPin) == LOW) 256 | ; 257 | golo(_clkPin); // hold incoming data 258 | 259 | return data; 260 | } -------------------------------------------------------------------------------- /libraries/TrackPointExtended/TrackPoint.h: -------------------------------------------------------------------------------- 1 | /* 2 | * TrackPoint.h 3 | * 4 | * Created: 14/03/2014 12:50:48 AM 5 | * Author: CONG NGUYEN 6 | * 7 | * Expanding on Felix Kee's TrackPoint class: https://github.com/feklee/arduino-trackpoint 8 | * 9 | * Interface with a TrackPoint, supports stream mode using interrupt 10 | * Parity checks slow down move movements thus are removed 11 | */ 12 | 13 | 14 | #ifndef __TRACKPOINTEXTENDED_H__ 15 | #define __TRACKPOINTEXTENDED_H__ 16 | 17 | #include "Arduino.h" 18 | 19 | class TrackPoint 20 | { 21 | public: 22 | struct DataReport { 23 | uint8_t state; 24 | int8_t x; 25 | int8_t y; 26 | }; 27 | 28 | void write(uint8_t data); 29 | uint8_t read(void); 30 | uint8_t readFromRamLocation(uint8_t); 31 | void writeToRamLocation(uint8_t, uint8_t); 32 | void setSensitivityFactor(uint8_t); 33 | uint8_t sensitivityFactor(); 34 | void setRemoteMode(); 35 | void reset(); 36 | DataReport readData(); 37 | 38 | TrackPoint(uint8_t, uint8_t, uint8_t, uint8_t); 39 | ~TrackPoint(); 40 | 41 | void getDataBit(void); 42 | uint8_t reportAvailable(void); 43 | void setStreamMode(void); 44 | DataReport getStreamReport(void); 45 | 46 | protected: 47 | 48 | private: 49 | TrackPoint( const TrackPoint &c ); 50 | TrackPoint& operator=( const TrackPoint &c ); 51 | void gohi(uint8_t pin); 52 | void golo(uint8_t pin); 53 | 54 | //TrackPoint pins 55 | uint8_t _clkPin; 56 | uint8_t _dataPin; 57 | uint8_t _resetPin; 58 | 59 | //PS2 data 60 | DataReport data; 61 | 62 | //getDataBit() variables 63 | volatile uint8_t bitcount; 64 | volatile uint8_t n; 65 | volatile uint8_t val; 66 | volatile uint8_t incoming; 67 | volatile uint8_t counter; 68 | volatile uint8_t dataAvailable; 69 | 70 | }; //TrackPoint 71 | 72 | #endif //__TRACKPOINT_H__ 73 | --------------------------------------------------------------------------------