Skip to content

Commit

Permalink
Modifies System.sleep() to use particle::Flags which can be OR-ed. Ad…
Browse files Browse the repository at this point in the history
…ds SLEEP_DISABLE_WKP_PIN flag
  • Loading branch information
avtolstoy committed Oct 23, 2017
1 parent 5973b3c commit f653ce9
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 29 deletions.
7 changes: 4 additions & 3 deletions system/inc/system_sleep.h
Expand Up @@ -31,10 +31,11 @@ typedef enum
SLEEP_MODE_WLAN = 0, SLEEP_MODE_DEEP = 1, SLEEP_MODE_SOFTPOWEROFF = 2
} Spark_Sleep_TypeDef;

enum class SystemSleepNetwork
enum class SystemSleepOption
{
Off,
Standby,
NetworkOff = 0x00,
NetworkStandby = 0x01,
DisableWkpPin = 0x02
};

/**
Expand Down
33 changes: 11 additions & 22 deletions wiring/inc/spark_wiring_system.h
Expand Up @@ -36,6 +36,7 @@
#include "core_hal.h"
#include "system_user.h"
#include "system_version.h"
#include "spark_wiring_flags.h"

#if defined(SPARK_PLATFORM) && PLATFORM_ID!=3
#define SYSTEM_HW_TICKS 1
Expand All @@ -49,25 +50,13 @@

class Stream;

class SleepNetworkFlag
{
public:
typedef uint8_t flag_t;
inline SleepNetworkFlag(SystemSleepNetwork f) : SleepNetworkFlag(static_cast<flag_t>(f)) {}

inline SleepNetworkFlag(flag_t flag) : flag_(flag) {}

inline explicit operator flag_t() const { return flag_; }

inline flag_t flag() const { return flag_; }

private:
flag_t flag_;
};
struct SleepOptionFlagType; // Tag type for System.sleep() flags
typedef particle::Flags<SleepOptionFlagType, uint32_t> SleepOptionFlags;
typedef SleepOptionFlags::FlagType SleepOptionFlag;

// Bring the system enum into global scope
const SleepNetworkFlag SLEEP_NETWORK_OFF(SystemSleepNetwork::Off);
const SleepNetworkFlag SLEEP_NETWORK_STANDBY(SystemSleepNetwork::Standby);
const SleepOptionFlag SLEEP_NETWORK_OFF(static_cast<uint32_t>(SystemSleepOption::NetworkOff));
const SleepOptionFlag SLEEP_NETWORK_STANDBY(static_cast<uint32_t>(SystemSleepOption::NetworkStandby));
const SleepOptionFlag SLEEP_DISABLE_WKP_PIN(static_cast<uint32_t>(SystemSleepOption::DisableWkpPin));

#if Wiring_LogConfig
enum LoggingFeature {
Expand Down Expand Up @@ -117,14 +106,14 @@ class SystemClass {
}
#endif

static void sleep(Spark_Sleep_TypeDef sleepMode, long seconds=0, SleepNetworkFlag flag=SLEEP_NETWORK_OFF);
inline static void sleep(Spark_Sleep_TypeDef sleepMode, SleepNetworkFlag flag, long seconds=0) {
static void sleep(Spark_Sleep_TypeDef sleepMode, long seconds=0, SleepOptionFlags flag=SLEEP_NETWORK_OFF);
inline static void sleep(Spark_Sleep_TypeDef sleepMode, SleepOptionFlags flag, long seconds=0) {
sleep(sleepMode, seconds, flag);
}

inline static void sleep(long seconds) { sleep(SLEEP_MODE_WLAN, seconds); }
static void sleep(uint16_t wakeUpPin, InterruptMode edgeTriggerMode, long seconds=0, SleepNetworkFlag flag=SLEEP_NETWORK_OFF);
inline static void sleep(uint16_t wakeUpPin, InterruptMode edgeTriggerMode, SleepNetworkFlag flag, long seconds=0) {
static void sleep(uint16_t wakeUpPin, InterruptMode edgeTriggerMode, long seconds=0, SleepOptionFlags flag=SLEEP_NETWORK_OFF);
inline static void sleep(uint16_t wakeUpPin, InterruptMode edgeTriggerMode, SleepOptionFlags flag, long seconds=0) {
sleep(wakeUpPin, edgeTriggerMode, seconds, flag);
}

Expand Down
8 changes: 4 additions & 4 deletions wiring/src/spark_wiring_system.cpp
Expand Up @@ -40,14 +40,14 @@ void SystemClass::reset(uint32_t data)
HAL_Core_System_Reset_Ex(RESET_REASON_USER, data, nullptr);
}

void SystemClass::sleep(Spark_Sleep_TypeDef sleepMode, long seconds, SleepNetworkFlag network)
void SystemClass::sleep(Spark_Sleep_TypeDef sleepMode, long seconds, SleepOptionFlags flags)
{
system_sleep(sleepMode, seconds, network.flag(), NULL);
system_sleep(sleepMode, seconds, flags.value(), NULL);
}

void SystemClass::sleep(uint16_t wakeUpPin, InterruptMode edgeTriggerMode, long seconds, SleepNetworkFlag network)
void SystemClass::sleep(uint16_t wakeUpPin, InterruptMode edgeTriggerMode, long seconds, SleepOptionFlags flags)
{
system_sleep_pin(wakeUpPin, edgeTriggerMode, seconds, network.flag(), NULL);
system_sleep_pin(wakeUpPin, edgeTriggerMode, seconds, flags.value(), NULL);
}

uint32_t SystemClass::freeMemory()
Expand Down

0 comments on commit f653ce9

Please sign in to comment.