aboutsummaryrefslogtreecommitdiff
path: root/keyboards/handwired/promethium
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/handwired/promethium')
-rw-r--r--keyboards/handwired/promethium/Makefile3
-rw-r--r--keyboards/handwired/promethium/config.h162
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/Makefile29
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/config.h17
-rwxr-xr-xkeyboards/handwired/promethium/keymaps/priyadi/flash.sh4
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/keymap.c841
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/readme.md0
-rw-r--r--keyboards/handwired/promethium/keymaps/readme.md22
-rw-r--r--keyboards/handwired/promethium/promethium.c6
-rw-r--r--keyboards/handwired/promethium/promethium.h101
-rw-r--r--keyboards/handwired/promethium/readme.md13
-rw-r--r--keyboards/handwired/promethium/rgbsps.c24
-rw-r--r--keyboards/handwired/promethium/rgbsps.h4
-rw-r--r--keyboards/handwired/promethium/rules.mk74
14 files changed, 1300 insertions, 0 deletions
diff --git a/keyboards/handwired/promethium/Makefile b/keyboards/handwired/promethium/Makefile
new file mode 100644
index 000000000..191c6bb66
--- /dev/null
+++ b/keyboards/handwired/promethium/Makefile
@@ -0,0 +1,3 @@
1ifndef MAKEFILE_INCLUDED
2 include ../../../Makefile
3endif \ No newline at end of file
diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h
new file mode 100644
index 000000000..473af67d3
--- /dev/null
+++ b/keyboards/handwired/promethium/config.h
@@ -0,0 +1,162 @@
1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com>
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 0x6660
26#define DEVICE_VER 0x0001
27#define MANUFACTURER Priyadi
28#define PRODUCT Promethium Keyboard
29#define DESCRIPTION Promethium Keyboard
30
31/* key matrix size */
32#define MATRIX_ROWS 8
33#define MATRIX_COLS 6
34
35/* default pin-out */
36#define MATRIX_COL_PINS { B6, B7, D6, C7, F6, F7 }
37#define MATRIX_ROW_PINS { D7, C6, D0, D1, F5, F4, F1, F0 }
38#define UNUSED_PINS
39
40/* COL2ROW or ROW2COL */
41#define DIODE_DIRECTION COL2ROW
42
43/* define if matrix has ghost */
44//#define MATRIX_HAS_GHOST
45
46/* number of backlight levels */
47#define BACKLIGHT_LEVELS 3
48
49/* Set 0 if debouncing isn't needed */
50#define DEBOUNCING_DELAY 5
51
52/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
53#define LOCKING_SUPPORT_ENABLE
54/* Locking resynchronize hack */
55#define LOCKING_RESYNC_ENABLE
56
57/* key combination for command */
58#define IS_COMMAND() ( \
59 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT) | MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RCTRL)) \
60)
61
62/*
63 * Feature disable options
64 * These options are also useful to firmware size reduction.
65 */
66
67/* disable debug print */
68//#define NO_DEBUG
69
70/* disable print */
71//#define NO_PRINT
72
73/* disable action features */
74//#define NO_ACTION_LAYER
75//#define NO_ACTION_TAPPING
76//#define NO_ACTION_ONESHOT
77//#define NO_ACTION_MACRO
78//#define NO_ACTION_FUNCTION
79
80/* PS/2 mouse */
81#ifdef PS2_USE_BUSYWAIT
82# define PS2_CLOCK_PORT PORTD
83# define PS2_CLOCK_PIN PIND
84# define PS2_CLOCK_DDR DDRD
85# define PS2_CLOCK_BIT 1
86# define PS2_DATA_PORT PORTD
87# define PS2_DATA_PIN PIND
88# define PS2_DATA_DDR DDRD
89# define PS2_DATA_BIT 2
90#endif
91
92/* PS/2 mouse interrupt version */
93#ifdef PS2_USE_INT
94/* uses INT1 for clock line(ATMega32U4) */
95#define PS2_CLOCK_PORT PORTD
96#define PS2_CLOCK_PIN PIND
97#define PS2_CLOCK_DDR DDRD
98#define PS2_CLOCK_BIT 3
99#define PS2_DATA_PORT PORTD
100#define PS2_DATA_PIN PIND
101#define PS2_DATA_DDR DDRD
102#define PS2_DATA_BIT 2
103
104#define PS2_INT_INIT() do { \
105 EICRA |= ((1<<ISC31) | \
106 (0<<ISC30)); \
107} while (0)
108#define PS2_INT_ON() do { \
109 EIMSK |= (1<<INT3); \
110} while (0)
111#define PS2_INT_OFF() do { \
112 EIMSK &= ~(1<<INT3); \
113} while (0)
114#define PS2_INT_VECT INT3_vect
115#endif
116
117/* PS/2 mouse USART version */
118#ifdef PS2_USE_USART
119/* XCK for clock line and RXD for data line */
120#define PS2_CLOCK_PORT PORTD
121#define PS2_CLOCK_PIN PIND
122#define PS2_CLOCK_DDR DDRD
123#define PS2_CLOCK_BIT 5
124#define PS2_DATA_PORT PORTD
125#define PS2_DATA_PIN PIND
126#define PS2_DATA_DDR DDRD
127#define PS2_DATA_BIT 2
128
129/* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
130/* set DDR of CLOCK as input to be slave */
131#define PS2_USART_INIT() do { \
132 PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); \
133 PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); \
134 UCSR1C = ((1 << UMSEL10) | \
135 (3 << UPM10) | \
136 (0 << USBS1) | \
137 (3 << UCSZ10) | \
138 (0 << UCPOL1)); \
139 UCSR1A = 0; \
140 UBRR1H = 0; \
141 UBRR1L = 0; \
142} while (0)
143#define PS2_USART_RX_INT_ON() do { \
144 UCSR1B = ((1 << RXCIE1) | \
145 (1 << RXEN1)); \
146} while (0)
147#define PS2_USART_RX_POLL_ON() do { \
148 UCSR1B = (1 << RXEN1); \
149} while (0)
150#define PS2_USART_OFF() do { \
151 UCSR1C = 0; \
152 UCSR1B &= ~((1 << RXEN1) | \
153 (1 << TXEN1)); \
154} while (0)
155#define PS2_USART_RX_READY (UCSR1A & (1<<RXC1))
156#define PS2_USART_RX_DATA UDR1
157#define PS2_USART_ERROR (UCSR1A & ((1<<FE1) | (1<<DOR1) | (1<<UPE1)))
158#define PS2_USART_RX_VECT USART1_RX_vect
159#endif
160
161
162#endif
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/Makefile b/keyboards/handwired/promethium/keymaps/priyadi/Makefile
new file mode 100644
index 000000000..46fdfa011
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/priyadi/Makefile
@@ -0,0 +1,29 @@
1
2
3# Build Options
4# change to "no" to disable the options, or define them in the Makefile in
5# the appropriate keymap folder that will get included automatically
6#
7BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
8MOUSEKEY_ENABLE = no # Mouse keys(+4700)
9EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
10CONSOLE_ENABLE = no # Console for debug(+400)
11COMMAND_ENABLE = no # Commands for debug and configuration
12NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
13BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
14MIDI_ENABLE = no # MIDI controls
15AUDIO_ENABLE = no # Audio output on port C6
16UNICODE_ENABLE = no # Unicode
17UNICODEMAP_ENABLE = yes
18BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
19RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
20PS2_MOUSE_ENABLE = yes
21PS2_USE_INT = yes
22
23# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
24SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
25
26ifndef QUANTUM_DIR
27 include ../../../../../Makefile
28endif
29
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/config.h b/keyboards/handwired/promethium/keymaps/priyadi/config.h
new file mode 100644
index 000000000..8b78c0dc4
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/priyadi/config.h
@@ -0,0 +1,17 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3
4#include "../../config.h"
5
6/* bootmagic salt key */
7#define BOOTMAGIC_KEY_SALT KC_ESC
8
9/* skip bootmagic and eeconfig */
10#define BOOTMAGIC_KEY_SKIP KC_SPACE
11
12#define PREVENT_STUCK_MODIFIERS
13
14#define RGB_DI_PIN B5
15#define RGBSPS_NUM 57
16
17#endif
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/flash.sh b/keyboards/handwired/promethium/keymaps/priyadi/flash.sh
new file mode 100755
index 000000000..14a3b4378
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/priyadi/flash.sh
@@ -0,0 +1,4 @@
1#!/bin/sh
2
3sleep 10
4avrdude -p m32u4 -P /dev/ttyACM0 -c avr109 -U flash:w:../../../../../.build/handwired_promethium_priyadi.hex
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
new file mode 100644
index 000000000..bf797a749
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
@@ -0,0 +1,841 @@
1// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
2// this is the style you want to emulate.
3
4#include "promethium.h"
5#include "action_layer.h"
6#ifdef AUDIO_ENABLE
7 #include "audio.h"
8 #include "musical_notes.h"
9#endif
10#include "eeconfig.h"
11#include "process_unicode.h"
12#include "quantum.h"
13#include "rgbsps.h"
14#include "ps2_mouse.h"
15#include "ps2.h"
16#define COUNT(x) (sizeof (x) / sizeof (*(x)))
17
18// #define RGBLED_NUM 5
19// struct cRGB led[RGBLED_NUM];
20
21
22extern keymap_config_t keymap_config;
23
24enum layers {
25 _QWERTY,
26 _COLEMAK,
27 _WORKMAN,
28 _PUNC,
29 _NUM,
30 _FUNC,
31 _EMOJI,
32 _GUI,
33};
34
35enum planck_keycodes {
36 // layouts
37 QWERTY = SAFE_RANGE,
38 COLEMAK,
39 WORKMAN,
40
41 // layer switchers
42 PUNC,
43 NUM,
44 FUNC,
45 EMOJI,
46 GUI,
47
48 // os switchers
49 LINUX,
50 WIN,
51 OSX,
52};
53
54// Fillers to make layering clearer
55
56#define _______ KC_TRNS
57#define XXXXXXX KC_NO
58
59// unicode map
60
61enum unicode_name {
62 GRIN, // grinning face 😊
63 TJOY, // tears of joy 😂
64 SMILE, // grining face with smiling eyes 😁
65 HEART, // heart ❤
66 EYERT, // smiling face with heart shaped eyes 😍
67 CRY, // crying face 😭
68 SMEYE, // smiling face with smiling eyes 😊
69 UNAMU, // unamused 😒
70 KISS, // kiss 😘
71 HART2, // two hearts 💕
72 WEARY, // weary 😩
73 OKHND, // ok hand sign 👌
74 PENSV, // pensive 😔
75 SMIRK, // smirk 😏
76 RECYC, // recycle ♻
77 WINK, // wink 😉
78 THMUP, // thumb up 👍
79 THMDN, // thumb down 👎
80 PRAY, // pray 🙏
81 PHEW, // relieved 😌
82 MUSIC, // musical notes
83 FLUSH, // flushed 😳
84 CELEB, // celebration 🙌
85 CRY2, // crying face 😢
86 COOL, // smile with sunglasses 😎
87 NOEVS, // see no evil
88 NOEVH, // hear no evil
89 NOEVK, // speak no evil
90 POO, // pile of poo
91 EYES, // eyes
92 VIC, // victory hand
93 BHART, // broken heart
94 SLEEP, // sleeping face
95 SMIL2, // smiling face with open mouth & sweat
96 HUNRD, // 100
97 CONFU, // confused
98 TONGU, // face with tongue & winking eye
99 DISAP, // disappointed
100 YUMMY, // face savoring delicious food
101 CLAP, // hand clapping
102 FEAR, // face screaming in fear
103 HORNS, // smiling face with horns
104 HALO, // smiling face with halo
105 BYE, // waving hand
106 SUN, // sun
107 MOON, // moon
108 SKULL, // skull
109};
110
111const uint32_t PROGMEM unicode_map[] = {
112 [GRIN] = 0x1F600,
113 [TJOY] = 0x1F602,
114 [SMILE] = 0x1F601,
115 [HEART] = 0x2764,
116 [EYERT] = 0x1f60d,
117 [CRY] = 0x1f62d,
118 [SMEYE] = 0x1F60A,
119 [UNAMU] = 0x1F612,
120 [KISS] = 0x1F618,
121 [HART2] = 0x1F495,
122 [WEARY] = 0x1F629,
123 [OKHND] = 0x1F44C,
124 [PENSV] = 0x1F614,
125 [SMIRK] = 0x1F60F,
126 [RECYC] = 0x267B,
127 [WINK] = 0x1F609,
128 [THMUP] = 0x1F44D,
129 [THMDN] = 0x1F44E,
130 [PRAY] = 0x1F64F,
131 [PHEW] = 0x1F60C,
132 [MUSIC] = 0x1F3B6,
133 [FLUSH] = 0x1F633,
134 [CELEB] = 0x1F64C,
135 [CRY2] = 0x1F622,
136 [COOL] = 0x1F60E,
137 [NOEVS] = 0x1F648,
138 [NOEVH] = 0x1F649,
139 [NOEVK] = 0x1F64A,
140 [POO] = 0x1F4A9,
141 [EYES] = 0x1F440,
142 [VIC] = 0x270C,
143 [BHART] = 0x1F494,
144 [SLEEP] = 0x1F634,
145 [SMIL2] = 0x1F605,
146 [HUNRD] = 0x1F4AF,
147 [CONFU] = 0x1F615,
148 [TONGU] = 0x1F61C,
149 [DISAP] = 0x1F61E,
150 [YUMMY] = 0x1F60B,
151 [CLAP] = 0x1F44F,
152 [FEAR] = 0x1F631,
153 [HORNS] = 0x1F608,
154 [HALO] = 0x1F607,
155 [BYE] = 0x1F44B,
156 [SUN] = 0x2600,
157 [MOON] = 0x1F314,
158 [SKULL] = 0x1F480,
159};
160
161
162// hybrid shift - =
163// #undef KC_LSFT
164// #define KC_LSFT MT(MOD_LSFT, KC_MINS)
165// #undef KC_RSFT
166// #define KC_RSFT MT(MOD_LSFT, KC_EQL)
167
168
169// hybrid right-gui & scroll lock (mapped to Compose in OS)
170#undef KC_RCTL
171#define KC_RCTL MT(MOD_LCTL, KC_SLCK)
172
173// RGBSPS
174
175const uint8_t PROGMEM LED_ALNUM[] = {
176 LED_Z,
177 LED_A,
178 LED_Q,
179 LED_W,
180 LED_S,
181 LED_X,
182 LED_C,
183 LED_D,
184 LED_E,
185 LED_R,
186 LED_F,
187 LED_V,
188 LED_B,
189 LED_G,
190 LED_T,
191 LED_N,
192 LED_HH,
193 LED_Y,
194 LED_U,
195 LED_J,
196 LED_M,
197 LED_COMM,
198 LED_K,
199 LED_I,
200 LED_O,
201 LED_L,
202 LED_DOT,
203 LED_SLSH,
204 LED_SCLN,
205 LED_P,
206 LED_LSPC,
207 LED_RSPC
208};
209
210const uint8_t PROGMEM LED_MODS[] = {
211 LED_TAB,
212 LED_ESC,
213 LED_LSFT,
214 LED_LCTL,
215 LED_LGUI,
216 LED_LALT,
217 LED_RALT,
218 LED_RGUI,
219 LED_BKSP,
220 LED_ENT,
221 LED_RSFT,
222 LED_RCTL
223};
224
225const uint8_t PROGMEM LED_FN[] = {
226 LED_PUNC,
227 LED_NUM,
228 LED_FUNC,
229 LED_EMOJI
230};
231
232const uint8_t PROGMEM LED_INDICATORS[] = {
233 LED_IND_EMOJI,
234 LED_IND_NUM,
235 LED_IND_FUNC,
236 LED_IND_BATTERY,
237 LED_IND_USB,
238 LED_IND_BLUETOOTH,
239};
240
241const uint8_t PROGMEM LED_TRACKPOINT[] = {
242 LED_TRACKPOINT1,
243 LED_TRACKPOINT2,
244 LED_TRACKPOINT3,
245};
246
247void led_reset(void) {
248 for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
249 rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 15, 6, 0);
250 }
251
252 for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
253 rgbsps_set(pgm_read_byte(&LED_MODS[i]), 15, 0, 0);
254 }
255
256 for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
257 rgbsps_set(pgm_read_byte(&LED_FN[i]), 15, 15, 15);
258 }
259}
260
261void led_layer_normal(void) {
262 rgbsps_set(LED_IND_FUNC, 0, 0, 0);
263 rgbsps_set(LED_IND_NUM, 0, 0, 0);
264 rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
265
266 led_reset();
267
268 rgbsps_send();
269}
270
271void led_layer_func(void) {
272 rgbsps_set(LED_IND_FUNC, 0, 15, 0);
273 rgbsps_set(LED_IND_NUM, 0, 0, 0);
274 rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
275
276 led_reset();
277
278 for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
279 rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0);
280 }
281
282 rgbsps_set(LED_I, 15, 0, 15);
283 rgbsps_set(LED_J, 15, 0, 15);
284 rgbsps_set(LED_K, 15, 0, 15);
285 rgbsps_set(LED_L, 15, 0, 15);
286
287 rgbsps_set(LED_U, 15, 0, 0);
288 rgbsps_set(LED_O, 15, 0, 0);
289 rgbsps_set(LED_COMM, 15, 0, 0);
290 rgbsps_set(LED_DOT, 15, 0, 0);
291 rgbsps_set(LED_SCLN, 15, 0, 0);
292 rgbsps_set(LED_P, 15, 0, 0);
293
294 rgbsps_set(LED_Q, 0, 15, 0);
295 rgbsps_set(LED_W, 0, 15, 0);
296 rgbsps_set(LED_E, 0, 15, 0);
297 rgbsps_set(LED_R, 0, 15, 0);
298 rgbsps_set(LED_A, 0, 15, 0);
299 rgbsps_set(LED_S, 0, 15, 0);
300 rgbsps_set(LED_D, 0, 15, 0);
301 rgbsps_set(LED_F, 0, 15, 0);
302 rgbsps_set(LED_Z, 0, 15, 0);
303 rgbsps_set(LED_X, 0, 15, 0);
304 rgbsps_set(LED_C, 0, 15, 0);
305 rgbsps_set(LED_V, 0, 15, 0);
306
307 rgbsps_send();
308}
309
310void led_layer_punc(void) {
311 rgbsps_set(LED_IND_FUNC, 0, 15, 0);
312 rgbsps_set(LED_IND_NUM, 0, 0, 15);
313 rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
314
315 led_reset();
316
317 rgbsps_send();
318}
319
320void led_layer_num(void) {
321 rgbsps_set(LED_IND_FUNC, 0, 0, 0);
322 rgbsps_set(LED_IND_NUM, 0, 0, 15);
323 rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
324
325 led_reset();
326
327 for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
328 rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0);
329 }
330
331 rgbsps_set(LED_U, 0, 5, 15);
332 rgbsps_set(LED_I, 0, 5, 15);
333 rgbsps_set(LED_O, 0, 5, 15);
334 rgbsps_set(LED_J, 0, 5, 15);
335 rgbsps_set(LED_K, 0, 5, 15);
336 rgbsps_set(LED_L, 0, 5, 15);
337 rgbsps_set(LED_M, 0, 5, 15);
338 rgbsps_set(LED_COMM, 0, 5, 15);
339 rgbsps_set(LED_DOT, 0, 5, 15);
340 rgbsps_set(LED_FUNC, 0, 5, 15);
341
342 rgbsps_set(LED_EMOJI, 0, 10, 15);
343 rgbsps_set(LED_RALT, 0, 10, 15);
344
345 rgbsps_set(LED_Q, 0, 10, 15);
346 rgbsps_set(LED_W, 0, 10, 15);
347 rgbsps_set(LED_E, 0, 10, 15);
348 rgbsps_set(LED_R, 0, 10, 15);
349 rgbsps_set(LED_T, 0, 10, 15);
350 rgbsps_set(LED_Y, 0, 10, 15);
351 rgbsps_set(LED_P, 0, 10, 15);
352
353 rgbsps_set(LED_A, 0, 15, 15);
354 rgbsps_set(LED_S, 0, 15, 15);
355 rgbsps_set(LED_D, 0, 15, 15);
356 rgbsps_set(LED_F, 0, 15, 15);
357 rgbsps_set(LED_Z, 0, 15, 15);
358 rgbsps_set(LED_X, 0, 15, 15);
359 rgbsps_set(LED_C, 0, 15, 15);
360 rgbsps_set(LED_V, 0, 15, 15);
361
362 rgbsps_send();
363}
364
365void led_layer_emoji(void) {
366 for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
367 rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 15, 15, 0);
368 }
369 for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
370 rgbsps_set(pgm_read_byte(&LED_MODS[i]), 15, 15, 0);
371 }
372 for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
373 rgbsps_set(pgm_read_byte(&LED_FN[i]), 15, 15, 0);
374 }
375
376 rgbsps_set(LED_IND_FUNC, 0, 0, 0);
377 rgbsps_set(LED_IND_NUM, 0, 0, 0);
378 rgbsps_set(LED_IND_EMOJI, 15, 15, 0);
379
380 rgbsps_set(LED_PUNC, 15, 15, 15);
381 rgbsps_set(LED_EMOJI, 15, 15, 15);
382
383 rgbsps_send();
384}
385
386void led_layer_gui(void) {
387 rgbsps_set(LED_IND_FUNC, 15, 10, 15);
388 rgbsps_set(LED_IND_NUM, 15, 10, 15);
389 rgbsps_set(LED_IND_EMOJI, 15, 10, 15);
390 rgbsps_send();
391}
392
393void led_init(void) {
394 // turn off all
395 rgbsps_turnoff();
396
397 // set trackpoint color
398 rgbsps_set(LED_TRACKPOINT1, 15, 0, 0);
399 rgbsps_set(LED_TRACKPOINT2, 0, 0, 15);
400 rgbsps_set(LED_TRACKPOINT3, 15, 0, 0);
401
402 // // hardcode indicator for now
403 rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15);
404 rgbsps_set(LED_IND_USB, 15, 15, 15);
405 rgbsps_set(LED_IND_BATTERY, 0, 15, 0);
406
407 led_layer_normal();
408}
409
410
411// keymaps
412
413const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
414
415/* Qwerty
416 * ,-----------------------------------------------------------------------------------.
417 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
418 * |------+------+------+------+------+-------------+------+------+------+------+------|
419 * | Esc | A | S | D | F | G | H | J | K | L | ; |Enter |
420 * |------+------+------+------+------+------|------+------+------+------+------+------|
421 * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
422 * |------+------+------+------+------+------+------+------+------+------+------+------|
423 * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
424 * `-----------------------------------------------------------------------------------'
425 */
426[_QWERTY] = KEYMAP(
427 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
428 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT ,
429 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
430 KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL
431),
432
433/* Colemak
434 * ,-----------------------------------------------------------------------------------.
435 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
436 * |------+------+------+------+------+-------------+------+------+------+------+------|
437 * | Esc | A | R | S | T | D | H | N | E | I | O |Enter |
438 * |------+------+------+------+------+------|------+------+------+------+------+------|
439 * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift |
440 * |------+------+------+------+------+------+------+------+------+------+------+------|
441 * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
442 * `-----------------------------------------------------------------------------------'
443 */
444[_COLEMAK] = KEYMAP(
445 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
446 KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT ,
447 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
448 KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL
449),
450
451/* Workman
452 * ,-----------------------------------------------------------------------------------.
453 * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp |
454 * |------+------+------+------+------+-------------+------+------+------+------+------|
455 * | Esc | A | S | H | T | G | Y | N | E | O | I |Enter |
456 * |------+------+------+------+------+------|------+------+------+------+------+------|
457 * | Shift| Z | X | M | C | V | K | K | , | . | / |Shift |
458 * |------+------+------+------+------+------+------+------+------+------+------+------|
459 * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
460 * `-----------------------------------------------------------------------------------'
461 */
462[_WORKMAN] = KEYMAP(
463 KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSPC,
464 KC_ESC, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_ENT ,
465 KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
466 KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL
467),
468
469/* Punc
470 * ,-----------------------------------------------------------------------------------.
471 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` |
472 * |------+------+------+------+------+-------------+------+------+------+------+------|
473 * | | | \ | - | = | < | > | ( | ) | ' | | |
474 * |------+------+------+------+------+------|------+------+------+------+------+------|
475 * | | | | | _ | + | { | } | [ | ] | " | | |
476 * |------+------+------+------+------+------+------+------+------+------+------+------|
477 * | | | | | | | | | | | |
478 * `-----------------------------------------------------------------------------------'
479 */
480[_PUNC] = KEYMAP(
481 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV ,
482 XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL, KC_LABK, KC_RABK, KC_LPRN, KC_RPRN, KC_QUOT, XXXXXXX, XXXXXXX,
483 XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_DQUO, XXXXXXX, XXXXXXX,
484 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
485),
486
487/* Num
488 * ,-----------------------------------------------------------------------------------.
489 * | ^ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
490 * |------+------+------+------+------+-------------+------+------+------+------+------|
491 * | Esc | @ | A | B | C | ( | ) | 4 | 5 | 6 | : |Enter |
492 * |------+------+------+------+------+------|------+------+------+------+------+------|
493 * | & | # | D | E | F | [ | ] | 1 | 2 | 3 | / | * |
494 * |------+------+------+------+------+------+------+------+------+------+------+------|
495 * | | | | x | | | 0 | , | . | + | - |
496 * `-----------------------------------------------------------------------------------'
497 */
498[_NUM] = KEYMAP(
499 KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
500 KC_ESC, KC_AT, S(KC_A), S(KC_B), S(KC_C), KC_LPRN, KC_RPRN, KC_4, KC_5, KC_6, KC_COLN, KC_ENT,
501 KC_AMPR, KC_HASH, S(KC_D), S(KC_E), S(KC_F), KC_LBRC, KC_RBRC, KC_1, KC_2, KC_3, KC_SLSH, KC_ASTR,
502 _______, _______, _______, KC_X, _______, KC_SPC, KC_SPC, KC_0, KC_COMM, KC_DOT, KC_PLUS, KC_MINS
503),
504
505/* Func
506 * ,-----------------------------------------------------------------------------------.
507 * | | F1 | F2 | F3 | F4 | | | PgUp | Up | PgDn | PgUp | Del |
508 * |------+------+------+------+------+-------------+------+------+------+------+------|
509 * | | F5 | F6 | F7 | F8 |PrtSc | | Left | Down | Right| PgDn | Ins |
510 * |------+------+------+------+------+------|------+------+------+------+------+------|
511 * | | F9 | F10 | F11 | F12 | | | | Home | End | | |
512 * |------+------+------+------+------+------+------+------+------+------+------+------|
513 * | | | | | | | | | | | |
514 * `-----------------------------------------------------------------------------------'
515 */
516[_FUNC] = KEYMAP(
517 XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL,
518 XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS,
519 _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______,
520 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
521),
522
523/* Emoji
524 * ,-----------------------------------------------------------------------------------.
525 * | | | | | | | | | | | | |
526 * |------+------+------+------+------+-------------+------+------+------+------+------|
527 * | | | | | | | | | | | | |
528 * |------+------+------+------+------+------+------+------+------+------+------+------|
529 * | | | | | | | | | | | | |
530 * |------+------+------+------+------+------+------+------+------+------+------+------|
531 * | | | | | | | | | | | | |
532 * `-----------------------------------------------------------------------------------'
533 */
534[_EMOJI] = KEYMAP(
535 X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW),
536 X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS),
537 X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH),
538 X(POO), X(EYES),X(HUNRD), _______,X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK)
539),
540
541/* GUI
542 * ,-----------------------------------------------------------------------------------.
543 * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | |
544 * |------+------+------+------+------+-------------+------+------+------+------+------|
545 * |Linux | | Vol- | Mute | Vol+ | | | D- | | D+ | |Qwerty|
546 * |------+------+------+------+------+------+------+------+------+------+------+------|
547 * | Win | | Prev | Play | Next | | | | | | |Colmak|
548 * |------+------+------+------+------+------+------+------+------+------+------+------|
549 * | OSX | | | | | BL- | BL+ | | | | |Workmn|
550 * `-----------------------------------------------------------------------------------'
551 */
552[_GUI] = KEYMAP(
553 _______, LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5),LGUI(KC_6),LGUI(KC_7),LGUI(KC_8),LGUI(KC_9),LGUI(KC_0), _______,
554 LINUX, _______, KC_VOLD, KC_MUTE, KC_VOLU,_______,_______,KC_WWW_BACK,_______,KC_WWW_FORWARD,_______, QWERTY,
555 WIN, _______, KC_MPRV, KC_MPLY, KC_MNXT, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, COLEMAK,
556 OSX, _______, _______, _______, _______, BL_DEC, BL_INC, _______, _______, RGB_VAI, RGB_VAD, WORKMAN
557),
558
559};
560
561#ifdef AUDIO_ENABLE
562float tone_startup[][2] = SONG(STARTUP_SOUND);
563float tone_qwerty[][2] = SONG(QWERTY_SOUND);
564float tone_colemak[][2] = SONG(COLEMAK_SOUND);
565float tone_workman[][2] = SONG(DVORAK_SOUND);
566float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
567float tone_linux[][2] = SONG(CAPS_LOCK_ON_SOUND);
568float tone_windows[][2] = SONG(SCROLL_LOCK_ON_SOUND);
569float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND);
570float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2));
571#endif
572
573void persistant_default_layer_set(uint16_t default_layer) {
574 eeconfig_update_default_layer(default_layer);
575 default_layer_set(default_layer);
576}
577
578bool process_record_user(uint16_t keycode, keyrecord_t *record) {
579 #ifdef AUDIO_ENABLE
580 // faux clicky
581 if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0);
582 #endif
583
584 switch (keycode) {
585 case QWERTY:
586 if (record->event.pressed) {
587 #ifdef AUDIO_ENABLE
588 PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
589 #endif
590 persistant_default_layer_set(1UL<<_QWERTY);
591 }
592 return false;
593 break;
594 case COLEMAK:
595 if (record->event.pressed) {
596 #ifdef AUDIO_ENABLE
597 PLAY_NOTE_ARRAY(tone_colemak, false, 0);
598 #endif
599 persistant_default_layer_set(1UL<<_COLEMAK);
600 }
601 return false;
602 break;
603 case WORKMAN:
604 if (record->event.pressed) {
605 #ifdef AUDIO_ENABLE
606 PLAY_NOTE_ARRAY(tone_workman, false, 0);
607 #endif
608 persistant_default_layer_set(1UL<<_WORKMAN);
609 }
610 return false;
611 break;
612
613
614
615 case PUNC:
616 if (record->event.pressed) {
617 layer_on(_PUNC);
618 update_tri_layer(_PUNC, _EMOJI, _GUI);
619 if (IS_LAYER_ON(_GUI)) {
620 led_layer_gui();
621 } else {
622 led_layer_punc();;
623 }
624 } else {
625 layer_off(_PUNC);
626 update_tri_layer(_PUNC, _EMOJI, _GUI);
627 if (IS_LAYER_ON(_EMOJI)) {
628 led_layer_emoji();
629 } else {
630 led_layer_normal();;
631 }
632 }
633 return false;
634 break;
635 case EMOJI:
636 if (record->event.pressed) {
637 layer_on(_EMOJI);
638 update_tri_layer(_PUNC, _EMOJI, _GUI);
639 if (IS_LAYER_ON(_GUI)) {
640 led_layer_gui();
641 } else {
642 led_layer_emoji();;
643 }
644 } else {
645 layer_off(_EMOJI);
646 update_tri_layer(_PUNC, _EMOJI, _GUI);
647 if (IS_LAYER_ON(_PUNC)) {
648 led_layer_punc();
649 } else {
650 led_layer_normal();;
651 }
652 }
653 return false;
654 break;
655 case NUM:
656 if (record->event.pressed) {
657 layer_on(_NUM);
658 led_layer_num();
659 } else {
660 layer_off(_NUM);
661 led_layer_normal();
662 }
663 return false;
664 break;
665 case FUNC:
666 if (record->event.pressed) {
667 layer_on(_FUNC);
668 led_layer_func();
669 } else {
670 layer_off(_FUNC);
671 led_layer_normal();
672 }
673 return false;
674 break;
675
676
677 case LINUX:
678 set_unicode_input_mode(UC_LNX);
679 #ifdef AUDIO_ENABLE
680 PLAY_NOTE_ARRAY(tone_linux, false, 0);
681 #endif
682 return false;
683 break;
684 case WIN:
685 set_unicode_input_mode(UC_WINC);
686 #ifdef AUDIO_ENABLE
687 PLAY_NOTE_ARRAY(tone_windows, false, 0);
688 #endif
689 return false;
690 break;
691 case OSX:
692 set_unicode_input_mode(UC_OSX);
693 #ifdef AUDIO_ENABLE
694 PLAY_NOTE_ARRAY(tone_osx, false, 0);
695 #endif
696 return false;
697 break;
698 }
699 return true;
700}
701
702void matrix_init_user(void) {
703 #ifdef AUDIO_ENABLE
704 startup_user();
705 #endif
706 set_unicode_input_mode(UC_LNX);
707 led_init();
708}
709
710// void init_rgblight(void) {
711// for (uint8_t i = 0; i < RGBLED_NUM; i++) {
712// led[i].r = 255;
713// led[i].g = 85;
714// led[i].b = 0;
715// }
716// ws2812_setleds(led, RGBLED_NUM);
717// }
718
719
720#ifdef AUDIO_ENABLE
721
722void startup_user()
723{
724 _delay_ms(20); // gets rid of tick
725 PLAY_NOTE_ARRAY(tone_startup, false, 0);
726}
727
728void shutdown_user()
729{
730 PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
731 _delay_ms(150);
732 stop_all_notes();
733}
734
735#endif
736
737
738void ps2_mouse_init_user() {
739 // set TrackPoint sensitivity
740 PS2_MOUSE_SEND(0xE2, "set trackpoint sensitivity: 0xE2");
741 PS2_MOUSE_SEND(0x81, "set trackpoint sensitivity: 0x81");
742 PS2_MOUSE_SEND(0x4A, "set trackpoint sensitivity: 0x4A");
743 PS2_MOUSE_SEND(0x60, "set trackpoint sensitivity: 0x60");
744
745 // set TrackPoint speed
746 // (transfer function upper plateau speed)
747 PS2_MOUSE_SEND(0xE2, "set trackpoint speed: 0xE2");
748 PS2_MOUSE_SEND(0x81, "set trackpoint speed: 0x81");
749 PS2_MOUSE_SEND(0x60, "set trackpoint speed: 0x60");
750 PS2_MOUSE_SEND(0x90, "set trackpoint speed: 0x90");
751
752 // set TrackPoint Negative Inertia factor
753 PS2_MOUSE_SEND(0xE2, "set negative inertia factor: 0xE2");
754 PS2_MOUSE_SEND(0x81, "set negative inertia factor: 0x81");
755 PS2_MOUSE_SEND(0x4D, "set negative inertia factor: 0x4D");
756 PS2_MOUSE_SEND(0x03, "set negative inertia factor: 0x03");
757
758 // disable up threshold (click)
759 PS2_MOUSE_SEND(0xE2, "set disable up threshold: 0xE2");
760 PS2_MOUSE_SEND(0x47, "set disable up threshold: 0x47");
761 PS2_MOUSE_SEND(0x2C, "set disable up threshold: 0x2C");
762 PS2_MOUSE_SEND(0x01, "set disable up threshold: 0x01");
763
764 // enable TrackPoint Press to Select (PtS)
765 // print("ps2_mouse_init: send 0xE2: ");
766 // rcv = ps2_host_send(0xE2);
767 // phex(rcv); phex(ps2_error); print("\n");
768 // print("ps2_mouse_init: send 0x47: ");
769 // rcv = ps2_host_send(0x47);
770 // phex(rcv); phex(ps2_error); print("\n");
771 // print("ps2_mouse_init: send 0x2C: ");
772 // rcv = ps2_host_send(0x2C);
773 // phex(rcv); phex(ps2_error); print("\n");
774 // print("ps2_mouse_init: send 0x00: ");
775 // rcv = ps2_host_send(0x00);
776 // phex(rcv); phex(ps2_error); print("\n");
777
778 // set TrackPoint Press to Select threshold
779 // print("ps2_mouse_init: send 0xE2: ");
780 // rcv = ps2_host_send(0xE2);
781 // phex(rcv); phex(ps2_error); print("\n");
782 // print("ps2_mouse_init: send 0x81: ");
783 // rcv = ps2_host_send(0x81);
784 // phex(rcv); phex(ps2_error); print("\n");
785 // print("ps2_mouse_init: send 0x5C: ");
786 // rcv = ps2_host_send(0x5C);
787 // phex(rcv); phex(ps2_error); print("\n");
788 // // default PtS threshold is 0x08
789 // print("ps2_mouse_init: send 0x04: ");
790 // rcv = ps2_host_send(0x04);
791 // phex(rcv); phex(ps2_error); print("\n");
792
793 // set TrackPoint Press to Select time constant (zTc)
794 // print("ps2_mouse_init: send 0xE2: ");
795 // rcv = ps2_host_send(0xE2);
796 // phex(rcv); phex(ps2_error); print("\n");
797 // print("ps2_mouse_init: send 0x81: ");
798 // rcv = ps2_host_send(0x81);
799 // phex(rcv); phex(ps2_error); print("\n");
800 // print("ps2_mouse_init: send 0x5E: ");
801 // rcv = ps2_host_send(0x5E);
802 // phex(rcv); phex(ps2_error); print("\n");
803 // // default zTc is 0x26
804 // print("ps2_mouse_init: send 0x45: ");
805 // rcv = ps2_host_send(0x45);
806 // phex(rcv); phex(ps2_error); print("\n");
807
808 /*
809 // set TrackPoint Press to Select Jenks Curvature (jkcur)
810 print("ps2_mouse_init: send 0xE2: ");
811 rcv = ps2_host_send(0xE2);
812 phex(rcv); phex(ps2_error); print("\n");
813 print("ps2_mouse_init: send 0x81: ");
814 rcv = ps2_host_send(0x81);
815 phex(rcv); phex(ps2_error); print("\n");
816 print("ps2_mouse_init: send 0x5D: ");
817 rcv = ps2_host_send(0x5D);
818 phex(rcv); phex(ps2_error); print("\n");
819 // default jkcur is 0x87
820 print("ps2_mouse_init: send 0x87: ");
821 rcv = ps2_host_send(0x87);
822 phex(rcv); phex(ps2_error); print("\n");
823 */
824
825 /*
826 // set TrackPoint Minimum Drag (mindrag)
827 print("ps2_mouse_init: send 0xE2: ");
828 rcv = ps2_host_send(0xE2);
829 phex(rcv); phex(ps2_error); print("\n");
830 print("ps2_mouse_init: send 0x81: ");
831 rcv = ps2_host_send(0x81);
832 phex(rcv); phex(ps2_error); print("\n");
833 print("ps2_mouse_init: send 0x59: ");
834 rcv = ps2_host_send(0x59);
835 phex(rcv); phex(ps2_error); print("\n");
836 // default PtS mindrag is 0x14
837 print("ps2_mouse_init: send 0x14: ");
838 rcv = ps2_host_send(0x14);
839 phex(rcv); phex(ps2_error); print("\n");
840 */
841} \ No newline at end of file
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/readme.md b/keyboards/handwired/promethium/keymaps/priyadi/readme.md
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/priyadi/readme.md
diff --git a/keyboards/handwired/promethium/keymaps/readme.md b/keyboards/handwired/promethium/keymaps/readme.md
new file mode 100644
index 000000000..527691389
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/readme.md
@@ -0,0 +1,22 @@
1# How to add your own keymap
2
3Folders can be named however you'd like (will be approved upon merging), or should follow the format with a preceding `_`:
4
5 _[ISO 3166-1 alpha-2 code*]_[layout variant]_[layout name/author]
6
7\* See full list: https://en.wikipedia.org/wiki/ISO_3166-1#Officially_assigned_code_elements
8
9and contain the following files:
10
11* `keymap.c`
12* `readme.md` *recommended*
13* `config.h` *optional*, found automatically when compiling
14* `Makefile` *optional*, found automatically when compling
15
16When adding your keymap to this list, keep it organised alphabetically (select list, edit->sort lines), and use this format:
17
18 * **folder_name** description
19
20# List of Promethium keymaps
21
22
diff --git a/keyboards/handwired/promethium/promethium.c b/keyboards/handwired/promethium/promethium.c
new file mode 100644
index 000000000..a0035cce1
--- /dev/null
+++ b/keyboards/handwired/promethium/promethium.c
@@ -0,0 +1,6 @@
1#include "promethium.h"
2
3void matrix_init_kb(void) {
4
5 matrix_init_user();
6} \ No newline at end of file
diff --git a/keyboards/handwired/promethium/promethium.h b/keyboards/handwired/promethium/promethium.h
new file mode 100644
index 000000000..662eeab99
--- /dev/null
+++ b/keyboards/handwired/promethium/promethium.h
@@ -0,0 +1,101 @@
1#ifndef PROMETHIUM_H
2#define PROMETHIUM_H
3
4#include "quantum.h"
5
6#define PS2_INIT_DELAY 2000
7
8#define KEYMAP( \
9 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
10 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
11 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
12 k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c \
13) \
14{ \
15 {k11, k12, k13, k14, k15, k16}, \
16 {k21, k22, k23, k24, k25, k26}, \
17 {k31, k32, k33, k34, k35, k36}, \
18 {k41, k42, k43, k44, k45, k46}, \
19 {k17, k18, k19, k1a, k1b, k1c}, \
20 {k27, k28, k29, k2a, k2b, k2c}, \
21 {k37, k38, k39, k3a, k3b, k3c}, \
22 {k47, k48, k49, k4a, k4b, k4c} \
23}
24
25enum led_sequence {
26 LED_IND_BLUETOOTH,
27 LED_IND_USB,
28 LED_IND_BATTERY,
29
30 LED_IND_FUNC,
31 LED_IND_NUM,
32 LED_IND_EMOJI,
33
34 LED_BKSP,
35 LED_ENT,
36 LED_RSFT,
37 LED_RCTL,
38
39 LED_RGUI,
40 LED_SLSH,
41 LED_SCLN,
42 LED_P,
43
44 LED_O,
45 LED_L,
46 LED_DOT,
47 LED_RALT,
48
49 LED_EMOJI,
50 LED_COMM,
51 LED_K,
52 LED_I,
53
54 LED_U,
55 LED_J,
56 LED_M,
57 LED_FUNC,
58
59 LED_RSPC,
60 LED_N,
61 LED_HH,
62 LED_Y,
63
64 LED_TRACKPOINT3,
65 LED_TRACKPOINT2,
66 LED_TRACKPOINT1,
67
68 LED_LSPC,
69 LED_B,
70 LED_G,
71 LED_T,
72
73 LED_R,
74 LED_F,
75 LED_V,
76 LED_NUM,
77
78 LED_PUNC,
79 LED_C,
80 LED_D,
81 LED_E,
82
83 LED_W,
84 LED_S,
85 LED_X,
86 LED_LALT,
87
88 LED_LGUI,
89 LED_Z,
90 LED_A,
91 LED_Q,
92
93 LED_TAB,
94 LED_ESC,
95 LED_LSFT,
96 LED_LCTL,
97};
98
99#endif
100
101
diff --git a/keyboards/handwired/promethium/readme.md b/keyboards/handwired/promethium/readme.md
new file mode 100644
index 000000000..e63d2f1ad
--- /dev/null
+++ b/keyboards/handwired/promethium/readme.md
@@ -0,0 +1,13 @@
1Promethium Keyboard Firmware
2============================
3A handwired Planck based keyboard using the Adafruit Feather 32u4 Bluefruit LE controller.
4
5Features:
6
7* Single piece split form factor
8* Columnar stagger
9* Trackpoint
10* Bluetooth LE *TBD*
11* Battery
12* Per switch RGB LED
13* Proximity sensor for energy conservation *TBD* \ No newline at end of file
diff --git a/keyboards/handwired/promethium/rgbsps.c b/keyboards/handwired/promethium/rgbsps.c
new file mode 100644
index 000000000..ea922ec3f
--- /dev/null
+++ b/keyboards/handwired/promethium/rgbsps.c
@@ -0,0 +1,24 @@
1#include "light_ws2812.h"
2#include "rgbsps.h"
3
4struct cRGB led[RGBSPS_NUM];
5
6void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b) {
7 led[index].r = r;
8 led[index].g = g;
9 led[index].b = b;
10}
11
12void rgbsps_setall(uint8_t r, uint8_t g, uint8_t b) {
13 for (uint16_t i = 0; i < RGBSPS_NUM; i++) {
14 rgbsps_set(i, r, g, b);
15 }
16}
17
18void rgbsps_turnoff(void) {
19 rgbsps_setall(0, 0, 0);
20}
21
22void rgbsps_send(void) {
23 ws2812_setleds(led, RGBSPS_NUM);
24} \ No newline at end of file
diff --git a/keyboards/handwired/promethium/rgbsps.h b/keyboards/handwired/promethium/rgbsps.h
new file mode 100644
index 000000000..6da197f75
--- /dev/null
+++ b/keyboards/handwired/promethium/rgbsps.h
@@ -0,0 +1,4 @@
1void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b);
2void rgbsps_setall(uint8_t r, uint8_t g, uint8_t b);
3void rgbsps_turnoff(void);
4void rgbsps_send(void); \ No newline at end of file
diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk
new file mode 100644
index 000000000..891f523c2
--- /dev/null
+++ b/keyboards/handwired/promethium/rules.mk
@@ -0,0 +1,74 @@
1
2# MCU name
3#MCU = at90usb1287
4MCU = atmega32u4
5
6# Processor frequency.
7# This will define a symbol, F_CPU, in all source code files equal to the
8# processor frequency in Hz. You can then use this symbol in your source code to
9# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
10# automatically to create a 32-bit value in your source code.
11#
12# This will be an integer division of F_USB below, as it is sourced by
13# F_USB after it has run through any CPU prescalers. Note that this value
14# does not *change* the processor frequency - it should merely be updated to
15# reflect the processor speed set externally so that the code can use accurate
16# software delays.
17F_CPU = 8000000
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# Build Options
51# change to "no" to disable the options, or define them in the Makefile in
52# the appropriate keymap folder that will get included automatically
53#
54BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
55MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
56EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
57CONSOLE_ENABLE ?= no # Console for debug(+400)
58COMMAND_ENABLE ?= no # Commands for debug and configuration
59NKRO_ENABLE ?= yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
60BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality
61MIDI_ENABLE ?= no # MIDI controls
62AUDIO_ENABLE ?= no # Audio output on port C6
63UNICODE_ENABLE ?= no # Unicode
64UNICODEMAP_ENABLE ?= yes
65BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
66RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
67PS2_MOUSE_ENABLE ?= yes
68PS2_USE_INT ?= yes
69
70# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
71SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
72
73SRC += $(QUANTUM_DIR)/light_ws2812.c
74SRC += rgbsps.c \ No newline at end of file