diff --git a/html/_wippersnapper_8h.html b/html/_wippersnapper_8h.html index 7ab562fa0..e3bf81128 100644 --- a/html/_wippersnapper_8h.html +++ b/html/_wippersnapper_8h.html @@ -129,7 +129,7 @@  Prints debug output.
  -#define WS_VERSION   "1.0.0-beta.78" +#define WS_VERSION   "1.0.0-alpha.79"  WipperSnapper app. version (semver-formatted)
  diff --git a/html/_wippersnapper_8h_source.html b/html/_wippersnapper_8h_source.html index d2f9e076c..0282f04dd 100644 --- a/html/_wippersnapper_8h_source.html +++ b/html/_wippersnapper_8h_source.html @@ -66,7 +66,7 @@
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 // Wippersnapper components
66 
67 // LEDC-Manager, ESP32-only
68 #ifdef ARDUINO_ARCH_ESP32
70 #endif
71 
72 // Display
73 #ifdef USE_DISPLAY
76 #endif
77 
80 #include "components/pwm/ws_pwm.h"
83 
84 #if defined(USE_TINYUSB)
85 #include "provisioning/tinyusb/Wippersnapper_FS.h"
86 #endif
87 
88 #if defined(USE_LITTLEFS)
89 #include "provisioning/littlefs/WipperSnapper_LittleFS.h"
90 #endif
91 
92 #define WS_VERSION \
93  "1.0.0-beta.78"
94 
95 // Reserved Adafruit IO MQTT topics
96 #define TOPIC_IO_THROTTLE "/throttle"
97 #define TOPIC_IO_ERRORS "/errors"
98 
99 // Reserved Wippersnapper topics
100 #define TOPIC_WS "/wprsnpr/"
101 #define TOPIC_INFO "/info/"
102 #define TOPIC_SIGNALS "/signals/"
103 #define TOPIC_I2C "/i2c"
104 #define MQTT_TOPIC_PIXELS_DEVICE \
105  "/signals/device/pixel"
106 #define MQTT_TOPIC_PIXELS_BROKER \
107  "/signals/broker/pixel"
108 
110 typedef enum {
111  WS_IDLE = 0, // Waiting for connection establishement
112  WS_NET_DISCONNECTED = 1, // Network disconnected
113  WS_DISCONNECTED = 2, // Disconnected from Adafruit IO
114  WS_FINGERPRINT_UNKOWN = 3, // Unknown WS_SSL_FINGERPRINT
115 
116  WS_NET_CONNECT_FAILED = 10, // Failed to connect to network
117  WS_CONNECT_FAILED = 11, // Failed to connect to Adafruit IO
118  WS_FINGERPRINT_INVALID = 12, // Unknown WS_SSL_FINGERPRINT
119  WS_AUTH_FAILED = 13, // Invalid Adafruit IO login credentials provided.
120  WS_SSID_INVALID =
121  14, // SSID is "" or otherwise invalid, connection not attempted
122 
123  WS_NET_CONNECTED = 20, // Connected to Adafruit IO
124  WS_CONNECTED = 21, // Connected to network
125  WS_CONNECTED_INSECURE = 22, // Insecurely (non-SSL) connected to network
126  WS_FINGERPRINT_UNSUPPORTED = 23, // Unsupported WS_SSL_FINGERPRINT
127  WS_FINGERPRINT_VALID = 24, // Valid WS_SSL_FINGERPRINT
128  WS_BOARD_DESC_INVALID = 25, // Unable to send board description
129  WS_BOARD_RESYNC_FAILED = 26 // Board sync failure
130 } ws_status_t;
131 
133 typedef enum {
134  WS_MQTT_CONNECTED = 0, // Connected
135  WS_MQTT_INVALID_PROTOCOL = 1, // Invalid mqtt protocol
136  WS_MQTT_INVALID_CID = 2, // Client id rejected
137  WS_MQTT_SERVICE_UNAVALIABLE = 3, // Malformed user/pass
138  WS_MQTT_INVALID_USER_PASS = 4, // Unauthorized access to resource
139  WS_MQTT_UNAUTHORIZED = 5, // MQTT service unavailable
140  WS_MQTT_THROTTLED = 6, // Account throttled
141  WS_MQTT_BANNED = 7 // Account banned
143 
145 typedef enum {
146  WS_BOARD_DEF_IDLE,
147  WS_BOARD_DEF_SEND_FAILED,
148  WS_BOARD_DEF_SENT,
149  WS_BOARD_DEF_OK,
150  WS_BOARD_DEF_INVALID,
151  WS_BOARD_DEF_UNSPECIFIED
153 
155 typedef enum {
156  FSM_NET_IDLE,
157  FSM_NET_CONNECTED,
158  FSM_MQTT_CONNECTED,
159  FSM_NET_CHECK_MQTT,
160  FSM_NET_CHECK_NETWORK,
161  FSM_NET_ESTABLISH_NETWORK,
162  FSM_NET_ESTABLISH_MQTT,
163 } fsm_net_t;
164 
165 #define WS_WDT_TIMEOUT 60000
166 /* MQTT Configuration */
167 #define WS_KEEPALIVE_INTERVAL_MS \
168  5000
169 
170 #define WS_MQTT_MAX_PAYLOAD_SIZE \
171  512
172 
175 class Wippersnapper_FS;
176 class WipperSnapper_LittleFS;
177 #ifdef USE_DISPLAY
178 class ws_display_driver;
180 #endif
181 #ifdef ARDUINO_ARCH_ESP32
182 class ws_ledc;
183 #endif
185 class ws_servo;
186 class ws_pwm;
187 class ws_ds18x20;
188 class ws_pixels;
189 class ws_uart;
190 
191 /**************************************************************************/
196 /**************************************************************************/
197 class Wippersnapper {
198 public:
199  Wippersnapper();
200  virtual ~Wippersnapper();
201 
202  void provision();
203 
204  bool lockStatusNeoPixel;
205  bool lockStatusDotStar;
206  bool lockStatusLED;
211  virtual void set_user_key();
212  virtual void set_ssid_pass(const char *ssid, const char *ssidPassword);
213  virtual void set_ssid_pass();
214  virtual bool check_valid_ssid();
215 
216  virtual void _connect();
217  virtual void _disconnect();
218  void connect();
219  void disconnect();
220 
221  virtual void getMacAddr();
222  virtual void setupMQTTClient(const char *clientID);
223 
224  virtual ws_status_t networkStatus();
226 
227  bool generateDeviceUID();
228  bool generateWSTopics();
229  bool generateWSErrorTopics();
230 
231  // Registration API
232  bool registerBoard();
234  void decodeRegistrationResp(char *data, uint16_t len);
235  void pollRegistrationResp();
236  // Configuration API
238 
239  // run() loop
240  ws_status_t run();
241  void processPackets();
242  void publish(const char *topic, uint8_t *payload, uint16_t bLen,
243  uint8_t qos = 0);
244 
245  // Networking helpers
246  void pingBroker();
247  void runNetFSM();
248 
249  // WDT helpers
250  void enableWDT(int timeoutMS = 0);
251  void feedWDT();
252 
253  // Error handling helpers
254  void haltError(String error,
255  ws_led_status_t ledStatusColor = WS_LED_STATUS_ERROR_RUNTIME);
256  void errorWriteHang(String error);
257 
258  // MQTT topic callbacks //
259  // Decodes a signal message
260  bool decodeSignalMsg(
261  wippersnapper_signal_v1_CreateSignalRequest *encodedSignalMsg);
262 
263  // Encodes a pin event message
264  bool
265  encodePinEvent(wippersnapper_signal_v1_CreateSignalRequest *outgoingSignalMsg,
266  uint8_t pinName, int pinVal);
267 
268  // Pin configure message
269  bool configureDigitalPinReq(wippersnapper_pin_v1_ConfigurePinRequest *pinMsg);
270  bool configAnalogInPinReq(wippersnapper_pin_v1_ConfigurePinRequest *pinMsg);
271 
272  // I2C
273  std::vector<WipperSnapper_Component_I2C *>
274  i2cComponents;
276  NULL;
278  NULL;
279  bool _isI2CPort0Init =
280  false;
281  bool _isI2CPort1Init =
282  false;
283 
286  uint8_t
289  uint16_t bufSize;
292  WS_BOARD_DEF_IDLE;
293 
294  // TODO: We really should look at making these static definitions, not dynamic
295  // to free up space on the heap
298  Wippersnapper_FS *_fileSystem;
299  WipperSnapper_LittleFS
301 #ifdef USE_DISPLAY
302  ws_display_driver *_display = nullptr;
304  nullptr;
305 #endif
312  // TODO: does this really need to be global?
313  uint8_t _macAddr[6];
314  char sUID[13];
315  const char *_boardId;
316  Adafruit_MQTT *_mqtt;
318  secretsConfig _config;
320  // TODO: Does this need to be within this class?
323  char *_topic_description = NULL;
324  char *_topic_signal_device = NULL;
325  char *_topic_signal_i2c_brkr = NULL;
329  char *_topic_signal_servo_brkr = NULL;
331  char *_topic_signal_servo_device = NULL;
333  char *_topic_signal_pwm_brkr =
334  NULL;
336  NULL;
337  char *_topic_signal_ds18_brkr = NULL;
339  char *_topic_signal_ds18_device = NULL;
341  char *_topic_signal_pixels_brkr = NULL;
343  char *_topic_signal_uart_brkr = NULL;
346  wippersnapper_signal_v1_CreateSignalRequest
348  wippersnapper_signal_v1_I2CRequest msgSignalI2C =
349  wippersnapper_signal_v1_I2CRequest_init_zero;
352  // ds signal msg
353  wippersnapper_signal_v1_Ds18x20Request msgSignalDS =
354  wippersnapper_signal_v1_Ds18x20Request_init_zero;
355 
357  // servo message
358  wippersnapper_signal_v1_ServoRequest
359  msgServo;
360  wippersnapper_signal_v1_PWMRequest msgPWM =
361  wippersnapper_signal_v1_PWMRequest_init_zero;
364  // pixels signal message
365  wippersnapper_signal_v1_PixelsRequest
366  msgPixels;
367 
368  wippersnapper_signal_v1_UARTRequest
370 
371  char *throttleMessage;
375  bool pinCfgCompleted = false;
377 // enable LEDC if esp32
378 #ifdef ARDUINO_ARCH_ESP32
379  ws_ledc *_ledc = nullptr;
380 #endif
381 
382 private:
383  void _init();
384 
385 protected:
386  ws_status_t _status = WS_IDLE;
387  uint32_t _last_mqtt_connect = 0;
389  uint32_t _prv_ping = 0;
391  uint32_t _prvKATBlink = 0;
394  // Device information
395  const char *_deviceId;
396  char *_device_uid;
398  // MQTT topics
400  NULL;
406  NULL;
409  char *_topic_signal_brkr = NULL;
410  char *_err_topic = NULL;
411  char *_throttle_topic = NULL;
413  Adafruit_MQTT_Subscribe *_topic_description_sub;
415  Adafruit_MQTT_Publish *_topic_signal_device_pub;
417  Adafruit_MQTT_Subscribe *_topic_signal_brkr_sub;
419  Adafruit_MQTT_Subscribe
421  Adafruit_MQTT_Subscribe
423  Adafruit_MQTT_Subscribe
425  Adafruit_MQTT_Subscribe
427  Adafruit_MQTT_Subscribe
429  Adafruit_MQTT_Subscribe
432  Adafruit_MQTT_Subscribe
434  Adafruit_MQTT_Subscribe
435  *_throttle_sub;
437  wippersnapper_signal_v1_CreateSignalRequest
439 };
440 extern Wippersnapper WS;
442 #endif // ADAFRUIT_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 // Wippersnapper components
66 
67 // LEDC-Manager, ESP32-only
68 #ifdef ARDUINO_ARCH_ESP32
70 #endif
71 
72 // Display
73 #ifdef USE_DISPLAY
76 #endif
77 
80 #include "components/pwm/ws_pwm.h"
83 
84 #if defined(USE_TINYUSB)
85 #include "provisioning/tinyusb/Wippersnapper_FS.h"
86 #endif
87 
88 #if defined(USE_LITTLEFS)
89 #include "provisioning/littlefs/WipperSnapper_LittleFS.h"
90 #endif
91 
92 #define WS_VERSION \
93  "1.0.0-alpha.79"
94 
95 // Reserved Adafruit IO MQTT topics
96 #define TOPIC_IO_THROTTLE "/throttle"
97 #define TOPIC_IO_ERRORS "/errors"
98 
99 // Reserved Wippersnapper topics
100 #define TOPIC_WS "/wprsnpr/"
101 #define TOPIC_INFO "/info/"
102 #define TOPIC_SIGNALS "/signals/"
103 #define TOPIC_I2C "/i2c"
104 #define MQTT_TOPIC_PIXELS_DEVICE \
105  "/signals/device/pixel"
106 #define MQTT_TOPIC_PIXELS_BROKER \
107  "/signals/broker/pixel"
108 
110 typedef enum {
111  WS_IDLE = 0, // Waiting for connection establishement
112  WS_NET_DISCONNECTED = 1, // Network disconnected
113  WS_DISCONNECTED = 2, // Disconnected from Adafruit IO
114  WS_FINGERPRINT_UNKOWN = 3, // Unknown WS_SSL_FINGERPRINT
115 
116  WS_NET_CONNECT_FAILED = 10, // Failed to connect to network
117  WS_CONNECT_FAILED = 11, // Failed to connect to Adafruit IO
118  WS_FINGERPRINT_INVALID = 12, // Unknown WS_SSL_FINGERPRINT
119  WS_AUTH_FAILED = 13, // Invalid Adafruit IO login credentials provided.
120  WS_SSID_INVALID =
121  14, // SSID is "" or otherwise invalid, connection not attempted
122 
123  WS_NET_CONNECTED = 20, // Connected to Adafruit IO
124  WS_CONNECTED = 21, // Connected to network
125  WS_CONNECTED_INSECURE = 22, // Insecurely (non-SSL) connected to network
126  WS_FINGERPRINT_UNSUPPORTED = 23, // Unsupported WS_SSL_FINGERPRINT
127  WS_FINGERPRINT_VALID = 24, // Valid WS_SSL_FINGERPRINT
128  WS_BOARD_DESC_INVALID = 25, // Unable to send board description
129  WS_BOARD_RESYNC_FAILED = 26 // Board sync failure
130 } ws_status_t;
131 
133 typedef enum {
134  WS_MQTT_CONNECTED = 0, // Connected
135  WS_MQTT_INVALID_PROTOCOL = 1, // Invalid mqtt protocol
136  WS_MQTT_INVALID_CID = 2, // Client id rejected
137  WS_MQTT_SERVICE_UNAVALIABLE = 3, // Malformed user/pass
138  WS_MQTT_INVALID_USER_PASS = 4, // Unauthorized access to resource
139  WS_MQTT_UNAUTHORIZED = 5, // MQTT service unavailable
140  WS_MQTT_THROTTLED = 6, // Account throttled
141  WS_MQTT_BANNED = 7 // Account banned
143 
145 typedef enum {
146  WS_BOARD_DEF_IDLE,
147  WS_BOARD_DEF_SEND_FAILED,
148  WS_BOARD_DEF_SENT,
149  WS_BOARD_DEF_OK,
150  WS_BOARD_DEF_INVALID,
151  WS_BOARD_DEF_UNSPECIFIED
153 
155 typedef enum {
156  FSM_NET_IDLE,
157  FSM_NET_CONNECTED,
158  FSM_MQTT_CONNECTED,
159  FSM_NET_CHECK_MQTT,
160  FSM_NET_CHECK_NETWORK,
161  FSM_NET_ESTABLISH_NETWORK,
162  FSM_NET_ESTABLISH_MQTT,
163 } fsm_net_t;
164 
165 #define WS_WDT_TIMEOUT 60000
166 /* MQTT Configuration */
167 #define WS_KEEPALIVE_INTERVAL_MS \
168  5000
169 
170 #define WS_MQTT_MAX_PAYLOAD_SIZE \
171  512
172 
175 class Wippersnapper_FS;
176 class WipperSnapper_LittleFS;
177 #ifdef USE_DISPLAY
178 class ws_display_driver;
180 #endif
181 #ifdef ARDUINO_ARCH_ESP32
182 class ws_ledc;
183 #endif
185 class ws_servo;
186 class ws_pwm;
187 class ws_ds18x20;
188 class ws_pixels;
189 class ws_uart;
190 
191 /**************************************************************************/
196 /**************************************************************************/
197 class Wippersnapper {
198 public:
199  Wippersnapper();
200  virtual ~Wippersnapper();
201 
202  void provision();
203 
204  bool lockStatusNeoPixel;
205  bool lockStatusDotStar;
206  bool lockStatusLED;
211  virtual void set_user_key();
212  virtual void set_ssid_pass(const char *ssid, const char *ssidPassword);
213  virtual void set_ssid_pass();
214  virtual bool check_valid_ssid();
215 
216  virtual void _connect();
217  virtual void _disconnect();
218  void connect();
219  void disconnect();
220 
221  virtual void getMacAddr();
222  virtual void setupMQTTClient(const char *clientID);
223 
224  virtual ws_status_t networkStatus();
226 
227  bool generateDeviceUID();
228  bool generateWSTopics();
229  bool generateWSErrorTopics();
230 
231  // Registration API
232  bool registerBoard();
234  void decodeRegistrationResp(char *data, uint16_t len);
235  void pollRegistrationResp();
236  // Configuration API
238 
239  // run() loop
240  ws_status_t run();
241  void processPackets();
242  void publish(const char *topic, uint8_t *payload, uint16_t bLen,
243  uint8_t qos = 0);
244 
245  // Networking helpers
246  void pingBroker();
247  void runNetFSM();
248 
249  // WDT helpers
250  void enableWDT(int timeoutMS = 0);
251  void feedWDT();
252 
253  // Error handling helpers
254  void haltError(String error,
255  ws_led_status_t ledStatusColor = WS_LED_STATUS_ERROR_RUNTIME);
256  void errorWriteHang(String error);
257 
258  // MQTT topic callbacks //
259  // Decodes a signal message
260  bool decodeSignalMsg(
261  wippersnapper_signal_v1_CreateSignalRequest *encodedSignalMsg);
262 
263  // Encodes a pin event message
264  bool
265  encodePinEvent(wippersnapper_signal_v1_CreateSignalRequest *outgoingSignalMsg,
266  uint8_t pinName, int pinVal);
267 
268  // Pin configure message
269  bool configureDigitalPinReq(wippersnapper_pin_v1_ConfigurePinRequest *pinMsg);
270  bool configAnalogInPinReq(wippersnapper_pin_v1_ConfigurePinRequest *pinMsg);
271 
272  // I2C
273  std::vector<WipperSnapper_Component_I2C *>
274  i2cComponents;
276  NULL;
278  NULL;
279  bool _isI2CPort0Init =
280  false;
281  bool _isI2CPort1Init =
282  false;
283 
286  uint8_t
289  uint16_t bufSize;
292  WS_BOARD_DEF_IDLE;
293 
294  // TODO: We really should look at making these static definitions, not dynamic
295  // to free up space on the heap
298  Wippersnapper_FS *_fileSystem;
299  WipperSnapper_LittleFS
301 #ifdef USE_DISPLAY
302  ws_display_driver *_display = nullptr;
304  nullptr;
305 #endif
312  // TODO: does this really need to be global?
313  uint8_t _macAddr[6];
314  char sUID[13];
315  const char *_boardId;
316  Adafruit_MQTT *_mqtt;
318  secretsConfig _config;
320  // TODO: Does this need to be within this class?
323  char *_topic_description = NULL;
324  char *_topic_signal_device = NULL;
325  char *_topic_signal_i2c_brkr = NULL;
329  char *_topic_signal_servo_brkr = NULL;
331  char *_topic_signal_servo_device = NULL;
333  char *_topic_signal_pwm_brkr =
334  NULL;
336  NULL;
337  char *_topic_signal_ds18_brkr = NULL;
339  char *_topic_signal_ds18_device = NULL;
341  char *_topic_signal_pixels_brkr = NULL;
343  char *_topic_signal_uart_brkr = NULL;
346  wippersnapper_signal_v1_CreateSignalRequest
348  wippersnapper_signal_v1_I2CRequest msgSignalI2C =
349  wippersnapper_signal_v1_I2CRequest_init_zero;
352  // ds signal msg
353  wippersnapper_signal_v1_Ds18x20Request msgSignalDS =
354  wippersnapper_signal_v1_Ds18x20Request_init_zero;
355 
357  // servo message
358  wippersnapper_signal_v1_ServoRequest
359  msgServo;
360  wippersnapper_signal_v1_PWMRequest msgPWM =
361  wippersnapper_signal_v1_PWMRequest_init_zero;
364  // pixels signal message
365  wippersnapper_signal_v1_PixelsRequest
366  msgPixels;
367 
368  wippersnapper_signal_v1_UARTRequest
370 
371  char *throttleMessage;
375  bool pinCfgCompleted = false;
377 // enable LEDC if esp32
378 #ifdef ARDUINO_ARCH_ESP32
379  ws_ledc *_ledc = nullptr;
380 #endif
381 
382 private:
383  void _init();
384 
385 protected:
386  ws_status_t _status = WS_IDLE;
387  uint32_t _last_mqtt_connect = 0;
389  uint32_t _prv_ping = 0;
391  uint32_t _prvKATBlink = 0;
394  // Device information
395  const char *_deviceId;
396  char *_device_uid;
398  // MQTT topics
400  NULL;
406  NULL;
409  char *_topic_signal_brkr = NULL;
410  char *_err_topic = NULL;
411  char *_throttle_topic = NULL;
413  Adafruit_MQTT_Subscribe *_topic_description_sub;
415  Adafruit_MQTT_Publish *_topic_signal_device_pub;
417  Adafruit_MQTT_Subscribe *_topic_signal_brkr_sub;
419  Adafruit_MQTT_Subscribe
421  Adafruit_MQTT_Subscribe
423  Adafruit_MQTT_Subscribe
425  Adafruit_MQTT_Subscribe
427  Adafruit_MQTT_Subscribe
429  Adafruit_MQTT_Subscribe
432  Adafruit_MQTT_Subscribe
434  Adafruit_MQTT_Subscribe
435  *_throttle_sub;
437  wippersnapper_signal_v1_CreateSignalRequest
439 };
440 extern Wippersnapper WS;
442 #endif // ADAFRUIT_WIPPERSNAPPER_H
Class that provides an interface with the I2C bus.
Definition: WipperSnapper_I2C.h:77
char * _topic_signal_pixels_brkr
Definition: Wippersnapper.h:344
wippersnapper_signal_v1_PWMRequest msgPWM
Definition: Wippersnapper.h:363