mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-11-04 07:12:33 +01:00 
			
		
		
		
	[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
					
				@ -20,8 +20,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
#include "config_common.h"
 | 
			
		||||
 | 
			
		||||
/* USB Device descriptor parameter */
 | 
			
		||||
#define VENDOR_ID 0xFEED
 | 
			
		||||
#define PRODUCT_ID 0x8F73
 | 
			
		||||
#define VENDOR_ID 0x6A6A
 | 
			
		||||
#define PRODUCT_ID 0x4810
 | 
			
		||||
#define DEVICE_VER 0x0001
 | 
			
		||||
#define MANUFACTURER Josh Johnson
 | 
			
		||||
#define PRODUCT Hub16
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										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
 | 
			
		||||
#define SWITCH_1 F7
 | 
			
		||||
#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
 | 
			
		||||
extern const matrix_row_t matrix_mask[];
 | 
			
		||||
@ -223,27 +223,23 @@ uint8_t matrix_scan(void) {
 | 
			
		||||
    debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
 | 
			
		||||
 | 
			
		||||
    // Read encoder switches, already debounced
 | 
			
		||||
    changed |= read_encoder_values(matrix, 4);    
 | 
			
		||||
    changed |= read_encoder_switches(matrix, 4);
 | 
			
		||||
 | 
			
		||||
    matrix_scan_quantum();
 | 
			
		||||
    return (uint8_t)changed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Customisations for the encoders
 | 
			
		||||
void matrix_init_kb(void){
 | 
			
		||||
void matrix_init_kb(void) {
 | 
			
		||||
    setPinInput(SWITCH_1);
 | 
			
		||||
    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_values(matrix_row_t current_matrix[], uint8_t current_row) {
 | 
			
		||||
static bool read_encoder_switches(matrix_row_t current_matrix[], uint8_t current_row) {
 | 
			
		||||
    // Store last value of row prior to reading
 | 
			
		||||
    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
 | 
			
		||||
    static uint8_t btn_1_array;
 | 
			
		||||
    static uint8_t btn_2_array;
 | 
			
		||||
    bool    btn_1_rising = 0;
 | 
			
		||||
    bool    btn_2_rising = 0;
 | 
			
		||||
    bool           btn_1_pressed = 0;
 | 
			
		||||
    bool           btn_2_pressed = 0;
 | 
			
		||||
    btn_1_array <<= 1;
 | 
			
		||||
    btn_2_array <<= 1;
 | 
			
		||||
    btn_1_array |= readPin(SWITCH_1);
 | 
			
		||||
    btn_2_array |= readPin(SWITCH_2);
 | 
			
		||||
    (btn_1_array == 0b01111111) ? (btn_1_rising = 1) : (btn_1_rising = 0);
 | 
			
		||||
    (btn_2_array == 0b01111111) ? (btn_2_rising = 1) : (btn_2_rising = 0);
 | 
			
		||||
    (btn_1_array == 0b11111111) ? (btn_1_pressed = 1) : (btn_1_pressed = 0);
 | 
			
		||||
    (btn_2_array == 0b11111111) ? (btn_2_pressed = 1) : (btn_2_pressed = 0);
 | 
			
		||||
 | 
			
		||||
    // 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_2_rising ? (1 << 1) : 0;
 | 
			
		||||
    current_matrix[current_row] |= btn_1_pressed ? (1 << 0) : 0;
 | 
			
		||||
    current_matrix[current_row] |= btn_2_pressed ? (1 << 1) : 0;
 | 
			
		||||
 | 
			
		||||
    return (last_row_value != current_matrix[current_row]);
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user