handlePowerButton.ino 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. unsigned long powerButton_triggeredMillis = 0;
  2. unsigned long powerButton_lastPressedMillis = 0;
  3. unsigned long powerButton_disableMillis = 0;
  4. unsigned int powerButton_execLoopAfter = 250;
  5. unsigned int powerButton_disableAfterAction = 1500;
  6. unsigned int powerButton_pressDurationMin_shortHoldAction = 250;
  7. unsigned int powerButton_pressDurationMax_shortHoldAction = 600;
  8. unsigned int powerButton_pressDurationMin_sleep = 800;
  9. unsigned int powerButton_pressDurationMax_sleep = 2000;
  10. unsigned int powerButton_pressDuration_shutdown = 3000;
  11. void handlePowerButton() {
  12. powerButton_lastPressedMillis = millis();
  13. if (powerButton_disableMillis > 0 ) powerButton_disableMillis = millis();
  14. if (powerButton_disableMillis == 0) {
  15. if (powerButton_triggeredMillis == 0) {
  16. powerButton_triggeredMillis = millis();
  17. if(useSerial) Serial.println(F("POWER INITIALLY PRESSED"));
  18. //Serial.println(F("sending ALT+F4"));
  19. //BootKeyboard.press(KEY_LEFT_ALT);
  20. //BootKeyboard.press(KEY_F4);
  21. //delay(50);
  22. //BootKeyboard.releaseAll();
  23. }
  24. else if ( (millis() - powerButton_triggeredMillis) >= powerButton_pressDuration_shutdown) {
  25. // LONG PRESSED
  26. powerButton_triggeredMillis = 0;
  27. powerButton_lastPressedMillis = 0;
  28. powerButton_disableMillis = millis();
  29. if (useSerial) {
  30. Serial.println(F("POWER LONG HOLD"));
  31. Serial.println(F("sending SYSTEM_POWER_DOWN"));
  32. }
  33. if (sendHID) System.write(SYSTEM_POWER_DOWN);
  34. }
  35. }
  36. }
  37. void handlePowerButton_loop() {
  38. // handle Power Button short press
  39. if (powerButton_triggeredMillis > 0) {
  40. if (powerButton_lastPressedMillis > 0) {
  41. if ((millis() - powerButton_lastPressedMillis) > powerButton_execLoopAfter) {
  42. unsigned int tDelta = powerButton_lastPressedMillis - powerButton_triggeredMillis;
  43. if (debug) {
  44. Serial.print(F("POWER held for "));
  45. Serial.print(tDelta);
  46. Serial.println("ms");
  47. }
  48. if (tDelta >= powerButton_pressDurationMin_sleep && tDelta <= powerButton_pressDurationMax_sleep) {
  49. // SHORT PRESSED
  50. if (useSerial) {
  51. Serial.println(F("POWER SHORT HOLD"));
  52. Serial.println(F("sending SYSTEM_SLEEP"));
  53. }
  54. if (sendHID) System.write(SYSTEM_SLEEP);
  55. powerButton_triggeredMillis = 0;
  56. powerButton_lastPressedMillis = 0;
  57. powerButton_disableMillis = millis();
  58. }
  59. else if (tDelta >= powerButton_pressDurationMin_shortHoldAction && tDelta < powerButton_pressDurationMax_shortHoldAction) {
  60. // VERY SHORT HOLD
  61. if (useSerial) {
  62. Serial.println(F("POWER VERY SHORT HOLD"));
  63. Serial.println("sending WIN KEY");
  64. }
  65. if (sendHID) BootKeyboard.write(KEY_LEFT_WINDOWS);
  66. powerButton_triggeredMillis = 0;
  67. powerButton_lastPressedMillis = 0;
  68. //powerButton_disableMillis = millis();
  69. }
  70. else {
  71. // button was pressed too long for "SHORT PRESSED"
  72. if (useSerial) {
  73. Serial.println(F("POWER BUTTON CANCELLED"));
  74. }
  75. powerButton_triggeredMillis = 0;
  76. powerButton_lastPressedMillis = 0;
  77. }
  78. }
  79. }
  80. }
  81. if (powerButton_disableMillis > 0) {
  82. if ((millis() - powerButton_disableMillis) > powerButton_disableAfterAction) {
  83. powerButton_triggeredMillis = 0;
  84. powerButton_lastPressedMillis = 0;
  85. powerButton_disableMillis = 0;
  86. }
  87. }
  88. }