handleTaskSwButton.ino 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. unsigned long taskSwButton_triggeredMillis = 0;
  2. unsigned long taskSwButton_lastPressedMillis = 0;
  3. unsigned long taskSwButton_disableMillis = 0;
  4. unsigned long taskSwButton_tabKeyDownMillis = 0;
  5. unsigned long taskSwButton_winKeyDownMillis = 0;
  6. unsigned int taskSwButton_execLoopAfter = 250;
  7. unsigned int taskSwButton_disableAfterAction = 1000;
  8. unsigned int taskSwButton_pressDurationMin_veryShortHold = 1;
  9. unsigned int taskSwButton_pressDurationMax_veryShortHold = 250;
  10. unsigned int taskSwButton_pressDurationMin_shortHold = 350;
  11. unsigned int taskSwButton_pressDurationMax_shortHold = 900;
  12. unsigned int taskSwButton_pressDuration_longHold = 1000;
  13. unsigned int taskSwButton_tabKey_Up_After = 2000;
  14. //unsigned int taskSwButton_winKey_Up_After = 3000;
  15. void handleTaskSwitchButton() {
  16. taskSwButton_lastPressedMillis = millis();
  17. if (taskSwButton_disableMillis > 0 ) taskSwButton_disableMillis = millis();
  18. if (taskSwButton_disableMillis == 0) {
  19. if (taskSwButton_triggeredMillis == 0) {
  20. taskSwButton_triggeredMillis = millis();
  21. if(useSerial) Serial.println(F("TASKSWITCH INITIALLY PRESSED"));
  22. if ( taskSwButton_tabKeyDownMillis > 0 ) {
  23. taskSwButton_tabKeyDownMillis = millis();
  24. BootKeyboard.write(KEY_TAB);
  25. }
  26. // else if ( taskSwButton_winKeyDownMillis > 0 ) {
  27. // taskSwButton_winKeyDownMillis = millis();
  28. // BootKeyboard.write(KEY_ESC);
  29. // }
  30. }
  31. else if ( (millis() - taskSwButton_triggeredMillis) >= taskSwButton_pressDuration_longHold) {
  32. // LONG PRESSED
  33. taskSwButton_triggeredMillis = 0;
  34. taskSwButton_lastPressedMillis = 0;
  35. taskSwButton_disableMillis = millis();
  36. if (useSerial) {
  37. Serial.println(F("TASKSWITCH LONG HOLD"));
  38. }
  39. if (sendHID) {
  40. if(useSerial) Serial.println(F("sending ALT+F4"));
  41. BootKeyboard.press(KEY_LEFT_ALT);
  42. BootKeyboard.press(KEY_F4);
  43. delay(50);
  44. BootKeyboard.releaseAll();
  45. }
  46. }
  47. }
  48. }
  49. void handleTaskSwitchButton_extendAltTabTimeout() {
  50. if(taskSwButton_tabKeyDownMillis > 0) taskSwButton_tabKeyDownMillis = millis();
  51. }
  52. void handleTaskSwitchButton_loop() {
  53. // handle Power Button short press
  54. if (taskSwButton_triggeredMillis > 0) {
  55. if (taskSwButton_lastPressedMillis > 0) {
  56. if ((millis() - taskSwButton_lastPressedMillis) > taskSwButton_execLoopAfter) {
  57. unsigned int tDelta;
  58. if(taskSwButton_lastPressedMillis == taskSwButton_triggeredMillis) tDelta = 1;
  59. else tDelta = taskSwButton_lastPressedMillis - taskSwButton_triggeredMillis;
  60. if (debug) {
  61. Serial.print(F("TASKSWITCH held for "));
  62. Serial.print(tDelta);
  63. Serial.println("ms");
  64. }
  65. if (tDelta >= taskSwButton_pressDurationMin_shortHold && tDelta <= taskSwButton_pressDurationMax_shortHold) {
  66. // SHORT PRESSED
  67. if (useSerial) {
  68. Serial.println(F("TASKSWITCH SHORT HOLD"));
  69. Serial.println("sending ALT+TAB");
  70. }
  71. if (sendHID) {
  72. // sending ALT+TAB (leaving TAB engaged
  73. BootKeyboard.press(KEY_LEFT_ALT);
  74. BootKeyboard.write(KEY_TAB);
  75. }
  76. taskSwButton_tabKeyDownMillis = millis();
  77. taskSwButton_triggeredMillis = 0;
  78. taskSwButton_lastPressedMillis = 0;
  79. //taskSwButton_disableMillis = millis();
  80. }
  81. else if (tDelta >= taskSwButton_pressDurationMin_veryShortHold && tDelta < taskSwButton_pressDurationMax_veryShortHold) {
  82. // VERY SHORT HOLD
  83. if (useSerial) Serial.println(F("POWER VERY SHORT HOLD"));
  84. //if ((millis() - taskSwButton_winKeyDownMillis) > taskSwButton_winKey_Up_After) {
  85. if (taskSwButton_tabKeyDownMillis == 0) {
  86. if (useSerial) Serial.println("sending WIN-KEY");
  87. if (sendHID) {
  88. BootKeyboard.write(KEY_LEFT_WINDOWS);
  89. }
  90. //taskSwButton_winKeyDownMillis = millis();
  91. }
  92. taskSwButton_triggeredMillis = 0;
  93. taskSwButton_lastPressedMillis = 0;
  94. //taskSwButton_disableMillis = millis();
  95. }
  96. else {
  97. // button was pressed too long for "SHORT PRESSED"
  98. if (useSerial) {
  99. Serial.println(F("TASKSWITCH BUTTON CANCELLED"));
  100. }
  101. taskSwButton_triggeredMillis = 0;
  102. taskSwButton_lastPressedMillis = 0;
  103. }
  104. }
  105. }
  106. }
  107. if (taskSwButton_disableMillis > 0) {
  108. if ((millis() - taskSwButton_disableMillis) > taskSwButton_disableAfterAction) {
  109. taskSwButton_triggeredMillis = 0;
  110. taskSwButton_lastPressedMillis = 0;
  111. taskSwButton_disableMillis = 0;
  112. }
  113. }
  114. if (taskSwButton_tabKeyDownMillis > 0) {
  115. if ((millis() - taskSwButton_tabKeyDownMillis) > taskSwButton_tabKey_Up_After) {
  116. taskSwButton_tabKeyDownMillis = 0;
  117. if (sendHID) BootKeyboard.releaseAll();
  118. }
  119. }
  120. // if (taskSwButton_winKeyDownMillis > 0) {
  121. // if ((millis() - taskSwButton_winKeyDownMillis) > taskSwButton_winKey_Up_After) {
  122. // taskSwButton_winKeyDownMillis = 0;
  123. // }
  124. // }
  125. }