Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d597af9e1e | ||
|
|
03ed819717 | ||
|
|
141535c9db | ||
|
|
a92947fcdb | ||
|
|
cde5237a88 | ||
|
|
dc79792ab4 | ||
|
|
e6a9f700de | ||
|
|
0fdd37ee19 | ||
|
|
40e8d60ecd |
No files matched your search
@@ -51,7 +51,7 @@ On the display tab click 'Open stroke display'. With Plover disabled you should
|
|||||||
|
|
||||||
## Learning Stenography
|
## Learning Stenography
|
||||||
|
|
||||||
* [Learn Plover!](https://sites.google.com/site/ploverdoc/)
|
* [Learn Plover!](https://sites.google.com/site/learnplover/)
|
||||||
* [QWERTY Steno](http://qwertysteno.com/Home/)
|
* [QWERTY Steno](http://qwertysteno.com/Home/)
|
||||||
* [Steno Jig](https://joshuagrams.github.io/steno-jig/)
|
* [Steno Jig](https://joshuagrams.github.io/steno-jig/)
|
||||||
* More resources at the Plover [Learning Stenography](https://github.com/openstenoproject/plover/wiki/Learning-Stenography) wiki
|
* More resources at the Plover [Learning Stenography](https://github.com/openstenoproject/plover/wiki/Learning-Stenography) wiki
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ Note that this set-up has been tested on Ubuntu 16.04 only for the moment.
|
|||||||
|
|
||||||
# Prerequisites
|
# Prerequisites
|
||||||
## Build Environment
|
## Build Environment
|
||||||
Before starting, you must have followed the [Getting Started](news_getting_started.md) section of the Tutorial. In particular, you must have been able to build the firmware with [the `qmk compile` command](news_building_firmware#build-your-firmware).
|
Before starting, you must have followed the [Getting Started](newbs_getting_started.md) section of the Tutorial. In particular, you must have been able to build the firmware with [the `qmk compile` command](newbs_building_firmware.md#build-your-firmware).
|
||||||
|
|
||||||
## Java
|
## Java
|
||||||
Eclipse is a Java application, so you will need to install Java 8 or more recent to be able to run it. You may choose between the JRE or the JDK, the latter being useful if you intend to do Java development.
|
Eclipse is a Java application, so you will need to install Java 8 or more recent to be able to run it. You may choose between the JRE or the JDK, the latter being useful if you intend to do Java development.
|
||||||
|
|||||||
@@ -1,324 +0,0 @@
|
|||||||
/*
|
|
||||||
pins_arduino.h - Pin definition functions for Arduino
|
|
||||||
Part of Arduino - http://www.arduino.cc/
|
|
||||||
|
|
||||||
Copyright (c) 2007 David A. Mellis
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library 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
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General
|
|
||||||
Public License along with this library; if not, write to the
|
|
||||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
|
||||||
Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
$Id: wiring.h 249 2007-02-03 16:52:51Z mellis $
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef Pins_Arduino_h
|
|
||||||
#define Pins_Arduino_h
|
|
||||||
|
|
||||||
#include <avr/pgmspace.h>
|
|
||||||
|
|
||||||
// Workaround for wrong definitions in "iom32u4.h".
|
|
||||||
// This should be fixed in the AVR toolchain.
|
|
||||||
#undef UHCON
|
|
||||||
#undef UHINT
|
|
||||||
#undef UHIEN
|
|
||||||
#undef UHADDR
|
|
||||||
#undef UHFNUM
|
|
||||||
#undef UHFNUML
|
|
||||||
#undef UHFNUMH
|
|
||||||
#undef UHFLEN
|
|
||||||
#undef UPINRQX
|
|
||||||
#undef UPINTX
|
|
||||||
#undef UPNUM
|
|
||||||
#undef UPRST
|
|
||||||
#undef UPCONX
|
|
||||||
#undef UPCFG0X
|
|
||||||
#undef UPCFG1X
|
|
||||||
#undef UPSTAX
|
|
||||||
#undef UPCFG2X
|
|
||||||
#undef UPIENX
|
|
||||||
#undef UPDATX
|
|
||||||
#undef TCCR2A
|
|
||||||
#undef WGM20
|
|
||||||
#undef WGM21
|
|
||||||
#undef COM2B0
|
|
||||||
#undef COM2B1
|
|
||||||
#undef COM2A0
|
|
||||||
#undef COM2A1
|
|
||||||
#undef TCCR2B
|
|
||||||
#undef CS20
|
|
||||||
#undef CS21
|
|
||||||
#undef CS22
|
|
||||||
#undef WGM22
|
|
||||||
#undef FOC2B
|
|
||||||
#undef FOC2A
|
|
||||||
#undef TCNT2
|
|
||||||
#undef TCNT2_0
|
|
||||||
#undef TCNT2_1
|
|
||||||
#undef TCNT2_2
|
|
||||||
#undef TCNT2_3
|
|
||||||
#undef TCNT2_4
|
|
||||||
#undef TCNT2_5
|
|
||||||
#undef TCNT2_6
|
|
||||||
#undef TCNT2_7
|
|
||||||
#undef OCR2A
|
|
||||||
#undef OCR2_0
|
|
||||||
#undef OCR2_1
|
|
||||||
#undef OCR2_2
|
|
||||||
#undef OCR2_3
|
|
||||||
#undef OCR2_4
|
|
||||||
#undef OCR2_5
|
|
||||||
#undef OCR2_6
|
|
||||||
#undef OCR2_7
|
|
||||||
#undef OCR2B
|
|
||||||
#undef OCR2_0
|
|
||||||
#undef OCR2_1
|
|
||||||
#undef OCR2_2
|
|
||||||
#undef OCR2_3
|
|
||||||
#undef OCR2_4
|
|
||||||
#undef OCR2_5
|
|
||||||
#undef OCR2_6
|
|
||||||
#undef OCR2_7
|
|
||||||
|
|
||||||
#define NUM_DIGITAL_PINS 30
|
|
||||||
#define NUM_ANALOG_INPUTS 12
|
|
||||||
|
|
||||||
#define TX_RX_LED_INIT DDRD |= (1 << 5), DDRB |= (1 << 0)
|
|
||||||
#define TXLED0 PORTD |= (1 << 5)
|
|
||||||
#define TXLED1 PORTD &= ~(1 << 5)
|
|
||||||
#define RXLED0 PORTB |= (1 << 0)
|
|
||||||
#define RXLED1 PORTB &= ~(1 << 0)
|
|
||||||
|
|
||||||
static const uint8_t SDA = 2;
|
|
||||||
static const uint8_t SCL = 3;
|
|
||||||
#define LED_BUILTIN 13
|
|
||||||
|
|
||||||
// Map SPI port to 'new' pins D14..D17
|
|
||||||
static const uint8_t SS = 17;
|
|
||||||
static const uint8_t MOSI = 16;
|
|
||||||
static const uint8_t MISO = 14;
|
|
||||||
static const uint8_t SCK = 15;
|
|
||||||
|
|
||||||
// Mapping of analog pins as digital I/O
|
|
||||||
// A6-A11 share with digital pins
|
|
||||||
static const uint8_t ADC0 = 18;
|
|
||||||
static const uint8_t ADC1 = 19;
|
|
||||||
static const uint8_t ADC2 = 20;
|
|
||||||
static const uint8_t ADC3 = 21;
|
|
||||||
static const uint8_t ADC4 = 22;
|
|
||||||
static const uint8_t ADC5 = 23;
|
|
||||||
static const uint8_t ADC6 = 24; // D4
|
|
||||||
static const uint8_t ADC7 = 25; // D6
|
|
||||||
static const uint8_t ADC8 = 26; // D8
|
|
||||||
static const uint8_t ADC9 = 27; // D9
|
|
||||||
static const uint8_t ADC10 = 28; // D10
|
|
||||||
static const uint8_t ADC11 = 29; // D12
|
|
||||||
|
|
||||||
#define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0))
|
|
||||||
#define digitalPinToPCICRbit(p) 0
|
|
||||||
#define digitalPinToPCMSK(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCMSK0) : ((uint8_t *)0))
|
|
||||||
#define digitalPinToPCMSKbit(p) (((p) >= 8 && (p) <= 11) ? (p)-4 : ((p) == 14 ? 3 : ((p) == 15 ? 1 : ((p) == 16 ? 2 : ((p) == 17 ? 0 : (p - A8 + 4))))))
|
|
||||||
|
|
||||||
// __AVR_ATmega32U4__ has an unusual mapping of pins to channels
|
|
||||||
extern const uint8_t PROGMEM analog_pin_to_channel_PGM[];
|
|
||||||
#define analogPinToChannel(P) (pgm_read_byte(analog_pin_to_channel_PGM + (P)))
|
|
||||||
|
|
||||||
#define digitalPinToInterrupt(p) ((p) == 0 ? 2 : ((p) == 1 ? 3 : ((p) == 2 ? 1 : ((p) == 3 ? 0 : ((p) == 7 ? 4 : NOT_AN_INTERRUPT)))))
|
|
||||||
|
|
||||||
#ifdef ARDUINO_MAIN
|
|
||||||
|
|
||||||
// On the Arduino board, digital pins are also used
|
|
||||||
// for the analog output (software PWM). Analog input
|
|
||||||
// pins are a separate set.
|
|
||||||
|
|
||||||
// ATMEL ATMEGA32U4 / ARDUINO LEONARDO
|
|
||||||
//
|
|
||||||
// D0 PD2 RXD1/INT2
|
|
||||||
// D1 PD3 TXD1/INT3
|
|
||||||
// D2 PD1 SDA SDA/INT1
|
|
||||||
// D3# PD0 PWM8/SCL OC0B/SCL/INT0
|
|
||||||
// D4 A6 PD4 ADC8
|
|
||||||
// D5# PC6 ??? OC3A/#OC4A
|
|
||||||
// D6# A7 PD7 FastPWM #OC4D/ADC10
|
|
||||||
// D7 PE6 INT6/AIN0
|
|
||||||
//
|
|
||||||
// D8 A8 PB4 ADC11/PCINT4
|
|
||||||
// D9# A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5
|
|
||||||
// D10# A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6
|
|
||||||
// D11# PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7
|
|
||||||
// D12 A11 PD6 T1/#OC4D/ADC9
|
|
||||||
// D13# PC7 PWM10 CLK0/OC4A
|
|
||||||
//
|
|
||||||
// A0 D18 PF7 ADC7
|
|
||||||
// A1 D19 PF6 ADC6
|
|
||||||
// A2 D20 PF5 ADC5
|
|
||||||
// A3 D21 PF4 ADC4
|
|
||||||
// A4 D22 PF1 ADC1
|
|
||||||
// A5 D23 PF0 ADC0
|
|
||||||
//
|
|
||||||
// New pins D14..D17 to map SPI port to digital pins
|
|
||||||
//
|
|
||||||
// MISO D14 PB3 MISO,PCINT3
|
|
||||||
// SCK D15 PB1 SCK,PCINT1
|
|
||||||
// MOSI D16 PB2 MOSI,PCINT2
|
|
||||||
// SS D17 PB0 RXLED,SS/PCINT0
|
|
||||||
//
|
|
||||||
// Connected LEDs on board for TX and RX
|
|
||||||
// TXLED D24 PD5 XCK1
|
|
||||||
// RXLED D17 PB0
|
|
||||||
// HWB PE2 HWB
|
|
||||||
|
|
||||||
// these arrays map port names (e.g. port B) to the
|
|
||||||
// appropriate addresses for various functions (e.g. reading
|
|
||||||
// and writing)
|
|
||||||
const uint16_t PROGMEM port_to_mode_PGM[] = {
|
|
||||||
NOT_A_PORT, NOT_A_PORT, (uint16_t)&DDRB, (uint16_t)&DDRC, (uint16_t)&DDRD, (uint16_t)&DDRE, (uint16_t)&DDRF,
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM port_to_output_PGM[] = {
|
|
||||||
NOT_A_PORT, NOT_A_PORT, (uint16_t)&PORTB, (uint16_t)&PORTC, (uint16_t)&PORTD, (uint16_t)&PORTE, (uint16_t)&PORTF,
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM port_to_input_PGM[] = {
|
|
||||||
NOT_A_PORT, NOT_A_PORT, (uint16_t)&PINB, (uint16_t)&PINC, (uint16_t)&PIND, (uint16_t)&PINE, (uint16_t)&PINF,
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
|
|
||||||
PD, // D0 - PD2
|
|
||||||
PD, // D1 - PD3
|
|
||||||
PD, // D2 - PD1
|
|
||||||
PD, // D3 - PD0
|
|
||||||
PD, // D4 - PD4
|
|
||||||
PC, // D5 - PC6
|
|
||||||
PD, // D6 - PD7
|
|
||||||
PE, // D7 - PE6
|
|
||||||
|
|
||||||
PB, // D8 - PB4
|
|
||||||
PB, // D9 - PB5
|
|
||||||
PB, // D10 - PB6
|
|
||||||
PB, // D11 - PB7
|
|
||||||
PD, // D12 - PD6
|
|
||||||
PC, // D13 - PC7
|
|
||||||
|
|
||||||
PB, // D14 - MISO - PB3
|
|
||||||
PB, // D15 - SCK - PB1
|
|
||||||
PB, // D16 - MOSI - PB2
|
|
||||||
PB, // D17 - SS - PB0
|
|
||||||
|
|
||||||
PF, // D18 - A0 - PF7
|
|
||||||
PF, // D19 - A1 - PF6
|
|
||||||
PF, // D20 - A2 - PF5
|
|
||||||
PF, // D21 - A3 - PF4
|
|
||||||
PF, // D22 - A4 - PF1
|
|
||||||
PF, // D23 - A5 - PF0
|
|
||||||
|
|
||||||
PD, // D24 - PD5
|
|
||||||
PD, // D25 / D6 - A7 - PD7
|
|
||||||
PB, // D26 / D8 - A8 - PB4
|
|
||||||
PB, // D27 / D9 - A9 - PB5
|
|
||||||
PB, // D28 / D10 - A10 - PB6
|
|
||||||
PD, // D29 / D12 - A11 - PD6
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
|
|
||||||
_BV(2), // D0 - PD2
|
|
||||||
_BV(3), // D1 - PD3
|
|
||||||
_BV(1), // D2 - PD1
|
|
||||||
_BV(0), // D3 - PD0
|
|
||||||
_BV(4), // D4 - PD4
|
|
||||||
_BV(6), // D5 - PC6
|
|
||||||
_BV(7), // D6 - PD7
|
|
||||||
_BV(6), // D7 - PE6
|
|
||||||
|
|
||||||
_BV(4), // D8 - PB4
|
|
||||||
_BV(5), // D9 - PB5
|
|
||||||
_BV(6), // D10 - PB6
|
|
||||||
_BV(7), // D11 - PB7
|
|
||||||
_BV(6), // D12 - PD6
|
|
||||||
_BV(7), // D13 - PC7
|
|
||||||
|
|
||||||
_BV(3), // D14 - MISO - PB3
|
|
||||||
_BV(1), // D15 - SCK - PB1
|
|
||||||
_BV(2), // D16 - MOSI - PB2
|
|
||||||
_BV(0), // D17 - SS - PB0
|
|
||||||
|
|
||||||
_BV(7), // D18 - A0 - PF7
|
|
||||||
_BV(6), // D19 - A1 - PF6
|
|
||||||
_BV(5), // D20 - A2 - PF5
|
|
||||||
_BV(4), // D21 - A3 - PF4
|
|
||||||
_BV(1), // D22 - A4 - PF1
|
|
||||||
_BV(0), // D23 - A5 - PF0
|
|
||||||
|
|
||||||
_BV(5), // D24 - PD5
|
|
||||||
_BV(7), // D25 / D6 - A7 - PD7
|
|
||||||
_BV(4), // D26 / D8 - A8 - PB4
|
|
||||||
_BV(5), // D27 / D9 - A9 - PB5
|
|
||||||
_BV(6), // D28 / D10 - A10 - PB6
|
|
||||||
_BV(6), // D29 / D12 - A11 - PD6
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
|
|
||||||
NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, TIMER0B, /* 3 */
|
|
||||||
NOT_ON_TIMER, TIMER3A, /* 5 */
|
|
||||||
TIMER4D, /* 6 */
|
|
||||||
NOT_ON_TIMER,
|
|
||||||
|
|
||||||
NOT_ON_TIMER, TIMER1A, /* 9 */
|
|
||||||
TIMER1B, /* 10 */
|
|
||||||
TIMER0A, /* 11 */
|
|
||||||
|
|
||||||
NOT_ON_TIMER, TIMER4A, /* 13 */
|
|
||||||
|
|
||||||
NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER,
|
|
||||||
|
|
||||||
NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER,
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint8_t PROGMEM analog_pin_to_channel_PGM[] = {
|
|
||||||
7, // A0 PF7 ADC7
|
|
||||||
6, // A1 PF6 ADC6
|
|
||||||
5, // A2 PF5 ADC5
|
|
||||||
4, // A3 PF4 ADC4
|
|
||||||
1, // A4 PF1 ADC1
|
|
||||||
0, // A5 PF0 ADC0
|
|
||||||
8, // A6 D4 PD4 ADC8
|
|
||||||
10, // A7 D6 PD7 ADC10
|
|
||||||
11, // A8 D8 PB4 ADC11
|
|
||||||
12, // A9 D9 PB5 ADC12
|
|
||||||
13, // A10 D10 PB6 ADC13
|
|
||||||
9 // A11 D12 PD6 ADC9
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* ARDUINO_MAIN */
|
|
||||||
|
|
||||||
// These serial port names are intended to allow libraries and architecture-neutral
|
|
||||||
// sketches to automatically default to the correct port name for a particular type
|
|
||||||
// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
|
|
||||||
// the first hardware serial port whose RX/TX pins are not dedicated to another use.
|
|
||||||
//
|
|
||||||
// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor
|
|
||||||
//
|
|
||||||
// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial
|
|
||||||
//
|
|
||||||
// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library
|
|
||||||
//
|
|
||||||
// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins.
|
|
||||||
//
|
|
||||||
// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX
|
|
||||||
// pins are NOT connected to anything by default.
|
|
||||||
#define SERIAL_PORT_MONITOR Serial
|
|
||||||
#define SERIAL_PORT_USBVIRTUAL Serial
|
|
||||||
#define SERIAL_PORT_HARDWARE Serial1
|
|
||||||
#define SERIAL_PORT_HARDWARE_OPEN Serial1
|
|
||||||
|
|
||||||
#endif /* Pins_Arduino_h */
|
|
||||||
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "split_util.h"
|
#include "split_util.h"
|
||||||
#include "pro_micro.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#ifdef USE_MATRIX_I2C
|
#ifdef USE_MATRIX_I2C
|
||||||
# include "i2c.h"
|
# include "i2c.h"
|
||||||
@@ -102,9 +102,10 @@ void matrix_init(void)
|
|||||||
unselect_rows();
|
unselect_rows();
|
||||||
init_cols();
|
init_cols();
|
||||||
|
|
||||||
TX_RX_LED_INIT;
|
setPinOutput(B0);
|
||||||
TXLED0;
|
setPinOutput(D5);
|
||||||
RXLED0;
|
writePinHigh(B0);
|
||||||
|
writePinHigh(D5);
|
||||||
|
|
||||||
// initialize matrix state: all keys off
|
// initialize matrix state: all keys off
|
||||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||||
@@ -189,10 +190,10 @@ int serial_transaction(int master_changed) {
|
|||||||
int ret=serial_update_buffers();
|
int ret=serial_update_buffers();
|
||||||
#endif
|
#endif
|
||||||
if (ret ) {
|
if (ret ) {
|
||||||
if(ret==2) RXLED1;
|
if(ret==2) writePinLow(B0);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
RXLED0;
|
writePinHigh(B0);
|
||||||
memcpy(&matrix[slaveOffset],
|
memcpy(&matrix[slaveOffset],
|
||||||
(void *)serial_slave_buffer, SERIAL_SLAVE_BUFFER_LENGTH);
|
(void *)serial_slave_buffer, SERIAL_SLAVE_BUFFER_LENGTH);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -241,7 +242,7 @@ uint8_t matrix_master_scan(void) {
|
|||||||
if( serial_transaction(mchanged) ) {
|
if( serial_transaction(mchanged) ) {
|
||||||
#endif
|
#endif
|
||||||
// turn on the indicator led when halves are disconnected
|
// turn on the indicator led when halves are disconnected
|
||||||
TXLED1;
|
writePinLow(D5);
|
||||||
|
|
||||||
error_count++;
|
error_count++;
|
||||||
|
|
||||||
@@ -254,7 +255,7 @@ uint8_t matrix_master_scan(void) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// turn off the indicator led on no error
|
// turn off the indicator led on no error
|
||||||
TXLED0;
|
writePinHigh(D5);
|
||||||
error_count = 0;
|
error_count = 0;
|
||||||
}
|
}
|
||||||
matrix_scan_quantum();
|
matrix_scan_quantum();
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define TAPPING_TERM 300
|
#define TAPPING_TERM 200
|
||||||
|
|
||||||
#define MASTER_LEFT
|
#define MASTER_LEFT
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "split_util.h"
|
#include "split_util.h"
|
||||||
#include "pro_micro.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#ifdef USE_MATRIX_I2C
|
#ifdef USE_MATRIX_I2C
|
||||||
# include "i2c.h"
|
# include "i2c.h"
|
||||||
@@ -96,37 +96,38 @@ uint8_t matrix_cols(void)
|
|||||||
void tx_rx_leds_init(void)
|
void tx_rx_leds_init(void)
|
||||||
{
|
{
|
||||||
#ifndef NO_DEBUG_LEDS
|
#ifndef NO_DEBUG_LEDS
|
||||||
TX_RX_LED_INIT;
|
setPinOutput(B0);
|
||||||
TXLED0;
|
setPinOutput(D5);
|
||||||
RXLED0;
|
writePinHigh(B0);
|
||||||
|
writePinHigh(D5);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void tx_led_on(void)
|
void tx_led_on(void)
|
||||||
{
|
{
|
||||||
#ifndef NO_DEBUG_LEDS
|
#ifndef NO_DEBUG_LEDS
|
||||||
TXLED1;
|
writePinLow(D5);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void tx_led_off(void)
|
void tx_led_off(void)
|
||||||
{
|
{
|
||||||
#ifndef NO_DEBUG_LEDS
|
#ifndef NO_DEBUG_LEDS
|
||||||
TXLED0;
|
writePinHigh(D5);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void rx_led_on(void)
|
void rx_led_on(void)
|
||||||
{
|
{
|
||||||
#ifndef NO_DEBUG_LEDS
|
#ifndef NO_DEBUG_LEDS
|
||||||
RXLED1;
|
writePinLow(B0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void rx_led_off(void)
|
void rx_led_off(void)
|
||||||
{
|
{
|
||||||
#ifndef NO_DEBUG_LEDS
|
#ifndef NO_DEBUG_LEDS
|
||||||
RXLED0;
|
writePinHigh(B0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+17
-22
@@ -29,24 +29,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "split_util.h"
|
#include "split_util.h"
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
#include "serial.h"
|
#include "serial.h"
|
||||||
|
|
||||||
// from pro_micro.h
|
|
||||||
#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0)
|
|
||||||
|
|
||||||
#ifndef DISABLE_PROMICRO_LEDs
|
|
||||||
#define TXLED0 PORTD |= (1<<5)
|
|
||||||
#define TXLED1 PORTD &= ~(1<<5)
|
|
||||||
#define RXLED0 PORTB |= (1<<0)
|
|
||||||
#define RXLED1 PORTB &= ~(1<<0)
|
|
||||||
#else
|
|
||||||
#define TXLED0
|
|
||||||
#define TXLED1
|
|
||||||
#define RXLED0
|
|
||||||
#define RXLED1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef DEBOUNCE
|
#ifndef DEBOUNCE
|
||||||
# define DEBOUNCE 5
|
# define DEBOUNCE 5
|
||||||
#endif
|
#endif
|
||||||
@@ -108,11 +94,12 @@ void matrix_init(void) {
|
|||||||
unselect_rows();
|
unselect_rows();
|
||||||
init_cols();
|
init_cols();
|
||||||
|
|
||||||
TX_RX_LED_INIT;
|
setPinOutput(B0);
|
||||||
|
setPinOutput(D5);
|
||||||
|
|
||||||
#ifdef DISABLE_PROMICRO_LEDs
|
#ifdef DISABLE_PROMICRO_LEDs
|
||||||
PORTD |= (1<<5);
|
writePinHigh(B0);
|
||||||
PORTB |= (1<<0);
|
writePinHigh(D5);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// initialize matrix state: all keys off
|
// initialize matrix state: all keys off
|
||||||
@@ -158,10 +145,14 @@ int serial_transaction(void) {
|
|||||||
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
||||||
int ret=serial_update_buffers();
|
int ret=serial_update_buffers();
|
||||||
if (ret ) {
|
if (ret ) {
|
||||||
if(ret==2)RXLED1;
|
#ifndef DISABLE_PROMICRO_LEDs
|
||||||
|
if(ret==2) writePinLow(B0);
|
||||||
|
#endif
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
RXLED0;
|
#ifndef DISABLE_PROMICRO_LEDs
|
||||||
|
writePinHigh(B0);
|
||||||
|
#endif
|
||||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||||
matrix[slaveOffset+i] = serial_slave_buffer[i];
|
matrix[slaveOffset+i] = serial_slave_buffer[i];
|
||||||
}
|
}
|
||||||
@@ -197,8 +188,10 @@ uint8_t matrix_master_scan(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( serial_transaction() ) {
|
if( serial_transaction() ) {
|
||||||
|
#ifndef DISABLE_PROMICRO_LEDs
|
||||||
// turn on the indicator led when halves are disconnected
|
// turn on the indicator led when halves are disconnected
|
||||||
TXLED1;
|
writePinLow(D5);
|
||||||
|
#endif
|
||||||
|
|
||||||
error_count++;
|
error_count++;
|
||||||
|
|
||||||
@@ -210,8 +203,10 @@ uint8_t matrix_master_scan(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
#ifndef DISABLE_PROMICRO_LEDs
|
||||||
// turn off the indicator led on no error
|
// turn off the indicator led on no error
|
||||||
TXLED0;
|
writePinHigh(D5);
|
||||||
|
#endif
|
||||||
error_count = 0;
|
error_count = 0;
|
||||||
}
|
}
|
||||||
matrix_scan_quantum();
|
matrix_scan_quantum();
|
||||||
|
|||||||
@@ -29,8 +29,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "split_util.h"
|
#include "split_util.h"
|
||||||
#include "pro_micro.h"
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
#ifdef USE_I2C
|
#ifdef USE_I2C
|
||||||
# include "i2c.h"
|
# include "i2c.h"
|
||||||
@@ -100,7 +100,8 @@ void matrix_init(void)
|
|||||||
unselect_rows();
|
unselect_rows();
|
||||||
init_cols();
|
init_cols();
|
||||||
|
|
||||||
TX_RX_LED_INIT;
|
setPinOutput(B0);
|
||||||
|
setPinOutput(D5);
|
||||||
|
|
||||||
// initialize matrix state: all keys off
|
// initialize matrix state: all keys off
|
||||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||||
@@ -201,7 +202,7 @@ uint8_t matrix_scan(void)
|
|||||||
if( serial_transaction() ) {
|
if( serial_transaction() ) {
|
||||||
#endif
|
#endif
|
||||||
// turn on the indicator led when halves are disconnected
|
// turn on the indicator led when halves are disconnected
|
||||||
TXLED1;
|
writePinLow(D5);
|
||||||
|
|
||||||
error_count++;
|
error_count++;
|
||||||
|
|
||||||
@@ -214,7 +215,7 @@ uint8_t matrix_scan(void)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// turn off the indicator led on no error
|
// turn off the indicator led on no error
|
||||||
TXLED0;
|
writePinHigh(D5);
|
||||||
error_count = 0;
|
error_count = 0;
|
||||||
}
|
}
|
||||||
matrix_scan_quantum();
|
matrix_scan_quantum();
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "split_util.h"
|
#include "split_util.h"
|
||||||
#include "pro_micro.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#ifdef USE_MATRIX_I2C
|
#ifdef USE_MATRIX_I2C
|
||||||
# include "i2c.h"
|
# include "i2c.h"
|
||||||
@@ -99,9 +99,10 @@ void matrix_init(void)
|
|||||||
unselect_rows();
|
unselect_rows();
|
||||||
init_cols();
|
init_cols();
|
||||||
|
|
||||||
TX_RX_LED_INIT;
|
setPinOutput(B0);
|
||||||
TXLED0;
|
setPinOutput(D5);
|
||||||
RXLED0;
|
writePinHigh(B0);
|
||||||
|
writePinHigh(D5);
|
||||||
|
|
||||||
// initialize matrix state: all keys off
|
// initialize matrix state: all keys off
|
||||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||||
@@ -180,10 +181,10 @@ int serial_transaction(void) {
|
|||||||
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
||||||
int ret=serial_update_buffers();
|
int ret=serial_update_buffers();
|
||||||
if (ret ) {
|
if (ret ) {
|
||||||
if(ret==2)RXLED1;
|
if(ret==2) writePinLow(B0);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
RXLED0;
|
writePinHigh(B0);
|
||||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||||
matrix[slaveOffset+i] = serial_slave_buffer[i];
|
matrix[slaveOffset+i] = serial_slave_buffer[i];
|
||||||
}
|
}
|
||||||
@@ -235,7 +236,7 @@ uint8_t matrix_master_scan(void) {
|
|||||||
if( serial_transaction() ) {
|
if( serial_transaction() ) {
|
||||||
#endif
|
#endif
|
||||||
// turn on the indicator led when halves are disconnected
|
// turn on the indicator led when halves are disconnected
|
||||||
TXLED1;
|
writePinLow(D5);
|
||||||
|
|
||||||
error_count++;
|
error_count++;
|
||||||
|
|
||||||
@@ -248,7 +249,7 @@ uint8_t matrix_master_scan(void) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// turn off the indicator led on no error
|
// turn off the indicator led on no error
|
||||||
TXLED0;
|
writePinHigh(D5);
|
||||||
error_count = 0;
|
error_count = 0;
|
||||||
}
|
}
|
||||||
matrix_scan_quantum();
|
matrix_scan_quantum();
|
||||||
|
|||||||
@@ -29,8 +29,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "split_util.h"
|
#include "split_util.h"
|
||||||
#include "pro_micro.h"
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
#ifdef USE_MATRIX_I2C
|
#ifdef USE_MATRIX_I2C
|
||||||
# include "i2c.h"
|
# include "i2c.h"
|
||||||
@@ -100,7 +100,8 @@ void matrix_init(void)
|
|||||||
unselect_rows();
|
unselect_rows();
|
||||||
init_cols();
|
init_cols();
|
||||||
|
|
||||||
TX_RX_LED_INIT;
|
setPinOutput(B0);
|
||||||
|
setPinOutput(D5);
|
||||||
|
|
||||||
// initialize matrix state: all keys off
|
// initialize matrix state: all keys off
|
||||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||||
@@ -201,7 +202,7 @@ uint8_t matrix_scan(void)
|
|||||||
if( serial_transaction() ) {
|
if( serial_transaction() ) {
|
||||||
#endif
|
#endif
|
||||||
// turn on the indicator led when halves are disconnected
|
// turn on the indicator led when halves are disconnected
|
||||||
TXLED1;
|
writePinLow(D5);
|
||||||
|
|
||||||
error_count++;
|
error_count++;
|
||||||
|
|
||||||
@@ -214,7 +215,7 @@ uint8_t matrix_scan(void)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// turn off the indicator led on no error
|
// turn off the indicator led on no error
|
||||||
TXLED0;
|
writePinHigh(D5);
|
||||||
error_count = 0;
|
error_count = 0;
|
||||||
}
|
}
|
||||||
matrix_scan_quantum();
|
matrix_scan_quantum();
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "split_util.h"
|
#include "split_util.h"
|
||||||
#include "pro_micro.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#ifdef USE_MATRIX_I2C
|
#ifdef USE_MATRIX_I2C
|
||||||
# include "i2c.h"
|
# include "i2c.h"
|
||||||
@@ -100,9 +100,10 @@ void matrix_init(void)
|
|||||||
unselect_rows();
|
unselect_rows();
|
||||||
init_cols();
|
init_cols();
|
||||||
|
|
||||||
TX_RX_LED_INIT;
|
setPinOutput(B0);
|
||||||
TXLED0;
|
setPinOutput(D5);
|
||||||
RXLED0;
|
writePinHigh(B0);
|
||||||
|
writePinHigh(D5);
|
||||||
|
|
||||||
// initialize matrix state: all keys off
|
// initialize matrix state: all keys off
|
||||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||||
@@ -185,10 +186,10 @@ int serial_transaction(int master_changed) {
|
|||||||
int ret=serial_update_buffers();
|
int ret=serial_update_buffers();
|
||||||
#endif
|
#endif
|
||||||
if (ret ) {
|
if (ret ) {
|
||||||
if(ret==2) RXLED1;
|
if(ret==2) writePinLow(B0);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
RXLED0;
|
writePinHigh(B0);
|
||||||
memcpy(&matrix[slaveOffset],
|
memcpy(&matrix[slaveOffset],
|
||||||
(void *)serial_slave_buffer, sizeof(serial_slave_buffer));
|
(void *)serial_slave_buffer, sizeof(serial_slave_buffer));
|
||||||
return 0;
|
return 0;
|
||||||
@@ -239,7 +240,7 @@ uint8_t matrix_master_scan(void) {
|
|||||||
if( serial_transaction(mchanged) ) {
|
if( serial_transaction(mchanged) ) {
|
||||||
#endif
|
#endif
|
||||||
// turn on the indicator led when halves are disconnected
|
// turn on the indicator led when halves are disconnected
|
||||||
TXLED1;
|
writePinLow(D5);
|
||||||
|
|
||||||
error_count++;
|
error_count++;
|
||||||
|
|
||||||
@@ -252,7 +253,7 @@ uint8_t matrix_master_scan(void) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// turn off the indicator led on no error
|
// turn off the indicator led on no error
|
||||||
TXLED0;
|
writePinHigh(D5);
|
||||||
error_count = 0;
|
error_count = 0;
|
||||||
}
|
}
|
||||||
matrix_scan_quantum();
|
matrix_scan_quantum();
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ MCU = atmega32u4
|
|||||||
# QMK DFU qmk-dfu
|
# QMK DFU qmk-dfu
|
||||||
# ATmega32A bootloadHID
|
# ATmega32A bootloadHID
|
||||||
# ATmega328P USBasp
|
# ATmega328P USBasp
|
||||||
BOOTLOADER = atmel-dfu
|
BOOTLOADER = caterina
|
||||||
|
|
||||||
# Build Options
|
# Build Options
|
||||||
# change yes to no to disable
|
# change yes to no to disable
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define TAPPING_TERM 300
|
#define TAPPING_TERM 200
|
||||||
|
|
||||||
#ifdef OLED_DRIVER_ENABLE
|
#ifdef OLED_DRIVER_ENABLE
|
||||||
#define OLED_DISPLAY_128X64
|
#define OLED_DISPLAY_128X64
|
||||||
|
|||||||
@@ -1,84 +0,0 @@
|
|||||||
/* Copyright 2020 ninjonas
|
|
||||||
*
|
|
||||||
* 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 "ninjonas.h"
|
|
||||||
|
|
||||||
#ifdef ENCODER_ENABLE
|
|
||||||
void encoder_update_user(uint8_t index, bool clockwise) {
|
|
||||||
if (index == 0) {
|
|
||||||
switch (get_highest_layer(layer_state)) {
|
|
||||||
case _LOWER:
|
|
||||||
if (clockwise) {
|
|
||||||
tap_code16(SGUI(KC_TAB));
|
|
||||||
} else {
|
|
||||||
tap_code16(LGUI(KC_TAB));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case _RAISE:
|
|
||||||
if (clockwise) {
|
|
||||||
tap_code(KC_PGUP);
|
|
||||||
} else {
|
|
||||||
tap_code(KC_PGDN);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case _ADJUST:
|
|
||||||
if (clockwise) {
|
|
||||||
rgblight_increase_hue();
|
|
||||||
} else {
|
|
||||||
rgblight_decrease_hue();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if (clockwise) {
|
|
||||||
tap_code(KC_BRIU);
|
|
||||||
} else {
|
|
||||||
tap_code(KC_BRID);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if (index == 1) {
|
|
||||||
switch (get_highest_layer(layer_state)) {
|
|
||||||
case _LOWER:
|
|
||||||
if (clockwise) {
|
|
||||||
tap_code(KC_UP);
|
|
||||||
} else {
|
|
||||||
tap_code(KC_DOWN);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case _RAISE:
|
|
||||||
if (clockwise) {
|
|
||||||
tap_code16(LCTL(KC_TAB));
|
|
||||||
} else {
|
|
||||||
tap_code16(LCTL(LSFT(KC_TAB)));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case _ADJUST:
|
|
||||||
if (clockwise) {
|
|
||||||
rgblight_increase_val();
|
|
||||||
} else {
|
|
||||||
rgblight_decrease_val();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if (clockwise) {
|
|
||||||
tap_code(KC_VOLU);
|
|
||||||
} else {
|
|
||||||
tap_code(KC_VOLD);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
@@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
|
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
|
||||||
_____________________QWERTY_L2______________________, _____________________QWERTY_R2______________________,
|
_____________________QWERTY_L2______________________, _____________________QWERTY_R2______________________,
|
||||||
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
|
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
|
||||||
_____________________QWERTY_L3______________________,XXXXXXX,KC_LALT, T_CPNU,XXXXXXX,_____________________QWERTY_R3______________________,
|
_____________________QWERTY_L3______________________,XXXXXXX,KC_LALT, T_CPAP,XXXXXXX,_____________________QWERTY_R3______________________,
|
||||||
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
|
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
|
||||||
_____________MOD_LEFT_____________,T_LBRC, T_RBRC,________MOD_RIGHT________,KC_MUTE
|
_____________MOD_LEFT_____________,T_LBRC, T_RBRC,________MOD_RIGHT________,KC_MUTE
|
||||||
// `----------------------------------------' `----------------------------------------'
|
// `----------------------------------------' `----------------------------------------'
|
||||||
@@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
|
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
|
||||||
_____________________DVORAK_L2______________________, _____________________DVORAK_R2______________________,
|
_____________________DVORAK_L2______________________, _____________________DVORAK_R2______________________,
|
||||||
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
|
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
|
||||||
_____________________DVORAK_L3______________________,XXXXXXX,KC_LALT, T_CPNU,XXXXXXX,_____________________DVORAK_R3______________________,
|
_____________________DVORAK_L3______________________,XXXXXXX,KC_LALT, T_CPAP,XXXXXXX,_____________________DVORAK_R3______________________,
|
||||||
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
|
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
|
||||||
_____________MOD_LEFT_____________,T_LBRC, T_RBRC,________MOD_RIGHT________,KC_MUTE
|
_____________MOD_LEFT_____________,T_LBRC, T_RBRC,________MOD_RIGHT________,KC_MUTE
|
||||||
// `----------------------------------------' `----------------------------------------'
|
// `----------------------------------------' `----------------------------------------'
|
||||||
@@ -48,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
|
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
|
||||||
_____________________COLEMAK_L2_____________________, _____________________COLEMAK_R2_____________________,
|
_____________________COLEMAK_L2_____________________, _____________________COLEMAK_R2_____________________,
|
||||||
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
|
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
|
||||||
_____________________COLEMAK_L3_____________________,XXXXXXX,KC_LALT, T_CPNU,XXXXXXX,_____________________COLEMAK_R3_____________________,
|
_____________________COLEMAK_L3_____________________,XXXXXXX,KC_LALT, T_CPAP,XXXXXXX,_____________________COLEMAK_R3_____________________,
|
||||||
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
|
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
|
||||||
_____________MOD_LEFT_____________,T_LBRC, T_RBRC,________MOD_RIGHT________,KC_MUTE
|
_____________MOD_LEFT_____________,T_LBRC, T_RBRC,________MOD_RIGHT________,KC_MUTE
|
||||||
// `----------------------------------------' `----------------------------------------'
|
// `----------------------------------------' `----------------------------------------'
|
||||||
|
|||||||
@@ -105,8 +105,12 @@ void oled_white_space(void){
|
|||||||
oled_write_P(PSTR(" "), false);
|
oled_write_P(PSTR(" "), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void oled_slash_separator(void){
|
||||||
|
oled_write_P(PSTR(" / "), false);
|
||||||
|
}
|
||||||
|
|
||||||
void render_layout_state(void) {
|
void render_layout_state(void) {
|
||||||
oled_write_P(PSTR("\nLayout: "), false);
|
oled_write_P(PSTR("Layout: "), false);
|
||||||
switch (biton32(default_layer_state)) {
|
switch (biton32(default_layer_state)) {
|
||||||
case _COLEMAK:
|
case _COLEMAK:
|
||||||
oled_write_P(PSTR("Colemak"), false);
|
oled_write_P(PSTR("Colemak"), false);
|
||||||
@@ -121,6 +125,37 @@ void render_layout_state(void) {
|
|||||||
oled_write_ln_P(PSTR("Undefined"), false);
|
oled_write_ln_P(PSTR("Undefined"), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef ENCODER_ENABLE
|
||||||
|
static void render_encoder_state(void) {
|
||||||
|
oled_write_P(PSTR("\nEnc: "), false);
|
||||||
|
bool lower = layer_state_is(_LOWER) & !layer_state_is(_ADJUST);
|
||||||
|
bool raise = layer_state_is(_RAISE) & !layer_state_is(_ADJUST);
|
||||||
|
bool adjust = layer_state_is(_ADJUST);
|
||||||
|
|
||||||
|
if(lower){
|
||||||
|
oled_write_P(PSTR("APPSW"), left_encoder_rotated);
|
||||||
|
oled_slash_separator();
|
||||||
|
oled_write_P(PSTR("UPDN"), right_encoder_rotated);
|
||||||
|
} else if(raise){
|
||||||
|
oled_write_P(PSTR("PGUD"), left_encoder_rotated);
|
||||||
|
oled_slash_separator();
|
||||||
|
oled_write_P(PSTR("TABSW"), right_encoder_rotated);
|
||||||
|
} else if(adjust){
|
||||||
|
oled_write_P(PSTR("RHUE"), left_encoder_rotated);
|
||||||
|
oled_slash_separator();
|
||||||
|
oled_write_P(PSTR("RBRI"), right_encoder_rotated);
|
||||||
|
} else {
|
||||||
|
oled_write_P(PSTR("BRI"), left_encoder_rotated);
|
||||||
|
oled_slash_separator();
|
||||||
|
oled_write_P(PSTR("VOL"), right_encoder_rotated);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (timer_elapsed(encoder_rotated_timer) > 200) {
|
||||||
|
left_encoder_rotated = false;
|
||||||
|
right_encoder_rotated = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void render_layer_state(void) {
|
static void render_layer_state(void) {
|
||||||
oled_write_P(PSTR("\nLayer:"), false);
|
oled_write_P(PSTR("\nLayer:"), false);
|
||||||
@@ -156,6 +191,9 @@ void render_mod_state(uint8_t modifiers) {
|
|||||||
static void render_status(void) {
|
static void render_status(void) {
|
||||||
render_qmk_logo();
|
render_qmk_logo();
|
||||||
render_layout_state();
|
render_layout_state();
|
||||||
|
#ifdef ENCODER_ENABLE
|
||||||
|
render_encoder_state();
|
||||||
|
#endif
|
||||||
render_layer_state();
|
render_layer_state();
|
||||||
render_mod_state(get_mods()|get_oneshot_mods());
|
render_mod_state(get_mods()|get_oneshot_mods());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,5 +3,4 @@ ENCODER_ENABLE = yes # Enables the use of one or more encoders
|
|||||||
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
|
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
|
||||||
LINK_TIME_OPTIMIZATION_ENABLE = yes
|
LINK_TIME_OPTIMIZATION_ENABLE = yes
|
||||||
|
|
||||||
SRC += encoder.c \
|
SRC += oled.c
|
||||||
oled.c
|
|
||||||
@@ -125,7 +125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
XXXXXXX, XXXXXXX, _____________MOUSE_1______________, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
XXXXXXX, XXXXXXX, _____________MOUSE_1______________, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
XXXXXXX, XXXXXXX, _____________MOUSE_2______________, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
XXXXXXX, XXXXXXX, _____________MOUSE_2______________, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
__________________________________, __________________________________
|
__________________________________, _______, _______, _______, K_CPRF
|
||||||
),
|
),
|
||||||
|
|
||||||
/* ADJUST
|
/* ADJUST
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
OLED_DRIVER_ENABLE = yes
|
OLED_DRIVER_ENABLE = yes
|
||||||
|
LINK_TIME_OPTIMIZATION_ENABLE = yes
|
||||||
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "split_util.h"
|
#include "split_util.h"
|
||||||
#include "pro_micro.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#ifdef USE_MATRIX_I2C
|
#ifdef USE_MATRIX_I2C
|
||||||
# include "i2c.h"
|
# include "i2c.h"
|
||||||
@@ -101,9 +101,10 @@ void matrix_init(void)
|
|||||||
unselect_rows();
|
unselect_rows();
|
||||||
init_cols();
|
init_cols();
|
||||||
|
|
||||||
TX_RX_LED_INIT;
|
setPinOutput(B0);
|
||||||
TXLED0;
|
setPinOutput(D5);
|
||||||
RXLED0;
|
writePinHigh(B0);
|
||||||
|
writePinHigh(D5);
|
||||||
|
|
||||||
// initialize matrix state: all keys off
|
// initialize matrix state: all keys off
|
||||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||||
@@ -188,10 +189,10 @@ int serial_transaction(int master_changed) {
|
|||||||
int ret=serial_update_buffers();
|
int ret=serial_update_buffers();
|
||||||
#endif
|
#endif
|
||||||
if (ret ) {
|
if (ret ) {
|
||||||
if(ret==2) RXLED1;
|
if(ret==2) writePinLow(B0);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
RXLED0;
|
writePinHigh(B0);
|
||||||
memcpy(&matrix[slaveOffset],
|
memcpy(&matrix[slaveOffset],
|
||||||
(void *)serial_slave_buffer, SERIAL_SLAVE_BUFFER_LENGTH);
|
(void *)serial_slave_buffer, SERIAL_SLAVE_BUFFER_LENGTH);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -240,7 +241,7 @@ uint8_t matrix_master_scan(void) {
|
|||||||
if( serial_transaction(mchanged) ) {
|
if( serial_transaction(mchanged) ) {
|
||||||
#endif
|
#endif
|
||||||
// turn on the indicator led when halves are disconnected
|
// turn on the indicator led when halves are disconnected
|
||||||
TXLED1;
|
writePinLow(D5);
|
||||||
|
|
||||||
error_count++;
|
error_count++;
|
||||||
|
|
||||||
@@ -253,7 +254,7 @@ uint8_t matrix_master_scan(void) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// turn off the indicator led on no error
|
// turn off the indicator led on no error
|
||||||
TXLED0;
|
writePinHigh(D5);
|
||||||
error_count = 0;
|
error_count = 0;
|
||||||
}
|
}
|
||||||
matrix_scan_quantum();
|
matrix_scan_quantum();
|
||||||
|
|||||||
@@ -27,5 +27,5 @@
|
|||||||
#define USE_SERIAL_PD2
|
#define USE_SERIAL_PD2
|
||||||
|
|
||||||
#define TAPPING_FORCE_HOLD
|
#define TAPPING_FORCE_HOLD
|
||||||
#define TAPPING_TERM 300
|
#define TAPPING_TERM 200
|
||||||
#define RETRO_TAPPPING
|
#define RETRO_TAPPPING
|
||||||
@@ -31,7 +31,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||||
_____________________QWERTY_L3______________________, LT_RAI, LT_LOW, _____________________QWERTY_R3______________________,
|
_____________________QWERTY_L3______________________, LT_RAI, LT_LOW, _____________________QWERTY_R3______________________,
|
||||||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||||
________MOD_LEFT_________, K_LAPP, K_RAPP, ________MOD_RIGHT________
|
________MOD_LEFT_________, XXXXXXX, XXXXXXX, ________MOD_RIGHT________
|
||||||
//`---------------------------------------' `---------------------------------------'
|
//`---------------------------------------' `---------------------------------------'
|
||||||
),
|
),
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||||
_____________________DVORAK_L3______________________, LT_RAI, LT_LOW, _____________________DVORAK_R3______________________,
|
_____________________DVORAK_L3______________________, LT_RAI, LT_LOW, _____________________DVORAK_R3______________________,
|
||||||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||||
________MOD_LEFT_________, K_LAPP, K_RAPP, ________MOD_RIGHT________
|
________MOD_LEFT_________, XXXXXXX, XXXXXXX, ________MOD_RIGHT________
|
||||||
//`---------------------------------------' `---------------------------------------'
|
//`---------------------------------------' `---------------------------------------'
|
||||||
),
|
),
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||||
_____________________COLEMAK_L3_____________________, LT_RAI, LT_LOW, _____________________COLEMAK_R3_____________________,
|
_____________________COLEMAK_L3_____________________, LT_RAI, LT_LOW, _____________________COLEMAK_R3_____________________,
|
||||||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||||
________MOD_LEFT_________, K_LAPP, K_RAPP, ________MOD_RIGHT________
|
________MOD_LEFT_________, XXXXXXX, XXXXXXX, ________MOD_RIGHT________
|
||||||
//`---------------------------------------' `---------------------------------------'
|
//`---------------------------------------' `---------------------------------------'
|
||||||
),
|
),
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,127 @@
|
|||||||
|
/* Copyright 2017 Wunder
|
||||||
|
*
|
||||||
|
* 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 QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
// Layer shorthand
|
||||||
|
#define LOWER MO(_LOWER)
|
||||||
|
#define RAISE MO(_RAISE)
|
||||||
|
#define SYSTEM MO(_SYSTEM)
|
||||||
|
#define MPASTE LSFT(KC_INSERT)
|
||||||
|
|
||||||
|
enum xd75_layers {
|
||||||
|
_QWERTY,
|
||||||
|
_LOWER,
|
||||||
|
_RAISE,
|
||||||
|
_SYSTEM
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* QWERTY
|
||||||
|
* .--------------------------------------------------------------------------------------------------------------------------------------.
|
||||||
|
* | ESC | 1 | 2 | 3 | 4 | 5 | - | ` | = | 6 | 7 | 8 | 9 | 0 | BACKSP |
|
||||||
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
|
||||||
|
* | TAB | Q | W | E | R | T | [ | \ | ] | Y | U | I | O | P | ' |
|
||||||
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
|
||||||
|
* | CAP LK | A | S | D | F | G | INSERT | HOME | PG UP | H | J | K | L | ; | ENTER |
|
||||||
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
|
||||||
|
* | LSHIFT | Z | X | C | V | B | DEL | END | PG DN | N | M | , | . | / | RSHIFT |
|
||||||
|
* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
|
||||||
|
* | LCTRL | GUI | MENU | ALT | LOWER | SPACE | SPACE | SPACE | SPACE | SPACE | RAISE | LEFT | DOWN | UP | RIGHT |
|
||||||
|
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_QWERTY] = LAYOUT_ortho_5x15( /* QWERTY */
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_GRV, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_BSLS, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_INS, KC_HOME, KC_PGUP, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_DEL, KC_END, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||||
|
KC_LCTL, KC_LGUI, KC_MENU, KC_LALT, LOWER, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
|
||||||
|
),
|
||||||
|
|
||||||
|
/* SYSTEM
|
||||||
|
* .--------------------------------------------------------------------------------------------------------------------------------------.
|
||||||
|
* | RESET | DEBUG | | | | | | | | | | | | | |
|
||||||
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
* | | | | | | |RGB_TOG |RGB_VAI |RGB VAD | | | PASTE | PR SCR | SCR LK | PAUSE |
|
||||||
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
* | | | | | | |RGB_MOD |RGB_SAI |RGB_HUI | | | | | | |
|
||||||
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
* | | | | | | | |RGB_SAD |RGB_HUD | | | | | | |
|
||||||
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_SYSTEM] = LAYOUT_ortho_5x15( /* FUNCTION */
|
||||||
|
RESET, DEBUG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, RGB_VAD, _______, _______, MPASTE, KC_PSCR, KC_SLCK, KC_PAUSE,
|
||||||
|
_______, _______, _______, _______, _______, _______, RGB_MOD, RGB_SAI, RGB_HUI, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_HUD, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
/* LOWER
|
||||||
|
* .--------------------------------------------------------------------------------------------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
|
||||||
|
* | ~ | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | ' |
|
||||||
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
|
||||||
|
* | DELETE | F1 | F2 | F3 | F4 | F5 | | | | F6 | _ | + | { | } | | |
|
||||||
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
|
||||||
|
* | | F7 | F8 | F9 | F10 | F11 | | | | F12 | ISO ~ | ISO | | Home | End | |
|
||||||
|
* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
|
||||||
|
* | | | | | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_LOWER] = LAYOUT_ortho_5x15( /* LOWER */
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
|
||||||
|
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME,KC_END, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||||
|
),
|
||||||
|
|
||||||
|
/* RAISE
|
||||||
|
* .--------------------------------------------------------------------------------------------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
|
||||||
|
* | ` | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | ' |
|
||||||
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | - | = | [ | ] | \ |
|
||||||
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
|
||||||
|
* | | F7 | F8 | F9 | F10 | F11 | | | | F12 | ISO # | ISO / | Pg Up | Pg Dn | |
|
||||||
|
* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
|
||||||
|
* | | | | | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_RAISE] = LAYOUT_ortho_5x15( /* QWERTY */
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||||
|
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_MINUS,KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||||
|
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
// SYSTEM layer toggle
|
||||||
|
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||||
|
return update_tri_layer_state(state, _LOWER, _RAISE, _SYSTEM);
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# A OLKB-like layout for XD75
|
||||||
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "split_util.h"
|
#include "split_util.h"
|
||||||
#include "pro_micro.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#ifdef USE_MATRIX_I2C
|
#ifdef USE_MATRIX_I2C
|
||||||
# include "i2c.h"
|
# include "i2c.h"
|
||||||
@@ -102,9 +102,10 @@ void matrix_init(void)
|
|||||||
unselect_rows();
|
unselect_rows();
|
||||||
init_cols();
|
init_cols();
|
||||||
|
|
||||||
TX_RX_LED_INIT;
|
setPinOutput(B0);
|
||||||
TXLED0;
|
setPinOutput(D5);
|
||||||
RXLED0;
|
writePinHigh(D5);
|
||||||
|
writePinHigh(B0);
|
||||||
|
|
||||||
// initialize matrix state: all keys off
|
// initialize matrix state: all keys off
|
||||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||||
@@ -189,10 +190,10 @@ int serial_transaction(int master_changed) {
|
|||||||
int ret=serial_update_buffers();
|
int ret=serial_update_buffers();
|
||||||
#endif
|
#endif
|
||||||
if (ret ) {
|
if (ret ) {
|
||||||
if(ret==2) RXLED1;
|
if(ret==2) writePinLow(B0);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
RXLED0;
|
writePinHigh(B0);
|
||||||
memcpy(&matrix[slaveOffset],
|
memcpy(&matrix[slaveOffset],
|
||||||
(void *)serial_slave_buffer, SERIAL_SLAVE_BUFFER_LENGTH);
|
(void *)serial_slave_buffer, SERIAL_SLAVE_BUFFER_LENGTH);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -241,7 +242,7 @@ uint8_t matrix_master_scan(void) {
|
|||||||
if( serial_transaction(mchanged) ) {
|
if( serial_transaction(mchanged) ) {
|
||||||
#endif
|
#endif
|
||||||
// turn on the indicator led when halves are disconnected
|
// turn on the indicator led when halves are disconnected
|
||||||
TXLED1;
|
writePinLow(D5);
|
||||||
|
|
||||||
error_count++;
|
error_count++;
|
||||||
|
|
||||||
@@ -254,7 +255,7 @@ uint8_t matrix_master_scan(void) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// turn off the indicator led on no error
|
// turn off the indicator led on no error
|
||||||
TXLED0;
|
writePinHigh(D5);
|
||||||
error_count = 0;
|
error_count = 0;
|
||||||
}
|
}
|
||||||
matrix_scan_quantum();
|
matrix_scan_quantum();
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "split_util.h"
|
#include "split_util.h"
|
||||||
#include "pro_micro.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#ifdef USE_MATRIX_I2C
|
#ifdef USE_MATRIX_I2C
|
||||||
# include "i2c.h"
|
# include "i2c.h"
|
||||||
@@ -102,9 +102,10 @@ void matrix_init(void)
|
|||||||
unselect_rows();
|
unselect_rows();
|
||||||
init_cols();
|
init_cols();
|
||||||
|
|
||||||
TX_RX_LED_INIT;
|
setPinOutput(B0);
|
||||||
TXLED0;
|
setPinOutput(D5);
|
||||||
RXLED0;
|
writePinHigh(D5);
|
||||||
|
writePinHigh(B0);
|
||||||
|
|
||||||
// initialize matrix state: all keys off
|
// initialize matrix state: all keys off
|
||||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||||
@@ -189,10 +190,10 @@ int serial_transaction(int master_changed) {
|
|||||||
int ret=serial_update_buffers();
|
int ret=serial_update_buffers();
|
||||||
#endif
|
#endif
|
||||||
if (ret ) {
|
if (ret ) {
|
||||||
if(ret==2) RXLED1;
|
if(ret==2) writePinLow(B0);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
RXLED0;
|
writePinHigh(B0);
|
||||||
memcpy(&matrix[slaveOffset],
|
memcpy(&matrix[slaveOffset],
|
||||||
(void *)serial_slave_buffer, sizeof(serial_slave_buffer));
|
(void *)serial_slave_buffer, sizeof(serial_slave_buffer));
|
||||||
return 0;
|
return 0;
|
||||||
@@ -240,7 +241,7 @@ uint8_t matrix_master_scan(void) {
|
|||||||
if( serial_transaction(mchanged) ) {
|
if( serial_transaction(mchanged) ) {
|
||||||
#endif
|
#endif
|
||||||
// turn on the indicator led when halves are disconnected
|
// turn on the indicator led when halves are disconnected
|
||||||
TXLED1;
|
writePinLow(D5);
|
||||||
|
|
||||||
error_count++;
|
error_count++;
|
||||||
|
|
||||||
@@ -253,7 +254,7 @@ uint8_t matrix_master_scan(void) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// turn off the indicator led on no error
|
// turn off the indicator led on no error
|
||||||
TXLED0;
|
writePinHigh(D5);
|
||||||
error_count = 0;
|
error_count = 0;
|
||||||
}
|
}
|
||||||
matrix_scan_quantum();
|
matrix_scan_quantum();
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "split_util.h"
|
#include "split_util.h"
|
||||||
#include "pro_micro.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#ifdef USE_MATRIX_I2C
|
#ifdef USE_MATRIX_I2C
|
||||||
# include "i2c.h"
|
# include "i2c.h"
|
||||||
@@ -102,9 +102,10 @@ void matrix_init(void)
|
|||||||
unselect_rows();
|
unselect_rows();
|
||||||
init_cols();
|
init_cols();
|
||||||
|
|
||||||
TX_RX_LED_INIT;
|
setPinOutput(B0);
|
||||||
TXLED0;
|
setPinOutput(D5);
|
||||||
RXLED0;
|
writePinHigh(B0);
|
||||||
|
writePinHigh(D5);
|
||||||
|
|
||||||
// initialize matrix state: all keys off
|
// initialize matrix state: all keys off
|
||||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||||
@@ -189,10 +190,10 @@ int serial_transaction(int master_changed) {
|
|||||||
int ret=serial_update_buffers();
|
int ret=serial_update_buffers();
|
||||||
#endif
|
#endif
|
||||||
if (ret ) {
|
if (ret ) {
|
||||||
if(ret==2) RXLED1;
|
if(ret==2) writePinLow(B0);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
RXLED0;
|
writePinHigh(B0);
|
||||||
memcpy(&matrix[slaveOffset],
|
memcpy(&matrix[slaveOffset],
|
||||||
(void *)serial_slave_buffer, sizeof(serial_slave_buffer));
|
(void *)serial_slave_buffer, sizeof(serial_slave_buffer));
|
||||||
return 0;
|
return 0;
|
||||||
@@ -240,7 +241,7 @@ uint8_t matrix_master_scan(void) {
|
|||||||
if( serial_transaction(mchanged) ) {
|
if( serial_transaction(mchanged) ) {
|
||||||
#endif
|
#endif
|
||||||
// turn on the indicator led when halves are disconnected
|
// turn on the indicator led when halves are disconnected
|
||||||
TXLED1;
|
writePinLow(D5);
|
||||||
|
|
||||||
error_count++;
|
error_count++;
|
||||||
|
|
||||||
@@ -253,7 +254,7 @@ uint8_t matrix_master_scan(void) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// turn off the indicator led on no error
|
// turn off the indicator led on no error
|
||||||
TXLED0;
|
writePinHigh(D5);
|
||||||
error_count = 0;
|
error_count = 0;
|
||||||
}
|
}
|
||||||
matrix_scan_quantum();
|
matrix_scan_quantum();
|
||||||
|
|||||||
@@ -210,9 +210,9 @@ void dynamic_keymap_macro_send(uint8_t id) {
|
|||||||
++p;
|
++p;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the macro string one or two chars at a time
|
// Send the macro string one or three chars at a time
|
||||||
// by making temporary 1 or 2 char strings
|
// by making temporary 1 or 3 char strings
|
||||||
char data[3] = {0, 0, 0};
|
char data[4] = {0, 0, 0, 0};
|
||||||
// We already checked there was a null at the end of
|
// We already checked there was a null at the end of
|
||||||
// the buffer, so this cannot go past the end
|
// the buffer, so this cannot go past the end
|
||||||
while (1) {
|
while (1) {
|
||||||
@@ -223,10 +223,12 @@ void dynamic_keymap_macro_send(uint8_t id) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// If the char is magic (tap, down, up),
|
// If the char is magic (tap, down, up),
|
||||||
// add the next char (key to use) and send a 2 char string.
|
// add the next char (key to use) and send a 3 char string.
|
||||||
if (data[0] == SS_TAP_CODE || data[0] == SS_DOWN_CODE || data[0] == SS_UP_CODE) {
|
if (data[0] == SS_TAP_CODE || data[0] == SS_DOWN_CODE || data[0] == SS_UP_CODE) {
|
||||||
data[1] = eeprom_read_byte(p++);
|
data[1] = data[0];
|
||||||
if (data[1] == 0) {
|
data[0] = SS_QMK_PREFIX;
|
||||||
|
data[2] = eeprom_read_byte(p++);
|
||||||
|
if (data[2] == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,151 @@
|
|||||||
|
/* Copyright 2020
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
#include "keymap.h"
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||||
|
* │ \ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ « │ │
|
||||||
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||||
|
* │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ + │ ´ │ │
|
||||||
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||||
|
* │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ç │ º │ ~ │ │
|
||||||
|
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||||
|
* │ │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │ │
|
||||||
|
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||||
|
* │ │ │ │ │ │ │ │ │
|
||||||
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||||
|
*/
|
||||||
|
// Row 1
|
||||||
|
#define PT_BSLS KC_GRV // (backslash)
|
||||||
|
#define PT_1 KC_1 // 1
|
||||||
|
#define PT_2 KC_2 // 2
|
||||||
|
#define PT_3 KC_3 // 3
|
||||||
|
#define PT_4 KC_4 // 4
|
||||||
|
#define PT_5 KC_5 // 5
|
||||||
|
#define PT_6 KC_6 // 6
|
||||||
|
#define PT_7 KC_7 // 7
|
||||||
|
#define PT_8 KC_8 // 8
|
||||||
|
#define PT_9 KC_9 // 9
|
||||||
|
#define PT_0 KC_0 // 0
|
||||||
|
#define PT_QUOT KC_MINS // '
|
||||||
|
#define PT_LDAQ KC_EQL // «
|
||||||
|
// Row 2
|
||||||
|
#define PT_Q KC_Q // Q
|
||||||
|
#define PT_W KC_W // W
|
||||||
|
#define PT_E KC_E // E
|
||||||
|
#define PT_R KC_R // R
|
||||||
|
#define PT_T KC_T // T
|
||||||
|
#define PT_Y KC_Y // Y
|
||||||
|
#define PT_U KC_U // U
|
||||||
|
#define PT_I KC_I // I
|
||||||
|
#define PT_O KC_O // O
|
||||||
|
#define PT_P KC_P // P
|
||||||
|
#define PT_PLUS KC_LBRC // +
|
||||||
|
#define PT_ACUT KC_RBRC // ´ (dead)
|
||||||
|
// Row 3
|
||||||
|
#define PT_A KC_A // A
|
||||||
|
#define PT_S KC_S // S
|
||||||
|
#define PT_D KC_D // D
|
||||||
|
#define PT_F KC_F // F
|
||||||
|
#define PT_G KC_G // G
|
||||||
|
#define PT_H KC_H // H
|
||||||
|
#define PT_J KC_J // J
|
||||||
|
#define PT_K KC_K // K
|
||||||
|
#define PT_L KC_L // L
|
||||||
|
#define PT_CCED KC_SCLN // Ç
|
||||||
|
#define PT_MORD KC_QUOT // º
|
||||||
|
#define PT_TILD KC_NUHS // ~ (dead)
|
||||||
|
// Row 4
|
||||||
|
#define PT_LABK KC_NUBS // <
|
||||||
|
#define PT_Z KC_Z // Z
|
||||||
|
#define PT_X KC_X // X
|
||||||
|
#define PT_C KC_C // C
|
||||||
|
#define PT_V KC_V // V
|
||||||
|
#define PT_B KC_B // B
|
||||||
|
#define PT_N KC_N // N
|
||||||
|
#define PT_M KC_M // M
|
||||||
|
#define PT_COMM KC_COMM // ,
|
||||||
|
#define PT_DOT KC_DOT // .
|
||||||
|
#define PT_MINS KC_SLSH // -
|
||||||
|
|
||||||
|
/* Shifted symbols
|
||||||
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||||
|
* │ | │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ » │ │
|
||||||
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ * │ ` │ │
|
||||||
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ ª │ ^ │ │
|
||||||
|
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||||
|
* │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
|
||||||
|
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||||
|
* │ │ │ │ │ │ │ │ │
|
||||||
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||||
|
*/
|
||||||
|
// Row 1
|
||||||
|
#define PT_PIPE S(PT_BSLS) // |
|
||||||
|
#define PT_EXLM S(PT_1) // !
|
||||||
|
#define PT_DQUO S(PT_2) // "
|
||||||
|
#define PT_HASH S(PT_3) // #
|
||||||
|
#define PT_DLR S(PT_4) // $
|
||||||
|
#define PT_PERC S(PT_5) // %
|
||||||
|
#define PT_AMPR S(PT_6) // &
|
||||||
|
#define PT_SLSH S(PT_7) // /
|
||||||
|
#define PT_LPRN S(PT_8) // (
|
||||||
|
#define PT_RPRN S(PT_9) // )
|
||||||
|
#define PT_EQL S(PT_0) // =
|
||||||
|
#define PT_QUES S(PT_QUOT) // ?
|
||||||
|
#define PT_RDAQ S(PT_LDAQ) // »
|
||||||
|
// Row 2
|
||||||
|
#define PT_ASTR S(PT_PLUS) // *
|
||||||
|
#define PT_GRV S(PT_ACUT) // ` (dead)
|
||||||
|
// Row 3
|
||||||
|
#define PT_FORD S(PT_MORD) // ª
|
||||||
|
#define PT_CIRC S(PT_TILD) // ^ (dead)
|
||||||
|
// Row 4
|
||||||
|
#define PT_RABK S(PT_LABK) // >
|
||||||
|
#define PT_SCLN S(PT_COMM) // ;
|
||||||
|
#define PT_COLN S(PT_DOT) // :
|
||||||
|
#define PT_UNDS S(PT_MINS) // _
|
||||||
|
|
||||||
|
/* AltGr symbols
|
||||||
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||||
|
* │ │ │ @ │ £ │ § │ │ │ { │ [ │ ] │ } │ │ │ │
|
||||||
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||||
|
* │ │ │ │ € │ │ │ │ │ │ │ │ ¨ │ │ │
|
||||||
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||||
|
* │ │ │ │ │ │ │ │ │
|
||||||
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||||
|
*/
|
||||||
|
// Row 1
|
||||||
|
#define PT_AT ALGR(PT_2) // @
|
||||||
|
#define PT_PND ALGR(PT_3) // £
|
||||||
|
#define PT_SECT ALGR(PT_4) // §
|
||||||
|
#define PT_LCBR ALGR(PT_7) // {
|
||||||
|
#define PT_LBRC ALGR(PT_8) // [
|
||||||
|
#define PT_RBRC ALGR(PT_9) // ]
|
||||||
|
#define PT_RCBR ALGR(PT_0) // }
|
||||||
|
// Row 2
|
||||||
|
#define PT_DIAE ALGR(PT_PLUS) // ¨ (dead)
|
||||||
|
#define PT_EURO ALGR(PT_E) // €
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
/* Copyright 2020
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Sendstring lookup tables for Portuguese layouts
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "keymap_portuguese.h"
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
|
||||||
|
const uint8_t ascii_to_shift_lut[16] PROGMEM = {
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
|
||||||
|
KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 0),
|
||||||
|
KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
|
||||||
|
KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
|
||||||
|
KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
|
||||||
|
KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
|
||||||
|
KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
|
||||||
|
KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 1, 0, 0, 0),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 0, 0),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
|
||||||
|
// NUL SOH STX ETX EOT ENQ ACK BEL
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
// BS TAB LF VT FF CR SO SI
|
||||||
|
KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
// DLE DC1 DC2 DC3 DC4 NAK SYN ETB
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
// CAN EM SUB ESC FS GS RS US
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
|
||||||
|
// ! " # $ % & '
|
||||||
|
KC_SPC, PT_1, PT_2, PT_3, PT_4, PT_5, PT_6, PT_QUOT,
|
||||||
|
// ( ) * + , - . /
|
||||||
|
PT_8, PT_9, PT_PLUS, PT_PLUS, PT_COMM, PT_MINS, PT_DOT, PT_7,
|
||||||
|
// 0 1 2 3 4 5 6 7
|
||||||
|
PT_0, PT_1, PT_2, PT_3, PT_4, PT_5, PT_6, PT_7,
|
||||||
|
// 8 9 : ; < = > ?
|
||||||
|
PT_8, PT_9, PT_DOT, PT_COMM, PT_LABK, PT_0, PT_LABK, PT_QUOT,
|
||||||
|
// @ A B C D E F G
|
||||||
|
PT_2, PT_A, PT_B, PT_C, PT_D, PT_E, PT_F, PT_G,
|
||||||
|
// H I J K L M N O
|
||||||
|
PT_H, PT_I, PT_J, PT_K, PT_L, PT_M, PT_N, PT_O,
|
||||||
|
// P Q R S T U V W
|
||||||
|
PT_P, PT_Q, PT_R, PT_S, PT_T, PT_U, PT_V, PT_W,
|
||||||
|
// X Y Z [ \ ] ^ _
|
||||||
|
PT_X, PT_Y, PT_Z, PT_8, PT_BSLS, PT_9, PT_TILD, PT_MINS,
|
||||||
|
// ` a b c d e f g
|
||||||
|
PT_ACUT, PT_A, PT_B, PT_C, PT_D, PT_E, PT_F, PT_G,
|
||||||
|
// h i j k l m n o
|
||||||
|
PT_H, PT_I, PT_J, PT_K, PT_L, PT_M, PT_N, PT_O,
|
||||||
|
// p q r s t u v w
|
||||||
|
PT_P, PT_Q, PT_R, PT_S, PT_T, PT_U, PT_V, PT_W,
|
||||||
|
// x y z { | } ~ DEL
|
||||||
|
PT_X, PT_Y, PT_Z, PT_7, PT_BSLS, PT_0, PT_TILD, KC_DEL
|
||||||
|
};
|
||||||
+12
-13
@@ -23,8 +23,6 @@ See: https://docs.qmk.fm/#/feature_userspace
|
|||||||
|K_LOCK | MacOS shortcut to execute lock command Cmd + CTRL + Q |
|
|K_LOCK | MacOS shortcut to execute lock command Cmd + CTRL + Q |
|
||||||
|K_CSCN | MacOS shortcut to copy a portion of the screen to the clipboard |
|
|K_CSCN | MacOS shortcut to copy a portion of the screen to the clipboard |
|
||||||
|K_MDSH | MacOS shortcut to get em-dash `–` |
|
|K_MDSH | MacOS shortcut to get em-dash `–` |
|
||||||
|K_RAPP | MacOS shortcut to switch apps to the right |
|
|
||||||
|K_LAPP | MacOS shortcut to switch apps to the left |
|
|
||||||
|K_CPRF | Cmd + Shift + M. Used for switching Google Chrome profiles |
|
|K_CPRF | Cmd + Shift + M. Used for switching Google Chrome profiles |
|
||||||
|
|
||||||
### [Layers](ninjonas.h)
|
### [Layers](ninjonas.h)
|
||||||
@@ -32,17 +30,12 @@ See: https://docs.qmk.fm/#/feature_userspace
|
|||||||
|---|---|
|
|---|---|
|
||||||
|LT_LOW | Tap for ENTER, hold for RAISE |
|
|LT_LOW | Tap for ENTER, hold for RAISE |
|
||||||
|LT_RAI | Tap for SPACE, hold for LOWER |
|
|LT_RAI | Tap for SPACE, hold for LOWER |
|
||||||
|LT_LOW + LT_RAI | Hold for ADJUST |
|
|
||||||
|LM_LOW | Dedicated key to momentarily toggle to use LOWER layer |
|
|
||||||
|LM_RAI | Dedicated key to momentarily toggle to use RAISE layer |
|
|
||||||
|LG_LOW | Press to toggle LOWER layer |
|
|
||||||
|LG_RAI | Press to toggle RAISE layer |
|
|
||||||
|
|
||||||
### [Mod-Taps](ninjonas.h)
|
### [Mod-Taps](ninjonas.h)
|
||||||
|Code | Description |
|
|Code | Description |
|
||||||
|---|---|
|
|---|---|
|
||||||
|MT_DEL | Tap for Delete, hold for Cmd + ALT + SHIFT |
|
|MT_DEL | Tap for Delete, hold for ALT + SHIFT |
|
||||||
|MT_EQL | Tap for =, hold for ALT + SHIFT |
|
|MT_EQL | Tap for =, SHIFT |
|
||||||
|
|
||||||
### [Layout Blocks](ninjonas.h)
|
### [Layout Blocks](ninjonas.h)
|
||||||
Predefined keyboard layout templates to speed up configuring split keyboards
|
Predefined keyboard layout templates to speed up configuring split keyboards
|
||||||
@@ -72,7 +65,6 @@ Predefined keyboard layout templates to speed up configuring split keyboards
|
|||||||
|M_SHFT | Sends Cmd + alt + shift to a keycode to activate [ShiftIt](https://github.com/fikovnik/ShiftIt) |
|
|M_SHFT | Sends Cmd + alt + shift to a keycode to activate [ShiftIt](https://github.com/fikovnik/ShiftIt) |
|
||||||
|M_CODE | Opens [Visual Studio Code](https://code.visualstudio.com/) on current directory |
|
|M_CODE | Opens [Visual Studio Code](https://code.visualstudio.com/) on current directory |
|
||||||
|M_TERM | Launches Spotlight and calls Terminal |
|
|M_TERM | Launches Spotlight and calls Terminal |
|
||||||
|M_COPA | Single key copy/paste |
|
|
||||||
|M_XXX1 to M_XXX5 | Reserved for secret macros see [Secrets](#secrets) |
|
|M_XXX1 to M_XXX5 | Reserved for secret macros see [Secrets](#secrets) |
|
||||||
|
|
||||||
### [Tap-Dance](tap_dances.h)
|
### [Tap-Dance](tap_dances.h)
|
||||||
@@ -84,11 +76,18 @@ Predefined keyboard layout templates to speed up configuring split keyboards
|
|||||||
|T_TAB | Tap once for TAB, double for CTRL + TAB |
|
|T_TAB | Tap once for TAB, double for CTRL + TAB |
|
||||||
|T_GRV | Tap once for GRV, double for Cmd + GRV |
|
|T_GRV | Tap once for GRV, double for Cmd + GRV |
|
||||||
|T_GUI | Tap once for Cmd, double to open spotlight |
|
|T_GUI | Tap once for Cmd, double to open spotlight |
|
||||||
|T_W | Tap for W, double tap for Cmd + W |
|
|T_CPAP | Tap for Cmd + V, hold for Cmd + C, double tap to open [Line](https://line.me/en/) app, triple tap for itunes. |
|
||||||
|T_Q | Tap for Q, double tap for Cmd + Q |
|
|
||||||
|T_CPNU | Tap for Cmd + V, hold for Cmd + C, double tap for NUMPAD layer |
|
|
||||||
|T_Y | Tap for Y, double tap for NUMPAD layer |
|
|T_Y | Tap for Y, double tap for NUMPAD layer |
|
||||||
|
|
||||||
|
### [Combos](combos.h)
|
||||||
|
|Code | Description |
|
||||||
|
|---|---|
|
||||||
|
|EQ_QUIT | Press E + Q will trigger Cmd + Q |
|
||||||
|
|RW_CLOSE | Press R + W will trigger Cmd + W|
|
||||||
|
|ET_TAB | Press E + T will trigger Cmd + T|
|
||||||
|
|ZC_COPY | Press Z + C will trigger Cmd + C|
|
||||||
|
|XV_PASTE | Press X + V will trigger Cmd + V|
|
||||||
|
|
||||||
### Secrets
|
### Secrets
|
||||||
There's times where you have macros you don't want to share like emails, an address you need but you always forget, passwords 😱, & and private strings. Based off [drashna's secret macros](https://github.com/qmk/qmk_firmware/blob/master/users/drashna/readme_secrets.md), it's now possible to do this. All you need to do is create a `secrets.c` file. Below is an example of how this is used.
|
There's times where you have macros you don't want to share like emails, an address you need but you always forget, passwords 😱, & and private strings. Based off [drashna's secret macros](https://github.com/qmk/qmk_firmware/blob/master/users/drashna/readme_secrets.md), it's now possible to do this. All you need to do is create a `secrets.c` file. Below is an example of how this is used.
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
#include "ninjonas.h"
|
||||||
|
|
||||||
|
#ifdef COMBO_ENABLE
|
||||||
|
enum combo_events {
|
||||||
|
EQ_QUIT,
|
||||||
|
RW_CLOSE,
|
||||||
|
QT_TAB,
|
||||||
|
ZC_COPY,
|
||||||
|
XV_PASTE
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM quit_combo[] = {KC_E, KC_Q, COMBO_END};
|
||||||
|
const uint16_t PROGMEM close_combo[] = {KC_R, KC_W, COMBO_END};
|
||||||
|
const uint16_t PROGMEM tab_combo[] = {KC_Q, KC_T, COMBO_END};
|
||||||
|
const uint16_t PROGMEM copy_combo[] = {KC_Z, KC_C, COMBO_END};
|
||||||
|
const uint16_t PROGMEM paste_combo[] = {KC_X, KC_V, COMBO_END};
|
||||||
|
|
||||||
|
combo_t key_combos[COMBO_COUNT] = {
|
||||||
|
[EQ_QUIT] = COMBO_ACTION(quit_combo),
|
||||||
|
[RW_CLOSE] = COMBO_ACTION(close_combo),
|
||||||
|
[QT_TAB] = COMBO_ACTION(tab_combo),
|
||||||
|
[ZC_COPY] = COMBO_ACTION(copy_combo),
|
||||||
|
[XV_PASTE] = COMBO_ACTION(paste_combo),
|
||||||
|
};
|
||||||
|
|
||||||
|
void process_combo_event(uint8_t combo_index, bool pressed) {
|
||||||
|
switch(combo_index) {
|
||||||
|
case EQ_QUIT:
|
||||||
|
if (pressed) {
|
||||||
|
tap_code16(LGUI(KC_Q));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RW_CLOSE:
|
||||||
|
if (pressed) {
|
||||||
|
tap_code16(LGUI(KC_W));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case QT_TAB:
|
||||||
|
if (pressed) {
|
||||||
|
tap_code16(LGUI(KC_T));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ZC_COPY:
|
||||||
|
if (pressed) {
|
||||||
|
tap_code16(LGUI(KC_C));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XV_PASTE:
|
||||||
|
if (pressed) {
|
||||||
|
tap_code16(LGUI(KC_V));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#ifdef TAPPING_TERM
|
#ifdef TAPPING_TERM
|
||||||
#undef TAPPING_TERM
|
#undef TAPPING_TERM
|
||||||
#define TAPPING_TERM 300
|
#define TAPPING_TERM 200
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Mouse Settings: Smoothing out mouse movement on keypress
|
// Mouse Settings: Smoothing out mouse movement on keypress
|
||||||
@@ -12,3 +12,10 @@
|
|||||||
#define MOUSEKEY_TIME_TO_MAX 60
|
#define MOUSEKEY_TIME_TO_MAX 60
|
||||||
#define MOUSEKEY_MAX_SPEED 7
|
#define MOUSEKEY_MAX_SPEED 7
|
||||||
#define MOUSEKEY_WHEEL_DELAY 0
|
#define MOUSEKEY_WHEEL_DELAY 0
|
||||||
|
|
||||||
|
#ifdef COMBO_ENABLE
|
||||||
|
#undef COMBO_COUNT
|
||||||
|
#undef COMBO_TERM
|
||||||
|
#define COMBO_COUNT 5
|
||||||
|
#define COMBO_TERM 60
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
/* Copyright 2020 ninjonas
|
||||||
|
*
|
||||||
|
* 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 "ninjonas.h"
|
||||||
|
|
||||||
|
#ifdef ENCODER_ENABLE
|
||||||
|
void left_encoder_cw(void) {
|
||||||
|
switch (get_highest_layer(layer_state)) {
|
||||||
|
case _LOWER:
|
||||||
|
tap_code16(LGUI(KC_TAB));
|
||||||
|
break;
|
||||||
|
case _RAISE:
|
||||||
|
tap_code(KC_PGDN);
|
||||||
|
break;
|
||||||
|
case _ADJUST:
|
||||||
|
rgblight_decrease_hue();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
tap_code(KC_BRID);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void left_encoder_acw(void) {
|
||||||
|
switch (get_highest_layer(layer_state)) {
|
||||||
|
case _LOWER:
|
||||||
|
tap_code16(SGUI(KC_TAB));
|
||||||
|
break;
|
||||||
|
case _RAISE:
|
||||||
|
tap_code(KC_PGUP);
|
||||||
|
break;
|
||||||
|
case _ADJUST:
|
||||||
|
rgblight_increase_hue();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
tap_code(KC_BRIU);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void right_encoder_cw(void) {
|
||||||
|
switch (get_highest_layer(layer_state)) {
|
||||||
|
case _LOWER:
|
||||||
|
tap_code(KC_DOWN);
|
||||||
|
break;
|
||||||
|
case _RAISE:
|
||||||
|
tap_code16(LCTL(LSFT(KC_TAB)));
|
||||||
|
break;
|
||||||
|
case _ADJUST:
|
||||||
|
rgblight_decrease_val();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
tap_code(KC_VOLD);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void right_encoder_acw(void) {
|
||||||
|
switch (get_highest_layer(layer_state)) {
|
||||||
|
case _LOWER:
|
||||||
|
tap_code(KC_UP);
|
||||||
|
break;
|
||||||
|
case _RAISE:
|
||||||
|
tap_code16(LCTL(KC_TAB));
|
||||||
|
break;
|
||||||
|
case _ADJUST:
|
||||||
|
rgblight_increase_val();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
tap_code(KC_VOLU);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void encoder_update_user(uint8_t index, bool clockwise) {
|
||||||
|
encoder_rotated_timer = timer_read();
|
||||||
|
if (index == 0) {
|
||||||
|
left_encoder_rotated = true;
|
||||||
|
if (clockwise) {
|
||||||
|
left_encoder_cw();
|
||||||
|
} else {
|
||||||
|
left_encoder_acw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (index == 1) {
|
||||||
|
right_encoder_rotated = true;
|
||||||
|
if (clockwise) {
|
||||||
|
right_encoder_cw();
|
||||||
|
} else {
|
||||||
|
right_encoder_acw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
+11
-12
@@ -27,6 +27,12 @@
|
|||||||
#include "split_util.h"
|
#include "split_util.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef ENCODER_ENABLE
|
||||||
|
bool left_encoder_rotated;
|
||||||
|
bool right_encoder_rotated;
|
||||||
|
uint16_t encoder_rotated_timer;
|
||||||
|
#endif
|
||||||
|
|
||||||
#define _QWERTY 0
|
#define _QWERTY 0
|
||||||
#define _DVORAK 1
|
#define _DVORAK 1
|
||||||
#define _COLEMAK 2
|
#define _COLEMAK 2
|
||||||
@@ -40,24 +46,17 @@
|
|||||||
#define K_CSCN LGUI(LCTL(LSFT(KC_4))) // Copy a portion of the screen to the clipboard
|
#define K_CSCN LGUI(LCTL(LSFT(KC_4))) // Copy a portion of the screen to the clipboard
|
||||||
#define K_CPRF LGUI(LSFT(KC_M)) // Cmd + Shift + M. Used for switching Google Chrome profiles
|
#define K_CPRF LGUI(LSFT(KC_M)) // Cmd + Shift + M. Used for switching Google Chrome profiles
|
||||||
#define K_MDSH LSFT(LALT(KC_MINS))
|
#define K_MDSH LSFT(LALT(KC_MINS))
|
||||||
#define K_LAPP SGUI(KC_TAB) // Cmd + Shift + Tab
|
|
||||||
#define K_RAPP LGUI(KC_TAB) // Cmd + Tab
|
|
||||||
|
|
||||||
// Layer Keys
|
// Layer Keys
|
||||||
#define LM_LOW MO(_LOWER)
|
|
||||||
#define LM_RAI MO(_RAISE)
|
|
||||||
#define LG_LOW TG(_LOWER)
|
|
||||||
#define LG_RAI TG(_RAISE)
|
|
||||||
#define LG_NUM TG(_NUMPAD)
|
|
||||||
#define LT_LOW LT(_LOWER, KC_ENT)
|
#define LT_LOW LT(_LOWER, KC_ENT)
|
||||||
#define LT_RAI LT(_RAISE, KC_SPC)
|
#define LT_RAI LT(_RAISE, KC_SPC)
|
||||||
|
|
||||||
// Mod-Tap Keys
|
// Mod-Tap Keys
|
||||||
#define MT_DEL MT(MOD_LGUI | MOD_LALT | MOD_LSFT, KC_DEL)
|
#define MT_DEL MT(MOD_LALT | MOD_LSFT, KC_DEL)
|
||||||
#define MT_EQL MT(MOD_LALT | MOD_LSFT, KC_EQL)
|
#define MT_EQL MT(MOD_RSFT, KC_EQL)
|
||||||
|
|
||||||
// Layout blocks
|
// Layout blocks
|
||||||
#define _____________________QWERTY_L1______________________ T_TAB, T_Q, KC_W, KC_E, KC_R, KC_T
|
#define _____________________QWERTY_L1______________________ T_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T
|
||||||
#define _____________________QWERTY_L2______________________ T_ESC, KC_A, KC_S, KC_D, KC_F, KC_G
|
#define _____________________QWERTY_L2______________________ T_ESC, KC_A, KC_S, KC_D, KC_F, KC_G
|
||||||
#define _____________________QWERTY_L3______________________ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B
|
#define _____________________QWERTY_L3______________________ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B
|
||||||
|
|
||||||
@@ -130,7 +129,7 @@
|
|||||||
#define __________________________________ _______, _______, _______, _______
|
#define __________________________________ _______, _______, _______, _______
|
||||||
|
|
||||||
#define _____________MOD_LEFT_____________ KC_LALT, T_GUI, KC_LCTL, LT_RAI
|
#define _____________MOD_LEFT_____________ KC_LALT, T_GUI, KC_LCTL, LT_RAI
|
||||||
#define _____________MOD_RIGHT____________ LT_LOW, KC_BSPC, MT_DEL, T_CPNU
|
#define _____________MOD_RIGHT____________ LT_LOW, KC_BSPC, MT_DEL, T_CPAP
|
||||||
|
|
||||||
#define _________MEDIA_1_________ KC_BRIU, KC_MPLY, KC_MUTE
|
#define _________MEDIA_1_________ KC_BRIU, KC_MPLY, KC_MUTE
|
||||||
#define _________MEDIA_2_________ KC_BRID, KC_MFFD, KC__VOLUP
|
#define _________MEDIA_2_________ KC_BRID, KC_MFFD, KC__VOLUP
|
||||||
@@ -141,7 +140,7 @@
|
|||||||
#define ________MOD_RIGHT________ LT_LOW, KC_BSPC, MT_DEL
|
#define ________MOD_RIGHT________ LT_LOW, KC_BSPC, MT_DEL
|
||||||
#else
|
#else
|
||||||
#define ________MOD_LEFT_________ KC_LALT, T_GUI, KC_LCTL
|
#define ________MOD_LEFT_________ KC_LALT, T_GUI, KC_LCTL
|
||||||
#define ________MOD_RIGHT________ KC_BSPC, MT_DEL, T_CPNU
|
#define ________MOD_RIGHT________ KC_BSPC, MT_DEL, T_CPAP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Layout wrappers
|
// Layout wrappers
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
#include "ninjonas.h"
|
#include "ninjonas.h"
|
||||||
|
|
||||||
uint16_t copy_paste_timer;
|
|
||||||
|
|
||||||
__attribute__((weak))
|
__attribute__((weak))
|
||||||
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; }
|
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; }
|
||||||
|
|
||||||
@@ -92,18 +90,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Single key copy/paste
|
|
||||||
case M_COPA:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
copy_paste_timer = timer_read();
|
|
||||||
} else {
|
|
||||||
if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) {
|
|
||||||
tap_code16(LGUI(KC_C)); // Hold Cmd + C
|
|
||||||
} else {
|
|
||||||
tap_code16(LGUI(KC_V)); // Tap Cmd + V
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// BEGIN: Layer macros
|
// BEGIN: Layer macros
|
||||||
case QWERTY:
|
case QWERTY:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ enum custom_keycodes {
|
|||||||
M_VRSN,
|
M_VRSN,
|
||||||
M_CODE,
|
M_CODE,
|
||||||
M_TERM,
|
M_TERM,
|
||||||
M_COPA,
|
|
||||||
// Secret Macros
|
// Secret Macros
|
||||||
M_XXX1,
|
M_XXX1,
|
||||||
M_XXX2,
|
M_XXX2,
|
||||||
|
|||||||
@@ -2,11 +2,14 @@ BOOTMAGIC_ENABLE = no # Disable Boot Magic (https://beta.docs.qmk.fm/featu
|
|||||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
TAP_DANCE_ENABLE = yes # Enable Tap Dance.
|
TAP_DANCE_ENABLE = yes # Enable Tap Dance.
|
||||||
|
COMBO_ENABLE = yes # Enable Combos
|
||||||
|
|
||||||
SRC += ninjonas.c \
|
SRC += ninjonas.c \
|
||||||
process_records.c \
|
process_records.c \
|
||||||
tap_dances.c \
|
tap_dances.c \
|
||||||
oled.c
|
oled.c \
|
||||||
|
encoder.c \
|
||||||
|
combos.c
|
||||||
|
|
||||||
ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
|
ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
|
||||||
SRC += secrets.c
|
SRC += secrets.c
|
||||||
|
|||||||
+40
-26
@@ -2,28 +2,41 @@
|
|||||||
|
|
||||||
//// BEGIN: Advanced Tap Dances
|
//// BEGIN: Advanced Tap Dances
|
||||||
int cur_dance (qk_tap_dance_state_t *state) {
|
int cur_dance (qk_tap_dance_state_t *state) {
|
||||||
if (state->count == 1) {
|
if (state->count == 1) {
|
||||||
if (!state->pressed) {
|
if (state->interrupted || !state->pressed) return SINGLE_TAP;
|
||||||
return SINGLE_TAP;
|
//key has not been interrupted, but they key is still held. Means you want to send a 'HOLD'.
|
||||||
} else {
|
else return SINGLE_HOLD;
|
||||||
return SINGLE_HOLD;
|
|
||||||
}
|
|
||||||
} else if (state->count == 2) {
|
|
||||||
return DOUBLE_TAP;
|
|
||||||
}
|
}
|
||||||
else return 8;
|
else if (state->count == 2) {
|
||||||
|
/*
|
||||||
|
* DOUBLE_SINGLE_TAP is to distinguish between typing "pepper", and actually wanting a double tap
|
||||||
|
* action when hitting 'pp'. Suggested use case for this return value is when you want to send two
|
||||||
|
* keystrokes of the key, and not the 'double tap' action/macro.
|
||||||
|
*/
|
||||||
|
if (state->interrupted) return DOUBLE_SINGLE_TAP;
|
||||||
|
else if (state->pressed) return DOUBLE_HOLD;
|
||||||
|
else return DOUBLE_TAP;
|
||||||
|
}
|
||||||
|
//Assumes no one is trying to type the same letter three times (at least not quickly).
|
||||||
|
//If your tap dance key is 'KC_W', and you want to type "www." quickly - then you will need to add
|
||||||
|
//an exception here to return a 'TRIPLE_SINGLE_TAP', and define that enum just like 'DOUBLE_SINGLE_TAP'
|
||||||
|
if (state->count == 3) {
|
||||||
|
if (state->interrupted || !state->pressed) return TRIPLE_TAP;
|
||||||
|
else return TRIPLE_HOLD;
|
||||||
|
}
|
||||||
|
else return 8; //magic number. At some point this method will expand to work for more presses
|
||||||
}
|
}
|
||||||
|
|
||||||
// BEGIN: Copy, Paste, NUMPAD
|
// BEGIN: Copy, Paste, Apps
|
||||||
// https://beta.docs.qmk.fm/features/feature_tap_dance#example-6-using-tap-dance-for-momentary-layer-switch-and-layer-toggle-keys
|
// https://beta.docs.qmk.fm/features/feature_tap_dance#example-6-using-tap-dance-for-momentary-layer-switch-and-layer-toggle-keys
|
||||||
static tap copy_paste_numpad_tap_state = {
|
static tap copy_paste_app_tap_state = {
|
||||||
.is_press_action = true,
|
.is_press_action = true,
|
||||||
.state = 0
|
.state = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
void copy_paste_numpad_finished (qk_tap_dance_state_t *state, void *user_data) {
|
void copy_paste_app_finished (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
copy_paste_numpad_tap_state.state = cur_dance(state);
|
copy_paste_app_tap_state.state = cur_dance(state);
|
||||||
switch (copy_paste_numpad_tap_state.state) {
|
switch (copy_paste_app_tap_state.state) {
|
||||||
case SINGLE_TAP:
|
case SINGLE_TAP:
|
||||||
tap_code16(LGUI(KC_V)); // Tap Cmd + V
|
tap_code16(LGUI(KC_V)); // Tap Cmd + V
|
||||||
break;
|
break;
|
||||||
@@ -31,19 +44,22 @@ void copy_paste_numpad_finished (qk_tap_dance_state_t *state, void *user_data) {
|
|||||||
tap_code16(LGUI(KC_C)); // Hold Cmd + C
|
tap_code16(LGUI(KC_C)); // Hold Cmd + C
|
||||||
break;
|
break;
|
||||||
case DOUBLE_TAP:
|
case DOUBLE_TAP:
|
||||||
if (layer_state_is(_NUMPAD)) {
|
SEND_STRING(SS_DOWN(X_LGUI) SS_TAP(X_SPACE) SS_UP(X_LGUI));
|
||||||
layer_off(_NUMPAD);
|
wait_ms(250);
|
||||||
} else {
|
SEND_STRING("line\n");
|
||||||
layer_on(_NUMPAD);
|
break;
|
||||||
}
|
case TRIPLE_TAP:
|
||||||
|
SEND_STRING(SS_DOWN(X_LGUI) SS_TAP(X_SPACE) SS_UP(X_LGUI));
|
||||||
|
wait_ms(250);
|
||||||
|
SEND_STRING("itunes\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void copy_paste_numpad_reset (qk_tap_dance_state_t *state, void *user_data) {
|
void copy_paste_app_reset (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
copy_paste_numpad_tap_state.state = 0;
|
copy_paste_app_tap_state.state = 0;
|
||||||
}
|
}
|
||||||
// END: Copy, Paste, NUMPAD
|
// END: Copy, Paste, Apps
|
||||||
|
|
||||||
// BEGIN: Y, NUMPAD
|
// BEGIN: Y, NUMPAD
|
||||||
static tap y_numpad_tap_state = {
|
static tap y_numpad_tap_state = {
|
||||||
@@ -89,10 +105,8 @@ qk_tap_dance_action_t tap_dance_actions[] = {
|
|||||||
[TD_TAB_CTRLTAB] = ACTION_TAP_DANCE_DOUBLE(KC_TAB, LCTL(KC_TAB)),
|
[TD_TAB_CTRLTAB] = ACTION_TAP_DANCE_DOUBLE(KC_TAB, LCTL(KC_TAB)),
|
||||||
[TD_GRV_CTRLGRV] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, LGUI(KC_GRV)),
|
[TD_GRV_CTRLGRV] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, LGUI(KC_GRV)),
|
||||||
[TD_GUI_GUISPC] = ACTION_TAP_DANCE_DOUBLE(KC_LGUI, LGUI(KC_SPC)),
|
[TD_GUI_GUISPC] = ACTION_TAP_DANCE_DOUBLE(KC_LGUI, LGUI(KC_SPC)),
|
||||||
[TD_W_CTRLW] = ACTION_TAP_DANCE_DOUBLE(KC_W, LGUI(KC_W)),
|
|
||||||
[TD_Q_GUIQ] = ACTION_TAP_DANCE_DOUBLE(KC_Q, LGUI(KC_Q)),
|
|
||||||
|
|
||||||
// Advanced Tap Dances
|
// Advanced Tap Dances
|
||||||
[TD_COPY_PASTE_NUMPAD] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, copy_paste_numpad_finished, copy_paste_numpad_reset),
|
[TD_COPY_PASTE_APP] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, copy_paste_app_finished, copy_paste_app_reset, 300),
|
||||||
[TD_Y_NUMPAD] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, y_numpad_finished, y_numpad_reset),
|
[TD_Y_NUMPAD] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, y_numpad_finished, y_numpad_reset, 300),
|
||||||
};
|
};
|
||||||
@@ -9,7 +9,11 @@ typedef struct {
|
|||||||
enum tapdance_types{
|
enum tapdance_types{
|
||||||
SINGLE_TAP = 1,
|
SINGLE_TAP = 1,
|
||||||
SINGLE_HOLD = 2,
|
SINGLE_HOLD = 2,
|
||||||
DOUBLE_TAP = 3
|
DOUBLE_TAP = 3,
|
||||||
|
DOUBLE_HOLD = 4,
|
||||||
|
DOUBLE_SINGLE_TAP = 5, //send two single taps
|
||||||
|
TRIPLE_TAP = 6,
|
||||||
|
TRIPLE_HOLD = 7
|
||||||
};
|
};
|
||||||
|
|
||||||
enum custom_tapdances{
|
enum custom_tapdances{
|
||||||
@@ -19,9 +23,7 @@ enum custom_tapdances{
|
|||||||
TD_TAB_CTRLTAB,
|
TD_TAB_CTRLTAB,
|
||||||
TD_GRV_CTRLGRV,
|
TD_GRV_CTRLGRV,
|
||||||
TD_GUI_GUISPC,
|
TD_GUI_GUISPC,
|
||||||
TD_W_CTRLW,
|
TD_COPY_PASTE_APP,
|
||||||
TD_Q_GUIQ,
|
|
||||||
TD_COPY_PASTE_NUMPAD,
|
|
||||||
TD_Y_NUMPAD,
|
TD_Y_NUMPAD,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -31,7 +33,5 @@ enum custom_tapdances{
|
|||||||
#define T_TAB TD(TD_TAB_CTRLTAB) // Tap for TAB, double tap for CTRL + TAB
|
#define T_TAB TD(TD_TAB_CTRLTAB) // Tap for TAB, double tap for CTRL + TAB
|
||||||
#define T_GRV TD(TD_GRV_CTRLGRV) // Tap for GRV, double tap for Cmd + GRV
|
#define T_GRV TD(TD_GRV_CTRLGRV) // Tap for GRV, double tap for Cmd + GRV
|
||||||
#define T_GUI TD(TD_GUI_GUISPC) // Tap for Cmd, double tap for Cmd + Space
|
#define T_GUI TD(TD_GUI_GUISPC) // Tap for Cmd, double tap for Cmd + Space
|
||||||
#define T_W TD(TD_W_CTRLW) // Tap for W, double tap for Cmd + W
|
#define T_CPAP TD(TD_COPY_PASTE_APP) // Tap for paste, hold for copy, double tap for Line App
|
||||||
#define T_Q TD(TD_Q_GUIQ) // Tap for Q, double tap for Cmd + Q
|
|
||||||
#define T_CPNU TD(TD_COPY_PASTE_NUMPAD) // Tap for paste, hold for copy, double tap for NUMPAD
|
|
||||||
#define T_Y TD(TD_Y_NUMPAD) // Tap for Y, double tap for NUMPAD
|
#define T_Y TD(TD_Y_NUMPAD) // Tap for Y, double tap for NUMPAD
|
||||||
Reference in new issue
Block a user