aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkakunpc <15257475+kakunpc@users.noreply.github.com>2019-11-21 06:16:38 +0900
committerDrashna Jaelre <drashna@live.com>2019-11-20 13:16:38 -0800
commit46606e1ea572aaa85f3063db8ff1f93eeb97d6ac (patch)
treee3bb0e5e53bebd235e22f2356abaa97e16a6d076
parent0a5125a535ff5ee33fdb01853d32adcfd6b0860c (diff)
downloadqmk_firmware-46606e1ea572aaa85f3063db8ff1f93eeb97d6ac.tar.gz
qmk_firmware-46606e1ea572aaa85f3063db8ff1f93eeb97d6ac.zip
[Keyboard] Add "thedogkeyboard" (#7401)
* add the dog keyboard * set rgbled * fix info.json and readme.md * Update keyboards/thedogkeyboard/readme.md Co-Authored-By: James Young <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/thedogkeyboard/readme.md Co-Authored-By: James Young <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/thedogkeyboard/readme.md Co-Authored-By: James Young <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/thedogkeyboard/readme.md Co-Authored-By: James Young <18669334+noroadsleft@users.noreply.github.com> * update thedogkeyboard
-rw-r--r--keyboards/thedogkeyboard/config.h246
-rw-r--r--keyboards/thedogkeyboard/info.json12
-rw-r--r--keyboards/thedogkeyboard/keymaps/default/keymap.c28
-rw-r--r--keyboards/thedogkeyboard/keymaps/default/readme.md1
-rw-r--r--keyboards/thedogkeyboard/keymaps/kakunpc/keymap.c43
-rw-r--r--keyboards/thedogkeyboard/keymaps/kakunpc/readme.md1
-rw-r--r--keyboards/thedogkeyboard/matrix.c287
-rw-r--r--keyboards/thedogkeyboard/readme.md15
-rw-r--r--keyboards/thedogkeyboard/rules.mk35
-rw-r--r--keyboards/thedogkeyboard/thedogkeyboard.c16
-rw-r--r--keyboards/thedogkeyboard/thedogkeyboard.h59
11 files changed, 743 insertions, 0 deletions
diff --git a/keyboards/thedogkeyboard/config.h b/keyboards/thedogkeyboard/config.h
new file mode 100644
index 000000000..1a67a3f17
--- /dev/null
+++ b/keyboards/thedogkeyboard/config.h
@@ -0,0 +1,246 @@
1/*
2Copyright 2019 kakunpc
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0xFEED
24#define PRODUCT_ID 0x0000
25#define DEVICE_VER 0x0001
26#define MANUFACTURER kakunpc
27#define PRODUCT thedogkeyboard
28#define DESCRIPTION A custom keyboard
29
30/* key matrix size */
31#define MATRIX_ROWS 20
32#define MATRIX_COLS 6
33
34/*
35 * Keyboard Matrix Assignments
36 *
37 * Change this to how you wired your keyboard
38 * COLS: AVR pins used for columns, left to right
39 * ROWS: AVR pins used for rows, top to bottom
40 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
41 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
42 *
43 */
44#define MATRIX_ROW_PINS { F4, F5, F6, F7, B1, B3, B2, B6, B4, B5 }
45#define MATRIX_COL_PINS { D1, D0, D4, C6, D7, E6 }
46#define UNUSED_PINS
47
48/*
49 * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
50 */
51#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
52
53// #define BACKLIGHT_PIN B7
54// #define BACKLIGHT_BREATHING
55// #define BACKLIGHT_LEVELS 3
56
57#define RGB_DI_PIN D3
58#ifdef RGB_DI_PIN
59 #define RGBLED_NUM 111
60 #define RGBLIGHT_HUE_STEP 8
61 #define RGBLIGHT_SAT_STEP 8
62 #define RGBLIGHT_VAL_STEP 8
63 #define RGBLIGHT_LIMIT_VAL 50 /* The maximum brightness level */
64 #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
65// /*== all animations enable ==*/
66// #define RGBLIGHT_ANIMATIONS
67// /*== or choose animations ==*/
68// #define RGBLIGHT_EFFECT_BREATHING
69// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
70// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
71// #define RGBLIGHT_EFFECT_SNAKE
72// #define RGBLIGHT_EFFECT_KNIGHT
73// #define RGBLIGHT_EFFECT_CHRISTMAS
74// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
75// #define RGBLIGHT_EFFECT_RGB_TEST
76// #define RGBLIGHT_EFFECT_ALTERNATING
77// /*== customize breathing effect ==*/
78// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
79// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
80// /*==== use exp() and sin() ====*/
81// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
82// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
83#endif
84
85/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
86#define DEBOUNCE 5
87
88/* define if matrix has ghost (lacks anti-ghosting diodes) */
89//#define MATRIX_HAS_GHOST
90
91/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
92#define LOCKING_SUPPORT_ENABLE
93/* Locking resynchronize hack */
94#define LOCKING_RESYNC_ENABLE
95
96/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
97 * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
98 */
99// #define GRAVE_ESC_CTRL_OVERRIDE
100
101/*
102 * Force NKRO
103 *
104 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
105 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
106 * makefile for this to work.)
107 *
108 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
109 * until the next keyboard reset.
110 *
111 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
112 * fully operational during normal computer usage.
113 *
114 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
115 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
116 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
117 * power-up.
118 *
119 */
120//#define FORCE_NKRO
121
122/*
123 * Magic Key Options
124 *
125 * Magic keys are hotkey commands that allow control over firmware functions of
126 * the keyboard. They are best used in combination with the HID Listen program,
127 * found here: https://www.pjrc.com/teensy/hid_listen.html
128 *
129 * The options below allow the magic key functionality to be changed. This is
130 * useful if your keyboard/keypad is missing keys and you want magic key support.
131 *
132 */
133
134/* key combination for magic key command */
135/* defined by default; to change, uncomment and set to the combination you want */
136// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
137
138/* control how magic key switches layers */
139//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
140//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
141//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
142
143/* override magic key keymap */
144//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
145//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
146//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
147//#define MAGIC_KEY_HELP H
148//#define MAGIC_KEY_HELP_ALT SLASH
149//#define MAGIC_KEY_DEBUG D
150//#define MAGIC_KEY_DEBUG_MATRIX X
151//#define MAGIC_KEY_DEBUG_KBD K
152//#define MAGIC_KEY_DEBUG_MOUSE M
153//#define MAGIC_KEY_VERSION V
154//#define MAGIC_KEY_STATUS S
155//#define MAGIC_KEY_CONSOLE C
156//#define MAGIC_KEY_LAYER0 0
157//#define MAGIC_KEY_LAYER0_ALT GRAVE
158//#define MAGIC_KEY_LAYER1 1
159//#define MAGIC_KEY_LAYER2 2
160//#define MAGIC_KEY_LAYER3 3
161//#define MAGIC_KEY_LAYER4 4
162//#define MAGIC_KEY_LAYER5 5
163//#define MAGIC_KEY_LAYER6 6
164//#define MAGIC_KEY_LAYER7 7
165//#define MAGIC_KEY_LAYER8 8
166//#define MAGIC_KEY_LAYER9 9
167//#define MAGIC_KEY_BOOTLOADER B
168//#define MAGIC_KEY_BOOTLOADER_ALT ESC
169//#define MAGIC_KEY_LOCK CAPS
170//#define MAGIC_KEY_EEPROM E
171//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
172//#define MAGIC_KEY_NKRO N
173//#define MAGIC_KEY_SLEEP_LED Z
174
175/*
176 * Feature disable options
177 * These options are also useful to firmware size reduction.
178 */
179
180/* disable debug print */
181//#define NO_DEBUG
182
183/* disable print */
184//#define NO_PRINT
185
186/* disable action features */
187//#define NO_ACTION_LAYER
188//#define NO_ACTION_TAPPING
189//#define NO_ACTION_ONESHOT
190//#define NO_ACTION_MACRO
191//#define NO_ACTION_FUNCTION
192
193/*
194 * MIDI options
195 */
196
197/* Prevent use of disabled MIDI features in the keymap */
198//#define MIDI_ENABLE_STRICT 1
199
200/* enable basic MIDI features:
201 - MIDI notes can be sent when in Music mode is on
202*/
203//#define MIDI_BASIC
204
205/* enable advanced MIDI features:
206 - MIDI notes can be added to the keymap
207 - Octave shift and transpose
208 - Virtual sustain, portamento, and modulation wheel
209 - etc.
210*/
211//#define MIDI_ADVANCED
212
213/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
214//#define MIDI_TONE_KEYCODE_OCTAVES 1
215
216/*
217 * HD44780 LCD Display Configuration
218 */
219/*
220#define LCD_LINES 2 //< number of visible lines of the display
221#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
222
223#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
224
225#if LCD_IO_MODE
226#define LCD_PORT PORTB //< port for the LCD lines
227#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
228#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
229#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
230#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
231#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
232#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
233#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
234#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
235#define LCD_RS_PORT LCD_PORT //< port for RS line
236#define LCD_RS_PIN 3 //< pin for RS line
237#define LCD_RW_PORT LCD_PORT //< port for RW line
238#define LCD_RW_PIN 2 //< pin for RW line
239#define LCD_E_PORT LCD_PORT //< port for Enable line
240#define LCD_E_PIN 1 //< pin for Enable line
241#endif
242*/
243
244/* Bootmagic Lite key configuration */
245// #define BOOTMAGIC_LITE_ROW 0
246// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/thedogkeyboard/info.json b/keyboards/thedogkeyboard/info.json
new file mode 100644
index 000000000..517aae221
--- /dev/null
+++ b/keyboards/thedogkeyboard/info.json
@@ -0,0 +1,12 @@
1{
2 "keyboard_name": "TheDogKeyboard",
3 "url": "https://kakunpc.booth.pm/",
4 "maintainer": "kakunpc",
5 "width": 22.5,
6 "height": 6.5,
7 "layouts": {
8 "LAYOUT_all": {
9 "layout": [{"label":"1", "x":0, "y":0}, {"label":"7", "x":2, "y":0}, {"label":"13", "x":3, "y":0}, {"label":"19", "x":4, "y":0}, {"label":"24", "x":5, "y":0}, {"label":"29", "x":6.5, "y":0}, {"label":"35", "x":7.5, "y":0}, {"label":"40", "x":8.5, "y":0}, {"label":"45", "x":9.5, "y":0}, {"label":"50", "x":11, "y":0}, {"label":"56", "x":12, "y":0}, {"label":"62", "x":13, "y":0}, {"label":"66", "x":14, "y":0}, {"label":"70", "x":15.25, "y":0}, {"label":"76", "x":16.25, "y":0}, {"label":"82", "x":17.25, "y":0}, {"label":"2", "x":0, "y":1.5}, {"label":"8", "x":1, "y":1.5}, {"label":"14", "x":2, "y":1.5}, {"label":"20", "x":3, "y":1.5}, {"label":"25", "x":4, "y":1.5}, {"label":"30", "x":5, "y":1.5}, {"label":"36", "x":6, "y":1.5}, {"label":"41", "x":7, "y":1.5}, {"label":"46", "x":8, "y":1.5}, {"label":"51", "x":9, "y":1.5}, {"label":"57", "x":10, "y":1.5}, {"label":"63", "x":11, "y":1.5}, {"label":"67", "x":12, "y":1.5}, {"label":"71", "x":13, "y":1.5, "w":2}, {"label":"77", "x":15.25, "y":1.5}, {"label":"84", "x":16.25, "y":1.5}, {"label":"83", "x":17.25, "y":1.5}, {"label":"88", "x":18.5, "y":1.5}, {"label":"93", "x":19.5, "y":1.5}, {"label":"97", "x":20.5, "y":1.5}, {"label":"102", "x":21.5, "y":1.5}, {"label":"3", "x":0, "y":2.5, "w":1.5}, {"label":"9", "x":1.5, "y":2.5}, {"label":"15", "x":2.5, "y":2.5}, {"label":"21", "x":3.5, "y":2.5}, {"label":"26", "x":4.5, "y":2.5}, {"label":"31", "x":5.5, "y":2.5}, {"label":"37", "x":6.5, "y":2.5}, {"label":"42", "x":7.5, "y":2.5}, {"label":"47", "x":8.5, "y":2.5}, {"label":"52", "x":9.5, "y":2.5}, {"label":"58", "x":10.5, "y":2.5}, {"label":"64", "x":11.5, "y":2.5}, {"label":"68", "x":12.5, "y":2.5}, {"label":"72", "x":13.5, "y":2.5, "w":1.5}, {"label":"78", "x":15.25, "y":2.5}, {"label":"86", "x":16.25, "y":2.5}, {"label":"85", "x":17.25, "y":2.5}, {"label":"89", "x":18.5, "y":2.5}, {"label":"94", "x":19.5, "y":2.5}, {"label":"98", "x":20.5, "y":2.5}, {"label":"103", "x":21.5, "y":2.5}, {"label":"4", "x":0, "y":3.5, "w":1.75}, {"label":"10", "x":1.75, "y":3.5}, {"label":"16", "x":2.75, "y":3.5}, {"label":"22", "x":3.75, "y":3.5}, {"label":"27", "x":4.75, "y":3.5}, {"label":"32", "x":5.75, "y":3.5}, {"label":"38", "x":6.75, "y":3.5}, {"label":"43", "x":7.75, "y":3.5}, {"label":"48", "x":8.75, "y":3.5}, {"label":"53", "x":9.75, "y":3.5}, {"label":"59", "x":10.75, "y":3.5}, {"label":"65", "x":11.75, "y":3.5}, {"label":"73", "x":12.75, "y":3.5, "w":2.25}, {"label":"90", "x":18.5, "y":3.5}, {"label":"95", "x":19.5, "y":3.5}, {"label":"99", "x":20.5, "y":3.5}, {"label":"110", "x":21.5, "y":3.5}, {"label":"5", "x":0, "y":4.5, "w":2.25}, {"label":"11", "x":2.25, "y":4.5}, {"label":"17", "x":3.25, "y":4.5}, {"label":"23", "x":4.25, "y":4.5}, {"label":"28", "x":5.25, "y":4.5}, {"label":"33", "x":6.25, "y":4.5}, {"label":"39", "x":7.25, "y":4.5}, {"label":"44", "x":8.25, "y":4.5}, {"label":"49", "x":9.25, "y":4.5}, {"label":"54", "x":10.25, "y":4.5}, {"label":"60", "x":11.25, "y":4.5}, {"label":"74", "x":12.25, "y":4.5, "w":2.75}, {"label":"87", "x":16.25, "y":4.5}, {"label":"91", "x":18.5, "y":4.5}, {"label":"96", "x":19.5, "y":4.5}, {"label":"100", "x":20.5, "y":4.5}, {"label":"104", "x":21.5, "y":4.5}, {"label":"6", "x":0, "y":5.5, "w":1.25}, {"label":"12", "x":1.25, "y":5.5, "w":1.25}, {"label":"18", "x":2.5, "y":5.5, "w":1.25}, {"label":"105", "x":3.75, "y":5.5, "w":1.25}, {"label":"106", "x":5, "y":5.5, "w":1.25}, {"label":"34", "x":6.25, "y":5.5, "w":1.25}, {"label":"107", "x":7.5, "y":5.5, "w":1.25}, {"label":"108", "x":8.75, "y":5.5, "w":1.25}, {"label":"55", "x":10, "y":5.5, "w":1.25}, {"label":"61", "x":11.25, "y":5.5, "w":1.25}, {"label":"69", "x":12.5, "y":5.5, "w":1.25}, {"label":"75", "x":13.75, "y":5.5, "w":1.25}, {"label":"79", "x":15.25, "y":5.5}, {"label":"80", "x":16.25, "y":5.5}, {"label":"81", "x":17.25, "y":5.5}, {"label":"92", "x":18.5, "y":5.5}, {"label":"109", "x":19.5, "y":5.5}, {"label":"101", "x":20.5, "y":5.5}, {"label":"111", "x":21.5, "y":5.5}]
10 }
11 }
12}
diff --git a/keyboards/thedogkeyboard/keymaps/default/keymap.c b/keyboards/thedogkeyboard/keymaps/default/keymap.c
new file mode 100644
index 000000000..7632f81b9
--- /dev/null
+++ b/keyboards/thedogkeyboard/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
1/* Copyright 2019 kakunpc
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
19 [0] = LAYOUT_all( /* Base */
20 KC_ESC, KC_F1,KC_F2,KC_F3,KC_F4, KC_F5,KC_F6,KC_F7,KC_F8, KC_F9,KC_F10,KC_F11,KC_F12, KC_PSCREEN,KC_SCROLLLOCK,KC_PAUSE,
21
22 KC_GRV,KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
23 KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
24 KC_LCAP, KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT ,KC_ENT, KC_P4, KC_P5, KC_P6, KC_NO,
25 KC_LSHIFT, KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH, KC_RSHIFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
26 KC_LCTL,KC_LGUI,KC_LALT,KC_NO,KC_NO,KC_SPC,KC_NO,KC_NO,KC_RALT,KC_RGUI,KC_SPC,KC_RCTL, KC_LEFT,KC_DOWN,KC_RIGHT, KC_P0, KC_NO, KC_PDOT, KC_NO
27 )
28};
diff --git a/keyboards/thedogkeyboard/keymaps/default/readme.md b/keyboards/thedogkeyboard/keymaps/default/readme.md
new file mode 100644
index 000000000..045729a7a
--- /dev/null
+++ b/keyboards/thedogkeyboard/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for thedogkeyboard
diff --git a/keyboards/thedogkeyboard/keymaps/kakunpc/keymap.c b/keyboards/thedogkeyboard/keymaps/kakunpc/keymap.c
new file mode 100644
index 000000000..cc3ba84d8
--- /dev/null
+++ b/keyboards/thedogkeyboard/keymaps/kakunpc/keymap.c
@@ -0,0 +1,43 @@
1/* Copyright 2019 kakunpc
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18enum layers
19{
20 BASE = 0,
21 COMMAND
22};
23
24#define KC_COMMAND LT(COMMAND, KC_F13)
25
26const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
27 [BASE] = LAYOUT_all( /* BASE */
28 KC_ESC, KC_F1,KC_F2,KC_F3,KC_F4, KC_F5,KC_F6,KC_F7,KC_F8, KC_F9,KC_F10,KC_F11,KC_F12, KC_PSCREEN,KC_SCROLLLOCK,KC_PAUSE,
29
30 KC_GRV,KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
31 KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
32 KC_LCTL, KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT ,KC_ENT, KC_P4, KC_P5, KC_P6, KC_NO,
33 KC_LSHIFT, KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH, KC_RSHIFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
34 KC_LCTL,KC_LGUI,KC_LALT,KC_COMMAND,KC_SPC,KC_SPC,KC_SPC,KC_F14,KC_RALT,KC_NO,KC_NO,KC_COMMAND, KC_LEFT,KC_DOWN,KC_RIGHT, KC_P0, KC_NO, KC_PDOT, KC_NO ),
35 [COMMAND] = LAYOUT_all( /* COMMAND */
36 KC_ESC, KC_F1,KC_F2,KC_F3,KC_F4, KC_F5,KC_F6,KC_F7,KC_F8, KC_F9,KC_F10,KC_F11,KC_F12, KC_PSCREEN,KC_SCROLLLOCK,KC_PAUSE,
37
38 KC_GRV,KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
39 KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
40 KC_LCAP, KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT ,KC_ENT, KC_P4, KC_P5, KC_P6, KC_NO,
41 KC_LSHIFT, KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH, KC_RSHIFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
42 KC_LCTL,KC_LGUI,KC_LALT,_______,KC_SPC,KC_SPC,KC_SPC,KC_F14,KC_RALT,KC_NO,KC_NO,_______, KC_LEFT,KC_DOWN,KC_RIGHT, KC_P0, KC_NO, KC_PDOT, KC_NO ),
43};
diff --git a/keyboards/thedogkeyboard/keymaps/kakunpc/readme.md b/keyboards/thedogkeyboard/keymaps/kakunpc/readme.md
new file mode 100644
index 000000000..66eab07b9
--- /dev/null
+++ b/keyboards/thedogkeyboard/keymaps/kakunpc/readme.md
@@ -0,0 +1 @@
# The kakunpc keymap for thedogkeyboard
diff --git a/keyboards/thedogkeyboard/matrix.c b/keyboards/thedogkeyboard/matrix.c
new file mode 100644
index 000000000..e06fc15dc
--- /dev/null
+++ b/keyboards/thedogkeyboard/matrix.c
@@ -0,0 +1,287 @@
1/*
2Copyright 2012-2018 Jun Wako, Jack Humbert, Yiancar
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17#include <stdint.h>
18#include <stdbool.h>
19#include "wait.h"
20#include "print.h"
21#include "debug.h"
22#include "util.h"
23#include "matrix.h"
24#include "debounce.h"
25#include "quantum.h"
26
27#if (MATRIX_COLS <= 8)
28# define print_matrix_header() print("\nr/c 01234567\n")
29# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
30# define matrix_bitpop(i) bitpop(matrix[i])
31# define ROW_SHIFTER ((uint8_t)1)
32#elif (MATRIX_COLS <= 16)
33# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
34# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
35# define matrix_bitpop(i) bitpop16(matrix[i])
36# define ROW_SHIFTER ((uint16_t)1)
37#elif (MATRIX_COLS <= 32)
38# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
39# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
40# define matrix_bitpop(i) bitpop32(matrix[i])
41# define ROW_SHIFTER ((uint32_t)1)
42#endif
43
44#ifdef MATRIX_MASKED
45 extern const matrix_row_t matrix_mask[];
46#endif
47
48static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
49static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
50
51/* matrix state(1:on, 0:off) */
52static matrix_row_t raw_matrix[MATRIX_ROWS]; //raw values
53static matrix_row_t matrix[MATRIX_ROWS]; //debounced values
54
55__attribute__ ((weak))
56void matrix_init_quantum(void) {
57 matrix_init_kb();
58}
59
60__attribute__ ((weak))
61void matrix_scan_quantum(void) {
62 matrix_scan_kb();
63}
64
65__attribute__ ((weak))
66void matrix_init_kb(void) {
67 matrix_init_user();
68}
69
70__attribute__ ((weak))
71void matrix_scan_kb(void) {
72 matrix_scan_user();
73}
74
75__attribute__ ((weak))
76void matrix_init_user(void) {
77}
78
79__attribute__ ((weak))
80void matrix_scan_user(void) {
81}
82
83inline
84uint8_t matrix_rows(void) {
85 return MATRIX_ROWS;
86}
87
88inline
89uint8_t matrix_cols(void) {
90 return MATRIX_COLS;
91}
92
93//Deprecated.
94bool matrix_is_modified(void)
95{
96 if (debounce_active()) return false;
97 return true;
98}
99
100inline
101bool matrix_is_on(uint8_t row, uint8_t col)
102{
103 return (matrix[row] & ((matrix_row_t)1<<col));
104}
105
106inline
107matrix_row_t matrix_get_row(uint8_t row)
108{
109 // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
110 // switch blocker installed and the switch is always pressed.
111#ifdef MATRIX_MASKED
112 return matrix[row] & matrix_mask[row];
113#else
114 return matrix[row];
115#endif
116}
117
118void matrix_print(void)
119{
120 print_matrix_header();
121
122 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
123 phex(row); print(": ");
124 print_matrix_row(row);
125 print("\n");
126 }
127}
128
129uint8_t matrix_key_count(void)
130{
131 uint8_t count = 0;
132 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
133 count += matrix_bitpop(i);
134 }
135 return count;
136}
137
138static void select_row(uint8_t row)
139{
140 setPinOutput(row_pins[row]);
141 writePinLow(row_pins[row]);
142}
143
144static void unselect_row(uint8_t row)
145{
146 setPinInputHigh(row_pins[row]);
147}
148
149static void unselect_rows(void)
150{
151 for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
152 setPinInputHigh(row_pins[x]);
153 }
154}
155
156static void select_col(uint8_t col)
157{
158 setPinOutput(col_pins[col]);
159 writePinLow(col_pins[col]);
160}
161
162static void unselect_col(uint8_t col)
163{
164 setPinInputHigh(col_pins[col]);
165}
166
167static void unselect_cols(void)
168{
169 for(uint8_t x = 0; x < MATRIX_COLS; x++) {
170 setPinInputHigh(col_pins[x]);
171 }
172}
173
174static void init_pins(void) {
175 unselect_rows();
176 unselect_cols();
177 for (uint8_t x = 0; x < MATRIX_COLS; x++) {
178 setPinInputHigh(col_pins[x]);
179 }
180 for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
181 setPinInputHigh(row_pins[x]);
182 }
183}
184
185static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
186{
187 // Store last value of row prior to reading
188 matrix_row_t last_row_value = current_matrix[current_row];
189
190 // Clear data in matrix row
191 current_matrix[current_row] = 0;
192
193 // Select row and wait for row selecton to stabilize
194 select_row(current_row);
195 wait_us(30);
196
197 // For each col...
198 for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
199
200 // Select the col pin to read (active low)
201 uint8_t pin_state = readPin(col_pins[col_index]);
202
203 // Populate the matrix row with the state of the col pin
204 current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
205 }
206
207 // Unselect row
208 unselect_row(current_row);
209
210 return (last_row_value != current_matrix[current_row]);
211}
212
213static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
214{
215 bool matrix_changed = false;
216
217 // Select col and wait for col selecton to stabilize
218 select_col(current_col);
219 wait_us(30);
220
221 // For each row...
222 for(uint8_t row_index = 0; row_index < MATRIX_ROWS/2; row_index++)
223 {
224 uint8_t tmp = row_index + MATRIX_ROWS/2;
225 // Store last value of row prior to reading
226 matrix_row_t last_row_value = current_matrix[tmp];
227
228 // Check row pin state
229 if (readPin(row_pins[row_index]) == 0)
230 {
231 // Pin LO, set col bit
232 current_matrix[tmp] |= (ROW_SHIFTER << current_col);
233 }
234 else
235 {
236 // Pin HI, clear col bit
237 current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
238 }
239
240 // Determine if the matrix changed state
241 if ((last_row_value != current_matrix[tmp]) && !(matrix_changed))
242 {
243 matrix_changed = true;
244 }
245 }
246
247 // Unselect col
248 unselect_col(current_col);
249
250 return matrix_changed;
251}
252
253void matrix_init(void) {
254
255 // initialize key pins
256 init_pins();
257
258 // initialize matrix state: all keys off
259 for (uint8_t i=0; i < MATRIX_ROWS; i++) {
260 raw_matrix[i] = 0;
261 matrix[i] = 0;
262 }
263
264 debounce_init(MATRIX_ROWS);
265
266 matrix_init_quantum();
267}
268
269uint8_t matrix_scan(void)
270{
271 bool changed = false;
272
273 // Set row, read cols
274 for (uint8_t current_row = 0; current_row < MATRIX_ROWS / 2; current_row++) {
275 changed |= read_cols_on_row(raw_matrix, current_row);
276 }
277 //else
278 // Set col, read rows
279 for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
280 changed |= read_rows_on_col(raw_matrix, current_col);
281 }
282
283 debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
284
285 matrix_scan_quantum();
286 return (uint8_t)changed;
287}
diff --git a/keyboards/thedogkeyboard/readme.md b/keyboards/thedogkeyboard/readme.md
new file mode 100644
index 000000000..789149ca8
--- /dev/null
+++ b/keyboards/thedogkeyboard/readme.md
@@ -0,0 +1,15 @@
1# thedogkeyboard
2
3![thedogkeyboard](https://i.gyazo.com/70ac677c1e75c04b812e5dce311f7901.jpg)
4
5ProMicro 100% Keyboard.
6
7* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
8* Hardware Supported: thedogkeyboard_rev1, promicro
9* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
10
11Make example for this keyboard (after setting up your build environment):
12
13 make thedogkeyboard:default
14
15See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/thedogkeyboard/rules.mk b/keyboards/thedogkeyboard/rules.mk
new file mode 100644
index 000000000..31e3aa83a
--- /dev/null
+++ b/keyboards/thedogkeyboard/rules.mk
@@ -0,0 +1,35 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5# Teensy halfkay
6# Pro Micro caterina
7# Atmel DFU atmel-dfu
8# LUFA DFU lufa-dfu
9# QMK DFU qmk-dfu
10# ATmega32A bootloadHID
11# ATmega328P USBasp
12BOOTLOADER = atmel-dfu
13
14# Build Options
15# change yes to no to disable
16#
17BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
18MOUSEKEY_ENABLE = yes # Mouse keys
19EXTRAKEY_ENABLE = yes # Audio control and System control
20CONSOLE_ENABLE = yes # Console for debug
21COMMAND_ENABLE = yes # Commands for debug and configuration
22# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
23SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
24# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
25NKRO_ENABLE = no # USB Nkey Rollover
26BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
27RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
28MIDI_ENABLE = no # MIDI support
29BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
30AUDIO_ENABLE = no # Audio output on port C6
31FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
32HD44780_ENABLE = no # Enable support for HD44780 based LCDs
33CUSTOM_MATRIX = yes
34
35SRC += matrix.c
diff --git a/keyboards/thedogkeyboard/thedogkeyboard.c b/keyboards/thedogkeyboard/thedogkeyboard.c
new file mode 100644
index 000000000..a1808324c
--- /dev/null
+++ b/keyboards/thedogkeyboard/thedogkeyboard.c
@@ -0,0 +1,16 @@
1/* Copyright 2019 kakunpc
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "thedogkeyboard.h"
diff --git a/keyboards/thedogkeyboard/thedogkeyboard.h b/keyboards/thedogkeyboard/thedogkeyboard.h
new file mode 100644
index 000000000..3f4b72c2b
--- /dev/null
+++ b/keyboards/thedogkeyboard/thedogkeyboard.h
@@ -0,0 +1,59 @@
1/* Copyright 2019 kakunpc
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include "quantum.h"
19
20/* This a shortcut to help you visually see your layout.
21 *
22 * The first section contains all of the arguments representing the physical
23 * layout of the board and position of the keys.
24 *
25 * The second converts the arguments into a two-dimensional array which
26 * represents the switch matrix.
27 */
28#define LAYOUT_all( \
29 k01, k07,k13,k19,k24, k29,k35,k40,k45, k50,k56,k62,k66, k70,k76,k82,\
30 \
31 k02,k08,k14,k20,k25,k30,k36,k41,k46,k51,k57,k63,k67, k71, k77,k84,k83, k88,k93,k97,k102, \
32 k03, k09,k15,k21,k26,k31,k37,k42,k47,k52,k58,k64,k68, k72, k78,k86,k85, k89,k94,k98,k103, \
33 k04, k10,k16,k22,k27,k32,k38,k43,k48,k53,k59,k65, k73, k90,k95,k99,k110, \
34 k05, k11,k17,k23,k28,k33,k39,k44,k49,k54,k60, k74, k87, k91,k96,k100,k104, \
35 k06, k12, k18, k105, k106, k34, k107, k108, k55, k61, k69, k75, k79,k80,k81, k92,k109,k101,k111 \
36 \
37) \
38{ \
39 { k01, k02, k03, k04, k05, k06 }, \
40 { k07, k08, k09, k10, k11, k12 }, \
41 { k13, k14, k15, k16, k17, k18 }, \
42 { k19, k20, k21, k22, k23, k105 }, \
43 { k24, k25, k26, k27, k28, k106 }, \
44 { k29, k30, k31, k32, k33, k34 }, \
45 { k35, k36, k37, k38, k39, k107 }, \
46 { k40, k41, k42, k43, k44, k108 }, \
47 { k45, k46, k47, k48, k49, KC_NO }, \
48 { k50, k51, k52, k53, k54, k55 }, \
49 { k56, k57, k58, k59, k60, k61 }, \
50 { k62, k63, k64, k65, KC_NO, KC_NO }, \
51 { k66, k67, k68, k69, KC_NO, KC_NO }, \
52 { k70, k71, k72, k73, k74, k75 }, \
53 { k76, k77, k78, k79, k80, k81 }, \
54 { k82, k83, k84, k85, k86, k87 }, \
55 { k88, k89, k90, k91, k92, KC_NO }, \
56 { k93, k94, k95, k96, k109, KC_NO }, \
57 { k97, k98, k99, k100, k101, KC_NO }, \
58 { k102, k103, k104, k110, k111, KC_NO } \
59}