DeviceNameHelperRK
Public Member Functions | Static Public Member Functions | Protected Member Functions
DeviceNameHelperRetained Class Reference

Version of DeviceNameHelper that stores the name in retained RAM. More...

#include <DeviceNameHelperRK.h>

Inheritance diagram for DeviceNameHelperRetained:
DeviceNameHelper

Public Member Functions

void setup (DeviceNameHelperData *retainedData)
 You must call setup() from global setup()! More...
 
- Public Member Functions inherited from DeviceNameHelper
void loop ()
 You must call this from loop on every call to loop()
 
DeviceNameHelperwithNameCallback (std::function< void(const char *)> nameCallback)
 Adds a function to call when the name is known. More...
 
DeviceNameHelperwithCheckPeriod (std::chrono::seconds checkPeriod)
 Sets. More...
 
bool hasName () const
 Returns true if the name has been retrived and is non-empty.
 
const char * getName () const
 Returns the device name as a c-string. More...
 
long getLastNameCheckTime () const
 Get the time the name was last fetched. More...
 
void checkName ()
 Request the name again. More...
 
void subscriptionRemoved ()
 Call if you've called Particle.unsubscribe. More...
 

Static Public Member Functions

static DeviceNameHelperRetainedinstance ()
 Get the singleton instance of this class, creating it if necessary. More...
 
- Static Public Member Functions inherited from DeviceNameHelper
static DeviceNameHelpergetInstance ()
 Special generic instance getter. More...
 

Protected Member Functions

 DeviceNameHelperRetained ()
 Constructor - You never instantiate this class directly. More...
 
virtual ~DeviceNameHelperRetained ()
 This class is a singleton and never deleted.
 
- Protected Member Functions inherited from DeviceNameHelper
 DeviceNameHelper ()
 Constructor - You never instantiate this class directly. More...
 
virtual ~DeviceNameHelper ()
 This class is a singleton and never deleted.
 
 DeviceNameHelper (const DeviceNameHelper &)=delete
 This class is not copyable.
 
DeviceNameHelperoperator= (const DeviceNameHelper &)=delete
 This class is not copyable.
 
void commonSetup ()
 All of the storage-method specific setup methods call that at the end.
 
virtual void save ()
 This method is called to save the DeviceNameHelperData. More...
 
void stateStart ()
 State handler, entry point when starting up. More...
 
void stateSubscribe ()
 Add a subscription handler, if necessary. More...
 
void stateWaitConnected ()
 Waits until Particle.connected() and Time.isValid() are true. More...
 
void stateWaitRequest ()
 Waits POST_CONNECT_WAIT_MS milliseconds (2 seconds) then publishes the request for device name event "particle/device/name". More...
 
void stateWaitResponse ()
 Waits for a device name event to be received. More...
 
void stateWaitRetry ()
 Waits 5 minutes (RETRY_WAIT_MS) and tries requesting the name again. More...
 
void stateWaitRecheck ()
 Wait until it's time to check the name again. More...
 
void subscriptionHandler (const char *eventName, const char *eventData)
 Subscription handler for the "particle/device/name" event. More...
 

Additional Inherited Members

- Static Public Attributes inherited from DeviceNameHelper
static const uint32_t DATA_MAGIC = 0x7787a2f2
 Magic bytes used to detect if EEPROM or retained memory has been initialized.
 
- Protected Attributes inherited from DeviceNameHelper
DeviceNameHelperDatadata = 0
 DeviceNameHelperData structure pointer. More...
 
std::chrono::seconds checkPeriod = 0s
 How often to fetch the name again in seconds (0 = never check again)
 
std::function< void(const char *)> nameCallback = 0
 Optional function or C++11 lambda to call when the name is known. More...
 
std::function< void(DeviceNameHelper &)> stateHandler = 0
 Current state handler, or NULL if in done state.
 
unsigned long stateTime = 0
 Some states use this for timing. It's a value from millis() if used.
 
bool hasSubscribed = false
 true if Particle.subscribe has been called
 
bool gotResponse = false
 true if the event subscription handler was called. The name is stored in data.name.
 
bool forceCheck = false
 Used by checkName() to force the name to be checked again.
 
- Static Protected Attributes inherited from DeviceNameHelper
static const unsigned long POST_CONNECT_WAIT_MS = 2000
 Amount of time to wait after connection for the subscription to be activated (milliseconds)
 
static const unsigned long RESPONSE_WAIT_MS = 15000
 How long to wait for a device name response before timing out and waiting to retry (milliseconds)
 
static const unsigned long RETRY_WAIT_MS = 5 * 60 * 1000
 How long to wait to retry a request to get the device name (in milliseconds)
 
static DeviceNameHelper_instance = 0
 Singleton instance pointer, set by the subclass instance() methods.
 

Detailed Description

Version of DeviceNameHelper that stores the name in retained RAM.

It requires 44 bytes of retained RAM, out of the 3K or so available on most devices.

This is a good option because the name will be preserved across restarts and sleep modes. It will often be reset on code flash, however, so a using EEPROM or the file system may be a better choice.

Constructor & Destructor Documentation

◆ DeviceNameHelperRetained()

DeviceNameHelperRetained::DeviceNameHelperRetained ( )
protected

Constructor - You never instantiate this class directly.

Instead, use DeviceNameHelperRetained::instance() to get the singleton instance, creating it if necessary.

Member Function Documentation

◆ instance()

DeviceNameHelperRetained & DeviceNameHelperRetained::instance ( )
static

Get the singleton instance of this class, creating it if necessary.

You cannot construct an instance of this class manually, as a global or on the stack. You must instead use instance().

◆ setup()

void DeviceNameHelperRetained::setup ( DeviceNameHelperData retainedData)

You must call setup() from global setup()!

This is typically done like this from your app's setup() method.

DeviceNameHelperRetained::instance().setup();

Also note that you must do the same from global loop():

DeviceNameHelperRetained::instance().loop();


The documentation for this class was generated from the following files: