commit
						7c0610b411
					
				@ -16,7 +16,7 @@
 | 
				
			|||||||
#define SLAVE_BUFFER_SIZE 0x10
 | 
					#define SLAVE_BUFFER_SIZE 0x10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// i2c SCL clock frequency
 | 
					// i2c SCL clock frequency
 | 
				
			||||||
#define SCL_CLOCK  100000L
 | 
					#define SCL_CLOCK  400000L
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
 | 
					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_reset_state(void);
 | 
				
			||||||
void i2c_slave_init(uint8_t address);
 | 
					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
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -25,6 +25,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define USE_SERIAL
 | 
					#define USE_SERIAL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define EE_HANDS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ws2812 RGB LED */
 | 
					/* ws2812 RGB LED */
 | 
				
			||||||
#define RGB_DI_PIN D7
 | 
					#define RGB_DI_PIN D7
 | 
				
			||||||
#define RGBLIGHT_TIMER
 | 
					#define RGBLIGHT_TIMER
 | 
				
			||||||
 | 
				
			|||||||
@ -40,7 +40,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
 * |   Z  |   X  |   C  |   V  |   B  |           |   N  |   M  |   ,  |   .  |   /  |
 | 
					 * |   Z  |   X  |   C  |   V  |   B  |           |   N  |   M  |   ,  |   .  |   /  |
 | 
				
			||||||
 * `----------------------------------'           `----------------------------------'
 | 
					 * `----------------------------------'           `----------------------------------'
 | 
				
			||||||
 *                  ,--------------------.    ,------,-------------.
 | 
					 *                  ,--------------------.    ,------,-------------.
 | 
				
			||||||
 | 
					<<<<<<< HEAD
 | 
				
			||||||
 | 
					 *                  | Shift| LOWER|      |    |      | RAISE| Ctrl |
 | 
				
			||||||
 | 
					=======
 | 
				
			||||||
 *                  | Ctrl | LOWER|      |    |      | RAISE| Shift|
 | 
					 *                  | Ctrl | LOWER|      |    |      | RAISE| Shift|
 | 
				
			||||||
 | 
					>>>>>>> a4958a532da154b9dd6f6144836a73f9de641f74
 | 
				
			||||||
 *                  `-------------| Space|    |BckSpc|------+------.
 | 
					 *                  `-------------| 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_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_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_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
 | 
					/* Raise
 | 
				
			||||||
 | 
				
			|||||||
@ -226,9 +226,7 @@ uint8_t matrix_scan(void)
 | 
				
			|||||||
        TXLED0;
 | 
					        TXLED0;
 | 
				
			||||||
        error_count = 0;
 | 
					        error_count = 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    matrix_scan_quantum();
 | 
					    matrix_scan_quantum();
 | 
				
			||||||
 | 
					 | 
				
			||||||
    return ret;
 | 
					    return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
ECO
 | 
					MiniDox
 | 
				
			||||||
===
 | 
					=====
 | 
				
			||||||
 | 
					
 | 
				
			||||||

 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -13,3 +13,63 @@ Make example for this keyboard (after setting up your build environment):
 | 
				
			|||||||
    make minidox-rev1-default
 | 
					    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.
 | 
					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.
 | 
				
			||||||
 | 
				
			|||||||
@ -30,7 +30,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define USE_SERIAL
 | 
					#define USE_SERIAL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// #define EE_HANDS
 | 
					//#define EE_HANDS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define I2C_MASTER_LEFT
 | 
					#define I2C_MASTER_LEFT
 | 
				
			||||||
//#define I2C_MASTER_RIGHT
 | 
					//#define I2C_MASTER_RIGHT
 | 
				
			||||||
 | 
				
			|||||||
@ -21,7 +21,8 @@ static void setup_handedness(void) {
 | 
				
			|||||||
  #ifdef EE_HANDS
 | 
					  #ifdef EE_HANDS
 | 
				
			||||||
    isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS);
 | 
					    isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS);
 | 
				
			||||||
  #else
 | 
					  #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();
 | 
					      isLeftHand = !has_usb();
 | 
				
			||||||
    #else
 | 
					    #else
 | 
				
			||||||
      isLeftHand = has_usb();
 | 
					      isLeftHand = has_usb();
 | 
				
			||||||
@ -32,6 +33,9 @@ static void setup_handedness(void) {
 | 
				
			|||||||
static void keyboard_master_setup(void) {
 | 
					static void keyboard_master_setup(void) {
 | 
				
			||||||
#ifdef USE_I2C
 | 
					#ifdef USE_I2C
 | 
				
			||||||
    i2c_master_init();
 | 
					    i2c_master_init();
 | 
				
			||||||
 | 
					#ifdef SSD1306OLED
 | 
				
			||||||
 | 
					    matrix_master_OLED_init ();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    serial_master_init();
 | 
					    serial_master_init();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -19,4 +19,6 @@ void split_keyboard_setup(void);
 | 
				
			|||||||
bool has_usb(void);
 | 
					bool has_usb(void);
 | 
				
			||||||
void keyboard_slave_loop(void);
 | 
					void keyboard_slave_loop(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void matrix_master_OLED_init (void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user