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
Diff: Blynk/BlynkHandlers.h
- Revision:
- 0:58b20b438383
- Child:
- 3:31e4b850b126
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Blynk/BlynkHandlers.h Sat May 07 08:02:50 2016 +0000 @@ -0,0 +1,218 @@ +/** + * @file BlynkHandlers.h + * @author Volodymyr Shymanskyy + * @license This project is released under the MIT License (MIT) + * @copyright Copyright (c) 2015 Volodymyr Shymanskyy + * @date Jan 2015 + * @brief Handlers for virtual pin operations + * + */ + +#ifndef BlynkHandlers_h +#define BlynkHandlers_h + +#include <Blynk/BlynkConfig.h> +#include <Blynk/BlynkParam.h> + +// Helper macro + +#define V0 0 +#define V1 1 +#define V2 2 +#define V3 3 +#define V4 4 +#define V5 5 +#define V6 6 +#define V7 7 +#define V8 8 +#define V9 9 +#define V10 10 +#define V11 11 +#define V12 12 +#define V13 13 +#define V14 14 +#define V15 15 +#define V16 16 +#define V17 17 +#define V18 18 +#define V19 19 +#define V20 20 +#define V21 21 +#define V22 22 +#define V23 23 +#define V24 24 +#define V25 25 +#define V26 26 +#define V27 27 +#define V28 28 +#define V29 29 +#define V30 30 +#define V31 31 + +#define BLYNK_CONCAT(a, b) a ## b +#define BLYNK_CONCAT2(a, b) BLYNK_CONCAT(a, b) + +// Initial syntax: +#define BLYNK_WRITE_2(pin) \ + void BlynkWidgetWrite ## pin (BlynkReq& request, const BlynkParam& param) + +#define BLYNK_READ_2(pin) \ + void BlynkWidgetRead ## pin (BlynkReq& request) + +#define BLYNK_WRITE_DEFAULT() BLYNK_WRITE_2(Default) +#define BLYNK_READ_DEFAULT() BLYNK_READ_2(Default) + +#define BLYNK_WRITE(pin) BLYNK_WRITE_2(pin) +#define BLYNK_READ(pin) BLYNK_READ_2(pin) + +// New, more readable syntax: +#define BLYNK_IN_2(pin) \ + void BlynkWidgetWrite ## pin (BlynkReq& request, const BlynkParam& getValue) + +#define BLYNK_OUT_2(pin) \ + void BlynkWidgetRead ## pin (BlynkReq& request) + +#define BLYNK_IN_DEFAULT() BLYNK_IN_2(Default) +#define BLYNK_OUT_DEFAULT() BLYNK_OUT_2(Default) + +#define BLYNK_IN(pin) BLYNK_IN_2(pin) +#define BLYNK_OUT(pin) BLYNK_OUT_2(pin) + +// Additional handlers +#define BLYNK_CONNECTED() void BlynkOnConnected() +#define BLYNK_DISCONNECTED() void BlynkOnDisconnected() + +// Advanced functions + +class BlynkAttachWidgetHelper { +public: + template<typename T> + explicit BlynkAttachWidgetHelper(T& widget, uint8_t vPin) { + widget.setVPin(vPin); + } +}; + +// Could use __attribute__ ((constructor)), but hope for better portability +#define BLYNK_ATTACH_WIDGET(widget, pin) \ + static BlynkAttachWidgetHelper BLYNK_CONCAT2(blnk_widget_helper_, __COUNTER__)((widget), (pin)); \ + BLYNK_WRITE(pin) { (widget).onWrite(request, param); } + +#define BLYNK_VAR_INT(name, pin) int name; \ + BLYNK_WRITE(pin) { name = param.asInt(); } \ + BLYNK_READ(pin) { Blynk.virtualWrite(pin, name); } + +#define BLYNK_VAR_LONG(name, pin) long name; \ + BLYNK_WRITE(pin) { name = param.asLong(); } \ + BLYNK_READ(pin) { Blynk.virtualWrite(pin, name); } + +#ifndef BLYNK_NO_FLOAT +#define BLYNK_VAR_DOUBLE(name, pin) double name; \ + BLYNK_WRITE(pin) { name = param.asDouble(); } \ + BLYNK_READ(pin) { Blynk.virtualWrite(pin, name); } +#endif + +#ifdef ARDUINO +#define BLYNK_VAR_STRING(name, pin) String name; \ + BLYNK_WRITE(pin) { name = param.asStr(); } \ + BLYNK_READ(pin) { Blynk.virtualWrite(pin, name); } +#endif + +// Default read/write handlers (you can redefine them in your code) +#ifdef __cplusplus +extern "C" { +#endif + +struct BlynkReq +{ + uint8_t pin; +}; + +typedef void (*WidgetReadHandler)(BlynkReq& request); +typedef void (*WidgetWriteHandler)(BlynkReq& request, const BlynkParam& param); + +WidgetReadHandler GetReadHandler(uint8_t pin); +WidgetWriteHandler GetWriteHandler(uint8_t pin); + +// Declare placeholders +BLYNK_READ(); +BLYNK_WRITE(); +void BlynkNoOpCbk(); + +// Declare all pin handlers (you can redefine them in your code) +BLYNK_CONNECTED(); +BLYNK_DISCONNECTED(); + +BLYNK_READ_DEFAULT(); +BLYNK_WRITE_DEFAULT(); + +BLYNK_READ(0 ); +BLYNK_READ(1 ); +BLYNK_READ(2 ); +BLYNK_READ(3 ); +BLYNK_READ(4 ); +BLYNK_READ(5 ); +BLYNK_READ(6 ); +BLYNK_READ(7 ); +BLYNK_READ(8 ); +BLYNK_READ(9 ); +BLYNK_READ(10); +BLYNK_READ(11); +BLYNK_READ(12); +BLYNK_READ(13); +BLYNK_READ(14); +BLYNK_READ(15); +BLYNK_READ(16); +BLYNK_READ(17); +BLYNK_READ(18); +BLYNK_READ(19); +BLYNK_READ(20); +BLYNK_READ(21); +BLYNK_READ(22); +BLYNK_READ(23); +BLYNK_READ(24); +BLYNK_READ(25); +BLYNK_READ(26); +BLYNK_READ(27); +BLYNK_READ(28); +BLYNK_READ(29); +BLYNK_READ(30); +BLYNK_READ(31); + +BLYNK_WRITE(0 ); +BLYNK_WRITE(1 ); +BLYNK_WRITE(2 ); +BLYNK_WRITE(3 ); +BLYNK_WRITE(4 ); +BLYNK_WRITE(5 ); +BLYNK_WRITE(6 ); +BLYNK_WRITE(7 ); +BLYNK_WRITE(8 ); +BLYNK_WRITE(9 ); +BLYNK_WRITE(10); +BLYNK_WRITE(11); +BLYNK_WRITE(12); +BLYNK_WRITE(13); +BLYNK_WRITE(14); +BLYNK_WRITE(15); +BLYNK_WRITE(16); +BLYNK_WRITE(17); +BLYNK_WRITE(18); +BLYNK_WRITE(19); +BLYNK_WRITE(20); +BLYNK_WRITE(21); +BLYNK_WRITE(22); +BLYNK_WRITE(23); +BLYNK_WRITE(24); +BLYNK_WRITE(25); +BLYNK_WRITE(26); +BLYNK_WRITE(27); +BLYNK_WRITE(28); +BLYNK_WRITE(29); +BLYNK_WRITE(30); +BLYNK_WRITE(31); + +#ifdef __cplusplus +} +#endif + +#endif