Double click sends ad-hoc position, triple turns off gps

This commit is contained in:
Ben Meadors 2023-01-18 21:02:45 -06:00
parent 4cfedc4b57
commit 6a5e0edb60

View File

@ -9,23 +9,24 @@
namespace concurrency namespace concurrency
{ {
/** /**
* Watch a GPIO and if we get an IRQ, wake the main thread. * Watch a GPIO and if we get an IRQ, wake the main thread.
* Use to add wake on button press * Use to add wake on button press
*/ */
void wakeOnIrq(int irq, int mode) void wakeOnIrq(int irq, int mode)
{ {
attachInterrupt( attachInterrupt(
irq, irq,
[] { []
{
BaseType_t higherWake = 0; BaseType_t higherWake = 0;
mainDelay.interruptFromISR(&higherWake); mainDelay.interruptFromISR(&higherWake);
}, },
FALLING); FALLING);
} }
class ButtonThread : public concurrency::OSThread class ButtonThread : public concurrency::OSThread
{ {
// Prepare for button presses // Prepare for button presses
#ifdef BUTTON_PIN #ifdef BUTTON_PIN
OneButton userButton; OneButton userButton;
@ -115,8 +116,8 @@ class ButtonThread : public concurrency::OSThread
{ {
// LOG_DEBUG("press!\n"); // LOG_DEBUG("press!\n");
#ifdef BUTTON_PIN #ifdef BUTTON_PIN
if ((BUTTON_PIN != moduleConfig.canned_message.inputbroker_pin_press) || if ((BUTTON_PIN != moduleConfig.canned_message.inputbroker_pin_press) || !moduleConfig.canned_message.enabled)
!moduleConfig.canned_message.enabled) { {
powerFSM.trigger(EVENT_PRESS); powerFSM.trigger(EVENT_PRESS);
} }
#endif #endif
@ -128,16 +129,19 @@ class ButtonThread : public concurrency::OSThread
screen->adjustBrightness(); screen->adjustBrightness();
#endif #endif
// If user button is held down for 5 seconds, shutdown the device. // If user button is held down for 5 seconds, shutdown the device.
if ((millis() - longPressTime > 5 * 1000) && (longPressTime > 0)) { if ((millis() - longPressTime > 5 * 1000) && (longPressTime > 0))
{
#ifdef HAS_PMU #ifdef HAS_PMU
if (pmu_found == true) { if (pmu_found == true)
{
setLed(false); setLed(false);
power->shutdown(); power->shutdown();
} }
#elif defined(ARCH_NRF52) #elif defined(ARCH_NRF52)
// Do actual shutdown when button released, otherwise the button release // Do actual shutdown when button released, otherwise the button release
// may wake the board immediatedly. // may wake the board immediatedly.
if ((!shutdown_on_long_stop) && (millis() > 30 * 1000)) { if ((!shutdown_on_long_stop) && (millis() > 30 * 1000))
{
screen->startShutdownScreen(); screen->startShutdownScreen();
LOG_INFO("Shutdown from long press"); LOG_INFO("Shutdown from long press");
playBeep(); playBeep();
@ -153,18 +157,27 @@ class ButtonThread : public concurrency::OSThread
shutdown_on_long_stop = true; shutdown_on_long_stop = true;
} }
#endif #endif
} else { }
else
{
// LOG_DEBUG("Long press %u\n", (millis() - longPressTime)); // LOG_DEBUG("Long press %u\n", (millis() - longPressTime));
} }
} }
static void userButtonDoublePressed() static void userButtonDoublePressed()
{ {
#if defined(USE_EINK) && defined(PIN_EINK_EN) #if defined(USE_EINK) && defined(PIN_EINK_EN)
digitalWrite(PIN_EINK_EN, digitalRead(PIN_EINK_EN) == LOW); digitalWrite(PIN_EINK_EN, digitalRead(PIN_EINK_EN) == LOW);
#endif #endif
#if defined(GPS_POWER_TOGGLE) screen->print("Sent ad-hoc ping\n");
if(config.position.gps_enabled) service.refreshMyNodeInfo();
service.sendNetworkPing(NODENUM_BROADCAST, true);
}
static void userButtonMultiPressed()
{
#if defined(GPS_POWER_TOGGLE)
if (config.position.gps_enabled)
{ {
LOG_DEBUG("Flag set to false for gps power\n"); LOG_DEBUG("Flag set to false for gps power\n");
} }
@ -174,19 +187,13 @@ class ButtonThread : public concurrency::OSThread
} }
config.position.gps_enabled = !(config.position.gps_enabled); config.position.gps_enabled = !(config.position.gps_enabled);
doGPSpowersave(config.position.gps_enabled); doGPSpowersave(config.position.gps_enabled);
#endif #endif
}
static void userButtonMultiPressed()
{
screen->print("Sent ad-hoc ping\n");
service.refreshMyNodeInfo();
service.sendNetworkPing(NODENUM_BROADCAST, true);
} }
static void userButtonPressedLongStart() static void userButtonPressedLongStart()
{ {
if (millis() > 30 * 1000) { if (millis() > 30 * 1000)
{
LOG_DEBUG("Long press start!\n"); LOG_DEBUG("Long press start!\n");
longPressTime = millis(); longPressTime = millis();
} }
@ -194,16 +201,18 @@ class ButtonThread : public concurrency::OSThread
static void userButtonPressedLongStop() static void userButtonPressedLongStop()
{ {
if (millis() > 30 * 1000) { if (millis() > 30 * 1000)
{
LOG_DEBUG("Long press stop!\n"); LOG_DEBUG("Long press stop!\n");
longPressTime = 0; longPressTime = 0;
if (shutdown_on_long_stop) { if (shutdown_on_long_stop)
{
playShutdownMelody(); playShutdownMelody();
delay(3000); delay(3000);
power->shutdown(); power->shutdown();
} }
} }
} }
}; };
} // namespace concurrency } // namespace concurrency