Photon (0.4.5 & 0.4.6) not waking up after sleep with interrupt

Oh, I admit, I have no idea how all the firmware code is organized and fits together. That's why I asked if I could be misunderstanding what I was seeing there. I was just searching, trying to find where the sleep code was handled, and that turned up. I never did find exactly what I was looking for.

It’s a bit “scattered”

You’ll find in \firmware\wiring\src\spark_wiring_system.cpp

void SystemClass::sleep(uint16_t wakeUpPin, InterruptMode edgeTriggerMode, long seconds)
{
    system_sleep_pin(wakeUpPin, edgeTriggerMode, seconds, 0, NULL);
}

which leads to \firmware\system\src\system_sleep.cpp

void system_sleep_pin(uint16_t wakeUpPin, uint16_t edgeTriggerMode, long seconds, uint32_t param, void* reserved)
{
    if (seconds>0)
        HAL_RTC_Set_UnixAlarm((time_t) seconds);
    LED_Off(LED_RGB);
    HAL_Core_Enter_Stop_Mode(wakeUpPin, edgeTriggerMode);
}

which leads to \firmware\hal\src\stm32f2xx\core_hal_stm32f2xx.c

void HAL_Core_Enter_Stop_Mode(uint16_t wakeUpPin, uint16_t edgeTriggerMode)
{
    if ((wakeUpPin < TOTAL_PINS) && (edgeTriggerMode <= FALLING))
    {
        PinMode wakeUpPinMode = INPUT;

        /* Set required pinMode based on edgeTriggerMode */
        switch(edgeTriggerMode)
        {
        case CHANGE:
            wakeUpPinMode = INPUT;
            break;

        case RISING:
            wakeUpPinMode = INPUT_PULLDOWN;
            break;

        case FALLING:
            wakeUpPinMode = INPUT_PULLUP;
            break;
        }
        HAL_Pin_Mode(wakeUpPin, wakeUpPinMode);

        /* Configure EXTI Interrupt : wake-up from stop mode using pin interrupt */
        HAL_Interrupts_Attach(wakeUpPin, NULL, NULL, edgeTriggerMode, NULL);

        HAL_Core_Execute_Stop_Mode();

        /* Detach the Interrupt pin */
        HAL_Interrupts_Detach(wakeUpPin);
    }
}

And so on :wink: