Skip to content

Commit

Permalink
RGB Matrix support for Massdrop CTRL/ALT (qmk#5328)
Browse files Browse the repository at this point in the history
* port Massdrop CTRL/ALT to use RGB Matrix

Co-authored-by: Matt Schneeberger <[email protected]>

* Massdrop lighting support working

This commit is to get the Massdrop lighting code working again through use of the compilation define USE_MASSDROP_CONFIGURATOR added to a keymap's rules.mk.
Added keymaps for both CTRL and ALT named default_md and mac_md. These should be used if the Massdrop style lighting is desired.

* Updating config based on testing results with patrickmt & compile errors

* Updates for PR5328

For CTRL and ALT:
Moved location of new RGB Matrix macros from config_led.h to config.h.
Added RGB_MATRIX_LED_FLUSH_LIMIT (time between flushes) to config.h for correct LED driver update timing.
Re-added missing breathing code for when Massdrop configurator mode is defined.

* remove prilik keymap form PR
  • Loading branch information
daniel5151 authored and danielo515 committed Apr 9, 2019
1 parent 4b3ce20 commit 75780a6
Show file tree
Hide file tree
Showing 38 changed files with 1,657 additions and 1,039 deletions.
7 changes: 7 additions & 0 deletions keyboards/massdrop/alt/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,3 +119,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION

#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_LED_PROCESS_LIMIT 15
#define RGB_MATRIX_LED_FLUSH_LIMIT 10
#define RGB_MATRIX_EXTRA_TOG

#include "config_led.h"
148 changes: 148 additions & 0 deletions keyboards/massdrop/alt/config_led.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
#ifdef RGB_MATRIX_ENABLE
#include "alt.h"

#include "led_matrix.h"
#include "rgb_matrix.h"
#include "config_led.h"

// This table can be almost-automatically derived from ISSI3733_LED_MAP that is
// defined in config_led.h

// You can calculate the (0-244, 0-64) x/y values from the x/y values defined in
// ISSI3733_LED_MAP with the following formula:
// uint8_t rgb_x = ((ISSI3733_LED_MAP[i].x - MIN_X) / (MAX_X - MIN_X)) * 224;
// uint8_t rgb_y = ((ISSI3733_LED_MAP[i].y - MIN_Y) / (MAX_Y - MIN_Y)) * 64;
// Where the min/max vars are the minimum and maximum "bounds" of x/y values
// present in ISSI3733_LED_MAP
//
// The row/col values need to be manually tweaked though, compensating for the
// "empty" cells that are a product of larger keys
//
// There is a quick-and-dirty implementation of this under ledvis.html

const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
/* 0 */ { { (0)|(0 << 4) }, { 8, 56 }, 0 }, // KC_ESC
/* 1 */ { { (0)|(1 << 4) }, { 22, 56 }, 0 }, // KC_1
/* 2 */ { { (0)|(2 << 4) }, { 35, 56 }, 0 }, // KC_2
/* 3 */ { { (0)|(3 << 4) }, { 49, 56 }, 0 }, // KC_3
/* 4 */ { { (0)|(4 << 4) }, { 63, 56 }, 0 }, // KC_4
/* 5 */ { { (0)|(5 << 4) }, { 77, 56 }, 0 }, // KC_5
/* 6 */ { { (0)|(6 << 4) }, { 91, 56 }, 0 }, // KC_6
/* 7 */ { { (0)|(7 << 4) }, { 105, 56 }, 0 }, // KC_7
/* 8 */ { { (0)|(8 << 4) }, { 118, 56 }, 0 }, // KC_8
/* 9 */ { { (0)|(9 << 4) }, { 132, 56 }, 0 }, // KC_9
/* 10 */ { { (0)|(10 << 4) }, { 146, 56 }, 0 }, // KC_0
/* 11 */ { { (0)|(11 << 4) }, { 160, 56 }, 0 }, // KC_MINS
/* 12 */ { { (0)|(12 << 4) }, { 174, 56 }, 0 }, // KC_EQL
/* 13 */ { { (0)|(13 << 4) }, { 195, 56 }, 0 }, // KC_BSPC
/* 14 */ { { (0)|(14 << 4) }, { 215, 56 }, 0 }, // KC_DEL
/* 15 */ { { (1)|(0 << 4) }, { 11, 44 }, 0 }, // KC_TAB
/* 16 */ { { (1)|(1 << 4) }, { 28, 44 }, 0 }, // KC_Q
/* 17 */ { { (1)|(2 << 4) }, { 42, 44 }, 0 }, // KC_W
/* 18 */ { { (1)|(3 << 4) }, { 56, 44 }, 0 }, // KC_E
/* 19 */ { { (1)|(4 << 4) }, { 70, 44 }, 0 }, // KC_R
/* 20 */ { { (1)|(5 << 4) }, { 84, 44 }, 0 }, // KC_T
/* 21 */ { { (1)|(6 << 4) }, { 98, 44 }, 0 }, // KC_Y
/* 22 */ { { (1)|(7 << 4) }, { 112, 44 }, 0 }, // KC_U
/* 23 */ { { (1)|(8 << 4) }, { 125, 44 }, 0 }, // KC_I
/* 24 */ { { (1)|(9 << 4) }, { 139, 44 }, 0 }, // KC_O
/* 25 */ { { (1)|(10 << 4) }, { 153, 44 }, 0 }, // KC_P
/* 26 */ { { (1)|(11 << 4) }, { 167, 44 }, 0 }, // KC_LBRC
/* 27 */ { { (1)|(12 << 4) }, { 181, 44 }, 0 }, // KC_RBRC
/* 28 */ { { (1)|(13 << 4) }, { 198, 44 }, 0 }, // KC_BSLS
/* 29 */ { { (1)|(14 << 4) }, { 215, 44 }, 0 }, // KC_HOME
/* 30 */ { { (2)|(0 << 4) }, { 13, 32 }, 1 }, // KC_CAPS
/* 31 */ { { (2)|(1 << 4) }, { 32, 32 }, 0 }, // KC_A
/* 32 */ { { (2)|(2 << 4) }, { 46, 32 }, 0 }, // KC_S
/* 33 */ { { (2)|(3 << 4) }, { 60, 32 }, 0 }, // KC_D
/* 34 */ { { (2)|(4 << 4) }, { 73, 32 }, 0 }, // KC_F
/* 35 */ { { (2)|(5 << 4) }, { 87, 32 }, 0 }, // KC_G
/* 36 */ { { (2)|(6 << 4) }, { 101, 32 }, 0 }, // KC_H
/* 37 */ { { (2)|(7 << 4) }, { 115, 32 }, 0 }, // KC_J
/* 38 */ { { (2)|(8 << 4) }, { 129, 32 }, 0 }, // KC_K
/* 39 */ { { (2)|(9 << 4) }, { 143, 32 }, 0 }, // KC_L
/* 40 */ { { (2)|(10 << 4) }, { 156, 32 }, 0 }, // KC_SCLN
/* 41 */ { { (2)|(11 << 4) }, { 170, 32 }, 0 }, // KC_QUOT
/* _________________________________________ */ // ____
/* 42 */ { { (2)|(13 << 4) }, { 193, 32 }, 0 }, // KC_ENT
/* 43 */ { { (2)|(14 << 4) }, { 215, 32 }, 0 }, // KC_PGUP
/* 44 */ { { (3)|(0 << 4) }, { 16, 19 }, 0 }, // KC_LSFT
/* 45 */ { { (3)|(2 << 4) }, { 39, 19 }, 0 }, // KC_Z
/* 46 */ { { (3)|(3 << 4) }, { 53, 19 }, 0 }, // KC_X
/* 47 */ { { (3)|(4 << 4) }, { 67, 19 }, 0 }, // KC_C
/* 48 */ { { (3)|(5 << 4) }, { 80, 19 }, 0 }, // KC_V
/* 49 */ { { (3)|(6 << 4) }, { 94, 19 }, 0 }, // KC_B
/* 50 */ { { (3)|(7 << 4) }, { 108, 19 }, 0 }, // KC_N
/* 51 */ { { (3)|(8 << 4) }, { 122, 19 }, 0 }, // KC_M
/* 52 */ { { (3)|(9 << 4) }, { 136, 19 }, 0 }, // KC_COMM
/* 53 */ { { (3)|(10 << 4) }, { 150, 19 }, 0 }, // KC_DOT
/* 54 */ { { (3)|(11 << 4) }, { 163, 19 }, 0 }, // KC_SLSH
/* 55 */ { { (3)|(12 << 4) }, { 182, 19 }, 0 }, // KC_RSFT
/* _________________________________________ */ // ____
/* 56 */ { { (3)|(13 << 4) }, { 201, 19 }, 0 }, // KC_UP
/* 57 */ { { (3)|(14 << 4) }, { 215, 19 }, 0 }, // KC_PGDN
/* 58 */ { { (4)|(0 << 4) }, { 9, 7 }, 0 }, // KC_LCTL
/* 59 */ { { (4)|(1 << 4) }, { 27, 7 }, 0 }, // KC_LGUI
/* 60 */ { { (4)|(2 << 4) }, { 44, 7 }, 0 }, // KC_LALT
/* _________________________________________ */ // ____
/* _________________________________________ */ // ____
/* _________________________________________ */ // ____
/* 61 */ { { (4)|(6 << 4) }, { 96, 7 }, 0 }, // KC_SPC
/* _________________________________________ */ // ____
/* _________________________________________ */ // ____
/* _________________________________________ */ // ____
/* 62 */ { { (4)|(10 << 4) }, { 148, 7 }, 0 }, // KC_RALT
/* 63 */ { { (4)|(11 << 4) }, { 165, 7 }, 0 }, // MO(1)
/* 64 */ { { (4)|(12 << 4) }, { 188, 7 }, 0 }, // KC_LEFT
/* 65 */ { { (4)|(13 << 4) }, { 201, 7 }, 0 }, // KC_DOWN
/* 66 */ { { (4)|(14 << 4) }, { 215, 7 }, 0 }, // KC_RGHT

// Underglow LEDs
{ { 255 }, { 1, 1 }, 0 },
{ { 255 }, { 15, 0 }, 0 },
{ { 255 }, { 31, 0 }, 0 },
{ { 255 }, { 47, 0 }, 0 },
{ { 255 }, { 63, 0 }, 0 },
{ { 255 }, { 79, 0 }, 0 },
{ { 255 }, { 95, 0 }, 0 },
{ { 255 }, { 112, 0 }, 0 },
{ { 255 }, { 128, 0 }, 0 },
{ { 255 }, { 144, 0 }, 0 },
{ { 255 }, { 160, 0 }, 0 },
{ { 255 }, { 176, 0 }, 0 },
{ { 255 }, { 192, 0 }, 0 },
{ { 255 }, { 208, 0 }, 0 },
{ { 255 }, { 222, 1 }, 0 },
{ { 255 }, { 224, 13 }, 0 },
{ { 255 }, { 224, 25 }, 0 },
{ { 255 }, { 224, 38 }, 0 },
{ { 255 }, { 224, 50 }, 0 },
{ { 255 }, { 222, 62 }, 0 },
{ { 255 }, { 191, 64 }, 0 },
{ { 255 }, { 179, 64 }, 0 },
{ { 255 }, { 167, 64 }, 0 },
{ { 255 }, { 153, 64 }, 0 },
{ { 255 }, { 139, 64 }, 0 },
{ { 255 }, { 125, 64 }, 0 },
{ { 255 }, { 112, 64 }, 0 },
{ { 255 }, { 98, 64 }, 0 },
{ { 255 }, { 84, 64 }, 0 },
{ { 255 }, { 70, 64 }, 0 },
{ { 255 }, { 56, 64 }, 0 },
{ { 255 }, { 42, 64 }, 0 },
{ { 255 }, { 28, 64 }, 0 },
{ { 255 }, { 1, 62 }, 0 },
{ { 255 }, { 0, 50 }, 0 },
{ { 255 }, { 0, 38 }, 0 },
{ { 255 }, { 0, 25 }, 0 },
{ { 255 }, { 0, 13 }, 0 },
};

#ifdef USB_LED_INDICATOR_ENABLE
void rgb_matrix_indicators_kb(void)
{
led_matrix_indicators();
}
#endif // USB_LED_INDICATOR_ENABLE

#endif
25 changes: 13 additions & 12 deletions keyboards/massdrop/alt/config_led.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef _config_led_h_
#define _config_led_h_
#pragma once

//Define number of ISSI3733 drivers being used (1...16)
#define ISSI3733_DRIVER_COUNT 2
#define DRIVER_LED_TOTAL ISSI3733_LED_COUNT

//Hardware address of each driver (Refer to ISSI3733 pdf "Table 1 Slave Address" and keyboard schematic)
#define ISSI3773_DRIVER_ADDRESSES { 0xA0, 0xBE }
Expand All @@ -30,21 +30,24 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//Count of LED bodies
#define ISSI3733_LED_COUNT 105

//Default Global Current Register value (Default brightness 0 - 255)
#define ISSI3733_GCR_DEFAULT 128

#define LED_GCR_MAX 165 //Max GCR value (0 - 255) WARNING: Raising this value may overload the LED drivers and USB bus
#define LED_GCR_STEP 10 //GCR increment/decrement value

//Automatic power rollback and recovery
#define V5_HIGH 2540 //5V high level (After low power detect, point at which LEDs are allowed to use more power )
#define V5_LOW 2480 //5V low level (LED power rolled back to stay above this limit)
#define V5_CAT 2200 //5V catastrophic level (Host USB port potential to shut down)

#ifdef USE_MASSDROP_CONFIGURATOR
#define ANIMATION_SPEED_STEP 1

#define BREATHE_STEP 1
#define BREATHE_MIN_STEP 0
#define BREATHE_MAX_STEP 255
#endif

//Default Global Current Register value (Default brightness 0 - 255)
#define ISSI3733_GCR_DEFAULT LED_GCR_MAX

//Automatic power rollback and recovery
#define V5_HIGH 2540 //5V high level (After low power detect, point at which LEDs are allowed to use more power )
#define V5_LOW 2480 //5V low level (LED power rolled back to stay above this limit)
#define V5_CAT 2200 //5V catastrophic level (Host USB port potential to shut down)

//LED Mapping - More practically generated from a spreadsheet program
//id: ID of the LED (Sync with PCB callouts)
Expand Down Expand Up @@ -174,5 +177,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define USB_LED_COMPOSE_SCANCODE 255
#define USB_LED_KANA_SCANCODE 255
#endif //USB_LED_INDICATOR_ENABLE

#endif //_config_led_h_
122 changes: 17 additions & 105 deletions keyboards/massdrop/alt/keymaps/abishalom/keymap.c
Original file line number Diff line number Diff line change
@@ -1,25 +1,13 @@
#include QMK_KEYBOARD_H

enum alt_keycodes {
L_BRI = SAFE_RANGE, //LED Brightness Increase
L_BRD, //LED Brightness Decrease
L_PTN, //LED Pattern Select Next
L_PTP, //LED Pattern Select Previous
L_PSI, //LED Pattern Speed Increase
L_PSD, //LED Pattern Speed Decrease
L_T_MD, //LED Toggle Mode
L_T_ONF, //LED Toggle On / Off
L_ON, //LED On
L_OFF, //LED Off
L_T_BR, //LED Toggle Breath Effect
L_T_PTD, //LED Toggle Scrolling Pattern Direction
U_T_AUTO, //USB Extra Port Toggle Auto Detect / Always Active
U_T_AGCR, //USB Toggle Automatic GCR control
DBG_TOG, //DEBUG Toggle On / Off
DBG_MTRX, //DEBUG Toggle Matrix Prints
DBG_KBD, //DEBUG Toggle Keyboard Prints
DBG_MOU, //DEBUG Toggle Mouse Prints
MD_BOOT, //Restart into bootloader after hold timeout
U_T_AUTO = SAFE_RANGE, //USB Extra Port Toggle Auto Detect / Always Active
U_T_AGCR, //USB Toggle Automatic GCR control
DBG_TOG, //DEBUG Toggle On / Off
DBG_MTRX, //DEBUG Toggle Matrix Prints
DBG_KBD, //DEBUG Toggle Keyboard Prints
DBG_MOU, //DEBUG Toggle Mouse Prints
MD_BOOT, //Restart into bootloader after hold timeout
};

#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
Expand All @@ -35,19 +23,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT \
),
[1] = 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_TRNS, KC_MUTE, \
L_T_BR, L_PSD, L_BRI, L_PSI, KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_END, \
L_T_PTD, L_PTP, L_BRD, L_PTN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, \
KC_TRNS, L_T_MD, L_T_ONF, KC_TRNS, KC_TRNS, MD_BOOT, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_VOLD, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
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_MUTE, \
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO,U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
_______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, \
_______, RGB_TOG, _______, _______, _______, MD_BOOT, TG_NKRO, DBG_TOG, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END \
),
/*
[X] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
*/
};
Expand All @@ -68,82 +56,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
static uint32_t key_timer;

switch (keycode) {
case L_BRI:
if (record->event.pressed) {
if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
else gcr_desired += LED_GCR_STEP;
if (led_animation_breathing) gcr_breathe = gcr_desired;
}
return false;
case L_BRD:
if (record->event.pressed) {
if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
else gcr_desired -= LED_GCR_STEP;
if (led_animation_breathing) gcr_breathe = gcr_desired;
}
return false;
case L_PTN:
if (record->event.pressed) {
if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
else led_animation_id++;
}
return false;
case L_PTP:
if (record->event.pressed) {
if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
else led_animation_id--;
}
return false;
case L_PSI:
if (record->event.pressed) {
led_animation_speed += ANIMATION_SPEED_STEP;
}
return false;
case L_PSD:
if (record->event.pressed) {
led_animation_speed -= ANIMATION_SPEED_STEP;
if (led_animation_speed < 0) led_animation_speed = 0;
}
return false;
case L_T_MD:
if (record->event.pressed) {
led_lighting_mode++;
if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
}
return false;
case L_T_ONF:
if (record->event.pressed) {
led_enabled = !led_enabled;
I2C3733_Control_Set(led_enabled);
}
return false;
case L_ON:
if (record->event.pressed) {
led_enabled = 1;
I2C3733_Control_Set(led_enabled);
}
return false;
case L_OFF:
if (record->event.pressed) {
led_enabled = 0;
I2C3733_Control_Set(led_enabled);
}
return false;
case L_T_BR:
if (record->event.pressed) {
led_animation_breathing = !led_animation_breathing;
if (led_animation_breathing) {
gcr_breathe = gcr_desired;
led_animation_breathe_cur = BREATHE_MIN_STEP;
breathe_dir = 1;
}
}
return false;
case L_T_PTD:
if (record->event.pressed) {
led_animation_direction = !led_animation_direction;
}
return false;
case U_T_AUTO:
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
Expand Down
Loading

0 comments on commit 75780a6

Please sign in to comment.