]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
[Keyboard] added custom keyboard (#6141)
authorjoelproko <51485167+joelproko@users.noreply.github.com>
Tue, 18 Jun 2019 18:34:36 +0000 (20:34 +0200)
committerDrashna Jaelre <drashna@live.com>
Tue, 18 Jun 2019 18:34:36 +0000 (11:34 -0700)
* added keyboard_layout_jopr

* making it compile

* #pragma once instead of #ifndef and #define

* renamed and added keymap

renamed old "default" to "modded_white", added new "default" that resembles an ISO 105-key layout

* reordered keyboards/jopr/info.json to match order o layout array

* implemented most suggestions

* fixed missing ;

* fixed bootloader setting for rules.mk

* adopted standard layout matrix naming convention

* "fixed" commented-out code in keymaps

* changes to keymap layers and LEDs

Turns out adding a layer for ROYA-modified keycodes is more trouble than it's worth and works better by just defining a ROYA key.
Also, LEDs were set up incorrectly.
Lastly, implemented SysReq-Warning LED.

* moved forced NumLock code

just in case either it or the CapsLock & ScrlLock update code wouldn't both work otherwise

* rearranged media keycodes

* replaced Shifted keycodes with basic ones

* Apply suggestions from code review

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* implemented suggestions by noroadsleft

* Apply suggestions from code review

Make ISO-Enter QMK Configurator-friendly

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Update readme.md

* Update keyboards/jopr/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* moved keyboard to handwired folder

It was said that personal passion projects belong in there, even if they're not actually handwired

* Update readme.md

keyboards/handwired/jopr/config.h [new file with mode: 0644]
keyboards/handwired/jopr/info.json [new file with mode: 0644]
keyboards/handwired/jopr/jopr.c [new file with mode: 0644]
keyboards/handwired/jopr/jopr.h [new file with mode: 0644]
keyboards/handwired/jopr/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/handwired/jopr/keymaps/modded_white/keymap.c [new file with mode: 0644]
keyboards/handwired/jopr/readme.md [new file with mode: 0644]
keyboards/handwired/jopr/rules.mk [new file with mode: 0644]

diff --git a/keyboards/handwired/jopr/config.h b/keyboards/handwired/jopr/config.h
new file mode 100644 (file)
index 0000000..aece709
--- /dev/null
@@ -0,0 +1,49 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0x4DAE
+#define PRODUCT_ID      0x1000
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    joelproko
+#define PRODUCT         jopr-106-Nl2SR-Cl2nL
+#define DESCRIPTION     jopr-106 Mechanical Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 11
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D0, D6, D2, D4, D3, D5, D7, C6, B6, F5 }
+#define MATRIX_COL_PINS { B3, B2, B1, B0, F7, E6, F6, B5, C7, B4, D1 }
+#define UNUSED_PINS { B7 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 0
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+/* #define LOCKING_SUPPORT_ENABLE */
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+/* #define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) */
+#define NO_ACTION_ONESHOT
+#define TAPPING_TOGGLE 3
+
+/*#define RGB_DI_PIN F4*/
+#ifdef RGB_DI_PIN
+/*#define RGBLIGHT_ANIMATIONS*/
+#define RGBLED_NUM 1
+#define RGBLIGHT_HUE_STEP 1
+#define RGBLIGHT_SAT_STEP 1
+#define RGBLIGHT_VAL_STEP 1
+#endif
diff --git a/keyboards/handwired/jopr/info.json b/keyboards/handwired/jopr/info.json
new file mode 100644 (file)
index 0000000..c4cadb8
--- /dev/null
@@ -0,0 +1,562 @@
+{
+  "keyboard_name": "jopr-106",
+  "url": "https://github.com/joelproko/keyboard_layout_jopr",
+  "maintainer": "joelproko",
+  "width": 22.5,
+  "height": 6.25,
+  "layouts": {
+    "LAYOUT": {
+      "key_count": 106,
+      "layout": [
+        {
+          "label": "MX_A0",
+          "x": 0,
+          "y": 0
+        },
+        {
+          "label": "MX_B0",
+          "x": 1.25,
+          "y": 0
+        },
+        {
+          "label": "MX_C0",
+          "x": 2.25,
+          "y": 0
+        },
+        {
+          "label": "MX_D0",
+          "x": 3.25,
+          "y": 0
+        },
+        {
+          "label": "MX_E0",
+          "x": 4.25,
+          "y": 0
+        },
+        {
+          "label": "MX_F0",
+          "x": 5.5,
+          "y": 0
+        },
+        {
+          "label": "MX_G0",
+          "x": 6.5,
+          "y": 0
+        },
+        {
+          "label": "MX_H0",
+          "x": 7.5,
+          "y": 0
+        },
+        {
+          "label": "MX_I0",
+          "x": 8.5,
+          "y": 0
+        },
+        {
+          "label": "MX_J0",
+          "x": 9.75,
+          "y": 0
+        },
+        {
+          "label": "MX_A6",
+          "x": 10.75,
+          "y": 0
+        },
+        {
+          "label": "MX_B6",
+          "x": 11.75,
+          "y": 0
+        },
+        {
+          "label": "MX_C6",
+          "x": 12.75,
+          "y": 0
+        },
+        {
+          "label": "MX_D6",
+          "x": 14,
+          "y": 0
+        },
+        {
+          "label": "MX_E6",
+          "x": 15.25,
+          "y": 0
+        },
+        {
+          "label": "MX_F6",
+          "x": 16.25,
+          "y": 0
+        },
+        {
+          "label": "MX_G6",
+          "x": 17.25,
+          "y": 0
+        },
+        {
+          "label": "MX_H6",
+          "x": 18.25,
+          "y": 0
+        },
+        {
+          "label": "MX_A1",
+          "x": 0,
+          "y": 1.25
+        },
+        {
+          "label": "MX_B1",
+          "x": 1,
+          "y": 1.25
+        },
+        {
+          "label": "MX_C1",
+          "x": 2,
+          "y": 1.25
+        },
+        {
+          "label": "MX_D1",
+          "x": 3,
+          "y": 1.25
+        },
+        {
+          "label": "MX_E1",
+          "x": 4,
+          "y": 1.25
+        },
+        {
+          "label": "MX_F1",
+          "x": 5,
+          "y": 1.25
+        },
+        {
+          "label": "MX_G1",
+          "x": 6,
+          "y": 1.25
+        },
+        {
+          "label": "MX_H1",
+          "x": 7,
+          "y": 1.25
+        },
+        {
+          "label": "MX_I1",
+          "x": 8,
+          "y": 1.25
+        },
+        {
+          "label": "MX_J1",
+          "x": 9,
+          "y": 1.25
+        },
+        {
+          "label": "MX_A7",
+          "x": 10,
+          "y": 1.25
+        },
+        {
+          "label": "MX_B7",
+          "x": 11,
+          "y": 1.25
+        },
+        {
+          "label": "MX_C7",
+          "x": 12,
+          "y": 1.25
+        },
+        {
+          "label": "MX_D7",
+          "x": 13,
+          "y": 1.25,
+          "w": 2
+        },
+        {
+          "label": "MX_E7",
+          "x": 15.25,
+          "y": 1.25
+        },
+        {
+          "label": "MX_F7",
+          "x": 16.25,
+          "y": 1.25
+        },
+        {
+          "label": "MX_G7",
+          "x": 17.25,
+          "y": 1.25
+        },
+        {
+          "label": "MX_H7",
+          "x": 18.25,
+          "y": 1.25
+        },
+        {
+          "label": "MX_A2",
+          "x": 0,
+          "y": 2.25,
+          "w": 1.5
+        },
+        {
+          "label": "MX_B2",
+          "x": 1.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_C2",
+          "x": 2.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_D2",
+          "x": 3.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_E2",
+          "x": 4.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_F2",
+          "x": 5.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_G2",
+          "x": 6.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_H2",
+          "x": 7.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_I2",
+          "x": 8.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_J2",
+          "x": 9.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_A8",
+          "x": 10.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_B8",
+          "x": 11.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_C8",
+          "x": 12.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_D8",
+          "x": 13.75,
+          "y": 2.25,
+          "w": 1.25,
+          "h": 2
+        },
+        {
+          "label": "MX_E8",
+          "x": 15.25,
+          "y": 2.25
+        },
+        {
+          "label": "MX_F8",
+          "x": 16.25,
+          "y": 2.25
+        },
+        {
+          "label": "MX_G8",
+          "x": 17.25,
+          "y": 2.25
+        },
+        {
+          "label": "MX_H8",
+          "x": 18.25,
+          "y": 2.25,
+          "h": 2
+        },
+        {
+          "label": "MX_A3",
+          "x": 0,
+          "y": 3.25,
+          "w": 1.75
+        },
+        {
+          "label": "MX_B3",
+          "x": 1.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_C3",
+          "x": 2.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_D3",
+          "x": 3.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_E3",
+          "x": 4.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_F3",
+          "x": 5.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_G3",
+          "x": 6.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_H3",
+          "x": 7.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_I3",
+          "x": 8.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_J3",
+          "x": 9.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_A9",
+          "x": 10.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_B9",
+          "x": 11.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_C9",
+          "x": 12.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_E9",
+          "x": 15.25,
+          "y": 3.25
+        },
+        {
+          "label": "MX_F9",
+          "x": 16.25,
+          "y": 3.25
+        },
+        {
+          "label": "MX_G9",
+          "x": 17.25,
+          "y": 3.25
+        },
+        {
+          "label": "MX_H9",
+          "x": 19.5,
+          "y": 3.25
+        },
+        {
+          "label": "MX_K1",
+          "x": 20.5,
+          "y": 3.25
+        },
+        {
+          "label": "MX_K0",
+          "x": 21.5,
+          "y": 3.25
+        },
+        {
+          "label": "MX_A4",
+          "x": 0,
+          "y": 4.25,
+          "w": 1.25
+        },
+        {
+          "label": "MX_B4",
+          "x": 1.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_C4",
+          "x": 2.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_D4",
+          "x": 3.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_E4",
+          "x": 4.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_F4",
+          "x": 5.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_G4",
+          "x": 6.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_H4",
+          "x": 7.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_I4",
+          "x": 8.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_J4",
+          "x": 9.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_I9",
+          "x": 10.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_I8",
+          "x": 11.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_I7",
+          "x": 12.25,
+          "y": 4.25,
+          "w": 2.75
+        },
+        {
+          "label": "MX_I6",
+          "x": 15.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_J9",
+          "x": 16.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_J8",
+          "x": 17.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_J7",
+          "x": 18.25,
+          "y": 4.25,
+          "h": 2
+        },
+        {
+          "label": "MX_J6",
+          "x": 19.5,
+          "y": 4.25
+        },
+        {
+          "label": "MX_K3",
+          "x": 20.5,
+          "y": 4.25
+        },
+        {
+          "label": "MX_K2",
+          "x": 21.5,
+          "y": 4.25
+        },
+        {
+          "label": "MX_A5",
+          "x": 0,
+          "y": 5.25,
+          "w": 1.25
+        },
+        {
+          "label": "MX_B5",
+          "x": 1.25,
+          "y": 5.25,
+          "w": 1.25
+        },
+        {
+          "label": "MX_C5",
+          "x": 2.5,
+          "y": 5.25,
+          "w": 1.25
+        },
+        {
+          "label": "MX_D5",
+          "x": 3.75,
+          "y": 5.25,
+          "w": 6.25
+        },
+        {
+          "label": "MX_J5",
+          "x": 10,
+          "y": 5.25,
+          "w": 1.25
+        },
+        {
+          "label": "MX_I5",
+          "x": 11.25,
+          "y": 5.25,
+          "w": 1.25
+        },
+        {
+          "label": "MX_K9",
+          "x": 12.5,
+          "y": 5.25,
+          "w": 1.25
+        },
+        {
+          "label": "MX_E5",
+          "x": 13.75,
+          "y": 5.25,
+          "w": 1.25
+        },
+        {
+          "label": "MX_K8",
+          "x": 15.25,
+          "y": 5.25,
+          "w": 2
+        },
+        {
+          "label": "MX_K7",
+          "x": 17.25,
+          "y": 5.25
+        },
+        {
+          "label": "MX_K6",
+          "x": 19.5,
+          "y": 5.25
+        },
+        {
+          "label": "MX_K5",
+          "x": 20.5,
+          "y": 5.25
+        },
+        {
+          "label": "MX_K4",
+          "x": 21.5,
+          "y": 5.25
+        }
+      ]
+    }
+  }
+}
diff --git a/keyboards/handwired/jopr/jopr.c b/keyboards/handwired/jopr/jopr.c
new file mode 100644 (file)
index 0000000..3dccb71
--- /dev/null
@@ -0,0 +1,11 @@
+#include "jopr.h"
+void matrix_init_kb(void) {
+    matrix_init_user();
+    led_init_ports();
+};
+
+void led_init_ports(void) {
+    setPinOutput(F0);
+    setPinOutput(F1);
+    setPinOutput(F4);
+}
\ No newline at end of file
diff --git a/keyboards/handwired/jopr/jopr.h b/keyboards/handwired/jopr/jopr.h
new file mode 100644 (file)
index 0000000..b79a8f2
--- /dev/null
@@ -0,0 +1,24 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+    K000,  K001, K002, K003, K004,  K005, K006, K007, K008,  K009, K600, K601, K602,  K603,  K604, K605, K606, K607, \
+    K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K700, K701, K702, K703,      K704, K705, K706, K707, \
+    K200,   K201, K202, K203, K204, K205, K206, K207, K208, K209, K800, K801, K802, K803,    K804, K805, K806, K807, \
+    K300,    K301, K302, K303, K304, K305, K306, K307, K308, K309, K900, K901, K902,         K904, K905, K906,        K907, K110, K010, \
+    K400,  K401, K402, K403, K404, K405, K406, K407, K408, K409, K908, K808, K708,           K608, K909, K809, K709,  K609, K310, K210, \
+    K500,  K501,  K502,  K503,                            K509,  K508,  K910,  K504,         K810,       K710,        K610, K510, K410 \
+) \
+{ \
+    { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010 }, \
+    { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110 }, \
+    { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210 }, \
+    { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310 }, \
+    { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410 }, \
+    { K500, K501, K502, K503, K504, KC_NO, KC_NO, KC_NO, K508, K509, K510 }, \
+    { K600, K601, K602, K603, K604, K605, K606, K607, K608, K609, K610 }, \
+    { K700, K701, K702, K703, K704, K705, K706, K707, K708, K709, K710 }, \
+    { K800, K801, K802, K803, K804, K805, K806, K807, K808, K809, K810 }, \
+    { K900, K901, K902, KC_NO, K904, K905, K906, K907, K908, K909, K910 } \
+}
diff --git a/keyboards/handwired/jopr/keymaps/default/keymap.c b/keyboards/handwired/jopr/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..d6b998f
--- /dev/null
@@ -0,0 +1,59 @@
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FN 1
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    [_BL] = LAYOUT(
+        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_DEL,    KC_NO,   KC_CAPS, KC_SLCK, KC_PAUS,
+        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_PSCR, KC_PSLS, KC_PAST, KC_PMNS,
+        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_ENT,        KC_P7,   KC_P8,   KC_P9,   KC_PPLS,
+        KC_MHEN,       KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_NUHS,              KC_P4,   KC_P5,   KC_P6,              KC_PGUP, KC_INS,  KC_PGDN,
+        KC_LSFT,   KC_NUBS, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,                  KC_P1,   KC_P2,   KC_P3,   KC_PENT,   KC_HOME, KC_UP,   KC_END,
+        KC_LCTL,   KC_LWIN,   KC_LALT,   KC_SPC,                                                KC_RALT, KC_RWIN, LT(_FN,KC_APP),  KC_RCTL,     KC_P0,            KC_PDOT,            KC_LEFT, KC_DOWN, KC_RGHT
+    ),
+    [_FN] = LAYOUT(
+               _______,   _______, _______, _______, _______,   _______, _______, _______, _______,   _______, _______, _______, _______,   _______,   KC_SYSREQ, _______, _______, _______,
+               _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,           _______, _______, _______, _______,
+               _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,       KC_MSTP, KC_VOLU, _______, _______,
+               _______,       _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,              KC_MPRV, KC_MPLY, KC_MNXT,            _______, KC_MUTE, _______,
+               _______,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                  KC_MUTE, KC_VOLD, _______, _______,   KC_VOLD, KC_MSTP, KC_VOLU,
+               _______,   _______,   _______,   _______,                                                 _______,   _______,   _______,   _______,     _______,          _______,            KC_MPRV, KC_MPLY, KC_MNXT
+    )
+};
+
+void led_set_user(uint8_t usb_led) {
+
+    if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+        writePinHigh(F1);
+       } else {
+        writePinLow(F1);
+    }
+
+    if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+        writePinHigh(F0);
+       } else {
+        writePinLow(F0);
+    }
+    
+    if (!(IS_LED_ON(usb_led, USB_LED_NUM_LOCK))) {
+        tap_code(KC_NUMLOCK);
+    }
+}
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    static bool sysreq_led = false;
+    if (record->event.pressed) {
+        if (sysreq_led) {
+            sysreq_led = false;
+            writePinLow(F4);
+        }
+        else {
+            switch(keycode) {
+                case KC_SYSREQ:
+                    sysreq_led = true;
+                    writePinHigh(F4);
+            }
+        }
+    }
+    return true;
+}
diff --git a/keyboards/handwired/jopr/keymaps/modded_white/keymap.c b/keyboards/handwired/jopr/keymaps/modded_white/keymap.c
new file mode 100644 (file)
index 0000000..da1f9e1
--- /dev/null
@@ -0,0 +1,59 @@
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FN 1
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    [_BL] = LAYOUT(
+        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_DEL,    KC_NO,   KC_CAPS, KC_SLCK, KC_PAUS,
+        KC_NUHS, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_NUBS, KC_SLSH, KC_BSPC,           KC_PSCR, KC_PSLS, KC_PAST, KC_PMNS,
+        KC_TAB,      KC_V,    KC_Y,    KC_D,    KC_COMM, KC_QUOT, KC_INT1, KC_J,    KC_M,    KC_L,    KC_U,    KC_LBRC, KC_RBRC, KC_ENT,        KC_P7,   KC_P8,   KC_P9,   KC_PPLS,
+        KC_MHEN,       KC_A,    KC_T,    KC_H,    KC_E,    KC_B,    KC_MINS, KC_C,    KC_S,    KC_N,    KC_O,    KC_I,    KC_EQL,               KC_P4,   KC_P5,   KC_P6,              KC_PGUP, KC_INS,  KC_PGDN,
+        KC_LSFT,   KC_GRV,  KC_P,    KC_K,    KC_G,    KC_W,    KC_Q,    KC_X,    KC_R,    KC_F,    KC_DOT,  KC_Z,    KC_RSFT,                  KC_P1,   KC_P2,   KC_P3,   KC_PENT,   KC_HOME, KC_UP,   KC_END,
+        KC_LCTL,   KC_LWIN,   KC_LALT,   KC_SPC,                                                KC_RALT, KC_RWIN, LT(_FN,KC_APP), KC_RCTL,      KC_P0,            KC_PDOT,            KC_LEFT, KC_DOWN, KC_RGHT
+    ),
+    [_FN] = LAYOUT(
+               _______,   _______, _______, _______, _______,   _______, _______, _______, _______,   _______, _______, _______, _______,   _______,   KC_SYSREQ, _______, _______, _______,
+               _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,           _______, _______, _______, _______,
+               _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,       KC_MSTP, KC_VOLU, _______, _______,
+               _______,       _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,              KC_MPRV, KC_MPLY, KC_MNXT,            _______, KC_MUTE, _______,
+               _______,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                  KC_MUTE, KC_VOLD, _______, _______,   KC_VOLD, KC_MSTP, KC_VOLU,
+               _______,   _______,   _______,   _______,                                                 _______,   _______,   _______,   _______,     _______,          _______,            KC_MPRV, KC_MPLY, KC_MNXT
+    )
+};
+
+void led_set_user(uint8_t usb_led) {
+
+    if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+        writePinHigh(F1);
+       } else {
+        writePinLow(F1);
+    }
+
+    if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+        writePinHigh(F0);
+       } else {
+        writePinLow(F0);
+    }
+    
+    if (!(IS_LED_ON(usb_led, USB_LED_NUM_LOCK))) {
+        tap_code(KC_NUMLOCK);
+    }
+}
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    static bool sysreq_led = false;
+    if (record->event.pressed) {
+        if (sysreq_led) {
+            sysreq_led = false;
+            writePinLow(F4);
+        }
+        else {
+            switch(keycode) {
+                case KC_SYSREQ:
+                    sysreq_led = true;
+                    writePinHigh(F4);
+            }
+        }
+    }
+    return true;
+}
\ No newline at end of file
diff --git a/keyboards/handwired/jopr/readme.md b/keyboards/handwired/jopr/readme.md
new file mode 100644 (file)
index 0000000..eab197d
--- /dev/null
@@ -0,0 +1,17 @@
+# jopr-106-Nl2SR-Cl2MH
+
+106-key based on ISO 105-key, NumLock to SysReq, CapsLock to Muhenkan/ROYA, NumLock state forced on
+
+![jopr-106-default](https://raw.githubusercontent.com/joelproko/keyboard_layout_jopr/master/keycode_layout_default.png)  
+![jopr-106-modded_white](https://raw.githubusercontent.com/joelproko/keyboard_layout_jopr/master/keycap_layout_modded_white.png)
+
+Inspired by [KeyBored](https://github.com/itractus/KeyBored) and [white_keyboard_layout](https://github.com/mw8/white_keyboard_layout)
+
+Keyboard Maintainer: [joelproko](https://github.com/joelproko)  
+Hardware: https://github.com/joelproko/keyboard_layout_jopr
+
+Make example for this keyboard (after setting up your build environment):
+
+    make jopr:default
+
+See 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/handwired/jopr/rules.mk b/keyboards/handwired/jopr/rules.mk
new file mode 100644 (file)
index 0000000..de83252
--- /dev/null
@@ -0,0 +1,63 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no  # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no   # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes  # Audio control and System control(+450)
+CONSOLE_ENABLE = no    # Console for debug(+400)
+COMMAND_ENABLE = no    # Commands for debug and configuration
+SLEEP_LED_ENABLE = no  # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes      # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no  # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+UNICODE_ENABLE = yes
+RGBLIGHT_ENABLE = no