summaryrefslogtreecommitdiffstats
path: root/keyboards/ergodox/ez/ez.c
diff options
context:
space:
mode:
authorRyan Ascheman <rascheman@groupon.com>2016-10-18 21:42:02 +0200
committerRyan Ascheman <rascheman@groupon.com>2016-10-18 21:42:02 +0200
commit55b8b8477cc6aee82dfe6792eea4e589cac433d5 (patch)
treece5bfbd1b0ee59dbffdc2044bcf90c89614392ed /keyboards/ergodox/ez/ez.c
parentd1c70328f8d8ded6ce1e5422b468fc41ef315e7d (diff)
parent04df74f6360464661bcc1e6794e9fd3549084390 (diff)
downloadqmk_firmware-55b8b8477cc6aee82dfe6792eea4e589cac433d5.tar.gz
qmk_firmware-55b8b8477cc6aee82dfe6792eea4e589cac433d5.tar.xz
Merge remote-tracking branch 'upstream/master'
* upstream/master: (1239 commits) Update ez.c removes planck/rev3 temporarily Move hand_swap_config to ez.c, removes error for infinity Update Makefile ergodox: Update algernon's keymap to v1.9 Added VS Code dir to .gitignore Support the Pegasus Hoof controller. [Jack & Erez] Simplifies and documents TO add readme use wait_ms instead of _delay_ms add messenger init keymap Add example keymap Adding whiskey_tango_foxtrot_capslock ergodox keymap Unicode map framework. Allow unicode up to 0xFFFFF using separate mapping table CIE 1931 dim curve Apply the dim curve to the RGB output Update the Cluecard readme files Tune snake and knight intervals for Cluecard Tunable RGB light intervals ...
Diffstat (limited to 'keyboards/ergodox/ez/ez.c')
-rw-r--r--keyboards/ergodox/ez/ez.c106
1 files changed, 106 insertions, 0 deletions
diff --git a/keyboards/ergodox/ez/ez.c b/keyboards/ergodox/ez/ez.c
new file mode 100644
index 000000000..ddb8ff0cf
--- /dev/null
+++ b/keyboards/ergodox/ez/ez.c
@@ -0,0 +1,106 @@
+#include "ez.h"
+#include "i2cmaster.h"
+
+bool i2c_initialized = 0;
+uint8_t mcp23018_status = 0x20;
+
+void matrix_init_kb(void) {
+ // keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md")
+ TCCR1A = 0b10101001; // set and configure fast PWM
+ TCCR1B = 0b00001001; // set and configure fast PWM
+
+ // (tied to Vcc for hardware convenience)
+ DDRB &= ~(1<<4); // set B(4) as input
+ PORTB &= ~(1<<4); // set B(4) internal pull-up disabled
+
+ // unused pins - C7, D4, D5, D7, E6
+ // set as input with internal pull-ip enabled
+ DDRC &= ~(1<<7);
+ DDRD &= ~(1<<7 | 1<<5 | 1<<4);
+ DDRE &= ~(1<<6);
+ PORTC |= (1<<7);
+ PORTD |= (1<<7 | 1<<5 | 1<<4);
+ PORTE |= (1<<6);
+
+ ergodox_blink_all_leds();
+
+ matrix_init_user();
+}
+
+void ergodox_blink_all_leds(void)
+{
+ ergodox_led_all_off();
+ ergodox_led_all_set(LED_BRIGHTNESS_HI);
+ ergodox_right_led_1_on();
+ _delay_ms(50);
+ ergodox_right_led_2_on();
+ _delay_ms(50);
+ ergodox_right_led_3_on();
+ _delay_ms(50);
+ ergodox_right_led_1_off();
+ _delay_ms(50);
+ ergodox_right_led_2_off();
+ _delay_ms(50);
+ ergodox_right_led_3_off();
+ //ergodox_led_all_on();
+ //_delay_ms(333);
+ ergodox_led_all_off();
+}
+
+uint8_t init_mcp23018(void) {
+ mcp23018_status = 0x20;
+
+ // I2C subsystem
+ if (i2c_initialized == 0) {
+ i2c_init(); // on pins D(1,0)
+ i2c_initialized++;
+ _delay_ms(1000);
+ }
+
+ // set pin direction
+ // - unused : input : 1
+ // - input : input : 1
+ // - driving : output : 0
+ mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(IODIRA); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out;
+ i2c_stop();
+
+ // set pull-up
+ // - unused : on : 1
+ // - input : on : 1
+ // - driving : off : 0
+ mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(GPPUA); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out;
+
+out:
+ i2c_stop();
+
+ return mcp23018_status;
+}
+
+#ifdef ONEHAND_ENABLE
+__attribute__ ((weak))
+// swap-hands action needs a matrix to define the swap
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ /* Left hand, matrix positions */
+ {{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}},
+ {{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}},
+ {{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}},
+ {{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}},
+ {{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}},
+ {{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}},
+ {{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}},
+ /* Right hand, matrix positions */
+ {{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}},
+ {{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}},
+ {{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}},
+ {{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}},
+ {{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}},
+ {{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}},
+ {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}},
+};
+#endif