Compare commits

...
13 Commits
Author SHA1 Message Date
MelGeekandRyan fe744eb1ad [Driver] bugfix reset the scaling register flag to FALSE (#9507)
Co-authored-by: Ryan <[email protected]>
2020-07-06 22:38:41 +10:00
Brennan Vincent 85e20a5cf4 Fix typo in freebsd_install.sh (#9655) 2020-07-06 02:20:46 +10:00
stanrc85 da5aed6bef [Keymap] Add Alice rev2 to my userspace (#9600) 2020-07-04 20:51:37 -07:00
Alabahuy acb9cf12c4 [Keyboard] RART67 : add support via (#9589) 2020-07-04 20:36:42 -07:00
siano ade3bdf7e7 [Keyboard] XD87 Caps Lock LED refactor (#9585) 2020-07-04 20:31:07 -07:00
83bc0b9e80 [Keyboard] Updated VIA Support for DP60 (#9508)
* Updated VIA Support

- Added LAYOUT_all Support for VIA compatibility
- Updated default dp60\layouts\via\keymap.c to mmirror changes to 
LAYOUT_all
- Rules.mk updated in both base and via directories.


Co-authored-by: Ryan <[email protected]>
Co-authored-by: Joel Challis <[email protected]>
2020-07-04 19:20:22 -07:00
yanekm 29ebb99b1f fixed link to Eclipse instructions (#9647) 2020-07-05 08:50:01 +10:00
QMK Bot 355f075b57 format code according to conventions [skip ci] 2020-07-04 15:01:25 +00:00
Takeshi ISHII c2ca57c8f4 add DIP_SWITCH_MATRIX_GRID support (#8772)
* dipsw test on helix/rev2/sc/back:five_rows

* add peek_matrix() to matrix_common.c

* add DIP_SWITCH_MATRIX_GRID support to quantum/dip_switch.c

* update docs/feature_dip_switch.md about DIP_SWITCH_MATRIX_GRID

* Test end. remove test code. Revert "dipsw test on helix/rev2/sc/back:five_rows"

This reverts commit 6d4304c74557597c9fb4d324f79c3ae4793ae874.
2020-07-04 23:20:49 +09:00
Takeshi ISHIIandDanny 5c8b23ccff add SPLIT_HAND_MATRIX_GRID support (#8685)
Co-authored-by: Danny <[email protected]>
2020-07-04 15:04:47 +01:00
13a8d1681c [Keyboard] Gowla Macro Board (#9643)
Co-authored-by: Ryan <[email protected]>
Co-authored-by: Erovia <[email protected]>
2020-07-04 11:51:42 +01:00
Olli b30d0361c5 Fix “G” in Neo2 keymap (#9645)
Fix duplicated “NE_H” definition to use “NE_G” in Neo2 keymap,
introduced with commit 44ff14f.
2020-07-04 11:43:52 +01:00
kwlodarczy 063a74b660 Rotr - Updated README and default keymap (#9598) 2020-07-04 14:48:37 +10:00
28 changed files with 383 additions and 52 deletions

No files matched your search

+4 -1
View File
@@ -250,7 +250,10 @@ There are a few different ways to set handedness for split keyboards (listed in
* `#define SPLIT_HAND_PIN B7` * `#define SPLIT_HAND_PIN B7`
* For using high/low pin to determine handedness, low = right hand, high = left hand. Replace `B7` with the pin you are using. This is optional, and if you leave `SPLIT_HAND_PIN` undefined, then you can still use the EE_HANDS method or MASTER_LEFT / MASTER_RIGHT defines like the stock Let's Split uses. * For using high/low pin to determine handedness, low = right hand, high = left hand. Replace `B7` with the pin you are using. This is optional, and if you leave `SPLIT_HAND_PIN` undefined, then you can still use the EE_HANDS method or MASTER_LEFT / MASTER_RIGHT defines like the stock Let's Split uses.
* `#define EE_HANDS` (only works if `SPLIT_HAND_PIN` is not defined) * `#define SPLIT_HAND_MATRIX_GRID <out_pin>,<in_pin>`
* The handedness is determined by using the intersection of the keyswitches in the key matrix, which does not exist. Normally, when this intersection is shorted (level low), it is considered left. If you define `#define SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT`, it is determined to be right when the level is low.
* `#define EE_HANDS` (only works if `SPLIT_HAND_PIN` and `SPLIT_HAND_MATRIX_GRID` are not defined)
* Reads the handedness value stored in the EEPROM after `eeprom-lefthand.eep`/`eeprom-righthand.eep` has been flashed to their respective halves. * Reads the handedness value stored in the EEPROM after `eeprom-lefthand.eep`/`eeprom-righthand.eep` has been flashed to their respective halves.
* `#define MASTER_RIGHT` * `#define MASTER_RIGHT`
+14
View File
@@ -7,9 +7,17 @@ DIP switches are supported by adding this to your `rules.mk`:
and this to your `config.h`: and this to your `config.h`:
```c ```c
// Connects each switch in the dip switch to the GPIO pin of the MCU
#define DIP_SWITCH_PINS { B14, A15, A10, B9 } #define DIP_SWITCH_PINS { B14, A15, A10, B9 }
``` ```
or
```c
// Connect each switch in the DIP switch to an unused intersections in the key matrix.
#define DIP_SWITCH_MATRIX_GRID { {0,6}, {1,6}, {2,6} } // List of row and col pairs
```
## Callbacks ## Callbacks
The callback functions can be inserted into your `<keyboard>.c`: The callback functions can be inserted into your `<keyboard>.c`:
@@ -87,4 +95,10 @@ void dip_switch_update_mask_user(uint32_t state) {
## Hardware ## Hardware
### Connects each switch in the dip switch to the GPIO pin of the MCU
One side of the DIP switch should be wired directly to the pin on the MCU, and the other side to ground. It should not matter which side is connected to which, as it should be functionally the same. One side of the DIP switch should be wired directly to the pin on the MCU, and the other side to ground. It should not matter which side is connected to which, as it should be functionally the same.
### Connect each switch in the DIP switch to an unused intersections in the key matrix.
As with the keyswitch, a diode and DIP switch connect the ROW line to the COL line.
+18
View File
@@ -90,6 +90,24 @@ You can configure the firmware to read a pin on the controller to determine hand
This will read the specified pin. If it's high, then the controller assumes it is the left hand, and if it's low, it's assumed to be the right side. This will read the specified pin. If it's high, then the controller assumes it is the left hand, and if it's low, it's assumed to be the right side.
#### Handedness by Matrix Pin
You can configure the firmware to read key matrix pins on the controller to determine handedness. To do this, add the following to your `config.h` file:
```c
#define SPLIT_HAND_MATRIX_GRID D0, F1
```
The first pin is the output pin and the second is the input pin.
Some keyboards have unused intersections in the key matrix. This setting uses one of these unused intersections to determine the handness.
Normally, when a diode is connected to an intersection, it is judged to be left. If you add the following definition, it will be judged to be right.
```c
#define SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT
```
#### Handedness by EEPROM #### Handedness by EEPROM
This method sets the keyboard's handedness by setting a flag in the persistent storage (`EEPROM`). This is checked when the controller first starts up, and determines what half the keyboard is, and how to orient the keyboard layout. This method sets the keyboard's handedness by setting a flag in the persistent storage (`EEPROM`). This is checked when the controller first starts up, and determines what half the keyboard is, and how to orient the keyboard layout.
+1 -1
View File
@@ -41,7 +41,7 @@ A macro which has been recorded on the keyboard and which will be lost when the
## Eclipse ## Eclipse
An IDE that is popular with many C developers. An IDE that is popular with many C developers.
* [Eclipse Setup Instructions](eclipse.md) * [Eclipse Setup Instructions](other_eclipse.md)
## Firmware ## Firmware
The software that controls your MCU. The software that controls your MCU.
+2
View File
@@ -272,6 +272,8 @@ void IS31FL3741_update_led_control_registers(uint8_t addr, uint8_t index) {
for (int i = 0; i < 171; ++i) { for (int i = 0; i < 171; ++i) {
IS31FL3741_write_register(addr, i, g_scaling_registers[0][180 + i]); IS31FL3741_write_register(addr, i, g_scaling_registers[0][180 + i]);
} }
g_scaling_registers_update_required[index] = false;
} }
} }
+1 -1
View File
@@ -11,7 +11,7 @@
#define PRODUCT_ID 0x00BE #define PRODUCT_ID 0x00BE
#define DEVICE_VER 0x0001 #define DEVICE_VER 0x0001
#define MANUFACTURER astro #define MANUFACTURER astro
#define PRODUCT Dumplings #define PRODUCT DP60
#define DESCRIPTION 60% rgb keyboard with ble extension #define DESCRIPTION 60% rgb keyboard with ble extension
/* key matrix size */ /* key matrix size */
+44 -1
View File
@@ -9,6 +9,49 @@
// This a shortcut to help you visually see your layout. // This a shortcut to help you visually see your layout.
// The first section contains all of the arguements // The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array // The second converts the arguments into a two-dimensional array
// Matrix layout to accomodate all layouts. Good for VIA mapping correctly, and it doesnt exist yet
//
//┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──────┐
//│0A││0B││0C││0D││0E││0F││0G││4H││0H││0I││0J││0K││0L││0M││0N│ │ 0N │ split backspace support
//└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘ └──────┘
// 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0e
//┌────┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌────┐ ┌────┐
//│1A ││1B││1C││1D││1E││1F││1G││1H││1I││1J││1K││1L││1M││1N │ │ │ iso enter - see below
//└────┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└────┘ └────┘
// 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1e
//┌─────┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌───────┐ ┌──┐┌──┐
//│ 2A ││2B││2C││2D││2E││2F││2G││2H││2I││2J││2K││2L││ 2N │ │2M││2N│ iso enter
//└─────┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└───────┘ └──┘└──┘
// 20 22 23 24 25 26 27 28 29 2a 2b 2c 2e 2d 2e
//┌───────┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌─────────┐
//│3A │ 3B││3C││3D││3E││3F││3G││3H││3I││3J││3K││3L││ 3M │3N│ split shifts (left and right)
//└───────┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└─────────┘
// 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d
//┌───┐┌───┐┌───┐┌───────────────────────┐┌───┐┌───┐┌───┐┌───┐
//│4A ││4B ││4C ││ 4G ││4K ││4L ││4M ││4N │ wkl/hhkb use 4L (k49), 4M (k4a) , 4N (k4b)
//└───┘└───┘└───┘└───────────────────────┘└───┘└───┘└───┘└───┘
// 40 42 43 47 48 49 4a 4b
//end of mapping
//
//added k0d
//added k2d KC_NUMS for iso
//added k31 split l-shift, k3d split r-shift
#define LAYOUT_all( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
k40, k42, k43, k47, k48, k49, k4a, k4b \
) \
{ \
{k00, k01, k02, k03, k04, k05, k06, k08, k09, k0a, k0b, k0c, k0d, k0e}, \
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
{k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e}, \
{k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
{k40, k42, k43, KC_NO, KC_NO, KC_NO, k47, k07, KC_NO, KC_NO, k48, k49, k4a, k4b} \
}
#define LAYOUT_60_ansi( \ #define LAYOUT_60_ansi( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
@@ -28,7 +71,7 @@
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
k40, k42, k43, k47, k48, k49, k4a, k4b \ k40, k42, k43, k47, k48, k49, k4a, k4b \
) \ ) \
{ \ { \
+25 -25
View File
@@ -1,31 +1,31 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_ansi_split_bs_rshift( [0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_DEL, KC_BSPC, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_DEL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, TG(1), KC_RCTL), KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI,KC_RALT, MO(1), KC_RCTL),
[1] = LAYOUT_60_ansi_split_bs_rshift(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,_______,KC_PSCR,
RESET, RGB_TOG,RGB_MOD,_______,_______,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,
_______, _______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RIGHT,KC_HOME,KC_END,_______,
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
_______,_______,_______, _______, _______,_______,TG(0),_______),
[2] = LAYOUT_60_ansi_split_bs_rshift( [1] = LAYOUT_all(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,_______,KC_DEL,
RESET, _______,KC_UP,_______,_______,_______,_______,_______,KC_PAUS,KC_SLCK,KC_PSCR,KC_PGUP,_______,KC_INS,
_______, KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______, _______,_______,KC_HOME,KC_END,_______, _______,
_______,_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_PGDN,_______,_______,
_______,_______,_______, _______, _______,MO(2),TG(0),_______),
[2] = LAYOUT_all(
_______, _______,_______, _______,_______, _______,_______, _______,_______, _______,_______, _______,_______,_______,_______,
_______, _______,KC_VOLU,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
KC_MUTE, KC_MPRV,KC_VOLD,KC_MNXT,_______,_______,_______,_______, _______,_______,_______,_______,_______, _______,
_______, _______, RGB_TOG,RGB_MOD,RGB_RMOD,RGB_VAI,RGB_VAD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,_______,_______,_______,
_______,_______,_______, KC_MPLY, _______,_______,_______,_______),
[3] = LAYOUT_all(
_______, _______,_______, _______,_______, _______,_______, _______,_______, _______,_______, _______,_______,_______,_______, _______, _______,_______, _______,_______, _______,_______, _______,_______, _______,_______, _______,_______,_______,_______,
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
_______, _______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______, _______, _______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
_______,_______,_______, _______, _______,_______,_______,_______), _______,_______,_______, _______, _______,_______,_______,_______)
};
[3] = LAYOUT_60_ansi_split_bs_rshift(
_______, _______,_______, _______,_______, _______,_______, _______,_______, _______,_______, _______,_______,_______,_______,
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
_______, _______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
_______,_______,_______, _______, _______,_______,_______,_______)
};
+1
View File
@@ -1,2 +1,3 @@
VIA_ENABLE = yes VIA_ENABLE = yes
LTO_ENABLE = yes LTO_ENABLE = yes
RGBLIGHT_ENABLE = yes #enables underglow, but will not disable per key leds
+2 -2
View File
@@ -22,14 +22,14 @@ COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
MIDI_ENABLE = no # MIDI support MIDI_ENABLE = no # MIDI support
UNICODE_ENABLE = no # Unicode UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6 AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
#RGBLIGHT_ENABLE = yes # Use RGB underglow light RGBLIGHT_ENABLE = no # Use RGB underglow light
RGB_MATRIX_ENABLE = yes # Use RGB matrix RGB_MATRIX_ENABLE = yes # Use RGB matrix
LAYOUTS = 60_ansi 60_hhkb 60_iso 60_ansi_split_bs_rshift LAYOUTS = 60_ansi 60_hhkb 60_iso 60_ansi_split_bs_rshift
+38
View File
@@ -0,0 +1,38 @@
/*
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 "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0xE9B6
#define DEVICE_VER 0x0001
#define MANUFACTURER Gowla
#define PRODUCT Gowla Macro Board
#define DESCRIPTION 3x3 PCB
/* Matrix size */
#define MATRIX_ROWS 3
#define MATRIX_COLS 3
/* Pin-out */
#define MATRIX_ROW_PINS { D1, D0, D4 }
#define MATRIX_COL_PINS { B5, B4, E6 }
#define UNUSED_PINS
/* ROW2COL */
#define DIODE_DIRECTION ROW2COL
+1
View File
@@ -0,0 +1 @@
#include "gowla.h"
+13
View File
@@ -0,0 +1,13 @@
#pragma once
#include "quantum.h"
#define LAYOUT_ortho_3x3( \
k00, k01, k02, \
k10, k11, k12, \
k20, k21, k22 \
) { \
{ k00, k01, k02 }, \
{ k10, k11, k12 }, \
{ k20, k21, k22 } \
}
+24
View File
@@ -0,0 +1,24 @@
{
"keyboard_name": "Gowla Macro Pad",
"url": "https://github.com/SamGowland/Gowla-Macro-Board",
"maintainer": "Gowla",
"width": 3,
"height": 3,
"layouts": {
"LAYOUT_ortho_3x3": {
"layout": [
{"x": 0, "y": 0},
{"x": 1, "y": 0},
{"x": 2, "y": 0},
{"x": 0, "y": 1},
{"x": 1, "y": 1},
{"x": 2, "y": 1},
{"x": 0, "y": 2},
{"x": 1, "y": 2},
{"x": 2, "y": 2}
]
}
}
}
+14
View File
@@ -0,0 +1,14 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_ortho_3x3(
LT(1, KC_MPRV), KC_MNXT, KC_MPLY,
KC_VOLD, KC_UP, KC_VOLU,
KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_ortho_3x3(
KC_ESC, KC_MPLY, RESET,
KC_P7, KC_P1, KC_F1,
KC_F2, KC_F3, KC_F4
)
};
+15
View File
@@ -0,0 +1,15 @@
# Gowla Macro Board
![Gowla](https://github.com/SamGowland/Gowla-Macro-Board/blob/master/Images/comp.jpg)
Simple Compact 3x3 Macro Board for use with QMK, designed and sold by Gowla.
* Keyboard Maintainer: [Gowla](https://github.com/SamGowland/)
* Hardware Supported: Pro Micro ATmega32U4, Cherry Mount Switches
* Hardware Availability: [Repo](https://github.com/SamGowland/Gowla-Macro-Board)
Make example for this keyboard (after setting up your build environment):
make gowla:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+31
View File
@@ -0,0 +1,31 @@
# MCU name
MCU = atmega32u4
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# ATmega32A bootloadHID
# ATmega328P USBasp
BOOTLOADER = caterina
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support
BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = no # Audio output
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
@@ -0,0 +1,36 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC, KC_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_all(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, _______,
RESET, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_P7, KC_P8, KC_P9, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_NLCK, _______,
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, KC_P1, KC_P2, KC_P3, KC_VOLU, _______,
_______, _______, _______, _______, _______, KC_P0, KC_MPRV, KC_VOLD, KC_MNXT
),
[2] = LAYOUT_all(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
[3] = LAYOUT_all(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
@@ -0,0 +1,2 @@
VIA_ENABLE = yes
LTO_ENABLE = yes
+1 -1
View File
@@ -1,7 +1,7 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LAYOUT( [0] = LAYOUT(
KC_MPRV, KC_MPLY, KC_MNXT KC_MPRV, KC_MPLY, KC_MNXT
) )
}; };
+7 -4
View File
@@ -8,10 +8,13 @@ A macro pad with a multipurpose knob.
* Hardware: [Geekhack](https://geekhack.org/index.php?topic=107104.0) * Hardware: [Geekhack](https://geekhack.org/index.php?topic=107104.0)
## Features: ## Features:
* Minimal design with plug and play functionality. * Will ship pre-programmed and ready to use
* Frictionless, solid brass knob. * Hot swap sockets
* Hot swappable switches. * USB C
* USB C connection. * RGB LEDs for switches
* CNC milled aluminium case
* Solid brass knob
* Free spinning magnetic rotary encoder
Make example for this keyboard (after setting up your build environment): Make example for this keyboard (after setting up your build environment):
+6 -8
View File
@@ -36,16 +36,14 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
return process_record_user(keycode, record); return process_record_user(keycode, record);
} }
void led_set_kb(uint8_t usb_led) { bool led_update_kb(led_t led_state) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here bool res = led_update_user(led_state);
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) { if (res) {
writePinLow(E2); writePin(E2, !led_state.caps_lock);
} else { }
writePinHigh(E2);
}
led_set_user(usb_led); return res;
} }
void led_init_ports(void) { void led_init_ports(void) {
+49 -6
View File
@@ -21,14 +21,33 @@
// for memcpy // for memcpy
#include <string.h> #include <string.h>
#if !defined(DIP_SWITCH_PINS) #if !defined(DIP_SWITCH_PINS) && !defined(DIP_SWITCH_MATRIX_GRID)
# error "No DIP switch pads defined by DIP_SWITCH_PINS" # error "Either DIP_SWITCH_PINS or DIP_SWITCH_MATRIX_GRID must be defined."
#endif #endif
#define NUMBER_OF_DIP_SWITCHES (sizeof(dip_switch_pad) / sizeof(pin_t)) #if defined(DIP_SWITCH_PINS) && defined(DIP_SWITCH_MATRIX_GRID)
static pin_t dip_switch_pad[] = DIP_SWITCH_PINS; # error "Both DIP_SWITCH_PINS and DIP_SWITCH_MATRIX_GRID are defined."
static bool dip_switch_state[NUMBER_OF_DIP_SWITCHES] = {0}; #endif
static bool last_dip_switch_state[NUMBER_OF_DIP_SWITCHES] = {0};
#ifdef DIP_SWITCH_PINS
# define NUMBER_OF_DIP_SWITCHES (sizeof(dip_switch_pad) / sizeof(pin_t))
static pin_t dip_switch_pad[] = DIP_SWITCH_PINS;
#endif
#ifdef DIP_SWITCH_MATRIX_GRID
typedef struct matrix_index_t {
uint8_t row;
uint8_t col;
} matrix_index_t;
# define NUMBER_OF_DIP_SWITCHES (sizeof(dip_switch_pad) / sizeof(matrix_index_t))
static matrix_index_t dip_switch_pad[] = DIP_SWITCH_MATRIX_GRID;
extern bool peek_matrix(uint8_t row_index, uint8_t col_index, bool read_raw);
static uint16_t scan_count;
#endif /* DIP_SWITCH_MATRIX_GRID */
static bool dip_switch_state[NUMBER_OF_DIP_SWITCHES] = {0};
static bool last_dip_switch_state[NUMBER_OF_DIP_SWITCHES] = {0};
__attribute__((weak)) void dip_switch_update_user(uint8_t index, bool active) {} __attribute__((weak)) void dip_switch_update_user(uint8_t index, bool active) {}
@@ -39,18 +58,42 @@ __attribute__((weak)) void dip_switch_update_mask_user(uint32_t state) {}
__attribute__((weak)) void dip_switch_update_mask_kb(uint32_t state) { dip_switch_update_mask_user(state); } __attribute__((weak)) void dip_switch_update_mask_kb(uint32_t state) { dip_switch_update_mask_user(state); }
void dip_switch_init(void) { void dip_switch_init(void) {
#ifdef DIP_SWITCH_PINS
for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) { for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) {
setPinInputHigh(dip_switch_pad[i]); setPinInputHigh(dip_switch_pad[i]);
} }
dip_switch_read(true); dip_switch_read(true);
#endif
#ifdef DIP_SWITCH_MATRIX_GRID
scan_count = 0;
#endif
} }
void dip_switch_read(bool forced) { void dip_switch_read(bool forced) {
bool has_dip_state_changed = false; bool has_dip_state_changed = false;
uint32_t dip_switch_mask = 0; uint32_t dip_switch_mask = 0;
#ifdef DIP_SWITCH_MATRIX_GRID
bool read_raw = false;
if (scan_count < 500) {
scan_count++;
if (scan_count == 10) {
read_raw = true;
forced = true; /* First reading of the dip switch */
} else {
return;
}
}
#endif
for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) { for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) {
#ifdef DIP_SWITCH_PINS
dip_switch_state[i] = !readPin(dip_switch_pad[i]); dip_switch_state[i] = !readPin(dip_switch_pad[i]);
#endif
#ifdef DIP_SWITCH_MATRIX_GRID
dip_switch_state[i] = peek_matrix(dip_switch_pad[i].row, dip_switch_pad[i].col, read_raw);
#endif
dip_switch_mask |= dip_switch_state[i] << i; dip_switch_mask |= dip_switch_state[i] << i;
if (last_dip_switch_state[i] != dip_switch_state[i] || forced) { if (last_dip_switch_state[i] != dip_switch_state[i] || forced) {
has_dip_state_changed = true; has_dip_state_changed = true;
+1 -1
View File
@@ -55,7 +55,7 @@
#define NE_W KC_T // W #define NE_W KC_T // W
#define NE_K KC_Y // K #define NE_K KC_Y // K
#define NE_H KC_U // H #define NE_H KC_U // H
#define NE_H KC_I // G #define NE_G KC_I // G
#define NE_F KC_O // F #define NE_F KC_O // F
#define NE_Q KC_P // Q #define NE_Q KC_P // Q
#define NE_SS KC_LBRC // ß #define NE_SS KC_LBRC // ß
+2
View File
@@ -112,3 +112,5 @@ __attribute__((weak)) uint8_t matrix_scan(void) {
matrix_scan_quantum(); matrix_scan_quantum();
return changed; return changed;
} }
__attribute__((weak)) bool peek_matrix(uint8_t row_index, uint8_t col_index, bool raw) { return 0 != ((raw ? raw_matrix[row_index] : matrix[row_index]) & (MATRIX_ROW_SHIFTER << col_index)); }
+24
View File
@@ -5,6 +5,7 @@
#include "timer.h" #include "timer.h"
#include "transport.h" #include "transport.h"
#include "quantum.h" #include "quantum.h"
#include "wait.h"
#ifdef PROTOCOL_LUFA #ifdef PROTOCOL_LUFA
# include <LUFA/Drivers/USB/USB.h> # include <LUFA/Drivers/USB/USB.h>
@@ -82,11 +83,34 @@ static inline bool usbIsActive(void) {
static inline bool usbIsActive(void) { return true; } static inline bool usbIsActive(void) { return true; }
#endif #endif
#ifdef SPLIT_HAND_MATRIX_GRID
void matrix_io_delay(void);
static uint8_t peek_matrix_intersection(pin_t out_pin, pin_t in_pin) {
setPinInputHigh(in_pin);
setPinOutput(out_pin);
writePinLow(out_pin);
// It's almost unnecessary, but wait until it's down to low, just in case.
wait_us(1);
uint8_t pin_state = readPin(in_pin);
// Set out_pin to a setting that is less susceptible to noise.
setPinInputHigh(out_pin);
matrix_io_delay(); // Wait for the pull-up to go HIGH.
return pin_state;
}
#endif
__attribute__((weak)) bool is_keyboard_left(void) { __attribute__((weak)) bool is_keyboard_left(void) {
#if defined(SPLIT_HAND_PIN) #if defined(SPLIT_HAND_PIN)
// Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand // Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand
setPinInput(SPLIT_HAND_PIN); setPinInput(SPLIT_HAND_PIN);
return readPin(SPLIT_HAND_PIN); return readPin(SPLIT_HAND_PIN);
#elif defined(SPLIT_HAND_MATRIX_GRID)
# ifdef SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT
return peek_matrix_intersection(SPLIT_HAND_MATRIX_GRID);
# else
return !peek_matrix_intersection(SPLIT_HAND_MATRIX_GRID);
# endif
#elif defined(EE_HANDS) #elif defined(EE_HANDS)
return eeconfig_read_handedness(); return eeconfig_read_handedness();
#elif defined(MASTER_RIGHT) #elif defined(MASTER_RIGHT)
+6
View File
@@ -25,4 +25,10 @@ ifeq ($(strip $(KEYBOARD)), projectkb/alice/rev1)
VIA_ENABLE = yes VIA_ENABLE = yes
LTO_ENABLE = no LTO_ENABLE = no
VELOCIKEY_ENABLE=yes VELOCIKEY_ENABLE=yes
endif
ifeq ($(strip $(KEYBOARD)), projectkb/alice/rev2)
SRC += rgblight_layers.c
VIA_ENABLE = yes
LTO_ENABLE = no
VELOCIKEY_ENABLE=yes
endif endif
+1 -1
View File
@@ -29,7 +29,7 @@ if [ $(id -u) = 0 ]; then
else else
if command -v sudo > /dev/null 2>&1; then if command -v sudo > /dev/null 2>&1; then
sudo pkg update sudo pkg update
sudp pkg install -y ${packages} sudo pkg install -y ${packages}
else else
echo "Make sure you run setup as root first to install base OS dependencies..." echo "Make sure you run setup as root first to install base OS dependencies..."
echo "" echo ""