handleTaskSwButton.ino 5.3 KB

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