~ruther/qmk_firmware

8725197ad679647d2eb7876aee3f9df32edb5766 — Benjamin 6 years ago d67b99f
[Keyboard] Adds support for BM16S keyboard (#5659)

* Added support for BM16S keyboard.

* Update keyboards/bm16s/bm16s.h

Co-Authored-By: bontakun <ben@bontakun.net>

* Update keyboards/bm16s/bm16s.h

Co-Authored-By: bontakun <ben@bontakun.net>

* Cleaned up a bunch of unneeded stuff.

* Made layout name match.

* Changed rules file to have correct bootloader and indention. Updated readme to reflect availability on krepublic. Updated keymap to have more obvious RGB controls.

* Removed unnecessary file.

* Fixed grammar in readme.

Co-Authored-By: bontakun <ben@bontakun.net>

* Migrated to autogenerated layout config, without issue.

* Renamed LAYOUT to match community standards.
A keyboards/bm16s/bm16s.h => keyboards/bm16s/bm16s.h +15 -0
@@ 0,0 1,15 @@
#pragma once

#include "quantum.h"

#define LAYOUT_ortho_4x4( \
	K00, K01, K02, K03, \
	K10, K11, K12, K13, \
	K20, K21, K22, K23, \
	K30, K31, K32, K33  \
) { \
	{ K00,   K01,   K02,   K03 }, \
	{ K10,   K11,   K12,   K13 }, \
	{ K20,   K21,   K22,   K23 }, \
	{ K30,   K31,   K32,   K33 }  \
}

A keyboards/bm16s/config.h => keyboards/bm16s/config.h +46 -0
@@ 0,0 1,46 @@
#pragma once
#include "config_common.h"

/* USB Device descriptor parameter */
#define VENDOR_ID       0xFEED
#define PRODUCT_ID      0x6060
#define DEVICE_VER      0x0001
#define MANUFACTURER    KPrepublic
#define PRODUCT         bm16s
#define DESCRIPTION     KPrepublic bm16s

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

/* key matrix pins */
#define MATRIX_ROW_PINS { D1, D0, D3, D2 }
#define MATRIX_COL_PINS { F7, F6, D4, D6 }
#define UNUSED_PINS

/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW

/* number of backlight levels */

#ifdef BACKLIGHT_PIN
    #define BACKLIGHT_LEVELS 3
#endif

/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 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

#define RGB_DI_PIN E2
#ifdef RGB_DI_PIN
    #define RGBLIGHT_ANIMATIONS
    #define RGBLED_NUM 16
    #define RGBLIGHT_HUE_STEP 8
    #define RGBLIGHT_SAT_STEP 8
    #define RGBLIGHT_VAL_STEP 8
#endif

A keyboards/bm16s/info.json => keyboards/bm16s/info.json +30 -0
@@ 0,0 1,30 @@
{
    "keyboard_name": "bm16s",
    "url": "",
    "maintainer": "qmk",
    "width": 4,
    "height": 4,
    "layouts": {
      "LAYOUT_ortho_4x4": {
        "key_count": 16,
        "layout": [
          {"x":0, "y":0},
          {"x":1, "y":0},
          {"x":2, "y":0},
          {"x":3, "y":0},
          {"x":0, "y":1},
          {"x":1, "y":1},
          {"x":2, "y":1},
          {"x":3, "y":1},
          {"x":0, "y":2},
          {"x":1, "y":2},
          {"x":2, "y":2},
          {"x":3, "y":2},
          {"x":0, "y":3},
          {"x":1, "y":3},
          {"x":2, "y":3},
          {"x":3, "y":3}
        ]
      }
    }
  }
\ No newline at end of file

A keyboards/bm16s/keymaps/default/keymap.c => keyboards/bm16s/keymaps/default/keymap.c +16 -0
@@ 0,0 1,16 @@
#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
	[0] = LAYOUT_ortho_4x4(
		KC_KP_7, KC_KP_8, KC_KP_9, MO(1),   \
		KC_KP_4, KC_KP_5, KC_KP_6, KC_PMNS, \
		KC_KP_1, KC_KP_2, KC_KP_3, KC_PPLS, \
		KC_KP_0, KC_PDOT, KC_PCMM, KC_PENT  \
	),
	[1] = LAYOUT_ortho_4x4(
		RESET,   BL_STEP, _______, KC_VOLU, \
		BL_TOGG, BL_DEC,  BL_INC,  KC_VOLD, \
		RGB_TOG, RGB_MOD, RGB_HUI, KC_MUTE, \
		RGB_SAI, RGB_SAD, RGB_HUD, _______  \
	),
};
\ No newline at end of file

A keyboards/bm16s/keymaps/media/keymap.c => keyboards/bm16s/keymaps/media/keymap.c +20 -0
@@ 0,0 1,20 @@
#include QMK_KEYBOARD_H

#define RGB_BRU RGB_VAI
#define RGB_BRD RGB_VAD

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

	[0] = LAYOUT_ortho_4x4(
		KC_BRIU, _______, _______, KC_VOLU, \
		KC_BRID, _______, _______, KC_VOLD, \
		_______, _______, _______, KC_MUTE, \
		KC_MPRV, KC_MPLY, KC_MNXT, MO(1)    \
	),
	[1] = LAYOUT_ortho_4x4(
		RESET,    _______, _______, _______, \
		RGB_SPD,  RGB_BRU, RGB_SPI, _______, \
		RGB_RMOD, RGB_BRD, RGB_MOD, _______, \
		RGB_TOG,  _______, _______, _______  \
	),
};
\ No newline at end of file

A keyboards/bm16s/readme.md => keyboards/bm16s/readme.md +13 -0
@@ 0,0 1,13 @@
# bm16s

A 16-key macropad, with USB C and per-key RGB backlighting. This is a variant of the BM16A, but with low profile Choc switches.

Keyboard Maintainer: QMK Community  
Hardware Supported: The PCBs, controllers supported  
Hardware Availability: [KPrepublic](https://kprepublic.com/collections/pcb/products/bm16s-16-keys-custom-mechanical-keyboard-pcb-plate-programmed-numpad-layouts-qmk-firmware-with-rgb-switch-leds-choc-switch); [AliExpress](https://www.aliexpress.com/item/bm16s-16-keys-Custom-Mechanical-Keyboard-PCB-plate-programmed-numpad-layouts-qmk-firmware-with-rgb-switch/32999247908.html); [Massdrop](https://www.massdrop.com/buy/78169)

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

    make bm16s: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).

A keyboards/bm16s/rules.mk => keyboards/bm16s/rules.mk +72 -0
@@ 0,0 1,72 @@
# 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

# Bootloader selection
#   Teensy       halfkay
#   Pro Micro    caterina
#   Atmel DFU    atmel-dfu
#   LUFA DFU     lufa-dfu
#   QMK DFU      qmk-dfu
#   atmega32a    bootloadHID
BOOTLOADER = atmel-dfu


# If you don't know the bootloader type, then you can specify the
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
#   Teensy halfKay      512
#   Teensy++ halfKay    1024
#   Atmel DFU loader    4096
#   LUFA bootloader     4096
#   USBaspLoader        2048
# OPT_DEFS += -DBOOTLOADER_SIZE=4096

# Build Options
#   comment out to disable the options.
#
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
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

LAYOUTS = ortho_4x4
\ No newline at end of file