From 3f3d0551cd5f2ca0b72fc4b24d1d7955ffa8cb78 Mon Sep 17 00:00:00 2001 From: scott-t-wilson Date: Fri, 23 Feb 2018 13:16:10 -0500 Subject: Lfkeyboards updates (#2421) * Update smk65 fn layer, add iso * Added Fn layer to ISO keymap * Fix error when backlight is disabled but lighting isn't * Remove broke mini1800 iso map * Add keymaps * Add LFKPad * Add split delete to lfk78 * Typo * Custom keymap --- keyboards/lfkeyboards/lfkpad/lfkpad.c | 176 ++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 keyboards/lfkeyboards/lfkpad/lfkpad.c (limited to 'keyboards/lfkeyboards/lfkpad/lfkpad.c') diff --git a/keyboards/lfkeyboards/lfkpad/lfkpad.c b/keyboards/lfkeyboards/lfkpad/lfkpad.c new file mode 100644 index 000000000..8caab8ba1 --- /dev/null +++ b/keyboards/lfkeyboards/lfkpad/lfkpad.c @@ -0,0 +1,176 @@ +#include +#include +#include +#include "lfkpad.h" +#include "keymap.h" +#include "issi.h" +#include "TWIlib.h" +#include "lighting.h" +#include "debug.h" +#include "quantum.h" + +uint16_t click_hz = CLICK_HZ; +uint16_t click_time = CLICK_MS; +uint8_t click_toggle = CLICK_ENABLED; + + +void matrix_init_kb(void) +{ + matrix_init_user(); +#ifndef AUDIO_ENABLE + // If we're not using the audio pin, drive it low + sbi(DDRC, 6); + cbi(PORTC, 6); +#endif + +#ifdef ISSI_ENABLE + issi_init(); +#endif +#ifdef WATCHDOG_ENABLE + // This is done after turning the layer LED red, if we're caught in a loop + // we should get a flashing red light + wdt_enable(WDTO_500MS); +#endif + +} + +void matrix_scan_kb(void) +{ +#ifdef WATCHDOG_ENABLE + wdt_reset(); +#endif +#ifdef ISSI_ENABLE + // switch/underglow lighting update + static uint32_t issi_device = 0; + static uint32_t twi_last_ready = 0; + if(twi_last_ready > 1000){ + // Its been way too long since the last ISSI update, reset the I2C bus and start again + dprintf("TWI failed to recover, TWI re-init\n"); + twi_last_ready = 0; + TWIInit(); + force_issi_refresh(); + } + if(isTWIReady()){ + twi_last_ready = 0; + // If the i2c bus is available, kick off the issi update, alternate between devices + update_issi(issi_device, issi_device); + if(issi_device){ + issi_device = 0; + }else{ + issi_device = 3; + } + }else{ + twi_last_ready++; + } +#endif + matrix_scan_user(); +} + +void click(uint16_t freq, uint16_t duration){ +#ifdef AUDIO_ENABLE + if(freq >= 100 && freq <= 20000 && duration < 100){ + play_note(freq, 10); + for (uint16_t i = 0; i < duration; i++){ + _delay_ms(1); + } + stop_all_notes(); + } +#endif +} + +bool process_record_kb(uint16_t keycode, keyrecord_t* record) +{ + if (click_toggle && record->event.pressed){ + click(click_hz, click_time); + } + if (keycode == RESET) { + reset_keyboard_kb(); + } else { + } + return process_record_user(keycode, record); +} + +void action_function(keyrecord_t *event, uint8_t id, uint8_t opt) +{ +#ifdef AUDIO_ENABLE + int8_t sign = 1; +#endif + if(id == LFK_ESC_TILDE){ + // Send ~ on shift-esc + void (*method)(uint8_t) = (event->event.pressed) ? &add_key : &del_key; + uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)); + if(layer_state == 0){ + method(shifted ? KC_GRAVE : KC_ESCAPE); + }else{ + method(shifted ? KC_ESCAPE : KC_GRAVE); + } + send_keyboard_report(); + }else if(event->event.pressed){ + switch(id){ + case LFK_SET_DEFAULT_LAYER: + // set/save the current base layer to eeprom, falls through to LFK_CLEAR + eeconfig_update_default_layer(1UL << opt); + default_layer_set(1UL << opt); + case LFK_CLEAR: + // Go back to default layer + layer_clear(); + break; +#ifdef AUDIO_ENABLE + case LFK_CLICK_FREQ_LOWER: + sign = -1; // continue to next statement + case LFK_CLICK_FREQ_HIGHER: + click_hz += sign * 100; + click(click_hz, click_time); + break; + case LFK_CLICK_TOGGLE: + if(click_toggle){ + click_toggle = 0; + click(4000, 100); + click(1000, 100); + }else{ + click_toggle = 1; + click(1000, 100); + click(4000, 100); + } + break; + case LFK_CLICK_TIME_SHORTER: + sign = -1; // continue to next statement + case LFK_CLICK_TIME_LONGER: + click_time += sign; + click(click_hz, click_time); + break; +#endif + } + } +} + +void reset_keyboard_kb(){ +#ifdef WATCHDOG_ENABLE + MCUSR = 0; + wdt_disable(); + wdt_reset(); +#endif + reset_keyboard(); +} + +void led_set_kb(uint8_t usb_led) +{ + led_set_user(usb_led); +} + +// LFK lighting info +const uint8_t rgb_matrices[] = {0, 1}; +const uint8_t rgb_sequence[] = { + 32, 1, 2, 3, + 31, 30, 5, 6, + 28, 27, 7, 8, + 17, 18, 9, + 19, 21, 11, 12, + 22, 14, + + 16, 26, + 4, 25, + 13, 24, + 20 + +}; -- cgit v1.2.3