diff --git a/src/main.cpp b/src/main.cpp index 127a23146..18b094f71 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -158,13 +158,15 @@ void axp192Init() axp.debugCharging(); #ifdef PMU_IRQ - pinMode(PMU_IRQ, INPUT_PULLUP); + pinMode(PMU_IRQ, INPUT); attachInterrupt( - PMU_IRQ, [] { pmu_irq = true; }, RISING); + PMU_IRQ, [] { pmu_irq = true; }, FALLING); axp.adc1Enable(AXP202_BATT_CUR_ADC1, 1); - axp.enableIRQ(AXP202_VBUS_REMOVED_IRQ | AXP202_VBUS_CONNECT_IRQ | AXP202_BATT_REMOVED_IRQ | AXP202_BATT_CONNECT_IRQ, + axp.enableIRQ(AXP202_BATT_REMOVED_IRQ | AXP202_BATT_CONNECT_IRQ | AXP202_CHARGING_FINISHED_IRQ | AXP202_CHARGING_IRQ | + AXP202_VBUS_REMOVED_IRQ | AXP202_VBUS_CONNECT_IRQ | AXP202_PEK_SHORTPRESS_IRQ, 1); + axp.clearIRQ(); #endif @@ -349,9 +351,30 @@ void loop() DEBUG_MSG("pmu irq!\n"); + if (axp.isChargingIRQ()) { + DEBUG_MSG("Battery start charging\n"); + } + if (axp.isChargingDoneIRQ()) { + DEBUG_MSG("Battery fully charged\n"); + } + if (axp.isVbusRemoveIRQ()) { + DEBUG_MSG("USB unplugged\n"); + } + if (axp.isVbusPlugInIRQ()) { + DEBUG_MSG("USB plugged In\n"); + } + if (axp.isBattPlugInIRQ()) { + DEBUG_MSG("Battery inserted\n"); + } + if (axp.isBattRemoveIRQ()) { + DEBUG_MSG("Battery removed\n"); + } + if (axp.isPEKShortPressIRQ()) { + DEBUG_MSG("PEK short button press\n"); + } + isCharging = axp.isChargeing() ? 1 : 0; isUSBPowered = axp.isVBUSPlug() ? 1 : 0; - axp.clearIRQ(); } diff --git a/src/sleep.cpp b/src/sleep.cpp index f69ab5ce8..71fc3c4dc 100644 --- a/src/sleep.cpp +++ b/src/sleep.cpp @@ -155,17 +155,11 @@ void doDeepSleep(uint64_t msecToWake) static const uint8_t rtcGpios[] = {/* 0, */ 2, /* 4, */ #ifndef USE_JTAG - 12, - 13, - /* 14, */ /* 15, */ + 12, 13, + /* 14, */ /* 15, */ #endif /* 25, */ 26, /* 27, */ - 32, - 33, - 34, - 35, - 36, - 37, + 32, 33, 34, 35, 36, 37, /* 38, */ 39}; for (int i = 0; i < sizeof(rtcGpios); i++) @@ -222,7 +216,8 @@ esp_sleep_wakeup_cause_t doLightSleep(uint64_t sleepMsec) // FIXME, use a more r gpio_wakeup_enable((gpio_num_t)DIO0_GPIO, GPIO_INTR_HIGH_LEVEL); // RF95 interrupt, active high #ifdef PMU_IRQ // FIXME, disable wake due to PMU because it seems to fire all the time? - // gpio_wakeup_enable((gpio_num_t)PMU_IRQ, GPIO_INTR_HIGH_LEVEL); // pmu irq + if (axp192_found) + gpio_wakeup_enable((gpio_num_t)PMU_IRQ, GPIO_INTR_LOW_LEVEL); // pmu irq #endif assert(esp_sleep_enable_gpio_wakeup() == ESP_OK); assert(esp_sleep_enable_timer_wakeup(sleepUsec) == ESP_OK);