aboutsummaryrefslogtreecommitdiff
path: root/users/mtdjr
diff options
context:
space:
mode:
authormtdjr <mtdjr@users.noreply.github.com>2018-05-31 11:30:05 -0400
committerDrashna Jaelre <drashna@live.com>2018-05-31 08:30:05 -0700
commitee9a7aba396160929604aca54a23ad5534d59940 (patch)
treef4fbbde03ed548a68fd56bec5c6baf8cf217f180 /users/mtdjr
parent21ad968ac14b177a7c97d34106c4d6201912627f (diff)
downloadqmk_firmware-ee9a7aba396160929604aca54a23ad5534d59940.tar.gz
qmk_firmware-ee9a7aba396160929604aca54a23ad5534d59940.zip
add not-so-minidox handwire keyboard (#3061)
* add not-so-minidox handwire keyboard * corrected keymap * multiple adjustments to not_so_minidox keyboard * remove I2C master left define * update default layer set function * move solenoid code into userspace * minor adjustments to config.h * update keymaps to utilize userspace * move features and config to userspace, correct build issue * correct solenoid pin * adjust defaults for solenoid pin and enable * default solenoid to on for not_so_minidox * disable RGBLIGHT_SLEEP for xd75 * tweaking solenoid enable/disable in userspace and keymaps
Diffstat (limited to 'users/mtdjr')
-rw-r--r--users/mtdjr/config.h7
-rw-r--r--users/mtdjr/mtdjr.c137
-rw-r--r--users/mtdjr/mtdjr.h76
-rw-r--r--users/mtdjr/readme.md14
-rw-r--r--users/mtdjr/rules.mk2
-rw-r--r--users/mtdjr/solenoid.h103
6 files changed, 339 insertions, 0 deletions
diff --git a/users/mtdjr/config.h b/users/mtdjr/config.h
new file mode 100644
index 000000000..9769ebc18
--- /dev/null
+++ b/users/mtdjr/config.h
@@ -0,0 +1,7 @@
1#ifndef USERSPACE_CONFIG_H
2#define USERSPACE_CONFIG_H
3
4// Put normal config.h settings here:
5#define TAPPING_TERM 250
6
7#endif // !USERSPACE_CONFIG_H
diff --git a/users/mtdjr/mtdjr.c b/users/mtdjr/mtdjr.c
new file mode 100644
index 000000000..da4f57047
--- /dev/null
+++ b/users/mtdjr/mtdjr.c
@@ -0,0 +1,137 @@
1#include "mtdjr.h"
2
3#ifdef SOLENOID_ENABLE
4 #include "solenoid.h"
5
6 void solenoid_buzz_on(void);
7 void solenoid_buzz_off(void);
8 void solenoid_dwell_minus(void);
9 void solenoid_dwell_plus(void);
10 void solenoid_toggle(void);
11 void solenoid_stop(void);
12 void solenoid_fire(void);
13 void solenoid_check(void);
14 void solenoid_setup(void);
15 void matrix_init_user(void);
16 void matrix_scan_user(void);
17#endif
18
19bool process_record_user(uint16_t keycode, keyrecord_t *record) {
20 #ifdef SOLENOID_ENABLE
21 if (record->event.pressed) {
22 solenoid_fire();
23 }
24 #endif
25 switch (keycode) {
26 case QWERTY:
27 if (record->event.pressed) {
28 set_single_persistent_default_layer(_QWERTY);
29 }
30 return false;
31 break;
32 case LOWER:
33 if (record->event.pressed) {
34 layer_on(_LOWER);
35 update_tri_layer(_LOWER, _RAISE, _ADJUST);
36 } else {
37 layer_off(_LOWER);
38 update_tri_layer(_LOWER, _RAISE, _ADJUST);
39 }
40 return false;
41 break;
42 case RAISE:
43 if (record->event.pressed) {
44 layer_on(_RAISE);
45 update_tri_layer(_LOWER, _RAISE, _ADJUST);
46 } else {
47 layer_off(_RAISE);
48 update_tri_layer(_LOWER, _RAISE, _ADJUST);
49 }
50 return false;
51 break;
52 case ADJUST:
53 if (record->event.pressed) {
54 layer_on(_ADJUST);
55 update_tri_layer(_LOWER, _RAISE, _ADJUST);
56 } else {
57 layer_off(_ADJUST);
58 update_tri_layer(_LOWER, _RAISE, _ADJUST);
59 }
60 return false;
61 break;
62 case SOLENOID_TOG:
63 #ifdef SOLENOID_ENABLE
64 if (record->event.pressed) {
65 solenoid_toggle();
66 }
67 #endif
68 break;
69 case SOLENOID_DWELL_MINUS:
70 #ifdef SOLENOID_ENABLE
71 if (record->event.pressed) {
72 solenoid_dwell_minus();
73 }
74 #endif
75 break;
76 case SOLENOID_DWELL_PLUS:
77 #ifdef SOLENOID_ENABLE
78 if (record->event.pressed) {
79 solenoid_dwell_plus();
80 }
81 #endif
82 break;
83 case SOLENOID_BUZZ_ON:
84 #ifdef SOLENOID_ENABLE
85 if (record->event.pressed) {
86 solenoid_buzz_on();
87 }
88 #endif
89 break;
90 case SOLENOID_BUZZ_OFF:
91 #ifdef SOLENOID_ENABLE
92 if (record->event.pressed) {
93 solenoid_buzz_off();
94 }
95 #endif
96 break;
97 }
98 return true;
99};
100
101
102//Tap Dance Definitions
103qk_tap_dance_action_t tap_dance_actions[] = {
104 [TD_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, KC_ESC),
105 [TD_ALTLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_RALT, LGUI(KC_L)),
106 [TD_ENDLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_END, LGUI(KC_L)),
107 //[TD_PRNT] = ACTION_TAP_DANCE_DOUBLE(PRINT, PRINT_SEL)
108};
109
110const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
111 if (record->event.pressed) {
112 switch(id) {
113 case 0:
114 SEND_STRING("sudo su -\n");
115 return false; break;
116 case 1:
117 SEND_STRING("puppet apply /etc/puppetlabs/code/environments/production/manifests/site.pp\n");
118 return false; break;
119 case 2:
120 SEND_STRING("ps -ef | grep ");
121 return false; break;
122 case 3: // control + insert
123 return MACRO(D(LCTL), T(INS), U(LCTL), END);
124 break;
125 case 4: // shift + insert
126 return MACRO(D(LSFT), T(INS), U(LSFT), END);
127 break;
128 case 5: // control + alt + delete
129 return MACRO(D(LCTL), D(RALT), T(DEL), U(LCTL), U(LALT), END);
130 break;
131 case 6: // lgui + L
132 return MACRO(D(LGUI), T(L), U(LGUI), END);
133 break;
134 }
135 }
136 return MACRO_NONE;
137};
diff --git a/users/mtdjr/mtdjr.h b/users/mtdjr/mtdjr.h
new file mode 100644
index 000000000..012a35610
--- /dev/null
+++ b/users/mtdjr/mtdjr.h
@@ -0,0 +1,76 @@
1#ifndef USERSPACE
2#define USERSPACE
3
4#include "quantum.h"
5
6#define _QWERTY 0
7#define _LOWER 1
8#define _RAISE 2
9#define _SUPER 3
10#define _ADJUST 16
11
12enum user_layers {
13 QWERTY = SAFE_RANGE,
14 LOWER,
15 RAISE,
16 SUPER,
17 ADJUST,
18};
19
20enum user_tapdance {
21 TD_ENDLOCK,
22 TD_ALTLOCK,
23 TD_ESC,
24};
25
26enum user_solenoid {
27 SOLENOID_TOG,
28 SOLENOID_DWELL_MINUS,
29 SOLENOID_DWELL_PLUS,
30 SOLENOID_BUZZ_ON,
31 SOLENOID_BUZZ_OFF,
32};
33
34#define KC_STOG SOLENOID_TOG
35#define KC_SDM SOLENOID_DWELL_MINUS
36#define KC_SDP SOLENOID_DWELL_PLUS
37#define KC_SBON SOLENOID_BUZZ_ON
38#define KC_SBOF SOLENOID_BUZZ_OFF
39
40#define KC_ KC_TRNS
41#define _______ KC_TRNS
42#define XXXXXXX KC_NO
43#define KC_xxxx KC_NO
44
45#define KC_LOWR LOWER
46#define KC_RASE RAISE
47#define KC_SUPR SUPER
48#define KC_RST RESET
49
50// TapDance Keycodes
51#define KC_EXC TD_ESC
52
53// Macro Declarations
54#define KC_ROOT M(0)
55#define KC_PPLY M(1)
56#define KC_PSEF M(2)
57#define KC_XCPY M(3)
58#define KC_XINS M(4)
59#define KC_CAD M(5)
60#define UM_LOCK M(6)
61
62// RGB and Backlighting
63#define KC_RGB RGB_TOG
64#define KC_RHUI RGB_HUI
65#define KC_RHUD RGB_HUD
66#define KC_RSAI RGB_SAI
67#define KC_RSAD RGB_SAD
68#define KC_RVAI RGB_VAI
69#define KC_RVAD RGB_VAD
70#define KC_BLT BL_TOGG
71#define KC_BLS BL_STEP
72#define KC_BLI BL_INC
73#define KC_BLD BL_DEC
74
75
76#endif
diff --git a/users/mtdjr/readme.md b/users/mtdjr/readme.md
new file mode 100644
index 000000000..e795ee23a
--- /dev/null
+++ b/users/mtdjr/readme.md
@@ -0,0 +1,14 @@
1Copyright 2018 @mtdjr
2
3This program is free software: you can redistribute it and/or modify
4it under the terms of the GNU General Public License as published by
5the Free Software Foundation, either version 2 of the License, or
6(at your option) any later version.
7
8This program is distributed in the hope that it will be useful,
9but WITHOUT ANY WARRANTY; without even the implied warranty of
10MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11GNU General Public License for more details.
12
13You should have received a copy of the GNU General Public License
14along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/users/mtdjr/rules.mk b/users/mtdjr/rules.mk
new file mode 100644
index 000000000..6eec4b5b8
--- /dev/null
+++ b/users/mtdjr/rules.mk
@@ -0,0 +1,2 @@
1SRC += mtdjr.c
2TAP_DANCE_ENABLE = yes
diff --git a/users/mtdjr/solenoid.h b/users/mtdjr/solenoid.h
new file mode 100644
index 000000000..38066f4c3
--- /dev/null
+++ b/users/mtdjr/solenoid.h
@@ -0,0 +1,103 @@
1#ifndef SOLENOID_H
2#define SOLENOID_H
3
4#include <timer.h>
5#include "pincontrol.h"
6
7#define SOLENOID_DEFAULT_DWELL 12
8#define SOLENOID_MAX_DWELL 100
9#define SOLENOID_MIN_DWELL 4
10#ifndef SOLENOID_ACTIVE
11 #define SOLENOID_ACTIVE false
12#endif
13//#define SOLENOID_PIN F6
14
15bool solenoid_enabled = SOLENOID_ACTIVE;
16bool solenoid_on = false;
17bool solenoid_buzz = false;
18bool solenoid_buzzing = false;
19uint16_t solenoid_start = 0;
20uint8_t solenoid_dwell = SOLENOID_DEFAULT_DWELL;
21
22
23void solenoid_buzz_on(void) {
24 solenoid_buzz = true;
25}
26
27void solenoid_buzz_off(void) {
28 solenoid_buzz = false;
29}
30
31void solenoid_dwell_minus(void) {
32 if (solenoid_dwell > 0) solenoid_dwell--;
33}
34
35void solenoid_dwell_plus(void) {
36 if (solenoid_dwell < SOLENOID_MAX_DWELL) solenoid_dwell++;
37}
38
39void solenoid_toggle(void) {
40 solenoid_enabled = !solenoid_enabled;
41}
42
43void solenoid_stop(void) {
44 digitalWrite(SOLENOID_PIN, PinLevelLow);
45 solenoid_on = false;
46 solenoid_buzzing = false;
47}
48
49void solenoid_fire(void) {
50 if (!solenoid_enabled) return;
51
52 if (!solenoid_buzz && solenoid_on) return;
53 if (solenoid_buzz && solenoid_buzzing) return;
54
55 solenoid_on = true;
56 solenoid_buzzing = true;
57 solenoid_start = timer_read();
58 digitalWrite(SOLENOID_PIN, PinLevelHigh);
59}
60
61void solenoid_check(void) {
62 uint16_t elapsed = 0;
63
64 if (!solenoid_on) return;
65
66 elapsed = timer_elapsed(solenoid_start);
67
68 //Check if it's time to finish this solenoid click cycle
69 if (elapsed > solenoid_dwell) {
70 solenoid_stop();
71 return;
72 }
73
74 //Check whether to buzz the solenoid on and off
75 if (solenoid_buzz) {
76 if (elapsed / SOLENOID_MIN_DWELL % 2 == 0){
77 if (!solenoid_buzzing) {
78 solenoid_buzzing = true;
79 digitalWrite(SOLENOID_PIN, PinLevelHigh);
80 }
81 }
82 else {
83 if (solenoid_buzzing) {
84 solenoid_buzzing = false;
85 digitalWrite(SOLENOID_PIN, PinLevelLow);
86 }
87 }
88 }
89}
90
91void solenoid_setup(void) {
92 pinMode(SOLENOID_PIN, PinDirectionOutput);
93}
94
95void matrix_init_user(void) {
96 solenoid_setup();
97}
98
99void matrix_scan_user(void) {
100 solenoid_check();
101}
102
103#endif