From 19a85015c2b4c9b4a7196f5be73a16ceec5a4f31 Mon Sep 17 00:00:00 2001 From: Mikkel Jeppesen <2756925+Duckle29@users.noreply.github.com> Date: Sat, 31 Aug 2019 02:52:02 +0200 Subject: [PATCH] [Keyboard] Added Vitamins Included Rev2 (#6593) * Fixed pin for RGB * Added support for second revision of vitamins included * Added rev2 config and switched to #pragma once * Switch to quantum.h pincontrol * Fixed left-half check * Moved revision agnostic code to main header file * Moved common build options to main makefile * Referred to rev2 documentation * JTAG is dissabled in keyboard.c now * moved EEHANDS to rev1 config * moved rev2 to use split_common * Updated default keymaps * Changed handedness ifdef to allow user-overrides * Add some space saving defines * Changed to more sane I2C clock * Removed rev2 check in matrix.c as rev2 uses split_common * Removed rev2 check in rev1 only code * Update debounce constant name Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Switch KEYMAP macro to LAYOUT Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Switch kc_keymap macro to layout_kc Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Switch kc_keymap macro to layout_kc Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Add legacy layout macro alias Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/vitamins_included/rev2/config.h Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Split readme into revision specific versions * Updated src to allow LTO * Renamed readmes to lower-case * Switched my keyboards to FEED VID * Fixed markdown lint errors * fixed readme links Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Maintain keymap backwards compatibility Co-Authored-By: Joel Challis --- keyboards/lets_split/sockets/config.h | 6 +- keyboards/vitamins_included/config.h | 24 +++- keyboards/vitamins_included/i2c.h | 2 +- keyboards/vitamins_included/info.json | 12 ++ .../keymaps/default/config.h | 13 +- .../keymaps/default/keymap.c | 6 +- .../vitamins_included/keymaps/numpad/config.h | 13 +- .../vitamins_included/keymaps/numpad/keymap.c | 22 ++-- keyboards/vitamins_included/matrix.c | 2 +- keyboards/vitamins_included/readme.md | 118 +++--------------- keyboards/vitamins_included/rev1/config.h | 13 +- keyboards/vitamins_included/rev1/readme.md | 81 ++++++++++++ keyboards/vitamins_included/rev1/rev1.h | 35 +----- keyboards/vitamins_included/rev1/rules.mk | 14 ++- keyboards/vitamins_included/rev2/config.h | 81 ++++++++++++ keyboards/vitamins_included/rev2/readme.md | 10 ++ keyboards/vitamins_included/rev2/rev2.c | 31 +++++ keyboards/vitamins_included/rev2/rev2.h | 2 + keyboards/vitamins_included/rev2/rules.mk | 2 + keyboards/vitamins_included/rules.mk | 80 +++--------- keyboards/vitamins_included/serial.h | 4 +- keyboards/vitamins_included/split_util.c | 8 ++ keyboards/vitamins_included/split_util.h | 8 +- .../vitamins_included/vitamins_included.h | 41 ++++-- 24 files changed, 367 insertions(+), 261 deletions(-) create mode 100644 keyboards/vitamins_included/info.json create mode 100644 keyboards/vitamins_included/rev1/readme.md create mode 100644 keyboards/vitamins_included/rev2/config.h create mode 100644 keyboards/vitamins_included/rev2/readme.md create mode 100644 keyboards/vitamins_included/rev2/rev2.c create mode 100644 keyboards/vitamins_included/rev2/rev2.h create mode 100644 keyboards/vitamins_included/rev2/rules.mk diff --git a/keyboards/lets_split/sockets/config.h b/keyboards/lets_split/sockets/config.h index 2d3e68610e9..e8459494be0 100644 --- a/keyboards/lets_split/sockets/config.h +++ b/keyboards/lets_split/sockets/config.h @@ -19,8 +19,8 @@ along with this program. If not, see . #pragma once /* USB Device descriptor parameter */ -#define VENDOR_ID 0xBEE5 -#define PRODUCT_ID 0xFEED +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0BEE #define DEVICE_VER 0x0001 #define MANUFACTURER Duckle29 #define PRODUCT Lets Split Sockets @@ -88,4 +88,4 @@ along with this program. If not, see . #define NO_ACTION_FUNCTION #define DISABLE_LEADER -#endif // USE_Link_Time_Optimization \ No newline at end of file +#endif // USE_Link_Time_Optimization diff --git a/keyboards/vitamins_included/config.h b/keyboards/vitamins_included/config.h index bcaf777c775..1be7f3a9023 100644 --- a/keyboards/vitamins_included/config.h +++ b/keyboards/vitamins_included/config.h @@ -17,11 +17,25 @@ along with this program. If not, see . */ #pragma once +//#define USE_I2C -#include "config_common.h" - -#define NO_ACTION_MACRO -#define NO_ACTION_FUNCTION - +/* Common USB Device descriptor parameters */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0xBEE5 +#define MANUFACTURER Duckle29 +#define PRODUCT Vitamins included +#include "config_common.h" +#ifndef NO_ACTION_MACRO + #define NO_ACTION_MACRO +#endif +#ifndef NO_ACTION_FUNCTION + #define NO_ACTION_FUNCTION +#endif +#ifndef NO_DEBUG + #define NO_DEBUG +#endif // !NO_DEBUG +#if !defined(NO_PRINT) && !defined(CONSOLE_ENABLE) + #define NO_PRINT +#endif // !NO_PRINT diff --git a/keyboards/vitamins_included/i2c.h b/keyboards/vitamins_included/i2c.h index 739d134beee..6cb8cce9149 100644 --- a/keyboards/vitamins_included/i2c.h +++ b/keyboards/vitamins_included/i2c.h @@ -17,7 +17,7 @@ #define SLAVE_BUFFER_SIZE 0x10 // i2c SCL clock frequency -#define SCL_CLOCK 400000L +#define SCL_CLOCK 100000UL extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; diff --git a/keyboards/vitamins_included/info.json b/keyboards/vitamins_included/info.json new file mode 100644 index 00000000000..598688a210a --- /dev/null +++ b/keyboards/vitamins_included/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "Vitamins Included", + "url": "", + "maintainer": "Duckle29", + "width": 13, + "height": 4, + "layouts": { + "LAYOUT": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}] + } + } +} diff --git a/keyboards/vitamins_included/keymaps/default/config.h b/keyboards/vitamins_included/keymaps/default/config.h index aba9fa7d403..95dd8ec4643 100644 --- a/keyboards/vitamins_included/keymaps/default/config.h +++ b/keyboards/vitamins_included/keymaps/default/config.h @@ -20,16 +20,19 @@ along with this program. If not, see . #pragma once -/* Use I2C or Serial, not both */ - -#define USE_SERIAL +/* Use I2C or Serial. Default is Serial */ // #define USE_I2C /* Select hand configuration */ +// Defaults: +// Rev1: EE_HANDS +// Rev2: SPLIT_HAND_PIN B4 +// You can override the defaults (rev1 doesn't support SPLIT_HAND_PIN) +//#define EE_HANDS //#define MASTER_LEFT -// #define MASTER_RIGHT -#define EE_HANDS +//#define MASTER_RIGHT + #ifdef AUDIO_ENABLE #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ diff --git a/keyboards/vitamins_included/keymaps/default/keymap.c b/keyboards/vitamins_included/keymaps/default/keymap.c index 78249057203..9ee0d1a353f 100644 --- a/keyboards/vitamins_included/keymaps/default/keymap.c +++ b/keyboards/vitamins_included/keymaps/default/keymap.c @@ -116,17 +116,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Adjust (Lower + Raise) * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | + * | | RESET| | | | | | | | | RESET| Del | * |------+------+------+------+------+-------------+------+------+------+------+------| * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | * |------+------+------+------+------+------|------+------+------+------+------+------| * | | | | | | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | |RGB_MOD| + * | | | | | | | | | | |RGBMOD| * `-----------------------------------------------------------------------------------' */ [_ADJUST] = LAYOUT_ortho_4x12( \ - _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, RESET, KC_DEL, \ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD \ diff --git a/keyboards/vitamins_included/keymaps/numpad/config.h b/keyboards/vitamins_included/keymaps/numpad/config.h index aba9fa7d403..95dd8ec4643 100644 --- a/keyboards/vitamins_included/keymaps/numpad/config.h +++ b/keyboards/vitamins_included/keymaps/numpad/config.h @@ -20,16 +20,19 @@ along with this program. If not, see . #pragma once -/* Use I2C or Serial, not both */ - -#define USE_SERIAL +/* Use I2C or Serial. Default is Serial */ // #define USE_I2C /* Select hand configuration */ +// Defaults: +// Rev1: EE_HANDS +// Rev2: SPLIT_HAND_PIN B4 +// You can override the defaults (rev1 doesn't support SPLIT_HAND_PIN) +//#define EE_HANDS //#define MASTER_LEFT -// #define MASTER_RIGHT -#define EE_HANDS +//#define MASTER_RIGHT + #ifdef AUDIO_ENABLE #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ diff --git a/keyboards/vitamins_included/keymaps/numpad/keymap.c b/keyboards/vitamins_included/keymaps/numpad/keymap.c index 1767851feb9..973d4e936b0 100644 --- a/keyboards/vitamins_included/keymaps/numpad/keymap.c +++ b/keyboards/vitamins_included/keymaps/numpad/keymap.c @@ -7,7 +7,7 @@ extern keymap_config_t keymap_config; // Layer names don't all need to be of the same length, obviously, and you can also skip them // entirely and just use numbers. #define _NUMPAD 0 -#define _ADJUST 3 +#define _ADJUST 1 enum custom_keycodes { NUMPAD = SAFE_RANGE, @@ -18,31 +18,31 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Numpad * ,-----------------------------------------------------------------------------------. - * | 0 | 1 | 4 | 7 | nlck | esc | 0 | 1 | 4 | 7 | nlck | esc | + * | 0 | 1 | 4 | 7 | nlck | <-- | 0 | 1 | 4 | 7 | nlck | <-- | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | , | 2 | 5 | 8 | / | adj | , | 2 | 5 | 8 | / | adj | + * | adj | 2 | 5 | 8 | / | \/ | , | 2 | 5 | 8 | / | \/ | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | . | 3 | 6 | 9 | * | adj | . | 3 | 6 | 9 | * | adj | + * | . | 3 | 6 | 9 | * | /\ | . | 3 | 6 | 9 | * | /\ | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Enter| adj | - | + |bckspc| adj | Enter| adj | - | + |bckspc| adj | + * | Enter| tab | - | + |bckspc| --> | Enter| tab | - | + |bckspc| --> | * `-----------------------------------------------------------------------------------' */ [_NUMPAD] = LAYOUT_ortho_4x12( \ - KC_KP_0, KC_KP_1, KC_KP_4, KC_KP_7, KC_NUMLOCK, KC_ESC, KC_KP_0, KC_KP_1, KC_KP_4, KC_KP_7, KC_NUMLOCK, KC_ESC, \ - KC_KP_COMMA, KC_KP_2, KC_KP_5, KC_KP_8, KC_KP_SLASH, ADJUST, KC_KP_COMMA, KC_KP_2, KC_KP_5, KC_KP_8, KC_KP_SLASH, ADJUST, \ - KC_KP_DOT, KC_KP_3, KC_KP_6, KC_KP_9, KC_KP_ASTERISK, ADJUST, KC_KP_DOT, KC_KP_3, KC_KP_6, KC_KP_9, KC_KP_ASTERISK, ADJUST , \ - KC_KP_ENTER, ADJUST, KC_KP_MINUS, KC_KP_PLUS, KC_BSPACE, ADJUST, KC_KP_ENTER, ADJUST, KC_KP_MINUS, KC_KP_PLUS, KC_BSPACE, ADJUST \ + KC_KP_0, KC_KP_1, KC_KP_4, KC_KP_7, KC_NUMLOCK, KC_LEFT, KC_KP_0, KC_KP_1, KC_KP_4, KC_KP_7, KC_NUMLOCK, KC_LEFT,\ + ADJUST, KC_KP_2, KC_KP_5, KC_KP_8, KC_KP_SLASH, KC_DOWN, ADJUST, KC_KP_2, KC_KP_5, KC_KP_8, KC_KP_SLASH, KC_DOWN,\ + KC_KP_DOT, KC_KP_3, KC_KP_6, KC_KP_9, KC_KP_ASTERISK, KC_UP, KC_KP_DOT, KC_KP_3, KC_KP_6, KC_KP_9, KC_KP_ASTERISK, KC_UP, \ + KC_KP_ENTER, KC_TAB, KC_KP_MINUS, KC_KP_PLUS, KC_BSPACE, KC_RIGHT, KC_KP_ENTER, KC_TAB, KC_KP_MINUS, KC_KP_PLUS, KC_BSPACE, KC_RIGHT\ ), /* Adjust (Lower + Raise) * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | + * | | | | | | | | | | | | Del | * |------+------+------+------+------+-------------+------+------+------+------+------| * | | | |Aud on|Audoff|AGnorm|AGswap| | | | | | * |------+------+------+------+------+------|------+------+------+------+------+------| * | | | | | | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | RESET RESET | | | | |RGB_MOD| + * | | | | | | RESET RESET | | | | |RGBMOD| * `-----------------------------------------------------------------------------------' */ [_ADJUST] = LAYOUT_ortho_4x12( \ diff --git a/keyboards/vitamins_included/matrix.c b/keyboards/vitamins_included/matrix.c index d44e70f08ee..df3e86985bb 100644 --- a/keyboards/vitamins_included/matrix.c +++ b/keyboards/vitamins_included/matrix.c @@ -131,7 +131,7 @@ uint8_t matrix_cols(void) { } bool has_usb(void) { - return UDADDR & _BV(ADDEN); // This will return true of a USB connection has been established + return UDADDR & _BV(ADDEN); // This will return true if a USB connection has been established } void matrix_init(void) diff --git a/keyboards/vitamins_included/readme.md b/keyboards/vitamins_included/readme.md index 84bab9007c6..5702fe3430f 100644 --- a/keyboards/vitamins_included/readme.md +++ b/keyboards/vitamins_included/readme.md @@ -1,126 +1,44 @@ -Let's Split Vitamins Included -====== -![Let's Split Vitamins included, assmebled in 3D printed case](https://i.imgur.com/btl0vNQ.jpg) - -This readme and most of the code are from https://github.com/ahtn/tmk_keyboard/ - - -**Hardware files for the Let's Split vitamins included are stored [here](http://github.com/duckle29/let-s-Split-v2/tree/onboardMCU)** - -## First Time Setup - -Clone the `qmk_firmware` repo and navigate to its top level directory. [Once your build environment is setup](https://docs.qmk.fm/getting_started_build_tools.html), you'll be able to generate the default .hex using the [build/compile instructions](https://docs.qmk.fm/build-compile-instructions) in the docs - -If everything worked correctly you will see a file: +# Let's Split Vitamins Included -```bash -lets_split_vitamins_rev1_YOUR_KEYMAP_NAME.hex -``` - -If you want, you can flash the hex file to the keyboard right after compilation, by adding `:avrdude` to the end of the make command like so: +![Let's Split Vitamins included, assmebled in 3D printed case](https://i.imgur.com/btl0vNQ.jpg) -```bash -make lets_split_vitamins/rev1:default:avrdude -``` +This readme and most of the code are from the lets split readme -This will both compile the hex, and flash the connected half. +## Quick links -For more information on customizing keymaps, take a look at the primary documentation for [Customizing Your Keymap](/readme.md##customizing-your-keymap) in the main readme.md. +[REV1](./rev1/readme.md) +[REV2](./rev2/readme.md) +## Hardware -Features --------- +Hardware files for the Let's Split vitamins included are stored [here](https://git.io/vita-inc) -For the full Quantum Mechanical Keyboard feature list, see [the parent readme.md](/readme.md). +## Features Some features supported by the firmware: -* Either half can connect to the computer via USB, or both halves can be used - independently. -* You only need 3 wires to connect the two halves. One for VCC, one for GND and one - for serial communication. +* Either half can connect to the computer via USB, or both halves can be used independently. * Optional support for I2C connection between the two halves if for some - reason you require a faster connection between the two halves. Note this - requires an extra wire between halves and pull-up resistors on the data lines. - This is supported on the vitamins included. - The extra data line can also be used for ws2812 type LEDs. - If neither I2C nor RGB underglow is used, a TRS cable can be used instead of the 4wire TRRS cables. - -Required Hardware ------------------ + reason you require a faster connection between the two halves. Note that this requires 4 conductors between halves, and as such requires a TRRS cable. + +## Required Hardware + |Amount| Description | |--|--| | 1 | PCB kit from novelkeys | | 48 | MX compatible switches | | 48 | 1U keycaps -| 2 | Half cases. A 3D model for the left half is available [here](https://cad.onshape.com/documents/c6e5ae250d1e24fe46c9ef6c/w/d69f7049c0921df3d2b241f9/e/ecc2b176ab52a6d77bc55051). Mirror that to get a right-half case. Plate cases will be designed in the future. -| 1 | USB-mini-B cable of your choice | +| 1 | Mini-usb-B cable or USB-C cable for rev2. Keep in mind rev2.0 doesn't work with USB-C <> USB-C cables| | 1 | TRS / TRRS cable -Optional Hardware ------------------ +## Optional Hardware -A speaker can be hooked-up to the footprint on the PCBs. It is already enabled in the default firmware from github. - -A strip of WS2812 LEDs can be hooked up too, a guide will be written on how to do that once I get mine in the mail. -The PCB and connectors can safely handle 1A of current, but the USB standard is only rated at 500mA. Keep that in mind when picking the amount of LEDs. +A speaker can be hooked-up to the footprint on the PCBs. It is already enabled in the default firmware. +WS2812 LEDs can be added to the board. Check the different revision readme for specifics. ## Using I2C On the left half PCB, there's two pads labled ***I2C Pullup*** if you want to use I2C, you need to bridge those two solder jumpers with a soldering iron. You can change your configuration between serial and i2c by modifying your `config.h` file. - -Notes on Software Configuration -------------------------------- - -Configuring the firmware is similar to any other QMK project. One thing -to note is that `MATRIX_ROWS` in `config.h` is the total number of rows between -the two halves, so because the let's split vitamins included has 4 rows in each half, it's -`MATRIX_ROWS=8`. - -Also, the current implementation assumes a maximum of 8 columns, but it would -not be very difficult to adapt it to support more if required. - - -## Entering bootloader -If the keyboard isn't new, and has been flashed before, you need to enter bootloader. -To enter bootloader, either use the assigned keys on the keymap, or if none have been put in the keymap, quickly short the reset to gnd twice. (Bottom pins of programming header, see image) ![Reset pins](https://i.imgur.com/LCXlv9W.png) - -If using the default keymap, there's a reset key-combination on each half: -***Lower (SW23) and left-shift (SW13)*** on the left half, or -***Raise(SW44) and Enter(SW42)*** on the right half -It is recommended to add such reset keys to any custom keymaps. It shouldn't be necesarry to have one on each half, but the default layout has that. - -The board exits bootloader mode after 8 seconds, if you haven't started flashing. - -## EEPROM - -If this is the first time you're flashing the boards, you have to flash EEPROM - -0. If your keyboard is plugged in, unplug it -1. Open a terminal, and navigate to the qmk_firmware folder -2. Run `ls /dev | grep tty` Note down which ports you see -2. Plug the keyboard in, if it's new, it should enter bootloader, if it's not new, see **Entering bootloader** on how to enter bootloader mode -4. Right after entering bootloader, run `ls /dev | grep tty` again. There should be a new tty, this is the bootloader TTY, note it down. If nothing shows see **Entering bootloader** on how to enter bootloader mode -6. For the left hand side, run `avrdude -c avr109 -p m32u4 -P /dev/ttyS1 -U eeprom:w:"./quantum/split_common/eeprom-lefthand.eep":a` -Replace ***/dev/ttyS1*** with the port you noted down earlier. If you're on windows using msys2, replace ***/dev/ttyS1*** with COM2, note that the number is one higher than the tty number. -Do the same For the right hand, but change the file to ***eeprom-righthand.eep*** - -Your EEPROM should be flashed :) - -In the future, you shouldn't need to flash EEPROM (it will in fact wear the eeprom memory, so don't) - -## Flashing -If you haven't flashed EEPROM before, do that first. - -To flash keymaps onto the keyboard, use: -```bash -make lets_split_vitamins/rev1:[KEYMAP]:avrdude -``` -from the qmk_firmware folder. Default being the default keymap. - -You can plug either half into USB and it will work. you can also remove the TRS/TRRS cable, and plug both halves in. (which is why the default layout has reset on both halves) - -Enjoy your keyboard! :D diff --git a/keyboards/vitamins_included/rev1/config.h b/keyboards/vitamins_included/rev1/config.h index f4e5666fefd..39b6a9ff401 100644 --- a/keyboards/vitamins_included/rev1/config.h +++ b/keyboards/vitamins_included/rev1/config.h @@ -16,17 +16,14 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef REV1_CONFIG_H -#define REV1_CONFIG_H +#pragma once #include "config_common.h" -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xBEE5 -#define PRODUCT_ID 0xF33D +#define EE_HANDS + +/* USB Device descriptor parameters */ #define DEVICE_VER 0x0001 -#define MANUFACTURER Duckle29 -#define PRODUCT Lets Split sockets vitamins included #define DESCRIPTION A split keyboard for the cheapish makers /* key matrix size */ @@ -80,5 +77,3 @@ along with this program. If not, see . //#define NO_ACTION_ONESHOT //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/vitamins_included/rev1/readme.md b/keyboards/vitamins_included/rev1/readme.md new file mode 100644 index 00000000000..038f14f5d03 --- /dev/null +++ b/keyboards/vitamins_included/rev1/readme.md @@ -0,0 +1,81 @@ +# Rev1 + +This readme describes the specifics of using the rev1 design + +## First Time Setup + +Clone the `qmk_firmware` repo and navigate to its top level directory. [Once your build environment is setup](https://docs.qmk.fm/getting_started_build_tools.html), you'll be able to generate the default .hex using the [build/compile instructions](https://docs.qmk.fm/build-compile-instructions) in the docs + +If everything worked correctly you will see a file: + +```bash +lets_split_vitamins_rev1_YOUR_KEYMAP_NAME.hex +``` + +If you want, you can flash the hex file to the keyboard right after compilation, by adding `:avrdude` to the end of the make command like so: + +```bash +make lets_split_vitamins/rev1:default:avrdude +``` + +This will both compile the hex, and flash the connected half. + +For more information on customizing keymaps, take a look at the primary documentation for [Customizing Your Keymap](/readme.md##customizing-your-keymap) in the main readme.md. + +## Entering bootloader + +If the keyboard isn't new, and has been flashed before, you need to enter bootloader. +To enter bootloader, either use the assigned keys on the keymap, or if none have been put in the keymap, quickly short the reset to gnd twice. (Bottom pins of programming header, see image) ![Reset pins](https://i.imgur.com/LCXlv9W.png) + +If using the default keymap, there's a reset key-combination on each half: +***Lower (SW23) and left-shift (SW13)*** on the left half, or +***Raise(SW44) and Enter(SW42)*** on the right half +It is recommended to add such reset keys to any custom keymaps. It shouldn't be necesarry to have one on each half, but the default layout has that. + +The board exits bootloader mode after 8 seconds, if you haven't started flashing. + +## EEPROM + +If this is the first time you're flashing the boards, you have to flash EEPROM + +0. If your keyboard is plugged in, unplug it +1. Open a terminal, and navigate to the qmk_firmware folder +1. Run `ls /dev | grep tty` Note down which ports you see +1. Plug the keyboard in, if it's new, it should enter bootloader, if it's not new, see **Entering bootloader** on how to enter bootloader mode +1. Right after entering bootloader, run `ls /dev | grep tty` again. There should be a new tty, this is the bootloader TTY, note it down. If nothing shows see **Entering bootloader** on how to enter bootloader mode +1. For the left hand side, run `avrdude -c avr109 -p m32u4 -P /dev/ttyS1 -U eeprom:w:"./quantum/split_common/eeprom-lefthand.eep":a` +Replace ***/dev/ttyS1*** with the port you noted down earlier. If you're on windows using msys2, replace ***/dev/ttyS1*** with COM2, note that the number is one higher than the tty number. +Do the same For the right hand, but change the file to ***eeprom-righthand.eep*** + +Your EEPROM should be flashed :) + +In the future, you shouldn't need to flash EEPROM (it will in fact wear the eeprom memory, so don't) + +## Flashing + +If you haven't flashed EEPROM before, do that first. + +To flash keymaps onto the keyboard, use: + +```bash +make lets_split_vitamins/rev1:[KEYMAP]:avrdude +``` + +from the qmk_firmware folder. Default being the default keymap. + +## Cases + +The keyboard is supplied with some simple plate cases, alternatively a 3D model for the left half is available [here](https://cad.onshape.com/documents/c6e5ae250d1e24fe46c9ef6c/w/d69f7049c0921df3d2b241f9/e/ecc2b176ab52a6d77bc55051). + +Alternatively the flat case for the Rev2 works for the rev1 kit as well, however one of the supports collide with a diode. If printed in thermo-plastics this can be heated and pressed to form a recess for the diode. + +## WS2812 RGB + +If you wish to add RGB LED strips to your board, then the boards have breakouts for these. +You can either have each halfcontrol it's own strip of LEDs, or, if you're using a TRRS cable, you can have one half control the LEDs in both halves. + +To add RGB LEDs to the board, solder the + and - of the >WS2812 headers to the LED strips. Then if you want each half to control it's own set of LEDs seperately, solder the D pad to Din on the strips. + +If you instead want to syncronize the halves over a TRRS cable, solder the D pad to Din in the side you want to control the strips, either will work so flip a coin, and then solder the Dout pad to the WS2812> pad on the board. On the other half, solder the WS2812> pad to Din. + +![pad legend](https://i.imgur.com/g6ane0Q.jpg) diff --git a/keyboards/vitamins_included/rev1/rev1.h b/keyboards/vitamins_included/rev1/rev1.h index ee97e09cfde..53ae64a6ea9 100644 --- a/keyboards/vitamins_included/rev1/rev1.h +++ b/keyboards/vitamins_included/rev1/rev1.h @@ -1,36 +1,3 @@ -#ifndef REV1_H -#define REV1_H -#define EE_HANDS // This isn't optional for the vitamins included +#pragma once #include QMK_KEYBOARD_H - -#include "quantum.h" - - -#ifdef USE_I2C -#include -#ifdef __AVR__ - #include - #include -#endif -#endif - -#define KEYMAP( \ - L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ - L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ - L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ - L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \ - ) \ - { \ - { L00, L01, L02, L03, L04, L05 }, \ - { L10, L11, L12, L13, L14, L15 }, \ - { L20, L21, L22, L23, L24, L25 }, \ - { L30, L31, L32, L33, L34, L35 }, \ - { R00, R01, R02, R03, R04, R05 }, \ - { R10, R11, R12, R13, R14, R15 }, \ - { R20, R21, R22, R23, R24, R25 }, \ - { R30, R31, R32, R33, R34, R35 } \ - } - -#define LAYOUT_ortho_4x12 KEYMAP -#endif diff --git a/keyboards/vitamins_included/rev1/rules.mk b/keyboards/vitamins_included/rev1/rules.mk index 0542810ee6e..b500c8f278b 100644 --- a/keyboards/vitamins_included/rev1/rules.mk +++ b/keyboards/vitamins_included/rev1/rules.mk @@ -1,5 +1,9 @@ -BACKLIGHT_ENABLE = no -AUDIO_ENABLE = yes -RGBLIGHT_ENABLE = yes -DEBUG_ENABLE = no -CONSOLE_ENABLE = no +SRC += matrix.c \ + split_util.c \ + ssd1306.c + +QUANTUM_LIB_SRC += i2c.c \ + serial.c \ + +CUSTOM_MATRIX = yes +BOOTLOADER = caterina diff --git a/keyboards/vitamins_included/rev2/config.h b/keyboards/vitamins_included/rev2/config.h new file mode 100644 index 00000000000..4ae02e86e66 --- /dev/null +++ b/keyboards/vitamins_included/rev2/config.h @@ -0,0 +1,81 @@ +/* +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert +Copyright 2019 Mikkel Jeppesen + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +#include "config_common.h" + +#define SPLIT_HAND_PIN B4 +#define SOFT_SERIAL_PIN D0 + +/* USB Device descriptor parameter */ +#define DEVICE_VER 0x0002 +#define DESCRIPTION A toolless split keyboard for the cheapish makers + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 8 +#define MATRIX_COLS 6 + +// wiring of each half +#define MATRIX_ROW_PINS { F5, F6, C7, F7 } +#define MATRIX_COL_PINS { F1, F4, E2, B6, D7, D6} + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +// #define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* ws2812 RGB LED */ +#define RGB_DI_PIN F0 + +#define RGBLED_NUM 12 // Number of LEDs +#define RGBLIGHT_ANIMATIONS + +/* Audio settings */ +#ifdef AUDIO_ENABLE + #define C6_AUDIO // Define this to enable the buzzer +#endif + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION diff --git a/keyboards/vitamins_included/rev2/readme.md b/keyboards/vitamins_included/rev2/readme.md new file mode 100644 index 00000000000..3e202b64e06 --- /dev/null +++ b/keyboards/vitamins_included/rev2/readme.md @@ -0,0 +1,10 @@ +# Rev2 + +Revision 2 is documented [on qmk.fm](https://qmk.fm/keyboards/vitamins_included/) + +Key differences between rev1 and rev2: + +* rev2 uses qmk-dfu bootloader +* rev2 uses a USB-C connector +* rev2 6 WS2812 LEDs factory mounted to each half +* rev2 has more mounting holes. 1 additional M3, and 4 additional M2.5 holes diff --git a/keyboards/vitamins_included/rev2/rev2.c b/keyboards/vitamins_included/rev2/rev2.c new file mode 100644 index 00000000000..7bdeebb03c5 --- /dev/null +++ b/keyboards/vitamins_included/rev2/rev2.c @@ -0,0 +1,31 @@ +#include "rev2.h" + + +#ifdef SSD1306OLED +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + led_set_user(usb_led); +} +#endif + +bool is_keyboard_left(void) { + #if defined(MASTER_LEFT) + return is_keyboard_master(); + #elif defined(MASTER_RIGHT) + return !is_keyboard_master(); + #elif defined(SPLIT_HAND_PIN) + // Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand + setPinInputHigh(SPLIT_HAND_PIN); + bool x = !readPin(SPLIT_HAND_PIN); + setPinInput(SPLIT_HAND_PIN); + return x; + #elif defined(EE_HANDS) + return eeprom_read_byte(EECONFIG_HANDEDNESS); + #endif + + return is_keyboard_master(); +} + +void matrix_init_kb(void) { + matrix_init_user(); +}; diff --git a/keyboards/vitamins_included/rev2/rev2.h b/keyboards/vitamins_included/rev2/rev2.h new file mode 100644 index 00000000000..7e12888dda4 --- /dev/null +++ b/keyboards/vitamins_included/rev2/rev2.h @@ -0,0 +1,2 @@ +#pragma once +#include QMK_KEYBOARD_H diff --git a/keyboards/vitamins_included/rev2/rules.mk b/keyboards/vitamins_included/rev2/rules.mk new file mode 100644 index 00000000000..3d8bbe0f619 --- /dev/null +++ b/keyboards/vitamins_included/rev2/rules.mk @@ -0,0 +1,2 @@ +SPLIT_KEYBOARD = yes # Rev2 uses split_common +BOOTLOADER = qmk-dfu diff --git a/keyboards/vitamins_included/rules.mk b/keyboards/vitamins_included/rules.mk index 34f423f59dd..761df0357b0 100644 --- a/keyboards/vitamins_included/rules.mk +++ b/keyboards/vitamins_included/rules.mk @@ -1,76 +1,28 @@ -SRC += matrix.c \ - i2c.c \ - split_util.c \ - serial.c \ - ssd1306.c - # MCU name MCU = atmega32u4 -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Bootloader -# This definition is optional, and if your keyboard supports multiple bootloaders of -# different sizes, comment this out, and the correct address will be loaded -# automatically (+60). See bootloader.mk for all options. -BOOTLOADER = caterina - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - # Build Options # change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = no # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. +AUDIO_ENABLE = yes # Audio output on port C6 +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +COMMAND_ENABLE = no # Commands for debug and configuration +CONSOLE_ENABLE = no # Console for debug(+400) +DEBUG_ENABLE = no # Enable more debug info +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +MIDI_ENABLE = no # MIDI controls +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. +UNICODE_ENABLE = no # Unicode # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - -CUSTOM_MATRIX = yes +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend LAYOUTS = ortho_4x12 -DEFAULT_FOLDER = vitamins_included/rev1 +DEFAULT_FOLDER = vitamins_included/rev2 -EXTRAFLAGS += -flto +LINK_TIME_OPTIMIZATION_ENABLE = yes \ No newline at end of file diff --git a/keyboards/vitamins_included/serial.h b/keyboards/vitamins_included/serial.h index ade7620b7f4..53b3a3bf0bf 100644 --- a/keyboards/vitamins_included/serial.h +++ b/keyboards/vitamins_included/serial.h @@ -1,5 +1,4 @@ -#ifndef MY_SERIAL_H -#define MY_SERIAL_H +#pragma once #include "config.h" #include @@ -24,4 +23,3 @@ void serial_slave_init(void); int serial_update_buffers(void); bool serial_slave_data_corrupt(void); -#endif diff --git a/keyboards/vitamins_included/split_util.c b/keyboards/vitamins_included/split_util.c index b86ad137bf2..4a898cd7ba7 100644 --- a/keyboards/vitamins_included/split_util.c +++ b/keyboards/vitamins_included/split_util.c @@ -14,6 +14,14 @@ volatile bool isLeftHand = true; volatile bool contacted_by_master = false; +bool is_rev2(void) // Input with pullup, if rev2, pin is pulled down with 220R resistor. +{ + setPinInputHigh(B5); + bool rev2 = !readPin(B5); + setPinInput(B5); + return rev2; +} + // this code runs before the usb and keyboard is initialized void matrix_setup(void) { isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS); diff --git a/keyboards/vitamins_included/split_util.h b/keyboards/vitamins_included/split_util.h index 5acf386e4f9..da7be515596 100644 --- a/keyboards/vitamins_included/split_util.h +++ b/keyboards/vitamins_included/split_util.h @@ -1,8 +1,8 @@ -#ifndef SPLIT_KEYBOARD_UTIL_H -#define SPLIT_KEYBOARD_UTIL_H +#pragma once #include #include "eeconfig.h" +#include "quantum.h" #define SLAVE_I2C_ADDRESS 0x32 @@ -10,9 +10,7 @@ extern volatile bool isLeftHand; extern volatile bool contacted_by_master; bool has_usb(void); +bool is_rev2(void); // slave version of matix scan, defined in matrix.c void matrix_slave_scan(void); - - -#endif diff --git a/keyboards/vitamins_included/vitamins_included.h b/keyboards/vitamins_included/vitamins_included.h index b5fbd52940e..4cdfe03eddf 100644 --- a/keyboards/vitamins_included/vitamins_included.h +++ b/keyboards/vitamins_included/vitamins_included.h @@ -1,13 +1,40 @@ -#ifndef VITAMINS_INCLUDED_H -#define VITAMINS_INCLUDED_H +#pragma once #include "quantum.h" -#include "rev1.h" +#ifdef KEYBOARD_vitamins_included_rev1 + #include "rev1.h" +#else + #include "rev2.h" +#endif + +#ifdef USE_I2C +#include +#ifdef __AVR__ + #include + #include +#endif +#endif +#define LAYOUT( \ + L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ + L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ + L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ + L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \ + ) \ + { \ + { L00, L01, L02, L03, L04, L05 }, \ + { L10, L11, L12, L13, L14, L15 }, \ + { L20, L21, L22, L23, L24, L25 }, \ + { L30, L31, L32, L33, L34, L35 }, \ + { R00, R01, R02, R03, R04, R05 }, \ + { R10, R11, R12, R13, R14, R15 }, \ + { R20, R21, R22, R23, R24, R25 }, \ + { R30, R31, R32, R33, R34, R35 } \ + } // Used to create a keymap using only KC_ prefixed keys -#define KC_KEYMAP( \ +#define LAYOUT_kc( \ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ @@ -20,6 +47,6 @@ KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35 \ ) -#define KC_LAYOUT_ortho_4x12 KC_KEYMAP - -#endif +#define KC_LAYOUT_ortho_4x12 LAYOUT_kc +#define LAYOUT_ortho_4x12 LAYOUT +#define KC_KEYMAP LAYOUT_kc