Blynk library for embedded hardware. Works with Arduino, ESP8266, Raspberry Pi, Intel Edison/Galileo, LinkIt ONE, Particle Core/Photon, Energia, ARM mbed, etc. http://www.blynk.cc/

Dependents:   Blynk_RBL_BLE_Nano Blynk_MicroBit Blynk_Serial Blynk_RBL_BLE_Nano

Committer:
vshymanskyy
Date:
Fri Jan 26 22:18:19 2018 +0000
Revision:
22:e1d3971fd902
Parent:
18:c328c1a97f90
Fix BlynkSystemInit for MBED

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vshymanskyy 0:58b20b438383 1 /**
vshymanskyy 0:58b20b438383 2 * @file BlynkApi.h
vshymanskyy 0:58b20b438383 3 * @author Volodymyr Shymanskyy
vshymanskyy 0:58b20b438383 4 * @license This project is released under the MIT License (MIT)
vshymanskyy 0:58b20b438383 5 * @copyright Copyright (c) 2015 Volodymyr Shymanskyy
vshymanskyy 0:58b20b438383 6 * @date Jan 2015
vshymanskyy 0:58b20b438383 7 * @brief High-level functions
vshymanskyy 0:58b20b438383 8 *
vshymanskyy 0:58b20b438383 9 */
vshymanskyy 0:58b20b438383 10
vshymanskyy 0:58b20b438383 11 #ifndef BlynkApi_h
vshymanskyy 0:58b20b438383 12 #define BlynkApi_h
vshymanskyy 0:58b20b438383 13
vshymanskyy 0:58b20b438383 14 #include <Blynk/BlynkConfig.h>
vshymanskyy 0:58b20b438383 15 #include <Blynk/BlynkDebug.h>
vshymanskyy 0:58b20b438383 16 #include <Blynk/BlynkParam.h>
Volodymyr Shymanskyy 13:ed6276c0afb7 17 #include <Blynk/BlynkTimer.h>
vshymanskyy 0:58b20b438383 18 #include <Blynk/BlynkHandlers.h>
vshymanskyy 0:58b20b438383 19 #include <Blynk/BlynkProtocolDefs.h>
vshymanskyy 0:58b20b438383 20
Volodymyr Shymanskyy 18:c328c1a97f90 21 #if defined(BLYNK_EXPERIMENTAL)
Volodymyr Shymanskyy 18:c328c1a97f90 22 #include <Blynk/BlynkEveryN.h>
Volodymyr Shymanskyy 18:c328c1a97f90 23 #endif
Volodymyr Shymanskyy 18:c328c1a97f90 24
vshymanskyy 0:58b20b438383 25 /**
vshymanskyy 0:58b20b438383 26 * Represents high-level functions of Blynk
vshymanskyy 0:58b20b438383 27 */
vshymanskyy 22:e1d3971fd902 28
vshymanskyy 0:58b20b438383 29 template <class Proto>
vshymanskyy 0:58b20b438383 30 class BlynkApi
vshymanskyy 0:58b20b438383 31 {
vshymanskyy 0:58b20b438383 32 public:
vshymanskyy 0:58b20b438383 33 BlynkApi() {
vshymanskyy 22:e1d3971fd902 34 BlynkSystemInit();
vshymanskyy 0:58b20b438383 35 }
vshymanskyy 0:58b20b438383 36
vshymanskyy 0:58b20b438383 37 #ifdef DOXYGEN // These API here are only for the documentation
vshymanskyy 0:58b20b438383 38
vshymanskyy 0:58b20b438383 39 /**
vshymanskyy 0:58b20b438383 40 * Connects to the server.
vshymanskyy 0:58b20b438383 41 * Blocks until connected or timeout happens.
vshymanskyy 0:58b20b438383 42 * May take less or more then timeout value.
vshymanskyy 0:58b20b438383 43 *
vshymanskyy 0:58b20b438383 44 * @param timeout Connection timeout
vshymanskyy 0:58b20b438383 45 * @returns True if connected to the server
vshymanskyy 0:58b20b438383 46 */
vshymanskyy 0:58b20b438383 47 bool connect(unsigned long timeout = BLYNK_TIMEOUT_MS*3);
vshymanskyy 0:58b20b438383 48
vshymanskyy 0:58b20b438383 49 /**
vshymanskyy 0:58b20b438383 50 * Disconnects from the server.
vshymanskyy 0:58b20b438383 51 * It will not try to reconnect, until connect() is called
vshymanskyy 0:58b20b438383 52 */
vshymanskyy 0:58b20b438383 53 void disconnect();
vshymanskyy 0:58b20b438383 54
vshymanskyy 0:58b20b438383 55 /**
vshymanskyy 0:58b20b438383 56 * @returns True if connected to the server
vshymanskyy 0:58b20b438383 57 */
vshymanskyy 0:58b20b438383 58 bool connected();
vshymanskyy 0:58b20b438383 59
vshymanskyy 0:58b20b438383 60 /**
vshymanskyy 0:58b20b438383 61 * Performs Blynk-related housekeeping
vshymanskyy 0:58b20b438383 62 * and processes incoming commands
vshymanskyy 0:58b20b438383 63 *
vshymanskyy 0:58b20b438383 64 * @param available True if there is incoming data to process
vshymanskyy 0:58b20b438383 65 * Only used when user manages connection manually.
vshymanskyy 0:58b20b438383 66 */
vshymanskyy 0:58b20b438383 67 bool run(bool available = false);
vshymanskyy 0:58b20b438383 68
vshymanskyy 0:58b20b438383 69 #endif // DOXYGEN
vshymanskyy 0:58b20b438383 70
vshymanskyy 0:58b20b438383 71 /**
vshymanskyy 0:58b20b438383 72 * Sends value to a Virtual Pin
vshymanskyy 0:58b20b438383 73 *
vshymanskyy 0:58b20b438383 74 * @param pin Virtual Pin number
vshymanskyy 0:58b20b438383 75 * @param data Value to be sent
vshymanskyy 0:58b20b438383 76 */
Volodymyr Shymanskyy 9:7369ec77a3ea 77 template <typename... Args>
Volodymyr Shymanskyy 9:7369ec77a3ea 78 void virtualWrite(int pin, Args... values) {
vshymanskyy 0:58b20b438383 79 char mem[BLYNK_MAX_SENDBYTES];
vshymanskyy 0:58b20b438383 80 BlynkParam cmd(mem, 0, sizeof(mem));
vshymanskyy 0:58b20b438383 81 cmd.add("vw");
vshymanskyy 0:58b20b438383 82 cmd.add(pin);
Volodymyr Shymanskyy 9:7369ec77a3ea 83 cmd.add_multi(values...);
vshymanskyy 0:58b20b438383 84 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_HARDWARE, 0, cmd.getBuffer(), cmd.getLength()-1);
vshymanskyy 0:58b20b438383 85 }
vshymanskyy 0:58b20b438383 86
vshymanskyy 0:58b20b438383 87 /**
vshymanskyy 0:58b20b438383 88 * Sends buffer to a Virtual Pin
vshymanskyy 0:58b20b438383 89 *
vshymanskyy 0:58b20b438383 90 * @param pin Virtual Pin number
vshymanskyy 0:58b20b438383 91 * @param buff Data buffer
vshymanskyy 0:58b20b438383 92 * @param len Length of data
vshymanskyy 0:58b20b438383 93 */
vshymanskyy 0:58b20b438383 94 void virtualWriteBinary(int pin, const void* buff, size_t len) {
vshymanskyy 0:58b20b438383 95 char mem[8];
vshymanskyy 0:58b20b438383 96 BlynkParam cmd(mem, 0, sizeof(mem));
vshymanskyy 0:58b20b438383 97 cmd.add("vw");
vshymanskyy 0:58b20b438383 98 cmd.add(pin);
vshymanskyy 0:58b20b438383 99 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_HARDWARE, 0, cmd.getBuffer(), cmd.getLength(), buff, len);
vshymanskyy 0:58b20b438383 100 }
vshymanskyy 0:58b20b438383 101
vshymanskyy 0:58b20b438383 102 /**
vshymanskyy 0:58b20b438383 103 * Sends BlynkParam to a Virtual Pin
vshymanskyy 0:58b20b438383 104 *
vshymanskyy 0:58b20b438383 105 * @param pin Virtual Pin number
vshymanskyy 0:58b20b438383 106 * @param param
vshymanskyy 0:58b20b438383 107 */
vshymanskyy 0:58b20b438383 108 void virtualWrite(int pin, const BlynkParam& param) {
vshymanskyy 0:58b20b438383 109 virtualWriteBinary(pin, param.getBuffer(), param.getLength());
vshymanskyy 0:58b20b438383 110 }
vshymanskyy 0:58b20b438383 111
Volodymyr Shymanskyy 9:7369ec77a3ea 112 void virtualWrite(int pin, const BlynkParamAllocated& param) {
Volodymyr Shymanskyy 9:7369ec77a3ea 113 virtualWriteBinary(pin, param.getBuffer(), param.getLength());
Volodymyr Shymanskyy 9:7369ec77a3ea 114 }
Volodymyr Shymanskyy 9:7369ec77a3ea 115
vshymanskyy 0:58b20b438383 116 /**
vshymanskyy 0:58b20b438383 117 * Requests Server to re-send current values for all widgets.
vshymanskyy 0:58b20b438383 118 */
vshymanskyy 0:58b20b438383 119 void syncAll() {
vshymanskyy 0:58b20b438383 120 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_HARDWARE_SYNC);
vshymanskyy 0:58b20b438383 121 }
vshymanskyy 0:58b20b438383 122
vshymanskyy 0:58b20b438383 123 /**
Volodymyr Shymanskyy 10:c241e4227173 124 * Sends internal command
Volodymyr Shymanskyy 10:c241e4227173 125 */
Volodymyr Shymanskyy 10:c241e4227173 126 template <typename... Args>
Volodymyr Shymanskyy 10:c241e4227173 127 void sendInternal(Args... params) {
Volodymyr Shymanskyy 10:c241e4227173 128 char mem[BLYNK_MAX_SENDBYTES];
Volodymyr Shymanskyy 10:c241e4227173 129 BlynkParam cmd(mem, 0, sizeof(mem));
Volodymyr Shymanskyy 10:c241e4227173 130 cmd.add_multi(params...);
Volodymyr Shymanskyy 10:c241e4227173 131 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_INTERNAL, 0, cmd.getBuffer(), cmd.getLength()-1);
Volodymyr Shymanskyy 10:c241e4227173 132 }
Volodymyr Shymanskyy 10:c241e4227173 133
Volodymyr Shymanskyy 10:c241e4227173 134 /**
vshymanskyy 0:58b20b438383 135 * Requests App or Server to re-send current value of a Virtual Pin.
vshymanskyy 0:58b20b438383 136 * This will probably cause user-defined BLYNK_WRITE handler to be called.
vshymanskyy 0:58b20b438383 137 *
vshymanskyy 0:58b20b438383 138 * @param pin Virtual Pin number
vshymanskyy 0:58b20b438383 139 */
Volodymyr Shymanskyy 9:7369ec77a3ea 140 template <typename... Args>
Volodymyr Shymanskyy 9:7369ec77a3ea 141 void syncVirtual(Args... pins) {
Volodymyr Shymanskyy 9:7369ec77a3ea 142 char mem[BLYNK_MAX_SENDBYTES];
vshymanskyy 0:58b20b438383 143 BlynkParam cmd(mem, 0, sizeof(mem));
vshymanskyy 0:58b20b438383 144 cmd.add("vr");
Volodymyr Shymanskyy 9:7369ec77a3ea 145 cmd.add_multi(pins...);
vshymanskyy 0:58b20b438383 146 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_HARDWARE_SYNC, 0, cmd.getBuffer(), cmd.getLength()-1);
vshymanskyy 0:58b20b438383 147 }
vshymanskyy 0:58b20b438383 148
vshymanskyy 0:58b20b438383 149 /**
vshymanskyy 0:58b20b438383 150 * Tweets a message
vshymanskyy 0:58b20b438383 151 *
vshymanskyy 0:58b20b438383 152 * @param msg Text of the message
vshymanskyy 0:58b20b438383 153 */
vshymanskyy 0:58b20b438383 154 template<typename T>
vshymanskyy 0:58b20b438383 155 void tweet(const T& msg) {
vshymanskyy 0:58b20b438383 156 char mem[BLYNK_MAX_SENDBYTES];
vshymanskyy 0:58b20b438383 157 BlynkParam cmd(mem, 0, sizeof(mem));
vshymanskyy 0:58b20b438383 158 cmd.add(msg);
vshymanskyy 0:58b20b438383 159 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_TWEET, 0, cmd.getBuffer(), cmd.getLength()-1);
vshymanskyy 0:58b20b438383 160 }
vshymanskyy 0:58b20b438383 161
vshymanskyy 0:58b20b438383 162 /**
vshymanskyy 0:58b20b438383 163 * Sends a push notification to the App
vshymanskyy 0:58b20b438383 164 *
vshymanskyy 0:58b20b438383 165 * @param msg Text of the message
vshymanskyy 0:58b20b438383 166 */
vshymanskyy 0:58b20b438383 167 template<typename T>
vshymanskyy 0:58b20b438383 168 void notify(const T& msg) {
vshymanskyy 0:58b20b438383 169 char mem[BLYNK_MAX_SENDBYTES];
vshymanskyy 0:58b20b438383 170 BlynkParam cmd(mem, 0, sizeof(mem));
vshymanskyy 0:58b20b438383 171 cmd.add(msg);
vshymanskyy 0:58b20b438383 172 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_NOTIFY, 0, cmd.getBuffer(), cmd.getLength()-1);
vshymanskyy 0:58b20b438383 173 }
vshymanskyy 0:58b20b438383 174
vshymanskyy 0:58b20b438383 175 /**
vshymanskyy 0:58b20b438383 176 * Sends an SMS
vshymanskyy 0:58b20b438383 177 *
vshymanskyy 0:58b20b438383 178 * @param msg Text of the message
vshymanskyy 0:58b20b438383 179 */
vshymanskyy 0:58b20b438383 180 template<typename T>
vshymanskyy 0:58b20b438383 181 void sms(const T& msg) {
vshymanskyy 0:58b20b438383 182 char mem[BLYNK_MAX_SENDBYTES];
vshymanskyy 0:58b20b438383 183 BlynkParam cmd(mem, 0, sizeof(mem));
vshymanskyy 0:58b20b438383 184 cmd.add(msg);
vshymanskyy 0:58b20b438383 185 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_SMS, 0, cmd.getBuffer(), cmd.getLength()-1);
vshymanskyy 0:58b20b438383 186 }
vshymanskyy 0:58b20b438383 187
vshymanskyy 0:58b20b438383 188 /**
vshymanskyy 0:58b20b438383 189 * Sends an email message
vshymanskyy 0:58b20b438383 190 *
vshymanskyy 0:58b20b438383 191 * @param email Email to send to
vshymanskyy 0:58b20b438383 192 * @param subject Subject of message
vshymanskyy 0:58b20b438383 193 * @param msg Text of the message
vshymanskyy 0:58b20b438383 194 */
vshymanskyy 0:58b20b438383 195 template <typename T1, typename T2>
vshymanskyy 0:58b20b438383 196 void email(const char* email, const T1& subject, const T2& msg) {
vshymanskyy 0:58b20b438383 197 char mem[BLYNK_MAX_SENDBYTES];
vshymanskyy 0:58b20b438383 198 BlynkParam cmd(mem, 0, sizeof(mem));
vshymanskyy 0:58b20b438383 199 cmd.add(email);
vshymanskyy 0:58b20b438383 200 cmd.add(subject);
vshymanskyy 0:58b20b438383 201 cmd.add(msg);
vshymanskyy 0:58b20b438383 202 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_EMAIL, 0, cmd.getBuffer(), cmd.getLength()-1);
vshymanskyy 0:58b20b438383 203 }
vshymanskyy 0:58b20b438383 204
Volodymyr Shymanskyy 2:c5b857d4f9f6 205 /**
Volodymyr Shymanskyy 2:c5b857d4f9f6 206 * Sends an email message
Volodymyr Shymanskyy 2:c5b857d4f9f6 207 *
Volodymyr Shymanskyy 2:c5b857d4f9f6 208 * @param subject Subject of message
Volodymyr Shymanskyy 2:c5b857d4f9f6 209 * @param msg Text of the message
Volodymyr Shymanskyy 2:c5b857d4f9f6 210 */
Volodymyr Shymanskyy 2:c5b857d4f9f6 211 template <typename T1, typename T2>
Volodymyr Shymanskyy 2:c5b857d4f9f6 212 void email(const T1& subject, const T2& msg) {
Volodymyr Shymanskyy 2:c5b857d4f9f6 213 char mem[BLYNK_MAX_SENDBYTES];
Volodymyr Shymanskyy 2:c5b857d4f9f6 214 BlynkParam cmd(mem, 0, sizeof(mem));
Volodymyr Shymanskyy 2:c5b857d4f9f6 215 cmd.add(subject);
Volodymyr Shymanskyy 2:c5b857d4f9f6 216 cmd.add(msg);
Volodymyr Shymanskyy 2:c5b857d4f9f6 217 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_EMAIL, 0, cmd.getBuffer(), cmd.getLength()-1);
Volodymyr Shymanskyy 2:c5b857d4f9f6 218 }
Volodymyr Shymanskyy 2:c5b857d4f9f6 219
Volodymyr Shymanskyy 7:8879692d4e6c 220 /**
Volodymyr Shymanskyy 7:8879692d4e6c 221 * Sets property of a Widget
Volodymyr Shymanskyy 7:8879692d4e6c 222 *
Volodymyr Shymanskyy 7:8879692d4e6c 223 * @experimental
Volodymyr Shymanskyy 7:8879692d4e6c 224 *
Volodymyr Shymanskyy 7:8879692d4e6c 225 * @param pin Virtual Pin number
Volodymyr Shymanskyy 7:8879692d4e6c 226 * @param property Property name ("label", "labels", "color", ...)
Volodymyr Shymanskyy 7:8879692d4e6c 227 * @param value Property value
Volodymyr Shymanskyy 7:8879692d4e6c 228 */
Volodymyr Shymanskyy 9:7369ec77a3ea 229 template <typename T, typename... Args>
Volodymyr Shymanskyy 9:7369ec77a3ea 230 void setProperty(int pin, const T& property, Args... values) {
Volodymyr Shymanskyy 7:8879692d4e6c 231 char mem[BLYNK_MAX_SENDBYTES];
Volodymyr Shymanskyy 7:8879692d4e6c 232 BlynkParam cmd(mem, 0, sizeof(mem));
Volodymyr Shymanskyy 7:8879692d4e6c 233 cmd.add(pin);
Volodymyr Shymanskyy 7:8879692d4e6c 234 cmd.add(property);
Volodymyr Shymanskyy 9:7369ec77a3ea 235 cmd.add_multi(values...);
Volodymyr Shymanskyy 7:8879692d4e6c 236 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_PROPERTY, 0, cmd.getBuffer(), cmd.getLength()-1);
Volodymyr Shymanskyy 7:8879692d4e6c 237 }
Volodymyr Shymanskyy 7:8879692d4e6c 238
Volodymyr Shymanskyy 7:8879692d4e6c 239 template <typename T>
Volodymyr Shymanskyy 7:8879692d4e6c 240 void setProperty(int pin, const T& property, const BlynkParam& param) {
Volodymyr Shymanskyy 7:8879692d4e6c 241 char mem[32];
Volodymyr Shymanskyy 7:8879692d4e6c 242 BlynkParam cmd(mem, 0, sizeof(mem));
Volodymyr Shymanskyy 7:8879692d4e6c 243 cmd.add(pin);
Volodymyr Shymanskyy 7:8879692d4e6c 244 cmd.add(property);
Volodymyr Shymanskyy 7:8879692d4e6c 245 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_PROPERTY, 0, cmd.getBuffer(), cmd.getLength(), param.getBuffer(), param.getLength());
Volodymyr Shymanskyy 7:8879692d4e6c 246 }
Volodymyr Shymanskyy 7:8879692d4e6c 247
Volodymyr Shymanskyy 7:8879692d4e6c 248 template <typename T>
Volodymyr Shymanskyy 7:8879692d4e6c 249 void setProperty(int pin, const T& property, const BlynkParamAllocated& param) {
Volodymyr Shymanskyy 7:8879692d4e6c 250 char mem[32];
Volodymyr Shymanskyy 7:8879692d4e6c 251 BlynkParam cmd(mem, 0, sizeof(mem));
Volodymyr Shymanskyy 7:8879692d4e6c 252 cmd.add(pin);
Volodymyr Shymanskyy 7:8879692d4e6c 253 cmd.add(property);
Volodymyr Shymanskyy 7:8879692d4e6c 254 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_PROPERTY, 0, cmd.getBuffer(), cmd.getLength(), param.getBuffer(), param.getLength());
Volodymyr Shymanskyy 7:8879692d4e6c 255 }
Volodymyr Shymanskyy 7:8879692d4e6c 256
Volodymyr Shymanskyy 14:76d8fd871a4d 257 template <typename NAME>
Volodymyr Shymanskyy 14:76d8fd871a4d 258 void logEvent(const NAME& event_name) {
Volodymyr Shymanskyy 14:76d8fd871a4d 259 char mem[BLYNK_MAX_SENDBYTES];
Volodymyr Shymanskyy 14:76d8fd871a4d 260 BlynkParam cmd(mem, 0, sizeof(mem));
Volodymyr Shymanskyy 14:76d8fd871a4d 261 cmd.add(event_name);
Volodymyr Shymanskyy 14:76d8fd871a4d 262 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_EVENT_LOG, 0, cmd.getBuffer(), cmd.getLength());
Volodymyr Shymanskyy 14:76d8fd871a4d 263 }
Volodymyr Shymanskyy 14:76d8fd871a4d 264
Volodymyr Shymanskyy 14:76d8fd871a4d 265 template <typename NAME, typename DESCR>
Volodymyr Shymanskyy 14:76d8fd871a4d 266 void logEvent(const NAME& event_name, const DESCR& description) {
Volodymyr Shymanskyy 14:76d8fd871a4d 267 char mem[BLYNK_MAX_SENDBYTES];
Volodymyr Shymanskyy 14:76d8fd871a4d 268 BlynkParam cmd(mem, 0, sizeof(mem));
Volodymyr Shymanskyy 14:76d8fd871a4d 269 cmd.add(event_name);
Volodymyr Shymanskyy 14:76d8fd871a4d 270 cmd.add(description);
Volodymyr Shymanskyy 14:76d8fd871a4d 271 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_EVENT_LOG, 0, cmd.getBuffer(), cmd.getLength());
Volodymyr Shymanskyy 14:76d8fd871a4d 272 }
Volodymyr Shymanskyy 14:76d8fd871a4d 273
vshymanskyy 0:58b20b438383 274 #if defined(BLYNK_EXPERIMENTAL)
vshymanskyy 0:58b20b438383 275 // Attention!
vshymanskyy 0:58b20b438383 276 // Every function in this section may be changed, removed or renamed.
vshymanskyy 0:58b20b438383 277
vshymanskyy 0:58b20b438383 278 /**
vshymanskyy 0:58b20b438383 279 * Refreshes value of a widget by running
vshymanskyy 0:58b20b438383 280 * user-defined BLYNK_READ handler of a pin.
vshymanskyy 0:58b20b438383 281 *
vshymanskyy 0:58b20b438383 282 * @experimental
vshymanskyy 0:58b20b438383 283 *
vshymanskyy 0:58b20b438383 284 * @param pin Virtual Pin number
vshymanskyy 0:58b20b438383 285 */
vshymanskyy 0:58b20b438383 286 void refresh(int pin) {
vshymanskyy 0:58b20b438383 287 if (WidgetReadHandler handler = GetReadHandler(pin)) {
vshymanskyy 0:58b20b438383 288 BlynkReq req = { 0, BLYNK_SUCCESS, (uint8_t)pin };
vshymanskyy 0:58b20b438383 289 handler(req);
vshymanskyy 0:58b20b438383 290 }
vshymanskyy 0:58b20b438383 291 }
vshymanskyy 0:58b20b438383 292
vshymanskyy 0:58b20b438383 293 /**
vshymanskyy 0:58b20b438383 294 * Delays for N milliseconds, handling server communication in background.
vshymanskyy 0:58b20b438383 295 *
vshymanskyy 0:58b20b438383 296 * @experimental
vshymanskyy 0:58b20b438383 297 * @warning Should be used very carefully, especially on platforms with small RAM.
vshymanskyy 0:58b20b438383 298 *
vshymanskyy 0:58b20b438383 299 * @param ms Milliseconds to wait
vshymanskyy 0:58b20b438383 300 */
vshymanskyy 0:58b20b438383 301 void delay(unsigned long ms) {
vshymanskyy 0:58b20b438383 302 uint16_t start = (uint16_t)micros();
vshymanskyy 0:58b20b438383 303 while (ms > 0) {
vshymanskyy 0:58b20b438383 304 static_cast<Proto*>(this)->run();
vshymanskyy 0:58b20b438383 305 #if !defined(BLYNK_NO_YIELD)
vshymanskyy 0:58b20b438383 306 yield();
vshymanskyy 0:58b20b438383 307 #endif
vshymanskyy 0:58b20b438383 308 if (((uint16_t)micros() - start) >= 1000) {
vshymanskyy 0:58b20b438383 309 ms--;
vshymanskyy 0:58b20b438383 310 start += 1000;
vshymanskyy 0:58b20b438383 311 }
vshymanskyy 0:58b20b438383 312 }
vshymanskyy 0:58b20b438383 313 }
vshymanskyy 0:58b20b438383 314
vshymanskyy 0:58b20b438383 315 #endif
vshymanskyy 0:58b20b438383 316
vshymanskyy 0:58b20b438383 317 protected:
vshymanskyy 0:58b20b438383 318 void processCmd(const void* buff, size_t len);
vshymanskyy 0:58b20b438383 319 void sendInfo();
vshymanskyy 0:58b20b438383 320 };
vshymanskyy 0:58b20b438383 321
vshymanskyy 0:58b20b438383 322
vshymanskyy 0:58b20b438383 323 #endif