diff --git a/kmk/firmware.py b/kmk/firmware.py index af182ed..8bcdb82 100644 --- a/kmk/firmware.py +++ b/kmk/firmware.py @@ -276,6 +276,7 @@ class Firmware: print('New State: {}'.format(self._state._to_dict())) gc.collect() + ''' test = rgb.color_chase(self.pixels, self.num_pixels, color=(255,0,0), @@ -285,3 +286,4 @@ class Firmware: if test is not None: # Debugging some strange errors with NoneType self.pixel_state = test + ''' diff --git a/kmk/rgb.py b/kmk/rgb.py index c7bf5b1..3b719b8 100644 --- a/kmk/rgb.py +++ b/kmk/rgb.py @@ -1,27 +1,27 @@ -OFF = (0, 0, 0) -RED = (255, 0, 0) -YELLOW = (255, 150, 0) -GREEN = (0, 255, 0) -CYAN = (0, 255, 255) -BLUE = (0, 0, 255, 0) -PURPLE = (180, 0, 255) +COLORS = { + 'OFF': (0, 0, 0), + 'RED': (255, 0, 0), + 'GREEN': (0, 255, 0), + 'BLUE': (0, 0, 255, 0), + 'YELLOW': (255, 150, 0), + 'CYAN': (0, 255, 255), + 'PURPLE': (180, 0, 255), + 'WHITE': (255, 255, 255), +} -def wheel(pos): - # Input a value 0 to 255 to get a color value. - # The colours are a transition r - g - b - back to r. - if pos < 0 or pos > 255: - return (0, 0, 0) - if pos < 85: - return (255 - pos * 3, pos * 3, 0) - if pos < 170: - pos -= 85 - return (0, 255 - pos * 3, pos * 3) - pos -= 170 - return (pos * 3, 0, 255 - pos * 3) +def pixelinit(): + return { + 'h': 0, + 's': 255, + 'v': 255, + 'animation_mode': None, + 'speed': 0, + 'enable': True + } -def color_chase(pixels, num_pixels, color, color2=OFF, speed=100, animation_state=0): +def color_chase(pixels, num_pixels, color, color2=COLORS['OFF'], speed=100, animation_state=0): if animation_state not in range(num_pixels): color = color2 pixels[int(animation_state - num_pixels)] = color @@ -38,21 +38,70 @@ def color_chase(pixels, num_pixels, color, color2=OFF, speed=100, animation_stat return animation_state, 0 -def rainbow_cycle(pixels, num_pixels, speed=100, animation_state=0, color_state=0): - color_state += 1 - if color_state in range(255): - print(animation_state) - animation_state +=1 - if animation_state in range(num_pixels): - rc_index = (animation_state * 256 // num_pixels) + animation_state - print(pixels[animation_state]) - print(wheel(rc_index & 255)) - pixels[animation_state] = wheel(rc_index & 255) - else: - pixels.show() - return 0, color_state +def sethsv(hue, sat, val, pixels, index): + r = 0 + g = 0 + b = 0 + # TODO Actually pass this limit to allow overrides + RGBLIGHT_LIMIT_VAL = 255 + + if val > RGBLIGHT_LIMIT_VAL: + val=RGBLIGHT_LIMIT_VAL + + if sat == 0: + r = val + g = val + b = val + else: - return animation_state, 0 + base = ((255 - sat) * val) >> 8 + color = (val - base) * (hue % 60) / 60 + + x = hue / 60 + if x == 0: + r = val + g = base + color + b = base + elif x == 1: + r = val - color + g = val + b = base + elif x == 2: + r = base + g = val + b = base + color + elif x == 3: + r = base + g = val - color + b = val + elif x == 4: + r = base + color + g = base + b = val + elif x == 5: + r = val + g = base + b = val - color + + rgb = (r, g, b) + setrgb(rgb, pixels, index) +def setrgb(rgb, pixels, index): + pixels[index] = (rgb[0], rgb[1], rgb[2]) + + +def setrgbfill(rgb, pixels): + pixels.fill(rgb[0], rgb[1], rgb[2]) + + +def increasehue(hue, step): + return hue + step % 360 + + +def decreasehue(hue, step): + if hue - step < 0: + return (hue + 360 - step) % 360 + else: + return hue - step % 360 diff --git a/user_keymaps/kdb424/nyquist_converter.py b/user_keymaps/kdb424/nyquist_converter.py index fcb9ffe..5a39d31 100644 --- a/user_keymaps/kdb424/nyquist_converter.py +++ b/user_keymaps/kdb424/nyquist_converter.py @@ -1,9 +1,8 @@ import board import busio -import neopixel from kmk.consts import DiodeOrientation, LeaderMode, UnicodeMode -from kmk.handlers.layers import df_pressed +from kmk.handlers.layers import df_pressed, mo_pressed, mo_released, lt_pressed, lt_released from kmk.handlers.sequences import (compile_unicode_string_sequences) from kmk.keys import KC, layer_key_validator, make_argumented_key from kmk.mcus.circuitpython_samd51 import Firmware @@ -31,20 +30,11 @@ keyboard.debug_enabled = True keyboard.pixel_pin = board.TX keyboard.num_pixels = 12 OFF = (0, 0, 0) -CYAN = (0, 255, 255) - -''' -pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.3, auto_write=False) - -RED = (255, 0, 0) -YELLOW = (255, 150, 0) -GREEN = (0, 255, 0) -BLUE = (0, 0, 255) -PURPLE = (180, 0, 255) - -pixels.fill(OFF) -pixels.show() -''' +BLUE = (0, 0, 100) +CYAN = (0, 100, 100) +PURPLE = (71, 0, 100) +RED = (100, 0, 0) +WHITE = (100, 100, 100) emoticons = compile_unicode_string_sequences({ # Emoticons, but fancier @@ -70,10 +60,6 @@ keyboard.leader_dictionary = { 'yay': emoticons.YAY, } -_______ = KC.TRNS -XXXXXXX = KC.NO -LT3_SP = KC.LT(3, KC.SPC) -SHFT_INS = KC.LSHIFT(KC.INS) df = 0 gw = 1 @@ -88,23 +74,90 @@ def base(*args, **kwargs): return df_pressed(*args, **kwargs) +def layer1p(*args, **kwargs): + keyboard.pixels.fill(WHITE) + keyboard.pixels.show() + return mo_pressed(*args, **kwargs) + + +def layer1r(*args, **kwargs): + keyboard.pixels.fill(OFF) + keyboard.pixels.show() + return mo_released(*args, **kwargs) + + +def layer2p(*args, **kwargs): + keyboard.pixels.fill(BLUE) + keyboard.pixels.show() + return lt_pressed(*args, **kwargs) + + +def layer2r(*args, **kwargs): + keyboard.pixels.fill(OFF) + keyboard.pixels.show() + return lt_released(*args, **kwargs) + + +def layer3p(*args, **kwargs): + keyboard.pixels.fill(PURPLE) + keyboard.pixels.show() + return mo_pressed(*args, **kwargs) + + +def layer3r(*args, **kwargs): + keyboard.pixels.fill(OFF) + keyboard.pixels.show() + return mo_released(*args, **kwargs) + + def gaming(*args, **kwargs): keyboard.pixels.fill(CYAN) keyboard.pixels.show() return df_pressed(*args, **kwargs) + +make_argumented_key( + validator=layer_key_validator, + names=('LAYER_BASE',), + on_press=base, +) + +make_argumented_key( + validator=layer_key_validator, + names=('LAYER_1',), + on_press=layer1p, + on_release=layer1r, +) + +make_argumented_key( + validator=layer_key_validator, + names=('LAYER_2',), + on_press=layer2p, + on_release=layer2r, +) + +make_argumented_key( + validator=layer_key_validator, + names=('LAYER_3',), + on_press=layer3p, + on_release=layer3r, +) + + make_argumented_key( validator=layer_key_validator, names=('LAYER_GAMING',), on_press=gaming, ) -make_argumented_key( - validator=layer_key_validator, - names=('LAYER_BASE',), - on_press=base, -) +_______ = KC.TRNS +XXXXXXX = KC.NO +SHFT_INS = KC.LSHIFT(KC.INS) + BASE = KC.LAYER_BASE(df) +LAYER_1 = KC.LAYER_1(r1) +LT2_SP = KC.LAYER_2(r2, KC.SPC) +LAYER_3 = KC.LAYER_3(r3) GAMING = KC.LAYER_GAMING(gw) # ---------------------- Keymap --------------------------------------------------------- @@ -112,11 +165,11 @@ GAMING = KC.LAYER_GAMING(gw) keyboard.keymap = [ [ # df - [KC.GESC, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.DEL], - [KC.GRV, KC.QUOTE, KC.COMMA, KC.DOT, KC.P, KC.Y, KC.F, KC.G, KC.C, KC.R, KC.L, KC.BKSP], - [KC.TAB, KC.A, KC.O, KC.E, KC.U, KC.I, KC.D, KC.H, KC.T, KC.N, KC.S, KC.ENT], - [KC.LSFT, KC.SCLN, KC.Q, KC.J, KC.K, KC.X, KC.B, KC.M, KC.W, KC.V, KC.Z, KC.SLSH], - [KC.LCTRL, KC.LGUI, KC.LALT, KC.LEAD, KC.MO(r1), LT3_SP, LT3_SP, KC.MO(r3), KC.LEFT, KC.DOWN, KC.UP, KC.RIGHT], + [KC.GESC, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.DEL], + [KC.GRV, KC.QUOTE, KC.COMMA, KC.DOT, KC.P, KC.Y, KC.F, KC.G, KC.C, KC.R, KC.L, KC.BKSP], + [KC.TAB, KC.A, KC.O, KC.E, KC.U, KC.I, KC.D, KC.H, KC.T, KC.N, KC.S, KC.ENT], + [KC.LSFT, KC.SCLN, KC.Q, KC.J, KC.K, KC.X, KC.B, KC.M, KC.W, KC.V, KC.Z, KC.SLSH], + [KC.LCTRL, KC.LGUI, KC.LALT, KC.LEAD, LAYER_1, KC.LT(r2, KC.SPC), KC.LT(r2, KC.SPC), LAYER_3, KC.LEFT, KC.DOWN, KC.UP, KC.RIGHT], ], [ # gw @@ -124,7 +177,7 @@ keyboard.keymap = [ [KC.TAB, KC.QUOT, KC.COMM, KC.DOT, KC.P, KC.Y, KC.F, KC.G, KC.C, KC.R, KC.L, KC.BKSP], [KC.ESC, KC.A, KC.O, KC.E, KC.U, KC.I, KC.D, KC.H, KC.T, KC.N, KC.S, KC.ENT], [KC.LSFT, KC.SCLN, KC.Q, KC.J, KC.K, KC.X, KC.B, KC.M, KC.W, KC.V, KC.Z, KC.SLSH], - [KC.LCTRL, KC.LGUI, KC.LALT, KC.F1, KC.F2, KC.SPC, KC.SPC, KC.MO(r3), KC.LEFT, KC.DOWN, KC.UP, KC.RIGHT], + [KC.LCTRL, KC.LGUI, KC.LALT, KC.F1, KC.F2, KC.SPC, KC.LT(r2, KC.SPC), KC.MO(r3), KC.LEFT, KC.DOWN, KC.UP, KC.RIGHT], ], [ # r1