qmk-keychron-q3-colemak-dh/keyboards/work_louder/micro/micro.c
2023-01-01 11:57:15 +11:00

152 lines
3.7 KiB
C

// Copyright 2022 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#if defined(RGB_MATRIX_ENABLE)
// clang-format off
led_config_t g_led_config = { {
{ NO_LED, 10, 11, NO_LED },
{ 9 , 8, 7, 6 },
{ 2, 3, 4, 5 },
{ NO_LED, 1, 0, NO_LED }
}, {
{ 122, 64 }, { 103, 64 },
{ 84, 45 }, { 103, 45 }, { 133, 45 }, { 152, 45 },
{ 152, 26 }, { 122, 26 }, { 103, 26 }, { 84, 26 },
{ 103, 7 }, { 122, 7 }
},
{
4, 4,
4, 4, 4, 4,
4, 4, 4, 4,
4, 4
}
};
// clang-format on
#endif
#if defined(ENCODER_ENABLE)
bool encoder_update_kb(uint8_t index, bool clockwise) {
if (!encoder_update_user(index, clockwise)) {
return false;
}
if (index == 0) {
if (clockwise) {
tap_code_delay(KC_VOLU, 10);
} else {
tap_code_delay(KC_VOLD, 10);
}
} else if (index == 1) {
if (clockwise) {
tap_code_delay(KC_WH_U, 10);
} else {
tap_code_delay(KC_WH_D, 10);
}
}
return true;
}
#endif
void work_louder_micro_led_1_on(void) {
setPinOutput(WORK_LOUDER_LED_PIN_1);
writePin(WORK_LOUDER_LED_PIN_1, true);
}
void work_louder_micro_led_2_on(void) {
setPinOutput(WORK_LOUDER_LED_PIN_2);
writePin(WORK_LOUDER_LED_PIN_2, true);
}
void work_louder_micro_led_3_on(void) {
setPinOutput(WORK_LOUDER_LED_PIN_3);
writePin(WORK_LOUDER_LED_PIN_3, true);
}
void work_louder_micro_led_1_off(void) {
setPinInput(WORK_LOUDER_LED_PIN_1);
writePin(WORK_LOUDER_LED_PIN_1, false);
}
void work_louder_micro_led_2_off(void) {
setPinInput(WORK_LOUDER_LED_PIN_2);
writePin(WORK_LOUDER_LED_PIN_2, false);
}
void work_louder_micro_led_3_off(void) {
setPinInput(WORK_LOUDER_LED_PIN_3);
writePin(WORK_LOUDER_LED_PIN_3, false);
}
void work_louder_micro_led_all_on(void) {
work_louder_micro_led_1_on();
work_louder_micro_led_2_on();
work_louder_micro_led_3_on();
}
void work_louder_micro_led_all_off(void) {
work_louder_micro_led_1_off();
work_louder_micro_led_2_off();
work_louder_micro_led_3_off();
}
void work_louder_micro_led_1_set(uint8_t n) {
#if WORK_LOUDER_LED_PIN_1 == B6
OCR1B = n;
#else
n ? work_louder_micro_led_1_on() : work_louder_micro_led_1_off();
#endif
}
void work_louder_micro_led_2_set(uint8_t n) {
#if WORK_LOUDER_LED_PIN_2 == B7
OCR1C = n;
#else
n ? work_louder_micro_led_2_on() : work_louder_micro_led_2_off();
#endif
}
void work_louder_micro_led_3_set(uint8_t n) {
#if WORK_LOUDER_LED_PIN_3 == B5
OCR1A = n;
#else
n ? work_louder_micro_led_3_on() : work_louder_micro_led_3_off();
#endif
}
void work_louder_micro_led_all_set(uint8_t n) {
work_louder_micro_led_1_set(n);
work_louder_micro_led_2_set(n);
work_louder_micro_led_3_set(n);
}
void keyboard_post_init_kb(void) {
TCCR1A = 0b10101001; // set and configure fast PWM
TCCR1B = 0b00001001; // set and configure fast PWM
keyboard_post_init_user();
}
void work_louder_led_init_animation(void) {
work_louder_micro_led_all_off();
wait_ms(500);
work_louder_micro_led_1_on();
wait_ms(100);
work_louder_micro_led_2_on();
wait_ms(100);
work_louder_micro_led_3_on();
wait_ms(100);
work_louder_micro_led_1_off();
wait_ms(100);
work_louder_micro_led_2_off();
wait_ms(100);
work_louder_micro_led_3_off();
wait_ms(200);
}
void suspend_power_down_kb(void) {
suspend_power_down_user();
work_louder_micro_led_all_off();
}
void suspend_wakeup_init_kb(void) {
work_louder_led_init_animation();
suspend_wakeup_init_user();
}