diff options
author | zer09 <zer09@users.noreply.github.com> | 2018-04-30 04:02:37 +0800 |
---|---|---|
committer | Drashna Jaelre <drashna@live.com> | 2018-04-29 13:02:37 -0700 |
commit | 7216fd0f47bb41d0a49432095767aef6ead33da2 (patch) | |
tree | a5585c8c4be4ada0fd945685446d0874c43abf68 /users/zer09/lights.c | |
parent | 3b7b1994cd9e3e61fdee84eff78875135642aa6c (diff) | |
download | qmk_firmware-7216fd0f47bb41d0a49432095767aef6ead33da2.tar.gz |
My userspace and lets_split keymap (#2842)
* copied lets_slit to splinter
* initial splinter layout
* remove unused keymaps
* implemented second half of the keyboard
* initial definition of tap dance
* the tap dance is working now
tap dance for right hand 4c 2r
hold - shift
single tap - n
double tap - ñ
triple tap - Ñ
* clear the keymap.c
* put the tap state on to array
* the n tilde tap dance should produce right shift if hold
* add esc grv tap dance
* remove the defined SS_LSFT on tap_dance.h
because it was added on the quantum.h
* minor cleanup for the keymap
* use the X_* on tap dance
* added super alt tap dance
* use the NO_TAP on tap dance reset
* allow track what rows and cols pressed
* added the RGUI_ALT
* keymap arrangement
* use i2c
* initial rgb
* layer colors
* initial rgb pressed key
* set the layers led
* SUCCESS!!!
* cleaning
* improve shifted layer
* led brightness
* initial caps rainbow
* rename SET_LED_RGB to SET_LED_RGB_HEX
* clean the SET_LED_RGB_HEX and added SET_LED_RGB
* clean format
* caps lock rainbow
* rename key_led to set_key_led
* caps lock rainbow enhanced
* make varibiables static
* change back the loop max value to 360 for the rainbow
* add scroll lock to the rainbow led
* fix pos calculation of right hand board
* add ative keys and make rainbow color can override by key press
* remove the TOTAL_MATRIX_POINTS
* some improvments for the rgb
* call the rgblight_set on the process_record_user
* some enhancement for the leds
* pass the dim value to set_layer_led and limit the brightness on _VL
set the brightness to 2 if the dim value is less than 2 because
their is not enought power for the leds.
* remove the rgb steps on the config
* use the non rev config
* remove all the revisions
* favor i2c instead of serial and remove all the ref for the serial
* clang formatting
* allow to save to eeprom the brightness value
* add bootloader caterina this will enable soft reset key
* initial commit for the userspace
* added my own keymap for splinter
* first working userspace
* move splinter to handwired keyboards
* handwired splinter default keymap
* move some config to my keymap
* cleanup some headers on the keymap
* move the EECONFIG_RGB_DIM to the user space
* I fix remove the GUI on SPC and ENT
* remove the default include on tap_dance.c
* add lights.c and refactoring
* fix wrong source for led index
* seperate the variable on set_layer_led for readabilty.
* set the usb max power consumption to 50
* fix led lighting
* add new enums for tap dance
* use romeve path avr on eeprom.h
* fix wrong spelling on TP names
* changed the tap dance
* allow to set rainbow on some pressed key
* add reset key
* fix error on matrix.c if ROW2COL is used
* add extraflags -flto
* See e2352d4
* Got no love from i2c, serial to the rescue
* Fix the led will lit up to color red after boot
* Trial if the power can handle yellow color at full
* Add comment
* Use EE_HANDS
* add config.h in the use space
* KC_N on BL should wrap in SFT_T
* See d13567d, put it back but increase 1 level
* Fix led soldering mistake
* set the tapping_term to 100
* Use TT for the changing the layer
* Remove the changing space to enter and vice version on BL and UL
* Increate the tapping term
* Use tap dance on changing layer
* Add assorted layer
* propery way to tapdance
* Remove DA_EGRV
This also fix the wrong placement of the reset and dance lspr should register
the KC_LGUI on finished not unregistered.
* Remove the media control to the up and down layer
* Remove the interrupted state of the tap dance
* swapt the space and enter on to th caps
* Shorthand
* Keymap update
* My keymap for lets_split
* cleaning
Diffstat (limited to 'users/zer09/lights.c')
-rw-r--r-- | users/zer09/lights.c | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/users/zer09/lights.c b/users/zer09/lights.c new file mode 100644 index 000000000..448ef494e --- /dev/null +++ b/users/zer09/lights.c @@ -0,0 +1,189 @@ +#include "lights.h" + +static bool active_key_pos[50] = {}; +static uint8_t led_dim = 0; + +volatile led_key rbw_led_keys[RBW] = { + [RBW_LCTL] = {DEFAULT, 21, true}, [RBW_LCAP] = {DEFAULT, 24, false}, + [RBW_LSPR] = {DEFAULT, 23, true}, [RBW_RCTL] = {DEFAULT, 48, true}, + [RBW_RCAP] = {DEFAULT, 45, false}, [RBW_RALT] = {DEFAULT, 46, true}, + [RBW_SCRL] = {DEFAULT, 42, true}}; + +/* Pressed led color. */ +const uint32_t _PC[3] = {0xFF, 0x00, 0x00}; + +/* Layer color. */ +const uint8_t _LC[5][3] = {[_BL] = {0x00, 0x00, 0x00}, + [_UL] = {0x00, 0x00, 0xFF}, + [_VL] = {0xFF, 0xFF, 0x00}, + [_DL] = {0x00, 0xFF, 0x00}, + [_AL] = {0xFF, 0x00, 0x00}}; + +/* Color table by sine wave */ +const uint8_t _LIGHTS[360] = { + 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 4, 5, 6, 7, 8, + 11, 12, 9, 13, 15, 17, 18, 20, 22, 24, 26, 28, 30, 32, 35, + 37, 39, 42, 44, 47, 49, 52, 55, 58, 60, 63, 66, 69, 72, 75, + 78, 81, 85, 88, 91, 94, 97, 101, 104, 107, 111, 114, 117, 121, 124, + 127, 131, 134, 137, 141, 144, 147, 150, 154, 157, 160, 163, 167, 170, 173, + 176, 179, 182, 185, 188, 191, 194, 197, 200, 202, 205, 208, 210, 213, 215, + 217, 220, 222, 224, 226, 229, 231, 232, 234, 236, 238, 239, 241, 242, 244, + 245, 246, 248, 249, 250, 251, 251, 252, 253, 253, 254, 254, 255, 255, 255, + 255, 255, 255, 255, 254, 254, 253, 253, 252, 251, 251, 250, 249, 248, 246, + 245, 244, 242, 241, 239, 238, 236, 234, 232, 231, 229, 226, 224, 222, 220, + 217, 215, 213, 210, 208, 205, 202, 200, 197, 194, 191, 188, 185, 182, 179, + 176, 173, 170, 167, 163, 160, 157, 154, 150, 147, 144, 141, 137, 134, 131, + 127, 124, 121, 117, 114, 111, 107, 104, 101, 97, 94, 91, 88, 85, 81, + 78, 75, 72, 69, 66, 63, 60, 58, 55, 52, 49, 47, 44, 42, 39, + 37, 35, 32, 30, 28, 26, 24, 22, 20, 18, 17, 15, 13, 12, 11, + 9, 8, 7, 6, 5, 4, 3, 2, 2, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + +void set_key_led(keyrecord_t *record, uint8_t lyr) { + static uint8_t base = 5; + + uint8_t r = record->event.key.row; + uint8_t c = record->event.key.col; + uint8_t pos; + + // This was the result of my soldering. + // Lesson of the day: always check. + if (r < 5) { + pos = r % 2 == 0 ? r * base + c : r * base + (base - (c + 1)); + } else { + pos = r % 2 == 0 ? r * base + (base - (c + 1)) : r * base + c; + } + + if (record->event.pressed) { + active_key_pos[pos] = true; + SET_LED_RGB(_PC[0], _PC[1], _PC[2], led_dim, pos); + } else { + active_key_pos[pos] = false; + SET_LED_RGB(_LC[lyr][0], _LC[lyr][1], _LC[lyr][2], led_dim, pos); + } +} + +/* Fix for unknown reason after testin flash the eeprom handedness, + the leds will ligth up after boot. + This should be call in the set layer led.*/ +bool is_first_run(void) { + static uint8_t run = 0; + + if (run == 0) { + run++; + return true; + } else { + return false; + } +} + +bool set_layer_led(uint8_t lyr) { + static uint8_t p_lyr = 0; // Previous layer. + static uint8_t p_dim = 0; // Previous dim. + + if (p_lyr == lyr && p_dim == led_dim && !is_first_run()) { + return false; + } + + p_lyr = lyr; + p_dim = led_dim; + const uint8_t r = _LC[lyr][0]; + const uint8_t g = _LC[lyr][1]; + const uint8_t b = _LC[lyr][2]; + const uint8_t d = (p_lyr == _VL && p_dim < 1) ? 1 : p_dim; + + for (uint8_t i = 0; i < RGBLED_NUM; i++) { + SET_LED_RGB(r, g, b, d, i); + } + + return true; +} + +bool rainbow_loop(uint8_t lyr) { + static uint16_t last_timer = 0; + static uint16_t i = 0; + static uint8_t r, g, b, pos; + + if (timer_elapsed(last_timer) < 8) { + return false; + } + + if (i >= 360) { + i = 0; + } + + last_timer = timer_read(); + r = _LIGHTS[(i + 120) % 360]; + g = _LIGHTS[i]; + b = _LIGHTS[(i + 240) % 360]; + + i++; + + bool set_rbw = false; + + for (uint8_t j = 0; j < RBW; j++) { + pos = rbw_led_keys[j].pos; + + switch (rbw_led_keys[j].status) { + case ENABLED: + if (!active_key_pos[pos] || rbw_led_keys[j].forced) { + SET_LED_RGB(r, g, b, led_dim, pos); + set_rbw = true; + } + + break; + case DISABLED: + if (!active_key_pos[pos] || rbw_led_keys[j].forced) { + SET_LED_RGB(_LC[lyr][0], _LC[lyr][1], _LC[lyr][2], led_dim, pos); + set_rbw = true; + } + + rbw_led_keys[j].status = DEFAULT; + break; + default: + break; + } + } + + return set_rbw; +} + +bool led_brightness(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case RGUP: + if (record->event.pressed && led_dim > 0) { + led_dim--; + eeprom_write_byte(EECONFIG_LED_DIM_LVL, led_dim); + } + + return true; + break; + case RGDWN: + if (record->event.pressed && led_dim < 8) { + led_dim++; + eeprom_write_byte(EECONFIG_LED_DIM_LVL, led_dim); + } + + return true; + break; + default: + return false; + break; + } +} + +void eeprom_read_led_dim_lvl(void) { + led_dim = eeprom_read_byte(EECONFIG_LED_DIM_LVL); + + if (led_dim > 8 || led_dim < 0) { + led_dim = 0; + eeprom_write_byte(EECONFIG_LED_DIM_LVL, led_dim); + } +} |