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:
Volodymyr Shymanskyy
Date:
Wed Oct 12 09:18:39 2016 +0300
Revision:
7:8879692d4e6c
Parent:
2:c5b857d4f9f6
Child:
9:7369ec77a3ea
Update library

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