From c037d4bb306613085a823e73f37653f1e71c0f0d Mon Sep 17 00:00:00 2001 From: Jon Allen Date: Thu, 12 Oct 2017 23:51:21 -0500 Subject: [PATCH] Add the Tomato keyboard --- keyboards/tomato/config.h | 51 +++++++ keyboards/tomato/keymaps/default/keymap.c | 158 ++++++++++++++++++++++ keyboards/tomato/readme.md | 20 +++ keyboards/tomato/rules.mk | 56 ++++++++ keyboards/tomato/tomato.c | 1 + keyboards/tomato/tomato.h | 18 +++ 6 files changed, 304 insertions(+) create mode 100644 keyboards/tomato/config.h create mode 100644 keyboards/tomato/keymaps/default/keymap.c create mode 100644 keyboards/tomato/readme.md create mode 100644 keyboards/tomato/rules.mk create mode 100644 keyboards/tomato/tomato.c create mode 100644 keyboards/tomato/tomato.h diff --git a/keyboards/tomato/config.h b/keyboards/tomato/config.h new file mode 100644 index 00000000..f33c1310 --- /dev/null +++ b/keyboards/tomato/config.h @@ -0,0 +1,51 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER 40 Percent Club +#define PRODUCT Tomato +#define DESCRIPTION A 30 key ortholinear keyboard with RGB backlighting + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 6 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { F7, B1, B3, B2, B6 } +#define MATRIX_COL_PINS { B4, E6, D7, C6, D4, D0 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* prevent stuck modifiers */ +#define PREVENT_STUCK_MODIFIERS + +/* eliminate lag on space cadet mods */ +#define PERMISSIVE_HOLD + +/* setup lighting */ +#define RGB_DI_PIN B5 +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 30 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 + +#endif diff --git a/keyboards/tomato/keymaps/default/keymap.c b/keyboards/tomato/keymaps/default/keymap.c new file mode 100644 index 00000000..26335b71 --- /dev/null +++ b/keyboards/tomato/keymaps/default/keymap.c @@ -0,0 +1,158 @@ +#include "tomato.h" + +#define SPC_F1 LT(1,KC_SPC) +#define BS_F2 LT(2,KC_BSPC) +#define C_F3 LT(3,KC_C) +#define V_F4 LT(4,KC_V) +#define B_F5 LT(5,KC_B) +#define Z_CTL MT(MOD_LCTL, KC_Z) +#define X_ALT MT(MOD_LALT, KC_X) +#define N_ALT MT(MOD_RALT, KC_N) +#define M_CTL MT(MOD_RCTL, KC_M) +#define ENT_SFT MT(MOD_RSFT, KC_ENT) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Level 0: Default Layer + * ,-------------------------------------------------------------------------------. + * | Q | W | E | R | T | Y | U | I | O | P | + * |-------------------------------------------------------------------------------| + * | A | S | D | F | G | H | J | K | L | ESC | + * |-------------------------------------------------------------------------------| + * | Z | X | C | V | BSPC | SPC | B | N | M | ENT | + * '-------------------------------------------------------------------------------' + */ + KEYMAP + ( 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_ESC + , Z_CTL, X_ALT, C_F3, V_F4, BS_F2, SPC_F1, B_F5, N_ALT, M_CTL, ENT_SFT + ), + /* Level 1: Numbers Layer + * ,-------------------------------------------------------------------------------. + * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | + * |-------------------------------------------------------------------------------| + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | + * |-------------------------------------------------------------------------------| + * | | | | | DEL | | | | | | + * '-------------------------------------------------------------------------------' + */ + KEYMAP + ( KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0 + , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 + , KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_DEL, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS + ), + /* Level 2: Symbols Layer + * ,-------------------------------------------------------------------------------. + * | ! | @ | # | $ | % | ^ | & | * | ( | ) | + * |-------------------------------------------------------------------------------| + * | F11 | F12 | | | | | | | | ` | + * |-------------------------------------------------------------------------------| + * | | | | | | | | | | | + * '-------------------------------------------------------------------------------' + */ + KEYMAP + ( KC_EXLM,KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN + , KC_F11, KC_F12,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_GRAVE + , KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS + ), + /* Level 3: RGB Layer + * ,-------------------------------------------------------------------------------. + * | | | | | | - | = | [ | ] | \ | + * |-------------------------------------------------------------------------------| + * | Tab | | | | | , | . | / | ; | ' | + * |-------------------------------------------------------------------------------| + * | | | | | | | Left | Down | Up | Right | + * '-------------------------------------------------------------------------------' + */ + KEYMAP + ( KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_MINS,KC_EQL, KC_LBRC,KC_RBRC,KC_BSLS + , KC_TAB, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_COMM,KC_DOT, KC_SLSH,KC_SCLN,KC_QUOT + , KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_UP, KC_RGHT + ), + /* Level 4: RGB Layer + * ,-------------------------------------------------------------------------------. + * | | | | | | _ | + | { | } | | | + * |-------------------------------------------------------------------------------| + * | Tab | | | | | < | > | ? | : | " | + * |-------------------------------------------------------------------------------| + * | | | | | | | Home | PgDn | PgUp | End | + * '-------------------------------------------------------------------------------' + */ + KEYMAP + ( KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_UNDS,KC_PLUS,KC_LCBR,KC_RCBR,KC_PIPE + , KC_TAB, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_LT, KC_GT, KC_QUES,KC_COLN,KC_DQUO + , KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_HOME,KC_PGUP,KC_PGDN,KC_END + ), + /* Level 5: RGB Layer + * ,-------------------------------------------------------------------------------. + * | Calc | Web | Mail |Explore| | | | | | | + * |-------------------------------------------------------------------------------| + * |RGB_TOG|RGB_MOD|RGB_HUI|RGB_HUD|xxxxxxx|xxxxxxx|RGB_SAI|RGB_SAD|RGB_VAI|RGB_VAD| + * |-------------------------------------------------------------------------------| + * | | | | | Flash | | | | | | + * '-------------------------------------------------------------------------------' + */ + KEYMAP + ( KC_CALC,KC_WSCH,KC_MAIL,KC_MYCM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS + , RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,KC_NO, KC_NO, RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD + , KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS + ), +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_COMPOSE)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_KANA)) { + + } else { + + } + +} diff --git a/keyboards/tomato/readme.md b/keyboards/tomato/readme.md new file mode 100644 index 00000000..fb380899 --- /dev/null +++ b/keyboards/tomato/readme.md @@ -0,0 +1,20 @@ +Tomato +=== + +A 30 key keyboard with programmable rgb backlighting. + +* [The fluff](http://www.40percent.club/2017/07/tomato-in-gherkin.html) +* [The meat](https://github.com/di0ib/Misc/tree/master/tomato) + +Keyboard Maintainer: QMK Community +Hardware Supported: Tomato PCB +Hardware Availability: [Gherkin project on 40% Keyboards](http://www.40percent.club/2017/07/tomato-in-gherkin.html) + +Make example for this keyboard (after setting up your build environment): + + make tomato-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. + +First pass at adding support for the tomato keyboard. Completely +untested. Intended to kick-start development. diff --git a/keyboards/tomato/rules.mk b/keyboards/tomato/rules.mk new file mode 100644 index 00000000..482f99b2 --- /dev/null +++ b/keyboards/tomato/rules.mk @@ -0,0 +1,56 @@ +# 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) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # 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 +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB 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 +AUDIO_ENABLE = no +RGBLIGHT_ENABLE = yes diff --git a/keyboards/tomato/tomato.c b/keyboards/tomato/tomato.c new file mode 100644 index 00000000..dbf8bfe1 --- /dev/null +++ b/keyboards/tomato/tomato.c @@ -0,0 +1 @@ +#include "tomato.h" diff --git a/keyboards/tomato/tomato.h b/keyboards/tomato/tomato.h new file mode 100644 index 00000000..ebb2303a --- /dev/null +++ b/keyboards/tomato/tomato.h @@ -0,0 +1,18 @@ +#ifndef GHERKIN_H +#define GHERKIN_H + +#include "quantum.h" + +#define KEYMAP( \ + K00, K01, K02, K03, K04, K05, K10, K11, K12, K13 , \ + K14, K15, K20, K21, K22, K23, K24, K25, K30, K31 , \ + K32, K33, K34, K35, K40, K41, K42, K43, K44, K45 \ +) { \ + { K00, K01, K02, K03, K04, K05 }, \ + { K10, K11, K12, K13, K14, K15 }, \ + { K20, K21, K22, K23, K24, K25 }, \ + { K30, K31, K32, K33, K34, K35 }, \ + { K40, K41, K42, K43, K44, K45 } \ +} + +#endif