~ruther/qmk_firmware

f3b518ae4082bd49335c1b60d2cfe89a500ad878 — Kyle 5 years ago b70ac59
[Keyboard] Added a new handwired 2x3,2x4,2x5 keyboard called the Stream_cheap (#9871)

* Added a new handwired 2x3,2x4,2x5 keyboard called the Stream_cheap

stream cheap is a diy version of the El Gato Stream deck minus the LCD keys
but you can always get relegendable keycaps to change the icon if you want

* added missing commas in info.json files

* update config to change pin definition

* changed keymap.c for 2x4

was trying to add macros and multi key commands to the keymap,

i added 2 ctrl commands that have more than one key i.e. ctrl-k-c (visual studio comment hot key)

and i added a test string to see how type out a string with the press of a button

* testing more changes to the keymap to the 2x5

* Update keyboards/handwired/stream_cheap/2x3/2x3.c

* Update keyboards/handwired/stream_cheap/2x3/config.h

* Update keyboards/handwired/stream_cheap/2x3/rules.mk

* Update keyboards/handwired/stream_cheap/2x5/config.h

* Update keyboards/handwired/stream_cheap/2x5/info.json

* Update keyboards/handwired/stream_cheap/2x3/config.h

* Update keyboards/handwired/stream_cheap/2x3/info.json

* Update keyboards/handwired/stream_cheap/2x4/config.h

* Update keyboards/handwired/stream_cheap/2x4/info.json

* Update keyboards/handwired/stream_cheap/2x4/keymaps/default/keymap.c

* Update keyboards/handwired/stream_cheap/2x5/info.json

* Update keyboards/handwired/stream_cheap/2x5/config.h

* Update keyboards/handwired/stream_cheap/2x5/rules.mk

* Update keyboards/handwired/stream_cheap/2x4/2x4.c

* Update keyboards/handwired/stream_cheap/2x4/config.h

* Update keyboards/handwired/stream_cheap/2x4/info.json

* Update keyboards/handwired/stream_cheap/2x5/2x5.c

* Update keyboards/handwired/stream_cheap/2x4/rules.mk

* removed file as per request of user zvecr

* removed line in rules.mk for 2x5

* Update keyboards/handwired/stream_cheap/2x5/keymaps/default/keymap.c

* Apply suggestions from code review

changes suggested in code review
A keyboards/handwired/stream_cheap/2x3/2x3.c => keyboards/handwired/stream_cheap/2x3/2x3.c +1 -0
@@ 0,0 1,1 @@
#include "2x3.h"

A keyboards/handwired/stream_cheap/2x3/2x3.h => keyboards/handwired/stream_cheap/2x3/2x3.h +11 -0
@@ 0,0 1,11 @@
#pragma once

#include "quantum.h"

#define LAYOUT_ortho_2x3( \
	K00, K01, K02, \
	K03, K04, K05  \
) { \
	{ K00,   K01,   K02}, \
	{ K03,   K04,   K05}  \
}

A keyboards/handwired/stream_cheap/2x3/config.h => keyboards/handwired/stream_cheap/2x3/config.h +27 -0
@@ 0,0 1,27 @@
#pragma once

#include "config_common.h"

/* USB Device descriptor parameter */
#define VENDOR_ID       0xFEED
#define PRODUCT_ID      0x1213
#define DEVICE_VER      0x0001
#define MANUFACTURER    Kyle Hart
#define PRODUCT         Stream Cheap 2x3

/* key matrix size */
#define MATRIX_ROWS 2
#define MATRIX_COLS 3

/* define direct pins used */
#define DIRECT_PINS { { D1,C6,B4}, { D0,D4,D7} }


/* 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

A keyboards/handwired/stream_cheap/2x3/info.json => keyboards/handwired/stream_cheap/2x3/info.json +19 -0
@@ 0,0 1,19 @@
{
    "keyboard_name": "Stream Cheap 2x3",
    "url": "https://www.thingiverse.com/thing:4497991",
    "maintainer": "qmk",
    "width": 3,
    "height": 2,
    "layouts": {
        "LAYOUT_ortho_2x3": {
            "layout": [
                {"label":"K00", "x":0, "y":0},
                {"label":"K01", "x":1, "y":0},
                {"label":"K02", "x":2, "y":0},
                {"label":"K03", "x":0, "y":1},
                {"label":"K04", "x":1, "y":1},
                {"label":"K05", "x":2, "y":1}
            ]
        }
    }
}

A keyboards/handwired/stream_cheap/2x3/keymaps/default/keymap.c => keyboards/handwired/stream_cheap/2x3/keymaps/default/keymap.c +21 -0
@@ 0,0 1,21 @@
#include QMK_KEYBOARD_H

enum layers {
  NORMAL_LAYER = 0,
   SECOND_LAYER
};



const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

    [NORMAL_LAYER] = LAYOUT_ortho_2x3(
        KC_1, KC_2, KC_3,
        KC_4, KC_5, TO(1)
    ),
    [SECOND_LAYER] = LAYOUT_ortho_2x3(
        KC_A, KC_B, KC_C,
        KC_D, KC_E, TO(0)
    )
};


A keyboards/handwired/stream_cheap/2x3/rules.mk => keyboards/handwired/stream_cheap/2x3/rules.mk +22 -0
@@ 0,0 1,22 @@
# MCU name
MCU = atmega32u4

# Bootloader selection
BOOTLOADER = caterina

# Build Options
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes       # Mouse keys
EXTRAKEY_ENABLE = yes       # Audio control and System control
CONSOLE_ENABLE = no         # Console for debug
COMMAND_ENABLE = no         # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = yes           # USB Nkey Rollover
BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no       # Enable Bluetooth
AUDIO_ENABLE = no           # Audio output

A keyboards/handwired/stream_cheap/2x4/2x4.c => keyboards/handwired/stream_cheap/2x4/2x4.c +1 -0
@@ 0,0 1,1 @@
#include "2x4.h"

A keyboards/handwired/stream_cheap/2x4/2x4.h => keyboards/handwired/stream_cheap/2x4/2x4.h +12 -0
@@ 0,0 1,12 @@
#pragma once

#include "quantum.h"

#define LAYOUT_ortho_2x4(\
	K00, K01, K02,K03, \
	K04, K05, K06,K07  \
) \
  { \
    { K00,K01,K02,K03}, \
	{ K04,K05,K06,K07}  \
}

A keyboards/handwired/stream_cheap/2x4/config.h => keyboards/handwired/stream_cheap/2x4/config.h +27 -0
@@ 0,0 1,27 @@
#pragma once

#include "config_common.h"

/* USB Device descriptor parameter */
#define VENDOR_ID       0xFEED
#define PRODUCT_ID      0x1214
#define DEVICE_VER      0x0001
#define MANUFACTURER    Kyle Hart
#define PRODUCT         Stream Cheap 2x4

/* key matrix size */
#define MATRIX_ROWS 2
#define MATRIX_COLS 4

/* define direct pins used */
#define DIRECT_PINS { { B5,D7,C6,D1}, { B4,E6,D4,D0} }


/* 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

A keyboards/handwired/stream_cheap/2x4/info.json => keyboards/handwired/stream_cheap/2x4/info.json +21 -0
@@ 0,0 1,21 @@
{
    "keyboard_name": "Stream Cheap 2x4",
    "url": "https://www.thingiverse.com/thing:4497991",
    "maintainer": "qmk",
    "width": 4,
    "height": 2,
    "layouts": {
        "LAYOUT_ortho_2x4": {
            "layout": [
                {"label":"K00", "x":0, "y":0},
                {"label":"K01", "x":1, "y":0},
                {"label":"K02", "x":2, "y":0},
                {"label":"K03", "x":3, "y":0},
                {"label":"K04", "x":0, "y":1},
                {"label":"K05", "x":1, "y":1},
                {"label":"K06", "x":2, "y":1},
                {"label":"K07", "x":3, "y":1}
            ]
        }
    }
}

A keyboards/handwired/stream_cheap/2x4/keymaps/default/keymap.c => keyboards/handwired/stream_cheap/2x4/keymaps/default/keymap.c +46 -0
@@ 0,0 1,46 @@
#include QMK_KEYBOARD_H


enum layers {
  NORMAL_LAYER = 0,
  SECOND_LAYER
};

enum custom_keycode {
    VS_COMMENT = SAFE_RANGE,
    VS_UNCOMMENT,
    TST_STRING
};


bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case VS_COMMENT:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTL("kc"));
            }
            break;
        case VS_UNCOMMENT:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTL("ku"));
            }
            break;
        case TST_STRING:
            if (record->event.pressed) {
                SEND_STRING("12345\n");
            }
            break;

    }
    return true;
}
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [NORMAL_LAYER] = LAYOUT_ortho_2x4(
        VS_COMMENT, VS_UNCOMMENT, TST_STRING, KC_4,
        KC_5,       KC_6,         KC_7,       TO(1)
    ),
    [SECOND_LAYER] = LAYOUT_ortho_2x4(
        KC_A, KC_B, KC_C, KC_D,
        KC_E, KC_F, KC_G, TO(0)
    )
};

A keyboards/handwired/stream_cheap/2x4/rules.mk => keyboards/handwired/stream_cheap/2x4/rules.mk +22 -0
@@ 0,0 1,22 @@
# MCU name
MCU = atmega32u4

# Bootloader selection
BOOTLOADER = caterina

# Build Options
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes       # Mouse keys
EXTRAKEY_ENABLE = yes       # Audio control and System control
CONSOLE_ENABLE = no         # Console for debug
COMMAND_ENABLE = no         # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = yes           # USB Nkey Rollover
BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no       # Enable Bluetooth
AUDIO_ENABLE = no           # Audio output

A keyboards/handwired/stream_cheap/2x5/2x5.c => keyboards/handwired/stream_cheap/2x5/2x5.c +1 -0
@@ 0,0 1,1 @@
#include "2x5.h"

A keyboards/handwired/stream_cheap/2x5/2x5.h => keyboards/handwired/stream_cheap/2x5/2x5.h +11 -0
@@ 0,0 1,11 @@
#pragma once

#include "quantum.h"

#define LAYOUT_ortho_2x5( \
	K00, K01, K02, K03, K04, \
	K10, K11, K12, K13, K14  \
) { \
	{ K00,   K01,   K02,   K03,   K04 }, \
	{ K10,   K11,   K12,   K13,   K14 }  \
}

A keyboards/handwired/stream_cheap/2x5/config.h => keyboards/handwired/stream_cheap/2x5/config.h +26 -0
@@ 0,0 1,26 @@
#pragma once

#include "config_common.h"

/* USB Device descriptor parameter */
#define VENDOR_ID       0xFEED
#define PRODUCT_ID      0x1215
#define DEVICE_VER      0x0001
#define MANUFACTURER    Kyle Hart
#define PRODUCT         Stream Cheap 2x5

/* key matrix size */
#define MATRIX_ROWS 2
#define MATRIX_COLS 5

/* define direct pins used */
#define DIRECT_PINS { { D1,C6,B4,B5,B2}, { D0,D4,D7,E6,B6} }
//#define DIRECT_PINS { { D1, C6, B4, B6, D0}, { D7, D4, B2, B5, E6} }
/* 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

A keyboards/handwired/stream_cheap/2x5/info.json => keyboards/handwired/stream_cheap/2x5/info.json +23 -0
@@ 0,0 1,23 @@
{
    "keyboard_name": "Stream Cheap 2x5",
    "url": "https://www.thingiverse.com/thing:4497991",
    "maintainer": "qmk",
    "width": 5,
    "height": 2,
    "layouts": {
        "LAYOUT_ortho_2x5": {
            "layout": [
                {"label":"K00", "x":0, "y":0},
                {"label":"K01", "x":1, "y":0},
                {"label":"K02", "x":2, "y":0},
                {"label":"K03", "x":3, "y":0},
                {"label":"K04", "x":4, "y":0},
                {"label":"K10", "x":0, "y":1},
                {"label":"K11", "x":1, "y":1},
                {"label":"K12", "x":2, "y":1},
                {"label":"K13", "x":3, "y":1},
                {"label":"K14", "x":4, "y":1}
            ]
        }
    }
}

A keyboards/handwired/stream_cheap/2x5/keymaps/default/keymap.c => keyboards/handwired/stream_cheap/2x5/keymaps/default/keymap.c +60 -0
@@ 0,0 1,60 @@
#include QMK_KEYBOARD_H


enum custom_keycode {
    VS_COMMENT = SAFE_RANGE,
    VS_UNCOMMENT,
    TST_STRING
};


bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case VS_COMMENT:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTL("kc"));
            }
            break;
        case VS_UNCOMMENT:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTL("ku"));
            }
            break;
        case TST_STRING:
            if (record->event.pressed) {
                SEND_STRING("12345\n");
            }
            break;

    }
    return true;
}

#define LOCK LGUI(KC_L)
#define CUT LCTL(KC_X)
#define COPY LCTL(KC_C)
#define PASTE LCTL(KC_V)
#define FIND LCTL(KC_F)

enum layers {
  NORMAL_LAYER = 0,
  SECOND_LAYER
  // ,
  // THIRD_LAYER
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [NORMAL_LAYER] = LAYOUT_ortho_2x5(
        VS_COMMENT, VS_UNCOMMENT, LOCK, TST_STRING, KC_F5,
        KC_F9, KC_F10, KC_F11, KC_F12, TO(1)
    ),
    [SECOND_LAYER] = LAYOUT_ortho_2x5(
        KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_MSTP,
        CUT,     COPY,    PASTE,   FIND,    TO(0)
    )
    // ,
    // [THIRD_LAYER] = LAYOUT_ortho_2x5(
    //      KC_Q, KC_W, KC_E, KC_R, KC_T,
    //      KC_Y, KC_U, KC_L, KC_P, TO(0)
    // )
};

A keyboards/handwired/stream_cheap/2x5/rules.mk => keyboards/handwired/stream_cheap/2x5/rules.mk +22 -0
@@ 0,0 1,22 @@
# MCU name
MCU = atmega32u4

# Bootloader selection
BOOTLOADER = caterina

# Build Options
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes       # Mouse keys
EXTRAKEY_ENABLE = yes       # Audio control and System control
CONSOLE_ENABLE = no         # Console for debug
COMMAND_ENABLE = no         # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = yes           # USB Nkey Rollover
BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no       # Enable Bluetooth
AUDIO_ENABLE = no           # Audio output

A keyboards/handwired/stream_cheap/readme.md => keyboards/handwired/stream_cheap/readme.md +23 -0
@@ 0,0 1,23 @@
# Stream Cheap

An ortholinear macropad, available in 2x3, 2x4, and 2x5 sizes.

Hardware:
  * 3d printed switch plate
  * 6-10 key switches
  * 3d printed case
  * Handwired in Direct Pins mode (i.e. all switches share a common GND and are wired to their own pin)
  * Uses a Pro Micro
  * Includes a reset switch accessible by a hole on the bottom

* Keyboard Maintainer: [hartk1213](https://github.com/hartk1213)
* Hardware Supported: Pro Micro
* Hardware Availability: [Thingiverse](https://www.thingiverse.com/thing:4497991)

Make example for this keyboard (after setting up your build environment):

    make handwired/stream_cheap/2x3:default
    make handwired/stream_cheap/2x4:default
    make handwired/stream_cheap/2x5:default

See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).