From c68597d9ad983c7d8f2b857f795037f2a441522d Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Wed, 20 Dec 2017 16:54:07 -0800 Subject: [PATCH] Octagon V1 Support (Port) (#2184) * Preliminary commit for Octagon V1 support This is essentially a cp -R v2 v1 with a few things changed to get it to compile and build. * The Octagon V1 supports up to 84 keys as opposed to the V2 which supports up to 86. This commit changes the keymap to match it. * Temporary default keymap just to get things to compile * Update readme file * Fix switch matrix * Fix underglow lighting option * Fix keymap to take care of shifted columns * Fix keymap formatting * Remove un-needed files left over from rasmusx * Make Octagon V1 have its own keymap directory with default keymap * Make Octagon V2 have its own keymap directory with default keymap * Cleanups and readme edits --- keyboards/octagon/octagon.h | 4 + keyboards/octagon/readme.md | 2 + keyboards/octagon/v1/config.h | 54 ++++ keyboards/octagon/v1/keymaps/default/keymap.c | 39 +++ .../octagon/v1/keymaps/default/readme.md | 8 + keyboards/octagon/v1/matrix.c | 236 ++++++++++++++++++ keyboards/octagon/v1/readme.md | 28 +++ keyboards/octagon/v1/rules.mk | 72 ++++++ keyboards/octagon/v1/v1.c | 50 ++++ keyboards/octagon/v1/v1.h | 36 +++ .../octagon/{ => v2}/keymaps/default/keymap.c | 2 +- .../{ => v2}/keymaps/default/readme.md | 2 +- 12 files changed, 531 insertions(+), 2 deletions(-) create mode 100644 keyboards/octagon/v1/config.h create mode 100644 keyboards/octagon/v1/keymaps/default/keymap.c create mode 100644 keyboards/octagon/v1/keymaps/default/readme.md create mode 100644 keyboards/octagon/v1/matrix.c create mode 100644 keyboards/octagon/v1/readme.md create mode 100644 keyboards/octagon/v1/rules.mk create mode 100644 keyboards/octagon/v1/v1.c create mode 100644 keyboards/octagon/v1/v1.h rename keyboards/octagon/{ => v2}/keymaps/default/keymap.c (99%) rename keyboards/octagon/{ => v2}/keymaps/default/readme.md (81%) diff --git a/keyboards/octagon/octagon.h b/keyboards/octagon/octagon.h index d48a715bbc..d91da2eda8 100644 --- a/keyboards/octagon/octagon.h +++ b/keyboards/octagon/octagon.h @@ -3,6 +3,10 @@ #include "quantum.h" +#ifdef KEYBOARD_octagon_v1 + #include "v1.h" +#endif + #ifdef KEYBOARD_octagon_v2 #include "v2.h" #endif diff --git a/keyboards/octagon/readme.md b/keyboards/octagon/readme.md index bf937a3f66..5b3169424a 100644 --- a/keyboards/octagon/readme.md +++ b/keyboards/octagon/readme.md @@ -4,6 +4,8 @@ Non official firmware for custom Korean keyboard with 75% key layout made by Duc 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. +Newest version is the [Octagon V2](http://duck0113.tistory.com/127) + Make example for this keyboard (after setting up your build environment): make octagon/v2:default diff --git a/keyboards/octagon/v1/config.h b/keyboards/octagon/v1/config.h new file mode 100644 index 0000000000..fbbc8999bb --- /dev/null +++ b/keyboards/octagon/v1/config.h @@ -0,0 +1,54 @@ +/* +Copyright 2017 MechMerlin + +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 . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6050 +#define DEVICE_VER 0x0104 +#define MANUFACTURER Duck +#define PRODUCT Octagon V1 +#define DESCRIPTION Duck Octagon V1 + +/* key matrix size */ +#define MATRIX_ROWS 6 +#define MATRIX_COLS 16 + +#define DIODE_DIRECTION COL2ROW + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 1 + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +#define RGBLIGHT_ANIMATIONS +#define RGB_DI_PIN D6 +#define RGBLED_NUM 17 + +#define TAPPING_TERM 200 + +#endif diff --git a/keyboards/octagon/v1/keymaps/default/keymap.c b/keyboards/octagon/v1/keymaps/default/keymap.c new file mode 100644 index 0000000000..0ce6abb712 --- /dev/null +++ b/keyboards/octagon/v1/keymaps/default/keymap.c @@ -0,0 +1,39 @@ +/* Copyright 2017 MechMerlin + * + * 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 . + */ +#include "octagon.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* layer 0: qwerty */ + [0] = KEYMAP(\ + 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_PSCR, 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_HOME, + 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_PGUP, + 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_NO, KC_ENT, KC_PGDN, + KC_LSFT, 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_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_NO, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT), + + [1] = KEYMAP(\ + KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, 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, RESET, 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_NO, KC_TRNS, + KC_TRNS, KC_NO, 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) + }; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + return MACRO_NONE; +}; diff --git a/keyboards/octagon/v1/keymaps/default/readme.md b/keyboards/octagon/v1/keymaps/default/readme.md new file mode 100644 index 0000000000..3a3e3db577 --- /dev/null +++ b/keyboards/octagon/v1/keymaps/default/readme.md @@ -0,0 +1,8 @@ +# Default Octagon Layout + +This is the default implement layout for Duck Octagon V1. + + +## Features + +* Default QWERTY layer diff --git a/keyboards/octagon/v1/matrix.c b/keyboards/octagon/v1/matrix.c new file mode 100644 index 0000000000..2d2a5adbc1 --- /dev/null +++ b/keyboards/octagon/v1/matrix.c @@ -0,0 +1,236 @@ +/* +Copyright 2017 MechMerlin +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 . +*/ + +#include +#include +#include +#include "matrix.h" +#include "util.h" +#include "print.h" +#include "debug.h" + +static uint8_t debouncing = DEBOUNCING_DELAY; + +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +static uint8_t read_rows(uint8_t col); +static void init_rows(void); +static void unselect_cols(void); +static void select_col(uint8_t col); + +__attribute__ ((weak)) +void matrix_init_quantum(void) { + matrix_init_kb(); +} + +__attribute__ ((weak)) +void matrix_scan_quantum(void) { + matrix_scan_kb(); +} + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +void backlight_init_ports(void) +{ + DDRB |= 0b00011111; // PB0 (caps), PB1 (alpha), PB2 (extra), PB3 (modnum), PB4 (caps) + DDRD |= 0b11010000; // PD4, (rgb blue), PD6 (rgb red), PD7 (rgb green) + DDRE |= 0b01000000; // PE6 (frow) +} + +void matrix_init(void) { + backlight_init_ports(); + unselect_cols(); + init_rows(); + + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } + + matrix_init_quantum(); +} + +uint8_t matrix_scan(void) { + for (uint8_t col = 0; col < MATRIX_COLS; col++) { + select_col(col); + _delay_us(3); + + uint8_t rows = read_rows(col); + + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1< + * + * 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 . + */ +#include "v1.h" + +enum BACKLIGHT_AREAS { + BACKLIGHT_ALPHA = 0b0000001, + BACKLIGHT_EXTRA = 0b0000010, + BACKLIGHT_MODNUM = 0b0000100, + BACKLIGHT_FROW = 0b0001000, + BACKLIGHT_RGB = 0b0010000, + BACKLIGHT_RGBRED = 0b0010000, + BACKLIGHT_RGBGREEN = 0b0100000, + BACKLIGHT_RGBBLUE = 0b1000000, + BACKLIGHT_SWITCH = 0b0001111 +}; + +uint8_t backlight_os_state = 0; +uint32_t backlight_layer_state = 0; + +void backlight_set(uint8_t level) { + level & BACKLIGHT_ALPHA ? (PORTB |= 0b00000010) : (PORTB &= ~0b00000010); + level & BACKLIGHT_EXTRA ? (PORTB |= 0b00000100) : (PORTB &= ~0b00000100); + level & BACKLIGHT_MODNUM ? (PORTB |= 0b00001000) : (PORTB &= ~0b00001000); + level & BACKLIGHT_FROW ? (PORTE |= 0b01000000) : (PORTE &= ~0b01000000); + level & BACKLIGHT_RGBRED ? (PORTD |= 0b01000000) : (PORTD &= ~0b01000000); + level & BACKLIGHT_RGBGREEN ? (PORTD |= 0b10000000) : (PORTD &= ~0b10000000); + level & BACKLIGHT_RGBBLUE ? (PORTD |= 0b00010000) : (PORTD &= ~0b00010000); +} + +void led_set_kb(uint8_t usb_led) { + backlight_os_state & (1< + * + * 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 . + */ +#ifndef V1_H +#define V1_H + +#include "../octagon.h" + +#define KEYMAP( \ + K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5P, \ + K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4P, \ + K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3P, \ + K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K5O, K2N, K2P, \ + K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1N, K1P, \ + K0A, K0B, K0C, K0G, K0J, K0K, K0L, K0M, K0N, K0P \ +) { \ + { K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P }, \ + { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, KC_NO, K4P }, \ + { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, KC_NO, K3P }, \ + { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, KC_NO, K2N, KC_NO, K2P }, \ + { K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, KC_NO, K1M, K1N, KC_NO, K1P }, \ + { K0A, K0B, K0C, KC_NO, KC_NO, K0G, KC_NO, KC_NO, K0J, K0K, K0L, KC_NO, K0M, K0N, KC_NO, K0P } \ +} +#endif diff --git a/keyboards/octagon/keymaps/default/keymap.c b/keyboards/octagon/v2/keymaps/default/keymap.c similarity index 99% rename from keyboards/octagon/keymaps/default/keymap.c rename to keyboards/octagon/v2/keymaps/default/keymap.c index 5fd2d0aeb9..0590f17c83 100644 --- a/keyboards/octagon/keymaps/default/keymap.c +++ b/keyboards/octagon/v2/keymaps/default/keymap.c @@ -36,4 +36,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { return MACRO_NONE; -}; +}; \ No newline at end of file diff --git a/keyboards/octagon/keymaps/default/readme.md b/keyboards/octagon/v2/keymaps/default/readme.md similarity index 81% rename from keyboards/octagon/keymaps/default/readme.md rename to keyboards/octagon/v2/keymaps/default/readme.md index 456fc3ecb8..d52c00129f 100644 --- a/keyboards/octagon/keymaps/default/readme.md +++ b/keyboards/octagon/v2/keymaps/default/readme.md @@ -5,4 +5,4 @@ This is the default implement layout for Duck Octagon V2. ## Features -* Default QWERTY layer +* Default QWERTY layer \ No newline at end of file