├── assets ├── fonts │ └── font.ttf ├── images │ ├── ss-normal.png │ └── ss-compact.png └── maps │ ├── a1707.kmap │ ├── a1466.kmap │ ├── a1502.map │ └── pc108.kmap ├── bin └── keyboard-tester-macos ├── Makefile ├── LICENSE ├── README.md └── keyboard-tester.c /assets/fonts/font.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inflex/keyboard-tester/HEAD/assets/fonts/font.ttf -------------------------------------------------------------------------------- /bin/keyboard-tester-macos: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inflex/keyboard-tester/HEAD/bin/keyboard-tester-macos -------------------------------------------------------------------------------- /assets/images/ss-normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inflex/keyboard-tester/HEAD/assets/images/ss-normal.png -------------------------------------------------------------------------------- /assets/images/ss-compact.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inflex/keyboard-tester/HEAD/assets/images/ss-compact.png -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | default: keyboard-tester 2 | 3 | CC=gcc 4 | LIBS=-lm $(shell sdl2-config --static-libs) -lSDL2 -lSDL2_ttf 5 | CFLAGS=-Wall -O2 $(shell sdl2-config --cflags) 6 | 7 | .c.o: 8 | $(CC) $(CFLAGS) -c $*.c 9 | 10 | clean: 11 | rm *.o keyboard-tester 12 | 13 | keyboard-tester: keyboard-tester.c 14 | $(CC) $(CFLAGS) keyboard-tester.c -o keyboard-tester $(LIBS) 15 | 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2020, Paul Daniels 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /assets/maps/a1707.kmap: -------------------------------------------------------------------------------- 1 | scancode:4 group:0 name:A 2 | scancode:5 group:0 name:B 3 | scancode:6 group:0 name:C 4 | scancode:7 group:0 name:D 5 | scancode:8 group:0 name:E 6 | scancode:9 group:0 name:F 7 | scancode:10 group:0 name:G 8 | scancode:11 group:0 name:H 9 | scancode:12 group:0 name:I 10 | scancode:13 group:0 name:J 11 | scancode:14 group:0 name:K 12 | scancode:15 group:0 name:L 13 | scancode:17 group:0 name:N 14 | scancode:18 group:0 name:O 15 | scancode:19 group:0 name:P 16 | scancode:20 group:0 name:Q 17 | scancode:21 group:0 name:R 18 | scancode:22 group:0 name:S 19 | scancode:23 group:0 name:T 20 | scancode:24 group:0 name:U 21 | scancode:25 group:0 name:V 22 | scancode:26 group:0 name:W 23 | scancode:27 group:0 name:X 24 | scancode:28 group:0 name:Y 25 | scancode:29 group:0 name:Z 26 | scancode:30 group:0 name:1 27 | scancode:31 group:0 name:2 28 | scancode:32 group:0 name:3 29 | scancode:33 group:0 name:4 30 | scancode:34 group:0 name:5 31 | scancode:35 group:0 name:6 32 | scancode:36 group:0 name:7 33 | scancode:37 group:0 name:8 34 | scancode:38 group:0 name:9 35 | scancode:39 group:0 name:0 36 | scancode:40 group:0 name:RETURN 37 | scancode:41 group:0 name:ESC 38 | scancode:42 group:0 name:BACKSPACE 39 | scancode:43 group:0 name:TAB 40 | scancode:44 group:0 name:SPACE 41 | scancode:45 group:0 name:- 42 | scancode:46 group:0 name:= 43 | scancode:47 group:0 name:( 44 | scancode:48 group:0 name:) 45 | scancode:49 group:0 name:\ 46 | scancode:51 group:0 name:; 47 | scancode:52 group:0 name:! 48 | scancode:53 group:0 name:` 49 | scancode:54 group:0 name:, 50 | scancode:55 group:0 name:. 51 | scancode:56 group:0 name:/ 52 | scancode:57 group:0 name:CAPS 53 | scancode:79 group:0 name:RIGHT 54 | scancode:80 group:0 name:LEFT 55 | scancode:81 group:0 name:DOWN 56 | scancode:82 group:0 name:UP 57 | scancode:224 group:0 name:LCTRL 58 | scancode:225 group:0 name:LSHIFT 59 | scancode:227 group:0 name:LGUI 60 | scancode:229 group:0 name:RSHIFT 61 | scancode:230 group:0 name:RALT 62 | scancode:231 group:0 name:RGUI 63 | -------------------------------------------------------------------------------- /assets/maps/a1466.kmap: -------------------------------------------------------------------------------- 1 | scancode:4 group:0 name:A 2 | scancode:5 group:0 name:B 3 | scancode:6 group:0 name:C 4 | scancode:7 group:0 name:D 5 | scancode:8 group:0 name:E 6 | scancode:9 group:0 name:F 7 | scancode:10 group:0 name:G 8 | scancode:11 group:0 name:H 9 | scancode:12 group:0 name:I 10 | scancode:13 group:0 name:J 11 | scancode:14 group:0 name:K 12 | scancode:15 group:0 name:L 13 | scancode:17 group:0 name:N 14 | scancode:18 group:0 name:O 15 | scancode:19 group:0 name:P 16 | scancode:20 group:0 name:Q 17 | scancode:21 group:0 name:R 18 | scancode:22 group:0 name:S 19 | scancode:23 group:0 name:T 20 | scancode:24 group:0 name:U 21 | scancode:25 group:0 name:V 22 | scancode:26 group:0 name:W 23 | scancode:27 group:0 name:X 24 | scancode:28 group:0 name:Y 25 | scancode:29 group:0 name:Z 26 | scancode:30 group:0 name:1 27 | scancode:31 group:0 name:2 28 | scancode:32 group:0 name:3 29 | scancode:33 group:0 name:4 30 | scancode:34 group:0 name:5 31 | scancode:35 group:0 name:6 32 | scancode:36 group:0 name:7 33 | scancode:37 group:0 name:8 34 | scancode:38 group:0 name:9 35 | scancode:39 group:0 name:0 36 | scancode:40 group:0 name:RETURN 37 | scancode:41 group:0 name:ESC 38 | scancode:42 group:0 name:BACKSPACE 39 | scancode:43 group:0 name:TAB 40 | scancode:44 group:0 name:SPACE 41 | scancode:45 group:0 name:- 42 | scancode:46 group:0 name:= 43 | scancode:47 group:0 name:( 44 | scancode:48 group:0 name:) 45 | scancode:49 group:0 name:\ 46 | scancode:51 group:0 name:; 47 | scancode:52 group:0 name:! 48 | scancode:53 group:0 name:` 49 | scancode:54 group:0 name:, 50 | scancode:55 group:0 name:. 51 | scancode:56 group:0 name:/ 52 | scancode:57 group:0 name:CAPS 53 | scancode:79 group:0 name:RIGHT 54 | scancode:80 group:0 name:LEFT 55 | scancode:81 group:0 name:DOWN 56 | scancode:82 group:0 name:UP 57 | scancode:224 group:0 name:LCTRL 58 | scancode:225 group:0 name:LSHIFT 59 | scancode:226 group:0 name:LALT 60 | scancode:227 group:0 name:LGUI 61 | scancode:229 group:0 name:RSHIFT 62 | scancode:230 group:0 name:RALT 63 | scancode:231 group:0 name:RGUI 64 | -------------------------------------------------------------------------------- /assets/maps/a1502.map: -------------------------------------------------------------------------------- 1 | scancode:4 group:0 name:A 2 | scancode:5 group:0 name:B 3 | scancode:6 group:0 name:C 4 | scancode:7 group:0 name:D 5 | scancode:8 group:0 name:E 6 | scancode:9 group:0 name:F 7 | scancode:10 group:0 name:G 8 | scancode:11 group:0 name:H 9 | scancode:12 group:0 name:I 10 | scancode:13 group:0 name:J 11 | scancode:14 group:0 name:K 12 | scancode:15 group:0 name:L 13 | scancode:17 group:0 name:N 14 | scancode:18 group:0 name:O 15 | scancode:19 group:0 name:P 16 | scancode:20 group:0 name:Q 17 | scancode:21 group:0 name:R 18 | scancode:22 group:0 name:S 19 | scancode:23 group:0 name:T 20 | scancode:24 group:0 name:U 21 | scancode:25 group:0 name:V 22 | scancode:26 group:0 name:W 23 | scancode:27 group:0 name:X 24 | scancode:28 group:0 name:Y 25 | scancode:29 group:0 name:Z 26 | scancode:30 group:0 name:1 27 | scancode:31 group:0 name:2 28 | scancode:32 group:0 name:3 29 | scancode:33 group:0 name:4 30 | scancode:34 group:0 name:5 31 | scancode:35 group:0 name:6 32 | scancode:36 group:0 name:7 33 | scancode:37 group:0 name:8 34 | scancode:38 group:0 name:9 35 | scancode:39 group:0 name:0 36 | scancode:40 group:0 name:RETURN 37 | scancode:41 group:0 name:ESCAPE 38 | scancode:42 group:0 name:BACKSPACE 39 | scancode:43 group:0 name:TAB 40 | scancode:44 group:0 name:SPACE 41 | scancode:45 group:0 name:MINUS 42 | scancode:46 group:0 name:EQUALS 43 | scancode:47 group:0 name:LEFTBRACKET 44 | scancode:48 group:0 name:RIGHTBRACKET 45 | scancode:49 group:0 name:BACKSLASH 46 | scancode:51 group:0 name:SEMICOLON 47 | scancode:52 group:0 name:APOSTROPHE 48 | scancode:53 group:0 name:GRAVE 49 | scancode:54 group:0 name:COMMA 50 | scancode:55 group:0 name:PERIOD 51 | scancode:56 group:0 name:SLASH 52 | scancode:57 group:0 name:CAPSLOCK 53 | scancode:79 group:0 name:RIGHT 54 | scancode:80 group:0 name:LEFT 55 | scancode:81 group:0 name:DOWN 56 | scancode:82 group:0 name:UP 57 | scancode:224 group:0 name:LCTRL 58 | scancode:225 group:0 name:LSHIFT 59 | scancode:227 group:0 name:LGUI 60 | scancode:229 group:0 name:RSHIFT 61 | scancode:230 group:0 name:RALT 62 | scancode:231 group:0 name:RGUI 63 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # keyboard-tester, for linux & macOS 2 | 3 | Written so I could test macbook keyboards before sending back to clients after a board repair or similar service. 4 | 5 | Works on keyboard scancodes, not keycodes, so will work with all keyboards but you'll be left with varying levels of keys that aren't "pressed". 6 | 7 | #### BETA DEVELOPMENT --- Seems to be okay to use now 8 | 9 | ### Prerequisites 10 | 11 | Requires SDL2 and SDL2_ttf 12 | 13 | linux 14 | ``` 15 | apt install libsdl2-dev 16 | ``` 17 | 18 | macOS 19 | ``` 20 | brew install libsdl2 libsd2_ttf 21 | ``` 22 | 23 | ### Build 24 | ```make``` 25 | 26 | ### Parameters 27 | ``` 28 | keyboard-tester [--dl ] [--dh ] [-m ] [-c] [--dpi ] [--fs ] [-d] 29 | 30 | --dl