diff --git a/keyboards/minidox/i2c.h b/keyboards/minidox/i2c.h
index 08ce4b0093..c15b6bc506 100644
--- a/keyboards/minidox/i2c.h
+++ b/keyboards/minidox/i2c.h
@@ -16,7 +16,7 @@
#define SLAVE_BUFFER_SIZE 0x10
// i2c SCL clock frequency
-#define SCL_CLOCK 100000L
+#define SCL_CLOCK 400000L
extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
@@ -28,4 +28,22 @@ uint8_t i2c_master_read(int);
void i2c_reset_state(void);
void i2c_slave_init(uint8_t address);
+
+static inline unsigned char i2c_start_read(unsigned char addr) {
+ return i2c_master_start((addr << 1) | I2C_READ);
+}
+
+static inline unsigned char i2c_start_write(unsigned char addr) {
+ return i2c_master_start((addr << 1) | I2C_WRITE);
+}
+
+// from SSD1306 scrips
+extern unsigned char i2c_rep_start(unsigned char addr);
+extern void i2c_start_wait(unsigned char addr);
+extern unsigned char i2c_readAck(void);
+extern unsigned char i2c_readNak(void);
+extern unsigned char i2c_read(unsigned char ack);
+
+#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
+
#endif
diff --git a/keyboards/minidox/keymaps/that_canadian/config.h b/keyboards/minidox/keymaps/that_canadian/config.h
index 7a8193e081..aad7ed1e66 100644
--- a/keyboards/minidox/keymaps/that_canadian/config.h
+++ b/keyboards/minidox/keymaps/that_canadian/config.h
@@ -25,6 +25,8 @@ along with this program. If not, see .
#define USE_SERIAL
+#define EE_HANDS
+
/* ws2812 RGB LED */
#define RGB_DI_PIN D7
#define RGBLIGHT_TIMER
diff --git a/keyboards/minidox/keymaps/that_canadian/keymap.c b/keyboards/minidox/keymaps/that_canadian/keymap.c
index da9905346e..5d55d18251 100644
--- a/keyboards/minidox/keymaps/that_canadian/keymap.c
+++ b/keyboards/minidox/keymaps/that_canadian/keymap.c
@@ -40,7 +40,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Z | X | C | V | B | | N | M | , | . | / |
* `----------------------------------' `----------------------------------'
* ,--------------------. ,------,-------------.
+<<<<<<< HEAD
+ * | Shift| LOWER| | | | RAISE| Ctrl |
+=======
* | Ctrl | LOWER| | | | RAISE| Shift|
+>>>>>>> a4958a532da154b9dd6f6144836a73f9de641f74
* `-------------| Space| |BckSpc|------+------.
* | | | |
* `------' `------'
@@ -49,7 +53,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, \
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \
- KC_LCTL, LOWER, KC_SPC, KC_BSPC, RAISE, OSM(MOD_LSFT) \
+ OSM(MOD_LSFT), LOWER, KC_SPC, KC_BSPC, RAISE, KC_LCTL \
),
/* Raise
diff --git a/keyboards/minidox/matrix.c b/keyboards/minidox/matrix.c
index 1389690042..81dfb14455 100644
--- a/keyboards/minidox/matrix.c
+++ b/keyboards/minidox/matrix.c
@@ -226,9 +226,7 @@ uint8_t matrix_scan(void)
TXLED0;
error_count = 0;
}
-
matrix_scan_quantum();
-
return ret;
}
diff --git a/keyboards/minidox/readme.md b/keyboards/minidox/readme.md
index f6227386de..da89714867 100644
--- a/keyboards/minidox/readme.md
+++ b/keyboards/minidox/readme.md
@@ -1,5 +1,5 @@
-ECO
-===
+MiniDox
+=====
![MimiDox](http://i.imgur.com/iWb3yO0.jpg)
@@ -13,3 +13,63 @@ Make example for this keyboard (after setting up your build environment):
make minidox-rev1-default
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+
+## Build Guide
+
+A build guide for putting together the MiniDox v1 can be found here: [MiniDox Build Log / Guide](http://imgur.com/a/vImo6)
+
+Flashing
+-------
+Note: Most of this is copied from the Let's Split readme, because it is awesome
+
+From the keymap directory run `make SUBPROJECT-KEYMAP-avrdude` for automatic serial port resolution and flashing.
+Example: `make rev1-default-avrdude`
+
+Choosing which board to plug the USB cable into (choosing Master)
+--------
+Because the two boards are identical, the firmware has logic to differentiate the left and right board.
+
+It uses two strategies to figure things out: look at the EEPROM (memory on the chip) or looks if the current board has the usb cable.
+
+The EEPROM approach requires additional setup (flashing the eeeprom) but allows you to swap the usb cable to either side.
+
+The USB cable approach is easier to setup and if you just want the usb cable on the left board, you do not need to do anything extra.
+
+### Setting the left hand as master
+If you always plug the usb cable into the left board, nothing extra is needed as this is the default. Comment out `EE_HANDS` and comment out `I2C_MASTER_RIGHT` or `MASTER_RIGHT` if for some reason it was set.
+
+### Setting the right hand as master
+If you always plug the usb cable into the right board, add an extra flag to your `config.h`
+```
+ #define MASTER_RIGHT
+```
+
+### Setting EE_hands to use either hands as master
+If you define `EE_HANDS` in your `config.h`, you will need to set the
+EEPROM for the left and right halves.
+
+The EEPROM is used to store whether the
+half is left handed or right handed. This makes it so that the same firmware
+file will run on both hands instead of having to flash left and right handed
+versions of the firmware to each half. To flash the EEPROM file for the left
+half run:
+```
+avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-lefthand.eep
+// or the equivalent in dfu-programmer
+
+```
+and similarly for right half
+```
+avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-righhand.eep
+// or the equivalent in dfu-programmer
+```
+
+NOTE: replace `$(COM_PORT)` with the port of your device (e.g. `/dev/ttyACM0`)
+
+After you have flashed the EEPROM, you then need to set `EE_HANDS` in your config.h, rebuild the hex files and reflash.
+
+Note that you need to program both halves, but you have the option of using
+different keymaps for each half. You could program the left half with a QWERTY
+layout and the right half with a Colemak layout using bootmagic's default layout option.
+Then if you connect the left half to a computer by USB the keyboard will use QWERTY and Colemak when the
+right half is connected.
diff --git a/keyboards/minidox/rev1/config.h b/keyboards/minidox/rev1/config.h
index a858a5b902..9799c41994 100644
--- a/keyboards/minidox/rev1/config.h
+++ b/keyboards/minidox/rev1/config.h
@@ -30,7 +30,7 @@ along with this program. If not, see .
#define USE_SERIAL
-// #define EE_HANDS
+//#define EE_HANDS
#define I2C_MASTER_LEFT
//#define I2C_MASTER_RIGHT
diff --git a/keyboards/minidox/split_util.c b/keyboards/minidox/split_util.c
index 461921798f..39639c3b4b 100644
--- a/keyboards/minidox/split_util.c
+++ b/keyboards/minidox/split_util.c
@@ -21,7 +21,8 @@ static void setup_handedness(void) {
#ifdef EE_HANDS
isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS);
#else
- #ifdef I2C_MASTER_RIGHT
+ // I2C_MASTER_RIGHT is deprecated, use MASTER_RIGHT instead, since this works for both serial and i2c
+ #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT)
isLeftHand = !has_usb();
#else
isLeftHand = has_usb();
@@ -32,6 +33,9 @@ static void setup_handedness(void) {
static void keyboard_master_setup(void) {
#ifdef USE_I2C
i2c_master_init();
+#ifdef SSD1306OLED
+ matrix_master_OLED_init ();
+#endif
#else
serial_master_init();
#endif
diff --git a/keyboards/minidox/split_util.h b/keyboards/minidox/split_util.h
index 6b896679ca..3ae76c209a 100644
--- a/keyboards/minidox/split_util.h
+++ b/keyboards/minidox/split_util.h
@@ -19,4 +19,6 @@ void split_keyboard_setup(void);
bool has_usb(void);
void keyboard_slave_loop(void);
+void matrix_master_OLED_init (void);
+
#endif