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