unsigned long taskSwButton_triggeredMillis = 0; unsigned long taskSwButton_lastPressedMillis = 0; unsigned long taskSwButton_disableMillis = 0; unsigned long taskSwButton_tabKeyDownMillis = 0; unsigned long taskSwButton_winKeyDownMillis = 0; unsigned int taskSwButton_execLoopAfter = 250; unsigned int taskSwButton_disableAfterAction = 1000; unsigned int taskSwButton_pressDurationMin_veryShortHold = 1; unsigned int taskSwButton_pressDurationMax_veryShortHold = 250; unsigned int taskSwButton_pressDurationMin_shortHold = 350; unsigned int taskSwButton_pressDurationMax_shortHold = 900; unsigned int taskSwButton_pressDuration_longHold = 1000; unsigned int taskSwButton_tabKey_Up_After = 2000; //unsigned int taskSwButton_winKey_Up_After = 3000; void handleTaskSwitchButton() { taskSwButton_lastPressedMillis = millis(); if (taskSwButton_disableMillis > 0 ) taskSwButton_disableMillis = millis(); if (taskSwButton_disableMillis == 0) { if (taskSwButton_triggeredMillis == 0) { taskSwButton_triggeredMillis = millis(); if(useSerial) Serial.println(F("TASKSWITCH INITIALLY PRESSED")); if ( taskSwButton_tabKeyDownMillis > 0 ) { taskSwButton_tabKeyDownMillis = millis(); BootKeyboard.write(KEY_TAB); } // else if ( taskSwButton_winKeyDownMillis > 0 ) { // taskSwButton_winKeyDownMillis = millis(); // BootKeyboard.write(KEY_ESC); // } } else if ( (millis() - taskSwButton_triggeredMillis) >= taskSwButton_pressDuration_longHold) { // LONG PRESSED taskSwButton_triggeredMillis = 0; taskSwButton_lastPressedMillis = 0; taskSwButton_disableMillis = millis(); if (useSerial) { Serial.println(F("TASKSWITCH LONG HOLD")); } if (sendHID) { if(useSerial) Serial.println(F("sending ALT+F4")); BootKeyboard.press(KEY_LEFT_ALT); BootKeyboard.press(KEY_F4); delay(50); BootKeyboard.releaseAll(); } } } } void handleTaskSwitchButton_extendAltTabTimeout() { if(taskSwButton_tabKeyDownMillis > 0) taskSwButton_tabKeyDownMillis = millis(); } void handleTaskSwitchButton_loop() { // handle Power Button short press if (taskSwButton_triggeredMillis > 0) { if (taskSwButton_lastPressedMillis > 0) { if ((millis() - taskSwButton_lastPressedMillis) > taskSwButton_execLoopAfter) { unsigned int tDelta; if(taskSwButton_lastPressedMillis == taskSwButton_triggeredMillis) tDelta = 1; else tDelta = taskSwButton_lastPressedMillis - taskSwButton_triggeredMillis; if (debug) { Serial.print(F("TASKSWITCH held for ")); Serial.print(tDelta); Serial.println("ms"); } if (tDelta >= taskSwButton_pressDurationMin_shortHold && tDelta <= taskSwButton_pressDurationMax_shortHold) { // SHORT PRESSED if (useSerial) { Serial.println(F("TASKSWITCH SHORT HOLD")); Serial.println("sending ALT+TAB"); } if (sendHID) { // sending ALT+TAB (leaving TAB engaged BootKeyboard.press(KEY_LEFT_ALT); BootKeyboard.write(KEY_TAB); } taskSwButton_tabKeyDownMillis = millis(); taskSwButton_triggeredMillis = 0; taskSwButton_lastPressedMillis = 0; //taskSwButton_disableMillis = millis(); } else if (tDelta >= taskSwButton_pressDurationMin_veryShortHold && tDelta < taskSwButton_pressDurationMax_veryShortHold) { // VERY SHORT HOLD if (useSerial) Serial.println(F("POWER VERY SHORT HOLD")); //if ((millis() - taskSwButton_winKeyDownMillis) > taskSwButton_winKey_Up_After) { if (taskSwButton_tabKeyDownMillis == 0) { if (useSerial) Serial.println("sending WIN-KEY"); if (sendHID) { BootKeyboard.write(KEY_LEFT_WINDOWS); } //taskSwButton_winKeyDownMillis = millis(); } taskSwButton_triggeredMillis = 0; taskSwButton_lastPressedMillis = 0; //taskSwButton_disableMillis = millis(); } else { // button was pressed too long for "SHORT PRESSED" if (useSerial) { Serial.println(F("TASKSWITCH BUTTON CANCELLED")); } taskSwButton_triggeredMillis = 0; taskSwButton_lastPressedMillis = 0; } } } } if (taskSwButton_disableMillis > 0) { if ((millis() - taskSwButton_disableMillis) > taskSwButton_disableAfterAction) { taskSwButton_triggeredMillis = 0; taskSwButton_lastPressedMillis = 0; taskSwButton_disableMillis = 0; } } if (taskSwButton_tabKeyDownMillis > 0) { if ((millis() - taskSwButton_tabKeyDownMillis) > taskSwButton_tabKey_Up_After) { taskSwButton_tabKeyDownMillis = 0; if (sendHID) BootKeyboard.releaseAll(); } } // if (taskSwButton_winKeyDownMillis > 0) { // if ((millis() - taskSwButton_winKeyDownMillis) > taskSwButton_winKey_Up_After) { // taskSwButton_winKeyDownMillis = 0; // } // } }