Zeal60/Zeal65/M60-A implementation (#3879)
* Initial version of zeal60
* WIP
* Fixes issue #900
* Adding RGB underglow functionality.
Fixed a compile-time conflict caused by enabling RGB underglow functionality.
* Refactor RPC protocol
* Fix last merge
* README for RGB underglow updated.
* Additional README changes.
* Adding RGBW strip software-based current-limiting functionality.
* RGBW current-limiting functionality should be handled by RGBSTRIP_MAX_CURRENT_PER_LIGHT instead.
* Updated README to reflect implementation of built-in current limiting.
* Keymap readability improvements.
* Minor keymap improvements.
* Fixed LED driver init sequence, formatting
* Dimming implementation tested, working.
* Stab LEDs synced with spacebar hits in effects.
* RGB underglow tested and functional. Simplified README for RGB underglow.
* Undid accidental file deletion from previous merge conflict. Safer values for RGB underglow.
* Improved arrow key positions in keymap.
* Added functionality to correct uneven RGB underglow. Refactored related code.
* Reverted to safer values for underglow.
* Changes for v0.3
* Custom LED brightness scaling will take place after current adjustment in order to avoid being overridden.
* Create keymap.c
Added split backspace and split shift to ISO layout
* Create config.h
Turned on LEDs for new layout
* Fixed bug where left spacebar stabilizer LED (LC06) would adopt color of row above.
* Added hhkb_wilba keymap
* Update keymap.c
* Update keymap.c
* Update keymap.c
* Added indicators, full param setting via host
* Added "mousekey" layout
* Added Zeal65 support, factory test mode
* Keycode safe range changed, caused bugs
* Bumped EEPROM version due to change in QMK keycodes
* Disable HHKB "blocked" LEDs if KC_NO in keymap
* Added "disable_hhkb_blocker_leds"
* Required overridden function for keymaps in EEPROM
* Added polar coordinate mapping, effect speed
* Force Raw HID interface number to 1 always
* Fixed last merge from master
* Added effect speed to default keymaps
* add BACKLIGHT_ prefix to vars
* add BACKLIGHT_ prefix to vars
* Keymap speed effect; keymap improvements/fixes
Readme updated to match changes
* Refactored to use common IS31FL3731/I2C drivers
* Fixed make rules, backlight disabled feature
* Make split rightshift default for Zeal65
* Added M60-A as a "version" of Zeal60.
* Renamed IS31FL3731 driver functions
* Fix suspend_wakeup_init_kb() being defined twice
* First pass refactor dynamic keymaps
* Updated to changed I2C and ISSI drivers
* Refactor zeal_color.* usage to quantum/color.*
* Updated Zeal65, fixed dynamic_keymap
* Major refactoring of Zeal60 backlight and API
* Lots of little cleanups
* Added readme.md
* Added readme.md
* Added LAYOUT_60*() macros, refactored and cleaned up default keymaps
* Fix compile error in suspend.c
* Added Zeal65 LAYOUT macros, info.json
* Added rama/m60_a, deleted zeal60/keymaps/m60_a
* Fixed rama/m60_a/keymaps/proto
* Fixed compilation error for suspend.c
* Requested changes for PR
* Fixed readme.md images
* Another readme.md fix
* Added drashna's requested changes
2018-09-13 20:37:13 +02:00
/* Copyright 2017 Jason Williams (Wilba)
*
* 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 "config.h"
2019-08-30 20:19:03 +02:00
# include "keymap.h" // to get keymaps[][][]
2018-09-28 06:09:14 +02:00
# include "tmk_core/common/eeprom.h"
2019-08-30 20:19:03 +02:00
# include "progmem.h" // to read default from flash
# include "quantum.h" // for send_string()
Zeal60/Zeal65/M60-A implementation (#3879)
* Initial version of zeal60
* WIP
* Fixes issue #900
* Adding RGB underglow functionality.
Fixed a compile-time conflict caused by enabling RGB underglow functionality.
* Refactor RPC protocol
* Fix last merge
* README for RGB underglow updated.
* Additional README changes.
* Adding RGBW strip software-based current-limiting functionality.
* RGBW current-limiting functionality should be handled by RGBSTRIP_MAX_CURRENT_PER_LIGHT instead.
* Updated README to reflect implementation of built-in current limiting.
* Keymap readability improvements.
* Minor keymap improvements.
* Fixed LED driver init sequence, formatting
* Dimming implementation tested, working.
* Stab LEDs synced with spacebar hits in effects.
* RGB underglow tested and functional. Simplified README for RGB underglow.
* Undid accidental file deletion from previous merge conflict. Safer values for RGB underglow.
* Improved arrow key positions in keymap.
* Added functionality to correct uneven RGB underglow. Refactored related code.
* Reverted to safer values for underglow.
* Changes for v0.3
* Custom LED brightness scaling will take place after current adjustment in order to avoid being overridden.
* Create keymap.c
Added split backspace and split shift to ISO layout
* Create config.h
Turned on LEDs for new layout
* Fixed bug where left spacebar stabilizer LED (LC06) would adopt color of row above.
* Added hhkb_wilba keymap
* Update keymap.c
* Update keymap.c
* Update keymap.c
* Added indicators, full param setting via host
* Added "mousekey" layout
* Added Zeal65 support, factory test mode
* Keycode safe range changed, caused bugs
* Bumped EEPROM version due to change in QMK keycodes
* Disable HHKB "blocked" LEDs if KC_NO in keymap
* Added "disable_hhkb_blocker_leds"
* Required overridden function for keymaps in EEPROM
* Added polar coordinate mapping, effect speed
* Force Raw HID interface number to 1 always
* Fixed last merge from master
* Added effect speed to default keymaps
* add BACKLIGHT_ prefix to vars
* add BACKLIGHT_ prefix to vars
* Keymap speed effect; keymap improvements/fixes
Readme updated to match changes
* Refactored to use common IS31FL3731/I2C drivers
* Fixed make rules, backlight disabled feature
* Make split rightshift default for Zeal65
* Added M60-A as a "version" of Zeal60.
* Renamed IS31FL3731 driver functions
* Fix suspend_wakeup_init_kb() being defined twice
* First pass refactor dynamic keymaps
* Updated to changed I2C and ISSI drivers
* Refactor zeal_color.* usage to quantum/color.*
* Updated Zeal65, fixed dynamic_keymap
* Major refactoring of Zeal60 backlight and API
* Lots of little cleanups
* Added readme.md
* Added readme.md
* Added LAYOUT_60*() macros, refactored and cleaned up default keymaps
* Fix compile error in suspend.c
* Added Zeal65 LAYOUT macros, info.json
* Added rama/m60_a, deleted zeal60/keymaps/m60_a
* Fixed rama/m60_a/keymaps/proto
* Fixed compilation error for suspend.c
* Requested changes for PR
* Fixed readme.md images
* Another readme.md fix
* Added drashna's requested changes
2018-09-13 20:37:13 +02:00
# include "dynamic_keymap.h"
2020-01-19 17:30:34 +01:00
# include "via.h" // for default VIA_EEPROM_ADDR_END
2020-01-03 21:52:00 +01:00
# ifndef DYNAMIC_KEYMAP_MACRO_COUNT
2020-01-19 17:30:34 +01:00
# define DYNAMIC_KEYMAP_MACRO_COUNT 16
2020-01-03 21:52:00 +01:00
# endif
2020-02-18 02:54:13 +01:00
// This is the default EEPROM max address to use for dynamic keymaps.
// The default is the ATmega32u4 EEPROM max address.
2020-03-14 15:08:48 +01:00
// Explicitly override it if the keyboard uses a microcontroller with
2020-02-18 02:54:13 +01:00
// more EEPROM *and* it makes sense to increase it.
# ifndef DYNAMIC_KEYMAP_EEPROM_MAX_ADDR
2020-07-28 07:34:18 +02:00
# if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
# else
# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 1023
# endif
2020-02-18 02:54:13 +01:00
# endif
2020-09-16 08:16:01 +02:00
// Due to usage of uint16_t check for max 65535
# if DYNAMIC_KEYMAP_EEPROM_MAX_ADDR > 65535
# error DYNAMIC_KEYMAP_EEPROM_MAX_ADDR must be less than 65536
# endif
2020-01-03 21:52:00 +01:00
// If DYNAMIC_KEYMAP_EEPROM_ADDR not explicitly defined in config.h,
// default it start after VIA_EEPROM_CUSTOM_ADDR+VIA_EEPROM_CUSTOM_SIZE
# ifndef DYNAMIC_KEYMAP_EEPROM_ADDR
2020-01-19 17:30:34 +01:00
# ifdef VIA_EEPROM_CUSTOM_CONFIG_ADDR
# define DYNAMIC_KEYMAP_EEPROM_ADDR (VIA_EEPROM_CUSTOM_CONFIG_ADDR + VIA_EEPROM_CUSTOM_CONFIG_SIZE)
# else
# error DYNAMIC_KEYMAP_EEPROM_ADDR not defined
# endif
2020-01-03 21:52:00 +01:00
# endif
2020-12-07 01:23:57 +01:00
// Encoders are located right after the dynamic keymap
# define VIAL_ENCODERS_EEPROM_ADDR (DYNAMIC_KEYMAP_EEPROM_ADDR + (DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2))
# ifdef VIAL_ENCODERS_ENABLE
# define NUMBER_OF_ENCODERS (sizeof(encoders_pad_a) / sizeof(pin_t))
static pin_t encoders_pad_a [ ] = ENCODERS_PAD_A ;
# define VIAL_ENCODERS_SIZE (NUMBER_OF_ENCODERS * DYNAMIC_KEYMAP_LAYER_COUNT * 2 * 2)
# else
# define VIAL_ENCODERS_SIZE 0
# endif
// Dynamic macro starts after encoders, or dynamic keymaps if encoders aren't enabled
2020-01-03 21:52:00 +01:00
# ifndef DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
2020-12-07 01:23:57 +01:00
# define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR (VIAL_ENCODERS_EEPROM_ADDR + VIAL_ENCODERS_SIZE)
2020-01-03 21:52:00 +01:00
# endif
2020-02-18 02:54:13 +01:00
// Sanity check that dynamic keymaps fit in available EEPROM
// If there's not 100 bytes available for macros, then something is wrong.
// The keyboard should override DYNAMIC_KEYMAP_LAYER_COUNT to reduce it,
// or DYNAMIC_KEYMAP_EEPROM_MAX_ADDR to increase it, *only if* the microcontroller has
// more than the default.
2020-12-07 01:23:57 +01:00
_Static_assert ( DYNAMIC_KEYMAP_EEPROM_MAX_ADDR - DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR > = 100 , " Dynamic keymaps are configured to use more EEPROM than is available. " ) ;
2020-02-18 02:54:13 +01:00
// Dynamic macros are stored after the keymaps and use what is available
// up to and including DYNAMIC_KEYMAP_EEPROM_MAX_ADDR.
2020-01-03 21:52:00 +01:00
# ifndef DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE
2020-02-18 02:54:13 +01:00
# define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE (DYNAMIC_KEYMAP_EEPROM_MAX_ADDR - DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + 1)
2020-01-03 21:52:00 +01:00
# endif
2018-11-30 17:43:34 +01:00
2019-08-30 20:19:03 +02:00
uint8_t dynamic_keymap_get_layer_count ( void ) { return DYNAMIC_KEYMAP_LAYER_COUNT ; }
2018-11-30 17:43:34 +01:00
2019-08-30 20:19:03 +02:00
void * dynamic_keymap_key_to_eeprom_address ( uint8_t layer , uint8_t row , uint8_t column ) {
// TODO: optimize this with some left shifts
return ( ( void * ) DYNAMIC_KEYMAP_EEPROM_ADDR ) + ( layer * MATRIX_ROWS * MATRIX_COLS * 2 ) + ( row * MATRIX_COLS * 2 ) + ( column * 2 ) ;
Zeal60/Zeal65/M60-A implementation (#3879)
* Initial version of zeal60
* WIP
* Fixes issue #900
* Adding RGB underglow functionality.
Fixed a compile-time conflict caused by enabling RGB underglow functionality.
* Refactor RPC protocol
* Fix last merge
* README for RGB underglow updated.
* Additional README changes.
* Adding RGBW strip software-based current-limiting functionality.
* RGBW current-limiting functionality should be handled by RGBSTRIP_MAX_CURRENT_PER_LIGHT instead.
* Updated README to reflect implementation of built-in current limiting.
* Keymap readability improvements.
* Minor keymap improvements.
* Fixed LED driver init sequence, formatting
* Dimming implementation tested, working.
* Stab LEDs synced with spacebar hits in effects.
* RGB underglow tested and functional. Simplified README for RGB underglow.
* Undid accidental file deletion from previous merge conflict. Safer values for RGB underglow.
* Improved arrow key positions in keymap.
* Added functionality to correct uneven RGB underglow. Refactored related code.
* Reverted to safer values for underglow.
* Changes for v0.3
* Custom LED brightness scaling will take place after current adjustment in order to avoid being overridden.
* Create keymap.c
Added split backspace and split shift to ISO layout
* Create config.h
Turned on LEDs for new layout
* Fixed bug where left spacebar stabilizer LED (LC06) would adopt color of row above.
* Added hhkb_wilba keymap
* Update keymap.c
* Update keymap.c
* Update keymap.c
* Added indicators, full param setting via host
* Added "mousekey" layout
* Added Zeal65 support, factory test mode
* Keycode safe range changed, caused bugs
* Bumped EEPROM version due to change in QMK keycodes
* Disable HHKB "blocked" LEDs if KC_NO in keymap
* Added "disable_hhkb_blocker_leds"
* Required overridden function for keymaps in EEPROM
* Added polar coordinate mapping, effect speed
* Force Raw HID interface number to 1 always
* Fixed last merge from master
* Added effect speed to default keymaps
* add BACKLIGHT_ prefix to vars
* add BACKLIGHT_ prefix to vars
* Keymap speed effect; keymap improvements/fixes
Readme updated to match changes
* Refactored to use common IS31FL3731/I2C drivers
* Fixed make rules, backlight disabled feature
* Make split rightshift default for Zeal65
* Added M60-A as a "version" of Zeal60.
* Renamed IS31FL3731 driver functions
* Fix suspend_wakeup_init_kb() being defined twice
* First pass refactor dynamic keymaps
* Updated to changed I2C and ISSI drivers
* Refactor zeal_color.* usage to quantum/color.*
* Updated Zeal65, fixed dynamic_keymap
* Major refactoring of Zeal60 backlight and API
* Lots of little cleanups
* Added readme.md
* Added readme.md
* Added LAYOUT_60*() macros, refactored and cleaned up default keymaps
* Fix compile error in suspend.c
* Added Zeal65 LAYOUT macros, info.json
* Added rama/m60_a, deleted zeal60/keymaps/m60_a
* Fixed rama/m60_a/keymaps/proto
* Fixed compilation error for suspend.c
* Requested changes for PR
* Fixed readme.md images
* Another readme.md fix
* Added drashna's requested changes
2018-09-13 20:37:13 +02:00
}
2019-08-30 20:19:03 +02:00
uint16_t dynamic_keymap_get_keycode ( uint8_t layer , uint8_t row , uint8_t column ) {
void * address = dynamic_keymap_key_to_eeprom_address ( layer , row , column ) ;
// Big endian, so we can read/write EEPROM directly from host if we want
uint16_t keycode = eeprom_read_byte ( address ) < < 8 ;
keycode | = eeprom_read_byte ( address + 1 ) ;
return keycode ;
Zeal60/Zeal65/M60-A implementation (#3879)
* Initial version of zeal60
* WIP
* Fixes issue #900
* Adding RGB underglow functionality.
Fixed a compile-time conflict caused by enabling RGB underglow functionality.
* Refactor RPC protocol
* Fix last merge
* README for RGB underglow updated.
* Additional README changes.
* Adding RGBW strip software-based current-limiting functionality.
* RGBW current-limiting functionality should be handled by RGBSTRIP_MAX_CURRENT_PER_LIGHT instead.
* Updated README to reflect implementation of built-in current limiting.
* Keymap readability improvements.
* Minor keymap improvements.
* Fixed LED driver init sequence, formatting
* Dimming implementation tested, working.
* Stab LEDs synced with spacebar hits in effects.
* RGB underglow tested and functional. Simplified README for RGB underglow.
* Undid accidental file deletion from previous merge conflict. Safer values for RGB underglow.
* Improved arrow key positions in keymap.
* Added functionality to correct uneven RGB underglow. Refactored related code.
* Reverted to safer values for underglow.
* Changes for v0.3
* Custom LED brightness scaling will take place after current adjustment in order to avoid being overridden.
* Create keymap.c
Added split backspace and split shift to ISO layout
* Create config.h
Turned on LEDs for new layout
* Fixed bug where left spacebar stabilizer LED (LC06) would adopt color of row above.
* Added hhkb_wilba keymap
* Update keymap.c
* Update keymap.c
* Update keymap.c
* Added indicators, full param setting via host
* Added "mousekey" layout
* Added Zeal65 support, factory test mode
* Keycode safe range changed, caused bugs
* Bumped EEPROM version due to change in QMK keycodes
* Disable HHKB "blocked" LEDs if KC_NO in keymap
* Added "disable_hhkb_blocker_leds"
* Required overridden function for keymaps in EEPROM
* Added polar coordinate mapping, effect speed
* Force Raw HID interface number to 1 always
* Fixed last merge from master
* Added effect speed to default keymaps
* add BACKLIGHT_ prefix to vars
* add BACKLIGHT_ prefix to vars
* Keymap speed effect; keymap improvements/fixes
Readme updated to match changes
* Refactored to use common IS31FL3731/I2C drivers
* Fixed make rules, backlight disabled feature
* Make split rightshift default for Zeal65
* Added M60-A as a "version" of Zeal60.
* Renamed IS31FL3731 driver functions
* Fix suspend_wakeup_init_kb() being defined twice
* First pass refactor dynamic keymaps
* Updated to changed I2C and ISSI drivers
* Refactor zeal_color.* usage to quantum/color.*
* Updated Zeal65, fixed dynamic_keymap
* Major refactoring of Zeal60 backlight and API
* Lots of little cleanups
* Added readme.md
* Added readme.md
* Added LAYOUT_60*() macros, refactored and cleaned up default keymaps
* Fix compile error in suspend.c
* Added Zeal65 LAYOUT macros, info.json
* Added rama/m60_a, deleted zeal60/keymaps/m60_a
* Fixed rama/m60_a/keymaps/proto
* Fixed compilation error for suspend.c
* Requested changes for PR
* Fixed readme.md images
* Another readme.md fix
* Added drashna's requested changes
2018-09-13 20:37:13 +02:00
}
2019-08-30 20:19:03 +02:00
void dynamic_keymap_set_keycode ( uint8_t layer , uint8_t row , uint8_t column , uint16_t keycode ) {
void * address = dynamic_keymap_key_to_eeprom_address ( layer , row , column ) ;
// Big endian, so we can read/write EEPROM directly from host if we want
eeprom_update_byte ( address , ( uint8_t ) ( keycode > > 8 ) ) ;
eeprom_update_byte ( address + 1 , ( uint8_t ) ( keycode & 0xFF ) ) ;
Zeal60/Zeal65/M60-A implementation (#3879)
* Initial version of zeal60
* WIP
* Fixes issue #900
* Adding RGB underglow functionality.
Fixed a compile-time conflict caused by enabling RGB underglow functionality.
* Refactor RPC protocol
* Fix last merge
* README for RGB underglow updated.
* Additional README changes.
* Adding RGBW strip software-based current-limiting functionality.
* RGBW current-limiting functionality should be handled by RGBSTRIP_MAX_CURRENT_PER_LIGHT instead.
* Updated README to reflect implementation of built-in current limiting.
* Keymap readability improvements.
* Minor keymap improvements.
* Fixed LED driver init sequence, formatting
* Dimming implementation tested, working.
* Stab LEDs synced with spacebar hits in effects.
* RGB underglow tested and functional. Simplified README for RGB underglow.
* Undid accidental file deletion from previous merge conflict. Safer values for RGB underglow.
* Improved arrow key positions in keymap.
* Added functionality to correct uneven RGB underglow. Refactored related code.
* Reverted to safer values for underglow.
* Changes for v0.3
* Custom LED brightness scaling will take place after current adjustment in order to avoid being overridden.
* Create keymap.c
Added split backspace and split shift to ISO layout
* Create config.h
Turned on LEDs for new layout
* Fixed bug where left spacebar stabilizer LED (LC06) would adopt color of row above.
* Added hhkb_wilba keymap
* Update keymap.c
* Update keymap.c
* Update keymap.c
* Added indicators, full param setting via host
* Added "mousekey" layout
* Added Zeal65 support, factory test mode
* Keycode safe range changed, caused bugs
* Bumped EEPROM version due to change in QMK keycodes
* Disable HHKB "blocked" LEDs if KC_NO in keymap
* Added "disable_hhkb_blocker_leds"
* Required overridden function for keymaps in EEPROM
* Added polar coordinate mapping, effect speed
* Force Raw HID interface number to 1 always
* Fixed last merge from master
* Added effect speed to default keymaps
* add BACKLIGHT_ prefix to vars
* add BACKLIGHT_ prefix to vars
* Keymap speed effect; keymap improvements/fixes
Readme updated to match changes
* Refactored to use common IS31FL3731/I2C drivers
* Fixed make rules, backlight disabled feature
* Make split rightshift default for Zeal65
* Added M60-A as a "version" of Zeal60.
* Renamed IS31FL3731 driver functions
* Fix suspend_wakeup_init_kb() being defined twice
* First pass refactor dynamic keymaps
* Updated to changed I2C and ISSI drivers
* Refactor zeal_color.* usage to quantum/color.*
* Updated Zeal65, fixed dynamic_keymap
* Major refactoring of Zeal60 backlight and API
* Lots of little cleanups
* Added readme.md
* Added readme.md
* Added LAYOUT_60*() macros, refactored and cleaned up default keymaps
* Fix compile error in suspend.c
* Added Zeal65 LAYOUT macros, info.json
* Added rama/m60_a, deleted zeal60/keymaps/m60_a
* Fixed rama/m60_a/keymaps/proto
* Fixed compilation error for suspend.c
* Requested changes for PR
* Fixed readme.md images
* Another readme.md fix
* Added drashna's requested changes
2018-09-13 20:37:13 +02:00
}
2020-12-07 01:23:57 +01:00
# ifdef VIAL_ENCODERS_ENABLE
static void * dynamic_keymap_encoder_to_eeprom_address ( uint8_t layer , uint8_t idx , uint8_t dir ) {
return ( ( void * ) VIAL_ENCODERS_EEPROM_ADDR ) + ( layer * NUMBER_OF_ENCODERS * 2 * 2 ) + ( idx * 2 * 2 ) + dir * 2 ;
}
uint16_t dynamic_keymap_get_encoder ( uint8_t layer , uint8_t idx , uint8_t dir ) {
if ( layer > = DYNAMIC_KEYMAP_LAYER_COUNT | | idx > = NUMBER_OF_ENCODERS | | dir > 1 )
return 0 ;
void * address = dynamic_keymap_encoder_to_eeprom_address ( layer , idx , dir ) ;
uint16_t keycode = eeprom_read_byte ( address ) < < 8 ;
keycode | = eeprom_read_byte ( address + 1 ) ;
return keycode ;
}
void dynamic_keymap_set_encoder ( uint8_t layer , uint8_t idx , uint8_t dir , uint16_t keycode ) {
if ( layer > = DYNAMIC_KEYMAP_LAYER_COUNT | | idx > = NUMBER_OF_ENCODERS | | dir > 1 )
return ;
void * address = dynamic_keymap_encoder_to_eeprom_address ( layer , idx , dir ) ;
eeprom_update_byte ( address , ( uint8_t ) ( keycode > > 8 ) ) ;
eeprom_update_byte ( address + 1 , ( uint8_t ) ( keycode & 0xFF ) ) ;
}
# endif
2019-08-30 20:19:03 +02:00
void dynamic_keymap_reset ( void ) {
// Reset the keymaps in EEPROM to what is in flash.
// All keyboards using dynamic keymaps should define a layout
// for the same number of layers as DYNAMIC_KEYMAP_LAYER_COUNT.
for ( int layer = 0 ; layer < DYNAMIC_KEYMAP_LAYER_COUNT ; layer + + ) {
for ( int row = 0 ; row < MATRIX_ROWS ; row + + ) {
for ( int column = 0 ; column < MATRIX_COLS ; column + + ) {
dynamic_keymap_set_keycode ( layer , row , column , pgm_read_word ( & keymaps [ layer ] [ row ] [ column ] ) ) ;
}
}
2020-12-07 01:23:57 +01:00
# ifdef VIAL_ENCODERS_ENABLE
for ( int idx = 0 ; idx < NUMBER_OF_ENCODERS ; + + idx ) {
dynamic_keymap_set_encoder ( layer , idx , 0 , KC_TRNS ) ;
dynamic_keymap_set_encoder ( layer , idx , 1 , KC_TRNS ) ;
}
# endif
2019-08-30 20:19:03 +02:00
}
Zeal60/Zeal65/M60-A implementation (#3879)
* Initial version of zeal60
* WIP
* Fixes issue #900
* Adding RGB underglow functionality.
Fixed a compile-time conflict caused by enabling RGB underglow functionality.
* Refactor RPC protocol
* Fix last merge
* README for RGB underglow updated.
* Additional README changes.
* Adding RGBW strip software-based current-limiting functionality.
* RGBW current-limiting functionality should be handled by RGBSTRIP_MAX_CURRENT_PER_LIGHT instead.
* Updated README to reflect implementation of built-in current limiting.
* Keymap readability improvements.
* Minor keymap improvements.
* Fixed LED driver init sequence, formatting
* Dimming implementation tested, working.
* Stab LEDs synced with spacebar hits in effects.
* RGB underglow tested and functional. Simplified README for RGB underglow.
* Undid accidental file deletion from previous merge conflict. Safer values for RGB underglow.
* Improved arrow key positions in keymap.
* Added functionality to correct uneven RGB underglow. Refactored related code.
* Reverted to safer values for underglow.
* Changes for v0.3
* Custom LED brightness scaling will take place after current adjustment in order to avoid being overridden.
* Create keymap.c
Added split backspace and split shift to ISO layout
* Create config.h
Turned on LEDs for new layout
* Fixed bug where left spacebar stabilizer LED (LC06) would adopt color of row above.
* Added hhkb_wilba keymap
* Update keymap.c
* Update keymap.c
* Update keymap.c
* Added indicators, full param setting via host
* Added "mousekey" layout
* Added Zeal65 support, factory test mode
* Keycode safe range changed, caused bugs
* Bumped EEPROM version due to change in QMK keycodes
* Disable HHKB "blocked" LEDs if KC_NO in keymap
* Added "disable_hhkb_blocker_leds"
* Required overridden function for keymaps in EEPROM
* Added polar coordinate mapping, effect speed
* Force Raw HID interface number to 1 always
* Fixed last merge from master
* Added effect speed to default keymaps
* add BACKLIGHT_ prefix to vars
* add BACKLIGHT_ prefix to vars
* Keymap speed effect; keymap improvements/fixes
Readme updated to match changes
* Refactored to use common IS31FL3731/I2C drivers
* Fixed make rules, backlight disabled feature
* Make split rightshift default for Zeal65
* Added M60-A as a "version" of Zeal60.
* Renamed IS31FL3731 driver functions
* Fix suspend_wakeup_init_kb() being defined twice
* First pass refactor dynamic keymaps
* Updated to changed I2C and ISSI drivers
* Refactor zeal_color.* usage to quantum/color.*
* Updated Zeal65, fixed dynamic_keymap
* Major refactoring of Zeal60 backlight and API
* Lots of little cleanups
* Added readme.md
* Added readme.md
* Added LAYOUT_60*() macros, refactored and cleaned up default keymaps
* Fix compile error in suspend.c
* Added Zeal65 LAYOUT macros, info.json
* Added rama/m60_a, deleted zeal60/keymaps/m60_a
* Fixed rama/m60_a/keymaps/proto
* Fixed compilation error for suspend.c
* Requested changes for PR
* Fixed readme.md images
* Another readme.md fix
* Added drashna's requested changes
2018-09-13 20:37:13 +02:00
}
2019-08-30 20:19:03 +02:00
void dynamic_keymap_get_buffer ( uint16_t offset , uint16_t size , uint8_t * data ) {
uint16_t dynamic_keymap_eeprom_size = DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2 ;
void * source = ( void * ) ( DYNAMIC_KEYMAP_EEPROM_ADDR + offset ) ;
uint8_t * target = data ;
for ( uint16_t i = 0 ; i < size ; i + + ) {
if ( offset + i < dynamic_keymap_eeprom_size ) {
* target = eeprom_read_byte ( source ) ;
} else {
* target = 0x00 ;
}
source + + ;
target + + ;
}
2018-11-30 17:43:34 +01:00
}
2019-08-30 20:19:03 +02:00
void dynamic_keymap_set_buffer ( uint16_t offset , uint16_t size , uint8_t * data ) {
uint16_t dynamic_keymap_eeprom_size = DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2 ;
void * target = ( void * ) ( DYNAMIC_KEYMAP_EEPROM_ADDR + offset ) ;
uint8_t * source = data ;
for ( uint16_t i = 0 ; i < size ; i + + ) {
if ( offset + i < dynamic_keymap_eeprom_size ) {
eeprom_update_byte ( target , * source ) ;
}
source + + ;
target + + ;
}
2018-11-30 17:43:34 +01:00
}
Zeal60/Zeal65/M60-A implementation (#3879)
* Initial version of zeal60
* WIP
* Fixes issue #900
* Adding RGB underglow functionality.
Fixed a compile-time conflict caused by enabling RGB underglow functionality.
* Refactor RPC protocol
* Fix last merge
* README for RGB underglow updated.
* Additional README changes.
* Adding RGBW strip software-based current-limiting functionality.
* RGBW current-limiting functionality should be handled by RGBSTRIP_MAX_CURRENT_PER_LIGHT instead.
* Updated README to reflect implementation of built-in current limiting.
* Keymap readability improvements.
* Minor keymap improvements.
* Fixed LED driver init sequence, formatting
* Dimming implementation tested, working.
* Stab LEDs synced with spacebar hits in effects.
* RGB underglow tested and functional. Simplified README for RGB underglow.
* Undid accidental file deletion from previous merge conflict. Safer values for RGB underglow.
* Improved arrow key positions in keymap.
* Added functionality to correct uneven RGB underglow. Refactored related code.
* Reverted to safer values for underglow.
* Changes for v0.3
* Custom LED brightness scaling will take place after current adjustment in order to avoid being overridden.
* Create keymap.c
Added split backspace and split shift to ISO layout
* Create config.h
Turned on LEDs for new layout
* Fixed bug where left spacebar stabilizer LED (LC06) would adopt color of row above.
* Added hhkb_wilba keymap
* Update keymap.c
* Update keymap.c
* Update keymap.c
* Added indicators, full param setting via host
* Added "mousekey" layout
* Added Zeal65 support, factory test mode
* Keycode safe range changed, caused bugs
* Bumped EEPROM version due to change in QMK keycodes
* Disable HHKB "blocked" LEDs if KC_NO in keymap
* Added "disable_hhkb_blocker_leds"
* Required overridden function for keymaps in EEPROM
* Added polar coordinate mapping, effect speed
* Force Raw HID interface number to 1 always
* Fixed last merge from master
* Added effect speed to default keymaps
* add BACKLIGHT_ prefix to vars
* add BACKLIGHT_ prefix to vars
* Keymap speed effect; keymap improvements/fixes
Readme updated to match changes
* Refactored to use common IS31FL3731/I2C drivers
* Fixed make rules, backlight disabled feature
* Make split rightshift default for Zeal65
* Added M60-A as a "version" of Zeal60.
* Renamed IS31FL3731 driver functions
* Fix suspend_wakeup_init_kb() being defined twice
* First pass refactor dynamic keymaps
* Updated to changed I2C and ISSI drivers
* Refactor zeal_color.* usage to quantum/color.*
* Updated Zeal65, fixed dynamic_keymap
* Major refactoring of Zeal60 backlight and API
* Lots of little cleanups
* Added readme.md
* Added readme.md
* Added LAYOUT_60*() macros, refactored and cleaned up default keymaps
* Fix compile error in suspend.c
* Added Zeal65 LAYOUT macros, info.json
* Added rama/m60_a, deleted zeal60/keymaps/m60_a
* Fixed rama/m60_a/keymaps/proto
* Fixed compilation error for suspend.c
* Requested changes for PR
* Fixed readme.md images
* Another readme.md fix
* Added drashna's requested changes
2018-09-13 20:37:13 +02:00
// This overrides the one in quantum/keymap_common.c
2019-08-30 20:19:03 +02:00
uint16_t keymap_key_to_keycode ( uint8_t layer , keypos_t key ) {
if ( layer < DYNAMIC_KEYMAP_LAYER_COUNT & & key . row < MATRIX_ROWS & & key . col < MATRIX_COLS ) {
return dynamic_keymap_get_keycode ( layer , key . row , key . col ) ;
} else {
return KC_NO ;
}
2018-11-30 17:43:34 +01:00
}
2019-08-30 20:19:03 +02:00
uint8_t dynamic_keymap_macro_get_count ( void ) { return DYNAMIC_KEYMAP_MACRO_COUNT ; }
uint16_t dynamic_keymap_macro_get_buffer_size ( void ) { return DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE ; }
void dynamic_keymap_macro_get_buffer ( uint16_t offset , uint16_t size , uint8_t * data ) {
void * source = ( void * ) ( DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + offset ) ;
uint8_t * target = data ;
for ( uint16_t i = 0 ; i < size ; i + + ) {
if ( offset + i < DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE ) {
* target = eeprom_read_byte ( source ) ;
} else {
* target = 0x00 ;
}
source + + ;
target + + ;
}
2018-11-30 17:43:34 +01:00
}
2019-08-30 20:19:03 +02:00
void dynamic_keymap_macro_set_buffer ( uint16_t offset , uint16_t size , uint8_t * data ) {
void * target = ( void * ) ( DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + offset ) ;
uint8_t * source = data ;
for ( uint16_t i = 0 ; i < size ; i + + ) {
if ( offset + i < DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE ) {
eeprom_update_byte ( target , * source ) ;
}
source + + ;
target + + ;
}
2018-11-30 17:43:34 +01:00
}
2019-08-30 20:19:03 +02:00
void dynamic_keymap_macro_reset ( void ) {
void * p = ( void * ) ( DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR ) ;
void * end = ( void * ) ( DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE ) ;
while ( p ! = end ) {
eeprom_update_byte ( p , 0 ) ;
+ + p ;
}
2018-11-30 17:43:34 +01:00
}
2019-08-30 20:19:03 +02:00
void dynamic_keymap_macro_send ( uint8_t id ) {
if ( id > = DYNAMIC_KEYMAP_MACRO_COUNT ) {
return ;
}
// Check the last byte of the buffer.
// If it's not zero, then we are in the middle
// of buffer writing, possibly an aborted buffer
// write. So do nothing.
void * p = ( void * ) ( DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE - 1 ) ;
if ( eeprom_read_byte ( p ) ! = 0 ) {
return ;
}
// Skip N null characters
// p will then point to the Nth macro
p = ( void * ) ( DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR ) ;
void * end = ( void * ) ( DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE ) ;
while ( id > 0 ) {
// If we are past the end of the buffer, then the buffer
// contents are garbage, i.e. there were not DYNAMIC_KEYMAP_MACRO_COUNT
// nulls in the buffer.
if ( p = = end ) {
return ;
}
if ( eeprom_read_byte ( p ) = = 0 ) {
- - id ;
}
+ + p ;
}
2020-03-14 14:35:12 +01:00
// Send the macro string one or three chars at a time
// by making temporary 1 or 3 char strings
char data [ 4 ] = { 0 , 0 , 0 , 0 } ;
2019-08-30 20:19:03 +02:00
// We already checked there was a null at the end of
// the buffer, so this cannot go past the end
while ( 1 ) {
data [ 0 ] = eeprom_read_byte ( p + + ) ;
data [ 1 ] = 0 ;
// Stop at the null terminator of this macro string
if ( data [ 0 ] = = 0 ) {
break ;
}
// If the char is magic (tap, down, up),
2020-03-14 14:35:12 +01:00
// add the next char (key to use) and send a 3 char string.
2019-08-30 20:19:03 +02:00
if ( data [ 0 ] = = SS_TAP_CODE | | data [ 0 ] = = SS_DOWN_CODE | | data [ 0 ] = = SS_UP_CODE ) {
2020-03-14 14:35:12 +01:00
data [ 1 ] = data [ 0 ] ;
data [ 0 ] = SS_QMK_PREFIX ;
data [ 2 ] = eeprom_read_byte ( p + + ) ;
if ( data [ 2 ] = = 0 ) {
2019-08-30 20:19:03 +02:00
break ;
}
}
send_string ( data ) ;
}
2018-11-30 17:43:34 +01:00
}