mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 21:32:31 +01:00 
			
		
		
		
	[Keyboard] Add deskpad (#15602)
Co-authored-by: Drashna Jaelre <drashna@live.com> Co-authored-by: Ryan <fauxpark@gmail.com>
This commit is contained in:
		
							parent
							
								
									0d67eec5e2
								
							
						
					
					
						commit
						f52f3f1077
					
				
							
								
								
									
										62
									
								
								keyboards/h0oni/deskpad/config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								keyboards/h0oni/deskpad/config.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,62 @@ | ||||
| /* Copyright 2021 Hydrogen BD <support@hgenbd.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 "config_common.h" | ||||
| 
 | ||||
| /* USB Device descriptor parameter */ | ||||
| #define VENDOR_ID       0x4D53  | ||||
| #define PRODUCT_ID      0x4450 //hD
 | ||||
| #define DEVICE_VER      0x0001 | ||||
| #define MANUFACTURER    Hydrogen | ||||
| #define PRODUCT         Deskpad | ||||
| 
 | ||||
| /* key matrix size */ | ||||
| #define MATRIX_ROWS 2 | ||||
| #define MATRIX_COLS 3 | ||||
| 
 | ||||
| /*
 | ||||
|  * 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) | ||||
|  * | ||||
| */ | ||||
| #define MATRIX_ROW_PINS { D7, C6 } | ||||
| #define MATRIX_COL_PINS { D0, D4, D1} | ||||
| #define UNUSED_PINS | ||||
| 
 | ||||
| /* COL2ROW or ROW2COL */ | ||||
| #define DIODE_DIRECTION COL2ROW | ||||
| 
 | ||||
| /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ | ||||
| #define DEBOUNCE 3 | ||||
| 
 | ||||
| /* Defining encoder pads */ | ||||
| #define ENCODERS_PAD_A { D2 } | ||||
| #define ENCODERS_PAD_B { D3 } | ||||
| 
 | ||||
| /* 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 | ||||
| 
 | ||||
| /* Defining tapping term */ | ||||
| #define TAPPING_TERM 250 | ||||
							
								
								
									
										53
									
								
								keyboards/h0oni/deskpad/deskpad.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								keyboards/h0oni/deskpad/deskpad.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | ||||
| /* Copyright 2021 Hydrogen BD <support@hgenbd.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 "deskpad.h" | ||||
| 
 | ||||
| #ifdef ENCODER_ENABLE | ||||
| bool encoder_update_kb(uint8_t index, bool clockwise) { | ||||
|     if (!encoder_update_user(index, clockwise)) { return false; } | ||||
|     const layer_state_t curr_layer = get_highest_layer(layer_state); | ||||
|     if(curr_layer == 0) { | ||||
|         if (clockwise) { | ||||
|             tap_code(KC_VOLU); | ||||
|         } else { | ||||
|             tap_code(KC_VOLD); | ||||
|         } | ||||
|     } | ||||
|     else if(curr_layer == 1) { | ||||
|         if (clockwise) { | ||||
|             tap_code(KC_WH_D); | ||||
|         } else { | ||||
|             tap_code(KC_WH_U); | ||||
|         } | ||||
|     } | ||||
|     else if(curr_layer == 2) { | ||||
|         if (clockwise) { | ||||
|             tap_code16(C(KC_WH_U)); | ||||
|         } else { | ||||
|             tap_code16(C(KC_WH_D)); | ||||
|         } | ||||
|     } | ||||
|     else { | ||||
|         if (clockwise) { | ||||
|             tap_code(KC_BRIU); | ||||
|         } else { | ||||
|             tap_code(KC_BRID); | ||||
|         } | ||||
|     } | ||||
|     return false; | ||||
| } | ||||
| #endif | ||||
							
								
								
									
										28
									
								
								keyboards/h0oni/deskpad/deskpad.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								keyboards/h0oni/deskpad/deskpad.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | ||||
| /* Copyright 2021 Hydrogen BD <support@hgenbd.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 "quantum.h" | ||||
| 
 | ||||
| #define LAYOUT_all( \ | ||||
|       K00, K01, K02, K10, K11, K12\ | ||||
| ) { \ | ||||
|     { K00,  K01,  K02 },\ | ||||
|     { K10,  K11,  K12 } \ | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										15
									
								
								keyboards/h0oni/deskpad/info.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								keyboards/h0oni/deskpad/info.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| { | ||||
|     "keyboard_name": "Deskpad",  | ||||
|     "url": "",  | ||||
|     "maintainer": "Hydrogen BD",  | ||||
|     "layouts": { | ||||
|         "LAYOUT_all": { | ||||
|             "layout": [{"label":"k1", "x":0, "y":0},  | ||||
|                 {"label":"k2", "x":1, "y":0},  | ||||
|                 {"label":"k3", "x":2, "y":0},  | ||||
|                 {"label":"k4", "x":3, "y":0},  | ||||
|                 {"label":"k5", "x":4, "y":0},  | ||||
|                 {"label":"k6", "x":6, "y":0}] | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										189
									
								
								keyboards/h0oni/deskpad/keymaps/default/keymap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										189
									
								
								keyboards/h0oni/deskpad/keymaps/default/keymap.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,189 @@ | ||||
| /* Copyright 2021 Hydrogen BD <support@hgenbd.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 QMK_KEYBOARD_H | ||||
| 
 | ||||
| typedef enum { | ||||
|     TD_NONE, | ||||
|     TD_UNKNOWN, | ||||
|     TD_SINGLE_TAP, | ||||
|     TD_SINGLE_HOLD, | ||||
|     TD_DOUBLE_TAP, | ||||
|     TD_DOUBLE_HOLD, | ||||
|     TD_DOUBLE_SINGLE_TAP, // Send two single taps
 | ||||
| } td_state_t; | ||||
| 
 | ||||
| typedef struct { | ||||
|     bool is_press_action; | ||||
|     td_state_t state; | ||||
| } td_tap_t; | ||||
| 
 | ||||
| enum custom_keycodes { | ||||
|     TD_CUT_REDO, | ||||
|     TD_PLAY_PAUSE_MUTE, | ||||
|     TD_MNXT_RIGHT, | ||||
|     TD_MPRV_LEFT, | ||||
|     TD_SEARCH_REFRESH, | ||||
|     QUAD_LAYER_SWITCH, | ||||
|     QUAD_CVXA, | ||||
|     YOUTUBE = SAFE_RANGE, | ||||
|     FACEBOOK, | ||||
|     DISCORD, | ||||
|     VALORANT, | ||||
|     VSCODE, | ||||
| }; | ||||
| 
 | ||||
| td_state_t cur_dance(qk_tap_dance_state_t *state); | ||||
| 
 | ||||
| /* Quad layer switching */ | ||||
| void layer_finished(qk_tap_dance_state_t *state, void *user_data); | ||||
| void layer_reset(qk_tap_dance_state_t *state, void *user_data); | ||||
| 
 | ||||
| /* Copy, paste, select all, cut */ | ||||
| void cvxa_finished(qk_tap_dance_state_t *state, void *user_data); | ||||
| void cvxa_reset(qk_tap_dance_state_t *state, void *user_data); | ||||
| 
 | ||||
| static td_tap_t layerTap_state = { | ||||
|     .is_press_action = true, | ||||
|     .state = TD_NONE | ||||
| }; | ||||
| 
 | ||||
| static td_tap_t cvxa_state = { | ||||
|     .is_press_action = true, | ||||
|     .state = TD_NONE | ||||
| }; | ||||
| 
 | ||||
| // Determine the current tap dance state
 | ||||
| td_state_t cur_dance(qk_tap_dance_state_t *state) { | ||||
|     if (state->count == 1) { | ||||
|         if (state->interrupted || !state->pressed) return TD_SINGLE_TAP; | ||||
|         // Key has not been interrupted, but the key is still held. Means you want to send a 'HOLD'.
 | ||||
|         else return TD_SINGLE_HOLD; | ||||
|     } else if (state->count == 2) { | ||||
|         if (state->interrupted) return TD_DOUBLE_SINGLE_TAP; | ||||
|         else if (state->pressed) return TD_DOUBLE_HOLD; | ||||
|         else return TD_DOUBLE_TAP; | ||||
|     } else return TD_UNKNOWN; | ||||
| } | ||||
| 
 | ||||
| void layer_finished(qk_tap_dance_state_t *state, void *user_data) { | ||||
|     layerTap_state.state = cur_dance(state); | ||||
|     layer_off(get_highest_layer(layer_state)); | ||||
|     switch (layerTap_state.state) { | ||||
|         case TD_SINGLE_TAP: layer_on(0); break; | ||||
|         case TD_SINGLE_HOLD: layer_on(1); break; | ||||
|         case TD_DOUBLE_TAP: layer_on(2); break; | ||||
|         case TD_DOUBLE_HOLD: layer_on(3); break; | ||||
|         default: layer_on(0); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void layer_reset(qk_tap_dance_state_t *state, void *user_data) { | ||||
|     layerTap_state.state = TD_NONE; | ||||
| } | ||||
| 
 | ||||
| void cvxa_finished(qk_tap_dance_state_t *state, void *user_data) { | ||||
|     cvxa_state.state = cur_dance(state); | ||||
|     register_mods(MOD_BIT(KC_LCTRL)); | ||||
|     switch (cvxa_state.state) { | ||||
|         case TD_SINGLE_TAP: tap_code(KC_V); break; | ||||
|         case TD_SINGLE_HOLD: tap_code(KC_A); break; | ||||
|         case TD_DOUBLE_TAP: tap_code(KC_C); break; | ||||
|         case TD_DOUBLE_HOLD: tap_code(KC_X); break; | ||||
|         default: tap_code(KC_V); | ||||
|     } | ||||
|     unregister_mods(MOD_BIT(KC_LCTRL)); | ||||
| } | ||||
| 
 | ||||
| void cvxa_reset(qk_tap_dance_state_t *state, void *user_data) { | ||||
|     cvxa_state.state = TD_NONE; | ||||
| } | ||||
| 
 | ||||
| // Tap Dance definitions
 | ||||
| qk_tap_dance_action_t tap_dance_actions[] = { | ||||
|     [TD_CUT_REDO] = ACTION_TAP_DANCE_DOUBLE(C(KC_Z), S(C(KC_Z))), | ||||
|     [TD_PLAY_PAUSE_MUTE] = ACTION_TAP_DANCE_DOUBLE(KC_MPLY, KC_MUTE), | ||||
|     [TD_MNXT_RIGHT] = ACTION_TAP_DANCE_DOUBLE(KC_MNXT, KC_RIGHT), | ||||
|     [TD_MPRV_LEFT] = ACTION_TAP_DANCE_DOUBLE(KC_MPRV, KC_LEFT), | ||||
|     [TD_SEARCH_REFRESH] = ACTION_TAP_DANCE_DOUBLE(KC_WREF, KC_WSCH), | ||||
|     [QUAD_LAYER_SWITCH] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, layer_finished, layer_reset), | ||||
|     [QUAD_CVXA] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, cvxa_finished, cvxa_reset) | ||||
| }; | ||||
| 
 | ||||
| bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||||
|     switch(keycode) { | ||||
|         case YOUTUBE: | ||||
|             if (record->event.pressed) { | ||||
|                 tap_code16(C(KC_L)); | ||||
|                 SEND_STRING("https://www.youtube.com/"); | ||||
|             } else { | ||||
|                 tap_code(KC_ENT); | ||||
|             } | ||||
|             break; | ||||
|         case FACEBOOK: | ||||
|             if (record->event.pressed) { | ||||
|                 tap_code16(C(KC_L)); | ||||
|                 SEND_STRING("https://www.facebook.com/"); | ||||
|             } else { | ||||
|                 tap_code(KC_ENT); | ||||
|             } | ||||
|             break; | ||||
|         case VALORANT: | ||||
|             if (record->event.pressed) { | ||||
|                 tap_code16(G(KC_S)); | ||||
|                 SEND_STRING("valorant"); | ||||
|             } else { | ||||
|                 tap_code(KC_ENT); | ||||
|             } | ||||
|             break; | ||||
|         case DISCORD: | ||||
|             if (record->event.pressed) { | ||||
|                 tap_code16(G(KC_S)); | ||||
|                 SEND_STRING("discord"); | ||||
|             } else { | ||||
|                 tap_code(KC_ENT); | ||||
|             } | ||||
|             break; | ||||
|         case VSCODE: | ||||
|             if (record->event.pressed) { | ||||
|                 tap_code16(G(KC_S)); | ||||
|                 SEND_STRING("vscode"); | ||||
|             } else { | ||||
|                 tap_code(KC_ENT); | ||||
|             } | ||||
|             break; | ||||
|     } | ||||
|     return true; | ||||
| };  | ||||
| 
 | ||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
| 
 | ||||
|   [0] = LAYOUT_all( | ||||
|       TD(TD_CUT_REDO), TD(TD_MPRV_LEFT), TD(TD_PLAY_PAUSE_MUTE), TD(TD_MNXT_RIGHT), TD(QUAD_CVXA), TD(QUAD_LAYER_SWITCH) | ||||
|       ), | ||||
| 
 | ||||
|   [1] = LAYOUT_all( | ||||
|       YOUTUBE, KC_WBAK, TD(TD_SEARCH_REFRESH), KC_WFWD, FACEBOOK, TD(QUAD_LAYER_SWITCH) | ||||
|       ), | ||||
| 
 | ||||
|   [2] = LAYOUT_all( | ||||
|       A(KC_F4), SGUI(KC_S), KC_MYCM, LCA(KC_DEL), KC_CALC, TD(QUAD_LAYER_SWITCH) | ||||
|       ), | ||||
|    | ||||
|   [3] = LAYOUT_all( | ||||
|       C(KC_SLSH), VALORANT, VSCODE, DISCORD, LSA(KC_A), TD(QUAD_LAYER_SWITCH) | ||||
|       ), | ||||
| }; | ||||
							
								
								
									
										1
									
								
								keyboards/h0oni/deskpad/keymaps/default/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								keyboards/h0oni/deskpad/keymaps/default/rules.mk
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| TAP_DANCE_ENABLE = yes | ||||
							
								
								
									
										189
									
								
								keyboards/h0oni/deskpad/keymaps/via/keymap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										189
									
								
								keyboards/h0oni/deskpad/keymaps/via/keymap.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,189 @@ | ||||
| /* Copyright 2021 Hydrogen BD <support@hgenbd.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 QMK_KEYBOARD_H | ||||
| 
 | ||||
| typedef enum { | ||||
|     TD_NONE, | ||||
|     TD_UNKNOWN, | ||||
|     TD_SINGLE_TAP, | ||||
|     TD_SINGLE_HOLD, | ||||
|     TD_DOUBLE_TAP, | ||||
|     TD_DOUBLE_HOLD, | ||||
|     TD_DOUBLE_SINGLE_TAP, // Send two single taps
 | ||||
| } td_state_t; | ||||
| 
 | ||||
| typedef struct { | ||||
|     bool is_press_action; | ||||
|     td_state_t state; | ||||
| } td_tap_t; | ||||
| 
 | ||||
| enum custom_keycodes { | ||||
|     TD_CUT_REDO, | ||||
|     TD_PLAY_PAUSE_MUTE, | ||||
|     TD_MNXT_RIGHT, | ||||
|     TD_MPRV_LEFT, | ||||
|     TD_SEARCH_REFRESH, | ||||
|     QUAD_LAYER_SWITCH, | ||||
|     QUAD_CVXA, | ||||
|     YOUTUBE = SAFE_RANGE, | ||||
|     FACEBOOK, | ||||
|     DISCORD, | ||||
|     VALORANT, | ||||
|     VSCODE, | ||||
| }; | ||||
| 
 | ||||
| td_state_t cur_dance(qk_tap_dance_state_t *state); | ||||
| 
 | ||||
| /* Quad layer switching */ | ||||
| void layer_finished(qk_tap_dance_state_t *state, void *user_data); | ||||
| void layer_reset(qk_tap_dance_state_t *state, void *user_data); | ||||
| 
 | ||||
| /* Copy, paste, select all, cut */ | ||||
| void cvxa_finished(qk_tap_dance_state_t *state, void *user_data); | ||||
| void cvxa_reset(qk_tap_dance_state_t *state, void *user_data); | ||||
| 
 | ||||
| static td_tap_t layerTap_state = { | ||||
|     .is_press_action = true, | ||||
|     .state = TD_NONE | ||||
| }; | ||||
| 
 | ||||
| static td_tap_t cvxa_state = { | ||||
|     .is_press_action = true, | ||||
|     .state = TD_NONE | ||||
| }; | ||||
| 
 | ||||
| // Determine the current tap dance state
 | ||||
| td_state_t cur_dance(qk_tap_dance_state_t *state) { | ||||
|     if (state->count == 1) { | ||||
|         if (state->interrupted || !state->pressed) return TD_SINGLE_TAP; | ||||
|         // Key has not been interrupted, but the key is still held. Means you want to send a 'HOLD'.
 | ||||
|         else return TD_SINGLE_HOLD; | ||||
|     } else if (state->count == 2) { | ||||
|         if (state->interrupted) return TD_DOUBLE_SINGLE_TAP; | ||||
|         else if (state->pressed) return TD_DOUBLE_HOLD; | ||||
|         else return TD_DOUBLE_TAP; | ||||
|     } else return TD_UNKNOWN; | ||||
| } | ||||
| 
 | ||||
| void layer_finished(qk_tap_dance_state_t *state, void *user_data) { | ||||
|     layerTap_state.state = cur_dance(state); | ||||
|     layer_off(get_highest_layer(layer_state)); | ||||
|     switch (layerTap_state.state) { | ||||
|         case TD_SINGLE_TAP: layer_on(0); break; | ||||
|         case TD_SINGLE_HOLD: layer_on(1); break; | ||||
|         case TD_DOUBLE_TAP: layer_on(2); break; | ||||
|         case TD_DOUBLE_HOLD: layer_on(3); break; | ||||
|         default: layer_on(0); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void layer_reset(qk_tap_dance_state_t *state, void *user_data) { | ||||
|     layerTap_state.state = TD_NONE; | ||||
| } | ||||
| 
 | ||||
| void cvxa_finished(qk_tap_dance_state_t *state, void *user_data) { | ||||
|     cvxa_state.state = cur_dance(state); | ||||
|     register_mods(MOD_BIT(KC_LCTRL)); | ||||
|     switch (cvxa_state.state) { | ||||
|         case TD_SINGLE_TAP: tap_code(KC_V); break; | ||||
|         case TD_SINGLE_HOLD: tap_code(KC_A); break; | ||||
|         case TD_DOUBLE_TAP: tap_code(KC_C); break; | ||||
|         case TD_DOUBLE_HOLD: tap_code(KC_X); break; | ||||
|         default: tap_code(KC_V); | ||||
|     } | ||||
|     unregister_mods(MOD_BIT(KC_LCTRL)); | ||||
| } | ||||
| 
 | ||||
| void cvxa_reset(qk_tap_dance_state_t *state, void *user_data) { | ||||
|     cvxa_state.state = TD_NONE; | ||||
| } | ||||
| 
 | ||||
| // Tap Dance definitions
 | ||||
| qk_tap_dance_action_t tap_dance_actions[] = { | ||||
|     [TD_CUT_REDO] = ACTION_TAP_DANCE_DOUBLE(C(KC_Z), S(C(KC_Z))), | ||||
|     [TD_PLAY_PAUSE_MUTE] = ACTION_TAP_DANCE_DOUBLE(KC_MPLY, KC_MUTE), | ||||
|     [TD_MNXT_RIGHT] = ACTION_TAP_DANCE_DOUBLE(KC_MNXT, KC_RIGHT), | ||||
|     [TD_MPRV_LEFT] = ACTION_TAP_DANCE_DOUBLE(KC_MPRV, KC_LEFT), | ||||
|     [TD_SEARCH_REFRESH] = ACTION_TAP_DANCE_DOUBLE(KC_WREF, KC_WSCH), | ||||
|     [QUAD_LAYER_SWITCH] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, layer_finished, layer_reset), | ||||
|     [QUAD_CVXA] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, cvxa_finished, cvxa_reset) | ||||
| }; | ||||
| 
 | ||||
| bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||||
|     switch(keycode) { | ||||
|         case YOUTUBE: | ||||
|             if (record->event.pressed) { | ||||
|                 tap_code16(C(KC_L)); | ||||
|                 SEND_STRING("https://www.youtube.com/"); | ||||
|             } else { | ||||
|                 tap_code(KC_ENT); | ||||
|             } | ||||
|             break; | ||||
|         case FACEBOOK: | ||||
|             if (record->event.pressed) { | ||||
|                 tap_code16(C(KC_L)); | ||||
|                 SEND_STRING("https://www.facebook.com/"); | ||||
|             } else { | ||||
|                 tap_code(KC_ENT); | ||||
|             } | ||||
|             break; | ||||
|         case VALORANT: | ||||
|             if (record->event.pressed) { | ||||
|                 tap_code16(G(KC_S)); | ||||
|                 SEND_STRING("valorant"); | ||||
|             } else { | ||||
|                 tap_code(KC_ENT); | ||||
|             } | ||||
|             break; | ||||
|         case DISCORD: | ||||
|             if (record->event.pressed) { | ||||
|                 tap_code16(G(KC_S)); | ||||
|                 SEND_STRING("discord"); | ||||
|             } else { | ||||
|                 tap_code(KC_ENT); | ||||
|             } | ||||
|             break; | ||||
|         case VSCODE: | ||||
|             if (record->event.pressed) { | ||||
|                 tap_code16(G(KC_S)); | ||||
|                 SEND_STRING("vscode"); | ||||
|             } else { | ||||
|                 tap_code(KC_ENT); | ||||
|             } | ||||
|             break; | ||||
|     } | ||||
|     return true; | ||||
| };  | ||||
| 
 | ||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
| 
 | ||||
|   [0] = LAYOUT_all( | ||||
|       TD(TD_CUT_REDO), TD(TD_MPRV_LEFT), TD(TD_PLAY_PAUSE_MUTE), TD(TD_MNXT_RIGHT), TD(QUAD_CVXA), TD(QUAD_LAYER_SWITCH) | ||||
|       ), | ||||
| 
 | ||||
|   [1] = LAYOUT_all( | ||||
|       YOUTUBE, KC_WBAK, TD(TD_SEARCH_REFRESH), KC_WFWD, FACEBOOK, TD(QUAD_LAYER_SWITCH) | ||||
|       ), | ||||
| 
 | ||||
|   [2] = LAYOUT_all( | ||||
|       A(KC_F4), SGUI(KC_S), KC_MYCM, LCA(KC_DEL), KC_CALC, TD(QUAD_LAYER_SWITCH) | ||||
|       ), | ||||
|    | ||||
|   [3] = LAYOUT_all( | ||||
|       C(KC_SLSH), VALORANT, VSCODE, DISCORD, LSA(KC_A), TD(QUAD_LAYER_SWITCH) | ||||
|       ), | ||||
| }; | ||||
							
								
								
									
										3
									
								
								keyboards/h0oni/deskpad/keymaps/via/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								keyboards/h0oni/deskpad/keymaps/via/rules.mk
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| VIA_ENABLE = yes | ||||
| LTO_ENABLE = yes | ||||
| TAP_DANCE_ENABLE = yes | ||||
							
								
								
									
										19
									
								
								keyboards/h0oni/deskpad/readme.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								keyboards/h0oni/deskpad/readme.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| # Hydrogen Deskpad | ||||
| 
 | ||||
| A 5 key macropad with an encoder, that can be mounted to a desk or below your monitor. | ||||
| 
 | ||||
| * Keyboard Maintainer: [Hydrogen BD](https://www.facebook.com/hgenbd/) | ||||
| * Hardware Supported: [5k Deskpad](https://fb.watch/akRLW7s-UT/) | ||||
| 
 | ||||
| Make example for this keyboard (after setting up your build environment): | ||||
| 
 | ||||
|     make h0oni/deskpad:default | ||||
| 
 | ||||
| ## Bootloader | ||||
| 
 | ||||
| Enter the bootloader in 2 ways: | ||||
| 
 | ||||
| * **Bootmagic reset**: Hold down the key at (0,0) in the matrix (the left most key) and plug in the keyboard. | ||||
| * **Physical reset button**: Press the button at the back of the PCB twice to enter into the bootloader mode.  | ||||
| 
 | ||||
| See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). | ||||
							
								
								
									
										19
									
								
								keyboards/h0oni/deskpad/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								keyboards/h0oni/deskpad/rules.mk
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| # MCU name
 | ||||
| MCU = atmega32u4 | ||||
| 
 | ||||
| # Bootloader selection
 | ||||
| BOOTLOADER = atmel-dfu | ||||
| 
 | ||||
| # Build Options
 | ||||
| #   change yes to no to disable
 | ||||
| #
 | ||||
| BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite | ||||
| MOUSEKEY_ENABLE = yes       # Mouse keys | ||||
| EXTRAKEY_ENABLE = yes       # Audio control and System control | ||||
| CONSOLE_ENABLE = no         # Console for debug | ||||
| COMMAND_ENABLE = no         # Commands for debug and configuration | ||||
| NKRO_ENABLE = yes           # Enable N-Key Rollover | ||||
| BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality | ||||
| RGBLIGHT_ENABLE = no       # Enable keyboard RGB underglow | ||||
| AUDIO_ENABLE = no           # Audio output | ||||
| ENCODER_ENABLE = yes | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Md. Mashur Shalehin Sakib
						Md. Mashur Shalehin Sakib