summaryrefslogtreecommitdiff
path: root/keyboards/ergodox_ez
diff options
context:
space:
mode:
authorFlorian Didron <fdidron@users.noreply.github.com>2019-12-06 09:25:39 +0900
committerGitHub <noreply@github.com>2019-12-06 09:25:39 +0900
commit13e1dd3d53a75840cce9c7fa52fd6d8d26a36a9a (patch)
treea51a6bd431d848279d8c03357ac05ecfb25312ce /keyboards/ergodox_ez
parent1d600f09a8b813f77d8b6ff4cc55484b7154ae25 (diff)
parent038cef3054a816021a797c217d147057c8edd926 (diff)
Merge pull request #222 from zsa/staging
Firmware 15
Diffstat (limited to 'keyboards/ergodox_ez')
-rw-r--r--keyboards/ergodox_ez/config.h5
-rw-r--r--keyboards/ergodox_ez/ergodox_ez.c65
-rw-r--r--keyboards/ergodox_ez/keymaps/webusb/default.png.md1
-rw-r--r--keyboards/ergodox_ez/keymaps/webusb/default_highres.png.md1
-rw-r--r--keyboards/ergodox_ez/keymaps/webusb/keymap.c147
-rw-r--r--keyboards/ergodox_ez/keymaps/webusb/readme.md15
-rw-r--r--keyboards/ergodox_ez/keymaps/webusb/rules.mk1
-rw-r--r--keyboards/ergodox_ez/matrix.c39
8 files changed, 237 insertions, 37 deletions
diff --git a/keyboards/ergodox_ez/config.h b/keyboards/ergodox_ez/config.h
index 2ff452c400..0c74bc4e67 100644
--- a/keyboards/ergodox_ez/config.h
+++ b/keyboards/ergodox_ez/config.h
@@ -25,9 +25,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x1307
#define DEVICE_VER 0x0001
-#define MANUFACTURER ErgoDox EZ
-#define PRODUCT ErgoDox EZ
+#define MANUFACTURER ZSA
+#define PRODUCT Ergodox EZ
#define DESCRIPTION QMK keyboard firmware for Ergodox EZ
+#define WEBUSB_LANDING_PAGE_URL u8"configure.ergodox-ez.com"
/* key matrix size */
#define MATRIX_ROWS 14
diff --git a/keyboards/ergodox_ez/ergodox_ez.c b/keyboards/ergodox_ez/ergodox_ez.c
index 3fd4e30833..6f56fd8e12 100644
--- a/keyboards/ergodox_ez/ergodox_ez.c
+++ b/keyboards/ergodox_ez/ergodox_ez.c
@@ -1,5 +1,9 @@
#include QMK_KEYBOARD_H
+#ifdef WEBUSB_ENABLE
+#include "webusb.h"
+#endif
+
extern inline void ergodox_board_led_on(void);
extern inline void ergodox_right_led_1_on(void);
extern inline void ergodox_right_led_2_on(void);
@@ -336,6 +340,17 @@ void keyboard_post_init_kb(void) {
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+#ifdef WEBUSB_ENABLE
+ if(webusb_state.paired == true) {
+ uint8_t event[5];
+ event[0] = WEBUSB_STATUS_OK;
+ event[1] = record->event.pressed ? WEBUSB_EVT_KEYDOWN : WEBUSB_EVT_KEYUP;
+ event[2] = record->event.key.col;
+ event[3] = record->event.key.row;
+ event[4] = WEBUSB_STOP_BIT;
+ webusb_send(event, sizeof(event));
+ }
+#endif
switch (keycode) {
case LED_LEVEL:
if (record->event.pressed) {
@@ -387,3 +402,53 @@ void eeconfig_init_kb(void) { // EEPROM is getting reset!
eeconfig_update_kb(keyboard_config.raw);
eeconfig_init_user();
}
+
+#ifdef WEBUSB_ENABLE
+static uint16_t loops = 0;
+static bool is_on = false;
+
+void matrix_scan_kb(void) {
+ if(webusb_state.pairing == true) {
+ if(loops == 0) {
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ }
+ if(loops % WEBUSB_BLINK_STEPS == 0) {
+ if(is_on) {
+ ergodox_right_led_2_off();
+ }
+ else {
+ ergodox_right_led_2_on();
+ }
+ is_on ^= 1;
+ }
+ if(loops > WEBUSB_BLINK_END) {
+ webusb_state.pairing = false;
+ layer_state_set_user(layer_state);
+ loops = 0;
+ }
+ loops++;
+ }
+ else if(loops > 0) {
+ loops = 0;
+ layer_state_set_user(layer_state);
+ }
+ matrix_scan_user();
+}
+
+uint32_t layer_state_set_kb(uint32_t state) {
+ state = layer_state_set_user(state);
+ uint8_t layer = biton32(state);
+ if(webusb_state.paired == true) {
+ uint8_t event[4];
+ event[0] = WEBUSB_STATUS_OK;
+ event[1] = WEBUSB_EVT_LAYER;
+ event[2] = layer;
+ event[3] = WEBUSB_STOP_BIT;
+ webusb_send(event, sizeof(event));
+ }
+ return state;
+}
+#endif
+
diff --git a/keyboards/ergodox_ez/keymaps/webusb/default.png.md b/keyboards/ergodox_ez/keymaps/webusb/default.png.md
new file mode 100644
index 0000000000..744e7d172a
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/webusb/default.png.md
@@ -0,0 +1 @@
+https://i.imgur.com/fKX0Zbs.png
diff --git a/keyboards/ergodox_ez/keymaps/webusb/default_highres.png.md b/keyboards/ergodox_ez/keymaps/webusb/default_highres.png.md
new file mode 100644
index 0000000000..074e0634d2
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/webusb/default_highres.png.md
@@ -0,0 +1 @@
+https://i.imgur.com/giAc3M9.jpg
diff --git a/keyboards/ergodox_ez/keymaps/webusb/keymap.c b/keyboards/ergodox_ez/keymaps/webusb/keymap.c
new file mode 100644
index 0000000000..58d281de6e
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/webusb/keymap.c
@@ -0,0 +1,147 @@
+#include QMK_KEYBOARD_H
+#include "version.h"
+#include "keymap_german.h"
+#include "keymap_nordic.h"
+#include "keymap_french.h"
+#include "keymap_spanish.h"
+#include "keymap_hungarian.h"
+#include "keymap_swedish.h"
+#include "keymap_br_abnt2.h"
+#include "keymap_canadian_multilingual.h"
+#include "keymap_german_ch.h"
+#include "keymap_jp.h"
+
+#define KC_MAC_UNDO LGUI(KC_Z)
+#define KC_MAC_CUT LGUI(KC_X)
+#define KC_MAC_COPY LGUI(KC_C)
+#define KC_MAC_PASTE LGUI(KC_V)
+#define KC_PC_UNDO LCTL(KC_Z)
+#define KC_PC_CUT LCTL(KC_X)
+#define KC_PC_COPY LCTL(KC_C)
+#define KC_PC_PASTE LCTL(KC_V)
+#define ES_LESS_MAC KC_GRAVE
+#define ES_GRTR_MAC LSFT(KC_GRAVE)
+#define ES_BSLS_MAC ALGR(KC_6)
+
+enum custom_keycodes {
+ RGB_SLD = EZ_SAFE_RANGE,
+ HSV_172_255_255,
+ HSV_86_255_128,
+ HSV_27_255_255,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ergodox_pretty(
+ WEBUSB_PAIR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_RIGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
+ KC_DELETE, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
+ KC_BSPACE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(2,KC_SCOLON),LGUI_T(KC_QUOTE),
+ KC_LSHIFT, LCTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_HYPR, KC_MEH, KC_N, KC_M, KC_COMMA, KC_DOT, RCTL_T(KC_SLASH),KC_RSHIFT,
+ LT(1,KC_GRAVE), KC_QUOTE, LALT(KC_LSHIFT),KC_LEFT, KC_RIGHT, KC_UP, KC_DOWN, KC_LBRACKET, KC_RBRACKET, MO(1),
+ LALT_T(KC_APPLICATION),KC_LGUI, KC_LALT, LCTL_T(KC_ESCAPE),
+ KC_HOME, KC_PGUP,
+ KC_SPACE, KC_BSPACE, KC_END, KC_PGDOWN, KC_TAB, KC_ENTER
+ ),
+ [1] = LAYOUT_ergodox_pretty(
+ KC_ESCAPE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRANSPARENT, KC_TRANSPARENT, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRANSPARENT, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRANSPARENT, KC_TRANSPARENT, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_TRANSPARENT, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE, KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_PERC, KC_CIRC, KC_LBRACKET, KC_RBRACKET, KC_TILD, KC_TRANSPARENT, KC_TRANSPARENT, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLASH, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_DOT, KC_0, KC_EQUAL, KC_TRANSPARENT,
+ RGB_MOD, HSV_172_255_255,RGB_TOG, RGB_SLD,
+ HSV_86_255_128, KC_TRANSPARENT,
+ RGB_VAD, RGB_VAI, HSV_27_255_255, KC_TRANSPARENT, RGB_HUD, RGB_HUI
+ ),
+ [2] = LAYOUT_ergodox_pretty(
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_UP, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MEDIA_PLAY_PAUSE,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MEDIA_PREV_TRACK,KC_MEDIA_NEXT_TRACK,KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_BTN1, KC_MS_BTN2, KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,KC_AUDIO_MUTE, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_WWW_BACK
+ ),
+};
+
+
+bool suspended = false;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case RGB_SLD:
+ if (record->event.pressed) {
+ rgblight_mode(1);
+ }
+ return false;
+ case HSV_172_255_255:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_sethsv(172,255,255);
+ #endif
+ }
+ return false;
+ case HSV_86_255_128:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_sethsv(86,255,128);
+ #endif
+ }
+ return false;
+ case HSV_27_255_255:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_sethsv(27,255,255);
+ #endif
+ }
+ return false;
+ }
+ return true;
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+
+ uint8_t layer = biton32(state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ case 3:
+ ergodox_right_led_3_on();
+ break;
+ case 4:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ break;
+ case 5:
+ ergodox_right_led_1_on();
+ ergodox_right_led_3_on();
+ break;
+ case 6:
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ break;
+ case 7:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ break;
+ default:
+ break;
+ }
+ return state;
+
+};
diff --git a/keyboards/ergodox_ez/keymaps/webusb/readme.md b/keyboards/ergodox_ez/keymaps/webusb/readme.md
new file mode 100644
index 0000000000..1150a4f709
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/webusb/readme.md
@@ -0,0 +1,15 @@
+# ErgoDox EZ Default Configuration
+
+## Changelog
+
+* Dec 2016:
+ * Added LED keys
+ * Refreshed layout graphic, comes from http://configure.ergodox-ez.com now.
+* Sep 22, 2016:
+ * Created a new key in layer 1 (bottom-corner key) that resets the EEPROM.
+* Feb 2, 2016 (V1.1):
+ * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows).
+
+This is what we ship with out of the factory. :) The image says it all:
+
+![Default](https://i.imgur.com/Be53jH7.png) \ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/webusb/rules.mk b/keyboards/ergodox_ez/keymaps/webusb/rules.mk
new file mode 100644
index 0000000000..fbc60a0a15
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/webusb/rules.mk
@@ -0,0 +1 @@
+WEBUSB_ENABLE = yes
diff --git a/keyboards/ergodox_ez/matrix.c b/keyboards/ergodox_ez/matrix.c
index 80a2d1d95b..1ab2e5502f 100644
--- a/keyboards/ergodox_ez/matrix.c
+++ b/keyboards/ergodox_ez/matrix.c
@@ -35,9 +35,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "matrix.h"
#include "debounce.h"
#include QMK_KEYBOARD_H
-#ifdef DEBUG_MATRIX_SCAN_RATE
-# include "timer.h"
-#endif
/*
* This constant define not debouncing time in msecs, assuming eager_pr.
@@ -67,11 +64,6 @@ static void select_row(uint8_t row);
static uint8_t mcp23018_reset_loop;
// static uint16_t mcp23018_reset_loop;
-#ifdef DEBUG_MATRIX_SCAN_RATE
-uint32_t matrix_timer;
-uint32_t matrix_scan_count;
-#endif
-
__attribute__((weak)) void matrix_init_user(void) {}
__attribute__((weak)) void matrix_scan_user(void) {}
@@ -95,13 +87,9 @@ void matrix_init(void) {
// initialize matrix state: all keys off
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
matrix[i] = 0;
- raw_matrix[i] = 0;
+ raw_matrix[i] = 0;
}
-#ifdef DEBUG_MATRIX_SCAN_RATE
- matrix_timer = timer_read32();
- matrix_scan_count = 0;
-#endif
debounce_init(MATRIX_ROWS);
matrix_init_quantum();
}
@@ -116,11 +104,6 @@ void matrix_power_up(void) {
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
matrix[i] = 0;
}
-
-#ifdef DEBUG_MATRIX_SCAN_RATE
- matrix_timer = timer_read32();
- matrix_scan_count = 0;
-#endif
}
// Reads and stores a row, returning
@@ -151,24 +134,10 @@ uint8_t matrix_scan(void) {
}
}
-#ifdef DEBUG_MATRIX_SCAN_RATE
- matrix_scan_count++;
-
- uint32_t timer_now = timer_read32();
- if (TIMER_DIFF_32(timer_now, matrix_timer) > 1000) {
- print("matrix scan frequency: ");
- pdec(matrix_scan_count);
- print("\n");
-
- matrix_timer = timer_now;
- matrix_scan_count = 0;
- }
-#endif
-
#ifdef LEFT_LEDS
mcp23018_status = ergodox_left_leds_update();
#endif // LEFT_LEDS
- bool changed = false;
+ bool changed = false;
for (uint8_t i = 0; i < MATRIX_ROWS_PER_SIDE; i++) {
// select rows from left and right hands
uint8_t left_index = i;
@@ -178,13 +147,13 @@ uint8_t matrix_scan(void) {
// we don't need a 30us delay anymore, because selecting a
// left-hand row requires more than 30us for i2c.
-
+
changed |= store_raw_matrix_row(left_index);
changed |= store_raw_matrix_row(right_index);
unselect_rows();
}
-
+
debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
matrix_scan_quantum();