Beispiel #1
0
//-------------------------------------------------------
void led_clearAllBlinkLeds()
{
	for(int i=0;i<NUM_OF_BLINKABLE_LEDS;i++)
	{
		//reset led
		led_reset(led_blinkLedNumber[i]);
		//set slot to inactive
		led_blinkingLeds &= ~(1<<i);
	}
};
Beispiel #2
0
void led_set_layer_indicator(void) {
  static uint8_t oldlayer = 255;

  led_reset();

  rgbsps_set(LED_IND_GUI, COLOR_BLANK);
  rgbsps_set(LED_IND_FUN, COLOR_BLANK);
  rgbsps_set(LED_IND_NUM, COLOR_BLANK);
  rgbsps_set(LED_IND_PUNC, COLOR_BLANK);
  rgbsps_set(LED_IND_GREEK, COLOR_BLANK);
  rgbsps_set(LED_IND_EMOJI, COLOR_BLANK);

  uint8_t layer = biton32(layer_state);
  if (oldlayer == layer) {
    return;
  }

  oldlayer = layer;

  if (layer <= _DEFAULT_LAYER_MAX) {
    rgbsps_send();
    return;
  }

  switch(layer) {
    case _GUI:
      rgbsps_set(LED_IND_GUI, THEME_COLOR_GUI);
      break;
    case _FUN:
      rgbsps_set(LED_IND_FUN, THEME_COLOR_FUN);
      break;
    case _NUM:
      rgbsps_set(LED_IND_NUM, THEME_COLOR_NUM);
      break;
    case _PUNC:
      rgbsps_set(LED_IND_PUNC, THEME_COLOR_PUNC);
      break;
    case _GREEKL:
    case _GREEKU:
      rgbsps_set(LED_IND_GREEK, THEME_COLOR_GREEK);
      break;
    case _EMOJI:
      rgbsps_set(LED_IND_EMOJI, THEME_COLOR_EMOJI);
      break;
    default:
      rgbsps_set(LED_IND_GUI, THEME_COLOR_OTHERLAYER);
      rgbsps_set(LED_IND_FUN, THEME_COLOR_OTHERLAYER);
      rgbsps_set(LED_IND_NUM, THEME_COLOR_OTHERLAYER);
      rgbsps_set(LED_IND_PUNC, THEME_COLOR_OTHERLAYER);
      rgbsps_set(LED_IND_GREEK, THEME_COLOR_OTHERLAYER);
      rgbsps_set(LED_IND_EMOJI, THEME_COLOR_OTHERLAYER);
  }

  rgbsps_send();
}
Beispiel #3
0
//--------------------------------------------------
void led_setActive_step(uint8_t stepNr)
{
	stepNr /= 8; //128 steps auf 16 reduzieren
	uint8_t ledNr;
	ledNr = stepNr+LED_STEP1;
		
	if(led_currentStepLed != ledNr)
	{
		led_reset(led_currentStepLed);
		led_currentStepLed = ledNr;
		led_toggleTemp(ledNr);
	}		
};
Beispiel #4
0
//-------------------------------------------------------
void led_setBlinkLed(const uint8_t ledNr, const uint8_t onOff)
{
	if(onOff)
	{
		//--- turn on blinking ---
		//search for a free blink slot
		for(int i=0;i<NUM_OF_BLINKABLE_LEDS;i++)
		{
			if( !(led_blinkingLeds & (1<<i)))
			{
				//we found a free slot	
			
				//store led number
				led_blinkLedNumber[i] = ledNr;
				//set slot to active
				led_blinkingLeds |= (1<<i);
				//turn on LED
				led_toggleTemp(ledNr);
			
				break;		
			}
		}	
	}		
	else
	{
		//--- turn off blinking ---
		//search the slot with matching ledNr
		for(int i=0;i<NUM_OF_BLINKABLE_LEDS;i++)
		{
			if(led_blinkLedNumber[i] == ledNr)
			{
				//we found the matching slot
				//set slot to inactive
				led_blinkingLeds &= ~(1<<i);
				led_reset(ledNr);
			}
		}
	}
};
Beispiel #5
0
//-------------------------------------------------------
void led_tickHandler()
{
	for(int i=0;i<NUM_OF_PULSABLE_LEDS;i++)
	{
		//if the led is active at the moment
		if(led_pulsingLeds & (1<<i))
		{
			//if the on time has passed
			if(time_sysTick > led_pulseEndTime[i])
			{
					//set slot to inactive
					led_pulsingLeds &= ~(1<<i);
					// reset LED
					led_reset(led_pulseLedNumber[i]);
			}
		}			
	}
	
	//second condition is to prevent hanging LEDs if a systick overflow occurs
	if( (time_sysTick > led_nextBlinkTime) || ( (led_nextBlinkTime-time_sysTick) > LED_BLINK_TIME*2) )
	{
		led_nextBlinkTime = time_sysTick + LED_BLINK_TIME;
		
		for(int i=0;i<NUM_OF_BLINKABLE_LEDS;i++)
		{
			//if the led is active at the moment
			if(led_blinkingLeds & (1<<i))
			{
				//toggle led
				led_toggleTemp(led_blinkLedNumber[i]);
				//set next toggle time			
			}	
		}
					
	}		
}
Beispiel #6
0
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  static bool lshift = false;
  static bool rshift = false;
  static uint8_t layer = 0;

  lshift = keyboard_report->mods & MOD_BIT(KC_LSFT);
  rshift = keyboard_report->mods & MOD_BIT(KC_RSFT);
  layer = biton32(layer_state);

#ifdef DOUBLESPACE_LAYER_ENABLE
  // double-space: send space immediately if any other key depressed before space is released
  if ((lspace_active ^ rspace_active)
      && keycode != LSPACE
      && keycode != RSPACE
      && record->event.pressed)
  {
    if (lspace_active) {
      if (!lspace_emitted) {
        register_code(KC_SPC);
        unregister_code(KC_SPC);
      }
      lspace_emitted = true;
    }
    if (rspace_active) {
      if (!rspace_emitted) {
        register_code(KC_SPC);
        unregister_code(KC_SPC);
      }
      rspace_emitted = true;
    }
  }

  if (layer == _SPACE && keycode != S(KC_TAB) && keycode != KC_TAB && keycode != KC_ESC && keycode != XXXXXXX) {
    if (record->event.pressed) {
      unregister_code(KC_LALT);
    } else {
      register_code(KC_LALT);
    }
  }
#endif

  switch (keycode) {

#ifdef DOUBLESPACE_LAYER_ENABLE
    // double-space enter space layer
    case LSPACE:
      process_doublespace(record->event.pressed, &lspace_active, &rspace_active, &lspace_emitted);
      return false;
      break;
    case RSPACE:
      process_doublespace(record->event.pressed, &rspace_active, &lspace_active, &rspace_emitted);
      return false;
      break;
#endif

    // handle greek layer shift
    case KC_LSFT:
    case KC_RSFT:
      ;
      if (layer == _GREEKU || layer == _GREEKL) {
        if (record->event.pressed) {
          layer_on(_GREEKU);
          layer_off(_GREEKL);
        } else {
          if (lshift ^ rshift) { // if only one shift was pressed
            layer_on(_GREEKL);
            layer_off(_GREEKU);
          }
        }
      }
      return true;
      break;

    // press both ctrls to activate SYS layer
    case KC_LCTL:
    case KC_RCTL:
      ;
      bool lctrl = keyboard_report->mods & MOD_BIT(KC_LCTL);
      bool rctrl = keyboard_report->mods & MOD_BIT(KC_RCTL);
      if (record->event.pressed) {
        if (lctrl ^ rctrl) { // if only one ctrl was pressed
          layer_on(_SYS);
        }
      } else {
        layer_off(_SYS);
      }
      return true;
      break;

    // QWERTZ style comma and dot: semicolon and colon when shifted
    case KC_COMM:
      if (record->event.pressed) {
        if (lshift || rshift) {
          if (lshift) unregister_code(KC_LSFT);
          if (rshift) unregister_code(KC_RSFT);
          register_code(KC_SCLN);
          unregister_code(KC_SCLN);
          if (lshift) register_code(KC_LSFT);
          if (rshift) register_code(KC_RSFT);
        } else {
          register_code(KC_COMM);
          unregister_code(KC_COMM);
        }
      }
      return false;
      break;
    case KC_DOT:
      if (record->event.pressed) {
        if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) || (keyboard_report->mods & MOD_BIT(KC_RSFT))) {
          register_code(KC_SCLN);
          unregister_code(KC_SCLN);
        } else {
          register_code(KC_DOT);
          unregister_code(KC_DOT);
        }
      }
      return false;
      break;

    // layout switchers
    case QWERTY:
      if (record->event.pressed) {
        persistent_default_layer_set(1UL<<_QWERTY);
      }
      return false;
      break;
#ifdef LAYOUT_DVORAK
    case DVORAK:
      if (record->event.pressed) {
        persistent_default_layer_set(1UL<<_DVORAK);
      }
      return false;
      break;
#endif
#ifdef LAYOUT_COLEMAK
    case COLEMAK:
      if (record->event.pressed) {
        persistent_default_layer_set(1UL<<_COLEMAK);
      }
      return false;
      break;
#endif
#ifdef LAYOUT_WORKMAN
    case WORKMAN:
      if (record->event.pressed) {
        persistent_default_layer_set(1UL<<_WORKMAN);
      }
      return false;
      break;
#endif
#ifdef LAYOUT_NORMAN
    case NORMAN:
      if (record->event.pressed) {
        persistent_default_layer_set(1UL<<_NORMAN);
      }
      return false;
      break;
#endif

    // only process Fnumber on key release, and only when layer switcher is still pressed.
    // this is to avoid accidental presses on potentially destructive keys
    case KC_F1 ... KC_F12:
    case KC_PAUS:
    case KC_PSCR:
    case KC_INS:
      if (!record->event.pressed && layer == _FUN) { // key released and still in FUN layer
          register_code(keycode);
          unregister_code(keycode);
      }
      return false;
      break;

    // layer switcher
    //
    case GREEK:
      if (record->event.pressed) {
        if (lshift || rshift) {
          layer_on(_GREEKU);
          layer_off(_GREEKL);
        } else {
          layer_on(_GREEKL);
          layer_off(_GREEKU);
        }
      } else {
        layer_off(_GREEKU);
        layer_off(_GREEKL);
      }
      return false;
      break;

    // OS switchers
    case LINUX:
      set_unicode_input_mode(UC_LNX);
#ifdef RGBSPS_ENABLE
      led_set_unicode_input_mode();
#endif
      return false;
      break;
    case WIN:
      set_unicode_input_mode(UC_WINC);
#ifdef RGBSPS_ENABLE
      led_set_unicode_input_mode();
#endif
      return false;
      break;
    case OSX:
      set_unicode_input_mode(UC_OSX);
#ifdef RGBSPS_ENABLE
      led_set_unicode_input_mode();
#endif
      return false;
      break;

    // glow mode changer
#ifdef RGBSPS_ENABLE
    case GLOW:
      if (record->event.pressed) {
        glow_mode++;
        if (glow_mode > GLOW_FULL) {
          glow_mode = GLOW_NONE;
        }
        led_reset();
        rgbsps_send();
      }
      return false;
      break;
#endif

    // faux clicky indicator
#ifdef FAUXCLICKY_ENABLE
    case FC_TOG:
#ifdef RGBSPS_ENABLE
      if (fauxclicky_enabled) {
        rgbsps_set(LED_IND_AUDIO, THEME_COLOR_AUDIO);
      } else {
        rgbsps_set(LED_IND_AUDIO, COLOR_BLANK);
      }
      rgbsps_send();
#endif
      return true;
      break;
#endif

#ifdef RGBSPS_DEMO_ENABLE
    case RGBDEMO:
      led_demo();
      return false;
      break;
#endif
  }
  return true;
}
Beispiel #7
0
//-------------------------------------------------
void led_clearActive_step()
{
	led_reset(led_currentStepLed);
};
Beispiel #8
0
void led_init(uint16_t *led)
{
    _leds = led;
    led_reset();
}