forked from mirrors/qmk_userspace
		
	Adds the Planck EZ, 3737 RGB, fixes out-of-tune notes (#5532)
* RGB Matrix overhaul Breakout of animations to separate files Integration of optimized int based math lib Overhaul of rgb_matrix.c and animations for performance * Updating effect function api for future extensions * Combined the keypresses || keyreleases define checks into a single define so I stop forgetting it where necessary * Moving define RGB_MATRIX_KEYREACTIVE_ENABLED earlier in the include chain * Adds the Planck EZ, 3737 RGB, fixes out-of-tune notes * fix bug in quantum/rgb_matrix_drivers.c Co-Authored-By: jackhumbert <jack.humb@gmail.com> * update command setting to the correct default * correct rgb config * remove commented-out lines * update docs for the 3737 * Update docs/feature_rgb_matrix.md Co-Authored-By: jackhumbert <jack.humb@gmail.com>
This commit is contained in:
		
					parent
					
						
							
								bc536b9b6d
							
						
					
				
			
			
				commit
				
					
						fa4052c26e
					
				
			
		
					 14 changed files with 956 additions and 16 deletions
				
			
		| 
						 | 
					@ -114,7 +114,7 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
 | 
				
			||||||
    endif
 | 
					    endif
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VALID_MATRIX_TYPES := yes IS31FL3731 IS31FL3733 custom
 | 
					VALID_MATRIX_TYPES := yes IS31FL3731 IS31FL3733 IS31FL3737 custom
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LED_MATRIX_ENABLE ?= no
 | 
					LED_MATRIX_ENABLE ?= no
 | 
				
			||||||
ifneq ($(strip $(LED_MATRIX_ENABLE)), no)
 | 
					ifneq ($(strip $(LED_MATRIX_ENABLE)), no)
 | 
				
			||||||
| 
						 | 
					@ -135,6 +135,7 @@ ifeq ($(strip $(LED_MATRIX_ENABLE)), IS31FL3731)
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RGB_MATRIX_ENABLE ?= no
 | 
					RGB_MATRIX_ENABLE ?= no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifneq ($(strip $(RGB_MATRIX_ENABLE)), no)
 | 
					ifneq ($(strip $(RGB_MATRIX_ENABLE)), no)
 | 
				
			||||||
ifeq ($(filter $(RGB_MATRIX_ENABLE),$(VALID_MATRIX_TYPES)),)
 | 
					ifeq ($(filter $(RGB_MATRIX_ENABLE),$(VALID_MATRIX_TYPES)),)
 | 
				
			||||||
    $(error RGB_MATRIX_ENABLE="$(RGB_MATRIX_ENABLE)" is not a valid matrix type)
 | 
					    $(error RGB_MATRIX_ENABLE="$(RGB_MATRIX_ENABLE)" is not a valid matrix type)
 | 
				
			||||||
| 
						 | 
					@ -151,19 +152,26 @@ ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3731)
 | 
					ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3731)
 | 
				
			||||||
    OPT_DEFS += -DIS31FL3731
 | 
					    OPT_DEFS += -DIS31FL3731 -DSTM32_I2C -DHAL_USE_I2C=TRUE
 | 
				
			||||||
    COMMON_VPATH += $(DRIVER_PATH)/issi
 | 
					    COMMON_VPATH += $(DRIVER_PATH)/issi
 | 
				
			||||||
    SRC += is31fl3731.c
 | 
					    SRC += is31fl3731.c
 | 
				
			||||||
    SRC += i2c_master.c
 | 
					    SRC += i2c_master.c
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3733)
 | 
					ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3733)
 | 
				
			||||||
    OPT_DEFS += -DIS31FL3733
 | 
					    OPT_DEFS += -DIS31FL3733 -DSTM32_I2C -DHAL_USE_I2C=TRUE
 | 
				
			||||||
    COMMON_VPATH += $(DRIVER_PATH)/issi
 | 
					    COMMON_VPATH += $(DRIVER_PATH)/issi
 | 
				
			||||||
    SRC += is31fl3733.c
 | 
					    SRC += is31fl3733.c
 | 
				
			||||||
    SRC += i2c_master.c
 | 
					    SRC += i2c_master.c
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3737)
 | 
				
			||||||
 | 
					    OPT_DEFS += -DIS31FL3737 -DSTM32_I2C -DHAL_USE_I2C=TRUE
 | 
				
			||||||
 | 
					    COMMON_VPATH += $(DRIVER_PATH)/issi
 | 
				
			||||||
 | 
					    SRC += is31fl3737.c
 | 
				
			||||||
 | 
					    SRC += i2c_master.c
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
 | 
					ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
 | 
				
			||||||
    OPT_DEFS += -DTAP_DANCE_ENABLE
 | 
					    OPT_DEFS += -DTAP_DANCE_ENABLE
 | 
				
			||||||
    SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
 | 
					    SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -52,7 +52,9 @@ const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](http://www.issi.com/WW/pdf/31FL3731.pdf) and the header file `drivers/issi/is31fl3731.h`. The `driver` is the index of the driver you defined in your `config.h` (`0` or `1` right now).
 | 
					Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](http://www.issi.com/WW/pdf/31FL3731.pdf) and the header file `drivers/issi/is31fl3731.h`. The `driver` is the index of the driver you defined in your `config.h` (`0` or `1` right now).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
###  IS31FL3733
 | 
					###  IS31FL3733/IS31FL3737
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!> For the IS31FL3737, replace all instances of `IS31FL3733` below with `IS31FL3737`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
There is basic support for addressable RGB matrix lighting with the I2C IS31FL3733 RGB controller. To enable it, add this to your `rules.mk`:
 | 
					There is basic support for addressable RGB matrix lighting with the I2C IS31FL3733 RGB controller. To enable it, add this to your `rules.mk`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										252
									
								
								drivers/issi/is31fl3737.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										252
									
								
								drivers/issi/is31fl3737.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,252 @@
 | 
				
			||||||
 | 
					/* Copyright 2017 Jason Williams
 | 
				
			||||||
 | 
					 * Copyright 2018 Jack Humbert
 | 
				
			||||||
 | 
					 * Copyright 2018 Yiancar
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					 * the Free Software Foundation, either version 2 of the License, or
 | 
				
			||||||
 | 
					 * (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef __AVR__
 | 
				
			||||||
 | 
					#include <avr/interrupt.h>
 | 
				
			||||||
 | 
					#include <avr/io.h>
 | 
				
			||||||
 | 
					#include <util/delay.h>
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#include "wait.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					#include "i2c_master.h"
 | 
				
			||||||
 | 
					#include "progmem.h"
 | 
				
			||||||
 | 
					#include "rgb_matrix.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// This is a 7-bit address, that gets left-shifted and bit 0
 | 
				
			||||||
 | 
					// set to 0 for write, 1 for read (as per I2C protocol)
 | 
				
			||||||
 | 
					// The address will vary depending on your wiring:
 | 
				
			||||||
 | 
					// 00 <-> GND
 | 
				
			||||||
 | 
					// 01 <-> SCL
 | 
				
			||||||
 | 
					// 10 <-> SDA
 | 
				
			||||||
 | 
					// 11 <-> VCC
 | 
				
			||||||
 | 
					// ADDR1 represents A1:A0 of the 7-bit address.
 | 
				
			||||||
 | 
					// ADDR2 represents A3:A2 of the 7-bit address.
 | 
				
			||||||
 | 
					// The result is: 0b101(ADDR2)(ADDR1)
 | 
				
			||||||
 | 
					#define ISSI_ADDR_DEFAULT 0x50
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ISSI_COMMANDREGISTER 0xFD
 | 
				
			||||||
 | 
					#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
 | 
				
			||||||
 | 
					#define ISSI_INTERRUPTMASKREGISTER 0xF0
 | 
				
			||||||
 | 
					#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ISSI_PAGE_LEDCONTROL 0x00 //PG0
 | 
				
			||||||
 | 
					#define ISSI_PAGE_PWM 0x01        //PG1
 | 
				
			||||||
 | 
					#define ISSI_PAGE_AUTOBREATH 0x02 //PG2
 | 
				
			||||||
 | 
					#define ISSI_PAGE_FUNCTION 0x03   //PG3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ISSI_REG_CONFIGURATION 0x00 //PG3
 | 
				
			||||||
 | 
					#define ISSI_REG_GLOBALCURRENT 0x01 //PG3
 | 
				
			||||||
 | 
					#define ISSI_REG_RESET 0x11// PG3
 | 
				
			||||||
 | 
					#define ISSI_REG_SWPULLUP 0x0F //PG3
 | 
				
			||||||
 | 
					#define ISSI_REG_CSPULLUP 0x10 //PG3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef ISSI_TIMEOUT
 | 
				
			||||||
 | 
					  #define ISSI_TIMEOUT 100
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef ISSI_PERSISTENCE
 | 
				
			||||||
 | 
					  #define ISSI_PERSISTENCE 0
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Transfer buffer for TWITransmitData()
 | 
				
			||||||
 | 
					uint8_t g_twi_transfer_buffer[20];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// These buffers match the IS31FL3737 PWM registers.
 | 
				
			||||||
 | 
					// The control buffers match the PG0 LED On/Off registers.
 | 
				
			||||||
 | 
					// Storing them like this is optimal for I2C transfers to the registers.
 | 
				
			||||||
 | 
					// We could optimize this and take out the unused registers from these
 | 
				
			||||||
 | 
					// buffers and the transfers in IS31FL3737_write_pwm_buffer() but it's
 | 
				
			||||||
 | 
					// probably not worth the extra complexity.
 | 
				
			||||||
 | 
					uint8_t g_pwm_buffer[DRIVER_COUNT][192];
 | 
				
			||||||
 | 
					bool g_pwm_buffer_update_required = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint8_t g_led_control_registers[DRIVER_COUNT][24] = { { 0 } };
 | 
				
			||||||
 | 
					bool g_led_control_registers_update_required = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void IS31FL3737_write_register( uint8_t addr, uint8_t reg, uint8_t data )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    g_twi_transfer_buffer[0] = reg;
 | 
				
			||||||
 | 
					    g_twi_transfer_buffer[1] = data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  #if ISSI_PERSISTENCE > 0
 | 
				
			||||||
 | 
					    for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
 | 
				
			||||||
 | 
					      if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0)
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  #else
 | 
				
			||||||
 | 
					    i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void IS31FL3737_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // assumes PG1 is already selected
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // transmit PWM registers in 12 transfers of 16 bytes
 | 
				
			||||||
 | 
					    // g_twi_transfer_buffer[] is 20 bytes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // iterate over the pwm_buffer contents at 16 byte intervals
 | 
				
			||||||
 | 
					    for ( int i = 0; i < 192; i += 16 ) {
 | 
				
			||||||
 | 
					        g_twi_transfer_buffer[0] = i;
 | 
				
			||||||
 | 
					        // copy the data from i to i+15
 | 
				
			||||||
 | 
					        // device will auto-increment register for data after the first byte
 | 
				
			||||||
 | 
					        // thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer
 | 
				
			||||||
 | 
					        for ( int j = 0; j < 16; j++ ) {
 | 
				
			||||||
 | 
					            g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #if ISSI_PERSISTENCE > 0
 | 
				
			||||||
 | 
					      for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
 | 
				
			||||||
 | 
					        if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) == 0)
 | 
				
			||||||
 | 
					          break;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    #else
 | 
				
			||||||
 | 
					      i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT);
 | 
				
			||||||
 | 
					    #endif
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void IS31FL3737_init( uint8_t addr )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // In order to avoid the LEDs being driven with garbage data
 | 
				
			||||||
 | 
					    // in the LED driver's PWM registers, shutdown is enabled last.
 | 
				
			||||||
 | 
					    // Set up the mode and other settings, clear the PWM registers,
 | 
				
			||||||
 | 
					    // then disable software shutdown.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Unlock the command register.
 | 
				
			||||||
 | 
					    IS31FL3737_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Select PG0
 | 
				
			||||||
 | 
					    IS31FL3737_write_register( addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL );
 | 
				
			||||||
 | 
					    // Turn off all LEDs.
 | 
				
			||||||
 | 
					    for ( int i = 0x00; i <= 0x17; i++ )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        IS31FL3737_write_register( addr, i, 0x00 );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Unlock the command register.
 | 
				
			||||||
 | 
					    IS31FL3737_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Select PG1
 | 
				
			||||||
 | 
					    IS31FL3737_write_register( addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM );
 | 
				
			||||||
 | 
					    // Set PWM on all LEDs to 0
 | 
				
			||||||
 | 
					    // No need to setup Breath registers to PWM as that is the default.
 | 
				
			||||||
 | 
					    for ( int i = 0x00; i <= 0xBF; i++ )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        IS31FL3737_write_register( addr, i, 0x00 );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Unlock the command register.
 | 
				
			||||||
 | 
					    IS31FL3737_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Select PG3
 | 
				
			||||||
 | 
					    IS31FL3737_write_register( addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION );
 | 
				
			||||||
 | 
					    // Set global current to maximum.
 | 
				
			||||||
 | 
					    IS31FL3737_write_register( addr, ISSI_REG_GLOBALCURRENT, 0xFF );
 | 
				
			||||||
 | 
					    // Disable software shutdown.
 | 
				
			||||||
 | 
					    IS31FL3737_write_register( addr, ISSI_REG_CONFIGURATION, 0x01 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Wait 10ms to ensure the device has woken up.
 | 
				
			||||||
 | 
					    #ifdef __AVR__
 | 
				
			||||||
 | 
					    _delay_ms( 10 );
 | 
				
			||||||
 | 
					    #else
 | 
				
			||||||
 | 
					    wait_ms(10);
 | 
				
			||||||
 | 
					    #endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void IS31FL3737_set_color( int index, uint8_t red, uint8_t green, uint8_t blue )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if ( index >= 0 && index < DRIVER_LED_TOTAL ) {
 | 
				
			||||||
 | 
					        is31_led led = g_is31_leds[index];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        g_pwm_buffer[led.driver][led.r] = red;
 | 
				
			||||||
 | 
					        g_pwm_buffer[led.driver][led.g] = green;
 | 
				
			||||||
 | 
					        g_pwm_buffer[led.driver][led.b] = blue;
 | 
				
			||||||
 | 
					        g_pwm_buffer_update_required = true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void IS31FL3737_set_color_all( uint8_t red, uint8_t green, uint8_t blue )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    for ( int i = 0; i < DRIVER_LED_TOTAL; i++ )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        IS31FL3737_set_color( i, red, green, blue );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void IS31FL3737_set_led_control_register( uint8_t index, bool red, bool green, bool blue )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    is31_led led = g_is31_leds[index];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  uint8_t control_register_r = led.r / 8;
 | 
				
			||||||
 | 
					  uint8_t control_register_g = led.g / 8;
 | 
				
			||||||
 | 
					  uint8_t control_register_b = led.b / 8;
 | 
				
			||||||
 | 
					  uint8_t bit_r = led.r % 8;
 | 
				
			||||||
 | 
					  uint8_t bit_g = led.g % 8;
 | 
				
			||||||
 | 
					  uint8_t bit_b = led.b % 8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( red ) {
 | 
				
			||||||
 | 
					        g_led_control_registers[led.driver][control_register_r] |= (1 << bit_r);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        g_led_control_registers[led.driver][control_register_r] &= ~(1 << bit_r);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if ( green ) {
 | 
				
			||||||
 | 
					        g_led_control_registers[led.driver][control_register_g] |= (1 << bit_g);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        g_led_control_registers[led.driver][control_register_g] &= ~(1 << bit_g);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if ( blue ) {
 | 
				
			||||||
 | 
					        g_led_control_registers[led.driver][control_register_b] |= (1 << bit_b);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        g_led_control_registers[led.driver][control_register_b] &= ~(1 << bit_b);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    g_led_control_registers_update_required = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void IS31FL3737_update_pwm_buffers( uint8_t addr1, uint8_t addr2 )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if ( g_pwm_buffer_update_required )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // Firstly we need to unlock the command register and select PG1
 | 
				
			||||||
 | 
					        IS31FL3737_write_register( addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
 | 
				
			||||||
 | 
					        IS31FL3737_write_register( addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        IS31FL3737_write_pwm_buffer( addr1, g_pwm_buffer[0] );
 | 
				
			||||||
 | 
					        //IS31FL3737_write_pwm_buffer( addr2, g_pwm_buffer[1] );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    g_pwm_buffer_update_required = false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void IS31FL3737_update_led_control_registers( uint8_t addr1, uint8_t addr2 )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if ( g_led_control_registers_update_required )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // Firstly we need to unlock the command register and select PG0
 | 
				
			||||||
 | 
					        IS31FL3737_write_register( addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
 | 
				
			||||||
 | 
					        IS31FL3737_write_register( addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL );
 | 
				
			||||||
 | 
					        for ( int i=0; i<24; i++ )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            IS31FL3737_write_register(addr1, i, g_led_control_registers[0][i] );
 | 
				
			||||||
 | 
					            //IS31FL3737_write_register(addr2, i, g_led_control_registers[1][i] );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										207
									
								
								drivers/issi/is31fl3737.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										207
									
								
								drivers/issi/is31fl3737.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,207 @@
 | 
				
			||||||
 | 
					/* Copyright 2017 Jason Williams
 | 
				
			||||||
 | 
					 * Copyright 2018 Jack Humbert
 | 
				
			||||||
 | 
					 * Copyright 2018 Yiancar
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					 * the Free Software Foundation, either version 2 of the License, or
 | 
				
			||||||
 | 
					 * (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 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 IS31FL3737_DRIVER_H
 | 
				
			||||||
 | 
					#define IS31FL3737_DRIVER_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					#include <stdbool.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct is31_led {
 | 
				
			||||||
 | 
					  uint8_t driver:2;
 | 
				
			||||||
 | 
					  uint8_t r;
 | 
				
			||||||
 | 
					  uint8_t g;
 | 
				
			||||||
 | 
					  uint8_t b;
 | 
				
			||||||
 | 
					} __attribute__((packed)) is31_led;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern const is31_led g_is31_leds[DRIVER_LED_TOTAL];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void IS31FL3737_init( uint8_t addr );
 | 
				
			||||||
 | 
					void IS31FL3737_write_register( uint8_t addr, uint8_t reg, uint8_t data );
 | 
				
			||||||
 | 
					void IS31FL3737_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void IS31FL3737_set_color( int index, uint8_t red, uint8_t green, uint8_t blue );
 | 
				
			||||||
 | 
					void IS31FL3737_set_color_all( uint8_t red, uint8_t green, uint8_t blue );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void IS31FL3737_set_led_control_register( uint8_t index, bool red, bool green, bool blue );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// This should not be called from an interrupt
 | 
				
			||||||
 | 
					// (eg. from a timer interrupt).
 | 
				
			||||||
 | 
					// Call this while idle (in between matrix scans).
 | 
				
			||||||
 | 
					// If the buffer is dirty, it will update the driver with the buffer.
 | 
				
			||||||
 | 
					void IS31FL3737_update_pwm_buffers( uint8_t addr1, uint8_t addr2 );
 | 
				
			||||||
 | 
					void IS31FL3737_update_led_control_registers( uint8_t addr1, uint8_t addr2 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define A_1   0x00
 | 
				
			||||||
 | 
					#define A_2   0x01
 | 
				
			||||||
 | 
					#define A_3   0x02
 | 
				
			||||||
 | 
					#define A_4   0x03
 | 
				
			||||||
 | 
					#define A_5   0x04
 | 
				
			||||||
 | 
					#define A_6   0x05
 | 
				
			||||||
 | 
					#define A_7   0x08
 | 
				
			||||||
 | 
					#define A_8   0x09
 | 
				
			||||||
 | 
					#define A_9   0x0A
 | 
				
			||||||
 | 
					#define A_10  0x0B
 | 
				
			||||||
 | 
					#define A_11  0x0C
 | 
				
			||||||
 | 
					#define A_12  0x0D
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define B_1   0x10
 | 
				
			||||||
 | 
					#define B_2   0x11
 | 
				
			||||||
 | 
					#define B_3   0x12
 | 
				
			||||||
 | 
					#define B_4   0x13
 | 
				
			||||||
 | 
					#define B_5   0x14
 | 
				
			||||||
 | 
					#define B_6   0x15
 | 
				
			||||||
 | 
					#define B_7   0x18
 | 
				
			||||||
 | 
					#define B_8   0x19
 | 
				
			||||||
 | 
					#define B_9   0x1A
 | 
				
			||||||
 | 
					#define B_10  0x1B
 | 
				
			||||||
 | 
					#define B_11  0x1C
 | 
				
			||||||
 | 
					#define B_12  0x1D
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define C_1   0x20
 | 
				
			||||||
 | 
					#define C_2   0x21
 | 
				
			||||||
 | 
					#define C_3   0x22
 | 
				
			||||||
 | 
					#define C_4   0x23
 | 
				
			||||||
 | 
					#define C_5   0x24
 | 
				
			||||||
 | 
					#define C_6   0x25
 | 
				
			||||||
 | 
					#define C_7   0x28
 | 
				
			||||||
 | 
					#define C_8   0x29
 | 
				
			||||||
 | 
					#define C_9   0x2A
 | 
				
			||||||
 | 
					#define C_10  0x2B
 | 
				
			||||||
 | 
					#define C_11  0x2C
 | 
				
			||||||
 | 
					#define C_12  0x2D
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define D_1   0x30
 | 
				
			||||||
 | 
					#define D_2   0x31
 | 
				
			||||||
 | 
					#define D_3   0x32
 | 
				
			||||||
 | 
					#define D_4   0x33
 | 
				
			||||||
 | 
					#define D_5   0x34
 | 
				
			||||||
 | 
					#define D_6   0x35
 | 
				
			||||||
 | 
					#define D_7   0x38
 | 
				
			||||||
 | 
					#define D_8   0x39
 | 
				
			||||||
 | 
					#define D_9   0x3A
 | 
				
			||||||
 | 
					#define D_10  0x3B
 | 
				
			||||||
 | 
					#define D_11  0x3C
 | 
				
			||||||
 | 
					#define D_12  0x3D
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define E_1   0x40
 | 
				
			||||||
 | 
					#define E_2   0x41
 | 
				
			||||||
 | 
					#define E_3   0x42
 | 
				
			||||||
 | 
					#define E_4   0x43
 | 
				
			||||||
 | 
					#define E_5   0x44
 | 
				
			||||||
 | 
					#define E_6   0x45
 | 
				
			||||||
 | 
					#define E_7   0x48
 | 
				
			||||||
 | 
					#define E_8   0x49
 | 
				
			||||||
 | 
					#define E_9   0x4A
 | 
				
			||||||
 | 
					#define E_10  0x4B
 | 
				
			||||||
 | 
					#define E_11  0x4C
 | 
				
			||||||
 | 
					#define E_12  0x4D
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define F_1   0x50
 | 
				
			||||||
 | 
					#define F_2   0x51
 | 
				
			||||||
 | 
					#define F_3   0x52
 | 
				
			||||||
 | 
					#define F_4   0x53
 | 
				
			||||||
 | 
					#define F_5   0x54
 | 
				
			||||||
 | 
					#define F_6   0x55
 | 
				
			||||||
 | 
					#define F_7   0x58
 | 
				
			||||||
 | 
					#define F_8   0x59
 | 
				
			||||||
 | 
					#define F_9   0x5A
 | 
				
			||||||
 | 
					#define F_10  0x5B
 | 
				
			||||||
 | 
					#define F_11  0x5C
 | 
				
			||||||
 | 
					#define F_12  0x5D
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define G_1   0x60
 | 
				
			||||||
 | 
					#define G_2   0x61
 | 
				
			||||||
 | 
					#define G_3   0x62
 | 
				
			||||||
 | 
					#define G_4   0x63
 | 
				
			||||||
 | 
					#define G_5   0x64
 | 
				
			||||||
 | 
					#define G_6   0x65
 | 
				
			||||||
 | 
					#define G_7   0x68
 | 
				
			||||||
 | 
					#define G_8   0x69
 | 
				
			||||||
 | 
					#define G_9   0x6A
 | 
				
			||||||
 | 
					#define G_10  0x6B
 | 
				
			||||||
 | 
					#define G_11  0x6C
 | 
				
			||||||
 | 
					#define G_12  0x6D
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define H_1   0x70
 | 
				
			||||||
 | 
					#define H_2   0x71
 | 
				
			||||||
 | 
					#define H_3   0x72
 | 
				
			||||||
 | 
					#define H_4   0x73
 | 
				
			||||||
 | 
					#define H_5   0x74
 | 
				
			||||||
 | 
					#define H_6   0x75
 | 
				
			||||||
 | 
					#define H_7   0x78
 | 
				
			||||||
 | 
					#define H_8   0x79
 | 
				
			||||||
 | 
					#define H_9   0x7A
 | 
				
			||||||
 | 
					#define H_10  0x7B
 | 
				
			||||||
 | 
					#define H_11  0x7C
 | 
				
			||||||
 | 
					#define H_12  0x7D
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define I_1   0x80
 | 
				
			||||||
 | 
					#define I_2   0x81
 | 
				
			||||||
 | 
					#define I_3   0x82
 | 
				
			||||||
 | 
					#define I_4   0x83
 | 
				
			||||||
 | 
					#define I_5   0x84
 | 
				
			||||||
 | 
					#define I_6   0x85
 | 
				
			||||||
 | 
					#define I_7   0x88
 | 
				
			||||||
 | 
					#define I_8   0x89
 | 
				
			||||||
 | 
					#define I_9   0x8A
 | 
				
			||||||
 | 
					#define I_10  0x8B
 | 
				
			||||||
 | 
					#define I_11  0x8C
 | 
				
			||||||
 | 
					#define I_12  0x8D
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define J_1   0x90
 | 
				
			||||||
 | 
					#define J_2   0x91
 | 
				
			||||||
 | 
					#define J_3   0x92
 | 
				
			||||||
 | 
					#define J_4   0x93
 | 
				
			||||||
 | 
					#define J_5   0x94
 | 
				
			||||||
 | 
					#define J_6   0x95
 | 
				
			||||||
 | 
					#define J_7   0x98
 | 
				
			||||||
 | 
					#define J_8   0x99
 | 
				
			||||||
 | 
					#define J_9   0x9A
 | 
				
			||||||
 | 
					#define J_10  0x9B
 | 
				
			||||||
 | 
					#define J_11  0x9C
 | 
				
			||||||
 | 
					#define J_12  0x9D
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define K_1   0xA0
 | 
				
			||||||
 | 
					#define K_2   0xA1
 | 
				
			||||||
 | 
					#define K_3   0xA2
 | 
				
			||||||
 | 
					#define K_4   0xA3
 | 
				
			||||||
 | 
					#define K_5   0xA4
 | 
				
			||||||
 | 
					#define K_6   0xA5
 | 
				
			||||||
 | 
					#define K_7   0xA8
 | 
				
			||||||
 | 
					#define K_8   0xA9
 | 
				
			||||||
 | 
					#define K_9   0xAA
 | 
				
			||||||
 | 
					#define K_10  0xAB
 | 
				
			||||||
 | 
					#define K_11  0xAC
 | 
				
			||||||
 | 
					#define K_12  0xAD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define L_1   0xB0
 | 
				
			||||||
 | 
					#define L_2   0xB1
 | 
				
			||||||
 | 
					#define L_3   0xB2
 | 
				
			||||||
 | 
					#define L_4   0xB3
 | 
				
			||||||
 | 
					#define L_5   0xB4
 | 
				
			||||||
 | 
					#define L_6   0xB5
 | 
				
			||||||
 | 
					#define L_7   0xB8
 | 
				
			||||||
 | 
					#define L_8   0xB9
 | 
				
			||||||
 | 
					#define L_9   0xBA
 | 
				
			||||||
 | 
					#define L_10  0xBB
 | 
				
			||||||
 | 
					#define L_11  0xBC
 | 
				
			||||||
 | 
					#define L_12  0xBD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // IS31FL3737_DRIVER_H
 | 
				
			||||||
							
								
								
									
										141
									
								
								keyboards/planck/ez/config.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								keyboards/planck/ez/config.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,141 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright 2018 Jack Humbert <jack.humb@gmail.com>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					 * the Free Software Foundation, either version 2 of the License, or
 | 
				
			||||||
 | 
					 * (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* USB Device descriptor parameter */
 | 
				
			||||||
 | 
					#define DEVICE_VER 0x0000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#undef MATRIX_ROWS
 | 
				
			||||||
 | 
					#undef MATRIX_COLS
 | 
				
			||||||
 | 
					/* key matrix size */
 | 
				
			||||||
 | 
					#define MATRIX_ROWS 8
 | 
				
			||||||
 | 
					#define MATRIX_COLS 6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Keyboard Matrix Assignments
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Change this to how you wired your keyboard
 | 
				
			||||||
 | 
					 * COLS: AVR pins used for columns, left to right
 | 
				
			||||||
 | 
					 * ROWS: AVR pins used for rows, top to bottom
 | 
				
			||||||
 | 
					 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
 | 
				
			||||||
 | 
					 *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#undef MATRIX_ROW_PINS
 | 
				
			||||||
 | 
					#undef MATRIX_COL_PINS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MATRIX_ROW_PINS { A10, A9, A8, B15, C13, C14, C15, A2 }
 | 
				
			||||||
 | 
					#define MATRIX_COL_PINS { B11, B10, B2, B1, A7, B0 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define NUMBER_OF_ENCODERS 1
 | 
				
			||||||
 | 
					#define ENCODERS_PAD_A { B12 }
 | 
				
			||||||
 | 
					#define ENCODERS_PAD_B { B13 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MUSIC_MAP
 | 
				
			||||||
 | 
					#undef AUDIO_VOICES
 | 
				
			||||||
 | 
					#undef C6_AUDIO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
 | 
				
			||||||
 | 
					#define DEBOUNCE 6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
 | 
				
			||||||
 | 
					//#define LOCKING_SUPPORT_ENABLE
 | 
				
			||||||
 | 
					/* Locking resynchronize hack */
 | 
				
			||||||
 | 
					//#define LOCKING_RESYNC_ENABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Force NKRO
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
 | 
				
			||||||
 | 
					 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
 | 
				
			||||||
 | 
					 * makefile for this to work.)
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
 | 
				
			||||||
 | 
					 * until the next keyboard reset.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
 | 
				
			||||||
 | 
					 * fully operational during normal computer usage.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
 | 
				
			||||||
 | 
					 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
 | 
				
			||||||
 | 
					 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
 | 
				
			||||||
 | 
					 * power-up.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					//#define FORCE_NKRO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Feature disable options
 | 
				
			||||||
 | 
					 *  These options are also useful to firmware size reduction.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* disable debug print */
 | 
				
			||||||
 | 
					//#define NO_DEBUG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* disable print */
 | 
				
			||||||
 | 
					//#define NO_PRINT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* disable action features */
 | 
				
			||||||
 | 
					//#define NO_ACTION_LAYER
 | 
				
			||||||
 | 
					//#define NO_ACTION_TAPPING
 | 
				
			||||||
 | 
					//#define NO_ACTION_ONESHOT
 | 
				
			||||||
 | 
					//#define NO_ACTION_MACRO
 | 
				
			||||||
 | 
					//#define NO_ACTION_FUNCTION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * MIDI options
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Prevent use of disabled MIDI features in the keymap */
 | 
				
			||||||
 | 
					//#define MIDI_ENABLE_STRICT 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* enable basic MIDI features:
 | 
				
			||||||
 | 
					   - MIDI notes can be sent when in Music mode is on
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					//#define MIDI_BASIC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* enable advanced MIDI features:
 | 
				
			||||||
 | 
					   - MIDI notes can be added to the keymap
 | 
				
			||||||
 | 
					   - Octave shift and transpose
 | 
				
			||||||
 | 
					   - Virtual sustain, portamento, and modulation wheel
 | 
				
			||||||
 | 
					   - etc.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					//#define MIDI_ADVANCED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
 | 
				
			||||||
 | 
					//#define MIDI_TONE_KEYCODE_OCTAVES 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// #define WS2812_LED_N 2
 | 
				
			||||||
 | 
					// #define RGBLED_NUM WS2812_LED_N
 | 
				
			||||||
 | 
					// #define WS2812_TIM_N 2
 | 
				
			||||||
 | 
					// #define WS2812_TIM_CH 2
 | 
				
			||||||
 | 
					// #define PORT_WS2812     GPIOA
 | 
				
			||||||
 | 
					// #define PIN_WS2812      1
 | 
				
			||||||
 | 
					// #define WS2812_DMA_STREAM STM32_DMA1_STREAM2  // DMA stream for TIMx_UP (look up in reference manual under DMA Channel selection)
 | 
				
			||||||
 | 
					//#define WS2812_DMA_CHANNEL 7                  // DMA channel for TIMx_UP
 | 
				
			||||||
 | 
					//#define WS2812_EXTERNAL_PULLUP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DRIVER_ADDR_1 0b1010000
 | 
				
			||||||
 | 
					#define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DRIVER_COUNT 1
 | 
				
			||||||
 | 
					#define DRIVER_1_LED_TOTAL 47
 | 
				
			||||||
 | 
					#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define RGB_MATRIX_KEYPRESSES
 | 
				
			||||||
							
								
								
									
										175
									
								
								keyboards/planck/ez/ez.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										175
									
								
								keyboards/planck/ez/ez.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,175 @@
 | 
				
			||||||
 | 
					/* Copyright 2018 Jack Humbert <jack.humb@gmail.com>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					 * the Free Software Foundation, either version 2 of the License, or
 | 
				
			||||||
 | 
					 * (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#include "ez.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
 | 
				
			||||||
 | 
					/* Refer to IS31 manual for these locations
 | 
				
			||||||
 | 
					 *   driver
 | 
				
			||||||
 | 
					 *   |  R location
 | 
				
			||||||
 | 
					 *   |  |      G location
 | 
				
			||||||
 | 
					 *   |  |      |      B location
 | 
				
			||||||
 | 
					 *   |  |      |      | */
 | 
				
			||||||
 | 
					    {0, A_12,  B_12,  C_12},
 | 
				
			||||||
 | 
					    {0, A_11,  B_11,  C_11},
 | 
				
			||||||
 | 
					    {0, A_10,  B_10,  C_10},
 | 
				
			||||||
 | 
					    {0, A_9,   B_9,   C_9},
 | 
				
			||||||
 | 
					    {0, A_8,   B_8,   C_8},
 | 
				
			||||||
 | 
					    {0, A_7,   B_7,   C_7},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {0, G_12,  H_12,  I_12},
 | 
				
			||||||
 | 
					    {0, G_11,  H_11,  I_11},
 | 
				
			||||||
 | 
					    {0, G_10,  H_10,  I_10},
 | 
				
			||||||
 | 
					    {0, G_9,   H_9,   I_9},
 | 
				
			||||||
 | 
					    {0, G_8,   H_8,   I_8},
 | 
				
			||||||
 | 
					    {0, G_7,   H_7,   I_7},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {0, A_6,   B_6,   C_6},
 | 
				
			||||||
 | 
					    {0, A_5,   B_5,   C_5},
 | 
				
			||||||
 | 
					    {0, A_4,   B_4,   C_4},
 | 
				
			||||||
 | 
					    {0, A_3,   B_3,   C_3},
 | 
				
			||||||
 | 
					    {0, A_2,   B_2,   C_2},
 | 
				
			||||||
 | 
					    {0, A_1,   B_1,   C_1},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {0, G_6,   H_6,   I_6},
 | 
				
			||||||
 | 
					    {0, G_5,   H_5,   I_5},
 | 
				
			||||||
 | 
					    {0, G_4,   H_4,   I_4},
 | 
				
			||||||
 | 
					    {0, G_3,   H_3,   I_3},
 | 
				
			||||||
 | 
					    {0, G_2,   H_2,   I_2},
 | 
				
			||||||
 | 
					    {0, G_1,   H_1,   I_1},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {0, D_12,  E_12,  F_12},
 | 
				
			||||||
 | 
					    {0, D_11,  E_11,  F_11},
 | 
				
			||||||
 | 
					    {0, D_10,  E_10,  F_10},
 | 
				
			||||||
 | 
					    {0, D_9,   E_9,   F_9},
 | 
				
			||||||
 | 
					    {0, D_8,   E_8,   F_8},
 | 
				
			||||||
 | 
					    {0, D_7,   E_7,   F_7},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {0, J_12,  K_12,  L_12},
 | 
				
			||||||
 | 
					    {0, J_11,  K_11,  L_11},
 | 
				
			||||||
 | 
					    {0, J_10,  K_10,  L_10},
 | 
				
			||||||
 | 
					    {0, J_9,   K_9,   L_9},
 | 
				
			||||||
 | 
					    {0, J_8,   K_8,   L_8},
 | 
				
			||||||
 | 
					    {0, J_7,   K_7,   L_7},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {0, D_6,   E_6,   F_6},
 | 
				
			||||||
 | 
					    {0, D_5,   E_5,   F_5},
 | 
				
			||||||
 | 
					    {0, D_4,   E_4,   F_4},
 | 
				
			||||||
 | 
					    {0, D_3,   E_3,   F_3},
 | 
				
			||||||
 | 
					    {0, D_2,   E_2,   F_2},
 | 
				
			||||||
 | 
					    {0, D_1,   E_1,   F_1},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {0, J_6,   K_6,   L_6},
 | 
				
			||||||
 | 
					    {0, J_5,   K_5,   L_5},
 | 
				
			||||||
 | 
					    {0, J_4,   K_4,   L_4},
 | 
				
			||||||
 | 
					    {0, J_3,   K_3,   L_3},
 | 
				
			||||||
 | 
					    {0, J_2,   K_2,   L_2},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*{row | col << 4}
 | 
				
			||||||
 | 
					      |             {x=0..224, y=0..64}
 | 
				
			||||||
 | 
					      |              |                 modifier
 | 
				
			||||||
 | 
					      |              |                 | */
 | 
				
			||||||
 | 
					    {{0|(0<<4)},   {20.36*0, 21.33*0}, 1},
 | 
				
			||||||
 | 
					    {{0|(1<<4)},   {20.36*1, 21.33*0}, 0},
 | 
				
			||||||
 | 
					    {{0|(2<<4)},   {20.36*2, 21.33*0}, 0},
 | 
				
			||||||
 | 
					    {{0|(3<<4)},   {20.36*3, 21.33*0}, 0},
 | 
				
			||||||
 | 
					    {{0|(4<<4)},   {20.36*4, 21.33*0}, 0},
 | 
				
			||||||
 | 
					    {{0|(5<<4)},   {20.36*5, 21.33*0}, 0},
 | 
				
			||||||
 | 
					    {{4|(0<<4)},   {20.36*6, 21.33*0}, 0},
 | 
				
			||||||
 | 
					    {{4|(1<<4)},   {20.36*7, 21.33*0}, 0},
 | 
				
			||||||
 | 
					    {{4|(2<<4)},   {20.36*8, 21.33*0}, 0},
 | 
				
			||||||
 | 
					    {{4|(3<<4)},   {20.36*9, 21.33*0}, 0},
 | 
				
			||||||
 | 
					    {{4|(4<<4)},  {20.36*10,21.33*0}, 0},
 | 
				
			||||||
 | 
					    {{4|(5<<4)},  {20.36*11,21.33*0}, 1},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {{1|(0<<4)},   {20.36*0, 21.33*1}, 1},
 | 
				
			||||||
 | 
					    {{1|(1<<4)},   {20.36*1, 21.33*1}, 0},
 | 
				
			||||||
 | 
					    {{1|(2<<4)},   {20.36*2, 21.33*1}, 0},
 | 
				
			||||||
 | 
					    {{1|(3<<4)},   {20.36*3, 21.33*1}, 0},
 | 
				
			||||||
 | 
					    {{1|(4<<4)},   {20.36*4, 21.33*1}, 0},
 | 
				
			||||||
 | 
					    {{1|(5<<4)},   {20.36*5, 21.33*1}, 0},
 | 
				
			||||||
 | 
					    {{5|(0<<4)},   {20.36*6, 21.33*1}, 0},
 | 
				
			||||||
 | 
					    {{5|(1<<4)},   {20.36*7, 21.33*1}, 0},
 | 
				
			||||||
 | 
					    {{5|(2<<4)},   {20.36*8, 21.33*1}, 0},
 | 
				
			||||||
 | 
					    {{5|(3<<4)},   {20.36*9, 21.33*1}, 0},
 | 
				
			||||||
 | 
					    {{5|(4<<4)},  {20.36*10,21.33*1}, 0},
 | 
				
			||||||
 | 
					    {{5|(5<<4)},  {20.36*11,21.33*1}, 1},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {{2|(0<<4)},   {20.36*0, 21.33*2}, 1},
 | 
				
			||||||
 | 
					    {{2|(1<<4)},   {20.36*1, 21.33*2}, 0},
 | 
				
			||||||
 | 
					    {{2|(2<<4)},   {20.36*2, 21.33*2}, 0},
 | 
				
			||||||
 | 
					    {{2|(3<<4)},   {20.36*3, 21.33*2}, 0},
 | 
				
			||||||
 | 
					    {{2|(4<<4)},   {20.36*4, 21.33*2}, 0},
 | 
				
			||||||
 | 
					    {{2|(5<<4)},   {20.36*5, 21.33*2}, 0},
 | 
				
			||||||
 | 
					    {{6|(0<<4)},   {20.36*6, 21.33*2}, 0},
 | 
				
			||||||
 | 
					    {{6|(1<<4)},   {20.36*7, 21.33*2}, 0},
 | 
				
			||||||
 | 
					    {{6|(2<<4)},   {20.36*8, 21.33*2}, 0},
 | 
				
			||||||
 | 
					    {{6|(3<<4)},   {20.36*9, 21.33*2}, 0},
 | 
				
			||||||
 | 
					    {{6|(4<<4)},  {20.36*10,21.33*2}, 0},
 | 
				
			||||||
 | 
					    {{6|(5<<4)},  {20.36*11,21.33*2}, 1},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {{3|(0<<4)},   {20.36*0, 21.33*3}, 1},
 | 
				
			||||||
 | 
					    {{3|(1<<4)},   {20.36*1, 21.33*3}, 1},
 | 
				
			||||||
 | 
					    {{3|(2<<4)},   {20.36*2, 21.33*3}, 1},
 | 
				
			||||||
 | 
					    {{7|(3<<4)},   {20.36*3, 21.33*3}, 1},
 | 
				
			||||||
 | 
					    {{7|(4<<4)},   {20.36*4, 21.33*3}, 1},
 | 
				
			||||||
 | 
					    {{7|(5<<4)},   {20.36*5.5,21.33*3}, 0},
 | 
				
			||||||
 | 
					    {{7|(0<<4)},   {20.36*7, 21.33*3}, 1},
 | 
				
			||||||
 | 
					    {{7|(1<<4)},   {20.36*8, 21.33*3}, 1},
 | 
				
			||||||
 | 
					    {{7|(2<<4)},   {20.36*9, 21.33*3}, 1},
 | 
				
			||||||
 | 
					    {{3|(3<<4)},  {20.36*10,21.33*3}, 1},
 | 
				
			||||||
 | 
					    {{3|(4<<4)},  {20.36*11,21.33*3}, 1}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void matrix_init_kb(void) {
 | 
				
			||||||
 | 
					  matrix_init_user();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  palSetPadMode(GPIOB, 8, PAL_MODE_OUTPUT_PUSHPULL);
 | 
				
			||||||
 | 
					  palSetPadMode(GPIOB, 9, PAL_MODE_OUTPUT_PUSHPULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  palClearPad(GPIOB, 8);
 | 
				
			||||||
 | 
					  palClearPad(GPIOB, 9);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void matrix_scan_kb(void) {
 | 
				
			||||||
 | 
					  matrix_scan_user();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint32_t layer_state_set_kb(uint32_t state) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  palClearPad(GPIOB, 8);
 | 
				
			||||||
 | 
					  palClearPad(GPIOB, 9);
 | 
				
			||||||
 | 
					  state = layer_state_set_user(state);
 | 
				
			||||||
 | 
					  uint8_t layer = biton32(state);
 | 
				
			||||||
 | 
					  switch (layer) {
 | 
				
			||||||
 | 
					      case 3:
 | 
				
			||||||
 | 
					        palSetPad(GPIOB, 9);
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					      case 4:
 | 
				
			||||||
 | 
					        palSetPad(GPIOB, 8);
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					      case 6:
 | 
				
			||||||
 | 
					        palSetPad(GPIOB, 9);
 | 
				
			||||||
 | 
					        palSetPad(GPIOB, 8);
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					      default:
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return state;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										107
									
								
								keyboards/planck/ez/ez.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								keyboards/planck/ez/ez.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,107 @@
 | 
				
			||||||
 | 
					/* Copyright 2018 Jack Humbert <jack.humb@gmail.com>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					 * the Free Software Foundation, either version 2 of the License, or
 | 
				
			||||||
 | 
					 * (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "planck.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define LAYOUT_planck_1x2uC( \
 | 
				
			||||||
 | 
					    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
 | 
				
			||||||
 | 
					    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
 | 
				
			||||||
 | 
					    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
 | 
				
			||||||
 | 
					    k30, k31, k32, k33, k34,    k35,   k36, k37, k38, k39, k3a \
 | 
				
			||||||
 | 
					) \
 | 
				
			||||||
 | 
					{ \
 | 
				
			||||||
 | 
					    { k00, k01, k02, k03, k04, k05 }, \
 | 
				
			||||||
 | 
					    { k10, k11, k12, k13, k14, k15 }, \
 | 
				
			||||||
 | 
					    { k20, k21, k22, k23, k24, k25 }, \
 | 
				
			||||||
 | 
					    { k30, k31, k32, k39, k3a, k3b }, \
 | 
				
			||||||
 | 
					    { k06, k07, k08, k09, k0a, k0b }, \
 | 
				
			||||||
 | 
					    { k16, k17, k18, k19, k1a, k1b }, \
 | 
				
			||||||
 | 
					    { k26, k27, k28, k29, k2a, k2b }, \
 | 
				
			||||||
 | 
					    { k36, k37, k38, k33, k34, k35 } \
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define LAYOUT_planck_1x2uR( \
 | 
				
			||||||
 | 
					    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
 | 
				
			||||||
 | 
					    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
 | 
				
			||||||
 | 
					    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
 | 
				
			||||||
 | 
					    k30, k31, k32, k33, k34, k35,   k36,    k37, k38, k39, k3a \
 | 
				
			||||||
 | 
					) \
 | 
				
			||||||
 | 
					{ \
 | 
				
			||||||
 | 
					    { k00, k01, k02, k03, k04, k05 }, \
 | 
				
			||||||
 | 
					    { k10, k11, k12, k13, k14, k15 }, \
 | 
				
			||||||
 | 
					    { k20, k21, k22, k23, k24, k25 }, \
 | 
				
			||||||
 | 
					    { k30, k31, k32, k39, k3a, k3b }, \
 | 
				
			||||||
 | 
					    { k06, k07, k08, k09, k0a, k0b }, \
 | 
				
			||||||
 | 
					    { k16, k17, k18, k19, k1a, k1b }, \
 | 
				
			||||||
 | 
					    { k26, k27, k28, k29, k2a, k2b }, \
 | 
				
			||||||
 | 
					    { k36, k37, k38, k33, k34, k35 } \
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define LAYOUT_planck_1x2uL( \
 | 
				
			||||||
 | 
					    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
 | 
				
			||||||
 | 
					    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
 | 
				
			||||||
 | 
					    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
 | 
				
			||||||
 | 
					    k30, k31, k32, k33,   k34,    k35, k36, k37, k38, k39, k3a \
 | 
				
			||||||
 | 
					) \
 | 
				
			||||||
 | 
					{ \
 | 
				
			||||||
 | 
					    { k00, k01, k02, k03, k04, k05 }, \
 | 
				
			||||||
 | 
					    { k10, k11, k12, k13, k14, k15 }, \
 | 
				
			||||||
 | 
					    { k20, k21, k22, k23, k24, k25 }, \
 | 
				
			||||||
 | 
					    { k30, k31, k32, k39, k3a, k3b }, \
 | 
				
			||||||
 | 
					    { k06, k07, k08, k09, k0a, k0b }, \
 | 
				
			||||||
 | 
					    { k16, k17, k18, k19, k1a, k1b }, \
 | 
				
			||||||
 | 
					    { k26, k27, k28, k29, k2a, k2b }, \
 | 
				
			||||||
 | 
					    { k36, k37, k38, k33, k34, k35 } \
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define LAYOUT_planck_2x2u( \
 | 
				
			||||||
 | 
					    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
 | 
				
			||||||
 | 
					    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
 | 
				
			||||||
 | 
					    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
 | 
				
			||||||
 | 
					    k30, k31, k32, k33,   k34,      k36,    k37, k38, k39, k3a \
 | 
				
			||||||
 | 
					) \
 | 
				
			||||||
 | 
					{ \
 | 
				
			||||||
 | 
					    { k00, k01, k02, k03, k04, k05 }, \
 | 
				
			||||||
 | 
					    { k10, k11, k12, k13, k14, k15 }, \
 | 
				
			||||||
 | 
					    { k20, k21, k22, k23, k24, k25 }, \
 | 
				
			||||||
 | 
					    { k30, k31, k32, k39, k3a, k3b }, \
 | 
				
			||||||
 | 
					    { k06, k07, k08, k09, k0a, k0b }, \
 | 
				
			||||||
 | 
					    { k16, k17, k18, k19, k1a, k1b }, \
 | 
				
			||||||
 | 
					    { k26, k27, k28, k29, k2a, k2b }, \
 | 
				
			||||||
 | 
					    { k36, k37, k38, k33, k34, k35 } \
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define LAYOUT_planck_grid( \
 | 
				
			||||||
 | 
					    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
 | 
				
			||||||
 | 
					    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
 | 
				
			||||||
 | 
					    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
 | 
				
			||||||
 | 
					    k30, k31, k32, k33, k34, k35, KC_NO, k36, k37, k38, k39, k3a \
 | 
				
			||||||
 | 
					) \
 | 
				
			||||||
 | 
					{ \
 | 
				
			||||||
 | 
					    { k00, k01, k02, k03, k04, k05 }, \
 | 
				
			||||||
 | 
					    { k10, k11, k12, k13, k14, k15 }, \
 | 
				
			||||||
 | 
					    { k20, k21, k22, k23, k24, k25 }, \
 | 
				
			||||||
 | 
					    { k30, k31, k32, k39, k3a, KC_NO }, \
 | 
				
			||||||
 | 
					    { k06, k07, k08, k09, k0a, k0b }, \
 | 
				
			||||||
 | 
					    { k16, k17, k18, k19, k1a, k1b }, \
 | 
				
			||||||
 | 
					    { k26, k27, k28, k29, k2a, k2b }, \
 | 
				
			||||||
 | 
					    { k36, k37, k38, k33, k34, k35 } \
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define KEYMAP LAYOUT_planck_grid
 | 
				
			||||||
 | 
					#define LAYOUT_ortho_4x12 LAYOUT_planck_grid
 | 
				
			||||||
 | 
					#define KC_LAYOUT_ortho_4x12 KC_KEYMAP
 | 
				
			||||||
							
								
								
									
										24
									
								
								keyboards/planck/ez/rules.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								keyboards/planck/ez/rules.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					# project specific files
 | 
				
			||||||
 | 
					LAYOUTS += ortho_4x12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Cortex version
 | 
				
			||||||
 | 
					MCU  = STM32F303
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build Options
 | 
				
			||||||
 | 
					#   comment out to disable the options.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					BACKLIGHT_ENABLE = no
 | 
				
			||||||
 | 
					BOOTMAGIC_ENABLE = yes  # Virtual DIP switch configuration
 | 
				
			||||||
 | 
					## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
 | 
				
			||||||
 | 
					MOUSEKEY_ENABLE = yes # Mouse keys
 | 
				
			||||||
 | 
					EXTRAKEY_ENABLE = yes # Audio control and System control
 | 
				
			||||||
 | 
					CONSOLE_ENABLE = yes  # Console for debug
 | 
				
			||||||
 | 
					COMMAND_ENABLE = yes    # Commands for debug and configuration
 | 
				
			||||||
 | 
					#SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
 | 
				
			||||||
 | 
					NKRO_ENABLE = yes     # USB Nkey Rollover
 | 
				
			||||||
 | 
					CUSTOM_MATRIX = no # Custom matrix file
 | 
				
			||||||
 | 
					AUDIO_ENABLE = yes
 | 
				
			||||||
 | 
					RGBLIGHT_ENABLE = no
 | 
				
			||||||
 | 
					# SERIAL_LINK_ENABLE = yes
 | 
				
			||||||
 | 
					ENCODER_ENABLE = yes
 | 
				
			||||||
 | 
					RGB_MATRIX_ENABLE = IS31FL3737
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,10 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define encoder_update(clockwise) encoder_update_user(uint8_t index, clockwise)
 | 
					#define encoder_update(clockwise) encoder_update_user(uint8_t index, clockwise)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef KEYBOARD_planck_ez
 | 
				
			||||||
 | 
					  #include "ez.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __AVR__
 | 
					#ifdef __AVR__
 | 
				
			||||||
#define LAYOUT_planck_mit( \
 | 
					#define LAYOUT_planck_mit( \
 | 
				
			||||||
	k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
 | 
						k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
 | 
				
			||||||
| 
						 | 
					@ -50,7 +54,7 @@
 | 
				
			||||||
#define LAYOUT_ortho_4x12 LAYOUT_planck_grid
 | 
					#define LAYOUT_ortho_4x12 LAYOUT_planck_grid
 | 
				
			||||||
#define KC_LAYOUT_ortho_4x12 KC_KEYMAP
 | 
					#define KC_LAYOUT_ortho_4x12 KC_KEYMAP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#else
 | 
					#elif KEYBOARD_planck_rev6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	#define LAYOUT_planck_1x2uC( \
 | 
						#define LAYOUT_planck_1x2uC( \
 | 
				
			||||||
    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
 | 
					    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -79,7 +79,7 @@ float startup_song[][2] = STARTUP_SONG;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void gpt_cb8(GPTDriver *gptp);
 | 
					static void gpt_cb8(GPTDriver *gptp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DAC_BUFFER_SIZE 720
 | 
					#define DAC_BUFFER_SIZE 100
 | 
				
			||||||
#ifndef DAC_SAMPLE_MAX
 | 
					#ifndef DAC_SAMPLE_MAX
 | 
				
			||||||
#define DAC_SAMPLE_MAX  65535U
 | 
					#define DAC_SAMPLE_MAX  65535U
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -98,8 +98,8 @@ static void gpt_cb8(GPTDriver *gptp);
 | 
				
			||||||
    RESTART_CHANNEL_1()
 | 
					    RESTART_CHANNEL_1()
 | 
				
			||||||
#define UPDATE_CHANNEL_2_FREQ(freq) gpt7cfg1.frequency = freq * DAC_BUFFER_SIZE; \
 | 
					#define UPDATE_CHANNEL_2_FREQ(freq) gpt7cfg1.frequency = freq * DAC_BUFFER_SIZE; \
 | 
				
			||||||
    RESTART_CHANNEL_2()
 | 
					    RESTART_CHANNEL_2()
 | 
				
			||||||
#define GET_CHANNEL_1_FREQ gpt6cfg1.frequency
 | 
					#define GET_CHANNEL_1_FREQ (uint16_t)(gpt6cfg1.frequency * DAC_BUFFER_SIZE)
 | 
				
			||||||
#define GET_CHANNEL_2_FREQ gpt7cfg1.frequency
 | 
					#define GET_CHANNEL_2_FREQ (uint16_t)(gpt7cfg1.frequency * DAC_BUFFER_SIZE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,9 @@
 | 
				
			||||||
#ifdef IS31FL3731
 | 
					#ifdef IS31FL3731
 | 
				
			||||||
  #include "is31fl3731.h"
 | 
					  #include "is31fl3731.h"
 | 
				
			||||||
#elif defined (IS31FL3733)
 | 
					#elif defined (IS31FL3733)
 | 
				
			||||||
  #include "is31fl3733.h"
 | 
					    #include "is31fl3733.h"
 | 
				
			||||||
 | 
					#elif defined (IS31FL3737)
 | 
				
			||||||
 | 
					    #include "is31fl3737.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef RGB_MATRIX_LED_FLUSH_LIMIT
 | 
					#ifndef RGB_MATRIX_LED_FLUSH_LIMIT
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,7 @@
 | 
				
			||||||
 * be here if shared between boards.
 | 
					 * be here if shared between boards.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(IS31FL3731) || defined(IS31FL3733)
 | 
					#if defined(IS31FL3731) || defined(IS31FL3733) || defined(IS31FL3737)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "i2c_master.h"
 | 
					#include "i2c_master.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,23 +33,29 @@ static void init( void )
 | 
				
			||||||
#ifdef IS31FL3731
 | 
					#ifdef IS31FL3731
 | 
				
			||||||
    IS31FL3731_init( DRIVER_ADDR_1 );
 | 
					    IS31FL3731_init( DRIVER_ADDR_1 );
 | 
				
			||||||
    IS31FL3731_init( DRIVER_ADDR_2 );
 | 
					    IS31FL3731_init( DRIVER_ADDR_2 );
 | 
				
			||||||
#else
 | 
					#elif defined(IS31FL3733)
 | 
				
			||||||
    IS31FL3733_init( DRIVER_ADDR_1 );
 | 
					    IS31FL3733_init( DRIVER_ADDR_1 );
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    IS31FL3737_init( DRIVER_ADDR_1 );
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    for ( int index = 0; index < DRIVER_LED_TOTAL; index++ ) {
 | 
					    for ( int index = 0; index < DRIVER_LED_TOTAL; index++ ) {
 | 
				
			||||||
        bool enabled = true;
 | 
					        bool enabled = true;
 | 
				
			||||||
        // This only caches it for later
 | 
					        // This only caches it for later
 | 
				
			||||||
#ifdef IS31FL3731
 | 
					#ifdef IS31FL3731
 | 
				
			||||||
        IS31FL3731_set_led_control_register( index, enabled, enabled, enabled );
 | 
					        IS31FL3731_set_led_control_register( index, enabled, enabled, enabled );
 | 
				
			||||||
#else
 | 
					#elif defined(IS31FL3733)
 | 
				
			||||||
        IS31FL3733_set_led_control_register( index, enabled, enabled, enabled );
 | 
					        IS31FL3733_set_led_control_register( index, enabled, enabled, enabled );
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					        IS31FL3737_set_led_control_register( index, enabled, enabled, enabled );
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // This actually updates the LED drivers
 | 
					    // This actually updates the LED drivers
 | 
				
			||||||
#ifdef IS31FL3731
 | 
					#ifdef IS31FL3731
 | 
				
			||||||
    IS31FL3731_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 );
 | 
					    IS31FL3731_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 );
 | 
				
			||||||
#else
 | 
					#elif defined(IS31FL3733)
 | 
				
			||||||
    IS31FL3733_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 );
 | 
					    IS31FL3733_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 );
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    IS31FL3737_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 );
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,7 +71,7 @@ const rgb_matrix_driver_t rgb_matrix_driver = {
 | 
				
			||||||
    .set_color = IS31FL3731_set_color,
 | 
					    .set_color = IS31FL3731_set_color,
 | 
				
			||||||
    .set_color_all = IS31FL3731_set_color_all,
 | 
					    .set_color_all = IS31FL3731_set_color_all,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#else
 | 
					#elif defined(IS31FL3733)
 | 
				
			||||||
static void flush( void )
 | 
					static void flush( void )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    IS31FL3733_update_pwm_buffers( DRIVER_ADDR_1, DRIVER_ADDR_2 );
 | 
					    IS31FL3733_update_pwm_buffers( DRIVER_ADDR_1, DRIVER_ADDR_2 );
 | 
				
			||||||
| 
						 | 
					@ -77,6 +83,18 @@ const rgb_matrix_driver_t rgb_matrix_driver = {
 | 
				
			||||||
    .set_color = IS31FL3733_set_color,
 | 
					    .set_color = IS31FL3733_set_color,
 | 
				
			||||||
    .set_color_all = IS31FL3733_set_color_all,
 | 
					    .set_color_all = IS31FL3733_set_color_all,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					static void flush( void )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    IS31FL3737_update_pwm_buffers( DRIVER_ADDR_1, DRIVER_ADDR_2 );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const rgb_matrix_driver_t rgb_matrix_driver = {
 | 
				
			||||||
 | 
					    .init = init,
 | 
				
			||||||
 | 
					    .flush = flush,
 | 
				
			||||||
 | 
					    .set_color = IS31FL3737_set_color,
 | 
				
			||||||
 | 
					    .set_color_all = IS31FL3737_set_color_all,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -76,7 +76,7 @@
 | 
				
			||||||
 * @brief   Enables the I2C subsystem.
 | 
					 * @brief   Enables the I2C subsystem.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 | 
					#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 | 
				
			||||||
#define HAL_USE_I2C                 FALSE
 | 
					#define HAL_USE_I2C                 TRUE
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -154,7 +154,7 @@
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * I2C driver system settings.
 | 
					 * I2C driver system settings.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define STM32_I2C_USE_I2C1                  FALSE
 | 
					#define STM32_I2C_USE_I2C1                  TRUE
 | 
				
			||||||
#define STM32_I2C_USE_I2C2                  FALSE
 | 
					#define STM32_I2C_USE_I2C2                  FALSE
 | 
				
			||||||
#define STM32_I2C_BUSY_TIMEOUT              50
 | 
					#define STM32_I2C_BUSY_TIMEOUT              50
 | 
				
			||||||
#define STM32_I2C_I2C1_IRQ_PRIORITY         10
 | 
					#define STM32_I2C_I2C1_IRQ_PRIORITY         10
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue