Skip to content

Instantly share code, notes, and snippets.

@chuckdee68
Created September 16, 2018 00:15
Show Gist options
  • Select an option

  • Save chuckdee68/dacab0f75bcb7a06cc021fb84820c335 to your computer and use it in GitHub Desktop.

Select an option

Save chuckdee68/dacab0f75bcb7a06cc021fb84820c335 to your computer and use it in GitHub Desktop.

Revisions

  1. chuckdee68 created this gist Sep 16, 2018.
    256 changes: 256 additions & 0 deletions layer_lights.c
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,256 @@
    #include "66.h"
    #include "timer.h"
    #define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
    //Run get_mods(); instead
    // 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.
    #define _BL 0
    #define _FL 1

    enum custom_keycodes {
    CAPS_FN_SWITCH = SAFE_RANGE,
    LEFT_SHIFT_CUSTOM,
    RIGHT_SHIFT_CUSTOM,
    KC_CUSTOMBK
    };

    uint8_t capsOn;
    uint8_t currLayer;

    uint32_t total_t;
    uint8_t lShState; // state of left and right shifts
    uint8_t rShState;

    uint16_t col_hue1=29; //White
    uint8_t col_sat1=0;
    uint8_t col_val1=255;
    uint8_t col_mode1=1;

    uint8_t col_val2=255; //Blue
    uint8_t col_sat2=75;
    uint16_t col_hue2=231;
    uint8_t col_mode2=1;

    uint8_t col_sat3=255; //Yellow
    uint8_t col_val3=255;
    uint16_t col_hue3=43;
    uint8_t col_mode3=1;

    const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    /* Keymap _BL: Base Layer (Default Layer)
    */
    [_BL] = LAYOUT(
    KC_GESC,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_GRV, KC_CUSTOMBK, KC_INS,
    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_DEL,
    CAPS_FN_SWITCH,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,
    LEFT_SHIFT_CUSTOM,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RO, RIGHT_SHIFT_CUSTOM, KC_UP,
    KC_LCTL,KC_LGUI,KC_LALT,KC_MHEN, KC_SPC, KC_SPC, KC_HENK,KC_RALT,KC_RGUI,MO(_FL),KC_LEFT,KC_DOWN,KC_RGHT),

    /* Keymap _FL: Function Layer
    */
    [_FL] = LAYOUT(
    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, KC_VOLU,
    _______,KC_HOME,KC_UP ,KC_END ,KC_PGUP,_______,_______,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_MUTE, KC_VOLD,
    _______,KC_LEFT,KC_DOWN,KC_RGHT,KC_PGDN,_______,_______,_______,_______,_______,_______,_______,_______,_______,
    _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_PGUP,
    _______,_______,_______,_______, _______,_______, _______,_______,_______,_______,KC_HOME,KC_PGDN,KC_END),

    };




    void setLights(void){
    xprintf("SetLights\n");

    if(currLayer==0){

    if ( lShState || rShState) {


    rgblight_sethsv_noeeprom(col_hue2,col_sat2,col_val2);


    } else {


    rgblight_sethsv_noeeprom(col_hue1,col_sat1,col_val1);


    }
    }else{

    if ( lShState || rShState) {


    rgblight_sethsv_noeeprom(col_hue2,col_sat2,col_val2);


    } else {


    rgblight_sethsv_noeeprom(col_hue3,col_sat3,col_val3);


    }

    }




    }

    void clear_shift(void){

    if(MODS_CTRL_MASK){
    unregister_code(KC_DEL);
    unregister_code(KC_BSPC);
    }
    }


    void tap(uint16_t keycode){
    register_code(keycode);
    unregister_code(keycode);
    };

    void matrix_init_user(void) {
    rgblight_enable();
    timer_init();
    capsOn=0;

    rgblight_mode(col_mode1);
    rgblight_sethsv(col_hue1,col_sat1,col_val1);
    xprintf("SetLights\n");


    currLayer=0;
    setLights();
    }



    bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    xprintf("Keycode %u \n", keycode);
    switch (keycode) {




    case CAPS_FN_SWITCH: //toggle capslock if tapped, always treat caps as function key
    xprintf("Caps lock\n");
    if (record->event.pressed) {
    layer_on(_FL);
    timer_clear();
    xprintf("Caps pressed \n" );

    } else {
    layer_off(_FL);
    total_t=timer_read32();
    xprintf("Timer %u \n", total_t);
    if (total_t<200){
    tap(KC_CAPS);

    if(capsOn==0){
    //backlight_level(3);
    capsOn=1;
    }else{
    //backlight_level(0);
    capsOn=0;
    }
    }



    }
    return false;

    case LEFT_SHIFT_CUSTOM: //Track status of shift keys

    if (record->event.pressed) {
    lShState=1;
    register_code(KC_LSHIFT);
    setLights();

    } else{
    lShState=0;
    unregister_code(KC_LSHIFT);
    setLights();

    }
    clear_shift();
    return false; //

    case RIGHT_SHIFT_CUSTOM:

    if (record->event.pressed) {
    rShState=1;
    register_code(KC_RSHIFT);
    setLights();

    } else{
    rShState=0;
    unregister_code(KC_RSHIFT);
    setLights();

    }
    clear_shift();
    return false; //

    case KC_CUSTOMBK:
    if (record->event.pressed) {
    if( lShState || rShState){
    register_code(KC_DEL);
    }else{
    register_code(KC_BSPC);
    }

    }else{
    if( lShState || rShState){
    unregister_code(KC_DEL);
    }else{
    unregister_code(KC_BSPC);
    }
    }
    return false;


    default:
    return true; // Process all other keycodes normally
    }
    }

    uint32_t layer_state_set_kb(uint32_t state) {
    #ifdef RGBLIGHT_ENABLE
    // change the color any time a layer switches
    // This function is called every time a layer switches, no matter how it switches

    uint8_t bitWhat;
    bitWhat=biton32(state);
    switch (bitWhat) {

    case _BL:
    //white
    currLayer=0;
    lShState=0; // state of left and right shifts
    rShState=0;
    setLights();

    break;

    case _FL:
    //white
    currLayer=1;
    lShState=0; // state of left and right shifts
    rShState=0;
    setLights();
    break;


    }


    #endif
    return state; // this is required, DO NOT REMOVE
    }