~ruther/qmk_firmware

249eb871028aaaaf508136088ef25fb67a83b28e — 66f9e4eae 3 years ago b1f8622
[Keyboard] [redox_w] add dvorak layout and white led support (#16259)

Co-authored-by: Drashna Jaelre <drashna@live.com>
A keyboards/redox_w/keymaps/dvorak/keymap.c => keyboards/redox_w/keymaps/dvorak/keymap.c +128 -0
@@ 0,0 1,128 @@
/* Copyright 2021 66f94eae(66f94eae@gmail.com)
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include QMK_KEYBOARD_H

// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum layers {
    _DVORAK,
    _SYMB,
    _QWERTY,
    _ADJUST,
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

[_DVORAK] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
    KC_GESC  ,KC_1    ,KC_2    ,KC_3    ,KC_4    ,KC_5    ,                                            KC_6    ,KC_7    ,KC_8    ,KC_9    ,KC_0    ,KC_BSPC ,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
    KC_TAB  ,KC_QUOT ,KC_COMM ,KC_DOT  ,KC_P    ,KC_Y    ,KC_LBRC,                          KC_RBRC ,KC_F    ,KC_G    ,KC_C    ,KC_R    ,KC_L    ,KC_SLSH  ,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
    KC_LCTL  ,KC_A   ,KC_O    ,KC_E    ,KC_U    ,KC_I    ,KC_MINS,                          KC_EQL   ,KC_D    ,KC_H    ,KC_T    ,KC_N    ,KC_S    ,KC_BSLS ,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
    KC_LSFT ,KC_SCLN ,KC_Q    ,KC_J    ,KC_K    ,KC_X    ,KC_PGUP ,KC_HOME ,        KC_END  ,KC_PGDN ,KC_B    ,KC_M    ,KC_W   ,KC_V     ,KC_Z    ,KC_RSFT ,
//├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
    KC_CAPS ,KC_APP ,KC_LALT ,KC_LGUI  ,    LT(3,KC_MUTE), KC_SPC  ,KC_INS  ,        KC_DEL  ,KC_ENT  ,    KC_RALT ,     KC_LEFT ,KC_DOWN ,KC_UP   ,KC_RGHT
//└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
),

[_SYMB] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
    KC_GESC  ,KC_F1   ,KC_F2   ,KC_F3   ,KC_F4   ,KC_F5   ,                                            KC_F8   ,KC_F9   ,KC_F10   ,KC_F11  ,KC_F12 ,KC_BSPC ,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
    KC_TAB , KC_BTN1 ,KC_MS_U  ,KC_BTN2 ,KC_WH_U ,KC_COPY ,KC_F6 ,                            KC_F7  ,KC_COPY ,KC_P7 	,KC_P8 	 ,KC_P9   ,KC_MPRV ,KC_PPLS ,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
    KC_LCTL ,KC_MS_L ,KC_MS_D  ,KC_MS_R ,KC_WH_D ,KC_CUT  ,KC_VOLD ,                          KC_VOLU ,KC_CUT ,KC_P4 	,KC_P5   ,KC_P6   ,KC_MNXT ,KC_PMNS ,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
    KC_LSFT ,KC_WH_L ,KC_UP   ,KC_WH_R ,KC_LGUI ,KC_PSTE ,KC_WH_U ,KC_SLCK ,        KC_NLCK ,KC_WH_D ,KC_PSTE ,KC_P1 	,KC_P2   ,KC_P3   ,KC_PEQL ,KC_PAST ,
//├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
    KC_CAPS ,KC_LEFT ,KC_DOWN ,KC_RGHT, LT(3,KC_MUTE)     ,KC_SPC  ,KC_ESC ,        KC_DEL  ,KC_ENT ,    KC_APP   ,     KC_P0   ,KC_PDOT ,KC_PENT ,KC_PSLS 
//└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
),

[_QWERTY] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
    KC_GESC  ,KC_1     ,KC_2   ,KC_3    ,KC_4     ,KC_5   ,                                            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_MINS ,                          KC_EQL  ,KC_Y    ,KC_U    ,KC_I    ,KC_O    ,KC_P    ,KC_BSLS ,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
    KC_LCTL ,KC_A    ,KC_S    ,KC_D    ,KC_F    ,KC_G    ,KC_LBRC ,                          KC_RBRC ,KC_H    ,KC_J    ,KC_K    ,KC_L    ,KC_SCLN ,KC_QUOT ,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
    KC_LSFT ,KC_Z    ,KC_X    ,KC_C    ,KC_V    ,KC_B    ,KC_HOME ,KC_PGUP ,        KC_PGDN ,KC_END   ,KC_N   ,KC_M    ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSFT ,
//├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
    KC_CAPS ,KC_LGUI ,KC_LALT , KC_APP  ,LT(3,KC_MUTE) ,   KC_SPC ,KC_INS ,          KC_DEL ,KC_ENT       , KC_APP      , KC_LEFT ,KC_UP   ,KC_DOWN  ,KC_RGHT
//└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
),

[_ADJUST] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
    KC_GESC   ,TO(0)   ,TO(1)   ,TO(2)   ,KC_NO   ,KC_NO   ,                                            KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO  ,KC_NO   ,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
    KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,                          KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
    KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,                          KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
    KC_LSFT  ,KC_NO   ,KC_NO   ,KC_NO    ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO           ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO ,KC_RSFT ,
//├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
    KC_NO   ,KC_NO   ,KC_NO   ,KC_LGUI        ,LT(3,KC_MUTE), KC_NO   ,KC_NO           ,KC_NO   ,KC_NO        ,KC_APP    ,KC_NO  ,KC_NO   ,KC_NO   ,KC_NO
//└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
)

};

layer_state_t layer_state_set_user(layer_state_t state)
{
    switch (get_highest_layer(state)) {
        case _DVORAK:
            blu_led_off;
            grn_led_off;
            break;
        case _SYMB:
            blu_led_on;
            grn_led_off;
            break;
        case _QWERTY:
            blu_led_off;
            grn_led_on;
            break;
        case _ADJUST:
            blu_led_on;
            grn_led_on;
            break;
        default:
            break;
    }
    return state;
}

bool led_update_user(led_t led_state)
{
    if (led_state.caps_lock) {
        red_led_on;
    } else {
        red_led_off;
    }
    if (led_state.num_lock) {
        wht_led_on;
    } else {
        wht_led_off;
    }
    return false;
}

A keyboards/redox_w/keymaps/dvorak/readme.md => keyboards/redox_w/keymaps/dvorak/readme.md +38 -0
@@ 0,0 1,38 @@
### fork from default layout,and support dvorak layout[defalut layer]

##### only use 3 layers

```
Keymap: 3 Layers                   
-----------------                  
stack of layers                     
       ____________ precedence      
      /           / | high                 
  31 /___________// |                           
   :   _:_:_:_:_:__ |           
   3 /___________// | --- adjust   
   2 /___________// | --- qwerty         
   1 /___________// | --- symb
   0 /___________/  | --- dvorak[default]        
```

defalut LED indicators

RED --------- CAPS LOCK

BLUE ------- SYMB layer

GREEN----- QWERTY layer

WHITE------ NUM LOCK *in my test case,this is inefficient on mac os*

> BLUE and GREEN as a bit flag
> 
> 0                    0

| BLUE(0) | GREEN(0) | STATUS | DESCRIBE                                            |
|:-------:|:--------:|:------:|:--------------------------------------------------- |
| 0       | 0        | 0      | layer 0[dvorak] is active,and blue,green led is off |
| 1       | 0        | 1      | layer1[symb] is active, and blue led is on          |
| 0       | 1        | 2      | layer 2[qwerty] is active,and green led is on       |
| 1       | 1        | 3      | layer 3[adjust] is active,and blue,green led is on  |

M keyboards/redox_w/redox_w.c => keyboards/redox_w/redox_w.c +9 -4
@@ 1,10 1,15 @@
#include "redox_w.h"

void led_init(void) {
	DDRD  |= (1<<1);
	PORTD |= (1<<1);
	DDRF  |= (1<<4) | (1<<5);
	PORTF |= (1<<4) | (1<<5);
    setPinOutput(D0);
    setPinOutput(D1);
    setPinOutput(F4);
    setPinOutput(F5);
    
    writePinHigh(D0);
    writePinHigh(D1);
    writePinHigh(F4);
    writePinHigh(F5);
}



M keyboards/redox_w/redox_w.h => keyboards/redox_w/redox_w.h +13 -14
@@ 2,21 2,20 @@

#include "quantum.h"

#define red_led_off   PORTF |= (1<<5)
#define red_led_on    PORTF &= ~(1<<5)
#define blu_led_off   PORTF |= (1<<4)
#define blu_led_on    PORTF &= ~(1<<4)
#define grn_led_off   PORTD |= (1<<1)
#define grn_led_on    PORTD &= ~(1<<1)
#define red_led_off   writePinHigh(F5)
#define red_led_on    writePinLow(F5)
#define blu_led_off   writePinHigh(F4)
#define blu_led_on    writePinLow(F4)
#define grn_led_off   writePinHigh(D1)
#define grn_led_on    writePinLow(D1)
#define wht_led_off   writePinHigh(D0)
#define wht_led_on    writePinLow(D0)

#define set_led_off     red_led_off; grn_led_off; blu_led_off
#define set_led_red     red_led_on;  grn_led_off; blu_led_off
#define set_led_blue    red_led_off; grn_led_off; blu_led_on
#define set_led_green   red_led_off; grn_led_on;  blu_led_off
#define set_led_yellow  red_led_on;  grn_led_on;  blu_led_off
#define set_led_magenta red_led_on;  grn_led_off; blu_led_on
#define set_led_cyan    red_led_off; grn_led_on;  blu_led_on
#define set_led_white   red_led_on;  grn_led_on;  blu_led_on
#define set_led_off     red_led_off; grn_led_off; blu_led_off; wht_led_off
#define set_led_red     red_led_on;  grn_led_off; blu_led_off; wht_led_off
#define set_led_blue    red_led_off; grn_led_off; blu_led_on;  wht_led_off
#define set_led_green   red_led_off; grn_led_on;  blu_led_off; wht_led_off
#define set_led_white   red_led_off;  grn_led_off;  blu_led_off; wht_led_on

// This a shortcut to help you visually see your layout.
// The first section contains all of the arguements