|
|
@ -1,298 +1,324 @@ |
|
|
|
#include "../../m6_a.h" |
|
|
|
#include QMK_KEYBOARD_H |
|
|
|
|
|
|
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
|
|
|
|
|
|
|
KEYMAP( |
|
|
|
TO(1), KC_A, KC_B, KC_C, KC_D, KC_E), |
|
|
|
LAYOUT( |
|
|
|
TO(1), KC_A, KC_B, KC_C, KC_D, KC_E), |
|
|
|
|
|
|
|
KEYMAP( |
|
|
|
TO(2), KC_F, KC_G, KC_H, KC_I, KC_J), |
|
|
|
LAYOUT( |
|
|
|
TO(2), KC_F, KC_G, KC_H, KC_I, KC_J), |
|
|
|
|
|
|
|
KEYMAP( |
|
|
|
TO(3), KC_K, KC_L, KC_M, KC_N, KC_O), |
|
|
|
LAYOUT( |
|
|
|
TO(3), KC_K, KC_L, KC_M, KC_N, KC_O), |
|
|
|
|
|
|
|
KEYMAP( |
|
|
|
TO(4), KC_P, KC_Q, KC_R, KC_S, KC_T), |
|
|
|
LAYOUT( |
|
|
|
TO(4), KC_P, KC_Q, KC_R, KC_S, KC_T), |
|
|
|
|
|
|
|
KEYMAP( |
|
|
|
TO(5), KC_U, KC_V, KC_W, KC_X, KC_Y), |
|
|
|
LAYOUT( |
|
|
|
TO(5), KC_U, KC_V, KC_W, KC_X, KC_Y), |
|
|
|
|
|
|
|
KEYMAP( |
|
|
|
TO(0), KC_Z, KC_1, KC_2, KC_3, KC_4) |
|
|
|
}; |
|
|
|
LAYOUT( |
|
|
|
TO(0), KC_Z, KC_1, KC_2, KC_3, KC_4)}; |
|
|
|
|
|
|
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { |
|
|
|
//keyevent_t event = record->event; |
|
|
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) |
|
|
|
{ |
|
|
|
//keyevent_t event = record->event; |
|
|
|
|
|
|
|
switch (id) { |
|
|
|
case 0: |
|
|
|
if (record->event.pressed) { |
|
|
|
return MACRO( T(T), T(G), T(L), T(H), T(F), T(ENT), END ); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 1: |
|
|
|
if (record->event.pressed) { |
|
|
|
return MACRO( T(T), T(G), T(G), T(ENT), END ); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
if (record->event.pressed) { |
|
|
|
return MACRO( D(NO), T(L), U(NO), END ); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
if (record->event.pressed) { |
|
|
|
return MACRO( D(LCTL), T(Z), U(LCTL), END ); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
if (record->event.pressed) { |
|
|
|
return MACRO( D(LCTL), D(LSFT), T(Z), U(LSFT), U(LCTL), END ); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 5: |
|
|
|
if (record->event.pressed) { |
|
|
|
return MACRO( D(LCTL), T(X), U(LCTL), END ); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 6: |
|
|
|
if (record->event.pressed) { |
|
|
|
return MACRO( D(LCTL), T(C), U(LCTL), END ); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 7: |
|
|
|
if (record->event.pressed) { |
|
|
|
return MACRO( D(LCTL), T(V), U(LCTL), END ); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
return MACRO_NONE; |
|
|
|
switch (id) |
|
|
|
{ |
|
|
|
case 0: |
|
|
|
if (record->event.pressed) |
|
|
|
{ |
|
|
|
return MACRO(T(T), T(G), T(L), T(H), T(F), T(ENT), END); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 1: |
|
|
|
if (record->event.pressed) |
|
|
|
{ |
|
|
|
return MACRO(T(T), T(G), T(G), T(ENT), END); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
if (record->event.pressed) |
|
|
|
{ |
|
|
|
return MACRO(D(NO), T(L), U(NO), END); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
if (record->event.pressed) |
|
|
|
{ |
|
|
|
return MACRO(D(LCTL), T(Z), U(LCTL), END); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
if (record->event.pressed) |
|
|
|
{ |
|
|
|
return MACRO(D(LCTL), D(LSFT), T(Z), U(LSFT), U(LCTL), END); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 5: |
|
|
|
if (record->event.pressed) |
|
|
|
{ |
|
|
|
return MACRO(D(LCTL), T(X), U(LCTL), END); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 6: |
|
|
|
if (record->event.pressed) |
|
|
|
{ |
|
|
|
return MACRO(D(LCTL), T(C), U(LCTL), END); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 7: |
|
|
|
if (record->event.pressed) |
|
|
|
{ |
|
|
|
return MACRO(D(LCTL), T(V), U(LCTL), END); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
return MACRO_NONE; |
|
|
|
} |
|
|
|
|
|
|
|
// M6-A LEDs are connected to D6, B6, F5, B4, C7, F7 |
|
|
|
// This is 1-based because I copied it from Knops code. |
|
|
|
void set_switch_led(int ledId, bool state) { |
|
|
|
if(state) { |
|
|
|
switch(ledId) { |
|
|
|
case 1: |
|
|
|
PORTD |= (1<<6); |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
PORTB |= (1<<6); |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
PORTF |= (1<<5); |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
PORTB |= (1<<4); |
|
|
|
break; |
|
|
|
case 5: |
|
|
|
PORTC |= (1<<7); |
|
|
|
break; |
|
|
|
case 6: |
|
|
|
PORTF |= (1<<7); |
|
|
|
break; |
|
|
|
} |
|
|
|
} else { |
|
|
|
switch(ledId) { |
|
|
|
case 1: |
|
|
|
PORTD &= ~(1<<6); |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
PORTB &= ~(1<<6); |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
PORTF &= ~(1<<5); |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
PORTB &= ~(1<<4); |
|
|
|
break; |
|
|
|
case 5: |
|
|
|
PORTC &= ~(1<<7); |
|
|
|
break; |
|
|
|
case 6: |
|
|
|
PORTF &= ~(1<<7); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
void set_switch_led(int ledId, bool state) |
|
|
|
{ |
|
|
|
if (state) |
|
|
|
{ |
|
|
|
switch (ledId) |
|
|
|
{ |
|
|
|
case 1: |
|
|
|
PORTD |= (1 << 6); |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
PORTB |= (1 << 6); |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
PORTF |= (1 << 5); |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
PORTB |= (1 << 4); |
|
|
|
break; |
|
|
|
case 5: |
|
|
|
PORTC |= (1 << 7); |
|
|
|
break; |
|
|
|
case 6: |
|
|
|
PORTF |= (1 << 7); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
switch (ledId) |
|
|
|
{ |
|
|
|
case 1: |
|
|
|
PORTD &= ~(1 << 6); |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
PORTB &= ~(1 << 6); |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
PORTF &= ~(1 << 5); |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
PORTB &= ~(1 << 4); |
|
|
|
break; |
|
|
|
case 5: |
|
|
|
PORTC &= ~(1 << 7); |
|
|
|
break; |
|
|
|
case 6: |
|
|
|
PORTF &= ~(1 << 7); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void set_layer_led(int layerId) { |
|
|
|
// UNUSED |
|
|
|
void set_layer_led(int layerId) |
|
|
|
{ |
|
|
|
// UNUSED |
|
|
|
} |
|
|
|
|
|
|
|
void led_set_layer(int layer); |
|
|
|
|
|
|
|
void matrix_init_user(void) { |
|
|
|
led_init_ports(); |
|
|
|
led_set_layer(0); |
|
|
|
void matrix_init_user(void) |
|
|
|
{ |
|
|
|
led_init_ports(); |
|
|
|
led_set_layer(0); |
|
|
|
} |
|
|
|
|
|
|
|
void matrix_scan_user(void) { |
|
|
|
void matrix_scan_user(void) |
|
|
|
{ |
|
|
|
} |
|
|
|
|
|
|
|
// M6-A LEDs are connected to D6, B6, F5, B4, C7, F7 |
|
|
|
void led_init_ports() { |
|
|
|
// Switch #1 |
|
|
|
DDRD |= (1<<6); |
|
|
|
PORTD &= ~(1<<6); |
|
|
|
|
|
|
|
// Switch #2 |
|
|
|
DDRB |= (1<<6); |
|
|
|
PORTB &= ~(1<<6); |
|
|
|
|
|
|
|
// Switch #3 |
|
|
|
DDRF |= (1<<5); |
|
|
|
PORTF &= ~(1<<5); |
|
|
|
|
|
|
|
// Switch #4 |
|
|
|
DDRB |= (1<<4); |
|
|
|
PORTB &= ~(1<<4); |
|
|
|
void led_init_ports() |
|
|
|
{ |
|
|
|
// Switch #1 |
|
|
|
DDRD |= (1 << 6); |
|
|
|
PORTD &= ~(1 << 6); |
|
|
|
|
|
|
|
// Switch #5 |
|
|
|
DDRC |= (1<<7); |
|
|
|
PORTC &= ~(1<<7); |
|
|
|
|
|
|
|
// Switch #6 |
|
|
|
DDRF |= (1<<7); |
|
|
|
PORTF &= ~(1<<7); |
|
|
|
} |
|
|
|
// Switch #2 |
|
|
|
DDRB |= (1 << 6); |
|
|
|
PORTB &= ~(1 << 6); |
|
|
|
|
|
|
|
void led_set_user(uint8_t usb_led) { |
|
|
|
// Switch #3 |
|
|
|
DDRF |= (1 << 5); |
|
|
|
PORTF &= ~(1 << 5); |
|
|
|
|
|
|
|
if (usb_led & (1 << USB_LED_NUM_LOCK)) { |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
} |
|
|
|
// Switch #4 |
|
|
|
DDRB |= (1 << 4); |
|
|
|
PORTB &= ~(1 << 4); |
|
|
|
|
|
|
|
if (usb_led & (1 << USB_LED_CAPS_LOCK)) { |
|
|
|
// Switch #5 |
|
|
|
DDRC |= (1 << 7); |
|
|
|
PORTC &= ~(1 << 7); |
|
|
|
|
|
|
|
// Switch #6 |
|
|
|
DDRF |= (1 << 7); |
|
|
|
PORTF &= ~(1 << 7); |
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
void led_set_user(uint8_t usb_led) |
|
|
|
{ |
|
|
|
|
|
|
|
} |
|
|
|
if (usb_led & (1 << USB_LED_NUM_LOCK)) |
|
|
|
{ |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
} |
|
|
|
|
|
|
|
if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
} |
|
|
|
if (usb_led & (1 << USB_LED_CAPS_LOCK)) |
|
|
|
{ |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
} |
|
|
|
|
|
|
|
if (usb_led & (1 << USB_LED_COMPOSE)) { |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
} |
|
|
|
if (usb_led & (1 << USB_LED_SCROLL_LOCK)) |
|
|
|
{ |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
} |
|
|
|
|
|
|
|
if (usb_led & (1 << USB_LED_KANA)) { |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
} |
|
|
|
if (usb_led & (1 << USB_LED_COMPOSE)) |
|
|
|
{ |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
} |
|
|
|
|
|
|
|
if (usb_led & (1 << USB_LED_KANA)) |
|
|
|
{ |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void led_set_layer(int layer) { |
|
|
|
switch(layer) { |
|
|
|
case 0: |
|
|
|
set_switch_led(1, true); |
|
|
|
set_switch_led(2, false); |
|
|
|
set_switch_led(3, false); |
|
|
|
set_switch_led(4, false); |
|
|
|
set_switch_led(5, false); |
|
|
|
set_switch_led(6, false); |
|
|
|
break; |
|
|
|
case 1: |
|
|
|
set_switch_led(1, false); |
|
|
|
set_switch_led(2, true); |
|
|
|
set_switch_led(3, false); |
|
|
|
set_switch_led(4, false); |
|
|
|
set_switch_led(5, false); |
|
|
|
set_switch_led(6, false); |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
set_switch_led(1, false); |
|
|
|
set_switch_led(2, false); |
|
|
|
set_switch_led(3, true); |
|
|
|
set_switch_led(4, false); |
|
|
|
set_switch_led(5, false); |
|
|
|
set_switch_led(6, false); |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
set_switch_led(1, false); |
|
|
|
set_switch_led(2, false); |
|
|
|
set_switch_led(3, false); |
|
|
|
set_switch_led(4, true); |
|
|
|
set_switch_led(5, false); |
|
|
|
set_switch_led(6, false); |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
set_switch_led(1, false); |
|
|
|
set_switch_led(2, false); |
|
|
|
set_switch_led(3, false); |
|
|
|
set_switch_led(4, false); |
|
|
|
set_switch_led(5, true); |
|
|
|
set_switch_led(6, false); |
|
|
|
break; |
|
|
|
case 5: |
|
|
|
set_switch_led(1, false); |
|
|
|
set_switch_led(2, false); |
|
|
|
set_switch_led(3, false); |
|
|
|
set_switch_led(4, false); |
|
|
|
set_switch_led(5, false); |
|
|
|
set_switch_led(6, true); |
|
|
|
break; |
|
|
|
default: |
|
|
|
set_switch_led(1, true); |
|
|
|
set_switch_led(2, true); |
|
|
|
set_switch_led(3, true); |
|
|
|
set_switch_led(4, true); |
|
|
|
set_switch_led(5, true); |
|
|
|
set_switch_led(6, true); |
|
|
|
break; |
|
|
|
} |
|
|
|
void led_set_layer(int layer) |
|
|
|
{ |
|
|
|
switch (layer) |
|
|
|
{ |
|
|
|
case 0: |
|
|
|
set_switch_led(1, true); |
|
|
|
set_switch_led(2, false); |
|
|
|
set_switch_led(3, false); |
|
|
|
set_switch_led(4, false); |
|
|
|
set_switch_led(5, false); |
|
|
|
set_switch_led(6, false); |
|
|
|
break; |
|
|
|
case 1: |
|
|
|
set_switch_led(1, false); |
|
|
|
set_switch_led(2, true); |
|
|
|
set_switch_led(3, false); |
|
|
|
set_switch_led(4, false); |
|
|
|
set_switch_led(5, false); |
|
|
|
set_switch_led(6, false); |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
set_switch_led(1, false); |
|
|
|
set_switch_led(2, false); |
|
|
|
set_switch_led(3, true); |
|
|
|
set_switch_led(4, false); |
|
|
|
set_switch_led(5, false); |
|
|
|
set_switch_led(6, false); |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
set_switch_led(1, false); |
|
|
|
set_switch_led(2, false); |
|
|
|
set_switch_led(3, false); |
|
|
|
set_switch_led(4, true); |
|
|
|
set_switch_led(5, false); |
|
|
|
set_switch_led(6, false); |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
set_switch_led(1, false); |
|
|
|
set_switch_led(2, false); |
|
|
|
set_switch_led(3, false); |
|
|
|
set_switch_led(4, false); |
|
|
|
set_switch_led(5, true); |
|
|
|
set_switch_led(6, false); |
|
|
|
break; |
|
|
|
case 5: |
|
|
|
set_switch_led(1, false); |
|
|
|
set_switch_led(2, false); |
|
|
|
set_switch_led(3, false); |
|
|
|
set_switch_led(4, false); |
|
|
|
set_switch_led(5, false); |
|
|
|
set_switch_led(6, true); |
|
|
|
break; |
|
|
|
default: |
|
|
|
set_switch_led(1, true); |
|
|
|
set_switch_led(2, true); |
|
|
|
set_switch_led(3, true); |
|
|
|
set_switch_led(4, true); |
|
|
|
set_switch_led(5, true); |
|
|
|
set_switch_led(6, true); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
bool process_record_user (uint16_t keycode, keyrecord_t *record) { |
|
|
|
switch ( keycode ) |
|
|
|
{ |
|
|
|
case TO( 0 ): |
|
|
|
if ( record->event.pressed ) |
|
|
|
{ |
|
|
|
led_set_layer( 0 ); |
|
|
|
} |
|
|
|
break; |
|
|
|
case TO( 1 ): |
|
|
|
if ( record->event.pressed ) |
|
|
|
{ |
|
|
|
led_set_layer( 1 ); |
|
|
|
} |
|
|
|
break; |
|
|
|
case TO( 2 ): |
|
|
|
if ( record->event.pressed ) |
|
|
|
{ |
|
|
|
led_set_layer( 2 ); |
|
|
|
} |
|
|
|
break; |
|
|
|
case TO( 3 ): |
|
|
|
if ( record->event.pressed ) |
|
|
|
{ |
|
|
|
led_set_layer( 3 ); |
|
|
|
} |
|
|
|
break; |
|
|
|
case TO( 4 ): |
|
|
|
if ( record->event.pressed ) |
|
|
|
{ |
|
|
|
led_set_layer( 4 ); |
|
|
|
} |
|
|
|
break; |
|
|
|
case TO( 5 ): |
|
|
|
if ( record->event.pressed ) |
|
|
|
{ |
|
|
|
led_set_layer( 5 ); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
return true; |
|
|
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) |
|
|
|
{ |
|
|
|
switch (keycode) |
|
|
|
{ |
|
|
|
case TO(0): |
|
|
|
if (record->event.pressed) |
|
|
|
{ |
|
|
|
led_set_layer(0); |
|
|
|
} |
|
|
|
break; |
|
|
|
case TO(1): |
|
|
|
if (record->event.pressed) |
|
|
|
{ |
|
|
|
led_set_layer(1); |
|
|
|
} |
|
|
|
break; |
|
|
|
case TO(2): |
|
|
|
if (record->event.pressed) |
|
|
|
{ |
|
|
|
led_set_layer(2); |
|
|
|
} |
|
|
|
break; |
|
|
|
case TO(3): |
|
|
|
if (record->event.pressed) |
|
|
|
{ |
|
|
|
led_set_layer(3); |
|
|
|
} |
|
|
|
break; |
|
|
|
case TO(4): |
|
|
|
if (record->event.pressed) |
|
|
|
{ |
|
|
|
led_set_layer(4); |
|
|
|
} |
|
|
|
break; |
|
|
|
case TO(5): |
|
|
|
if (record->event.pressed) |
|
|
|
{ |
|
|
|
led_set_layer(5); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
return true; |
|
|
|
} |