RGB underglow support for JJ40, clean up redundant code in Mechmini keymap (#2196)
* Cleanup Mechmini keymap. Once the custom RGB function is defined, there is no need to manually handle RGB code. * Change default to KEYMAP_MIT, not KEYMAP_OFFSET * Add custom RGB code for JJ40 * Reset Mechmini advertised power draw to 500. Will have to test actual maximum power draw later. * RGB working on JJ40. * Fix: saturation increase/decrease flipped * Add new directory for my custom keymap with RGB keycodes * Swap LAlt and LGUI * Update JJ40 max power draw with measured value * Update: fun40 rules.mk to enable underglow; earlier failed Travis CI
This commit is contained in:
		
							parent
							
								
									85ea963931
								
							
						
					
					
						commit
						eba4cb7a04
					
				
					 12 changed files with 143 additions and 139 deletions
				
			
		| 
						 | 
				
			
			@ -30,12 +30,15 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		|||
#define MATRIX_ROWS 8
 | 
			
		||||
#define MATRIX_COLS 15
 | 
			
		||||
 | 
			
		||||
#define NO_UART 1
 | 
			
		||||
 | 
			
		||||
/* RGB underglow */
 | 
			
		||||
// The RGB_DI_PIN value seems to be shared between all PS2AVRGB boards.
 | 
			
		||||
// The same pin is used on the JJ40, at least.
 | 
			
		||||
#define RGBLED_NUM 16
 | 
			
		||||
#define RGBLIGHT_ANIMATIONS
 | 
			
		||||
#define RGB_DI_PIN E2
 | 
			
		||||
 | 
			
		||||
#define NO_UART 1
 | 
			
		||||
 | 
			
		||||
/* key combination for command */
 | 
			
		||||
#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,16 +14,12 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		|||
*/
 | 
			
		||||
 | 
			
		||||
#include "mechmini.h"
 | 
			
		||||
#include "rgblight.h"
 | 
			
		||||
#include "quantum.h"
 | 
			
		||||
 | 
			
		||||
#define MAX_BRIGHTNESS 15
 | 
			
		||||
#define MAX_BRIGHTNESS_IOS 5  // max brightness suitable for iOS devices
 | 
			
		||||
 | 
			
		||||
#define _BL 0
 | 
			
		||||
#define _FN1 1
 | 
			
		||||
#define _FN2 2
 | 
			
		||||
#define _FN3 3
 | 
			
		||||
#define _BL  0   // base layer
 | 
			
		||||
#define _FN1 1  // function layer 1
 | 
			
		||||
#define _FN2 2  // function layer 2
 | 
			
		||||
#define _FN3 3  // function layer 3
 | 
			
		||||
#define _____ KC_TRNS
 | 
			
		||||
 | 
			
		||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
| 
						 | 
				
			
			@ -52,109 +48,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
     _____,      _____,      _____,            _____,        _____,         _____,                   _____,    _____
 | 
			
		||||
   )
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Blank keymap
 | 
			
		||||
 [0] = KEYMAP(
 | 
			
		||||
   _____,      _____,      _____,      _____,    _____,    _____,    _____,    _____,    _____,    _____,    _____,    _____
 | 
			
		||||
   _____,      _____,      _____,      _____,    _____,    _____,    _____,    _____,    _____,    _____,    _____,
 | 
			
		||||
   _____,      _____,      _____,      _____,    _____,    _____,    _____,    _____,    _____,    _____,    _____,
 | 
			
		||||
   _____,      _____,      _____,            _____,        _____,         _____,                   _____,    _____
 | 
			
		||||
 )
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
uint8_t current_level = 4;
 | 
			
		||||
int is_on = 0;
 | 
			
		||||
 | 
			
		||||
uint8_t r = 0xFF;
 | 
			
		||||
uint8_t g = 0xFF;
 | 
			
		||||
uint8_t b = 0xFF;
 | 
			
		||||
 | 
			
		||||
uint8_t max_brightness = MAX_BRIGHTNESS_IOS;
 | 
			
		||||
 | 
			
		||||
enum macro_id {
 | 
			
		||||
  TOGGLE_RGB,
 | 
			
		||||
  BRIGHTNESS_DOWN,
 | 
			
		||||
  BRIGHTNESS_UP,
 | 
			
		||||
  COLOR_1,
 | 
			
		||||
  COLOR_2,
 | 
			
		||||
  COLOR_3,
 | 
			
		||||
  ENABLE_MAX_BRIGHTNESS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
 | 
			
		||||
  keyevent_t event = record->event;
 | 
			
		||||
 | 
			
		||||
  switch (id) {
 | 
			
		||||
    case TOGGLE_RGB:
 | 
			
		||||
      if (event.pressed) {
 | 
			
		||||
       if (!is_on) {
 | 
			
		||||
         current_level = 4;
 | 
			
		||||
         is_on = 1;
 | 
			
		||||
       } else {
 | 
			
		||||
         is_on = 0;
 | 
			
		||||
       }
 | 
			
		||||
      }
 | 
			
		||||
    case BRIGHTNESS_DOWN:
 | 
			
		||||
      if (event.pressed && current_level > 0) {
 | 
			
		||||
        current_level--;
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case BRIGHTNESS_UP:
 | 
			
		||||
      if (event.pressed && current_level < max_brightness) {
 | 
			
		||||
        current_level++;
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case COLOR_1:  // set to pink
 | 
			
		||||
      if (event.pressed) {
 | 
			
		||||
        r = 0xFF;
 | 
			
		||||
        g = 0x81;
 | 
			
		||||
        b = 0xC2;
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case COLOR_2:  // set to cyan
 | 
			
		||||
      if (event.pressed) {
 | 
			
		||||
        r = 0x00;
 | 
			
		||||
        g = 0xE0;
 | 
			
		||||
        b = 0xFF;
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case COLOR_3:  // set to white
 | 
			
		||||
      if (event.pressed) {
 | 
			
		||||
        r = 0xFF;
 | 
			
		||||
        g = 0xFF;
 | 
			
		||||
        b = 0xFF;
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case ENABLE_MAX_BRIGHTNESS: // enable all 16 brightness steps
 | 
			
		||||
      if (event.pressed) {
 | 
			
		||||
        max_brightness = MAX_BRIGHTNESS;
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return MACRO_NONE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const uint16_t fn_actions[] PROGMEM = {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b);
 | 
			
		||||
 | 
			
		||||
uint8_t dim(uint8_t color, uint8_t opacity) {
 | 
			
		||||
   return ((uint16_t) color * opacity / 0xFF) & 0xFF;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void user_setrgb(uint8_t r, uint8_t g, uint8_t b) {
 | 
			
		||||
   uint8_t alpha = current_level * 0x11;
 | 
			
		||||
   rgblight_setrgb(dim(r, alpha), dim(g, alpha), dim(b, alpha));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_scan_user(void) {
 | 
			
		||||
  if (!is_on) {
 | 
			
		||||
    current_level = 0;
 | 
			
		||||
    user_setrgb(r, g, b);
 | 
			
		||||
  } else {
 | 
			
		||||
    user_setrgb(r, g, b);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,16 +16,16 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		|||
*/
 | 
			
		||||
 | 
			
		||||
#include "mechmini.h"
 | 
			
		||||
#include "rgblight.h"
 | 
			
		||||
 | 
			
		||||
#include <avr/pgmspace.h>
 | 
			
		||||
 | 
			
		||||
#include "action_layer.h"
 | 
			
		||||
#include "i2c.h"
 | 
			
		||||
#include "quantum.h"
 | 
			
		||||
 | 
			
		||||
extern rgblight_config_t rgblight_config;
 | 
			
		||||
#include "rgblight.h"
 | 
			
		||||
 | 
			
		||||
// custom RGB driver
 | 
			
		||||
extern rgblight_config_t rgblight_config;
 | 
			
		||||
void rgblight_set(void) {
 | 
			
		||||
    if (!rgblight_config.enable) {
 | 
			
		||||
        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
 | 
			
		||||
| 
						 | 
				
			
			@ -42,4 +42,5 @@ void rgblight_set(void) {
 | 
			
		|||
__attribute__ ((weak))
 | 
			
		||||
void matrix_scan_user(void) {
 | 
			
		||||
    rgblight_task();
 | 
			
		||||
    /* add other tasks to be done on each matrix scan */
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -118,7 +118,7 @@ section at the end of this file).
 | 
			
		|||
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
 | 
			
		||||
 * device is powered from the USB bus.
 | 
			
		||||
 */
 | 
			
		||||
#define USB_CFG_MAX_BUS_POWER           100
 | 
			
		||||
#define USB_CFG_MAX_BUS_POWER           500
 | 
			
		||||
/* Set this variable to the maximum USB bus power consumption of your device.
 | 
			
		||||
 * The value is in milliamperes. [It will be divided by two since USB
 | 
			
		||||
 * communicates power requirements in units of 2 mA.]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue