diff options
author | skullydazed <skullydazed@users.noreply.github.com> | 2019-10-23 21:14:00 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-23 21:14:00 -0700 |
commit | 9160405d39d82ba787bac07ab569aa74d86d5082 (patch) | |
tree | dbccad39153c2e8f5366cced5256943a49d2c405 | |
parent | 23f89ff7cf4bce42d46e99183a977c5c74384c57 (diff) | |
download | qmk_firmware-9160405d39d82ba787bac07ab569aa74d86d5082.tar.gz qmk_firmware-9160405d39d82ba787bac07ab569aa74d86d5082.zip |
Support for the upcoming 1UP Keyboards Sweet 16 rev2 (#7125)
* Support for the upcoming 1up Keyboards Sweet 16 rev2
* Update keyboards/1upkeyboards/sweet16/rev1/readme.md
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/1upkeyboards/sweet16/rev1/readme.md
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/1upkeyboards/sweet16/rev2/promicro/readme.md
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/1upkeyboards/sweet16/rev2/proton_c/readme.md
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/1upkeyboards/sweet16/readme.md
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/1upkeyboards/sweet16/rev1/rev1.c
Co-Authored-By: fauxpark <fauxpark@gmail.com>
* Update keyboards/1upkeyboards/sweet16/rev1/rev1.c
Co-Authored-By: fauxpark <fauxpark@gmail.com>
* Update keyboards/1upkeyboards/sweet16/rev1/rev1.c
Co-Authored-By: fauxpark <fauxpark@gmail.com>
* Update keyboards/1upkeyboards/sweet16/rev1/rev1.c
Co-Authored-By: fauxpark <fauxpark@gmail.com>
* Update keyboards/1upkeyboards/sweet16/rev1/rev1.c
Co-Authored-By: fauxpark <fauxpark@gmail.com>
* Update keyboards/1upkeyboards/sweet16/rev1/rev1.c
Co-Authored-By: fauxpark <fauxpark@gmail.com>
* Update keyboards/1upkeyboards/sweet16/rules.mk
Co-Authored-By: fauxpark <fauxpark@gmail.com>
* Update keyboards/1upkeyboards/sweet16/rules.mk
Co-Authored-By: fauxpark <fauxpark@gmail.com>
* Update keyboards/1upkeyboards/sweet16/rules.mk
Co-Authored-By: fauxpark <fauxpark@gmail.com>
* Update keyboards/1upkeyboards/sweet16/rules.mk
Co-Authored-By: fauxpark <fauxpark@gmail.com>
* Update keyboards/1upkeyboards/sweet16/rev1/rules.mk
Co-Authored-By: Drashna Jaelre <drashna@live.com>
* Update keyboards/1upkeyboards/sweet16/rev2/promicro/rules.mk
Co-Authored-By: Drashna Jaelre <drashna@live.com>
* tweak readme wording per @noroadsleft
* Change rev to V
* remove extraneous info.json files
20 files changed, 286 insertions, 74 deletions
diff --git a/keyboards/1upkeyboards/sweet16/config.h b/keyboards/1upkeyboards/sweet16/config.h index 23b590c2c1..803d9f1151 100644 --- a/keyboards/1upkeyboards/sweet16/config.h +++ b/keyboards/1upkeyboards/sweet16/config.h @@ -4,8 +4,6 @@ /* USB Device descriptor parameter */ #define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x2010 -#define DEVICE_VER 0x0001 #define MANUFACTURER 1up Keyboards #define PRODUCT Sweet16 #define DESCRIPTION 4x4 grid @@ -14,34 +12,11 @@ #define MATRIX_ROWS 4 #define MATRIX_COLS 4 -/* key matrix pins */ -#define MATRIX_ROW_PINS { F4, F5, F6, F7 } -#define MATRIX_COL_PINS { D1, D0, D4, C6 } -#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 DEBOUNCE 5 +#define BACKLIGHT_LEVELS 10 /* 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 B1 -#ifdef RGB_DI_PIN -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 1 -#define RGBLIGHT_HUE_STEP 8 -#define RGBLIGHT_SAT_STEP 8 -#define RGBLIGHT_VAL_STEP 8 -#endif diff --git a/keyboards/1upkeyboards/sweet16/info.json b/keyboards/1upkeyboards/sweet16/info.json index 445a5909ec..c292f0364e 100644 --- a/keyboards/1upkeyboards/sweet16/info.json +++ b/keyboards/1upkeyboards/sweet16/info.json @@ -1,7 +1,7 @@ { "keyboard_name": "Sweet 16", "url": "", - "maintainer": "qmk", + "maintainer": "skullydazed", "width": 4, "height": 4, "layouts": { diff --git a/keyboards/1upkeyboards/sweet16/keymaps/default/keymap.c b/keyboards/1upkeyboards/sweet16/keymaps/default/keymap.c index 4cc754dc16..4778d2108c 100644 --- a/keyboards/1upkeyboards/sweet16/keymaps/default/keymap.c +++ b/keyboards/1upkeyboards/sweet16/keymaps/default/keymap.c @@ -25,21 +25,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; } -void led_set_user(uint8_t usb_led) { - - #ifndef CONVERT_TO_PROTON_C - /* Map RXLED to USB_LED_NUM_LOCK */ - if (usb_led & (1 << USB_LED_NUM_LOCK)) { - DDRB |= (1 << 0); PORTB &= ~(1 << 0); - } else { - DDRB &= ~(1 << 0); PORTB &= ~(1 << 0); - } - - /* Map TXLED to USB_LED_CAPS_LOCK */ - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { - DDRD |= (1 << 5); PORTD &= ~(1 << 5); - } else { - DDRD &= ~(1 << 5); PORTD &= ~(1 << 5); - } - #endif +#ifdef ENCODER_ENABLE +#include "encoder.h" +void encoder_update_user(int8_t index, bool clockwise) { + if (index == 0) { /* First encoder */ + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } } +#endif diff --git a/keyboards/1upkeyboards/sweet16/readme.md b/keyboards/1upkeyboards/sweet16/readme.md index f096a5fc99..0e3cbcaa66 100644 --- a/keyboards/1upkeyboards/sweet16/readme.md +++ b/keyboards/1upkeyboards/sweet16/readme.md @@ -1,13 +1,12 @@ # Sweet 16 Macropad -A 4x4 numpad/macro pad sold by 1up Keyboards - designed by Bishop Keyboards +A 4x4 numpad/macro pad sold by 1up Keyboards. -Keyboard Maintainer: QMK Community -Hardware Supported: Sweet16 Keyboard PCB -Hardware Availability: [1up Keyboards](https://1upkeyboards.com/) +* Keyboard Maintainer: skullydazed +* Hardware Supported: Sweet16 Keyboard PCB +* Hardware Availability: [1up Keyboards](https://1upkeyboards.com/) -Make example for this keyboard (after setting up your build environment): - - make 1upkeyboards/sweet16: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). +Revisions: +* [v1](./v1/)- The original macropad, designed by Bishop Keyboards +* [v2/promicro](./v2/promicro)- The second macropad built with a Pro Micro, designed by Clueboard +* [v2/proton_c](./v2/proton_c)- The second macropad built with a Proton C, designed by Clueboard diff --git a/keyboards/1upkeyboards/sweet16/rules.mk b/keyboards/1upkeyboards/sweet16/rules.mk index 6e1a5eec99..d7e57eb33e 100644 --- a/keyboards/1upkeyboards/sweet16/rules.mk +++ b/keyboards/1upkeyboards/sweet16/rules.mk @@ -1,27 +1,12 @@ -# 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(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) +DEFAULT_FOLDER = 1upkeyboards/sweet16/v1 +#BOOTMAGIC_ENABLE = yes # 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 -EXTRAFLAGS += -flto +RGBLIGHT_ENABLE = no diff --git a/keyboards/1upkeyboards/sweet16/v1/config.h b/keyboards/1upkeyboards/sweet16/v1/config.h new file mode 100644 index 0000000000..56fd16650c --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/v1/config.h @@ -0,0 +1,28 @@ +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define PRODUCT_ID 0x2010 +#define DEVICE_VER 0x0001 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { F4, F5, F6, F7 } +#define MATRIX_COL_PINS { D1, D0, D4, C6 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Underglow options */ +#define RGB_DI_PIN B1 +#ifdef RGB_DI_PIN +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 1 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 +#endif diff --git a/keyboards/1upkeyboards/sweet16/v1/readme.md b/keyboards/1upkeyboards/sweet16/v1/readme.md new file mode 100644 index 0000000000..a36197006c --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/v1/readme.md @@ -0,0 +1,13 @@ +# Sweet16 V1 + +A 4x4 numpad/macro pad sold by 1up Keyboards - designed by Bishop Keyboards + +* Keyboard Maintainer: QMK Community +* Hardware Supported: Sweet16 V1 PCB +* Hardware Availability: [1up Keyboards](https://1upkeyboards.com/) + +Make example for this keyboard (after setting up your build environment): + + make 1upkeyboards/sweet16/v1: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). diff --git a/keyboards/1upkeyboards/sweet16/v1/rules.mk b/keyboards/1upkeyboards/sweet16/v1/rules.mk new file mode 100644 index 0000000000..0defba1f19 --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/v1/rules.mk @@ -0,0 +1,5 @@ +MCU = atmega32u4 +BOOTLOADER = caterina +LINK_TIME_OPTIMIZATION_ENABLE=yes +RGBLIGHT_ENABLE = yes +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality diff --git a/keyboards/1upkeyboards/sweet16/v1/v1.c b/keyboards/1upkeyboards/sweet16/v1/v1.c new file mode 100644 index 0000000000..053620d333 --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/v1/v1.c @@ -0,0 +1,21 @@ +#include "v1.h" + +void led_set_kb(uint8_t usb_led) { +#ifndef CONVERT_TO_PROTON_C + /* Map RXLED to USB_LED_NUM_LOCK */ + if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) { + setPinOutput(B0); + writePinLow(B0); + } else { + setPinInput(B0); + } + + /* Map TXLED to USB_LED_CAPS_LOCK */ + if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) { + setPinOutput(D5); + writePinLow(D5); + } else { + setPinInput(D5); + } +#endif +} diff --git a/keyboards/1upkeyboards/sweet16/v1/v1.h b/keyboards/1upkeyboards/sweet16/v1/v1.h new file mode 100644 index 0000000000..7320ccd9e0 --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/v1/v1.h @@ -0,0 +1,30 @@ +#pragma once + +#include "quantum.h" + +// Any changes to the layout names and/or definitions must also be made to info.json + +#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 } \ +} + +#define LAYOUT_numpad_4x4( \ + K00, K01, K02, K03, \ + K10, K11, K12, \ + K20, K21, K22, K23, \ + K31, K32 \ +) { \ + { K00, K01, K02, K03 }, \ + { K10, K11, K12, KC_NO }, \ + { K20, K21, K22, K23 }, \ + { KC_NO, K31, K32, KC_NO } \ +} + diff --git a/keyboards/1upkeyboards/sweet16/v2/promicro/config.h b/keyboards/1upkeyboards/sweet16/v2/promicro/config.h new file mode 100644 index 0000000000..bd50b69608 --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/v2/promicro/config.h @@ -0,0 +1,31 @@ +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define PRODUCT_ID 0x2011 +#define DEVICE_VER 0x0001 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { D4, D1, E6, B5 } +#define MATRIX_COL_PINS { F7, F6, D2, D3 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION ROW2COL + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Encoder pins */ +#define ENCODERS_PAD_A { F4 } +#define ENCODERS_PAD_B { F5 } +#define ENCODER_RESOLUTION 4 + +/* Underglow options */ +#define RGB_DI_PIN F4 +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 1 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/1upkeyboards/sweet16/v2/promicro/promicro.c b/keyboards/1upkeyboards/sweet16/v2/promicro/promicro.c new file mode 100644 index 0000000000..0176dc1a3c --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/v2/promicro/promicro.c @@ -0,0 +1,8 @@ +#include "promicro.h" +#include "encoder.h" + +#ifdef ENCODER_ENABLED +void encoder_update_kb(int8_t index, bool clockwise) { + encoder_update_user(index, clockwise); +} +#endif diff --git a/keyboards/1upkeyboards/sweet16/v2/promicro/promicro.h b/keyboards/1upkeyboards/sweet16/v2/promicro/promicro.h new file mode 100644 index 0000000000..7320ccd9e0 --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/v2/promicro/promicro.h @@ -0,0 +1,30 @@ +#pragma once + +#include "quantum.h" + +// Any changes to the layout names and/or definitions must also be made to info.json + +#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 } \ +} + +#define LAYOUT_numpad_4x4( \ + K00, K01, K02, K03, \ + K10, K11, K12, \ + K20, K21, K22, K23, \ + K31, K32 \ +) { \ + { K00, K01, K02, K03 }, \ + { K10, K11, K12, KC_NO }, \ + { K20, K21, K22, K23 }, \ + { KC_NO, K31, K32, KC_NO } \ +} + diff --git a/keyboards/1upkeyboards/sweet16/v2/promicro/readme.md b/keyboards/1upkeyboards/sweet16/v2/promicro/readme.md new file mode 100644 index 0000000000..584b446511 --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/v2/promicro/readme.md @@ -0,0 +1,13 @@ +# Sweet16 V2 (Pro Micro) + +A 4x4 numpad/macro pad sold by 1up Keyboards - designed by Clueboard + +* Keyboard Maintainer: skullydazed +* Hardware Supported: Sweet16 V2 PCB, Pro Micro +* Hardware Availability: [1up Keyboards](https://1upkeyboards.com/) + +Make example for this keyboard (after setting up your build environment): + + make 1upkeyboards/sweet16/v2/promicro: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). diff --git a/keyboards/1upkeyboards/sweet16/v2/promicro/rules.mk b/keyboards/1upkeyboards/sweet16/v2/promicro/rules.mk new file mode 100644 index 0000000000..4b08a7e6b0 --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/v2/promicro/rules.mk @@ -0,0 +1,10 @@ +MCU = atmega32u4 +BOOTLOADER = caterina +LINK_TIME_OPTIMIZATION_ENABLE=yes + +## Features +CONSOLE_ENABLE = yes + +## On a Pro Micro you have to choose between underglow and the rotary encoder. +RGBLIGHT_ENABLE = no +ENCODER_ENABLE = yes diff --git a/keyboards/1upkeyboards/sweet16/v2/proton_c/config.h b/keyboards/1upkeyboards/sweet16/v2/proton_c/config.h new file mode 100644 index 0000000000..6f27f0b623 --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/v2/proton_c/config.h @@ -0,0 +1,20 @@ +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define PRODUCT_ID 0x2011 +#define DEVICE_VER 0x0001 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { B5, B7, B2, B0 } +#define MATRIX_COL_PINS { B8, A0, A10, A9 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION ROW2COL + +/* Encoder pins */ +#define ENCODERS_PAD_A { A2 } +#define ENCODERS_PAD_B { A1 } +#define ENCODER_RESOLUTION 4 diff --git a/keyboards/1upkeyboards/sweet16/v2/proton_c/proton_c.c b/keyboards/1upkeyboards/sweet16/v2/proton_c/proton_c.c new file mode 100644 index 0000000000..b08e33e81b --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/v2/proton_c/proton_c.c @@ -0,0 +1 @@ +#include "proton_c.h" diff --git a/keyboards/1upkeyboards/sweet16/v2/proton_c/proton_c.h b/keyboards/1upkeyboards/sweet16/v2/proton_c/proton_c.h new file mode 100644 index 0000000000..7320ccd9e0 --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/v2/proton_c/proton_c.h @@ -0,0 +1,30 @@ +#pragma once + +#include "quantum.h" + +// Any changes to the layout names and/or definitions must also be made to info.json + +#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 } \ +} + +#define LAYOUT_numpad_4x4( \ + K00, K01, K02, K03, \ + K10, K11, K12, \ + K20, K21, K22, K23, \ + K31, K32 \ +) { \ + { K00, K01, K02, K03 }, \ + { K10, K11, K12, KC_NO }, \ + { K20, K21, K22, K23 }, \ + { KC_NO, K31, K32, KC_NO } \ +} + diff --git a/keyboards/1upkeyboards/sweet16/v2/proton_c/readme.md b/keyboards/1upkeyboards/sweet16/v2/proton_c/readme.md new file mode 100644 index 0000000000..6806cc5739 --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/v2/proton_c/readme.md @@ -0,0 +1,13 @@ +# Sweet16 V2 (Proton C) + +A 4x4 numpad/macro pad sold by 1up Keyboards - designed by Clueboard + +* Keyboard Maintainer: skullydazed +* Hardware Supported: Sweet16 V2 PCB, Proton C +* Hardware Availability: [1up Keyboards](https://1upkeyboards.com/) + +Make example for this keyboard (after setting up your build environment): + + make 1upkeyboards/sweet16/v2/proton_c: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). diff --git a/keyboards/1upkeyboards/sweet16/v2/proton_c/rules.mk b/keyboards/1upkeyboards/sweet16/v2/proton_c/rules.mk new file mode 100644 index 0000000000..3bfa1623fd --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/v2/proton_c/rules.mk @@ -0,0 +1,6 @@ +MCU = STM32F303 + +## Features +CONSOLE_ENABLE = yes +ENCODER_ENABLE = yes +AUDIO_ENABLE = yes |