Compare commits

...

7 Commits
0.7.7 ... 0.7.9

Author SHA1 Message Date
4d339b7b5d Update docker_build.sh: indentation fix, error echo function ()
* Replace spaces with tab in docker_build.sh

* Use errcho instead of echo >&2
2019-09-07 18:17:54 +10:00
736bdc7e97 Jotix ()
* jotix ortho_4x12

* add shifted symbols

* jotix ortho_4x12 layot
2019-09-07 18:05:14 +10:00
fc5fb2fc15 CA66 R1/R2 Cleanup ()
* fixup readme to adhere to QMK standards and to also have more information

* use pragma once

* strip out the custom bootmagic lite routine as it is the same as QMK's default bootmagic lite routine. Also add the caps lock led indicator

* turn on bootmagic lite

* update default keymap

* Update keyboards/playkbtw/ca66/ca66.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* remove lines 4 thru 37 and add bootloader
2019-09-07 18:04:48 +10:00
ac8f8a8914 fix missing music mode legend () 2019-09-07 07:36:40 +10:00
7ffed07310 Make USB polling rate configurable with a define () 2019-09-06 07:41:24 -07:00
f8bf1d1b16 Changed to 1209 PID () 2019-09-06 14:34:37 +10:00
f0ad3fc68a [Keyboard] Add Iris Rev 4 ()
* Add Iris Rev. 4

* Fix EEPROM addresses
2019-09-05 20:10:57 -07:00
22 changed files with 226 additions and 365 deletions
docs
keyboards
keebio/iris
planck/keymaps/default
playkbtw/ca66
vitamins_included
layouts/community/ortho_4x12/jotix
tmk_core/protocol
util

@ -91,8 +91,10 @@ This is a C header file that is one of the first things included, and will persi
* tries to keep switch state consistent with keyboard LED state
* `#define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)`
* key combination that allows the use of magic commands (useful for debugging)
* `#define USB_MAX_POWER_CONSUMPTION`
* `#define USB_MAX_POWER_CONSUMPTION 500`
* sets the maximum power (in mA) over USB for the device (default: 500)
* `#define USB_POLLING_INTERVAL_MS 10`
* sets the USB polling rate in milliseconds for the keyboard, mouse, and shared (NKRO/media keys) interfaces
* `#define F_SCL 100000L`
* sets the I2C clock rate speed for keyboards using I2C. The default is `400000L`, except for keyboards using `split_common`, where the default is `100000L`.

@ -6,8 +6,10 @@
#include "rev1_led.h"
#elif KEYBOARD_keebio_iris_rev2
#include "rev2.h"
#else
#elif KEYBOARD_keebio_iris_rev3
#include "rev3.h"
#elif KEYBOARD_keebio_iris_rev4
#include "rev4.h"
#endif
#include "quantum.h"

@ -112,3 +112,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return true;
}
void encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) {
if (clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
}
else if (index == 1) {
if (clockwise) {
tap_code(KC_PGDN);
} else {
tap_code(KC_PGUP);
}
}
}

@ -0,0 +1,95 @@
/*
Copyright 2019 Danny Nguyen <danny@keeb.io>
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/>.
*/
#pragma once
/* USB Device descriptor parameter */
#define VENDOR_ID 0xCB10
#define PRODUCT_ID 0x1256
#define DEVICE_VER 0x0400
#define MANUFACTURER Keebio
#define PRODUCT Iris Keyboard
#define DESCRIPTION Split 50 percent ergonomic keyboard
/* key matrix size */
// Rows are doubled-up
#define MATRIX_ROWS 10
#define MATRIX_COLS 6
// wiring of each half
#define MATRIX_ROW_PINS { B1, F0, F5, F6, F7 }
#define MATRIX_COL_PINS { F1, F4, D3, D2, B7, D4 }
#define MATRIX_ROW_PINS_RIGHT { B1, B2, D2, F1, F4 }
#define MATRIX_COL_PINS_RIGHT { D4, D7, D3, B7, F0, B3 }
#define SPLIT_HAND_PIN D5
#define QMK_ESC_OUTPUT F1
#define QMK_ESC_INPUT B1
#define QMK_LED B0
#define QMK_SPEAKER C6
#define ENCODERS_PAD_A { B2 }
#define ENCODERS_PAD_B { B3 }
#define ENCODERS_PAD_A_RIGHT { F7 }
#define ENCODERS_PAD_B_RIGHT { F6 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
/* number of backlight levels */
// #define BACKLIGHT_LEVELS 3
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* serial.c configuration for split keyboard */
#define SOFT_SERIAL_PIN D0
/* 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 BACKLIGHT_PIN B5
#define BACKLIGHT_LEVELS 5
/* ws2812 RGB LED */
#define RGB_DI_PIN D6
#define RGBLED_NUM 12 // Number of LEDs
#define RGBLED_SPLIT { 6, 6 }
#define DYNAMIC_KEYMAP_LAYER_COUNT 4
// EEPROM usage
// TODO: refactor with new user EEPROM code (coming soon)
#define EEPROM_MAGIC 0x451F
#define EEPROM_MAGIC_ADDR 34
// Bump this every time we change what we store
// This will automatically reset the EEPROM with defaults
// and avoid loading invalid data from the EEPROM
#define EEPROM_VERSION 0x08
#define EEPROM_VERSION_ADDR 36
// Dynamic keymap starts after EEPROM version
#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
// Dynamic macro starts after dynamic keymaps (37+(4*10*6*2)) = (37+480)
#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 517
#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 507 // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
#define DYNAMIC_KEYMAP_MACRO_COUNT 16

@ -0,0 +1 @@
#include "rev4.h"

@ -0,0 +1,33 @@
#pragma once
#include "iris.h"
#include "quantum.h"
#ifdef USE_I2C
#include <stddef.h>
#ifdef __AVR__
#include <avr/io.h>
#include <avr/interrupt.h>
#endif
#endif
#define LAYOUT( \
LA1, LA2, LA3, LA4, LA5, LA6, RA6, RA5, RA4, RA3, RA2, RA1, \
LB1, LB2, LB3, LB4, LB5, LB6, RB6, RB5, RB4, RB3, RB2, RB1, \
LC1, LC2, LC3, LC4, LC5, LC6, RC6, RC5, RC4, RC3, RC2, RC1, \
LD1, LD2, LD3, LD4, LD5, LD6, LE6, RE6, RD6, RD5, RD4, RD3, RD2, RD1, \
LE3, LE4, LE5, RE5, RE4, RE3 \
) \
{ \
{ LA1, LA2, LA3, LA4, LA5, LA6 }, \
{ LB1, LB2, LB3, LB4, LB5, LB6 }, \
{ LC1, LC2, LC3, LC4, LC5, LC6 }, \
{ LD1, LD2, LD3, LD4, LD5, LD6 }, \
{ KC_NO, KC_NO, LE3, LE4, LE5, LE6 }, \
{ RA1, RA2, RA3, RA4, RA5, RA6 }, \
{ RB1, RB2, RB3, RB4, RB5, RB6 }, \
{ RC1, RC2, RC3, RC4, RC5, RC6 }, \
{ RD1, RD2, RD3, RD4, RD5, RD6 }, \
{ KC_NO, KC_NO, RE3, RE4, RE5, RE6 } \
}

@ -0,0 +1,3 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
ENCODER_ENABLE = yes

@ -9,6 +9,8 @@ F_USB = $(F_CPU)
# automatically (+60). See bootloader.mk for all options.
ifneq (, $(findstring rev3, $(KEYBOARD)))
BOOTLOADER = qmk-dfu
else ifneq (, $(findstring rev4, $(KEYBOARD)))
BOOTLOADER = qmk-dfu
else
BOOTLOADER = caterina
endif
@ -24,8 +26,8 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
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 = yes # Commands for debug and configuration
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls

@ -156,7 +156,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,-----------------------------------------------------------------------------------
* | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
* | | |MUSmod|Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|

@ -1,30 +1,12 @@
#include "ca66.h"
#include "config.h"
void bootmagic_lite(void)
{
// The lite version of TMK's bootmagic.
// 100% less potential for accidentally making the
// keyboard do stupid things.
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
writePinHigh(D1);
} else {
writePinLow(D1);
}
// We need multiple scans because debouncing can't be turned off.
matrix_scan();
wait_ms(DEBOUNCE);
matrix_scan();
// If the Esc (matrix 0,0) is held down on power up,
// reset the EEPROM valid state and jump to bootloader.
if ( matrix_get_row(0) & (1<<0) )
{
// Set the TMK/QMK EEPROM state as invalid.
eeconfig_disable();
// Jump to bootloader.
bootloader_jump();
}
}
void matrix_init_kb(void)
{
bootmagic_lite();
matrix_init_user();
led_set_user(usb_led);
}

@ -1,5 +1,4 @@
#ifndef CA66_H
#define CA66_H
#pragma once
#include "quantum.h"
@ -16,5 +15,3 @@
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
{ KC_NO, K401, K402, K403, K404, KC_NO, K406, KC_NO, K408, K409, K410, K411, K412, K413, K414 } \
}
#endif

@ -1,5 +1,4 @@
#ifndef CONFIG_H
#define CONFIG_H
#pragma once
#include "config_common.h"
@ -15,7 +14,7 @@
#define MATRIX_ROWS 5
#define MATRIX_COLS 15
/* key matrix pins */
/* key matrix pins 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14*/
#define MATRIX_ROW_PINS { F5, F4, F1, B0, B3 }
#define MATRIX_COL_PINS { F7, C7, C6, B6, B5, B4, D7, D6, D4, D5, D3, D2, F6, B7, E6 }
#define UNUSED_PINS
@ -45,5 +44,3 @@
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
#endif
#endif

@ -16,21 +16,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LSFT, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, RGB_HUI, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SAD, RGB_HUD, RGB_SAI),
};
void matrix_init_user(void) {
}
void matrix_scan_user(void) {
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
}
void led_set_user(uint8_t usb_led) {
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
DDRD |= (1 << 1); PORTD &= ~(1 << 1);
} else {
DDRD &= ~(1 << 1); PORTD &= ~(1 << 1);
}
}

@ -1,15 +1,16 @@
CA66
==
# CA66
Custom 65%
This QMK firmware handles both PCBs from Round 1 and from Round 2.
Keyboard Maintainer: QMK Community
Hardware Supported: CA66
Hardware Availability: [Play Keyboard](http://play-keyboard.store/)
Hardware Supported: CA66 R1/R2
Hardware Availability: [Play Keyboard](http://play-keyboard.store/)
Make example for this keyboard (after setting up your build environment):
make playkbtw/ca66:default
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
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).

@ -1,56 +1,18 @@
# 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
# Boot Section Size in *bytes*
OPT_DEFS += -DBOOTLOADER_SIZE=4096
BOOTLOADER = atmel-dfu
# Build Options
# comment out to disable the options.
#
BOOTMAGIC_ENABLE ?= no
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
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 ?= yes # Enable keyboard backlight functionality
AUDIO_ENABLE ?= no
RGBLIGHT_ENABLE ?= yes
BOOTMAGIC_ENABLE = lite
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
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 = yes # Enable keyboard backlight functionality
AUDIO_ENABLE = no
RGBLIGHT_ENABLE = yes

@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define USE_I2C
/* Common USB Device descriptor parameters */
#define VENDOR_ID 0xFEED
#define VENDOR_ID 0x1209
#define PRODUCT_ID 0xBEE5
#define MANUFACTURER Duckle29
#define PRODUCT Vitamins included

@ -1,20 +1,16 @@
#include QMK_KEYBOARD_H
#include "unicode.c"
enum layers {
_QWERTY,
_FN,
_LOWER,
_RAISE,
_UNICODE
_GAME
};
#define FN MO(_FN)
#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)
#define UNICODE MO(_UNICODE)
#define TGLOWER TG(_LOWER)
#define TGRAISE TG(_RAISE)
#define TGGAME TG(_GAME)
static bool is_ctl_pressed;
static bool is_esc_pressed;
@ -26,33 +22,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐
KC_ESC, KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_BSPC,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
KC_TAB, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN, KC_ENT,
KC_TAB, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM, KC_DOT, KC_UP ,KC_SLSH,
KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM, KC_DOT,KC_SLSH, KC_ENT,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
KC_LCTL,KC_LGUI,KC_LALT, FN , LOWER , KC_SPC, KC_SPC, RAISE ,UNICODE,KC_LEFT,KC_DOWN,KC_RGHT
KC_LCTL,KC_LGUI,KC_LALT,KC_RALT, LOWER , KC_SPC, KC_SPC, RAISE ,KC_LEFT,KC_DOWN, KC_UP ,KC_RGHT
// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
),
[_FN] = LAYOUT_ortho_4x12 (
// ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐
_______, 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_PGUP,_______,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
_______,_______,_______,_______,TGLOWER,_______,_______,TGRAISE,_______,KC_HOME,KC_PGDN, KC_END
// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
),
[_LOWER] = LAYOUT_ortho_4x12 (
// ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐
_______, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,_______,
KC_GRV, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,_______,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
_______,KC_VOLD,KC_MUTE,KC_VOLU,KC_HOME,KC_PGUP,KC_LBRC,KC_RBRC,KC_BSLS,KC_QUOT,_______,_______,
_______,KC_VOLD,KC_MUTE,KC_VOLU,_______, TGGAME,_______,_______,_______,_______,_______,_______,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
_______,KC_MPRV,KC_MPLY,KC_MNXT, KC_END,KC_PGDN,KC_MINS, KC_EQL,_______,_______,_______,_______,
_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,_______,_______,_______,_______,_______,_______,_______,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______
// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
@ -60,25 +44,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_RAISE] = LAYOUT_ortho_4x12 (
// ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐
KC_GRV, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_DEL,
KC_TILD,KC_EXLM, KC_AT ,KC_HASH, KC_DLR,KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN, KC_DEL,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
_______,_______,_______,_______,_______,_______,KC_LBRC,KC_RBRC,KC_BSLS,KC_QUOT,_______,_______,
KC_CAPS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 ,KC_MINS, KC_EQL,KC_LBRC,KC_RBRC,KC_BSLS,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
_______,_______,_______,_______,_______,_______,KC_MINS, KC_EQL,_______,_______,KC_VOLU,_______,
_______, KC_F7 , KC_F8 , KC_F9 , KC_F10, KC_F11, KC_F12,KC_UNDS,KC_PLUS,KC_LCBR,KC_RCBR,KC_PIPE,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_VOLD,KC_MUTE
_______,_______,_______,_______,TGLOWER,_______,_______,_______,KC_HOME,KC_PGDN,KC_PGUP, KC_END
// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
),
[_UNICODE] = LAYOUT_ortho_4x12 (
[_GAME] = LAYOUT_ortho_4x12 (
// ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐
UN_ESC, UN_Q , UN_W , UN_E , UN_R , UN_T , UN_Y , UN_U , UN_I , UN_O , UN_P ,UN_BSPC,
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
UN_TAB, UN_A , UN_S , UN_D , UN_F , UN_G , UN_H , UN_J , UN_K , UN_L ,UN_SCLN, UN_ENT,
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
_______, UN_Z , UN_X , UN_C , UN_V , UN_B , UN_N , UN_M ,UN_COMM, UN_DOT, UN_UP ,UN_SLSH,
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_UP ,_______,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
UC_M_LN,UC_M_WI,UC_M_OS,_______,_______,_______,_______,_______,_______,UN_DOWN, UN_UP ,UN_RGHT
_______,_______,_______,_______,_______,_______,_______,_______,KC_SLSH,KC_LEFT,KC_DOWN,KC_RGHT
// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
),
@ -95,7 +79,7 @@ uint32_t layer_state_set_user(uint32_t state) {
writePinLow(JOTANCK_LED1);
writePinHigh(JOTANCK_LED2);
break;
case _FN:
case _GAME:
writePinHigh(JOTANCK_LED1);
writePinHigh(JOTANCK_LED2);
break;
@ -116,10 +100,6 @@ void led_set_user(uint8_t usb_led) {
}
*/
void keyboard_post_init_user(void) {
set_unicode_input_mode(UC_LNX);
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_LCTL:

@ -1,7 +1,5 @@
# Jotix ortho 4x12 keymap
![keymap](https://i.imgur.com/hfCyDRD.png)
Tested on:
* Planck/rev4

@ -1 +0,0 @@
UNICODEMAP_ENABLE = yes

@ -1,200 +0,0 @@
enum unicode_names {
A_ACUTE,
A_ACUTEC,
E_ACUTE,
E_ACUTEC,
I_ACUTE,
I_ACUTEC,
O_ACUTE,
O_ACUTEC,
U_ACUTE,
U_ACUTEC,
U_DIERESIS,
U_DIERESISC,
N_TILDE,
N_TILDEC,
OPEN_EXCML,
OPEN_QUEST,
EURO,
POUND,
LEFT_ARROW,
DOWN_ARROW,
UP_ARROW,
RIGHT_ARROW,
LEFT_DARROW,
DOWN_DARROW,
UP_DARROW,
RIGHT_DAROW,
LEFT_DQUOT,
RGHT_DQUOT,
DEGREE,
DEGREE_CELCIUS,
SUPER_1,
SUPER_2,
SUPER_3,
ONE_HALF,
PER_MILLE,
PER_THOUS,
PILCROW,
COPYRIGHT,
REGISTERED,
MICRO,
MIDDLE_DOT,
BOX_CORNER_1,
BOX_CORNER_2,
BOX_CORNER_3,
BOX_CORNER_4,
BOX_HORIZONTAL,
BOX_VERTICAL,
BOX_CROSS,
BOX_UNION_1,
BOX_UNION_2,
BOX_UNION_3,
BOX_UNION_4,
DBOX_CORNER_1,
DBOX_CORNER_2,
DBOX_CORNER_3,
DBOX_CORNER_4,
DBOX_HORIZONT,
DBOX_VERTICAL,
DBOX_CROSS,
DBOX_UNION_1,
DBOX_UNION_2,
DBOX_UNION_3,
DBOX_UNION_4,
LESS_EQUAL,
MORE_EQUAL,
DIVISION,
SQUARE_ROOT,
CUBE_ROOT,
SPADE_SUIT,
TREBOL_SUIT,
HEART_SUIT,
DIAMOND_SUIT,
NARRAY_SUM,
INFINIT_SYMBOL,
DIAMOND_BULLET,
CIRCLE_BULLET,
SMILE_FACE,
SAD_FACE
};
const uint32_t PROGMEM unicode_map[] = {
[A_ACUTE] = 0x00E1,
[A_ACUTEC] = 0x00C1,
[E_ACUTE] = 0x00E9,
[E_ACUTEC] = 0x00C9,
[I_ACUTE] = 0x00ED,
[I_ACUTEC] = 0x00CD,
[O_ACUTE] = 0x00F3,
[O_ACUTEC] = 0x00D3,
[U_ACUTE] = 0x00FA,
[U_ACUTEC] = 0x00DA,
[U_DIERESIS] = 0x00FC,
[U_DIERESISC] = 0x00DC,
[N_TILDE] = 0x00F1,
[N_TILDEC] = 0x00D1,
[OPEN_EXCML] = 0x00A1,
[OPEN_QUEST] = 0x00BF,
[EURO] = 0x20AC,
[POUND] = 0x00A3,
[LEFT_ARROW] = 0x2190,
[DOWN_ARROW] = 0x2193,
[UP_ARROW] = 0x2191,
[RIGHT_ARROW] = 0x2192,
[LEFT_DARROW] = 0x21E6,
[DOWN_DARROW] = 0x21D3,
[UP_DARROW] = 0x21D1,
[RIGHT_DAROW] = 0x21D2,
[LEFT_DQUOT] = 0x00AB,
[RGHT_DQUOT] = 0x00BB,
[DEGREE] = 0x00B0,
[DEGREE_CELCIUS]= 0x2103,
[SUPER_1] = 0x00B9,
[SUPER_2] = 0x00B2,
[SUPER_3] = 0x00B3,
[ONE_HALF] = 0x00BD,
[PER_MILLE] = 0x0609,
[PER_THOUS] = 0x060A,
[PILCROW] = 0x00B6,
[COPYRIGHT] = 0x00A9,
[REGISTERED] = 0x00AE,
[MICRO] = 0x00B5,
[MIDDLE_DOT] = 0x00B7,
[BOX_CORNER_1] = 0x250C,
[BOX_CORNER_2] = 0x2510,
[BOX_CORNER_3] = 0x2514,
[BOX_CORNER_4] = 0x2518,
[BOX_HORIZONTAL]= 0x2500,
[BOX_VERTICAL] = 0x2502,
[BOX_CROSS] = 0x253C,
[BOX_UNION_1] = 0x2524,
[BOX_UNION_2] = 0x252C,
[BOX_UNION_3] = 0x2534,
[BOX_UNION_4] = 0x251C,
[DBOX_CORNER_1] = 0x2554,
[DBOX_CORNER_2] = 0x2557,
[DBOX_CORNER_3] = 0x255A,
[DBOX_CORNER_4] = 0x255D,
[DBOX_HORIZONT] = 0x2550,
[DBOX_VERTICAL] = 0x2551,
[DBOX_CROSS] = 0x256C,
[DBOX_UNION_1] = 0x2563,
[DBOX_UNION_2] = 0x2566,
[DBOX_UNION_3] = 0x2569,
[DBOX_UNION_4] = 0x2560,
[LESS_EQUAL] = 0x2264,
[MORE_EQUAL] = 0x2265,
[DIVISION] = 0x00F7,
[SQUARE_ROOT] = 0x221A,
[CUBE_ROOT] = 0x221B,
[SPADE_SUIT] = 0x2660,
[TREBOL_SUIT] = 0x2663,
[HEART_SUIT] = 0x2664,
[DIAMOND_SUIT] = 0x2665,
[NARRAY_SUM] = 0x2211,
[INFINIT_SYMBOL]= 0x221E,
[DIAMOND_BULLET]= 0x2B25,
[CIRCLE_BULLET] = 0x2981,
[SMILE_FACE] = 0x263A,
[SAD_FACE] = 0x2639
};
#define UN_ESC XP(DEGREE, DEGREE_CELCIUS)
#define UN_Q XP(OPEN_EXCML, SUPER_1)
#define UN_W XP(SUPER_2, SUPER_3)
#define UN_E XP(E_ACUTE, E_ACUTEC)
#define UN_R XP(EURO, ONE_HALF)
#define UN_T XP(PER_MILLE, PER_THOUS)
#define UN_Y XP(U_DIERESIS, U_DIERESISC)
#define UN_U XP(U_ACUTE, U_ACUTEC)
#define UN_I XP(I_ACUTE, I_ACUTEC)
#define UN_O XP(O_ACUTE, O_ACUTEC)
#define UN_P XP(POUND, PILCROW)
#define UN_BSPC XP(BOX_CROSS, DBOX_CROSS)
#define UN_TAB XP(DIAMOND_BULLET, CIRCLE_BULLET)
#define UN_A XP(A_ACUTE, A_ACUTEC)
#define UN_S XP(BOX_CORNER_1, DBOX_CORNER_1)
#define UN_D XP(BOX_CORNER_2, DBOX_CORNER_2)
#define UN_F XP(BOX_CORNER_3, DBOX_CORNER_3)
#define UN_G XP(BOX_CORNER_4, DBOX_CORNER_4)
#define UN_H XP(BOX_UNION_1, DBOX_UNION_1)
#define UN_J XP(BOX_UNION_2, DBOX_UNION_2)
#define UN_K XP(BOX_UNION_3, DBOX_UNION_3)
#define UN_L XP(BOX_UNION_4, DBOX_UNION_4)
#define UN_SCLN XP(BOX_HORIZONTAL, DBOX_HORIZONT)
#define UN_ENT XP(BOX_VERTICAL, DBOX_VERTICAL)
#define UN_Z XP(NARRAY_SUM, INFINIT_SYMBOL)
#define UN_X XP(SMILE_FACE, SAD_FACE)
#define UN_C XP(COPYRIGHT, REGISTERED)
#define UN_V XP(SPADE_SUIT, TREBOL_SUIT)
#define UN_B XP(HEART_SUIT, DIAMOND_SUIT)
#define UN_N XP(N_TILDE, N_TILDEC)
#define UN_M XP(MICRO, MIDDLE_DOT)
#define UN_COMM XP(LESS_EQUAL, LEFT_DQUOT)
#define UN_DOT XP(MORE_EQUAL, RGHT_DQUOT)
#define UN_SLSH XP(OPEN_QUEST, DIVISION)
#define UN_LEFT XP(LEFT_ARROW, LEFT_DARROW)
#define UN_DOWN XP(DOWN_ARROW, DOWN_DARROW)
#define UN_UP XP(UP_ARROW, UP_DARROW)
#define UN_RGHT XP(RIGHT_ARROW, RIGHT_DAROW)

@ -302,6 +302,10 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = {.Header = {.
# define USB_MAX_POWER_CONSUMPTION 500
#endif
#ifndef USB_POLLING_INTERVAL_MS
# define USB_POLLING_INTERVAL_MS 10
#endif
/*
* Configuration descriptors
*/
@ -324,7 +328,7 @@ const USB_Descriptor_Configuration_t PROGMEM
.InterfaceStrIndex = NO_DESCRIPTOR},
.Keyboard_HID = {.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, .HIDSpec = VERSION_BCD(1, 1, 1), .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = HID_DTYPE_Report, .HIDReportLength = sizeof(KeyboardReport)},
.Keyboard_INEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_IN | KEYBOARD_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = KEYBOARD_EPSIZE, .PollingIntervalMS = 0x0A},
.Keyboard_INEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_IN | KEYBOARD_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = KEYBOARD_EPSIZE, .PollingIntervalMS = USB_POLLING_INTERVAL_MS},
#endif
#if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP)
@ -333,7 +337,7 @@ const USB_Descriptor_Configuration_t PROGMEM
*/
.Mouse_Interface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .InterfaceNumber = MOUSE_INTERFACE, .AlternateSetting = 0x00, .TotalEndpoints = 1, .Class = HID_CSCP_HIDClass, .SubClass = HID_CSCP_BootSubclass, .Protocol = HID_CSCP_MouseBootProtocol, .InterfaceStrIndex = NO_DESCRIPTOR},
.Mouse_HID = {.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, .HIDSpec = VERSION_BCD(1, 1, 1), .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = HID_DTYPE_Report, .HIDReportLength = sizeof(MouseReport)},
.Mouse_INEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_IN | MOUSE_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = MOUSE_EPSIZE, .PollingIntervalMS = 0x0A},
.Mouse_INEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_IN | MOUSE_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = MOUSE_EPSIZE, .PollingIntervalMS = USB_POLLING_INTERVAL_MS},
#endif
#ifdef SHARED_EP_ENABLE
@ -354,7 +358,7 @@ const USB_Descriptor_Configuration_t PROGMEM
# endif
.InterfaceStrIndex = NO_DESCRIPTOR},
.Shared_HID = {.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, .HIDSpec = VERSION_BCD(1, 1, 1), .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = HID_DTYPE_Report, .HIDReportLength = sizeof(SharedReport)},
.Shared_INEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_IN | SHARED_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = SHARED_EPSIZE, .PollingIntervalMS = 0x0A},
.Shared_INEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_IN | SHARED_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = SHARED_EPSIZE, .PollingIntervalMS = USB_POLLING_INTERVAL_MS},
#endif
#ifdef RAW_ENABLE

@ -1,6 +1,10 @@
#!/bin/sh
# NOTE: This script uses tabs for indentation
errcho() {
echo "$@" >&2
}
USAGE="Usage: $0 [keyboard[:keymap[:target]]]"
# Check preconditions
@ -11,11 +15,11 @@ for arg; do
fi
done
if [ $# -gt 1 ]; then
echo "$USAGE" >&2
errcho "$USAGE"
exit 1
elif ! command -v docker >/dev/null 2>&1; then
echo "Error: docker not found" >&2
echo "See https://docs.docker.com/install/#supported-platforms for installation instructions" >&2
errcho "Error: docker not found"
errcho "See https://docs.docker.com/install/#supported-platforms for installation instructions"
exit 2
fi
@ -29,7 +33,7 @@ else
$1
EOF
if [ -n "$x" ]; then
echo "$USAGE" >&2
errcho "$USAGE"
exit 1
fi
fi
@ -37,9 +41,9 @@ if [ -n "$target" ]; then
if [ "$(uname)" = "Linux" ] || docker-machine active >/dev/null 2>&1; then
usb_args="--privileged -v /dev:/dev"
else
echo "Error: target requires docker-machine to work on your platform" >&2
echo "See http://gw.tnode.com/docker/docker-machine-with-usb-support-on-windows-macos" >&2
echo "Consider flashing with QMK Toolbox (https://github.com/qmk/qmk_toolbox) instead" >&2
errcho "Error: target requires docker-machine to work on your platform"
errcho "See http://gw.tnode.com/docker/docker-machine-with-usb-support-on-windows-macos"
errcho "Consider flashing with QMK Toolbox (https://github.com/qmk/qmk_toolbox) instead"
exit 3
fi
fi
@ -47,7 +51,7 @@ dir=$(pwd -W 2>/dev/null) || dir=$PWD # Use Windows path if on Windows
# Run container and build firmware
docker run --rm -it $usb_args \
-w /qmk_firmware/ \
-w /qmk_firmware \
-v "$dir":/qmk_firmware \
-e ALT_GET_KEYBOARDS=true \
-e SKIP_GIT="$SKIP_GIT" \