void setLayer(int layer) { if (layer == _COLEMAK) { #ifdef AUDIO_ENABLE stop_all_notes(); PLAY_SONG(marioe); #endif set_single_persistent_default_layer(_COLEMAK); #ifdef BACKLIGHT_ENABLE backlight_set(0); #endif } else if (layer == _GAME) { #ifdef AUDIO_ENABLE stop_all_notes(); PLAY_SONG(mario); #endif set_single_persistent_default_layer(_GAME); #ifdef BACKLIGHT_ENABLE backlight_set(15); #endif } else if (layer == _MUSIC) { #ifdef AUDIO_ENABLE stop_all_notes(); PLAY_SONG(guitar); #endif set_single_persistent_default_layer(_MUSIC); #ifdef BACKLIGHT_ENABLE backlight_set(1); #endif } }
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function switch(id) { case 0: if (record->event.pressed) { play_notes(&walk_up, 3, false); // play_note(440, 20); // register_code(KC_RSFT); #ifdef BACKLIGHT_ENABLE backlight_set(BACKLIGHT_LEVELS); #endif default_layer_and(0); default_layer_or((1<<5)); // uint8_t low = boot_lock_fuse_bits_get(0x0000); // uint8_t high = boot_lock_fuse_bits_get(0x0003); // uint8_t ext = boot_lock_fuse_bits_get(0x0002); // uint8_t lock = boot_lock_fuse_bits_get(0x0001); // register_code(hextokeycode((low & 0xF0) >> 4)); // unregister_code(hextokeycode((low & 0xF0) >> 4)); // register_code(hextokeycode((low & 0x0F))); // unregister_code(hextokeycode((low & 0x0F))); // register_code(hextokeycode((high & 0xF0) >> 4)); // unregister_code(hextokeycode((high & 0xF0) >> 4)); // register_code(hextokeycode((high & 0x0F))); // unregister_code(hextokeycode((high & 0x0F))); // register_code(hextokeycode((ext & 0xF0) >> 4)); // unregister_code(hextokeycode((ext & 0xF0) >> 4)); // register_code(hextokeycode((ext & 0x0F))); // unregister_code(hextokeycode((ext & 0x0F))); // register_code(hextokeycode((lock & 0xF0) >> 4)); // unregister_code(hextokeycode((lock & 0xF0) >> 4)); // register_code(hextokeycode((lock & 0x0F))); // unregister_code(hextokeycode((lock & 0x0F))); } else { unregister_code(KC_RSFT); play_notes(&walk_dn, 3, false); #ifdef BACKLIGHT_ENABLE backlight_set(0); #endif default_layer_and(0); default_layer_or(0); } break; } return MACRO_NONE; };
void keyboard_slave_loop(void) { matrix_init(); //Init RGB #ifdef RGBLIGHT_ENABLE rgblight_init(); #endif while (1) { // Matrix Slave Scan matrix_slave_scan(); // Read Backlight Info #ifdef BACKLIGHT_ENABLE #ifdef USE_I2C if (BACKLIT_DIRTY) { backlight_set(i2c_slave_buffer[I2C_BACKLIT_START]); BACKLIT_DIRTY = false; } #else // USE_SERIAL backlight_set(serial_m2s_buffer.backlight_level); #endif #endif // Read RGB Info #ifdef RGBLIGHT_ENABLE #ifdef USE_I2C if (RGB_DIRTY) { // Disable interupts (RGB data is big) cli(); // Create new DWORD for RGB data uint32_t dword; // Fill the new DWORD with the data that was sent over uint8_t *dword_dat = (uint8_t *)(&dword); for (int i = 0; i < 4; i++) { dword_dat[i] = i2c_slave_buffer[I2C_RGB_START+i]; } // Update the RGB now with the new data and set RGB_DIRTY to false rgblight_update_dword(dword); RGB_DIRTY = false; // Re-enable interupts now that RGB is set sei(); } #else // USE_SERIAL #ifdef RGBLIGHT_SPLIT // Add serial implementation for RGB here #endif #endif #endif } }
void suspend_power_down(void) { #ifdef BACKLIGHT_ENABLE backlight_set(0); #endif #ifndef NO_SUSPEND_POWER_DOWN // Enable watchdog to wake from MCU sleep cli(); wdt_reset(); // Watchdog Interrupt and System Reset Mode //wdt_enable(WDTO_1S); //WDTCSR |= _BV(WDIE); // Watchdog Interrupt Mode wdt_intr_enable(WDTO_120MS); // TODO: more power saving // See PicoPower application note // - I/O port input with pullup // - prescale clock // - BOD disable // - Power Reduction Register PRR // sleep in power down mode set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); sei(); sleep_cpu(); sleep_disable(); // Disable watchdog after sleep wdt_disable(); #endif }
void custom_backlight_level(uint8_t level) { if (level > BACKLIGHT_LEVELS) level = BACKLIGHT_LEVELS; backlight_config.level = level; backlight_config.enable = !!backlight_config.level; backlight_set(backlight_config.level); }
static void tui_blsettingmenu(void) { uint8_t sel = 0; for(;;) { sel = tui_gen_listmenu((PGM_P)tui_blsm_name, tui_blsm_table, 5, sel); switch (sel) { case 0: { uint8_t v = tui_gen_nummenu((PGM_P)tui_blsm_s1, 0, 16, backlight_get()); backlight_set(v); } break; case 1: { uint8_t v = tui_gen_nummenu((PGM_P)tui_blsm_s2, 0, backlight_get(), backlight_get_dv()); backlight_set_dv(v); } break; case 2: { uint8_t v = tui_gen_nummenu((PGM_P)tui_blsm_s3, 1, 255, backlight_get_to()); backlight_set_to(v); } break; case 3: tui_contrast_set_util(); break; default: return; } } }
void backlight_init(void) { /* check signature */ if (!eeconfig_is_enabled()) { eeconfig_init(); } backlight_config.raw = eeconfig_read_backlight(); backlight_set(backlight_config.enable ? backlight_config.level : 0); }
//TD dot to toggle layer 2 void _td_dot_tg_finished (qk_tap_dance_state_t *state, void *user_data) { if (state->count == 1) { register_code(KC_DOT); } else if (state->count == 2) { backlight_set(1); layer_on(_L2); layer_off(_L1); layer_off(_L3); } }
//TD kp plus to toggle layer 1 void _td_kp_plus_tg_finished (qk_tap_dance_state_t *state, void *user_data) { if (state->count == 1) { register_code(KC_KP_PLUS); } else if (state->count == 2) { // layer_invert(_L1); backlight_set(2); layer_on(_L1); layer_off(_L2); layer_off(_L3); } }
void backlight_increase(void) { #ifdef BACKLIGHT_CUSTOM if (backlight_config.enable) { if (backlight_config.level < BACKLIGHT_LEVELS) { backlight_config.level++; eeconfig_write_backlight(backlight_config.raw); } dprintf("backlight custom increase: %u\n", backlight_config.level); backlight_set(backlight_config.level); } #else if(backlight_config.level < BACKLIGHT_LEVELS) { backlight_config.level++; backlight_config.enable = 1; eeconfig_write_backlight(backlight_config.raw); #ifdef REDUCE_CALLBACK_ON_LEVEL_CHANGE dprintf("backlight increase: %u\n", backlight_config.level); backlight_set(backlight_config.level); } #else }
static void handle_control_message(struct lfd_control_message *msg, int s) { int ret = 0; switch (msg->command) { case LFD_COMMAND_GET_VOLUME: msg->payload = sound_get_volume(); msg->command |= LFD_RESPONSE; break; case LFD_COMMAND_SET_VOLUME: sound_set_volume(msg->payload); break; case LFD_COMMAND_GET_BACKLIGHT: msg->payload = backlight_get(); msg->command |= LFD_RESPONSE; break; case LFD_COMMAND_SET_BACKLIGHT: backlight_set(msg->payload); break; case LFD_COMMAND_SET_BACKLIGHT_NEXT: backlight_next(); break; case LFD_COMMAND_SET_RTC_TO_SYSTIME: time_set_rtc(); break; case LFD_COMMAND_GET_BATTERY_MV: msg->payload = mv; msg->command |= LFD_RESPONSE; break; default: dbprintf("unknown LFD command: 0x%X\n", msg->command); return; }; if (msg->command & LFD_RESPONSE) { ret = send(s, msg, sizeof(*msg), MSG_NOSIGNAL); if (ret < 0) dbprintf("can't send response\n"); } }
void matrix_init_kb(void) { debug_enable=true; print("meira matrix_init_kb\n"); #ifdef ISSI_ENABLE issi_init(); #endif backlight_set(5); #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 // put your keyboard start-up code here // runs once when the firmware starts up matrix_init_user(); }
void transport_slave(matrix_row_t matrix[]) { // Copy matrix to I2C buffer memcpy((void*)i2c_buffer->smatrix, (void *)matrix, sizeof(i2c_buffer->smatrix)); // Read Backlight Info # ifdef BACKLIGHT_ENABLE backlight_set(i2c_buffer->backlight_level); # endif # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) // Update the RGB with the new data if (i2c_buffer->rgblight_sync.status.change_flags != 0) { rgblight_update_sync(&i2c_buffer->rgblight_sync, false); i2c_buffer->rgblight_sync.status.change_flags = 0; } # endif # ifdef ENCODER_ENABLE encoder_state_raw(i2c_buffer->encoder_state); # endif }
bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case COLEMAK: if (record->event.pressed) { set_single_persistent_default_layer(_COLEMAK); #ifdef BACKLIGHT_ENABLE backlight_set(0); #endif } return false; break; case GCTOGG: if (record->event.pressed) { if (isGame) { if (isMusic) setLayer(_MUSIC); else setLayer(_COLEMAK); isGame = false; } else { setLayer(_GAME); isGame = true; } } return false; break; case MCTOGG: if (record->event.pressed) { if (isMusic) { if (isGame) setLayer(_GAME); else setLayer(_COLEMAK); isMusic = false; } else { setLayer(_MUSIC); isMusic = true; } } return false; break; case LOWER: if (record->event.pressed) { layer_on(_LOWER); update_tri_layer(_LOWER, _RAISE, _ADJUST); } else { layer_off(_LOWER); update_tri_layer(_LOWER, _RAISE, _ADJUST); } return false; break; case RAISE: if (record->event.pressed) { layer_on(_RAISE); update_tri_layer(_LOWER, _RAISE, _ADJUST); } else { layer_off(_RAISE); update_tri_layer(_LOWER, _RAISE, _ADJUST); } return false; break; case LENNY: if (record->event.pressed) { SEND_STRING("()"); } return false; break; case COMMENTHEAD: if (record->event.pressed) { SEND_STRING("// ---------------------------------------------------------------"); } return false; break; case RICKANDMORT: if (record->event.pressed) { SEND_STRING("// ***************************************************************"); } return false; break; case MARIO: if(record->event.pressed) { #ifdef AUDIO_ENABLE PLAY_SONG(mario); #endif } return false; break; case MARIOE: if(record->event.pressed) { #ifdef AUDIO_ENABLE PLAY_SONG(marioe); #endif } return false; break; case OVERWATCH: if(record->event.pressed) { #ifdef AUDIO_ENABLE PLAY_SONG(overwatch); #endif } return false; break; case DOOM: if(record->event.pressed) { #ifdef AUDIO_ENABLE PLAY_SONG(doom); #endif } return false; break; case DISNEY: if(record->event.pressed) { #ifdef AUDIO_ENABLE PLAY_SONG(disney); #endif } return false; break; case NUMBERONE: if(record->event.pressed) { #ifdef AUDIO_ENABLE PLAY_SONG(numberone); #endif } return false; break; case CABBAGE: if(record->event.pressed) { #ifdef AUDIO_ENABLE PLAY_SONG(cabbage); #endif } return false; break; case OLDSPICE: if(record->event.pressed) { #ifdef AUDIO_ENABLE PLAY_SONG(oldspice); #endif } return false; break; } return true; }