aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/al1/al1.c48
-rw-r--r--keyboards/al1/al1.h58
-rw-r--r--keyboards/al1/config.h187
-rw-r--r--keyboards/al1/info.json16
-rw-r--r--keyboards/al1/keymaps/default/keymap.c69
-rw-r--r--keyboards/al1/keymaps/default/readme.md1
-rw-r--r--keyboards/al1/keymaps/splitbs/keymap.c52
-rw-r--r--keyboards/al1/matrix.c184
-rw-r--r--keyboards/al1/readme.md16
-rw-r--r--keyboards/al1/rules.mk71
10 files changed, 702 insertions, 0 deletions
diff --git a/keyboards/al1/al1.c b/keyboards/al1/al1.c
new file mode 100644
index 000000000..ae24c981f
--- /dev/null
+++ b/keyboards/al1/al1.c
@@ -0,0 +1,48 @@
1/* Copyright 2018 MechMerlin
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 "al1.h"
17
18void matrix_init_kb(void) {
19 matrix_init_user();
20}
21
22void matrix_scan_kb(void) {
23 matrix_scan_user();
24}
25
26bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
27 return process_record_user(keycode, record);
28}
29
30void led_set_kb(uint8_t usb_led) {
31 CONFIG_LED_IO;
32 print_dec(usb_led);
33 if (usb_led & (1<<USB_LED_CAPS_LOCK))
34 PORTB &= ~(1<<7);
35 else
36 PORTB |= (1<<7);
37
38 if (usb_led & (1<<USB_LED_NUM_LOCK))
39 PORTD &= ~(1<<0);
40 else
41 PORTD |= (1<<0);
42
43 if (usb_led & (1<<USB_LED_SCROLL_LOCK))
44 PORTD &= ~(1<<1);
45 else
46 PORTD |= (1<<1);
47 led_set_user(usb_led);
48} \ No newline at end of file
diff --git a/keyboards/al1/al1.h b/keyboards/al1/al1.h
new file mode 100644
index 000000000..17a0c9655
--- /dev/null
+++ b/keyboards/al1/al1.h
@@ -0,0 +1,58 @@
1/* Copyright 2018 MechMerlin
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#ifndef AL1_H
17#define AL1_H
18
19#include "quantum.h"
20
21#define CONFIG_LED_IO \
22 DDRB |= (1<<7) | (1<<6); \
23 DDRD |= (1<<0) | (1<<1);
24
25
26#define LAYOUT( \
27 K500, K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K415, K414,\
28 K501, K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K215, K413,\
29 K502, K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \
30 K503, K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K412,\
31 K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411 \
32) \
33{ \
34 { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015}, \
35 { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115}, \
36 { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215}, \
37 { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315}, \
38 { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, K415}, \
39 { K500, K501, K502, K503, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO} \
40}
41
42#define LAYOUT_split_bs( \
43 K500, K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K512, K012, K013, K014, K015, K415, K414, \
44 K501, K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K215, K413,\
45 K502, K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \
46 K503, K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K412,\
47 K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411 \
48) \
49{ \
50 { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015}, \
51 { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115}, \
52 { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215}, \
53 { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315}, \
54 { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, K415}, \
55 { K500, K501, K502, K503, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K512, KC_NO, KC_NO, KC_NO} \
56}
57
58#endif
diff --git a/keyboards/al1/config.h b/keyboards/al1/config.h
new file mode 100644
index 000000000..f92ed44d3
--- /dev/null
+++ b/keyboards/al1/config.h
@@ -0,0 +1,187 @@
1/*
2Copyright 2018 MechMerlin
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#ifndef CONFIG_H
19#define CONFIG_H
20
21#include "config_common.h"
22
23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xFEED
25#define PRODUCT_ID 0x6050
26#define DEVICE_VER 0x0104
27#define MANUFACTURER Alsoran
28#define PRODUCT AL1
29#define DESCRIPTION A custom keyboard
30
31/* key matrix size */
32#define MATRIX_ROWS 7
33#define MATRIX_COLS 20
34
35/*
36 * Keyboard Matrix Assignments
37 *
38 * Change this to how you wired your keyboard
39 * COLS: AVR pins used for columns, left to right
40 * ROWS: AVR pins used for rows, top to bottom
41 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
42 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
43 *
44*/
45
46/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
47#define DIODE_DIRECTION COL2ROW
48
49#define BACKLIGHT_PIN B6
50#define BACKLIGHT_BREATHING
51#define BACKLIGHT_LEVELS 3
52
53
54/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
55#define DEBOUNCING_DELAY 5
56
57/* define if matrix has ghost (lacks anti-ghosting diodes) */
58//#define MATRIX_HAS_GHOST
59
60/* number of backlight levels */
61
62/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
63#define LOCKING_SUPPORT_ENABLE
64/* Locking resynchronize hack */
65#define LOCKING_RESYNC_ENABLE
66
67/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
68 * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
69 */
70// #define GRAVE_ESC_CTRL_OVERRIDE
71
72/*
73 * Force NKRO
74 *
75 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
76 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
77 * makefile for this to work.)
78 *
79 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
80 * until the next keyboard reset.
81 *
82 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
83 * fully operational during normal computer usage.
84 *
85 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
86 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
87 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
88 * power-up.
89 *
90 */
91//#define FORCE_NKRO
92
93/*
94 * Magic Key Options
95 *
96 * Magic keys are hotkey commands that allow control over firmware functions of
97 * the keyboard. They are best used in combination with the HID Listen program,
98 * found here: https://www.pjrc.com/teensy/hid_listen.html
99 *
100 * The options below allow the magic key functionality to be changed. This is
101 * useful if your keyboard/keypad is missing keys and you want magic key support.
102 *
103 */
104
105/* key combination for magic key command */
106#define IS_COMMAND() ( \
107 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
108)
109
110/* control how magic key switches layers */
111//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
112//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
113//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
114
115/* override magic key keymap */
116//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
117//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
118//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
119//#define MAGIC_KEY_HELP1 H
120//#define MAGIC_KEY_HELP2 SLASH
121//#define MAGIC_KEY_DEBUG D
122//#define MAGIC_KEY_DEBUG_MATRIX X
123//#define MAGIC_KEY_DEBUG_KBD K
124//#define MAGIC_KEY_DEBUG_MOUSE M
125//#define MAGIC_KEY_VERSION V
126//#define MAGIC_KEY_STATUS S
127//#define MAGIC_KEY_CONSOLE C
128//#define MAGIC_KEY_LAYER0_ALT1 ESC
129//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
130//#define MAGIC_KEY_LAYER0 0
131//#define MAGIC_KEY_LAYER1 1
132//#define MAGIC_KEY_LAYER2 2
133//#define MAGIC_KEY_LAYER3 3
134//#define MAGIC_KEY_LAYER4 4
135//#define MAGIC_KEY_LAYER5 5
136//#define MAGIC_KEY_LAYER6 6
137//#define MAGIC_KEY_LAYER7 7
138//#define MAGIC_KEY_LAYER8 8
139//#define MAGIC_KEY_LAYER9 9
140//#define MAGIC_KEY_BOOTLOADER PAUSE
141//#define MAGIC_KEY_LOCK CAPS
142//#define MAGIC_KEY_EEPROM E
143//#define MAGIC_KEY_NKRO N
144//#define MAGIC_KEY_SLEEP_LED Z
145
146/*
147 * Feature disable options
148 * These options are also useful to firmware size reduction.
149 */
150
151/* disable debug print */
152//#define NO_DEBUG
153
154/* disable print */
155//#define NO_PRINT
156
157/* disable action features */
158//#define NO_ACTION_LAYER
159//#define NO_ACTION_TAPPING
160//#define NO_ACTION_ONESHOT
161//#define NO_ACTION_MACRO
162//#define NO_ACTION_FUNCTION
163
164/*
165 * MIDI options
166 */
167
168/* Prevent use of disabled MIDI features in the keymap */
169//#define MIDI_ENABLE_STRICT 1
170
171/* enable basic MIDI features:
172 - MIDI notes can be sent when in Music mode is on
173*/
174//#define MIDI_BASIC
175
176/* enable advanced MIDI features:
177 - MIDI notes can be added to the keymap
178 - Octave shift and transpose
179 - Virtual sustain, portamento, and modulation wheel
180 - etc.
181*/
182//#define MIDI_ADVANCED
183
184/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
185//#define MIDI_TONE_KEYCODE_OCTAVES 1
186
187#endif
diff --git a/keyboards/al1/info.json b/keyboards/al1/info.json
new file mode 100644
index 000000000..c40bd8196
--- /dev/null
+++ b/keyboards/al1/info.json
@@ -0,0 +1,16 @@
1{
2 "keyboard_name": "AL1",
3 "url": "",
4 "maintainer": "qmk",
5 "width": 20.5,
6 "height": 5.25,
7 "layouts": {
8 "LAYOUT": {
9 "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Insert", "x":15.25, "y":0}, {"label":"Num Lock", "x":16.5, "y":0}, {"label":"/", "x":17.5, "y":0}, {"label":"*", "x":18.5, "y":0}, {"label":"-", "x":19.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Delete", "x":15.25, "y":1}, {"label":"7", "x":16.5, "y":1}, {"label":"8", "x":17.5, "y":1}, {"label":"9", "x":18.5, "y":1}, {"label":"+", "x":19.5, "y":1, "h":2}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"4", "x":16.5, "y":2}, {"label":"5", "x":17.5, "y":2}, {"label":"6", "x":18.5, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"1", "x":16.5, "y":3}, {"label":"2", "x":17.5, "y":3}, {"label":"3", "x":18.5, "y":3}, {"label":"Enter", "x":19.5, "y":3, "h":2}, {"label":"\u2191", "x":15.25, "y":3.25}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4}, {"label":"Alt", "x":2.25, "y":4, "w":1.25}, {"x":3.5, "y":4, "w":7}, {"label":"Alt", "x":10.5, "y":4, "w":1.25}, {"label":"Win", "x":11.75, "y":4}, {"label":"Menu", "x":12.75, "y":4, "w":1.25}, {"label":"0", "x":17.5, "y":4}, {"label":".", "x":18.5, "y":4}, {"label":"\u2190", "x":14.25, "y":4.25}, {"label":"\u2193", "x":15.25, "y":4.25}, {"label":"\u2192", "x":16.25, "y":4.25}]
10 },
11
12 "LAYOUT_split_bs": {
13 "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Insert", "x":15.25, "y":0}, {"label":"Num Lock", "x":16.5, "y":0}, {"label":"/", "x":17.5, "y":0}, {"label":"*", "x":18.5, "y":0}, {"label":"-", "x":19.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Delete", "x":15.25, "y":1}, {"label":"7", "x":16.5, "y":1}, {"label":"8", "x":17.5, "y":1}, {"label":"9", "x":18.5, "y":1}, {"label":"+", "x":19.5, "y":1, "h":2}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"4", "x":16.5, "y":2}, {"label":"5", "x":17.5, "y":2}, {"label":"6", "x":18.5, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"1", "x":16.5, "y":3}, {"label":"2", "x":17.5, "y":3}, {"label":"3", "x":18.5, "y":3}, {"label":"Enter", "x":19.5, "y":3, "h":2}, {"label":"\u2191", "x":15.25, "y":3.25}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4}, {"label":"Alt", "x":2.25, "y":4, "w":1.25}, {"x":3.5, "y":4, "w":7}, {"label":"Alt", "x":10.5, "y":4, "w":1.25}, {"label":"Win", "x":11.75, "y":4}, {"label":"Menu", "x":12.75, "y":4, "w":1.25}, {"label":"0", "x":17.5, "y":4}, {"label":".", "x":18.5, "y":4}, {"label":"\u2190", "x":14.25, "y":4.25}, {"label":"\u2193", "x":15.25, "y":4.25}, {"label":"\u2192", "x":16.25, "y":4.25}]
14 }
15 }
16}
diff --git a/keyboards/al1/keymaps/default/keymap.c b/keyboards/al1/keymaps/default/keymap.c
new file mode 100644
index 000000000..a4d62191c
--- /dev/null
+++ b/keyboards/al1/keymaps/default/keymap.c
@@ -0,0 +1,69 @@
1/* Copyright 2018 MechMerlin
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(\
20 KC_ESC, 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_NLCK, KC_PSLS, KC_PAST, KC_PMNS,\
21 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_DELETE, KC_P7, KC_P8, KC_P9, KC_PPLS,\
22 KC_CAPS, 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, \
23 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_FN0, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
24 KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_FN0, KC_RGUI, KC_RCTRL, KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT ),
25
26 [1] = LAYOUT(\
27 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_BSPC, KC_INS, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,\
28 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_DELETE, KC_P7, KC_P8, KC_P9, KC_PPLS,\
29 KC_CAPS, 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, \
30 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_FN0, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
31 KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_FN0, KC_RGUI, KC_RCTRL, KC_FN1, KC_FN2, KC_FN3, KC_P0, KC_PDOT ),
32};
33
34
35const uint16_t PROGMEM fn_actions[] = {
36
37};
38
39const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
40{
41 // MACRODOWN only works in this function
42 switch(id) {
43 case 0:
44 if (record->event.pressed) {
45 register_code(KC_RSFT);
46 } else {
47 unregister_code(KC_RSFT);
48 }
49 break;
50 }
51 return MACRO_NONE;
52};
53
54
55void matrix_init_user(void) {
56
57}
58
59void matrix_scan_user(void) {
60
61}
62
63bool process_record_user(uint16_t keycode, keyrecord_t *record) {
64 return true;
65}
66
67void led_set_user(uint8_t usb_led) {
68
69}
diff --git a/keyboards/al1/keymaps/default/readme.md b/keyboards/al1/keymaps/default/readme.md
new file mode 100644
index 000000000..b89f4f674
--- /dev/null
+++ b/keyboards/al1/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for al1
diff --git a/keyboards/al1/keymaps/splitbs/keymap.c b/keyboards/al1/keymaps/splitbs/keymap.c
new file mode 100644
index 000000000..da1ba3b8e
--- /dev/null
+++ b/keyboards/al1/keymaps/splitbs/keymap.c
@@ -0,0 +1,52 @@
1#include "al1.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4 [0] = LAYOUT_split_bs(\
5 KC_ESC, 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_GRAVE, KC_BSPC, KC_INS, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
6 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_DELETE, KC_P7, KC_P8, KC_P9, KC_PPLS,\
7 KC_CAPS, 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, \
8 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_FN0, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
9 KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_FN0, KC_RGUI, KC_RCTRL, KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT ),
10 [1] = LAYOUT_split_bs(\
11 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_GRAVE, KC_DELETE, KC_INS, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
12 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_DELETE, KC_P7, KC_P8, KC_P9, KC_PPLS,\
13 KC_CAPS, 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, \
14 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_FN0, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
15 KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_FN0, KC_RGUI, KC_RCTRL, KC_FN1, KC_FN2, KC_FN3, KC_P0, KC_PDOT ),
16};
17
18const uint16_t PROGMEM fn_actions[] = {
19
20};
21
22const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
23{
24 // MACRODOWN only works in this function
25 switch(id) {
26 case 0:
27 if (record->event.pressed) {
28 register_code(KC_RSFT);
29 } else {
30 unregister_code(KC_RSFT);
31 }
32 break;
33 }
34 return MACRO_NONE;
35};
36
37
38void matrix_init_user(void) {
39
40}
41
42void matrix_scan_user(void) {
43
44}
45
46bool process_record_user(uint16_t keycode, keyrecord_t *record) {
47 return true;
48}
49
50void led_set_user(uint8_t usb_led) {
51
52} \ No newline at end of file
diff --git a/keyboards/al1/matrix.c b/keyboards/al1/matrix.c
new file mode 100644
index 000000000..f7ed7fbb0
--- /dev/null
+++ b/keyboards/al1/matrix.c
@@ -0,0 +1,184 @@
1#include <stdint.h>
2#include <stdbool.h>
3#include <avr/io.h>
4#include <util/delay.h>
5#include "print.h"
6#include "debug.h"
7#include "util.h"
8#include "matrix.h"
9
10#ifndef DEBOUNCING_DELAY
11# define DEBOUNCING_DELAY 5
12#endif
13static uint8_t debouncing = DEBOUNCING_DELAY;
14
15static matrix_row_t matrix[MATRIX_ROWS];
16static matrix_row_t matrix_debouncing[MATRIX_ROWS];
17
18static uint8_t read_rows(void);
19static void init_rows(void);
20static void unselect_cols(void);
21static void select_col(uint8_t col);
22
23inline uint8_t matrix_rows(void) {
24 return MATRIX_ROWS;
25}
26
27inline uint8_t matrix_cols(void) {
28 return MATRIX_COLS;
29}
30
31
32void matrix_init(void) {
33 // initialize row and col
34 unselect_cols();
35 init_rows();
36
37 // initialize matrix state: all keys off
38 for (uint8_t i=0; i < MATRIX_ROWS; i++) {
39 matrix[i] = 0;
40 matrix_debouncing[i] = 0;
41 }
42 matrix_init_quantum();
43}
44
45uint8_t matrix_scan(void) {
46 for (uint8_t col = 0; col < MATRIX_COLS; col++) {
47 select_col(col);
48 _delay_us(3);
49 uint8_t rows = read_rows();
50 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
51 bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
52 bool curr_bit = rows & (1<<row);
53 if (prev_bit != curr_bit) {
54 matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
55 debouncing = DEBOUNCING_DELAY;
56 }
57 }
58 unselect_cols();
59 }
60
61 if (debouncing) {
62 if (--debouncing) {
63 _delay_ms(1);
64 } else {
65 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
66 matrix[i] = matrix_debouncing[i];
67 }
68 }
69 }
70
71 matrix_scan_quantum();
72 return 1;
73}
74
75bool matrix_is_modified(void) {
76 if (debouncing)
77 return false;
78 else
79 return true;
80}
81
82inline bool matrix_is_on(uint8_t row, uint8_t col) {
83 return (matrix[row] & ((matrix_row_t)1<<col));
84}
85
86inline matrix_row_t matrix_get_row(uint8_t row) {
87 return matrix[row];
88}
89
90void matrix_print(void) {
91 print("\nr/c 0123456789ABCDEF\n");
92 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
93 xprintf("%02X: %032lb\n", row, bitrev32(matrix_get_row(row)));
94 }
95}
96
97uint8_t matrix_key_count(void) {
98 uint8_t count = 0;
99 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
100 count += bitpop32(matrix[i]);
101 }
102 return count;
103}
104
105/* Row pin configuration
106 *
107 * row: 0 1 2 3 4 5
108 * pin: C7 B1 B2 C6 B4 B5
109 *
110 */
111static void init_rows(void)
112{
113 DDRC &= ~0b11000000;
114 DDRB &= ~0b00110110;
115 PORTC |= 0b11000000;
116 PORTB |= 0b00110110;
117}
118
119static uint8_t read_rows(void) {
120 return (PINC&(1<<PC7) ? 0 : (1<<0)) |
121 (PINB&(1<<PB1) ? 0 : (1<<1)) |
122 (PINB&(1<<PB2) ? 0 : (1<<2)) |
123 (PINC&(1<<PC6) ? 0 : (1<<3)) |
124 (PINB&(1<<PB4) ? 0 : (1<<4)) |
125 (PINB&(1<<PB5) ? 0 : (1<<5));
126}
127
128/* Row pin configuration
129 * pin: D3 D7 D6 D5 D4
130 * row: off 0 x x x x
131 * 0 1 0 0 0 0
132 * 1 1 0 0 0 1
133 * 2 1 0 0 1 0
134 * 3 1 0 0 1 1
135 * 4 1 0 1 0 0
136 * 5 1 0 1 0 1
137 * 6 1 0 1 1 0
138 * 7 1 0 1 1 1
139 * 8 1 1 0 0 0
140 * 9 1 1 0 0 1
141 * 10 1 1 0 1 0
142 * 11 1 1 0 1 1
143 * 12 1 1 1 0 0
144 * 13 1 1 1 0 1
145 * 14 1 1 1 1 0
146 * 15 1 1 1 1 1
147 */
148static void unselect_cols(void)
149{
150 // output high(DDR:1, PORT:1) to unselect
151 DDRB |= (1 << PD3);
152 PORTB |= (1 << PD3);
153}
154
155static void select_col(uint8_t col) {
156 DDRD |= (1<<PD3 | 1<<PD4 | 1<<PD5 | 1<<PD6 | 1<<PD7);
157
158 PORTD &= ~(1<<PD3);
159
160 if (col & (1<<0)) {
161 PORTD |= (1<<PD4);
162 }
163 else {
164 PORTD &= ~(1<<PD4);
165 }
166 if (col & (1<<1)) {
167 PORTD |= (1<<PD5);
168 }
169 else {
170 PORTD &= ~(1<<PD5);
171 }
172 if (col & (1<<2)) {
173 PORTD |= (1<<PD6);
174 }
175 else {
176 PORTD &= ~(1<<PD6);
177 }
178 if (col & (1<<3)) {
179 PORTD |= (1<<PD7);
180 }
181 else {
182 PORTD &= ~(1<<PD7);
183 }
184} \ No newline at end of file
diff --git a/keyboards/al1/readme.md b/keyboards/al1/readme.md
new file mode 100644
index 000000000..0032885ff
--- /dev/null
+++ b/keyboards/al1/readme.md
@@ -0,0 +1,16 @@
1# TriangleLabs AL1
2
3![AL1](imgur.com image replace me!)
4
5Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin), [Olivia](https://github.com/olivia)
6Hardware Supported: AL1 PCB
7Hardware Availability: [GroupBuy](https://geekhack.org/index.php?topic=93258.0)
8
9Ported from [TriangleLab](https://github.com/TriangleLab)'s repo: https://github.com/TriangleLab/AL1-Firmware/tree/master/keyboards/al1
10
11Make example for this keyboard (after setting up your build environment):
12
13 make al1:default
14 make al1:splitbs
15
16See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/al1/rules.mk b/keyboards/al1/rules.mk
new file mode 100644
index 000000000..c730f7e7c
--- /dev/null
+++ b/keyboards/al1/rules.mk
@@ -0,0 +1,71 @@
1# MCU name
2#MCU = at90usb1286
3MCU = atmega32u4
4
5# Processor frequency.
6# This will define a symbol, F_CPU, in all source code files equal to the
7# processor frequency in Hz. You can then use this symbol in your source code to
8# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
9# automatically to create a 32-bit value in your source code.
10#
11# This will be an integer division of F_USB below, as it is sourced by
12# F_USB after it has run through any CPU prescalers. Note that this value
13# does not *change* the processor frequency - it should merely be updated to
14# reflect the processor speed set externally so that the code can use accurate
15# software delays.
16F_CPU = 16000000
17
18
19#
20# LUFA specific
21#
22# Target architecture (see library "Board Types" documentation).
23ARCH = AVR8
24
25# Input clock frequency.
26# This will define a symbol, F_USB, in all source code files equal to the
27# input clock frequency (before any prescaling is performed) in Hz. This value may
28# differ from F_CPU if prescaling is used on the latter, and is required as the
29# raw input clock is fed directly to the PLL sections of the AVR for high speed
30# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
31# at the end, this will be done automatically to create a 32-bit value in your
32# source code.
33#
34# If no clock division is performed on the input clock inside the AVR (via the
35# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
36F_USB = $(F_CPU)
37
38# Interrupt driven control endpoint task(+60)
39OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
40
41
42# Boot Section Size in *bytes*
43# Teensy halfKay 512
44# Teensy++ halfKay 1024
45# Atmel DFU loader 4096
46# LUFA bootloader 4096
47# USBaspLoader 2048
48OPT_DEFS += -DBOOTLOADER_SIZE=4096
49
50
51# Build Options
52# change yes to no to disable
53#
54BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
55MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
56EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
57CONSOLE_ENABLE = yes # Console for debug(+400)
58COMMAND_ENABLE = yes # Commands for debug and configuration
59# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
60SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
61# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
62NKRO_ENABLE = no # USB Nkey Rollover
63BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
64MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
65UNICODE_ENABLE = no # Unicode
66BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
67AUDIO_ENABLE = no # Audio output on port C6
68FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
69
70CUSTOM_MATRIX = yes
71SRC += matrix.c \ No newline at end of file