[keymap] Add VIA support for Hub16 (#9638)
* fix encoder switch not staying depressed * add via support * change default keymap * change VID-PID * remove LTO * fix hold bug keeping debouncing
This commit is contained in:
		
							parent
							
								
									56beaf7d3f
								
							
						
					
					
						commit
						07a817d3e5
					
				
					 4 changed files with 87 additions and 21 deletions
				
			
		| 
						 | 
					@ -20,8 +20,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
#include "config_common.h"
 | 
					#include "config_common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* USB Device descriptor parameter */
 | 
					/* USB Device descriptor parameter */
 | 
				
			||||||
#define VENDOR_ID 0xFEED
 | 
					#define VENDOR_ID 0x6A6A
 | 
				
			||||||
#define PRODUCT_ID 0x8F73
 | 
					#define PRODUCT_ID 0x4810
 | 
				
			||||||
#define DEVICE_VER 0x0001
 | 
					#define DEVICE_VER 0x0001
 | 
				
			||||||
#define MANUFACTURER Josh Johnson
 | 
					#define MANUFACTURER Josh Johnson
 | 
				
			||||||
#define PRODUCT Hub16
 | 
					#define PRODUCT Hub16
 | 
				
			||||||
| 
						 | 
					@ -42,9 +42,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define MATRIX_ROW_PINS \
 | 
					#define MATRIX_ROW_PINS \
 | 
				
			||||||
    { F0, C7, C6, B6, E6}  
 | 
					    { F0, C7, C6, B6, E6}
 | 
				
			||||||
#define MATRIX_COL_PINS \
 | 
					#define MATRIX_COL_PINS \
 | 
				
			||||||
    { F4, F1, D5, D3 }  
 | 
					    { F4, F1, D5, D3 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* COL2ROW, ROW2COL*/
 | 
					/* COL2ROW, ROW2COL*/
 | 
				
			||||||
#define DIODE_DIRECTION COL2ROW
 | 
					#define DIODE_DIRECTION COL2ROW
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										66
									
								
								keyboards/hub16/keymaps/via/keymap.c
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										66
									
								
								keyboards/hub16/keymaps/via/keymap.c
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,66 @@
 | 
				
			||||||
 | 
					/* Copyright 2019 Josh Johnson
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 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 QMK_KEYBOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					  [0] = LAYOUT( /* Base */
 | 
				
			||||||
 | 
					      KC_MUTE,   KC_MPLY,
 | 
				
			||||||
 | 
					    KC_7, KC_8, KC_9, KC_PAST,
 | 
				
			||||||
 | 
					    KC_4, KC_5, KC_6, KC_PMNS,
 | 
				
			||||||
 | 
					    KC_1, KC_2, KC_3, KC_PPLS,
 | 
				
			||||||
 | 
					    MO(1), KC_0, KC_PDOT, KC_PENT
 | 
				
			||||||
 | 
					  ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [1] = LAYOUT( /* LED Control */
 | 
				
			||||||
 | 
					        _______,           _______,
 | 
				
			||||||
 | 
					    _______, RGB_MOD, RGB_RMOD, RGB_TOG,
 | 
				
			||||||
 | 
					    RGB_VAD, RGB_VAI, RGB_HUD,  RGB_HUI,
 | 
				
			||||||
 | 
					    RGB_SAD, RGB_SAI, _______,  _______,
 | 
				
			||||||
 | 
					    _______, _______, RESET,    _______
 | 
				
			||||||
 | 
					  ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [2] = LAYOUT(
 | 
				
			||||||
 | 
					        _______,           _______,
 | 
				
			||||||
 | 
					    _______, _______, _______, _______,
 | 
				
			||||||
 | 
					    _______, _______, _______, _______,
 | 
				
			||||||
 | 
					    _______, _______, _______, _______,
 | 
				
			||||||
 | 
					    _______, _______, _______, _______
 | 
				
			||||||
 | 
					  ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [3] = LAYOUT(
 | 
				
			||||||
 | 
					        _______,           _______,
 | 
				
			||||||
 | 
					    _______, _______, _______, _______,
 | 
				
			||||||
 | 
					    _______, _______, _______, _______,
 | 
				
			||||||
 | 
					    _______, _______, _______, _______,
 | 
				
			||||||
 | 
					    _______, _______, _______, _______
 | 
				
			||||||
 | 
					  ),
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void encoder_update_user(uint8_t index, bool clockwise) {
 | 
				
			||||||
 | 
					    if (index == 0) { /* Left Encoder */
 | 
				
			||||||
 | 
					        if (clockwise) {
 | 
				
			||||||
 | 
					            tap_code(KC_VOLD);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            tap_code(KC_VOLU);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    } else if (index == 1) { /* Right Encoder */
 | 
				
			||||||
 | 
					        if (clockwise) {
 | 
				
			||||||
 | 
					            tap_code(KC_MPRV);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            tap_code(KC_MNXT);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										4
									
								
								keyboards/hub16/keymaps/via/rules.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								keyboards/hub16/keymaps/via/rules.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					VIA_ENABLE = yes
 | 
				
			||||||
 | 
					CONSOLE_ENABLE = no
 | 
				
			||||||
 | 
					COMMAND_ENABLE = no
 | 
				
			||||||
 | 
					TAP_DANCE_ENABLE = no
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
// Encoder things
 | 
					// Encoder things
 | 
				
			||||||
#define SWITCH_1 F7
 | 
					#define SWITCH_1 F7
 | 
				
			||||||
#define SWITCH_2 D7
 | 
					#define SWITCH_2 D7
 | 
				
			||||||
static bool read_encoder_values(matrix_row_t current_matrix[], uint8_t current_row);
 | 
					static bool read_encoder_switches(matrix_row_t current_matrix[], uint8_t current_row);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef MATRIX_MASKED
 | 
					#ifdef MATRIX_MASKED
 | 
				
			||||||
extern const matrix_row_t matrix_mask[];
 | 
					extern const matrix_row_t matrix_mask[];
 | 
				
			||||||
| 
						 | 
					@ -128,7 +128,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Unselect row
 | 
					    // Unselect row
 | 
				
			||||||
    unselect_row(current_row); 
 | 
					    unselect_row(current_row);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return (last_row_value != current_matrix[current_row]);
 | 
					    return (last_row_value != current_matrix[current_row]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -223,27 +223,23 @@ uint8_t matrix_scan(void) {
 | 
				
			||||||
    debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
 | 
					    debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Read encoder switches, already debounced
 | 
					    // Read encoder switches, already debounced
 | 
				
			||||||
    changed |= read_encoder_values(matrix, 4);    
 | 
					    changed |= read_encoder_switches(matrix, 4);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    matrix_scan_quantum();
 | 
					    matrix_scan_quantum();
 | 
				
			||||||
    return (uint8_t)changed;
 | 
					    return (uint8_t)changed;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Customisations for the encoders
 | 
					// Customisations for the encoders
 | 
				
			||||||
void matrix_init_kb(void){
 | 
					void matrix_init_kb(void) {
 | 
				
			||||||
    setPinInput(SWITCH_1);
 | 
					    setPinInput(SWITCH_1);
 | 
				
			||||||
    setPinInput(SWITCH_2);
 | 
					    setPinInput(SWITCH_2);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void matrix_scan_kb(void){
 | 
					void matrix_scan_kb(void) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					void matrix_print(void) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void matrix_print(void){
 | 
					static bool read_encoder_switches(matrix_row_t current_matrix[], uint8_t current_row) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static bool read_encoder_values(matrix_row_t current_matrix[], uint8_t current_row) {
 | 
					 | 
				
			||||||
    // Store last value of row prior to reading
 | 
					    // Store last value of row prior to reading
 | 
				
			||||||
    matrix_row_t last_row_value = current_matrix[current_row];
 | 
					    matrix_row_t last_row_value = current_matrix[current_row];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -253,18 +249,18 @@ static bool read_encoder_values(matrix_row_t current_matrix[], uint8_t current_r
 | 
				
			||||||
    // Debounce the encoder buttons using a shift register
 | 
					    // Debounce the encoder buttons using a shift register
 | 
				
			||||||
    static uint8_t btn_1_array;
 | 
					    static uint8_t btn_1_array;
 | 
				
			||||||
    static uint8_t btn_2_array;
 | 
					    static uint8_t btn_2_array;
 | 
				
			||||||
    bool    btn_1_rising = 0;
 | 
					    bool           btn_1_pressed = 0;
 | 
				
			||||||
    bool    btn_2_rising = 0;
 | 
					    bool           btn_2_pressed = 0;
 | 
				
			||||||
    btn_1_array <<= 1;
 | 
					    btn_1_array <<= 1;
 | 
				
			||||||
    btn_2_array <<= 1;
 | 
					    btn_2_array <<= 1;
 | 
				
			||||||
    btn_1_array |= readPin(SWITCH_1);
 | 
					    btn_1_array |= readPin(SWITCH_1);
 | 
				
			||||||
    btn_2_array |= readPin(SWITCH_2);
 | 
					    btn_2_array |= readPin(SWITCH_2);
 | 
				
			||||||
    (btn_1_array == 0b01111111) ? (btn_1_rising = 1) : (btn_1_rising = 0);
 | 
					    (btn_1_array == 0b11111111) ? (btn_1_pressed = 1) : (btn_1_pressed = 0);
 | 
				
			||||||
    (btn_2_array == 0b01111111) ? (btn_2_rising = 1) : (btn_2_rising = 0);
 | 
					    (btn_2_array == 0b11111111) ? (btn_2_pressed = 1) : (btn_2_pressed = 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Populate the matrix row with the state of the encoder
 | 
					    // Populate the matrix row with the state of the encoder
 | 
				
			||||||
    current_matrix[current_row] |= btn_1_rising ? (1 << 0) : 0;
 | 
					    current_matrix[current_row] |= btn_1_pressed ? (1 << 0) : 0;
 | 
				
			||||||
    current_matrix[current_row] |= btn_2_rising ? (1 << 1) : 0;
 | 
					    current_matrix[current_row] |= btn_2_pressed ? (1 << 1) : 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return (last_row_value != current_matrix[current_row]);
 | 
					    return (last_row_value != current_matrix[current_row]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue