From fced377ac007d27f2650ccffbe0b18abcdcfe23d Mon Sep 17 00:00:00 2001 From: James Young <18669334+noroadsleft@users.noreply.github.com> Date: Sat, 30 May 2020 13:14:59 -0700 Subject: 2020 May 30 Breaking Changes Update (#9215) * Branch point for 2020 May 30 Breaking Change * Migrate `ACTION_LAYER_TOGGLE` to `TG()` (#8954) * Migrate `ACTION_MODS_ONESHOT` to `OSM()` (#8957) * Migrate `ACTION_DEFAULT_LAYER_SET` to `DF()` (#8958) * Migrate `ACTION_LAYER_MODS` to `LM()` (#8959) * Migrate `ACTION_MODS_TAP_KEY` to `MT()` (#8968) * Convert V-USB usbdrv to a submodule (#8321) * Unify Tap Hold functions and documentation (#8348) * Changing board names to prevent confusion (#8412) * Move the Keyboardio Model01 to a keyboardio/ subdir (#8499) * Move spaceman keyboards (#8830) * Migrate miscellaneous `fn_actions` entries (#8977) * Migrate `ACTION_MODS_KEY` to chained mod keycodes (#8979) * Organizing my keyboards (plaid, tartan, ergoinu) (#8537) * Refactor Lily58 to use split_common (#6260) * Refactor zinc to use split_common (#7114) * Add a message if bin/qmk doesn't work (#9000) * Fix conflicting types for 'tfp_printf' (#8269) * Fixed RGB_DISABLE_AFTER_TIMEOUT to be seconds based & small internals cleanup (#6480) * Refactor and updates to TKC1800 code (#8472) * Switch to qmk forks for everything (#9019) * audio refactor: replace deprecated PLAY_NOTE_ARRAY (#8484) * Audio enable corrections (2/3) (#8903) * Split HHKB to ANSI and JP layouts and Add VIA support for each (#8582) * Audio enable corrections (Part 4) (#8974) * Fix typo from PR7114 (#9171) * Augment future branch Changelogs (#8978) * Revert "Branch point for 2020 May 30 Breaking Change" --- keyboards/spaceman/2_milk/2_milk.c | 16 +++ keyboards/spaceman/2_milk/2_milk.h | 26 +++++ keyboards/spaceman/2_milk/config.h | 41 ++++++++ keyboards/spaceman/2_milk/info.json | 14 +++ keyboards/spaceman/2_milk/keymaps/binary/keymap.c | 8 ++ keyboards/spaceman/2_milk/keymaps/binary/readme.md | 2 + .../spaceman/2_milk/keymaps/copypasta/keymap.c | 8 ++ .../spaceman/2_milk/keymaps/copypasta/readme.md | 2 + keyboards/spaceman/2_milk/keymaps/default/keymap.c | 8 ++ .../spaceman/2_milk/keymaps/default/readme.md | 2 + keyboards/spaceman/2_milk/keymaps/emoji/config.h | 2 + keyboards/spaceman/2_milk/keymaps/emoji/keymap.c | 53 ++++++++++ keyboards/spaceman/2_milk/keymaps/emoji/readme.md | 39 +++++++ keyboards/spaceman/2_milk/keymaps/emoji/rules.mk | 2 + .../spaceman/2_milk/keymaps/excessbread/keymap.c | 8 ++ .../spaceman/2_milk/keymaps/excessbread/readme.md | 2 + .../spaceman/2_milk/keymaps/mikethetiger/keymap.c | 8 ++ .../spaceman/2_milk/keymaps/mikethetiger/readme.md | 1 + .../spaceman/2_milk/keymaps/mikethetiger/rules.mk | 13 +++ keyboards/spaceman/2_milk/keymaps/mouse/keymap.c | 8 ++ keyboards/spaceman/2_milk/keymaps/mouse/readme.md | 2 + keyboards/spaceman/2_milk/readme.md | 19 ++++ keyboards/spaceman/2_milk/rules.mk | 26 +++++ keyboards/spaceman/pancake/config.h | 31 ++++++ keyboards/spaceman/pancake/feather/config.h | 26 +++++ keyboards/spaceman/pancake/feather/rules.mk | 32 ++++++ keyboards/spaceman/pancake/info.json | 113 +++++++++++++++++++++ .../spaceman/pancake/keymaps/default/keymap.c | 90 ++++++++++++++++ .../spaceman/pancake/keymaps/default/readme.md | 3 + keyboards/spaceman/pancake/pancake.c | 16 +++ keyboards/spaceman/pancake/pancake.h | 44 ++++++++ keyboards/spaceman/pancake/promicro/config.h | 22 ++++ keyboards/spaceman/pancake/promicro/rules.mk | 28 +++++ keyboards/spaceman/pancake/readme.md | 12 +++ 34 files changed, 727 insertions(+) create mode 100644 keyboards/spaceman/2_milk/2_milk.c create mode 100644 keyboards/spaceman/2_milk/2_milk.h create mode 100644 keyboards/spaceman/2_milk/config.h create mode 100644 keyboards/spaceman/2_milk/info.json create mode 100644 keyboards/spaceman/2_milk/keymaps/binary/keymap.c create mode 100644 keyboards/spaceman/2_milk/keymaps/binary/readme.md create mode 100644 keyboards/spaceman/2_milk/keymaps/copypasta/keymap.c create mode 100644 keyboards/spaceman/2_milk/keymaps/copypasta/readme.md create mode 100644 keyboards/spaceman/2_milk/keymaps/default/keymap.c create mode 100644 keyboards/spaceman/2_milk/keymaps/default/readme.md create mode 100644 keyboards/spaceman/2_milk/keymaps/emoji/config.h create mode 100644 keyboards/spaceman/2_milk/keymaps/emoji/keymap.c create mode 100644 keyboards/spaceman/2_milk/keymaps/emoji/readme.md create mode 100644 keyboards/spaceman/2_milk/keymaps/emoji/rules.mk create mode 100644 keyboards/spaceman/2_milk/keymaps/excessbread/keymap.c create mode 100644 keyboards/spaceman/2_milk/keymaps/excessbread/readme.md create mode 100644 keyboards/spaceman/2_milk/keymaps/mikethetiger/keymap.c create mode 100644 keyboards/spaceman/2_milk/keymaps/mikethetiger/readme.md create mode 100644 keyboards/spaceman/2_milk/keymaps/mikethetiger/rules.mk create mode 100644 keyboards/spaceman/2_milk/keymaps/mouse/keymap.c create mode 100644 keyboards/spaceman/2_milk/keymaps/mouse/readme.md create mode 100644 keyboards/spaceman/2_milk/readme.md create mode 100644 keyboards/spaceman/2_milk/rules.mk create mode 100644 keyboards/spaceman/pancake/config.h create mode 100644 keyboards/spaceman/pancake/feather/config.h create mode 100644 keyboards/spaceman/pancake/feather/rules.mk create mode 100644 keyboards/spaceman/pancake/info.json create mode 100644 keyboards/spaceman/pancake/keymaps/default/keymap.c create mode 100644 keyboards/spaceman/pancake/keymaps/default/readme.md create mode 100644 keyboards/spaceman/pancake/pancake.c create mode 100644 keyboards/spaceman/pancake/pancake.h create mode 100644 keyboards/spaceman/pancake/promicro/config.h create mode 100644 keyboards/spaceman/pancake/promicro/rules.mk create mode 100644 keyboards/spaceman/pancake/readme.md (limited to 'keyboards/spaceman') diff --git a/keyboards/spaceman/2_milk/2_milk.c b/keyboards/spaceman/2_milk/2_milk.c new file mode 100644 index 000000000..96071c2ad --- /dev/null +++ b/keyboards/spaceman/2_milk/2_milk.c @@ -0,0 +1,16 @@ +/* Copyright 2019 Spaceman + * + * 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 . + */ +#include "2_milk.h" diff --git a/keyboards/spaceman/2_milk/2_milk.h b/keyboards/spaceman/2_milk/2_milk.h new file mode 100644 index 000000000..7d90d2064 --- /dev/null +++ b/keyboards/spaceman/2_milk/2_milk.h @@ -0,0 +1,26 @@ +/* Copyright 2019 Spaceman + * + * 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 "quantum.h" + +#define LAYOUT( \ + K00, \ + K01 \ +) { \ + { K00 }, \ + { K01 } \ +} diff --git a/keyboards/spaceman/2_milk/config.h b/keyboards/spaceman/2_milk/config.h new file mode 100644 index 000000000..49211535d --- /dev/null +++ b/keyboards/spaceman/2_milk/config.h @@ -0,0 +1,41 @@ +/* Copyright 2019 Spaceman + * + * 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" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0xB195 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Spaceman +#define PRODUCT 2% Milk +#define DESCRIPTION A milk themed 2% Keyboard + +/* key matrix size */ +#define MATRIX_ROWS 2 +#define MATRIX_COLS 1 + +/* Milk default pinout */ +#define DIRECT_PINS { \ + {D4}, \ + {C6} \ +} +#define UNUSED_PINS + +#ifdef RGBLIGHT_ENABLE +#define RGB_DI_PIN B6 +#define RGBLED_NUM 1 +#endif diff --git a/keyboards/spaceman/2_milk/info.json b/keyboards/spaceman/2_milk/info.json new file mode 100644 index 000000000..6c2bd78b2 --- /dev/null +++ b/keyboards/spaceman/2_milk/info.json @@ -0,0 +1,14 @@ +{ + "keyboard_name": "2% Milk", + "keyboard_folder": "2_milk", + "url": "", + "maintainer": "Spaceman", + "width": 1, + "height": 2, + "layouts": { + "LAYOUT": { + "key_count": 2, + "layout": [ {"x": 0, "y": 0 }, {"x": 0, "y": 1 }] + } + } +} diff --git a/keyboards/spaceman/2_milk/keymaps/binary/keymap.c b/keyboards/spaceman/2_milk/keymaps/binary/keymap.c new file mode 100644 index 000000000..c8df8e9ff --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/binary/keymap.c @@ -0,0 +1,8 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_P0, + KC_P1 + ) +}; diff --git a/keyboards/spaceman/2_milk/keymaps/binary/readme.md b/keyboards/spaceman/2_milk/keymaps/binary/readme.md new file mode 100644 index 000000000..5ebcbd3e5 --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/binary/readme.md @@ -0,0 +1,2 @@ +# Binary keymap +0 and 1 that's it diff --git a/keyboards/spaceman/2_milk/keymaps/copypasta/keymap.c b/keyboards/spaceman/2_milk/keymaps/copypasta/keymap.c new file mode 100644 index 000000000..c82a6ff21 --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/copypasta/keymap.c @@ -0,0 +1,8 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + RCTL(KC_C), + RCTL(KC_V) + ) +}; diff --git a/keyboards/spaceman/2_milk/keymaps/copypasta/readme.md b/keyboards/spaceman/2_milk/keymaps/copypasta/readme.md new file mode 100644 index 000000000..6c2f4e8fb --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/copypasta/readme.md @@ -0,0 +1,2 @@ +# Copy/Paste Keymap +![Picture](https://i.imgur.com/7LMZZrL.png) diff --git a/keyboards/spaceman/2_milk/keymaps/default/keymap.c b/keyboards/spaceman/2_milk/keymaps/default/keymap.c new file mode 100644 index 000000000..1f327eee9 --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/default/keymap.c @@ -0,0 +1,8 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_Z, + KC_X + ) +}; diff --git a/keyboards/spaceman/2_milk/keymaps/default/readme.md b/keyboards/spaceman/2_milk/keymaps/default/readme.md new file mode 100644 index 000000000..4482bce34 --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/default/readme.md @@ -0,0 +1,2 @@ +# Default keymap for 2% Milk +![Picture](https://i.imgur.com/9PsZ6wa.png) diff --git a/keyboards/spaceman/2_milk/keymaps/emoji/config.h b/keyboards/spaceman/2_milk/keymaps/emoji/config.h new file mode 100644 index 000000000..90e4d6310 --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/emoji/config.h @@ -0,0 +1,2 @@ +#define UNICODE_SELECTED_MODES UC_LNX, UC_OSX, UC_WIN, UC_WINC +#define TAPPING_TERM 300 \ No newline at end of file diff --git a/keyboards/spaceman/2_milk/keymaps/emoji/keymap.c b/keyboards/spaceman/2_milk/keymaps/emoji/keymap.c new file mode 100644 index 000000000..024a6a054 --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/emoji/keymap.c @@ -0,0 +1,53 @@ +#include QMK_KEYBOARD_H + +enum tapdance_keycodes { + TD_KEY_1, + TD_KEY_2, +}; + +void dance_key_one (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF"); // ¯\_(ツ)_/¯ + SEND_STRING(SS_TAP(X_ENTER)); + reset_tap_dance (state); + } else if (state->count == 2) { + cycle_unicode_input_mode(+1); + reset_tap_dance (state); + } +} + +void dance_key_two (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + send_unicode_hex_string("0CA0 005F 0CA0"); // ಠ_ಠ + SEND_STRING(SS_TAP(X_ENTER)); + reset_tap_dance (state); + } else if (state->count == 2) { + send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B"); // (ノಠ痊ಠ)ノ彡┻━┻ + SEND_STRING(SS_TAP(X_ENTER)); + reset_tap_dance (state); + } else if (state->count == 3) { + send_unicode_hex_string("256D 2229 256E 0028 002D 005F 002D 0029 256D 2229 256E"); // ╭∩╮(-_-)╭∩╮ + SEND_STRING(SS_TAP(X_ENTER)); + reset_tap_dance (state); + } else if (state->count == 4) { + send_unicode_hex_string("0028 3065 FFE3 0020 00B3 FFE3 0029 3065"); // (づ ̄ ³ ̄)づ + SEND_STRING(SS_TAP(X_ENTER)); + reset_tap_dance (state); + } else if (state->count == 5) { + send_unicode_hex_string("0028 FE3A FE39 FE3A 0029"); // (︺︹︺) + SEND_STRING(SS_TAP(X_ENTER)); + reset_tap_dance (state); + } +} + +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_KEY_1] = ACTION_TAP_DANCE_FN(dance_key_one), + [TD_KEY_2] = ACTION_TAP_DANCE_FN(dance_key_two), +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + TD(TD_KEY_1), + TD(TD_KEY_2) + ), +}; diff --git a/keyboards/spaceman/2_milk/keymaps/emoji/readme.md b/keyboards/spaceman/2_milk/keymaps/emoji/readme.md new file mode 100644 index 000000000..1d5a08730 --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/emoji/readme.md @@ -0,0 +1,39 @@ +# Emoji Keymap +![Picture](https://i.imgur.com/1zEZ9Lq.png) + +# Unicode Setup + +Unicode input in QMK works by inputting a sequence of characters to the +OS, sort of like a macro. Unfortunately, the way this is done differs +for each platform. Specifically, each platform requires a different +combination of keys to trigger Unicode input. Therefore, a +corresponding input mode has to be set in QMK. + +Documentation: [Feature Unicode](https://beta.docs.qmk.fm/features/feature_unicode#input-modes) + +On this keymap the default unicode mode it's `UC_LNX`. +You can change it permanently tapping 2 times the KeyOne to select the next mode. + +## Unicode Mode List +- UC_LNX +- UC_OSX +- UC_WIN +- UC_WINC + +# Keymap +To add more functionality to this Minimal Keyboard, +it's implemented the tap dance feature, so pressing the same key +multiples times will produce different emojis. + +## Key One + +- 1 Tap: `¯\_(ツ)_/¯` +- 2 Taps: Switch Unicode Input Type + +## Key Two + +- 1 Tap: `ಠ_ಠ` +- 2 Taps: `(ノಠ痊ಠ)ノ彡┻━┻` +- 3 Taps: `╭∩╮(-_-)╭∩╮` +- 4 Taps: `(づ ̄ ³ ̄)づ` +- 5 Taps: `(︺︹︺)` \ No newline at end of file diff --git a/keyboards/spaceman/2_milk/keymaps/emoji/rules.mk b/keyboards/spaceman/2_milk/keymaps/emoji/rules.mk new file mode 100644 index 000000000..7a64eb902 --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/emoji/rules.mk @@ -0,0 +1,2 @@ +UNICODE_ENABLE = yes # Unicode +TAP_DANCE_ENABLE = yes # Tap Dance \ No newline at end of file diff --git a/keyboards/spaceman/2_milk/keymaps/excessbread/keymap.c b/keyboards/spaceman/2_milk/keymaps/excessbread/keymap.c new file mode 100644 index 000000000..a01b47f27 --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/excessbread/keymap.c @@ -0,0 +1,8 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_LGUI, + KC_F11 + ) +}; diff --git a/keyboards/spaceman/2_milk/keymaps/excessbread/readme.md b/keyboards/spaceman/2_milk/keymaps/excessbread/readme.md new file mode 100644 index 000000000..a6535e62c --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/excessbread/readme.md @@ -0,0 +1,2 @@ +# ExcessBread's keymap +requested by excessbread diff --git a/keyboards/spaceman/2_milk/keymaps/mikethetiger/keymap.c b/keyboards/spaceman/2_milk/keymaps/mikethetiger/keymap.c new file mode 100644 index 000000000..20e2292f0 --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/mikethetiger/keymap.c @@ -0,0 +1,8 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_VOLU, + KC_VOLD + ) +}; diff --git a/keyboards/spaceman/2_milk/keymaps/mikethetiger/readme.md b/keyboards/spaceman/2_milk/keymaps/mikethetiger/readme.md new file mode 100644 index 000000000..677732b05 --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/mikethetiger/readme.md @@ -0,0 +1 @@ +# mikethetiger's keymap for 2% Milk diff --git a/keyboards/spaceman/2_milk/keymaps/mikethetiger/rules.mk b/keyboards/spaceman/2_milk/keymaps/mikethetiger/rules.mk new file mode 100644 index 000000000..b5f038ef2 --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/mikethetiger/rules.mk @@ -0,0 +1,13 @@ +# Build Options +# comment out to disable the options. +# +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 = yes # Console for debug(+400) +COMMAND_ENABLE = yes # 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 # Custom backlighting code is used, so this should not be enabled +AUDIO_ENABLE = no # This can be enabled if a speaker is connected to the expansion port. Not compatible with RGBLIGHT below +RGBLIGHT_ENABLE = yes # This can be enabled if a ws2812 strip is connected to the expansion port. diff --git a/keyboards/spaceman/2_milk/keymaps/mouse/keymap.c b/keyboards/spaceman/2_milk/keymaps/mouse/keymap.c new file mode 100644 index 000000000..a8ba44fb4 --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/mouse/keymap.c @@ -0,0 +1,8 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_BTN1, + KC_BTN2 + ) +}; diff --git a/keyboards/spaceman/2_milk/keymaps/mouse/readme.md b/keyboards/spaceman/2_milk/keymaps/mouse/readme.md new file mode 100644 index 000000000..8ecb99edd --- /dev/null +++ b/keyboards/spaceman/2_milk/keymaps/mouse/readme.md @@ -0,0 +1,2 @@ +# left and right mouse buttons +requested by WanderingVagrant diff --git a/keyboards/spaceman/2_milk/readme.md b/keyboards/spaceman/2_milk/readme.md new file mode 100644 index 000000000..6745aa65c --- /dev/null +++ b/keyboards/spaceman/2_milk/readme.md @@ -0,0 +1,19 @@ +# 2% Milk + +![2%Milk](https://i.imgur.com/Ud96uXn.png) + +A 2% Meme board themed around a milk carton + +Keyboard Maintainer: [Spaceman](https://github.com/Spaceman) +Hardware Availability: [Open Source](https://github.com/Spaceman/Spaceboards/tree/master/Keyboards/2%25%20Milk) + +Make example for this keyboard (after setting up your build environment): + + make spaceman/2_milk: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). + +### Credits ++ Case design by Soft ++ PCB by PyroL ++ Name by jetpacktuxedo diff --git a/keyboards/spaceman/2_milk/rules.mk b/keyboards/spaceman/2_milk/rules.mk new file mode 100644 index 000000000..4e6c5f703 --- /dev/null +++ b/keyboards/spaceman/2_milk/rules.mk @@ -0,0 +1,26 @@ +# MCU name +MCU = atmega32u4 + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# ATmega32A bootloadHID +# ATmega328P USBasp +BOOTLOADER = caterina + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration +MOUSEKEY_ENABLE = no # Mouse keys +EXTRAKEY_ENABLE = no # Audio control and System control +CONSOLE_ENABLE = yes # Console for debug +COMMAND_ENABLE = yes # 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 # Custom backlighting code is used, so this should not be enabled +AUDIO_ENABLE = no # This can be enabled if a speaker is connected to the expansion port. Not compatible with RGBLIGHT below +RGBLIGHT_ENABLE = yes # This can be enabled if a ws2812 strip is connected to the expansion port. diff --git a/keyboards/spaceman/pancake/config.h b/keyboards/spaceman/pancake/config.h new file mode 100644 index 000000000..5a01a572e --- /dev/null +++ b/keyboards/spaceman/pancake/config.h @@ -0,0 +1,31 @@ +/* Copyright 2019 Spaceman + * + * 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" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0xB195 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Spaceman +#define PRODUCT Pancake +#define DESCRIPTION Choc Ortho Keyboard + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 + +#define DIODE_DIRECTION COL2ROW \ No newline at end of file diff --git a/keyboards/spaceman/pancake/feather/config.h b/keyboards/spaceman/pancake/feather/config.h new file mode 100644 index 000000000..eac91a5ad --- /dev/null +++ b/keyboards/spaceman/pancake/feather/config.h @@ -0,0 +1,26 @@ +/* Copyright 2019 Spaceman + * + * 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" + +/* Pancake default pinout */ +#define MATRIX_ROW_PINS { B5, D7, C6, D0 } +#define MATRIX_COL_PINS { C7, D6, B7, B6, F0, D2, D3, F1, F4, F5, F6, F7 } +#define UNUSED_PINS + +#define AdafruitBleResetPin D4 +#define AdafruitBleCSPin B4 +#define AdafruitBleIRQPin E6 \ No newline at end of file diff --git a/keyboards/spaceman/pancake/feather/rules.mk b/keyboards/spaceman/pancake/feather/rules.mk new file mode 100644 index 000000000..c54fbf06e --- /dev/null +++ b/keyboards/spaceman/pancake/feather/rules.mk @@ -0,0 +1,32 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency +F_CPU = 8000000 + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# ATmega32A bootloadHID +# ATmega328P USBasp +BOOTLOADER = caterina + +# Build Options +# comment out to disable the options. +# +BLUETOOTH = AdafruitBLE +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration +MOUSEKEY_ENABLE = no # Mouse keys +EXTRAKEY_ENABLE = no # Audio control and System control +CONSOLE_ENABLE = yes # Console for debug +COMMAND_ENABLE = yes # 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 # Custom backlighting code is used, so this should not be enabled +AUDIO_ENABLE = no # This can be enabled if a speaker is connected to the expansion port. Not compatible with RGBLIGHT below +RGBLIGHT_ENABLE = no # This can be enabled if a ws2812 strip is connected to the expansion port. + +LAYOUTS = ortho_4x12 planck_mit diff --git a/keyboards/spaceman/pancake/info.json b/keyboards/spaceman/pancake/info.json new file mode 100644 index 000000000..9a21f09e1 --- /dev/null +++ b/keyboards/spaceman/pancake/info.json @@ -0,0 +1,113 @@ +{ + "keyboard_name": "Pancake", + "keyboard_folder": "Pancake", + "url": "", + "maintainer": "Spaceman", + "width": 12, + "height": 4, + "layouts": { + "LAYOUT_planck_mit": { + "key_count": 47, + "layout": [ + { "w": 1, "x": 0, "y": 0 }, + { "w": 1, "x": 1, "y": 0 }, + { "w": 1, "x": 2, "y": 0 }, + { "w": 1, "x": 3, "y": 0 }, + { "w": 1, "x": 4, "y": 0 }, + { "w": 1, "x": 5, "y": 0 }, + { "w": 1, "x": 6, "y": 0 }, + { "w": 1, "x": 7, "y": 0 }, + { "w": 1, "x": 8, "y": 0 }, + { "w": 1, "x": 9, "y": 0 }, + { "w": 1, "x": 10, "y": 0 }, + { "w": 1, "x": 11, "y": 0 }, + { "w": 1, "x": 0, "y": 1 }, + { "w": 1, "x": 1, "y": 1 }, + { "w": 1, "x": 2, "y": 1 }, + { "w": 1, "x": 3, "y": 1 }, + { "w": 1, "x": 4, "y": 1 }, + { "w": 1, "x": 5, "y": 1 }, + { "w": 1, "x": 6, "y": 1 }, + { "w": 1, "x": 7, "y": 1 }, + { "w": 1, "x": 8, "y": 1 }, + { "w": 1, "x": 9, "y": 1 }, + { "w": 1, "x": 10, "y": 1 }, + { "w": 1, "x": 11, "y": 1 }, + { "w": 1, "x": 0, "y": 2 }, + { "w": 1, "x": 1, "y": 2 }, + { "w": 1, "x": 2, "y": 2 }, + { "w": 1, "x": 3, "y": 2 }, + { "w": 1, "x": 4, "y": 2 }, + { "w": 1, "x": 5, "y": 2 }, + { "w": 1, "x": 6, "y": 2 }, + { "w": 1, "x": 7, "y": 2 }, + { "w": 1, "x": 8, "y": 2 }, + { "w": 1, "x": 9, "y": 2 }, + { "w": 1, "x": 10, "y": 2 }, + { "w": 1, "x": 11, "y": 2 }, + { "w": 1, "x": 0, "y": 3 }, + { "w": 1, "x": 1, "y": 3 }, + { "w": 1, "x": 2, "y": 3 }, + { "w": 1, "x": 3, "y": 3 }, + { "w": 1, "x": 4, "y": 3 }, + { "w": 2, "x": 5, "y": 3 }, + { "w": 1, "x": 7, "y": 3 }, + { "w": 1, "x": 8, "y": 3 }, + { "w": 1, "x": 9, "y": 3 }, + { "w": 1, "x": 10, "y": 3 }, + { "w": 1, "x": 11, "y": 3 } ] + }, + "LAYOUT_ortho_4x12": { + "key_count": 48, + "layout": [ + { "w": 1, "x": 0, "y": 0 }, + { "w": 1, "x": 1, "y": 0 }, + { "w": 1, "x": 2, "y": 0 }, + { "w": 1, "x": 3, "y": 0 }, + { "w": 1, "x": 4, "y": 0 }, + { "w": 1, "x": 5, "y": 0 }, + { "w": 1, "x": 6, "y": 0 }, + { "w": 1, "x": 7, "y": 0 }, + { "w": 1, "x": 8, "y": 0 }, + { "w": 1, "x": 9, "y": 0 }, + { "w": 1, "x": 10, "y": 0 }, + { "w": 1, "x": 11, "y": 0 }, + { "w": 1, "x": 0, "y": 1 }, + { "w": 1, "x": 1, "y": 1 }, + { "w": 1, "x": 2, "y": 1 }, + { "w": 1, "x": 3, "y": 1 }, + { "w": 1, "x": 4, "y": 1 }, + { "w": 1, "x": 5, "y": 1 }, + { "w": 1, "x": 6, "y": 1 }, + { "w": 1, "x": 7, "y": 1 }, + { "w": 1, "x": 8, "y": 1 }, + { "w": 1, "x": 9, "y": 1 }, + { "w": 1, "x": 10, "y": 1 }, + { "w": 1, "x": 11, "y": 1 }, + { "w": 1, "x": 0, "y": 2 }, + { "w": 1, "x": 1, "y": 2 }, + { "w": 1, "x": 2, "y": 2 }, + { "w": 1, "x": 3, "y": 2 }, + { "w": 1, "x": 4, "y": 2 }, + { "w": 1, "x": 5, "y": 2 }, + { "w": 1, "x": 6, "y": 2 }, + { "w": 1, "x": 7, "y": 2 }, + { "w": 1, "x": 8, "y": 2 }, + { "w": 1, "x": 9, "y": 2 }, + { "w": 1, "x": 10, "y": 2 }, + { "w": 1, "x": 11, "y": 2 }, + { "w": 1, "x": 0, "y": 3 }, + { "w": 1, "x": 1, "y": 3 }, + { "w": 1, "x": 2, "y": 3 }, + { "w": 1, "x": 3, "y": 3 }, + { "w": 1, "x": 4, "y": 3 }, + { "w": 1, "x": 5, "y": 3 }, + { "w": 1, "x": 6, "y": 3 }, + { "w": 1, "x": 7, "y": 3 }, + { "w": 1, "x": 8, "y": 3 }, + { "w": 1, "x": 9, "y": 3 }, + { "w": 1, "x": 10, "y": 3 }, + { "w": 1, "x": 11, "y": 3 } ] + } + } +} diff --git a/keyboards/spaceman/pancake/keymaps/default/keymap.c b/keyboards/spaceman/pancake/keymaps/default/keymap.c new file mode 100644 index 000000000..cebc6fccb --- /dev/null +++ b/keyboards/spaceman/pancake/keymaps/default/keymap.c @@ -0,0 +1,90 @@ +#include QMK_KEYBOARD_H +enum layers { + _DEFAULT, + _LOWER, + _RAISE, + _FN +}; + +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) +#define FN MO(_FN) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Default + * ,-----------------------------------------------------------------------------------. + * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Tab | A | S | D | F | G | H | J | K | L | " | ; | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | Up |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | GUI | FN | Lower| Space |Raise | / | Left | Down |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DEFAULT] = LAYOUT_ortho_4x12( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_SCLN, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT , + KC_LCTL, KC_LALT, KC_LGUI, FN, LOWER, KC_SPC, KC_SPC, RAISE, KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT +), + + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | _ | + | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | { | } | Vol+ | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | ? | | Vol- | | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT_ortho_4x12( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + _______, _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, _______, KC_PIPE, + _______, _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, KC_VOLU, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_QUES, _______, KC_VOLD, _______ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | | - | = | | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | [ | ] | Vol- | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | Vol+ | | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT_ortho_4x12( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, _______, KC_BSLS, + _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_VOLU, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, _______ +), + + /* FN + * ,-----------------------------------------------------------------------------------. + * | Reset| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | | | F11 | F12 | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | TRNS | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_FN] = LAYOUT_ortho_4x12( + RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F11, KC_F12, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + + +}; + diff --git a/keyboards/spaceman/pancake/keymaps/default/readme.md b/keyboards/spaceman/pancake/keymaps/default/readme.md new file mode 100644 index 000000000..7eb8cc6d8 --- /dev/null +++ b/keyboards/spaceman/pancake/keymaps/default/readme.md @@ -0,0 +1,3 @@ +# Default keymap for Pancake + +designed by: Spaceman diff --git a/keyboards/spaceman/pancake/pancake.c b/keyboards/spaceman/pancake/pancake.c new file mode 100644 index 000000000..d77dbfbe0 --- /dev/null +++ b/keyboards/spaceman/pancake/pancake.c @@ -0,0 +1,16 @@ +/* Copyright 2019 Spaceman + * + * 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 . + */ +#include "pancake.h" diff --git a/keyboards/spaceman/pancake/pancake.h b/keyboards/spaceman/pancake/pancake.h new file mode 100644 index 000000000..312d789b4 --- /dev/null +++ b/keyboards/spaceman/pancake/pancake.h @@ -0,0 +1,44 @@ +/* Copyright 2019 Spaceman + * + * 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 "quantum.h" + +#define LAYOUT_planck_mit( \ + k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, \ + k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, \ + k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, \ + k300, k301, k302, k303, k304, k305, k307, k308, k309, k310, k311 \ +) \ +{ \ + { k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011 }, \ + { k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111 }, \ + { k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211 }, \ + { k300, k301, k302, k303, k304, k305, k305, k307, k308, k309, k310, k311 } \ +} + +#define LAYOUT_ortho_4x12( \ + k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, \ + k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, \ + k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, \ + k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311 \ +) \ +{ \ + { k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011 }, \ + { k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111 }, \ + { k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211 }, \ + { k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311 } \ +} diff --git a/keyboards/spaceman/pancake/promicro/config.h b/keyboards/spaceman/pancake/promicro/config.h new file mode 100644 index 000000000..ee02bff2b --- /dev/null +++ b/keyboards/spaceman/pancake/promicro/config.h @@ -0,0 +1,22 @@ +/* Copyright 2019 Spaceman + * + * 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" + +/* Pancake default pinout */ +#define MATRIX_ROW_PINS { B1, B3, B2, B6 } +#define MATRIX_COL_PINS { F4, F5, F6, F7, E6, B4, B5, D7, C6, D4, D0, D1 } +#define UNUSED_PINS \ No newline at end of file diff --git a/keyboards/spaceman/pancake/promicro/rules.mk b/keyboards/spaceman/pancake/promicro/rules.mk new file mode 100644 index 000000000..6ed9e88e9 --- /dev/null +++ b/keyboards/spaceman/pancake/promicro/rules.mk @@ -0,0 +1,28 @@ +# MCU name +MCU = atmega32u4 + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# ATmega32A bootloadHID +# ATmega328P USBasp +BOOTLOADER = caterina + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration +MOUSEKEY_ENABLE = no # Mouse keys +EXTRAKEY_ENABLE = no # Audio control and System control +CONSOLE_ENABLE = yes # Console for debug +COMMAND_ENABLE = yes # 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 # Custom backlighting code is used, so this should not be enabled +AUDIO_ENABLE = no # This can be enabled if a speaker is connected to the expansion port. Not compatible with RGBLIGHT below +RGBLIGHT_ENABLE = no # This can be enabled if a ws2812 strip is connected to the expansion port. + +LAYOUTS = ortho_4x12 planck_mit diff --git a/keyboards/spaceman/pancake/readme.md b/keyboards/spaceman/pancake/readme.md new file mode 100644 index 000000000..34cf6382b --- /dev/null +++ b/keyboards/spaceman/pancake/readme.md @@ -0,0 +1,12 @@ +# Pancake + +Ortho 40% Ortho Keyboard with an option for the adafruit feather + +Keyboard Maintainer: [Spaceman](https://github.com/Spaceman) +Hardware Availability: [GB](https://geekhack.org/index.php?topic=101371.0) + +Make example for this keyboard (after setting up your build environment): + + make spaceman/pancake: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). -- cgit v1.2.3