qmk-keychron-q3-colemak-dh/keyboards/rgbkb/mun/rev1/rev1.c

123 lines
5.0 KiB
C

/*
* ----------------------------------------------------------------------------
* "THE BEER-WARE LICENSE" (Revision 42):
* <https://github.com/Legonut> wrote this file. As long as you retain this
* notice you can do whatever you want with this stuff. If we meet some day, and
* you think this stuff is worth it, you can buy me a beer in return. David Rauseo
* ----------------------------------------------------------------------------
*/
#include "rev1.h"
#define NUMBER_OF_TOUCH_ENCODERS 2
#define TOUCH_ENCODER_OPTIONS TOUCH_SEGMENTS + 2
#define NUMBER_OF_ENCODERS 4
#define ENCODER_OPTIONS 2
typedef struct PACKED {
uint8_t r;
uint8_t c;
} encodermap_t;
// this maps encoders and then touch encoders to their respective electrical matrix entry
// mapping is row (y) then column (x) when looking at the electrical layout
const encodermap_t encoder_map[NUMBER_OF_ENCODERS][ENCODER_OPTIONS] =
{
{ { 5, 0 }, { 5, 1 } }, // Encoder 1 matrix entries
{ { 5, 2 }, { 5, 3 } }, // Encoder 2 matrix entries
{ { 12, 0 }, { 12, 1 } }, // Encoder 3 matrix entries
{ { 12, 2 }, { 12, 3 } }, // Encoder 4 matrix entries
};
const encodermap_t touch_encoder_map[NUMBER_OF_TOUCH_ENCODERS][TOUCH_ENCODER_OPTIONS] =
{
{ { 6, 0 }, { 6, 1 }, { 6, 2 }, { 6, 3 }, { 6, 4 } }, // Touch Encoder 1 matrix entries
{ { 13, 0 }, { 13, 1 }, { 13, 2 }, { 13, 3 }, { 13, 4 } } // Touch Encoder 2 matrix entries
};
static void process_encoder_matrix(encodermap_t pos) {
action_exec((keyevent_t){
.key = (keypos_t){.row = pos.r, .col = pos.c}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */
});
#if TAP_CODE_DELAY > 0
wait_ms(TAP_CODE_DELAY);
#endif
action_exec((keyevent_t){
.key = (keypos_t){.row = pos.r, .col = pos.c}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */
});
}
bool encoder_update_kb(uint8_t index, bool clockwise) {
if (!encoder_update_user(index, clockwise))
return false;
// Mapping clockwise (typically increase) to zero, and counter clockwise (decrease) to 1
process_encoder_matrix(encoder_map[index][clockwise ? 0 : 1]);
return false;
}
bool touch_encoder_update_kb(uint8_t index, bool clockwise) {
if (!touch_encoder_update_user(index, clockwise))
return false;
// Mapping clockwise (typically increase) to zero, and counter clockwise (decrease) to 1
process_encoder_matrix(touch_encoder_map[index][clockwise ? 0 : 1]);
return false;
}
bool touch_encoder_tapped_kb(uint8_t index, uint8_t section) {
if (!touch_encoder_tapped_user(index, section))
return false;
process_encoder_matrix(touch_encoder_map[index][section + 2]);
return false;
}
#ifdef RGB_MATRIX_ENABLE
// clang-format off
led_config_t g_led_config = { {
{ 0, 1, 2, 3, 4, 5, 6 },
{ 13, 12, 11, 10, 9, 8, 7 },
{ 14, 15, 16, 17, 18, 19, 20 },
{ 27, 26, 25, 24, 23, 22, 21 },
{ 28, 29, 30, 31, 32, 33, 34 },
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
{ 49, 50, 51, 52, 53, 54, 55 },
{ 62, 61, 60, 59, 58, 57, 56 },
{ 63, 64, 65, 66, 67, 68, 69 },
{ 76, 75, 74, 73, 72, 71, 70 },
{ 77, 78, 79, 80, 81, 82, 83 },
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }
}, {
{ 16, 16},{ 34, 16},{ 49, 16},{ 64, 16},{ 79, 16},{ 94, 16},{ 109, 16},
{ 109, 31},{ 94, 31},{ 79, 31},{ 64, 31},{ 49, 31},{ 34, 31},{ 16, 31},
{ 16, 46},{ 34, 46},{ 49, 46},{ 64, 46},{ 79, 46},{ 94, 46},{ 109, 46},
{ 109, 61},{ 94, 61},{ 79, 61},{ 64, 61},{ 49, 61},{ 34, 61},{ 16, 61},
{ 16, 76},{ 34, 76},{ 49, 76},{ 64, 76},{ 83, 72},{ 98, 72},{ 113, 72},
{ 97, 5},{ 91, 5},{ 86, 5},{ 80, 5},{ 75, 5},{ 69, 5},{ 63, 5},{ 58, 5},{ 52, 5},{ 46, 5},{ 41, 5},{ 35, 5},{ 30, 5},{ 24, 5},
{ 240, 16},{ 222, 16},{ 207, 16},{ 192, 16},{ 177, 16},{ 162, 16},{ 147, 16},
{ 147, 31},{ 162, 31},{ 177, 31},{ 192, 31},{ 207, 31},{ 222, 31},{ 240, 31},
{ 240, 46},{ 222, 46},{ 207, 46},{ 192, 46},{ 177, 46},{ 162, 46},{ 147, 46},
{ 147, 61},{ 162, 61},{ 177, 61},{ 192, 61},{ 207, 61},{ 222, 61},{ 240, 61},
{ 240, 76},{ 222, 76},{ 207, 76},{ 192, 76},{ 180, 72},{ 165, 72},{ 150, 72},
{ 159, 5},{ 164, 5},{ 170, 5},{ 176, 5},{ 181, 5},{ 187, 5},{ 192, 5},{ 198, 5},{ 204, 5},{ 209, 5},{ 215, 5},{ 221, 5},{ 226, 5},{ 232, 5},
}, {
1, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 1,
1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 1,
1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
} };
// clang-format on
#endif