[Keymap] Add BB8520 trackpad support for CrKbd (#5925)

* Add vlukash CrKbd keymap to support trackpad adapter.

The trackpad adapter uses Elite-C board that has five extra pins.
Also SPI pins are taken for trackpad, keymap config updates column data
pins for matrix scan.

* Update vlukash keymap

* Enable pointing devide, configure mouse BTN1

* Set TAPPING_TERM to 300

* Add support for the BlackBerry 8520 trackpad

* Add vlukash keymap for master-right no-trackpad version

* Remap backspace

* Set EXTRAKEY_ENABLE = yes

* Update thumb keys mappings

* Set bootloader to atmel-dfu

* Sync keymap

* Add scrolling support

* Make debug LEDS conditional

* Add support for both flex and no-flex PCBs

* Add readme and rename root folders

* Update readme file with blog link

* Fix readme file formatting

* Remove ADJUST keycode, code cleanup.

* Add Win key to the keymap.
This commit is contained in:
Volodymyr Lukashevych 2019-06-11 15:18:14 -07:00 committed by Drashna Jaelre
parent 2558466d78
commit b92387b749
11 changed files with 684 additions and 7 deletions

View file

@ -0,0 +1,21 @@
#pragma once
/* Select hand configuration */
#define MASTER_RIGHT
// #define EE_HANDS
#define SSD1306OLED
#define USE_SERIAL_PD2
#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 100
#undef RGBLED_NUM
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 27
#define RGBLIGHT_LIMIT_VAL 120
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17

View file

@ -0,0 +1,227 @@
#include QMK_KEYBOARD_H
#include "bootloader.h"
#ifdef PROTOCOL_LUFA
#include "lufa.h"
#include "split_util.h"
#endif
#ifdef SSD1306OLED
#include "ssd1306.h"
#endif
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
extern rgblight_config_t rgblight_config;
#endif
extern uint8_t is_master;
enum layer_names {
_QWERTY,
_LOWER,
_RAISE,
_ADJUST
};
enum custom_keycodes {
QWERTY = SAFE_RANGE,
LOWER,
RAISE,
RGBRST,
MBTN1,
SCRL
};
#define KC______ KC_TRNS
#define KC_XXXXX KC_NO
#define KC_LOWER LOWER
#define KC_RAISE RAISE
#define KC_RST RESET
#define KC_LRST RGBRST
#define KC_LTOG RGB_TOG
#define KC_LHUI RGB_HUI
#define KC_LHUD RGB_HUD
#define KC_LSAI RGB_SAI
#define KC_LSAD RGB_SAD
#define KC_LVAI RGB_VAI
#define KC_LVAD RGB_VAD
#define KC_LMOD RGB_MOD
#define KC_CTLA CTL_T(KC_A)
#define KC_CTLSC CTL_T(KC_SCLN)
#define KC_SFTZ SFT_T(KC_Z)
#define KC_SFTSL SFT_T(KC_SLSH)
#define KC_WINX LWIN_T(KC_X)
#define KC_WINDO RWIN_T(KC_DOT)
#define KC_MBTN1 MBTN1
#define KC_SCRL SCRL
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_kc(
//,-----------------------------------------. ,-----------------------------------------.
ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
TAB, CTLA, S, D, F, G, H, J, K, L, CTLSC, QUOT,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
GRAVE, SFTZ, WINX, C, V, B, N, M, COMM, WINDO, SFTSL,BSLASH,
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
LOWER, SPC, SCRL, MBTN1, ENT, RAISE
//`--------------------' `--------------------'
),
[_LOWER] = LAYOUT_kc(
//,-----------------------------------------. ,-----------------------------------------.
ESC, XXXXX, PGDN, PSCR, PGUP, LBRC, RBRC, 7, 8, 9, XXXXX, XXXXX,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
XXXXX, LCTRL, PLUS, MINS, EQL, LPRN, RPRN, 4, 5, 6, RCTRL, XXXXX,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
XXXXX, LSFT, HOME, XXXXX, END, LCBR, RCBR, 1, 2, 3, RSFT, XXXXX,
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
LOWER, SPC, SCRL, MBTN1, ENT, 0
//`--------------------' `--------------------'
),
[_RAISE] = LAYOUT_kc(
//,-----------------------------------------. ,-----------------------------------------.
ESC, XXXXX, F7, F8, F9, F10, BTN2, BTN2, MNXT, MPRV, MPLY, MSTP,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
XXXXX, LCTRL, F4, F5, F6, F11, LEFT, DOWN, UP, RIGHT, RCTRL, XXXXX,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
XXXXX, LSFT, F1, F2, F3, F12, XXXXX, XXXXX, VOLU, VOLD, MUTE, RSFT,
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
LOWER, SPC, SCRL, MBTN1, ENT, RAISE
//`--------------------' `--------------------'
),
[_ADJUST] = LAYOUT_kc(
//,-----------------------------------------. ,-----------------------------------------.
RST, LRST, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, RST,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
LMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
LOWER, SPC, SCRL, MBTN1, ENT, RAISE
//`--------------------' `--------------------'
)
};
int RGB_current_mode;
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
}
// Setting ADJUST layer RGB back to default
void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
layer_on(layer3);
} else {
layer_off(layer3);
}
}
void matrix_init_user(void) {
#ifdef RGBLIGHT_ENABLE
RGB_current_mode = rgblight_config.mode;
#endif
//SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
#ifdef SSD1306OLED
iota_gfx_init(!has_usb()); // turns on the display
#endif
}
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
#ifdef SSD1306OLED
// When add source files to SRC in rules.mk, you can use functions.
const char *read_layer_state(void);
const char *read_logo(void);
void set_keylog(uint16_t keycode, keyrecord_t *record);
const char *read_keylog(void);
const char *read_keylogs(void);
void matrix_scan_user(void) {
iota_gfx_task();
}
void matrix_render_user(struct CharacterMatrix *matrix) {
if (is_master) {
// If you want to change the display of OLED, you need to change here
matrix_write_ln(matrix, read_layer_state());
matrix_write_ln(matrix, read_keylog());
matrix_write_ln(matrix, read_keylogs());
} else {
matrix_write(matrix, read_logo());
}
}
void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
memcpy(dest->display, source->display, sizeof(dest->display));
dest->dirty = true;
}
}
void iota_gfx_task_user(void) {
struct CharacterMatrix matrix;
matrix_clear(&matrix);
matrix_render_user(&matrix);
matrix_update(&display, &matrix);
}
#endif//SSD1306OLED
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
#ifdef SSD1306OLED
set_keylog(keycode, record);
#endif
}
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
persistent_default_layer_set(1UL<<_QWERTY);
}
return false;
case LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_LOWER);
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
}
return false;
case RAISE:
if (record->event.pressed) {
layer_on(_RAISE);
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_RAISE);
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
}
return false;
case RGB_MOD:
#ifdef RGBLIGHT_ENABLE
if (record->event.pressed) {
rgblight_mode(RGB_current_mode);
rgblight_step();
RGB_current_mode = rgblight_config.mode;
}
#endif
return false;
case RGBRST:
#ifdef RGBLIGHT_ENABLE
if (record->event.pressed) {
eeconfig_update_rgblight_default();
rgblight_enable();
RGB_current_mode = rgblight_config.mode;
}
#endif
break;
}
return true;
}

View file

@ -0,0 +1,14 @@
# CrKbd with the Trackpad support
CrKbd version that supports BlackBerry 8520 trackpad via additional PCB.
See this repository for more details:
- https://github.com/vlukash/corne-trackpad
- https://vlukash.com/2019/01/15/trackpad-in-keycap-corne-crkbd-keyboard
This firmware is for the Left keyboard.
# Build
```
make crkbd:vlukash_trackpad_left:dfu
```

View file

@ -0,0 +1,11 @@
# Build Options
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
BOOTLOADER = atmel-dfu
# If you want to change the display of OLED, you need to change here
SRC += ./lib/glcdfont.c \
./lib/rgb_state_reader.c \
./lib/layer_state_reader.c \
./lib/logo_reader.c \
./lib/keylogger.c \

View file

@ -0,0 +1,35 @@
#pragma once
#define NO_DEBUG_LEDS
// Connector PCB version
// 1 - PCB that supports flex caple and the trackpad sensor is mounted on an 'H' keycap
// - https://github.com/vlukash/corne-trackpad/tree/master/connector
// 2 - PCB woth no flex option, track sensor mounted directly on the PCB
// - https://github.com/vlukash/corne-trackpad/tree/master/connector-no-flex
#define TRACKPAD_CONNECTOR_VER 1
/* Select hand configuration */
#define MASTER_RIGHT
#define USE_SERIAL_PD2
#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 300
#undef RGBLED_NUM
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 27
#define RGBLIGHT_LIMIT_VAL 120
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
/* key matrix size */
// Rows are doubled-up
#undef MATRIX_COL_PINS
#define MATRIX_COL_PINS { F4, F5, F6, F7, B7, D5 }
/* ws2812 RGB LED */
#undef RGB_DI_PIN
#define RGB_DI_PIN B5

View file

@ -0,0 +1,199 @@
#include QMK_KEYBOARD_H
#include "bootloader.h"
#include "mousekey.h"
#include "pointing_device.h"
#include "report.h"
#ifdef PROTOCOL_LUFA
#include "lufa.h"
#include "split_util.h"
#endif
extern bool isScrollMode;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
extern rgblight_config_t rgblight_config;
#endif
extern uint8_t is_master;
enum layer_names {
_QWERTY,
_LOWER,
_RAISE,
_ADJUST
};
enum custom_keycodes {
QWERTY = SAFE_RANGE,
LOWER,
RAISE,
RGBRST,
MBTN1,
SCRL
};
#define KC______ KC_TRNS
#define KC_XXXXX KC_NO
#define KC_LOWER LOWER
#define KC_RAISE RAISE
#define KC_RST RESET
#define KC_LRST RGBRST
#define KC_LTOG RGB_TOG
#define KC_LHUI RGB_HUI
#define KC_LHUD RGB_HUD
#define KC_LSAI RGB_SAI
#define KC_LSAD RGB_SAD
#define KC_LVAI RGB_VAI
#define KC_LVAD RGB_VAD
#define KC_LMOD RGB_MOD
#define KC_CTLA CTL_T(KC_A)
#define KC_CTLSC CTL_T(KC_SCLN)
#define KC_SFTZ SFT_T(KC_Z)
#define KC_SFTSL SFT_T(KC_SLSH)
#define KC_WINX LWIN_T(KC_X)
#define KC_WINDO RWIN_T(KC_DOT)
#define KC_MBTN1 MBTN1
#define KC_SCRL SCRL
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_kc(
//,-----------------------------------------. ,-----------------------------------------.
ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
TAB, CTLA, S, D, F, G, H, J, K, L, CTLSC, QUOT,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
GRAVE, SFTZ, WINX, C, V, B, N, M, COMM, WINDO, SFTSL,BSLASH,
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
LOWER, SPC, SCRL, MBTN1, ENT, RAISE
//`--------------------' `--------------------'
),
[_LOWER] = LAYOUT_kc(
//,-----------------------------------------. ,-----------------------------------------.
ESC, XXXXX, PGDN, PSCR, PGUP, LBRC, RBRC, 7, 8, 9, XXXXX, XXXXX,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
XXXXX, LCTRL, PLUS, MINS, EQL, LPRN, RPRN, 4, 5, 6, RCTRL, XXXXX,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
XXXXX, LSFT, HOME, XXXXX, END, LCBR, RCBR, 1, 2, 3, RSFT, XXXXX,
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
LOWER, SPC, SCRL, MBTN1, ENT, 0
//`--------------------' `--------------------'
),
[_RAISE] = LAYOUT_kc(
//,-----------------------------------------. ,-----------------------------------------.
ESC, XXXXX, F7, F8, F9, F10, BTN2, BTN2, MNXT, MPRV, MPLY, MSTP,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
XXXXX, LCTRL, F4, F5, F6, F11, LEFT, DOWN, UP, RIGHT, RCTRL, XXXXX,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
XXXXX, LSFT, F1, F2, F3, F12, XXXXX, XXXXX, VOLU, VOLD, MUTE, RSFT,
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
LOWER, SPC, SCRL, MBTN1, ENT, RAISE
//`--------------------' `--------------------'
),
[_ADJUST] = LAYOUT_kc(
//,-----------------------------------------. ,-----------------------------------------.
RST, LRST, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, RST,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
LMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
LOWER, SPC, SCRL, MBTN1, ENT, RAISE
//`--------------------' `--------------------'
)
};
int RGB_current_mode;
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
}
// Setting ADJUST layer RGB back to default
void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
layer_on(layer3);
} else {
layer_off(layer3);
}
}
void matrix_init_user(void) {
#ifdef RGBLIGHT_ENABLE
RGB_current_mode = rgblight_config.mode;
#endif
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
report_mouse_t currentReport = {};
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
persistent_default_layer_set(1UL<<_QWERTY);
}
return false;
case LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_LOWER);
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
}
return false;
case RAISE:
if (record->event.pressed) {
layer_on(_RAISE);
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_RAISE);
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
}
return false;
case RGB_MOD:
#ifdef RGBLIGHT_ENABLE
if (record->event.pressed) {
rgblight_mode(RGB_current_mode);
rgblight_step();
RGB_current_mode = rgblight_config.mode;
}
#endif
return false;
case RGBRST:
#ifdef RGBLIGHT_ENABLE
if (record->event.pressed) {
eeconfig_update_rgblight_default();
rgblight_enable();
RGB_current_mode = rgblight_config.mode;
}
#endif
break;
case MBTN1:
currentReport = pointing_device_get_report();
if (record->event.pressed) {
currentReport.buttons |= MOUSE_BTN1;
}
else {
currentReport.buttons &= ~MOUSE_BTN1;
}
pointing_device_set_report(currentReport);
pointing_device_send();
return false;
case SCRL:
if (record->event.pressed) {
isScrollMode = true;
}
else {
isScrollMode = false;
}
return false;
}
return true;
}

View file

@ -0,0 +1,14 @@
# CrKbd with the Trackpad support
CrKbd version that supports BlackBerry 8520 trackpad via additional PCB.
See this repository for more details:
- https://github.com/vlukash/corne-trackpad
- https://vlukash.com/2019/01/15/trackpad-in-keycap-corne-crkbd-keyboard
This firmware is for the Right keyboard.
# Build
```
make crkbd:vlukash_trackpad_right:dfu
```

View file

@ -0,0 +1,10 @@
# Build Options
POINTING_DEVICE_ENABLE = yes # Generic Pointer, not as big as mouse keys hopefully.
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
BOOTLOADER = atmel-dfu
# Add support for the BB 8520 trackpad
SRC += trackpad.c

View file

@ -0,0 +1,78 @@
#include "trackpad.h"
// bool isScrollingMode = false;
bool isScrollMode = false;
void pointing_device_init(void){
SPI_Init(SPI_SPEED_FCPU_DIV_8 | SPI_MODE_MASTER);
// Set as output
TP_RESET_INIT;
TP_SHUTDOWN_INIT;
TP_CS_INIT;
LVL_SHIFT_EN_INIT;
// Reset level shifter
LVL_SHIFT_EN_LO;
wait_ms(100);
LVL_SHIFT_EN_HI;
// Force a BB-8520 reset
TP_RESET_HI;
wait_ms(100);
TP_RESET_LO;
// Turn on BB-8520 trackpad
TP_SHUTDOWN_LO;
TP_CS_HI;
}
uint8_t readRegister(uint8_t address) {
uint8_t data;
TP_CS_LO;
// Read the data
SPI_TransferByte(address);
data = SPI_TransferByte(0x00);
TP_CS_HI;
return data;
}
void pointing_device_task(void){
uint8_t motion = readRegister(0x02);
// Motion has occurred on the trackpad
if (motion > 127) {
int8_t dx, dy;
if(TRACKPAD_CONNECTOR_VER == 1) {
dx = readRegister(0x03);
dy = -readRegister(0x04);
}
else {
dy = -readRegister(0x03);
dx = -readRegister(0x04);
}
report_mouse_t currentReport = pointing_device_get_report();
if (isScrollMode)
{
currentReport.h = dx/SCROLL_SPEED_DIVIDER;
currentReport.v = dy/SCROLL_SPEED_DIVIDER;
}
else
{
currentReport.x = dx * POINTER_SPEED_MULTIPLIER;
currentReport.y = dy * POINTER_SPEED_MULTIPLIER;
}
pointing_device_set_report(currentReport);
pointing_device_send();
}
}

View file

@ -0,0 +1,32 @@
#pragma once
#include "pointing_device.h"
#include "quantum.h"
#include "report.h"
#include <util/delay.h>
#include "../../lib/lufa/LUFA/Drivers/Peripheral/SPI.h"
// Trackpad speed adjustments
#define POINTER_SPEED_MULTIPLIER 2
#define SCROLL_SPEED_DIVIDER 6
// Pins on corresponding ports
#define TP_RESET 1
#define TP_SHUTDOWN 0
#define TP_CS 0
#define LVL_SHIFT_EN 7
// Configure as output
#define TP_RESET_INIT DDRF |= (1 << TP_RESET);
#define TP_SHUTDOWN_INIT DDRF |= (1 << TP_SHUTDOWN);
#define TP_CS_INIT DDRB |= (1 << TP_CS);
#define LVL_SHIFT_EN_INIT DDRC |= (1 << LVL_SHIFT_EN);
#define TP_RESET_HI PORTF |= (1 << TP_RESET);
#define TP_RESET_LO PORTF &= ~ (1 << TP_RESET);
#define TP_SHUTDOWN_HI PORTF |= (1 << TP_SHUTDOWN);
#define TP_SHUTDOWN_LO PORTF &= ~ (1 << TP_SHUTDOWN);
#define TP_CS_HI PORTB |= (1 << TP_CS);
#define TP_CS_LO PORTB &= ~ (1 << TP_CS);
#define LVL_SHIFT_EN_HI PORTC |= (1 << LVL_SHIFT_EN);
#define LVL_SHIFT_EN_LO PORTC &= ~ (1 << LVL_SHIFT_EN);

View file

@ -93,6 +93,44 @@ uint8_t matrix_cols(void)
return MATRIX_COLS;
}
void tx_rx_leds_init(void)
{
#ifndef NO_DEBUG_LEDS
TX_RX_LED_INIT;
TXLED0;
RXLED0;
#endif
}
void tx_led_on(void)
{
#ifndef NO_DEBUG_LEDS
TXLED1;
#endif
}
void tx_led_off(void)
{
#ifndef NO_DEBUG_LEDS
TXLED0;
#endif
}
void rx_led_on(void)
{
#ifndef NO_DEBUG_LEDS
RXLED1;
#endif
}
void rx_led_off(void)
{
#ifndef NO_DEBUG_LEDS
RXLED0;
#endif
}
void matrix_init(void)
{
debug_enable = true;
@ -102,9 +140,7 @@ void matrix_init(void)
unselect_rows();
init_cols();
TX_RX_LED_INIT;
TXLED0;
RXLED0;
tx_rx_leds_init();
// initialize matrix state: all keys off
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
@ -189,10 +225,10 @@ int serial_transaction(int master_changed) {
int ret=serial_update_buffers();
#endif
if (ret ) {
if(ret==2) RXLED1;
if(ret==2) rx_led_on();
return 1;
}
RXLED0;
rx_led_off();
memcpy(&matrix[slaveOffset],
(void *)serial_slave_buffer, SERIAL_SLAVE_BUFFER_LENGTH);
return 0;
@ -241,7 +277,7 @@ uint8_t matrix_master_scan(void) {
if( serial_transaction(mchanged) ) {
#endif
// turn on the indicator led when halves are disconnected
TXLED1;
tx_led_on();
error_count++;
@ -254,7 +290,7 @@ uint8_t matrix_master_scan(void) {
}
} else {
// turn off the indicator led on no error
TXLED0;
tx_led_off();
error_count = 0;
}
matrix_scan_quantum();