forked from qmk/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
13 changed files
with
288 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,4 @@ | ||
# MCU name | ||
MCU = atmega328p | ||
# NOTE: This file is shared and only exists to set the default build | ||
# The real build rules are set in the v1/v2 directories | ||
|
||
# Bootloader selection | ||
BOOTLOADER = usbasploader | ||
|
||
# Build Options | ||
# change yes to no to disable | ||
# | ||
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite | ||
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 | ||
NKRO_ENABLE = no # Enable N-Key Rollover | ||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | ||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow | ||
AUDIO_ENABLE = no # Audio output | ||
ENCODER_ENABLE = yes # Use rotary encoder | ||
DEFAULT_FOLDER = nullbitsco/scramble/v2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# NOTE: This file is specific to AVR builds. | ||
|
||
# MCU name | ||
MCU = atmega328p | ||
|
||
# Bootloader selection | ||
BOOTLOADER = usbasploader | ||
|
||
# Build Options | ||
# change yes to no to disable | ||
# | ||
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite | ||
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 | ||
NKRO_ENABLE = no # Enable N-Key Rollover | ||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | ||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow | ||
AUDIO_ENABLE = no # Audio output | ||
ENCODER_ENABLE = yes # Use rotary encoder |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
// Copyright 2022 Jay Greco | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
|
||
#include "v1.h" | ||
|
||
void set_scramble_LED(uint8_t mode) { | ||
switch(mode) { | ||
case LED_ON: | ||
setPinOutput(PIN_LED); | ||
writePin(PIN_LED, GPIO_STATE_HIGH); | ||
break; | ||
|
||
case LED_DIM: | ||
setPinInput(PIN_LED); | ||
break; | ||
|
||
case LED_OFF: | ||
setPinOutput(PIN_LED); | ||
writePin(PIN_LED, GPIO_STATE_LOW); | ||
break; | ||
|
||
default: | ||
break; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
// Copyright 2022 Jay Greco | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
|
||
#pragma once | ||
|
||
#include "scramble.h" | ||
|
||
// Indication LED settings | ||
#define LED_ON 2 | ||
#define LED_DIM 1 | ||
#define LED_OFF 0 | ||
|
||
#define GPIO_STATE_LOW 0 | ||
#define GPIO_STATE_HIGH 1 | ||
|
||
#define PIN_LED B2 | ||
|
||
void set_scramble_LED(uint8_t mode); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
/* | ||
Copyright 2021 Jay Greco | ||
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 <http://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
/* NOTE: This config file is specific to RP2040 builds. */ | ||
|
||
#pragma once | ||
|
||
#include "config_common.h" | ||
|
||
/* key matrix size */ | ||
#define MATRIX_ROWS 2 | ||
#define MATRIX_COLS 3 | ||
|
||
#define DIRECT_PINS {{GP6,GP8,GP10}, {GP29,GP28,GP22}} | ||
|
||
/* Set 0 if debouncing isn't needed */ | ||
#define DEBOUNCE 10 | ||
|
||
/* Optional encoder pins */ | ||
#define ENCODERS_PAD_A { GP24 } | ||
#define ENCODERS_PAD_B { GP25 } | ||
#define TAP_CODE_DELAY 10 | ||
|
||
/* RP2040-specific defines*/ | ||
#define RP2040_FLASH_GENERIC_03H | ||
#define I2C1_SDA_PIN GP26 | ||
#define I2C1_SCL_PIN GP27 | ||
#define I2C_DRIVER I2CD2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
// Copyright 2022 Jay Greco | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
|
||
#pragma once | ||
|
||
#define HAL_USE_I2C TRUE | ||
#define HAL_USE_PWM TRUE | ||
|
||
#include_next <halconf.h> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
// Copyright 2022 Jay Greco | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
|
||
#pragma once | ||
|
||
#include_next <mcuconf.h> | ||
|
||
#undef RP_I2C_USE_I2C1 | ||
#define RP_I2C_USE_I2C1 TRUE | ||
|
||
#undef RP_PWM_USE_PWM1 | ||
#define RP_PWM_USE_PWM1 TRUE | ||
#undef RP_PWM_USE_PWM2 | ||
#define RP_PWM_USE_PWM2 TRUE |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# NOTE: This file is is specific to RP2040 builds. | ||
|
||
# MCU name | ||
MCU = RP2040 | ||
|
||
# Bootloader selection | ||
BOOTLOADER = rp2040 | ||
|
||
# Build Options | ||
# change yes to no to disable | ||
# | ||
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite | ||
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 | ||
NKRO_ENABLE = no # Enable N-Key Rollover | ||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | ||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow | ||
AUDIO_ENABLE = no # Audio output | ||
ENCODER_ENABLE = yes # Use rotary encoder |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
// Copyright 2022 Jay Greco | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
|
||
#include "v2.h" | ||
|
||
// SCRAMBLE PWM LED config | ||
pwm_led_t scramble_rgb = { | ||
{GP18, GP19, GP20}, | ||
{&PWMD1, &PWMD1, &PWMD2}, | ||
{0, 1, 0}, | ||
PWM_OUTPUT_ACTIVE_LOW, | ||
0 | ||
}; | ||
|
||
// Internal PWM init | ||
// only runs once per PWM LED | ||
void _init_pwm(pwm_led_t* led) { | ||
if (!led->init_complete) { | ||
for (int i=0; i<NUM_RGB_IDX; i++) { | ||
palSetPadMode(PAL_PORT(led->pin[i]), PAL_PAD(led->pin[i]), PWM_PAL_MODE); | ||
|
||
static PWMConfig pwmCFG = { | ||
.frequency = PWM_PWM_COUNTER_FREQUENCY, | ||
.period = PWM_PWM_PERIOD, | ||
}; | ||
|
||
// Channels are always configured as active low | ||
// If active high is needed, pwm is inverted in _set_led_pwm() | ||
pwmCFG.channels[0].mode = PWM_OUTPUT_ACTIVE_LOW; | ||
pwmCFG.channels[1].mode = PWM_OUTPUT_ACTIVE_LOW; | ||
pwmStart(led->driver[i], &pwmCFG); | ||
|
||
// Start LEDs in the OFF state | ||
uint8_t pwm = led->mode == PWM_OUTPUT_ACTIVE_HIGH ? 100 : 0; | ||
pwmEnableChannel(led->driver[i], led->channel[i], PWM_FRACTION_TO_WIDTH(led->driver[i], 99, pwm)); | ||
} | ||
|
||
led->init_complete = 1; | ||
} | ||
} | ||
|
||
// Internal generic PWM setter | ||
void _set_led_pwm(uint8_t pwm, pwm_led_t* led, uint8_t channel) { | ||
if (pwm > 100) pwm = 100; | ||
if (led->mode == PWM_OUTPUT_ACTIVE_HIGH) pwm = (100 - pwm); | ||
|
||
_init_pwm(led); | ||
pwmEnableChannel(led->driver[channel], led->channel[channel], PWM_FRACTION_TO_WIDTH(led->driver[channel], 99, pwm)); | ||
} | ||
|
||
// SCRAMBLE | ||
void set_scramble_LED(uint8_t mode) { | ||
switch(mode) { | ||
case LED_ON: | ||
set_scramble_LED_rgb_pwm(65, 100, 95); | ||
break; | ||
|
||
case LED_DIM: | ||
set_scramble_LED_rgb_pwm(3, 9, 3); | ||
break; | ||
|
||
default: //LED_OFF | ||
set_scramble_LED_rgb_pwm(0, 0, 0); | ||
break; | ||
} | ||
} | ||
|
||
void set_scramble_LED_rgb_pwm(uint8_t r_pwm, uint8_t g_pwm, uint8_t b_pwm) { | ||
_set_led_pwm(r_pwm, &scramble_rgb, RED); | ||
_set_led_pwm(g_pwm, &scramble_rgb, GREEN); | ||
_set_led_pwm(b_pwm, &scramble_rgb, BLUE); | ||
} | ||
|
||
void set_scramble_LED_r_pwm(uint8_t pwm) { | ||
_set_led_pwm(pwm, &scramble_rgb, RED); | ||
} | ||
|
||
void set_scramble_LED_g_pwm(uint8_t pwm) { | ||
_set_led_pwm(pwm, &scramble_rgb, GREEN); | ||
} | ||
|
||
void set_scramble_LED_b_pwm(uint8_t pwm) { | ||
_set_led_pwm(pwm, &scramble_rgb, BLUE); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
// Copyright 2022 Jay Greco | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
|
||
#pragma once | ||
|
||
#include "scramble.h" | ||
#include <hal.h> | ||
|
||
enum led_mode { | ||
LED_OFF = 0, | ||
LED_DIM, | ||
LED_ON, | ||
NUM_LED_MODE | ||
}; | ||
|
||
enum rgb_idx { | ||
RED = 0, | ||
GREEN, | ||
BLUE, | ||
NUM_RGB_IDX | ||
}; | ||
|
||
typedef struct pwm_led_t { | ||
uint32_t pin[3]; | ||
PWMDriver* driver[3]; | ||
uint8_t channel[3]; | ||
uint8_t mode; | ||
uint8_t init_complete; | ||
} pwm_led_t; | ||
|
||
#define PWM_PAL_MODE (PAL_MODE_ALTERNATE_PWM | PAL_RP_PAD_DRIVE12 | PAL_RP_GPIO_OE) | ||
#define PWM_PWM_COUNTER_FREQUENCY 1000000 | ||
#define PWM_PWM_PERIOD PWM_PWM_COUNTER_FREQUENCY / 1000 | ||
|
||
// RP2040 adds HW PWM control! | ||
// PWM values are in percent, 0-100 | ||
void | ||
set_scramble_LED(uint8_t mode), | ||
set_scramble_LED_rgb_pwm(uint8_t r_pwm, uint8_t g_pwm, uint8_t b_pwm), | ||
set_scramble_LED_r_pwm(uint8_t pwm), | ||
set_scramble_LED_g_pwm(uint8_t pwm), | ||
set_scramble_LED_b_pwm(uint8_t pwm); | ||
|