summaryrefslogtreecommitdiffstats
path: root/keyboards/jc65
diff options
context:
space:
mode:
authorJason Barnachea <jrbarnachea@gmail.com>2018-02-10 14:24:54 -0800
committerJack Humbert <jack.humb@gmail.com>2018-02-10 17:24:54 -0500
commita972b262748efe977d9a0f8f47fdc36dc9c787e3 (patch)
tree84a8e6bd8c49a740b48d2c1e9ca051cf9ae9d1a4 /keyboards/jc65
parent8c2ae4a4701439e98569dc2f2acee7016b4c0f20 (diff)
Add JC65 ps2avrGB keyboard (#2351)
* Adds JC65 ps2avrGB keyboard * Adds default keymap * Adds personal keymap * Backlight On/off support Migrated code from the BFake. Functionality only on BL_ON, BL_OFF, BL_TOGG. * Backlighting config adjustment Only 1 level supported. * Personal keymap update BL toggle added and RGB layer updates. * Renamed jc65 ps2avrgb directory Renamed directory for more clarity. * Default keymap and default rules * Personal keymap and personal rules * Group JC65 QMK and PS2 versions Group JC65 QMK and PS2 versions, Split directories, Readme for parent folder. * Default keycaps and personal keymaps re-added Default and personal keymaps re-added. Keymaps, Readme, Rules.mk, and config.h * v32a default keymap rules Default to no. * RGB and Backlight default settings Set to yes. * Rules.mk defaults for personal keymap Rules.mk defaults for personal keymap * Revised keyboard readme make paths Revised. * Path correction * jc65 default folder set set default pcb to qmk version * default rules for v32a set to enable backlight and rgb by default.
Diffstat (limited to 'keyboards/jc65')
-rw-r--r--keyboards/jc65/jc65.c35
-rw-r--r--keyboards/jc65/jc65.h21
-rw-r--r--keyboards/jc65/readme.md18
-rw-r--r--keyboards/jc65/rules.mk69
-rw-r--r--keyboards/jc65/v32a/config.h46
-rw-r--r--keyboards/jc65/v32a/i2c.c106
-rw-r--r--keyboards/jc65/v32a/i2c.h27
-rw-r--r--keyboards/jc65/v32a/keymaps/default/keymap.c11
-rw-r--r--keyboards/jc65/v32a/keymaps/default/readme.md10
-rw-r--r--keyboards/jc65/v32a/keymaps/default/rules.mk2
-rw-r--r--keyboards/jc65/v32a/keymaps/naut/keymap.c81
-rw-r--r--keyboards/jc65/v32a/keymaps/naut/readme.md16
-rw-r--r--keyboards/jc65/v32a/keymaps/naut/rules.mk2
-rw-r--r--keyboards/jc65/v32a/matrix.c106
-rw-r--r--keyboards/jc65/v32a/readme.md24
-rw-r--r--keyboards/jc65/v32a/rules.mk50
-rw-r--r--keyboards/jc65/v32a/usbconfig.h396
-rw-r--r--keyboards/jc65/v32a/v32a.c65
-rw-r--r--keyboards/jc65/v32a/v32a.h58
-rw-r--r--keyboards/jc65/v32u4/config.h (renamed from keyboards/jc65/config.h)0
-rw-r--r--keyboards/jc65/v32u4/keymaps/coth/config.h (renamed from keyboards/jc65/keymaps/coth/config.h)0
-rw-r--r--keyboards/jc65/v32u4/keymaps/coth/keymap.c (renamed from keyboards/jc65/keymaps/coth/keymap.c)2
-rw-r--r--keyboards/jc65/v32u4/keymaps/coth/readme.md (renamed from keyboards/jc65/keymaps/coth/readme.md)0
-rw-r--r--keyboards/jc65/v32u4/keymaps/coth/rules.mk (renamed from keyboards/jc65/keymaps/coth/rules.mk)0
-rw-r--r--keyboards/jc65/v32u4/keymaps/default/config.h (renamed from keyboards/jc65/keymaps/default/config.h)0
-rw-r--r--keyboards/jc65/v32u4/keymaps/default/keymap.c (renamed from keyboards/jc65/keymaps/default/keymap.c)2
-rw-r--r--keyboards/jc65/v32u4/keymaps/default/readme.md (renamed from keyboards/jc65/keymaps/default/readme.md)0
-rw-r--r--keyboards/jc65/v32u4/keymaps/default/rules.mk (renamed from keyboards/jc65/keymaps/default/rules.mk)0
-rw-r--r--keyboards/jc65/v32u4/keymaps/jetpacktuxedo/config.h (renamed from keyboards/jc65/keymaps/jetpacktuxedo/config.h)0
-rw-r--r--keyboards/jc65/v32u4/keymaps/jetpacktuxedo/keymap.c (renamed from keyboards/jc65/keymaps/jetpacktuxedo/keymap.c)2
-rw-r--r--keyboards/jc65/v32u4/keymaps/jetpacktuxedo/readme.md (renamed from keyboards/jc65/keymaps/jetpacktuxedo/readme.md)0
-rw-r--r--keyboards/jc65/v32u4/keymaps/jetpacktuxedo/rules.mk (renamed from keyboards/jc65/keymaps/jetpacktuxedo/rules.mk)0
-rw-r--r--keyboards/jc65/v32u4/keymaps/na7thana/config.h (renamed from keyboards/jc65/keymaps/na7thana/config.h)0
-rw-r--r--keyboards/jc65/v32u4/keymaps/na7thana/keymap.c (renamed from keyboards/jc65/keymaps/na7thana/keymap.c)2
-rw-r--r--keyboards/jc65/v32u4/keymaps/na7thana/readme.md (renamed from keyboards/jc65/keymaps/na7thana/readme.md)0
-rw-r--r--keyboards/jc65/v32u4/keymaps/na7thana/rules.mk (renamed from keyboards/jc65/keymaps/na7thana/rules.mk)0
-rw-r--r--keyboards/jc65/v32u4/readme.md22
-rw-r--r--keyboards/jc65/v32u4/rules.mk68
-rw-r--r--keyboards/jc65/v32u4/v32u4.c36
-rw-r--r--keyboards/jc65/v32u4/v32u4.h21
40 files changed, 1164 insertions, 134 deletions
diff --git a/keyboards/jc65/jc65.c b/keyboards/jc65/jc65.c
index 6f51c0d6e6..a4bd868747 100644
--- a/keyboards/jc65/jc65.c
+++ b/keyboards/jc65/jc65.c
@@ -1,36 +1 @@
#include "jc65.h"
-
-void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
-
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
- // put your looping keyboard code here
- // runs every cycle (a lot)
-
- matrix_scan_user();
-}
-
-bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
- // put your per-action keyboard code here
- // runs for every action, just before processing by the firmware
-
- return process_record_user(keycode, record);
-}
-
-void led_set_kb(uint8_t usb_led) {
- // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
- if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
- // output low
- DDRB |= (1<<2);
- PORTB &= ~(1<<2);
- } else {
- // Hi-Z
- DDRB &= ~(1<<2);
- PORTB &= ~(1<<2);
- }
- led_set_user(usb_led);
-}
diff --git a/keyboards/jc65/jc65.h b/keyboards/jc65/jc65.h
index 41ec3cf64e..0c047c90ec 100644
--- a/keyboards/jc65/jc65.h
+++ b/keyboards/jc65/jc65.h
@@ -3,19 +3,12 @@
#include "quantum.h"
-#define KEYMAP( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
- K10, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, \
- K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2F, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, K3F, \
- K40, K41, K43, K44, K46, K48, K4A, K4B, K4C, K4D, K4E, K4F \
-)\
-{\
- {K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F}, \
- {K10, KC_NO, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F}, \
- {K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO, K2F}, \
- {K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E, K3F}, \
- {K40, K41, KC_NO, K43, K44, KC_NO, K46, KC_NO, K48, KC_NO, K4A, K4B, K4C, K4D, K4E, K4F}, \
-}
+#ifdef KEYBOARD_jc65_v32u4
+ #include "v32u4.h"
+#endif
+
+#ifdef KEYBOARD_jc65_v32a
+ #include "v32a.h"
+#endif
#endif
diff --git a/keyboards/jc65/readme.md b/keyboards/jc65/readme.md
index e8955ec53d..c58f68dc09 100644
--- a/keyboards/jc65/readme.md
+++ b/keyboards/jc65/readme.md
@@ -3,20 +3,12 @@ JC65
![JC65](https://imgur.com/a/C2oa5)
-The JC65 PCB actually has two revisions: A QMK native version, and a PS2AVRGB version. Jchan offered both PCBs as options during the M65-A Round 1 group buy, and were also available choices for the 65% acrylic case group buy. In the near future both PCB versions should be available from keyclack.com when the storefront part opens.
+The JC65 PCB actually has two revisions: A QMK native version, and a PS2AVRGB version. Jchan offered both PCBs as options during the M65-A Round 1 group buy and are now currently available on [keyclack.com](https://keyclack.com/)
-These docs are for the QMK version of the PCB. [More info on qmk.fm](http://qmk.fm/planck/)
+Make example native QMK version (after setting up your build environment):
-Keyboard Maintainer: [Ethan Madden](https://github.com/jetpacktuxedo)
-Hardware Supported: JC65 rev.qmk
-Hardware Availability: [keyclack.com](https://keyclack.com/)
+ make jc65/v32u4:default
-Make example for this keyboard (after setting up your build environment):
+Make example ps2avrGB version (after setting up your build environment):
- make jc65:default
-
-Or to make and flash:
-
- make jc65:default:dfu
-
-See [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.
+ make jc65/v32a:default \ No newline at end of file
diff --git a/keyboards/jc65/rules.mk b/keyboards/jc65/rules.mk
index c2c02b6147..050e22e3ca 100644
--- a/keyboards/jc65/rules.mk
+++ b/keyboards/jc65/rules.mk
@@ -1,68 +1 @@
-# MCU name
-#MCU = at90usb1287
-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
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # 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
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = yes # USB Nkey Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
-RGBLIGHT_ENABLE = yes
-MIDI_ENABLE = no # MIDI controls
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE = no # Audio output on port C6
+DEFAULT_FOLDER = jc65/v32u4 \ No newline at end of file
diff --git a/keyboards/jc65/v32a/config.h b/keyboards/jc65/v32a/config.h
new file mode 100644
index 0000000000..dc6d280f52
--- /dev/null
+++ b/keyboards/jc65/v32a/config.h
@@ -0,0 +1,46 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+#define VENDOR_ID 0x1234
+#define PRODUCT_ID 0x5679
+#define MANUFACTURER winkeyless.kr
+#define PRODUCT JC65 PS2AVRGB
+
+/* matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 16
+
+#define NO_BACKLIGHT_CLOCK
+#define BACKLIGHT_LEVELS 1
+#define RGBLED_NUM 16
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_EFFECT_KNIGHT_LED_NUM 8
+
+#define NO_UART 1
+
+/* key combination for command */
+#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
+
+#endif
diff --git a/keyboards/jc65/v32a/i2c.c b/keyboards/jc65/v32a/i2c.c
new file mode 100644
index 0000000000..a4f9521352
--- /dev/null
+++ b/keyboards/jc65/v32a/i2c.c
@@ -0,0 +1,106 @@
+/*
+Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// Please do not modify this file
+
+#include <avr/io.h>
+#include <util/twi.h>
+
+#include "i2c.h"
+
+void i2c_set_bitrate(uint16_t bitrate_khz) {
+ uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
+ if (bitrate_div >= 16) {
+ bitrate_div = (bitrate_div - 16) / 2;
+ }
+ TWBR = bitrate_div;
+}
+
+void i2c_init(void) {
+ // set pull-up resistors on I2C bus pins
+ PORTC |= 0b11;
+
+ i2c_set_bitrate(400);
+
+ // enable TWI (two-wire interface)
+ TWCR |= (1 << TWEN);
+
+ // enable TWI interrupt and slave address ACK
+ TWCR |= (1 << TWIE);
+ TWCR |= (1 << TWEA);
+}
+
+uint8_t i2c_start(uint8_t address) {
+ // reset TWI control register
+ TWCR = 0;
+
+ // begin transmission and wait for it to end
+ TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
+ while (!(TWCR & (1<<TWINT)));
+
+ // check if the start condition was successfully transmitted
+ if ((TWSR & 0xF8) != TW_START) {
+ return 1;
+ }
+
+ // transmit address and wait
+ TWDR = address;
+ TWCR = (1<<TWINT) | (1<<TWEN);
+ while (!(TWCR & (1<<TWINT)));
+
+ // check if the device has acknowledged the READ / WRITE mode
+ uint8_t twst = TW_STATUS & 0xF8;
+ if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
+ return 1;
+ }
+
+ return 0;
+}
+
+void i2c_stop(void) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
+}
+
+uint8_t i2c_write(uint8_t data) {
+ TWDR = data;
+
+ // transmit data and wait
+ TWCR = (1<<TWINT) | (1<<TWEN);
+ while (!(TWCR & (1<<TWINT)));
+
+ if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
+ return 1;
+ }
+
+ return 0;
+}
+
+uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
+ if (i2c_start(address)) {
+ return 1;
+ }
+
+ for (uint16_t i = 0; i < length; i++) {
+ if (i2c_write(data[i])) {
+ return 1;
+ }
+ }
+
+ i2c_stop();
+
+ return 0;
+}
diff --git a/keyboards/jc65/v32a/i2c.h b/keyboards/jc65/v32a/i2c.h
new file mode 100644
index 0000000000..93a69c94da
--- /dev/null
+++ b/keyboards/jc65/v32a/i2c.h
@@ -0,0 +1,27 @@
+/*
+Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// Please do not modify this file
+
+#ifndef __I2C_H__
+#define __I2C_H__
+
+void i2c_init(void);
+void i2c_set_bitrate(uint16_t bitrate_khz);
+uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
+
+#endif
diff --git a/keyboards/jc65/v32a/keymaps/default/keymap.c b/keyboards/jc65/v32a/keymaps/default/keymap.c
new file mode 100644
index 0000000000..de7a7135af
--- /dev/null
+++ b/keyboards/jc65/v32a/keymaps/default/keymap.c
@@ -0,0 +1,11 @@
+#include "v32a.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = KEYMAP(
+ KC_GESC, 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_BSLS,KC_BSPC, KC_INS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, 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_ENT,KC_PGUP,
+ 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_UP,KC_PGDN,
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT,KC_RGUI,KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT
+ ),
+};
diff --git a/keyboards/jc65/v32a/keymaps/default/readme.md b/keyboards/jc65/v32a/keymaps/default/readme.md
new file mode 100644
index 0000000000..61e55f3ce8
--- /dev/null
+++ b/keyboards/jc65/v32a/keymaps/default/readme.md
@@ -0,0 +1,10 @@
+Default Keymap
+=======
+
+Default plain keymap with only a base layer.
+
+Keymap Maintainer: [Jason Barnachea](https://github.com/nautxx)
+
+Difference from base layout: None.
+
+Intended usage: Reference layout.
diff --git a/keyboards/jc65/v32a/keymaps/default/rules.mk b/keyboards/jc65/v32a/keymaps/default/rules.mk
new file mode 100644
index 0000000000..d7463419b4
--- /dev/null
+++ b/keyboards/jc65/v32a/keymaps/default/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/jc65/v32a/keymaps/naut/keymap.c b/keyboards/jc65/v32a/keymaps/naut/keymap.c
new file mode 100644
index 0000000000..90c5a221be
--- /dev/null
+++ b/keyboards/jc65/v32a/keymaps/naut/keymap.c
@@ -0,0 +1,81 @@
+#include "v32a.h"
+
+// Define Layers
+#define _BASE 0
+#define _FNX 1
+#define _MAC 2
+#define _RGB 3
+
+// Define Macros
+#define M_PRTS M(0)
+#define M_PRTA M(1)
+#define M_MSSN M(2)
+#define M_APPS M(3)
+#define M_SPOT M(4)
+#define M_LEFT M(5)
+#define M_RGHT M(6)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // Base Layer
+ [_BASE] = KEYMAP(
+ 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_BSLS, KC_GRV, KC_INS,
+ 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_BSPC, KC_DEL,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_NO, KC_ENT,KC_PGUP,
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP,KC_PGDN,
+ MO(1),KC_LALT,KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_NO,KC_RALT,KC_LEFT,KC_DOWN,KC_RGHT
+ ),
+ // Fn Layer
+ [_FNX] = KEYMAP(
+ KC_TRNS, 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_TRNS,KC_TRNS, TG(3),
+ KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, TG(2),KC_VOLU,KC_MPLY,
+ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_MRWD,KC_VOLD,KC_MFFD
+ ),
+ // Mac Layer
+ [_MAC] = KEYMAP(
+ TO(0), KC_F14, KC_F15, M_APPS, M_MSSN, KC_F11, KC_F12,KC_MRWD,KC_MPLY,KC_MFFD,KC_MUTE,KC_VOLD,KC_VOLU,KC_EJCT, KC_NO, KC_NO,
+ KC_TRNS, M_PRTS, M_PRTA,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, TO(0), M_MSSN,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS, M_SPOT, M_SPOT, M_SPOT, KC_TRNS,KC_TRNS,KC_TRNS, M_LEFT, M_APPS, M_RGHT
+ ),
+ // RGB and BL Layer
+ [_RGB] = KEYMAP(
+ TO(0), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(0),
+ KC_NO,RGB_HUD,RGB_HUI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,BL_TOGG,
+ KC_NO,RGB_SAD,RGB_SAI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,RGB_TOG,
+ KC_NO, KC_NO,RGB_VAD,RGB_VAI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,RGB_MOD,RGB_RMOD, KC_NO,RGB_M_P,RGB_M_R,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,RGB_M_G,RGB_M_SW
+ ),
+};
+
+// The Macros
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ if (record->event.pressed) {
+ switch(id) {
+ case 0:
+ return MACRO(D(LGUI), D(LSFT), T(3), U(LSFT), U(LGUI), END); //Mac print screen
+ break;
+ case 1:
+ return MACRO(D(LGUI), D(LSFT), T(4), U(LSFT), U(LGUI), END); //Mac print area
+ break;
+ case 2:
+ return MACRO(D(LCTL), T(UP), U(LCTL), END); //Mac mission control
+ break;
+ case 3:
+ return MACRO(D(LCTL), T(DOWN), U(LCTL), END); //Mac applications
+ break;
+ case 4:
+ return MACRO(D(LGUI), T(SPC), U(LGUI), END); //Mac spotlight search
+ break;
+ case 5:
+ return MACRO(D(LCTL), T(LEFT), U(LCTL), END); //Mac mission left
+ break;
+ case 6:
+ return MACRO(D(LGUI), T(RGHT), U(LGUI), END); //Mac mission right
+ break;
+ }
+ }
+ return MACRO_NONE;
+}; \ No newline at end of file
diff --git a/keyboards/jc65/v32a/keymaps/naut/readme.md b/keyboards/jc65/v32a/keymaps/naut/readme.md
new file mode 100644
index 0000000000..e7d1096666
--- /dev/null
+++ b/keyboards/jc65/v32a/keymaps/naut/readme.md
@@ -0,0 +1,16 @@
+Naut's Keymap
+=======
+
+Layer 1: HHKB Split backspace, 6.25u space, control on caps, Fn on L-Ctl.
+
+Layer 2: F Row on numrow, caps on tab, media shortcuts on arrows
+
+Layer 3: Mac Media buttons on numrow
+
+Layer 4: RGB control
+
+Keymap Maintainer: [Jason Barnachea](https://github.com/nautxx)
+
+Difference from base layout: HHKBish layout. HHKB Fn layer. Mac media layer. RGB control layer.
+
+Intended usage: Daily driver for keyboard peacocking.
diff --git a/keyboards/jc65/v32a/keymaps/naut/rules.mk b/keyboards/jc65/v32a/keymaps/naut/rules.mk
new file mode 100644
index 0000000000..d7463419b4
--- /dev/null
+++ b/keyboards/jc65/v32a/keymaps/naut/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/jc65/v32a/matrix.c b/keyboards/jc65/v32a/matrix.c
new file mode 100644
index 0000000000..57aa36b5ff
--- /dev/null
+++ b/keyboards/jc65/v32a/matrix.c
@@ -0,0 +1,106 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <avr/io.h>
+#include <util/delay.h>
+
+#include "matrix.h"
+
+#ifndef DEBOUNCE
+#define DEBOUNCE 5
+#endif
+
+static uint8_t debouncing = DEBOUNCE;
+
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+void matrix_init(void) {
+ // all outputs for rows high
+ DDRB = 0xFF;
+ PORTB = 0xFF;
+ // all inputs for columns
+ DDRA = 0x00;
+ DDRC &= ~(0x111111<<2);
+ DDRD &= ~(1<<PIND7);
+ // all columns are pulled-up
+ PORTA = 0xFF;
+ PORTC |= (0b111111<<2);
+ PORTD |= (1<<PIND7);
+
+ // initialize matrix state: all keys off
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ matrix[row] = 0x00;
+ matrix_debouncing[row] = 0x00;
+ }
+}
+
+void matrix_set_row_status(uint8_t row) {
+ DDRB = (1 << row);
+ PORTB = ~(1 << row);
+}
+
+uint8_t bit_reverse(uint8_t x) {
+ x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
+ x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
+ x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
+ return x;
+}
+
+uint8_t matrix_scan(void) {
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ matrix_set_row_status(row);
+ _delay_us(5);
+
+ matrix_row_t cols = (
+ // cols 0..7, PORTA 0 -> 7
+ (~PINA) & 0xFF
+ ) | (
+ // cols 8..13, PORTC 7 -> 0
+ bit_reverse((~PINC) & 0xFF) << 8
+ ) | (
+ // col 14, PORTD 7
+ ((~PIND) & (1 << PIND7)) << 7
+ );
+
+ if (matrix_debouncing[row] != cols) {
+ matrix_debouncing[row] = cols;
+ debouncing = DEBOUNCE;
+ }
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ _delay_ms(1);
+ } else {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
+ }
+ }
+ }
+
+ matrix_scan_user();
+
+ return 1;
+}
+
+inline matrix_row_t matrix_get_row(uint8_t row) {
+ return matrix[row];
+}
+
+void matrix_print(void) {
+}
diff --git a/keyboards/jc65/v32a/readme.md b/keyboards/jc65/v32a/readme.md
new file mode 100644
index 0000000000..976217f108
--- /dev/null
+++ b/keyboards/jc65/v32a/readme.md
@@ -0,0 +1,24 @@
+JC65 ps2avrGB
+=======
+
+A 65% keyboard with RGB
+
+Keyboard Maintainer: [Jason Barnachea](https://github.com/nautxx)
+
+Hardware Supported: JC65 rev.ps2avrgb
+
+Hardware Availability: [keyclack.com](https://keyclack.com/)
+
+The JC65 PCB actually has two revisions: A QMK native version, and a PS2AVRGB version. Jchan offered both PCBs as options during the M65-A Round 1 group buy, and were also available choices for the 65% acrylic case group buy. In the near future both PCB versions should be available from keyclack.com when the storefront part opens.
+
+These docs are for the PS2AVRGB version of the PCB. More info on qmk.fm
+
+Make example for this keyboard (after setting up your build environment):
+
+ make jc65/v32a:default
+
+Flash example for this keyboard:
+