blynk & neopixelring & w7500

Fork of WIZwiki-7500_Blynk by IOP

Committer:
jcm931213
Date:
Mon Nov 27 11:49:08 2017 +0000
Revision:
18:bc3d69c01bf2
Parent:
14:76d8fd871a4d
NeoPixel Ring Blynk Example final!!!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vshymanskyy 0:58b20b438383 1 /**
Volodymyr Shymanskyy 13:ed6276c0afb7 2 * @file BlynkApiMbed.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 Mar 2015
vshymanskyy 0:58b20b438383 7 * @brief
vshymanskyy 0:58b20b438383 8 *
vshymanskyy 0:58b20b438383 9 */
vshymanskyy 0:58b20b438383 10
Volodymyr Shymanskyy 13:ed6276c0afb7 11 #ifndef BlynkApiMbed_h
Volodymyr Shymanskyy 13:ed6276c0afb7 12 #define BlynkApiMbed_h
vshymanskyy 0:58b20b438383 13
vshymanskyy 0:58b20b438383 14 #include "mbed.h"
vshymanskyy 0:58b20b438383 15
vshymanskyy 1:401940b68eae 16 static Timer blynk_millis_timer;
vshymanskyy 1:401940b68eae 17 static Ticker blynk_waker;
vshymanskyy 0:58b20b438383 18
vshymanskyy 0:58b20b438383 19 static
vshymanskyy 0:58b20b438383 20 void blynk_wake() {
vshymanskyy 0:58b20b438383 21 //pc.puts("(...)");
vshymanskyy 0:58b20b438383 22 }
vshymanskyy 1:401940b68eae 23
vshymanskyy 0:58b20b438383 24 static
vshymanskyy 0:58b20b438383 25 void delay(unsigned long ms)
vshymanskyy 0:58b20b438383 26 {
vshymanskyy 0:58b20b438383 27 wait_ms(ms);
vshymanskyy 0:58b20b438383 28 }
vshymanskyy 0:58b20b438383 29
vshymanskyy 0:58b20b438383 30 static
vshymanskyy 0:58b20b438383 31 unsigned long millis(void)
vshymanskyy 0:58b20b438383 32 {
vshymanskyy 0:58b20b438383 33 return blynk_millis_timer.read_ms();
vshymanskyy 0:58b20b438383 34 }
vshymanskyy 1:401940b68eae 35
vshymanskyy 4:fa1450a7dd08 36 #include <Blynk/BlynkApi.h>
vshymanskyy 4:fa1450a7dd08 37
vshymanskyy 0:58b20b438383 38 template<class Proto>
vshymanskyy 0:58b20b438383 39 void BlynkApi<Proto>::Init()
vshymanskyy 0:58b20b438383 40 {
vshymanskyy 0:58b20b438383 41 blynk_waker.attach(&blynk_wake, 2.0);
vshymanskyy 0:58b20b438383 42 blynk_millis_timer.start();
vshymanskyy 0:58b20b438383 43 }
vshymanskyy 0:58b20b438383 44
vshymanskyy 0:58b20b438383 45 template<class Proto>
vshymanskyy 0:58b20b438383 46 BLYNK_FORCE_INLINE
vshymanskyy 0:58b20b438383 47 millis_time_t BlynkApi<Proto>::getMillis()
vshymanskyy 0:58b20b438383 48 {
vshymanskyy 0:58b20b438383 49 return blynk_millis_timer.read_ms();
vshymanskyy 0:58b20b438383 50 }
vshymanskyy 0:58b20b438383 51
vshymanskyy 0:58b20b438383 52 #ifdef BLYNK_NO_INFO
vshymanskyy 0:58b20b438383 53
vshymanskyy 0:58b20b438383 54 template<class Proto>
vshymanskyy 0:58b20b438383 55 BLYNK_FORCE_INLINE
vshymanskyy 0:58b20b438383 56 void BlynkApi<Proto>::sendInfo() {}
vshymanskyy 0:58b20b438383 57
vshymanskyy 0:58b20b438383 58 #else
vshymanskyy 0:58b20b438383 59
vshymanskyy 0:58b20b438383 60 template<class Proto>
vshymanskyy 0:58b20b438383 61 BLYNK_FORCE_INLINE
vshymanskyy 0:58b20b438383 62 void BlynkApi<Proto>::sendInfo()
vshymanskyy 0:58b20b438383 63 {
vshymanskyy 0:58b20b438383 64 static const char profile[] BLYNK_PROGMEM =
vshymanskyy 0:58b20b438383 65 BLYNK_PARAM_KV("ver" , BLYNK_VERSION)
Volodymyr Shymanskyy 10:c241e4227173 66 BLYNK_PARAM_KV("h-beat" , BLYNK_TOSTRING(BLYNK_HEARTBEAT))
Volodymyr Shymanskyy 10:c241e4227173 67 BLYNK_PARAM_KV("buff-in", BLYNK_TOSTRING(BLYNK_MAX_READBYTES))
vshymanskyy 0:58b20b438383 68 #ifdef BLYNK_INFO_DEVICE
vshymanskyy 0:58b20b438383 69 BLYNK_PARAM_KV("dev" , BLYNK_INFO_DEVICE)
vshymanskyy 0:58b20b438383 70 #endif
vshymanskyy 0:58b20b438383 71 #ifdef BLYNK_INFO_CPU
vshymanskyy 0:58b20b438383 72 BLYNK_PARAM_KV("cpu" , BLYNK_INFO_CPU)
vshymanskyy 0:58b20b438383 73 #endif
vshymanskyy 0:58b20b438383 74 #ifdef BLYNK_INFO_CONNECTION
vshymanskyy 0:58b20b438383 75 BLYNK_PARAM_KV("con" , BLYNK_INFO_CONNECTION)
vshymanskyy 0:58b20b438383 76 #endif
vshymanskyy 0:58b20b438383 77 BLYNK_PARAM_KV("build" , __DATE__ " " __TIME__)
vshymanskyy 0:58b20b438383 78 ;
vshymanskyy 0:58b20b438383 79 const size_t profile_len = sizeof(profile)-1;
vshymanskyy 0:58b20b438383 80
vshymanskyy 0:58b20b438383 81 #ifdef BLYNK_HAS_PROGMEM
vshymanskyy 0:58b20b438383 82 char mem[profile_len];
vshymanskyy 0:58b20b438383 83 memcpy_P(mem, profile, profile_len);
Volodymyr Shymanskyy 10:c241e4227173 84 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_INTERNAL, 0, mem, profile_len);
vshymanskyy 0:58b20b438383 85 #else
Volodymyr Shymanskyy 10:c241e4227173 86 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_INTERNAL, 0, profile, profile_len);
vshymanskyy 0:58b20b438383 87 #endif
vshymanskyy 0:58b20b438383 88 return;
vshymanskyy 0:58b20b438383 89 }
vshymanskyy 0:58b20b438383 90
vshymanskyy 0:58b20b438383 91 #endif
vshymanskyy 0:58b20b438383 92
vshymanskyy 0:58b20b438383 93 template<class Proto>
vshymanskyy 0:58b20b438383 94 BLYNK_FORCE_INLINE
vshymanskyy 0:58b20b438383 95 void BlynkApi<Proto>::processCmd(const void* buff, size_t len)
vshymanskyy 0:58b20b438383 96 {
vshymanskyy 0:58b20b438383 97 BlynkParam param((void*)buff, len);
vshymanskyy 0:58b20b438383 98 BlynkParam::iterator it = param.begin();
vshymanskyy 0:58b20b438383 99 if (it >= param.end())
vshymanskyy 0:58b20b438383 100 return;
vshymanskyy 0:58b20b438383 101 const char* cmd = it.asStr();
Volodymyr Shymanskyy 10:c241e4227173 102 uint16_t cmd16;
Volodymyr Shymanskyy 10:c241e4227173 103 memcpy(&cmd16, cmd, sizeof(cmd16));
vshymanskyy 0:58b20b438383 104 if (++it >= param.end())
vshymanskyy 0:58b20b438383 105 return;
vshymanskyy 0:58b20b438383 106
vshymanskyy 0:58b20b438383 107 #if defined(analogInputToDigitalPin)
vshymanskyy 0:58b20b438383 108 // Good! Analog pins can be referenced on this device by name.
vshymanskyy 0:58b20b438383 109 const uint8_t pin = (it.asStr()[0] == 'A') ?
vshymanskyy 0:58b20b438383 110 analogInputToDigitalPin(atoi(it.asStr()+1)) :
vshymanskyy 0:58b20b438383 111 it.asInt();
vshymanskyy 0:58b20b438383 112 #else
Volodymyr Shymanskyy 10:c241e4227173 113 #if defined(BLYNK_DEBUG_ALL)
Volodymyr Shymanskyy 10:c241e4227173 114 #pragma message "analogInputToDigitalPin not defined"
Volodymyr Shymanskyy 10:c241e4227173 115 #endif
vshymanskyy 0:58b20b438383 116 const uint8_t pin = it.asInt();
vshymanskyy 0:58b20b438383 117 #endif
vshymanskyy 0:58b20b438383 118
vshymanskyy 0:58b20b438383 119 switch(cmd16) {
vshymanskyy 0:58b20b438383 120
vshymanskyy 0:58b20b438383 121 #ifndef BLYNK_NO_BUILTIN
vshymanskyy 0:58b20b438383 122
vshymanskyy 0:58b20b438383 123 case BLYNK_HW_PM: {
vshymanskyy 0:58b20b438383 124 while (it < param.end()) {
vshymanskyy 0:58b20b438383 125 ++it;
vshymanskyy 0:58b20b438383 126 if (!strcmp(it.asStr(), "in")) {
vshymanskyy 0:58b20b438383 127 //pinMode(pin, INPUT);
vshymanskyy 0:58b20b438383 128 } else if (!strcmp(it.asStr(), "out") || !strcmp(it.asStr(), "pwm")) {
vshymanskyy 0:58b20b438383 129 //pinMode(pin, OUTPUT);
vshymanskyy 0:58b20b438383 130 } else {
vshymanskyy 0:58b20b438383 131 #ifdef BLYNK_DEBUG
vshymanskyy 0:58b20b438383 132 BLYNK_LOG4(BLYNK_F("Invalid pin "), pin, BLYNK_F(" mode "), it.asStr());
vshymanskyy 0:58b20b438383 133 #endif
vshymanskyy 0:58b20b438383 134 }
vshymanskyy 0:58b20b438383 135 ++it;
vshymanskyy 0:58b20b438383 136 }
vshymanskyy 0:58b20b438383 137 } break;
vshymanskyy 0:58b20b438383 138 case BLYNK_HW_DR: {
vshymanskyy 0:58b20b438383 139 DigitalIn p((PinName)pin);
vshymanskyy 0:58b20b438383 140 char mem[16];
vshymanskyy 0:58b20b438383 141 BlynkParam rsp(mem, 0, sizeof(mem));
vshymanskyy 0:58b20b438383 142 rsp.add("dw");
vshymanskyy 0:58b20b438383 143 rsp.add(pin);
vshymanskyy 0:58b20b438383 144 rsp.add(int(p));
vshymanskyy 0:58b20b438383 145 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_HARDWARE, 0, rsp.getBuffer(), rsp.getLength()-1);
vshymanskyy 0:58b20b438383 146 } break;
vshymanskyy 0:58b20b438383 147 case BLYNK_HW_DW: {
vshymanskyy 0:58b20b438383 148 // Should be 1 parameter (value)
vshymanskyy 0:58b20b438383 149 if (++it >= param.end())
vshymanskyy 0:58b20b438383 150 return;
vshymanskyy 0:58b20b438383 151
vshymanskyy 0:58b20b438383 152 //BLYNK_LOG("digitalWrite %d -> %d", pin, it.asInt());
vshymanskyy 0:58b20b438383 153 DigitalOut p((PinName)pin);
vshymanskyy 0:58b20b438383 154 p = it.asInt() ? 1 : 0;
vshymanskyy 0:58b20b438383 155 } break;
vshymanskyy 0:58b20b438383 156 case BLYNK_HW_AR: {
vshymanskyy 0:58b20b438383 157 AnalogIn p((PinName)pin);
vshymanskyy 0:58b20b438383 158 char mem[16];
vshymanskyy 0:58b20b438383 159 BlynkParam rsp(mem, 0, sizeof(mem));
vshymanskyy 0:58b20b438383 160 rsp.add("aw");
vshymanskyy 0:58b20b438383 161 rsp.add(pin);
vshymanskyy 0:58b20b438383 162 rsp.add(int(p.read() * 1024));
vshymanskyy 0:58b20b438383 163 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_HARDWARE, 0, rsp.getBuffer(), rsp.getLength()-1);
vshymanskyy 0:58b20b438383 164 } break;
vshymanskyy 0:58b20b438383 165 case BLYNK_HW_AW: {
vshymanskyy 0:58b20b438383 166 // TODO: Not supported yet
vshymanskyy 0:58b20b438383 167 } break;
vshymanskyy 0:58b20b438383 168
vshymanskyy 0:58b20b438383 169 #endif
vshymanskyy 0:58b20b438383 170
vshymanskyy 0:58b20b438383 171 case BLYNK_HW_VR: {
vshymanskyy 0:58b20b438383 172 BlynkReq req = { pin };
vshymanskyy 0:58b20b438383 173 WidgetReadHandler handler = GetReadHandler(pin);
vshymanskyy 0:58b20b438383 174 if (handler && (handler != BlynkWidgetRead)) {
vshymanskyy 0:58b20b438383 175 handler(req);
vshymanskyy 0:58b20b438383 176 } else {
vshymanskyy 0:58b20b438383 177 BlynkWidgetReadDefault(req);
vshymanskyy 0:58b20b438383 178 }
vshymanskyy 0:58b20b438383 179 } break;
vshymanskyy 0:58b20b438383 180 case BLYNK_HW_VW: {
vshymanskyy 0:58b20b438383 181 ++it;
vshymanskyy 0:58b20b438383 182 char* start = (char*)it.asStr();
vshymanskyy 0:58b20b438383 183 BlynkParam param2(start, len - (start - (char*)buff));
vshymanskyy 0:58b20b438383 184 BlynkReq req = { pin };
vshymanskyy 0:58b20b438383 185 WidgetWriteHandler handler = GetWriteHandler(pin);
vshymanskyy 0:58b20b438383 186 if (handler && (handler != BlynkWidgetWrite)) {
vshymanskyy 0:58b20b438383 187 handler(req, param2);
vshymanskyy 0:58b20b438383 188 } else {
vshymanskyy 0:58b20b438383 189 BlynkWidgetWriteDefault(req, param2);
vshymanskyy 0:58b20b438383 190 }
vshymanskyy 0:58b20b438383 191 } break;
vshymanskyy 0:58b20b438383 192 default:
vshymanskyy 0:58b20b438383 193 BLYNK_LOG2(BLYNK_F("Invalid HW cmd: "), cmd);
Volodymyr Shymanskyy 14:76d8fd871a4d 194 static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_RESPONSE, static_cast<Proto*>(this)->msgIdOutOverride, NULL, BLYNK_ILLEGAL_COMMAND);
vshymanskyy 0:58b20b438383 195 }
vshymanskyy 0:58b20b438383 196 }
vshymanskyy 0:58b20b438383 197
vshymanskyy 0:58b20b438383 198 #endif