Adafruit Library
Wippersnapper.h
Go to the documentation of this file.
1 
18 #ifndef WIPPERSNAPPER_H
19 #define WIPPERSNAPPER_H
20 
21 // Cpp STD
22 #include <vector>
23 
24 // Nanopb dependencies
25 #include <nanopb/pb_common.h>
26 #include <nanopb/pb_decode.h>
27 #include <nanopb/pb_encode.h>
28 #include <pb.h>
29 
30 #include <wippersnapper/description/v1/description.pb.h> // description.proto
31 #include <wippersnapper/signal/v1/signal.pb.h> // signal.proto
32 
33 // External libraries
34 #include "Adafruit_MQTT.h" // MQTT Client
35 #include "Adafruit_SleepyDog.h" // Watchdog
36 #include "Arduino.h" // Wiring
37 #include <SPI.h> // SPI
38 
39 // Wippersnapper API Helpers
40 #include "Wippersnapper_Boards.h"
42 #include "provisioning/ConfigJson.h"
43 
44 #define WS_DEBUG
45 #define WS_PRINTER Serial
46 
47 // Define actual debug output functions when necessary.
48 #ifdef WS_DEBUG
49 #define WS_DEBUG_PRINT(...) \
50  { WS_PRINTER.print(__VA_ARGS__); }
51 #define WS_DEBUG_PRINTLN(...) \
52  { WS_PRINTER.println(__VA_ARGS__); }
53 #define WS_DEBUG_PRINTHEX(...) \
54  { WS_PRINTER.print(__VA_ARGS__, HEX); }
55 #else
56 #define WS_DEBUG_PRINT(...) \
57  {}
58 #define WS_DEBUG_PRINTLN(...) \
59  {}
60 #endif
61 
62 #define WS_DELAY_WITH_WDT(timeout) \
63  { \
64  unsigned long start = millis(); \
65  while (millis() - start < timeout) { \
66  delay(10); \
67  yield(); \
68  feedWDT(); \
69  if (millis() < start) { \
70  start = millis(); /* if rollover */ \
71  } \
72  } \
73  }
74 
75 /**************************************************************************/
93 /**************************************************************************/
94 #define RETRY_FUNCTION_UNTIL_TIMEOUT(func, result_type, result_var, condition, \
95  timeout, interval, ...) \
96  { \
97  unsigned long startTime = millis(); \
98  while (millis() - startTime < timeout) { \
99  result_type result_var = func(__VA_ARGS__); \
100  if (condition(result_var)) { \
101  break; \
102  } \
103  if (startTime > millis()) { \
104  startTime = millis(); /* if rollover */ \
105  } \
106  WS_DELAY_WITH_WDT(interval); \
107  } \
108  }
109 
110 // Wippersnapper pb helpers
111 #include <nanopb/ws_pb_helpers.h>
112 
113 // Wippersnapper components
117 
118 // Includes for ESP32-only
119 #ifdef ARDUINO_ARCH_ESP32
120 #include "components/ledc/ws_ledc.h"
121 #include <Esp.h>
122 #endif
123 
124 // Display
125 #ifdef USE_DISPLAY
128 #endif
129 
132 #include "components/pwm/ws_pwm.h"
134 #include "components/uart/ws_uart.h"
135 
136 #if defined(USE_TINYUSB)
137 #include "provisioning/tinyusb/Wippersnapper_FS.h"
138 #endif
139 
140 #if defined(USE_LITTLEFS)
141 #include "provisioning/littlefs/WipperSnapper_LittleFS.h"
142 #endif
143 
144 #define WS_VERSION \
145  "1.0.0-beta.96"
146 
147 // Reserved Adafruit IO MQTT topics
148 #define TOPIC_IO_THROTTLE "/throttle"
149 #define TOPIC_IO_ERRORS "/errors"
150 
151 // Reserved Wippersnapper topics
152 #define TOPIC_WS "/wprsnpr/"
153 #define TOPIC_INFO "/info/"
154 #define TOPIC_SIGNALS "/signals/"
155 #define TOPIC_I2C "/i2c"
156 #define MQTT_TOPIC_PIXELS_DEVICE \
157  "/signals/device/pixel"
158 #define MQTT_TOPIC_PIXELS_BROKER \
159  "/signals/broker/pixel"
160 
161 
162 typedef enum {
163  WS_IDLE = 0, // Waiting for connection establishement
164  WS_NET_DISCONNECTED = 1, // Network disconnected
165  WS_DISCONNECTED = 2, // Disconnected from Adafruit IO
166  WS_FINGERPRINT_UNKOWN = 3, // Unknown WS_SSL_FINGERPRINT
167 
168  WS_NET_CONNECT_FAILED = 10, // Failed to connect to network
169  WS_CONNECT_FAILED = 11, // Failed to connect to Adafruit IO
170  WS_FINGERPRINT_INVALID = 12, // Unknown WS_SSL_FINGERPRINT
171  WS_AUTH_FAILED = 13, // Invalid Adafruit IO login credentials provided.
172  WS_SSID_INVALID =
173  14, // SSID is "" or otherwise invalid, connection not attempted
174 
175  WS_NET_CONNECTED = 20, // Connected to Adafruit IO
176  WS_CONNECTED = 21, // Connected to network
177  WS_CONNECTED_INSECURE = 22, // Insecurely (non-SSL) connected to network
178  WS_FINGERPRINT_UNSUPPORTED = 23, // Unsupported WS_SSL_FINGERPRINT
179  WS_FINGERPRINT_VALID = 24, // Valid WS_SSL_FINGERPRINT
180  WS_BOARD_DESC_INVALID = 25, // Unable to send board description
181  WS_BOARD_RESYNC_FAILED = 26 // Board sync failure
185 typedef enum {
186  WS_MQTT_CONNECTED = 0, // Connected
187  WS_MQTT_INVALID_PROTOCOL = 1, // Invalid mqtt protocol
188  WS_MQTT_INVALID_CID = 2, // Client id rejected
189  WS_MQTT_SERVICE_UNAVALIABLE = 3, // Malformed user/pass
190  WS_MQTT_INVALID_USER_PASS = 4, // Unauthorized access to resource
191  WS_MQTT_UNAUTHORIZED = 5, // MQTT service unavailable
192  WS_MQTT_THROTTLED = 6, // Account throttled
193  WS_MQTT_BANNED = 7 // Account banned
195 
197 typedef enum {
198  WS_BOARD_DEF_IDLE,
199  WS_BOARD_DEF_SEND_FAILED,
200  WS_BOARD_DEF_SENT,
201  WS_BOARD_DEF_OK,
202  WS_BOARD_DEF_INVALID,
203  WS_BOARD_DEF_UNSPECIFIED
205 
207 typedef enum {
208  FSM_NET_IDLE,
209  FSM_NET_CONNECTED,
210  FSM_MQTT_CONNECTED,
211  FSM_NET_CHECK_MQTT,
212  FSM_NET_CHECK_NETWORK,
213  FSM_NET_ESTABLISH_NETWORK,
214  FSM_NET_ESTABLISH_MQTT,
215 } fsm_net_t;
216 
217 #ifdef ARDUINO_ARCH_RP2040
218 #define WS_WDT_TIMEOUT 8388
219 #else
220 #define WS_WDT_TIMEOUT 60000
221 #endif
222 
223 #define WS_MAX_ALT_WIFI_NETWORKS 3
224 /* MQTT Configuration */
225 #define WS_KEEPALIVE_INTERVAL_MS \
226  5000
227 
228 #define WS_MQTT_MAX_PAYLOAD_SIZE \
229  512
230 
233 class Wippersnapper_FS;
234 class WipperSnapper_LittleFS;
235 #ifdef USE_DISPLAY
236 class ws_display_driver;
238 #endif
239 #ifdef ARDUINO_ARCH_ESP32
240 class ws_ledc;
241 #endif
243 class ws_servo;
244 class ws_pwm;
245 class ws_ds18x20;
246 class ws_pixels;
247 class ws_uart;
249 /**************************************************************************/
254 /**************************************************************************/
255 class Wippersnapper {
256 public:
257  Wippersnapper();
258  virtual ~Wippersnapper();
259 
260  void provision();
261 
262  bool lockStatusNeoPixel;
263  bool lockStatusDotStar;
264  bool lockStatusLED;
267 
269  virtual void set_user_key();
270  virtual void set_ssid_pass(const char *ssid, const char *ssidPassword);
271  virtual void set_ssid_pass();
272  virtual bool check_valid_ssid();
273 
274  virtual void _connect();
275  virtual void _disconnect();
276  void connect();
277  void disconnect();
278 
279  virtual void getMacAddr();
280  virtual int32_t getRSSI();
281  virtual void setupMQTTClient(const char *clientID);
282 
285 
286  bool generateDeviceUID();
287  bool generateWSTopics();
288  bool generateWSErrorTopics();
289 
290  // Registration API
293  void decodeRegistrationResp(char *data, uint16_t len);
294  void pollRegistrationResp();
295  // Configuration API
297 
298  // run() loop
299  ws_status_t run();
300  void processPackets();
301  void publish(const char *topic, uint8_t *payload, uint16_t bLen,
302  uint8_t qos = 0);
303 
304  // Networking helpers
305  void pingBroker();
306  void runNetFSM();
307 
308  // WDT helpers
309  void enableWDT(int timeoutMS = 0);
310  void feedWDT();
311 
312  // Error handling helpers
313  void haltError(String error,
314  ws_led_status_t ledStatusColor = WS_LED_STATUS_ERROR_RUNTIME,
315  uint8_t seconds_until_reboot = 25);
316  void errorWriteHang(String error);
317 
318  // MQTT topic callbacks //
319  // Decodes a signal message
320  bool decodeSignalMsg(
321  wippersnapper_signal_v1_CreateSignalRequest *encodedSignalMsg);
322 
323  // Encodes a pin event message
324  bool
325  encodePinEvent(wippersnapper_signal_v1_CreateSignalRequest *outgoingSignalMsg,
326  uint8_t pinName, int pinVal);
327 
328  // Pin configure message
329  bool configureDigitalPinReq(wippersnapper_pin_v1_ConfigurePinRequest *pinMsg);
330  bool configAnalogInPinReq(wippersnapper_pin_v1_ConfigurePinRequest *pinMsg);
331 
332  // I2C
333  std::vector<WipperSnapper_Component_I2C *>
334  i2cComponents;
336  NULL;
338  NULL;
339  bool _isI2CPort0Init =
340  false;
341  bool _isI2CPort1Init =
342  false;
343 
346  uint8_t
349  uint16_t bufSize;
352  WS_BOARD_DEF_IDLE;
353 
354  // TODO: We really should look at making these static definitions, not dynamic
355  // to free up space on the heap
358  Wippersnapper_FS *_fileSystem;
359  WipperSnapper_LittleFS
360  *_littleFS;
361 #ifdef USE_DISPLAY
364  nullptr;
365 #endif
371 
372  // TODO: does this really need to be global?
373  uint8_t _macAddr[6];
374  char sUID[13];
375  const char *_boardId;
376  Adafruit_MQTT *_mqtt;
378  secretsConfig _config;
379  networkConfig _multiNetworks[3];
380  bool _isWiFiMulti = false;
382  // TODO: Does this need to be within this class?
383  int32_t totalDigitalPins;
385  char *_topic_description = NULL;
386  char *_topic_signal_device = NULL;
387  char *_topic_signal_i2c_brkr = NULL;
389  char *_topic_signal_i2c_device = NULL;
393  char *_topic_signal_servo_device = NULL;
396  NULL;
398  NULL;
399  char *_topic_signal_ds18_brkr = NULL;
405  char *_topic_signal_uart_brkr = NULL;
408  wippersnapper_signal_v1_CreateSignalRequest
410  wippersnapper_signal_v1_I2CRequest msgSignalI2C =
411  wippersnapper_signal_v1_I2CRequest_init_zero;
412 
414  // ds signal msg
415  wippersnapper_signal_v1_Ds18x20Request msgSignalDS =
416  wippersnapper_signal_v1_Ds18x20Request_init_zero;
419  // servo message
420  wippersnapper_signal_v1_ServoRequest
422  wippersnapper_signal_v1_PWMRequest msgPWM =
423  wippersnapper_signal_v1_PWMRequest_init_zero;
424 
426  // pixels signal message
427  wippersnapper_signal_v1_PixelsRequest
428  msgPixels;
430  wippersnapper_signal_v1_UARTRequest
437  bool pinCfgCompleted = false;
439 // enable LEDC if esp32
440 #ifdef ARDUINO_ARCH_ESP32
441  ws_ledc *_ledc = nullptr;
442 #endif
444 private:
445  void _init();
446 
447 protected:
448  ws_status_t _status = WS_IDLE;
449  uint32_t _last_mqtt_connect = 0;
451  uint32_t _prv_ping = 0;
453  uint32_t _prvKATBlink = 0;
456  // Device information
457  const char *_deviceId;
458  char *_device_uid;
460  // MQTT topics
462  NULL;
468  NULL;
471  char *_topic_signal_brkr = NULL;
472  char *_err_topic = NULL;
473  char *_throttle_topic = NULL;
475  Adafruit_MQTT_Subscribe *_topic_description_sub;
477  Adafruit_MQTT_Publish *_topic_signal_device_pub;
479  Adafruit_MQTT_Subscribe *_topic_signal_brkr_sub;
481  Adafruit_MQTT_Subscribe
483  Adafruit_MQTT_Subscribe
485  Adafruit_MQTT_Subscribe
487  Adafruit_MQTT_Subscribe
489  Adafruit_MQTT_Subscribe
491  Adafruit_MQTT_Subscribe
494  Adafruit_MQTT_Subscribe
496  Adafruit_MQTT_Subscribe
497  *_throttle_sub;
499  wippersnapper_signal_v1_CreateSignalRequest
501 };
502 extern Wippersnapper WS;
504 #endif // ADAFRUIT_WIPPERSNAPPER_H
Class that provides an interface with the I2C bus.
Definition: WipperSnapper_I2C.h:86
char * _topic_signal_pixels_brkr
Definition: Wippersnapper.h:431
wippersnapper_signal_v1_PWMRequest msgPWM
Definition: Wippersnapper.h:450
void disconnect()
Disconnects from Adafruit IO+ Wippersnapper.
Definition: Wippersnapper.cpp:153
char * _topic_signal_uart_brkr
Definition: Wippersnapper.h:433
virtual void setupMQTTClient(const char *clientID)
Sets up the MQTT client session.
Definition: Wippersnapper.cpp:203
const char * _boardId
Definition: Wippersnapper.h:403
ws_mqtt_status_t
Definition: Wippersnapper.h:213
Adafruit_MQTT_Subscribe * _throttle_sub
Definition: Wippersnapper.h:525
High-level interface for the ESP32/ESP32-Sx/ESP32-Cx LED Control (LEDC) peripheral. Instead of specifying a timer or channel, this class automatically allocates a channel and associates it with a pin. Underlying esp32-hal-ledc performs timer management and handles the low-level LEDC peripheral API calls.
Definition: ws_ledc.h:37
bool _isI2CPort1Init
True if I2C port 1 has been initialized, False otherwise.
Definition: Wippersnapper.h:369
ws_ledc * _ledc
Pointer to LEDC object.
Definition: Wippersnapper.h:469
bool generateWSErrorTopics()
Builds MQTT topics for handling errors returned from the Adafruit IO broker and subscribes to them...
Definition: Wippersnapper.cpp:1776
ws_pixels * _ws_pixelsComponent
ptr to instance of ws_pixels class
Definition: Wippersnapper.h:394
Class that provides functions for reading and interacting with digital inputs and outputs...
Definition: Wippersnapper_DigitalGPIO.h:38
void publish(const char *topic, uint8_t *payload, uint16_t bLen, uint8_t qos=0)
Publishes a message to the Adafruit IO MQTT broker. Handles network connectivity. ...
Definition: Wippersnapper.cpp:2656
char * _topic_signal_pwm_brkr
Definition: Wippersnapper.h:423
void processPackets()
Process all incoming packets from the Adafruit IO MQTT broker. Handles network connectivity.
Definition: Wippersnapper.cpp:2634
const char * _deviceId
Definition: Wippersnapper.h:485
char * _device_uid
Definition: Wippersnapper.h:486
virtual ~Wippersnapper()
Wippersnapper destructor.
Definition: Wippersnapper.cpp:79
ws_led_status_t
Definition: Wippersnapper_StatusLED.h:34
#define WS_MQTT_MAX_PAYLOAD_SIZE
MAXIMUM expected payload size, in bytes.
Definition: Wippersnapper.h:256
void connect()
Connects to Adafruit IO+ Wippersnapper broker.
Definition: Wippersnapper.cpp:2764
bool encodePinEvent(wippersnapper_signal_v1_CreateSignalRequest *outgoingSignalMsg, uint8_t pinName, int pinVal)
Handles MQTT messages on signal topic until timeout.
Definition: Wippersnapper.cpp:1646
char * _topic_description_status
Definition: Wippersnapper.h:489
bool generateWSTopics()
Generates device-specific Wippersnapper control topics and subscribes to them.
Definition: Wippersnapper.cpp:1875
Class that provides an interface for reading and controlling analog pins. Stores information about an...
Definition: Wippersnapper_AnalogIO.h:43
WipperSnapper_LittleFS * _littleFS
Instance of LittleFS Filesystem (non-native USB)
Definition: Wippersnapper.h:388
float status_pixel_brightness
Definition: Wippersnapper.h:293
uint8_t _buffer_outgoing[WS_MQTT_MAX_PAYLOAD_SIZE]
Definition: Wippersnapper.h:375
void errorWriteHang(String error)
Writes an error message to the serial and the filesystem, blinks WS_LED_STATUS_ERROR_RUNTIME pattern ...
Definition: Wippersnapper.cpp:2334
Adafruit_MQTT_Subscribe * _topic_signal_ds18_sub
Definition: Wippersnapper.h:516
bool decodeSignalMsg(wippersnapper_signal_v1_CreateSignalRequest *encodedSignalMsg)
Decodes a signal buffer protobuf message. NOTE: Should be executed in-order after a new _buffer is re...
Definition: Wippersnapper.cpp:500
void provision()
Provisions a WipperSnapper device with its network configuration and Adafruit IO credentials.
Definition: Wippersnapper.cpp:94
Adafruit_MQTT_Subscribe * _topic_signal_i2c_sub
Definition: Wippersnapper.h:510
char * _topic_signal_device
Definition: Wippersnapper.h:414
uint8_t _buffer[WS_MQTT_MAX_PAYLOAD_SIZE]
Definition: Wippersnapper.h:372
secretsConfig _config
Definition: Wippersnapper.h:406
uint32_t _last_mqtt_connect
Definition: Wippersnapper.h:477
char * _topic_signal_i2c_device
Definition: Wippersnapper.h:417
char * _topic_signal_pixels_device
Definition: Wippersnapper.h:432
ws_display_ui_helper * _ui_helper
Instance of display UI helper class.
Definition: Wippersnapper.h:391
wippersnapper_signal_v1_I2CRequest msgSignalI2C
Definition: Wippersnapper.h:438
Wippersnapper_DigitalGPIO * _digitalGPIO
Instance of digital gpio class.
Definition: Wippersnapper.h:384
ws_status_t
Definition: Wippersnapper.h:190
WipperSnapper_Component_I2C * _i2cPort1
WipperSnapper I2C Component for I2C port #1.
Definition: Wippersnapper.h:365
wippersnapper_signal_v1_CreateSignalRequest _incomingSignalMsg
Definition: Wippersnapper.h:437
virtual bool check_valid_ssid()
Performs a scan of local WiFi networks.
Definition: Wippersnapper.cpp:248
Class that provides storage and functions for the Adafruit IO Wippersnapper interface.
Definition: Wippersnapper.h:283
Interface for WipperSnapper servo control.
Definition: ws_servo.h:61
bool configureDigitalPinReq(wippersnapper_pin_v1_ConfigurePinRequest *pinMsg)
Configures a pin according to a wippersnapper_pin_v1_ConfigurePinRequest message. ...
Definition: Wippersnapper.cpp:326
friend class
Definition: ws_pixels.h:49
ws_status_t run()
Processes incoming commands and handles network connection.
Definition: Wippersnapper.cpp:2874
virtual void _connect()
Connects to wireless network.
Definition: Wippersnapper.cpp:162
wippersnapper_signal_v1_CreateSignalRequest _outgoingSignalMsg
Definition: Wippersnapper.h:528
char * _topic_signal_pwm_device
Definition: Wippersnapper.h:425
bool encodePubRegistrationReq()
Encodes hardware registration request message and publishes the message to the Adafruit IO broker...
Definition: Wippersnapper_Register.cpp:27
char * throttleMessage
Definition: Wippersnapper.h:461
uint32_t _prv_ping
Definition: Wippersnapper.h:479
virtual void getMacAddr()
Sets the network interface&#39;s unique identifer, typically the MAC address.
Definition: Wippersnapper.cpp:181
bool generateDeviceUID()
Attempts to generate unique device identifier.
Definition: Wippersnapper.cpp:1834
Adafruit_MQTT_Subscribe * _topic_description_sub
Definition: Wippersnapper.h:503
char sUID[13]
Definition: Wippersnapper.h:402
Wippersnapper WS
Global member variable for callbacks.
Definition: Wippersnapper.cpp:36
virtual void set_ssid_pass()
Sets the device&#39;s wireless network credentials from the secrets.json configuration file...
Definition: Wippersnapper.cpp:238
char * _err_topic
Definition: Wippersnapper.h:500
void feedWDT()
Feeds the WDT to prevent hardware reset.
Definition: Wippersnapper.cpp:2608
uint32_t _prvKATBlink
Definition: Wippersnapper.h:481
char * _topic_signal_servo_device
Definition: Wippersnapper.h:421
Display driver for LVGL and LVGL_Glue in WipperSnapper.
Definition: ws_display_driver.h:33
bool _isWiFiMulti
Definition: Wippersnapper.h:408
Adafruit_MQTT_Subscribe * _topic_signal_pixels_sub
Definition: Wippersnapper.h:518
ws_ds18x20 * _ds18x20Component
Instance of DS18x20 class.
Definition: Wippersnapper.h:397
ws_board_status_t _boardStatus
Hardware&#39;s registration status.
Definition: Wippersnapper.h:379
wippersnapper_signal_v1_UARTRequest msgSignalUART
UARTReq wrapper message.
Definition: Wippersnapper.h:459
void runNetFSM()
Checks network and MQTT connectivity. Handles network re-connection and mqtt re-establishment.
Definition: Wippersnapper.cpp:2358
networkConfig _multiNetworks[3]
Definition: Wippersnapper.h:407
bool pinCfgCompleted
Definition: Wippersnapper.h:465
void haltError(String error, ws_led_status_t ledStatusColor=WS_LED_STATUS_ERROR_RUNTIME, uint8_t seconds_until_reboot=25)
Prints an error to the serial and halts the hardware until the WDT bites.
Definition: Wippersnapper.cpp:2504
char * _topic_signal_uart_device
Definition: Wippersnapper.h:434
void pingBroker()
Pings the MQTT broker within the keepalive interval to keep the connection alive. Blinks the keepaliv...
Definition: Wippersnapper.cpp:2576
wippersnapper_signal_v1_Ds18x20Request msgSignalDS
Definition: Wippersnapper.h:443
ws_display_driver * _display
Instance of display driver class.
Definition: Wippersnapper.h:390
wippersnapper_signal_v1_PixelsRequest msgPixels
PixelsRequest wrapper message.
Definition: Wippersnapper.h:456
void enableWDT(int timeoutMS=0)
Enables the watchdog timer.
Definition: Wippersnapper.cpp:2618
Adafruit_MQTT_Subscribe * _topic_signal_pwm_sub
Definition: Wippersnapper.h:514
Class that provides an interface with DS18X20-compatible sensors.
Definition: ws_ds18x20.h:48
char * _topic_signal_ds18_brkr
Definition: Wippersnapper.h:427
void publishPinConfigComplete()
Publishes an ACK to the broker that the device has completed its hardware configuration.
Definition: Wippersnapper.cpp:2840
std::vector< WipperSnapper_Component_I2C * > i2cComponents
Vector containing all I2C components.
Definition: Wippersnapper.h:362
Helps build and manage the LVGL objects and screens for the application code.
Definition: ws_display_ui_helper.h:63
uint16_t bufSize
Definition: Wippersnapper.h:377
char * _topic_signal_i2c_brkr
Definition: Wippersnapper.h:415
Adafruit_MQTT_Subscribe * _topic_signal_brkr_sub
Definition: Wippersnapper.h:507
char * _topic_signal_brkr
Definition: Wippersnapper.h:499
int32_t totalDigitalPins
Definition: Wippersnapper.h:411
Interface for WipperSnapper PWM.
Definition: ws_pwm.h:34
ws_status_t _status
Definition: Wippersnapper.h:476
ws_board_status_t
Definition: Wippersnapper.h:225
uint8_t _macAddr[6]
Definition: Wippersnapper.h:401
ws_pwm * _pwmComponent
Instance of pwm class.
Definition: Wippersnapper.h:395
fsm_net_t
Definition: Wippersnapper.h:235
bool lockStatusLED
True if status LED is using the built-in LED.
Definition: Wippersnapper.h:292
Wippersnapper_FS * _fileSystem
Instance of Filesystem (native USB)
Definition: Wippersnapper.h:386
Adafruit_MQTT_Subscribe * _topic_signal_uart_sub
Definition: Wippersnapper.h:520
Adafruit_MQTT * _mqtt
Definition: Wippersnapper.h:404
#define STATUS_PIXEL_BRIGHTNESS_DEFAULT
Default status pixel brightness.
Definition: Wippersnapper_StatusLED.h:59
virtual ws_status_t networkStatus()
Returns the network&#39;s connection status.
Definition: Wippersnapper.cpp:213
char * _topic_device_pin_config_complete
Definition: Wippersnapper.h:495
char * _topic_signal_servo_brkr
Definition: Wippersnapper.h:419
Wippersnapper_AnalogIO * _analogIO
Instance of analog io class.
Definition: Wippersnapper.h:385
char * _topic_description_status_complete
Definition: Wippersnapper.h:492
void pollRegistrationResp()
Polls the broker for the hardware registration response message.
Definition: Wippersnapper_Register.cpp:78
ws_board_status_t getBoardStatus()
Returns the board definition status.
Definition: Wippersnapper.cpp:2567
bool configAnalogInPinReq(wippersnapper_pin_v1_ConfigurePinRequest *pinMsg)
Configures an analog input pin according to a wippersnapper_pin_v1_ConfigurePinRequest message...
Definition: Wippersnapper.cpp:275
bool lockStatusDotStar
True if status LED is using the status dotstar.
Definition: Wippersnapper.h:291
wippersnapper_signal_v1_ServoRequest msgServo
ServoRequest wrapper message.
Definition: Wippersnapper.h:449
char * _throttle_topic
Definition: Wippersnapper.h:501
void decodeRegistrationResp(char *data, uint16_t len)
Decodes hardware registration response message from the Adafruit IO MQTT broker and initializes hardw...
Definition: Wippersnapper_Register.cpp:98
bool lockStatusNeoPixel
True if status LED is using the status neopixel.
Definition: Wippersnapper.h:290
Adafruit_MQTT_Subscribe * _topic_signal_servo_sub
Definition: Wippersnapper.h:512
WipperSnapper_Component_I2C * _i2cPort0
WipperSnapper I2C Component for I2C port #0.
Definition: Wippersnapper.h:363
bool registerBoard()
Attempts to register hardware with Adafruit.io WipperSnapper.
Definition: Wippersnapper.cpp:2543
int throttleTime
Definition: Wippersnapper.h:462
Adafruit_MQTT_Subscribe * _err_sub
Definition: Wippersnapper.h:523
char * _topic_signal_ds18_device
Definition: Wippersnapper.h:429
bool _isI2CPort0Init
True if I2C port 0 has been initialized, False otherwise.
Definition: Wippersnapper.h:367
virtual int32_t getRSSI()
Gets the network&#39;s RSSI.
Definition: Wippersnapper.cpp:191
virtual void _disconnect()
Disconnect Wippersnapper MQTT session and network.
Definition: Wippersnapper.cpp:171
ws_servo * _servoComponent
Instance of servo class.
Definition: Wippersnapper.h:396
Adafruit_MQTT_Publish * _topic_signal_device_pub
Definition: Wippersnapper.h:505
ws_uart * _uartComponent
Instance of UART class.
Definition: Wippersnapper.h:398
char * _topic_description
Definition: Wippersnapper.h:413
Class that provides an interface between WipperSnapper&#39;s app and the device&#39;s UART bus...
Definition: ws_uart.h:29
virtual void set_user_key()
Configures the device&#39;s Adafruit IO credentials. This method should be used only if filesystem-backed...
Definition: Wippersnapper.cpp:260