Microduino

Dependencies:   mbed

Fork of Io_moon by Li Weiyi

Revision:
0:740c1eb2df13
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Blynk_v0_3_7/Blynk/utility/BlynkHandlers.cpp	Thu Jun 23 11:16:14 2016 +0000
@@ -0,0 +1,396 @@
+/**
+ * @file       BlynkHandlers.cpp
+ * @author     Volodymyr Shymanskyy
+ * @license    This project is released under the MIT License (MIT)
+ * @copyright  Copyright (c) 2015 Volodymyr Shymanskyy
+ * @date       Jan 2015
+ * @brief      Virtual pin utilities
+ */
+
+#include <Blynk/BlynkConfig.h>
+#include <Blynk/BlynkHandlers.h>
+#include <Blynk/BlynkDebug.h>
+
+void BlynkNoOpCbk()
+{}
+
+void BlynkWidgetRead(BlynkReq& request)
+{
+    BLYNK_LOG2(BLYNK_F("No handler for reading from pin "), request.pin);
+}
+
+void BlynkWidgetWrite(BlynkReq& request, const BlynkParam& param)
+{
+    BLYNK_LOG2(BLYNK_F("No handler for writing to pin "), request.pin);
+}
+
+#define BLYNK_ON_READ_IMPL(pin)  void BlynkWidgetRead  ## pin (BlynkReq& req) \
+          __attribute__((weak, alias("BlynkWidgetRead")))
+
+#define BLYNK_ON_WRITE_IMPL(pin) void BlynkWidgetWrite ## pin (BlynkReq& req, const BlynkParam& param) \
+          __attribute__((weak, alias("BlynkWidgetWrite")))
+
+BLYNK_CONNECTED() __attribute__((weak, alias("BlynkNoOpCbk")));
+BLYNK_DISCONNECTED() __attribute__((weak, alias("BlynkNoOpCbk")));
+
+BLYNK_ON_READ_IMPL(Default);
+BLYNK_ON_WRITE_IMPL(Default);
+
+BLYNK_ON_READ_IMPL(0 );
+BLYNK_ON_READ_IMPL(1 );
+BLYNK_ON_READ_IMPL(2 );
+BLYNK_ON_READ_IMPL(3 );
+BLYNK_ON_READ_IMPL(4 );
+BLYNK_ON_READ_IMPL(5 );
+BLYNK_ON_READ_IMPL(6 );
+BLYNK_ON_READ_IMPL(7 );
+BLYNK_ON_READ_IMPL(8 );
+BLYNK_ON_READ_IMPL(9 );
+BLYNK_ON_READ_IMPL(10);
+BLYNK_ON_READ_IMPL(11);
+BLYNK_ON_READ_IMPL(12);
+BLYNK_ON_READ_IMPL(13);
+BLYNK_ON_READ_IMPL(14);
+BLYNK_ON_READ_IMPL(15);
+BLYNK_ON_READ_IMPL(16);
+BLYNK_ON_READ_IMPL(17);
+BLYNK_ON_READ_IMPL(18);
+BLYNK_ON_READ_IMPL(19);
+BLYNK_ON_READ_IMPL(20);
+BLYNK_ON_READ_IMPL(21);
+BLYNK_ON_READ_IMPL(22);
+BLYNK_ON_READ_IMPL(23);
+BLYNK_ON_READ_IMPL(24);
+BLYNK_ON_READ_IMPL(25);
+BLYNK_ON_READ_IMPL(26);
+BLYNK_ON_READ_IMPL(27);
+BLYNK_ON_READ_IMPL(28);
+BLYNK_ON_READ_IMPL(29);
+BLYNK_ON_READ_IMPL(30);
+BLYNK_ON_READ_IMPL(31);
+#ifdef BLYNK_USE_128_VPINS
+  BLYNK_ON_READ_IMPL(32);
+  BLYNK_ON_READ_IMPL(33);
+  BLYNK_ON_READ_IMPL(34);
+  BLYNK_ON_READ_IMPL(35);
+  BLYNK_ON_READ_IMPL(36);
+  BLYNK_ON_READ_IMPL(37);
+  BLYNK_ON_READ_IMPL(38);
+  BLYNK_ON_READ_IMPL(39);
+  BLYNK_ON_READ_IMPL(40);
+  BLYNK_ON_READ_IMPL(41);
+  BLYNK_ON_READ_IMPL(42);
+  BLYNK_ON_READ_IMPL(43);
+  BLYNK_ON_READ_IMPL(44);
+  BLYNK_ON_READ_IMPL(45);
+  BLYNK_ON_READ_IMPL(46);
+  BLYNK_ON_READ_IMPL(47);
+  BLYNK_ON_READ_IMPL(48);
+  BLYNK_ON_READ_IMPL(49);
+  BLYNK_ON_READ_IMPL(50);
+  BLYNK_ON_READ_IMPL(51);
+  BLYNK_ON_READ_IMPL(52);
+  BLYNK_ON_READ_IMPL(53);
+  BLYNK_ON_READ_IMPL(54);
+  BLYNK_ON_READ_IMPL(55);
+  BLYNK_ON_READ_IMPL(56);
+  BLYNK_ON_READ_IMPL(57);
+  BLYNK_ON_READ_IMPL(58);
+  BLYNK_ON_READ_IMPL(59);
+  BLYNK_ON_READ_IMPL(60);
+  BLYNK_ON_READ_IMPL(61);
+  BLYNK_ON_READ_IMPL(62);
+  BLYNK_ON_READ_IMPL(63);
+  BLYNK_ON_READ_IMPL(64);
+  BLYNK_ON_READ_IMPL(65);
+  BLYNK_ON_READ_IMPL(66);
+  BLYNK_ON_READ_IMPL(67);
+  BLYNK_ON_READ_IMPL(68);
+  BLYNK_ON_READ_IMPL(69);
+  BLYNK_ON_READ_IMPL(70);
+  BLYNK_ON_READ_IMPL(71);
+  BLYNK_ON_READ_IMPL(72);
+  BLYNK_ON_READ_IMPL(73);
+  BLYNK_ON_READ_IMPL(74);
+  BLYNK_ON_READ_IMPL(75);
+  BLYNK_ON_READ_IMPL(76);
+  BLYNK_ON_READ_IMPL(77);
+  BLYNK_ON_READ_IMPL(78);
+  BLYNK_ON_READ_IMPL(79);
+  BLYNK_ON_READ_IMPL(80);
+  BLYNK_ON_READ_IMPL(81);
+  BLYNK_ON_READ_IMPL(82);
+  BLYNK_ON_READ_IMPL(83);
+  BLYNK_ON_READ_IMPL(84);
+  BLYNK_ON_READ_IMPL(85);
+  BLYNK_ON_READ_IMPL(86);
+  BLYNK_ON_READ_IMPL(87);
+  BLYNK_ON_READ_IMPL(88);
+  BLYNK_ON_READ_IMPL(89);
+  BLYNK_ON_READ_IMPL(90);
+  BLYNK_ON_READ_IMPL(91);
+  BLYNK_ON_READ_IMPL(92);
+  BLYNK_ON_READ_IMPL(93);
+  BLYNK_ON_READ_IMPL(94);
+  BLYNK_ON_READ_IMPL(95);
+  BLYNK_ON_READ_IMPL(96);
+  BLYNK_ON_READ_IMPL(97);
+  BLYNK_ON_READ_IMPL(98);
+  BLYNK_ON_READ_IMPL(99);
+  BLYNK_ON_READ_IMPL(100);
+  BLYNK_ON_READ_IMPL(101);
+  BLYNK_ON_READ_IMPL(102);
+  BLYNK_ON_READ_IMPL(103);
+  BLYNK_ON_READ_IMPL(104);
+  BLYNK_ON_READ_IMPL(105);
+  BLYNK_ON_READ_IMPL(106);
+  BLYNK_ON_READ_IMPL(107);
+  BLYNK_ON_READ_IMPL(108);
+  BLYNK_ON_READ_IMPL(109);
+  BLYNK_ON_READ_IMPL(110);
+  BLYNK_ON_READ_IMPL(111);
+  BLYNK_ON_READ_IMPL(112);
+  BLYNK_ON_READ_IMPL(113);
+  BLYNK_ON_READ_IMPL(114);
+  BLYNK_ON_READ_IMPL(115);
+  BLYNK_ON_READ_IMPL(116);
+  BLYNK_ON_READ_IMPL(117);
+  BLYNK_ON_READ_IMPL(118);
+  BLYNK_ON_READ_IMPL(119);
+  BLYNK_ON_READ_IMPL(120);
+  BLYNK_ON_READ_IMPL(121);
+  BLYNK_ON_READ_IMPL(122);
+  BLYNK_ON_READ_IMPL(123);
+  BLYNK_ON_READ_IMPL(124);
+  BLYNK_ON_READ_IMPL(125);
+  BLYNK_ON_READ_IMPL(126);
+  BLYNK_ON_READ_IMPL(127);
+#endif
+
+BLYNK_ON_WRITE_IMPL(0 );
+BLYNK_ON_WRITE_IMPL(1 );
+BLYNK_ON_WRITE_IMPL(2 );
+BLYNK_ON_WRITE_IMPL(3 );
+BLYNK_ON_WRITE_IMPL(4 );
+BLYNK_ON_WRITE_IMPL(5 );
+BLYNK_ON_WRITE_IMPL(6 );
+BLYNK_ON_WRITE_IMPL(7 );
+BLYNK_ON_WRITE_IMPL(8 );
+BLYNK_ON_WRITE_IMPL(9 );
+BLYNK_ON_WRITE_IMPL(10);
+BLYNK_ON_WRITE_IMPL(11);
+BLYNK_ON_WRITE_IMPL(12);
+BLYNK_ON_WRITE_IMPL(13);
+BLYNK_ON_WRITE_IMPL(14);
+BLYNK_ON_WRITE_IMPL(15);
+BLYNK_ON_WRITE_IMPL(16);
+BLYNK_ON_WRITE_IMPL(17);
+BLYNK_ON_WRITE_IMPL(18);
+BLYNK_ON_WRITE_IMPL(19);
+BLYNK_ON_WRITE_IMPL(20);
+BLYNK_ON_WRITE_IMPL(21);
+BLYNK_ON_WRITE_IMPL(22);
+BLYNK_ON_WRITE_IMPL(23);
+BLYNK_ON_WRITE_IMPL(24);
+BLYNK_ON_WRITE_IMPL(25);
+BLYNK_ON_WRITE_IMPL(26);
+BLYNK_ON_WRITE_IMPL(27);
+BLYNK_ON_WRITE_IMPL(28);
+BLYNK_ON_WRITE_IMPL(29);
+BLYNK_ON_WRITE_IMPL(30);
+BLYNK_ON_WRITE_IMPL(31);
+#ifdef BLYNK_USE_128_VPINS
+  BLYNK_ON_WRITE_IMPL(32);
+  BLYNK_ON_WRITE_IMPL(33);
+  BLYNK_ON_WRITE_IMPL(34);
+  BLYNK_ON_WRITE_IMPL(35);
+  BLYNK_ON_WRITE_IMPL(36);
+  BLYNK_ON_WRITE_IMPL(37);
+  BLYNK_ON_WRITE_IMPL(38);
+  BLYNK_ON_WRITE_IMPL(39);
+  BLYNK_ON_WRITE_IMPL(40);
+  BLYNK_ON_WRITE_IMPL(41);
+  BLYNK_ON_WRITE_IMPL(42);
+  BLYNK_ON_WRITE_IMPL(43);
+  BLYNK_ON_WRITE_IMPL(44);
+  BLYNK_ON_WRITE_IMPL(45);
+  BLYNK_ON_WRITE_IMPL(46);
+  BLYNK_ON_WRITE_IMPL(47);
+  BLYNK_ON_WRITE_IMPL(48);
+  BLYNK_ON_WRITE_IMPL(49);
+  BLYNK_ON_WRITE_IMPL(50);
+  BLYNK_ON_WRITE_IMPL(51);
+  BLYNK_ON_WRITE_IMPL(52);
+  BLYNK_ON_WRITE_IMPL(53);
+  BLYNK_ON_WRITE_IMPL(54);
+  BLYNK_ON_WRITE_IMPL(55);
+  BLYNK_ON_WRITE_IMPL(56);
+  BLYNK_ON_WRITE_IMPL(57);
+  BLYNK_ON_WRITE_IMPL(58);
+  BLYNK_ON_WRITE_IMPL(59);
+  BLYNK_ON_WRITE_IMPL(60);
+  BLYNK_ON_WRITE_IMPL(61);
+  BLYNK_ON_WRITE_IMPL(62);
+  BLYNK_ON_WRITE_IMPL(63);
+  BLYNK_ON_WRITE_IMPL(64);
+  BLYNK_ON_WRITE_IMPL(65);
+  BLYNK_ON_WRITE_IMPL(66);
+  BLYNK_ON_WRITE_IMPL(67);
+  BLYNK_ON_WRITE_IMPL(68);
+  BLYNK_ON_WRITE_IMPL(69);
+  BLYNK_ON_WRITE_IMPL(70);
+  BLYNK_ON_WRITE_IMPL(71);
+  BLYNK_ON_WRITE_IMPL(72);
+  BLYNK_ON_WRITE_IMPL(73);
+  BLYNK_ON_WRITE_IMPL(74);
+  BLYNK_ON_WRITE_IMPL(75);
+  BLYNK_ON_WRITE_IMPL(76);
+  BLYNK_ON_WRITE_IMPL(77);
+  BLYNK_ON_WRITE_IMPL(78);
+  BLYNK_ON_WRITE_IMPL(79);
+  BLYNK_ON_WRITE_IMPL(80);
+  BLYNK_ON_WRITE_IMPL(81);
+  BLYNK_ON_WRITE_IMPL(82);
+  BLYNK_ON_WRITE_IMPL(83);
+  BLYNK_ON_WRITE_IMPL(84);
+  BLYNK_ON_WRITE_IMPL(85);
+  BLYNK_ON_WRITE_IMPL(86);
+  BLYNK_ON_WRITE_IMPL(87);
+  BLYNK_ON_WRITE_IMPL(88);
+  BLYNK_ON_WRITE_IMPL(89);
+  BLYNK_ON_WRITE_IMPL(90);
+  BLYNK_ON_WRITE_IMPL(91);
+  BLYNK_ON_WRITE_IMPL(92);
+  BLYNK_ON_WRITE_IMPL(93);
+  BLYNK_ON_WRITE_IMPL(94);
+  BLYNK_ON_WRITE_IMPL(95);
+  BLYNK_ON_WRITE_IMPL(96);
+  BLYNK_ON_WRITE_IMPL(97);
+  BLYNK_ON_WRITE_IMPL(98);
+  BLYNK_ON_WRITE_IMPL(99);
+  BLYNK_ON_WRITE_IMPL(100);
+  BLYNK_ON_WRITE_IMPL(101);
+  BLYNK_ON_WRITE_IMPL(102);
+  BLYNK_ON_WRITE_IMPL(103);
+  BLYNK_ON_WRITE_IMPL(104);
+  BLYNK_ON_WRITE_IMPL(105);
+  BLYNK_ON_WRITE_IMPL(106);
+  BLYNK_ON_WRITE_IMPL(107);
+  BLYNK_ON_WRITE_IMPL(108);
+  BLYNK_ON_WRITE_IMPL(109);
+  BLYNK_ON_WRITE_IMPL(110);
+  BLYNK_ON_WRITE_IMPL(111);
+  BLYNK_ON_WRITE_IMPL(112);
+  BLYNK_ON_WRITE_IMPL(113);
+  BLYNK_ON_WRITE_IMPL(114);
+  BLYNK_ON_WRITE_IMPL(115);
+  BLYNK_ON_WRITE_IMPL(116);
+  BLYNK_ON_WRITE_IMPL(117);
+  BLYNK_ON_WRITE_IMPL(118);
+  BLYNK_ON_WRITE_IMPL(119);
+  BLYNK_ON_WRITE_IMPL(120);
+  BLYNK_ON_WRITE_IMPL(121);
+  BLYNK_ON_WRITE_IMPL(122);
+  BLYNK_ON_WRITE_IMPL(123);
+  BLYNK_ON_WRITE_IMPL(124);
+  BLYNK_ON_WRITE_IMPL(125);
+  BLYNK_ON_WRITE_IMPL(126);
+  BLYNK_ON_WRITE_IMPL(127);
+#endif
+
+static const WidgetReadHandler BlynkReadHandlerVector[] BLYNK_PROGMEM = {
+    BlynkWidgetRead0,   BlynkWidgetRead1,   BlynkWidgetRead2,   BlynkWidgetRead3,
+    BlynkWidgetRead4,   BlynkWidgetRead5,   BlynkWidgetRead6,   BlynkWidgetRead7,
+    BlynkWidgetRead8,   BlynkWidgetRead9,   BlynkWidgetRead10,  BlynkWidgetRead11,
+    BlynkWidgetRead12,  BlynkWidgetRead13,  BlynkWidgetRead14,  BlynkWidgetRead15,
+    BlynkWidgetRead16,  BlynkWidgetRead17,  BlynkWidgetRead18,  BlynkWidgetRead19,
+    BlynkWidgetRead20,  BlynkWidgetRead21,  BlynkWidgetRead22,  BlynkWidgetRead23,
+    BlynkWidgetRead24,  BlynkWidgetRead25,  BlynkWidgetRead26,  BlynkWidgetRead27,
+    BlynkWidgetRead28,  BlynkWidgetRead29,  BlynkWidgetRead30,  BlynkWidgetRead31,
+#ifdef BLYNK_USE_128_VPINS
+    BlynkWidgetRead32,  BlynkWidgetRead33,  BlynkWidgetRead34,  BlynkWidgetRead35,
+    BlynkWidgetRead36,  BlynkWidgetRead37,  BlynkWidgetRead38,  BlynkWidgetRead39,
+    BlynkWidgetRead40,  BlynkWidgetRead41,  BlynkWidgetRead42,  BlynkWidgetRead43,
+    BlynkWidgetRead44,  BlynkWidgetRead45,  BlynkWidgetRead46,  BlynkWidgetRead47,
+    BlynkWidgetRead48,  BlynkWidgetRead49,  BlynkWidgetRead50,  BlynkWidgetRead51,
+    BlynkWidgetRead52,  BlynkWidgetRead53,  BlynkWidgetRead54,  BlynkWidgetRead55,
+    BlynkWidgetRead56,  BlynkWidgetRead57,  BlynkWidgetRead58,  BlynkWidgetRead59,
+    BlynkWidgetRead60,  BlynkWidgetRead61,  BlynkWidgetRead62,  BlynkWidgetRead63,
+    BlynkWidgetRead64,  BlynkWidgetRead65,  BlynkWidgetRead66,  BlynkWidgetRead67,
+    BlynkWidgetRead68,  BlynkWidgetRead69,  BlynkWidgetRead70,  BlynkWidgetRead71,
+    BlynkWidgetRead72,  BlynkWidgetRead73,  BlynkWidgetRead74,  BlynkWidgetRead75,
+    BlynkWidgetRead76,  BlynkWidgetRead77,  BlynkWidgetRead78,  BlynkWidgetRead79,
+    BlynkWidgetRead80,  BlynkWidgetRead81,  BlynkWidgetRead82,  BlynkWidgetRead83,
+    BlynkWidgetRead84,  BlynkWidgetRead85,  BlynkWidgetRead86,  BlynkWidgetRead87,
+    BlynkWidgetRead88,  BlynkWidgetRead89,  BlynkWidgetRead90,  BlynkWidgetRead91,
+    BlynkWidgetRead92,  BlynkWidgetRead93,  BlynkWidgetRead94,  BlynkWidgetRead95,
+    BlynkWidgetRead96,  BlynkWidgetRead97,  BlynkWidgetRead98,  BlynkWidgetRead99,
+    BlynkWidgetRead100,  BlynkWidgetRead101,  BlynkWidgetRead102,  BlynkWidgetRead103,
+    BlynkWidgetRead104,  BlynkWidgetRead105,  BlynkWidgetRead106,  BlynkWidgetRead107,
+    BlynkWidgetRead108,  BlynkWidgetRead109,  BlynkWidgetRead110,  BlynkWidgetRead111,
+    BlynkWidgetRead112,  BlynkWidgetRead113,  BlynkWidgetRead114,  BlynkWidgetRead115,
+    BlynkWidgetRead116,  BlynkWidgetRead117,  BlynkWidgetRead118,  BlynkWidgetRead119,
+    BlynkWidgetRead120,  BlynkWidgetRead121,  BlynkWidgetRead122,  BlynkWidgetRead123,
+    BlynkWidgetRead124,  BlynkWidgetRead125,  BlynkWidgetRead126,  BlynkWidgetRead127,
+#endif
+};
+
+static const WidgetWriteHandler BlynkWriteHandlerVector[] BLYNK_PROGMEM = {
+    BlynkWidgetWrite0,  BlynkWidgetWrite1,  BlynkWidgetWrite2,  BlynkWidgetWrite3,
+    BlynkWidgetWrite4,  BlynkWidgetWrite5,  BlynkWidgetWrite6,  BlynkWidgetWrite7,
+    BlynkWidgetWrite8,  BlynkWidgetWrite9,  BlynkWidgetWrite10, BlynkWidgetWrite11,
+    BlynkWidgetWrite12, BlynkWidgetWrite13, BlynkWidgetWrite14, BlynkWidgetWrite15,
+    BlynkWidgetWrite16, BlynkWidgetWrite17, BlynkWidgetWrite18, BlynkWidgetWrite19,
+    BlynkWidgetWrite20, BlynkWidgetWrite21, BlynkWidgetWrite22, BlynkWidgetWrite23,
+    BlynkWidgetWrite24, BlynkWidgetWrite25, BlynkWidgetWrite26, BlynkWidgetWrite27,
+    BlynkWidgetWrite28, BlynkWidgetWrite29, BlynkWidgetWrite30, BlynkWidgetWrite31,
+#ifdef BLYNK_USE_128_VPINS
+    BlynkWidgetWrite32,  BlynkWidgetWrite33,  BlynkWidgetWrite34,  BlynkWidgetWrite35,
+    BlynkWidgetWrite36,  BlynkWidgetWrite37,  BlynkWidgetWrite38,  BlynkWidgetWrite39,
+    BlynkWidgetWrite40,  BlynkWidgetWrite41,  BlynkWidgetWrite42,  BlynkWidgetWrite43,
+    BlynkWidgetWrite44,  BlynkWidgetWrite45,  BlynkWidgetWrite46,  BlynkWidgetWrite47,
+    BlynkWidgetWrite48,  BlynkWidgetWrite49,  BlynkWidgetWrite50,  BlynkWidgetWrite51,
+    BlynkWidgetWrite52,  BlynkWidgetWrite53,  BlynkWidgetWrite54,  BlynkWidgetWrite55,
+    BlynkWidgetWrite56,  BlynkWidgetWrite57,  BlynkWidgetWrite58,  BlynkWidgetWrite59,
+    BlynkWidgetWrite60,  BlynkWidgetWrite61,  BlynkWidgetWrite62,  BlynkWidgetWrite63,
+    BlynkWidgetWrite64,  BlynkWidgetWrite65,  BlynkWidgetWrite66,  BlynkWidgetWrite67,
+    BlynkWidgetWrite68,  BlynkWidgetWrite69,  BlynkWidgetWrite70,  BlynkWidgetWrite71,
+    BlynkWidgetWrite72,  BlynkWidgetWrite73,  BlynkWidgetWrite74,  BlynkWidgetWrite75,
+    BlynkWidgetWrite76,  BlynkWidgetWrite77,  BlynkWidgetWrite78,  BlynkWidgetWrite79,
+    BlynkWidgetWrite80,  BlynkWidgetWrite81,  BlynkWidgetWrite82,  BlynkWidgetWrite83,
+    BlynkWidgetWrite84,  BlynkWidgetWrite85,  BlynkWidgetWrite86,  BlynkWidgetWrite87,
+    BlynkWidgetWrite88,  BlynkWidgetWrite89,  BlynkWidgetWrite90,  BlynkWidgetWrite91,
+    BlynkWidgetWrite92,  BlynkWidgetWrite93,  BlynkWidgetWrite94,  BlynkWidgetWrite95,
+    BlynkWidgetWrite96,  BlynkWidgetWrite97,  BlynkWidgetWrite98,  BlynkWidgetWrite99,
+    BlynkWidgetWrite100,  BlynkWidgetWrite101,  BlynkWidgetWrite102,  BlynkWidgetWrite103,
+    BlynkWidgetWrite104,  BlynkWidgetWrite105,  BlynkWidgetWrite106,  BlynkWidgetWrite107,
+    BlynkWidgetWrite108,  BlynkWidgetWrite109,  BlynkWidgetWrite110,  BlynkWidgetWrite111,
+    BlynkWidgetWrite112,  BlynkWidgetWrite113,  BlynkWidgetWrite114,  BlynkWidgetWrite115,
+    BlynkWidgetWrite116,  BlynkWidgetWrite117,  BlynkWidgetWrite118,  BlynkWidgetWrite119,
+    BlynkWidgetWrite120,  BlynkWidgetWrite121,  BlynkWidgetWrite122,  BlynkWidgetWrite123,
+    BlynkWidgetWrite124,  BlynkWidgetWrite125,  BlynkWidgetWrite126,  BlynkWidgetWrite127,
+#endif
+};
+
+WidgetReadHandler GetReadHandler(uint8_t pin)
+{
+    if (pin >= COUNT_OF(BlynkReadHandlerVector))
+        return NULL;
+#ifdef BLYNK_HAS_PROGMEM
+    return (WidgetReadHandler)pgm_read_word(&BlynkReadHandlerVector[pin]);
+#else
+    return BlynkReadHandlerVector[pin];
+#endif
+}
+
+WidgetWriteHandler GetWriteHandler(uint8_t pin)
+{
+    if (pin >= COUNT_OF(BlynkWriteHandlerVector))
+        return NULL;
+#ifdef BLYNK_HAS_PROGMEM
+    return (WidgetWriteHandler)pgm_read_word(&BlynkWriteHandlerVector[pin]);
+#else
+    return BlynkWriteHandlerVector[pin];
+#endif
+}
+