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
BlynkApiMbed.h@22:e1d3971fd902, 2018-01-26 (annotated)
- Committer:
- vshymanskyy
- Date:
- Fri Jan 26 22:18:19 2018 +0000
- Revision:
- 22:e1d3971fd902
- Parent:
- 16:6d9bf99b263c
Fix BlynkSystemInit for MBED
Who changed what in which revision?
User | Revision | Line number | New 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 | 4:fa1450a7dd08 | 14 | #include <Blynk/BlynkApi.h> |
Volodymyr Shymanskyy |
16:6d9bf99b263c | 15 | #include <mbed.h> |
vshymanskyy | 4:fa1450a7dd08 | 16 | |
vshymanskyy | 0:58b20b438383 | 17 | #ifdef BLYNK_NO_INFO |
vshymanskyy | 0:58b20b438383 | 18 | |
vshymanskyy | 0:58b20b438383 | 19 | template<class Proto> |
vshymanskyy | 0:58b20b438383 | 20 | BLYNK_FORCE_INLINE |
vshymanskyy | 0:58b20b438383 | 21 | void BlynkApi<Proto>::sendInfo() {} |
vshymanskyy | 0:58b20b438383 | 22 | |
vshymanskyy | 0:58b20b438383 | 23 | #else |
vshymanskyy | 0:58b20b438383 | 24 | |
vshymanskyy | 0:58b20b438383 | 25 | template<class Proto> |
vshymanskyy | 0:58b20b438383 | 26 | BLYNK_FORCE_INLINE |
vshymanskyy | 0:58b20b438383 | 27 | void BlynkApi<Proto>::sendInfo() |
vshymanskyy | 0:58b20b438383 | 28 | { |
vshymanskyy | 0:58b20b438383 | 29 | static const char profile[] BLYNK_PROGMEM = |
vshymanskyy | 0:58b20b438383 | 30 | BLYNK_PARAM_KV("ver" , BLYNK_VERSION) |
Volodymyr Shymanskyy |
10:c241e4227173 | 31 | BLYNK_PARAM_KV("h-beat" , BLYNK_TOSTRING(BLYNK_HEARTBEAT)) |
Volodymyr Shymanskyy |
10:c241e4227173 | 32 | BLYNK_PARAM_KV("buff-in", BLYNK_TOSTRING(BLYNK_MAX_READBYTES)) |
vshymanskyy | 0:58b20b438383 | 33 | #ifdef BLYNK_INFO_DEVICE |
vshymanskyy | 0:58b20b438383 | 34 | BLYNK_PARAM_KV("dev" , BLYNK_INFO_DEVICE) |
vshymanskyy | 0:58b20b438383 | 35 | #endif |
vshymanskyy | 0:58b20b438383 | 36 | #ifdef BLYNK_INFO_CPU |
vshymanskyy | 0:58b20b438383 | 37 | BLYNK_PARAM_KV("cpu" , BLYNK_INFO_CPU) |
vshymanskyy | 0:58b20b438383 | 38 | #endif |
vshymanskyy | 0:58b20b438383 | 39 | #ifdef BLYNK_INFO_CONNECTION |
vshymanskyy | 0:58b20b438383 | 40 | BLYNK_PARAM_KV("con" , BLYNK_INFO_CONNECTION) |
vshymanskyy | 0:58b20b438383 | 41 | #endif |
vshymanskyy | 0:58b20b438383 | 42 | BLYNK_PARAM_KV("build" , __DATE__ " " __TIME__) |
vshymanskyy | 0:58b20b438383 | 43 | ; |
vshymanskyy | 0:58b20b438383 | 44 | const size_t profile_len = sizeof(profile)-1; |
vshymanskyy | 0:58b20b438383 | 45 | |
vshymanskyy | 0:58b20b438383 | 46 | #ifdef BLYNK_HAS_PROGMEM |
vshymanskyy | 0:58b20b438383 | 47 | char mem[profile_len]; |
vshymanskyy | 0:58b20b438383 | 48 | memcpy_P(mem, profile, profile_len); |
Volodymyr Shymanskyy |
10:c241e4227173 | 49 | static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_INTERNAL, 0, mem, profile_len); |
vshymanskyy | 0:58b20b438383 | 50 | #else |
Volodymyr Shymanskyy |
10:c241e4227173 | 51 | static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_INTERNAL, 0, profile, profile_len); |
vshymanskyy | 0:58b20b438383 | 52 | #endif |
vshymanskyy | 0:58b20b438383 | 53 | return; |
vshymanskyy | 0:58b20b438383 | 54 | } |
vshymanskyy | 0:58b20b438383 | 55 | |
vshymanskyy | 0:58b20b438383 | 56 | #endif |
vshymanskyy | 0:58b20b438383 | 57 | |
vshymanskyy | 0:58b20b438383 | 58 | template<class Proto> |
vshymanskyy | 0:58b20b438383 | 59 | BLYNK_FORCE_INLINE |
vshymanskyy | 0:58b20b438383 | 60 | void BlynkApi<Proto>::processCmd(const void* buff, size_t len) |
vshymanskyy | 0:58b20b438383 | 61 | { |
vshymanskyy | 0:58b20b438383 | 62 | BlynkParam param((void*)buff, len); |
vshymanskyy | 0:58b20b438383 | 63 | BlynkParam::iterator it = param.begin(); |
vshymanskyy | 0:58b20b438383 | 64 | if (it >= param.end()) |
vshymanskyy | 0:58b20b438383 | 65 | return; |
vshymanskyy | 0:58b20b438383 | 66 | const char* cmd = it.asStr(); |
Volodymyr Shymanskyy |
10:c241e4227173 | 67 | uint16_t cmd16; |
Volodymyr Shymanskyy |
10:c241e4227173 | 68 | memcpy(&cmd16, cmd, sizeof(cmd16)); |
vshymanskyy | 0:58b20b438383 | 69 | if (++it >= param.end()) |
vshymanskyy | 0:58b20b438383 | 70 | return; |
vshymanskyy | 0:58b20b438383 | 71 | |
vshymanskyy | 0:58b20b438383 | 72 | #if defined(analogInputToDigitalPin) |
vshymanskyy | 0:58b20b438383 | 73 | // Good! Analog pins can be referenced on this device by name. |
vshymanskyy | 0:58b20b438383 | 74 | const uint8_t pin = (it.asStr()[0] == 'A') ? |
vshymanskyy | 0:58b20b438383 | 75 | analogInputToDigitalPin(atoi(it.asStr()+1)) : |
vshymanskyy | 0:58b20b438383 | 76 | it.asInt(); |
vshymanskyy | 0:58b20b438383 | 77 | #else |
Volodymyr Shymanskyy |
10:c241e4227173 | 78 | #if defined(BLYNK_DEBUG_ALL) |
Volodymyr Shymanskyy |
10:c241e4227173 | 79 | #pragma message "analogInputToDigitalPin not defined" |
Volodymyr Shymanskyy |
10:c241e4227173 | 80 | #endif |
vshymanskyy | 0:58b20b438383 | 81 | const uint8_t pin = it.asInt(); |
vshymanskyy | 0:58b20b438383 | 82 | #endif |
vshymanskyy | 0:58b20b438383 | 83 | |
vshymanskyy | 0:58b20b438383 | 84 | switch(cmd16) { |
vshymanskyy | 0:58b20b438383 | 85 | |
vshymanskyy | 0:58b20b438383 | 86 | #ifndef BLYNK_NO_BUILTIN |
vshymanskyy | 0:58b20b438383 | 87 | |
vshymanskyy | 0:58b20b438383 | 88 | case BLYNK_HW_PM: { |
vshymanskyy | 0:58b20b438383 | 89 | while (it < param.end()) { |
vshymanskyy | 0:58b20b438383 | 90 | ++it; |
vshymanskyy | 0:58b20b438383 | 91 | if (!strcmp(it.asStr(), "in")) { |
vshymanskyy | 0:58b20b438383 | 92 | //pinMode(pin, INPUT); |
vshymanskyy | 0:58b20b438383 | 93 | } else if (!strcmp(it.asStr(), "out") || !strcmp(it.asStr(), "pwm")) { |
vshymanskyy | 0:58b20b438383 | 94 | //pinMode(pin, OUTPUT); |
vshymanskyy | 0:58b20b438383 | 95 | } else { |
vshymanskyy | 0:58b20b438383 | 96 | #ifdef BLYNK_DEBUG |
vshymanskyy | 0:58b20b438383 | 97 | BLYNK_LOG4(BLYNK_F("Invalid pin "), pin, BLYNK_F(" mode "), it.asStr()); |
vshymanskyy | 0:58b20b438383 | 98 | #endif |
vshymanskyy | 0:58b20b438383 | 99 | } |
vshymanskyy | 0:58b20b438383 | 100 | ++it; |
vshymanskyy | 0:58b20b438383 | 101 | } |
vshymanskyy | 0:58b20b438383 | 102 | } break; |
vshymanskyy | 0:58b20b438383 | 103 | case BLYNK_HW_DR: { |
vshymanskyy | 0:58b20b438383 | 104 | DigitalIn p((PinName)pin); |
vshymanskyy | 0:58b20b438383 | 105 | char mem[16]; |
vshymanskyy | 0:58b20b438383 | 106 | BlynkParam rsp(mem, 0, sizeof(mem)); |
vshymanskyy | 0:58b20b438383 | 107 | rsp.add("dw"); |
vshymanskyy | 0:58b20b438383 | 108 | rsp.add(pin); |
vshymanskyy | 0:58b20b438383 | 109 | rsp.add(int(p)); |
vshymanskyy | 0:58b20b438383 | 110 | static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_HARDWARE, 0, rsp.getBuffer(), rsp.getLength()-1); |
vshymanskyy | 0:58b20b438383 | 111 | } break; |
vshymanskyy | 0:58b20b438383 | 112 | case BLYNK_HW_DW: { |
vshymanskyy | 0:58b20b438383 | 113 | // Should be 1 parameter (value) |
vshymanskyy | 0:58b20b438383 | 114 | if (++it >= param.end()) |
vshymanskyy | 0:58b20b438383 | 115 | return; |
vshymanskyy | 0:58b20b438383 | 116 | |
vshymanskyy | 0:58b20b438383 | 117 | //BLYNK_LOG("digitalWrite %d -> %d", pin, it.asInt()); |
vshymanskyy | 0:58b20b438383 | 118 | DigitalOut p((PinName)pin); |
vshymanskyy | 0:58b20b438383 | 119 | p = it.asInt() ? 1 : 0; |
vshymanskyy | 0:58b20b438383 | 120 | } break; |
vshymanskyy | 0:58b20b438383 | 121 | case BLYNK_HW_AR: { |
vshymanskyy | 0:58b20b438383 | 122 | AnalogIn p((PinName)pin); |
vshymanskyy | 0:58b20b438383 | 123 | char mem[16]; |
vshymanskyy | 0:58b20b438383 | 124 | BlynkParam rsp(mem, 0, sizeof(mem)); |
vshymanskyy | 0:58b20b438383 | 125 | rsp.add("aw"); |
vshymanskyy | 0:58b20b438383 | 126 | rsp.add(pin); |
vshymanskyy | 0:58b20b438383 | 127 | rsp.add(int(p.read() * 1024)); |
vshymanskyy | 0:58b20b438383 | 128 | static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_HARDWARE, 0, rsp.getBuffer(), rsp.getLength()-1); |
vshymanskyy | 0:58b20b438383 | 129 | } break; |
vshymanskyy | 0:58b20b438383 | 130 | case BLYNK_HW_AW: { |
vshymanskyy | 0:58b20b438383 | 131 | // TODO: Not supported yet |
vshymanskyy | 0:58b20b438383 | 132 | } break; |
vshymanskyy | 0:58b20b438383 | 133 | |
vshymanskyy | 0:58b20b438383 | 134 | #endif |
vshymanskyy | 0:58b20b438383 | 135 | |
vshymanskyy | 0:58b20b438383 | 136 | case BLYNK_HW_VR: { |
vshymanskyy | 0:58b20b438383 | 137 | BlynkReq req = { pin }; |
vshymanskyy | 0:58b20b438383 | 138 | WidgetReadHandler handler = GetReadHandler(pin); |
vshymanskyy | 0:58b20b438383 | 139 | if (handler && (handler != BlynkWidgetRead)) { |
vshymanskyy | 0:58b20b438383 | 140 | handler(req); |
vshymanskyy | 0:58b20b438383 | 141 | } else { |
vshymanskyy | 0:58b20b438383 | 142 | BlynkWidgetReadDefault(req); |
vshymanskyy | 0:58b20b438383 | 143 | } |
vshymanskyy | 0:58b20b438383 | 144 | } break; |
vshymanskyy | 0:58b20b438383 | 145 | case BLYNK_HW_VW: { |
vshymanskyy | 0:58b20b438383 | 146 | ++it; |
vshymanskyy | 0:58b20b438383 | 147 | char* start = (char*)it.asStr(); |
vshymanskyy | 0:58b20b438383 | 148 | BlynkParam param2(start, len - (start - (char*)buff)); |
vshymanskyy | 0:58b20b438383 | 149 | BlynkReq req = { pin }; |
vshymanskyy | 0:58b20b438383 | 150 | WidgetWriteHandler handler = GetWriteHandler(pin); |
vshymanskyy | 0:58b20b438383 | 151 | if (handler && (handler != BlynkWidgetWrite)) { |
vshymanskyy | 0:58b20b438383 | 152 | handler(req, param2); |
vshymanskyy | 0:58b20b438383 | 153 | } else { |
vshymanskyy | 0:58b20b438383 | 154 | BlynkWidgetWriteDefault(req, param2); |
vshymanskyy | 0:58b20b438383 | 155 | } |
vshymanskyy | 0:58b20b438383 | 156 | } break; |
vshymanskyy | 0:58b20b438383 | 157 | default: |
vshymanskyy | 0:58b20b438383 | 158 | BLYNK_LOG2(BLYNK_F("Invalid HW cmd: "), cmd); |
Volodymyr Shymanskyy |
14:76d8fd871a4d | 159 | static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_RESPONSE, static_cast<Proto*>(this)->msgIdOutOverride, NULL, BLYNK_ILLEGAL_COMMAND); |
vshymanskyy | 0:58b20b438383 | 160 | } |
vshymanskyy | 0:58b20b438383 | 161 | } |
vshymanskyy | 0:58b20b438383 | 162 | |
vshymanskyy | 0:58b20b438383 | 163 | #endif |