Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a5b0f4de35 | ||
|
|
20696a9efe | ||
|
|
14c5160b1a | ||
|
|
000e749853 | ||
|
|
7c0610b411 | ||
|
|
b6d74b9bb9 | ||
|
|
5e8594db82 | ||
|
|
6c9b69a4b6 | ||
|
|
5412229603 | ||
|
|
e2e0f5d6d1 | ||
|
|
21b63d9243 | ||
|
|
d73d30aa84 | ||
|
|
a4958a532d | ||
|
|
df50260300 | ||
|
|
55ed97af1e | ||
|
|
07bf8522ca | ||
|
|
1fdf3c84fe | ||
|
|
9312b9db6c | ||
|
|
707f4efd99 | ||
|
|
e7a5fee1f3 |
No files matched your search
@@ -419,7 +419,7 @@ define BUILD_TEST
|
|||||||
MAKE_TARGET := $2
|
MAKE_TARGET := $2
|
||||||
COMMAND := $1
|
COMMAND := $1
|
||||||
MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_test.mk $$(MAKE_TARGET)
|
MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_test.mk $$(MAKE_TARGET)
|
||||||
MAKE_VARS := TEST=$$(TEST_NAME) FULL_TESTS=$$(FULL_TESTS)
|
MAKE_VARS := TEST=$$(TEST_NAME) FULL_TESTS="$$(FULL_TESTS)"
|
||||||
MAKE_MSG := $$(MSG_MAKE_TEST)
|
MAKE_MSG := $$(MSG_MAKE_TEST)
|
||||||
$$(eval $$(call BUILD))
|
$$(eval $$(call BUILD))
|
||||||
ifneq ($$(MAKE_TARGET),clean)
|
ifneq ($$(MAKE_TARGET),clean)
|
||||||
|
|||||||
+2
-1
@@ -21,12 +21,13 @@ $(TEST)_SRC= \
|
|||||||
$(TEST_PATH)/keymap.c \
|
$(TEST_PATH)/keymap.c \
|
||||||
$(TMK_COMMON_SRC) \
|
$(TMK_COMMON_SRC) \
|
||||||
$(QUANTUM_SRC) \
|
$(QUANTUM_SRC) \
|
||||||
|
$(SRC) \
|
||||||
tests/test_common/matrix.c \
|
tests/test_common/matrix.c \
|
||||||
tests/test_common/test_driver.cpp \
|
tests/test_common/test_driver.cpp \
|
||||||
tests/test_common/keyboard_report_util.cpp \
|
tests/test_common/keyboard_report_util.cpp \
|
||||||
tests/test_common/test_fixture.cpp
|
tests/test_common/test_fixture.cpp
|
||||||
$(TEST)_SRC += $(patsubst $(ROOTDIR)/%,%,$(wildcard $(TEST_PATH)/*.cpp))
|
$(TEST)_SRC += $(patsubst $(ROOTDIR)/%,%,$(wildcard $(TEST_PATH)/*.cpp))
|
||||||
|
|
||||||
$(TEST)_DEFS=$(TMK_COMMON_DEFS)
|
$(TEST)_DEFS=$(TMK_COMMON_DEFS) $(OPT_DEFS)
|
||||||
$(TEST)_CONFIG=$(TEST_PATH)/config.h
|
$(TEST)_CONFIG=$(TEST_PATH)/config.h
|
||||||
VPATH+=$(TOP_DIR)/tests/test_common
|
VPATH+=$(TOP_DIR)/tests/test_common
|
||||||
+1
-1
@@ -7,7 +7,7 @@
|
|||||||
* [FAQ: Compiling QMK](faq_build.md)
|
* [FAQ: Compiling QMK](faq_build.md)
|
||||||
* [How to Github](how_to_github.md)
|
* [How to Github](how_to_github.md)
|
||||||
|
|
||||||
* [Features](features/README.md)
|
* [Features](features.md)
|
||||||
* [Layer switching](key_functions.md)
|
* [Layer switching](key_functions.md)
|
||||||
* [Leader Key](leader_key.md)
|
* [Leader Key](leader_key.md)
|
||||||
* [Macros](macros.md)
|
* [Macros](macros.md)
|
||||||
|
|||||||
@@ -102,4 +102,4 @@ case MACRO_RAISED:
|
|||||||
update_tri_layer(LAYER_LOWER, LAYER_RAISED, LAYER_ADJUST);
|
update_tri_layer(LAYER_LOWER, LAYER_RAISED, LAYER_ADJUST);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
```
|
```
|
||||||
+19
-1
@@ -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
|
||||||
Reference in new issue
Block a user