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:
vshymanskyy
Date:
Fri Jan 26 22:18:19 2018 +0000
Revision:
22:e1d3971fd902
Parent:
19:bae78e167b11
Fix BlynkSystemInit for MBED

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vshymanskyy 0:58b20b438383 1 /**
vshymanskyy 0:58b20b438383 2 * @file BlynkDebug.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 Debug utilities
vshymanskyy 0:58b20b438383 8 *
vshymanskyy 0:58b20b438383 9 */
vshymanskyy 0:58b20b438383 10
vshymanskyy 0:58b20b438383 11 #ifndef BlynkDebug_h
vshymanskyy 0:58b20b438383 12 #define BlynkDebug_h
vshymanskyy 0:58b20b438383 13
vshymanskyy 0:58b20b438383 14 #include <Blynk/BlynkConfig.h>
Volodymyr Shymanskyy 15:975b60f7a8ff 15
vshymanskyy 0:58b20b438383 16 #include <stddef.h>
vshymanskyy 0:58b20b438383 17 #ifdef ESP8266
vshymanskyy 0:58b20b438383 18 extern "C" {
vshymanskyy 0:58b20b438383 19 #include "ets_sys.h"
vshymanskyy 0:58b20b438383 20 #include "os_type.h"
vshymanskyy 0:58b20b438383 21 #include "mem.h"
vshymanskyy 0:58b20b438383 22 }
vshymanskyy 0:58b20b438383 23 #else
vshymanskyy 0:58b20b438383 24 #include <inttypes.h>
vshymanskyy 0:58b20b438383 25 #endif
vshymanskyy 0:58b20b438383 26
vshymanskyy 0:58b20b438383 27 #if defined(ARDUINO_ARCH_ARC32)
vshymanskyy 0:58b20b438383 28 typedef uint64_t millis_time_t;
vshymanskyy 0:58b20b438383 29 #else
vshymanskyy 0:58b20b438383 30 typedef uint32_t millis_time_t;
vshymanskyy 0:58b20b438383 31 #endif
vshymanskyy 0:58b20b438383 32
vshymanskyy 22:e1d3971fd902 33 void BlynkSystemInit();
Volodymyr Shymanskyy 15:975b60f7a8ff 34 void BlynkDelay(millis_time_t ms);
Volodymyr Shymanskyy 15:975b60f7a8ff 35 millis_time_t BlynkMillis();
Volodymyr Shymanskyy 15:975b60f7a8ff 36 size_t BlynkFreeRam();
Volodymyr Shymanskyy 15:975b60f7a8ff 37 void BlynkReset() BLYNK_NORETURN;
Volodymyr Shymanskyy 15:975b60f7a8ff 38 void BlynkFatal() BLYNK_NORETURN;
Volodymyr Shymanskyy 15:975b60f7a8ff 39
Volodymyr Shymanskyy 15:975b60f7a8ff 40
vshymanskyy 0:58b20b438383 41 #if defined(SPARK) || defined(PARTICLE)
vshymanskyy 0:58b20b438383 42 #include "application.h"
vshymanskyy 0:58b20b438383 43 #endif
vshymanskyy 0:58b20b438383 44
vshymanskyy 0:58b20b438383 45 #if defined(ARDUINO)
vshymanskyy 0:58b20b438383 46 #if ARDUINO >= 100
Volodymyr Shymanskyy 9:7369ec77a3ea 47 #include <Arduino.h>
vshymanskyy 0:58b20b438383 48 #else
Volodymyr Shymanskyy 9:7369ec77a3ea 49 #include <WProgram.h>
vshymanskyy 0:58b20b438383 50 #endif
vshymanskyy 0:58b20b438383 51 #endif
vshymanskyy 0:58b20b438383 52
Volodymyr Shymanskyy 13:ed6276c0afb7 53 #if defined(LINUX)
Volodymyr Shymanskyy 13:ed6276c0afb7 54 #if defined(RASPBERRY)
Volodymyr Shymanskyy 13:ed6276c0afb7 55 #include <wiringPi.h>
Volodymyr Shymanskyy 13:ed6276c0afb7 56 #endif
Volodymyr Shymanskyy 13:ed6276c0afb7 57 #endif
Volodymyr Shymanskyy 13:ed6276c0afb7 58
Volodymyr Shymanskyy 9:7369ec77a3ea 59 #if !defined(BLYNK_RUN_YIELD)
Volodymyr Shymanskyy 9:7369ec77a3ea 60 #if defined(BLYNK_NO_YIELD)
Volodymyr Shymanskyy 9:7369ec77a3ea 61 #define BLYNK_RUN_YIELD() {}
Volodymyr Shymanskyy 9:7369ec77a3ea 62 #elif defined(SPARK) || defined(PARTICLE)
Volodymyr Shymanskyy 9:7369ec77a3ea 63 #define BLYNK_RUN_YIELD() { Particle.process(); }
Volodymyr Shymanskyy 14:76d8fd871a4d 64 #elif !defined(ARDUINO) || (ARDUINO < 151)
Volodymyr Shymanskyy 14:76d8fd871a4d 65 #define BLYNK_RUN_YIELD() {}
Volodymyr Shymanskyy 9:7369ec77a3ea 66 #else
Volodymyr Shymanskyy 15:975b60f7a8ff 67 #define BLYNK_RUN_YIELD() { BlynkDelay(0); }
Volodymyr Shymanskyy 9:7369ec77a3ea 68 #endif
Volodymyr Shymanskyy 9:7369ec77a3ea 69 #endif
vshymanskyy 0:58b20b438383 70
vshymanskyy 0:58b20b438383 71 #if defined(__AVR__)
vshymanskyy 0:58b20b438383 72 #include <avr/pgmspace.h>
vshymanskyy 0:58b20b438383 73 #define BLYNK_HAS_PROGMEM
vshymanskyy 0:58b20b438383 74 #define BLYNK_PROGMEM PROGMEM
vshymanskyy 0:58b20b438383 75 #define BLYNK_F(s) F(s)
vshymanskyy 0:58b20b438383 76 #define BLYNK_PSTR(s) PSTR(s)
vshymanskyy 0:58b20b438383 77 #else
vshymanskyy 0:58b20b438383 78 #define BLYNK_PROGMEM
vshymanskyy 0:58b20b438383 79 #define BLYNK_F(s) s
vshymanskyy 0:58b20b438383 80 #define BLYNK_PSTR(s) s
vshymanskyy 0:58b20b438383 81 #endif
vshymanskyy 0:58b20b438383 82
Volodymyr Shymanskyy 9:7369ec77a3ea 83 #ifdef ARDUINO_AVR_DIGISPARK
Volodymyr Shymanskyy 9:7369ec77a3ea 84 typedef fstr_t __FlashStringHelper;
Volodymyr Shymanskyy 9:7369ec77a3ea 85 #endif
Volodymyr Shymanskyy 9:7369ec77a3ea 86
Volodymyr Shymanskyy 9:7369ec77a3ea 87 #if defined(BLYNK_DEBUG_ALL) && !(__cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__))
Volodymyr Shymanskyy 9:7369ec77a3ea 88 #warning "Compiler features not enabled -> please contact yor board vendor to enable c++0x"
vshymanskyy 0:58b20b438383 89 #endif
vshymanskyy 0:58b20b438383 90
vshymanskyy 0:58b20b438383 91 // Diagnostic defines
vshymanskyy 0:58b20b438383 92
vshymanskyy 0:58b20b438383 93 #define BLYNK_FATAL(msg) { BLYNK_LOG1(msg); BlynkFatal(); }
vshymanskyy 0:58b20b438383 94 #define BLYNK_LOG_RAM() { BLYNK_LOG2(BLYNK_F("Free RAM: "), BlynkFreeRam()); }
vshymanskyy 0:58b20b438383 95 #define BLYNK_LOG_FN() BLYNK_LOG3(BLYNK_F(__FUNCTION__), '@', __LINE__);
vshymanskyy 0:58b20b438383 96 #define BLYNK_LOG_TROUBLE(t) BLYNK_LOG2(BLYNK_F("Trouble detected: http://docs.blynk.cc/#troubleshooting-"), t)
vshymanskyy 0:58b20b438383 97
vshymanskyy 0:58b20b438383 98 #ifndef BLYNK_PRINT
vshymanskyy 0:58b20b438383 99 #undef BLYNK_DEBUG
vshymanskyy 0:58b20b438383 100 #endif
vshymanskyy 0:58b20b438383 101
Volodymyr Shymanskyy 19:bae78e167b11 102 #ifdef BLYNK_DEBUG_ALL
Volodymyr Shymanskyy 19:bae78e167b11 103 #define BLYNK_DEBUG
Volodymyr Shymanskyy 19:bae78e167b11 104 #endif
Volodymyr Shymanskyy 19:bae78e167b11 105
vshymanskyy 0:58b20b438383 106 #ifdef BLYNK_PRINT
vshymanskyy 0:58b20b438383 107
vshymanskyy 0:58b20b438383 108 #if defined(ARDUINO) || defined(SPARK) || defined(PARTICLE)
vshymanskyy 0:58b20b438383 109
vshymanskyy 0:58b20b438383 110 #if defined(ARDUINO_ARCH_ARC32)
vshymanskyy 0:58b20b438383 111 // This will cause error - on purpose
vshymanskyy 0:58b20b438383 112 #define BLYNK_LOG(msg, ...) BLYNK_LOG_UNAVAILABLE(msg, ##__VA_ARGS__)
vshymanskyy 0:58b20b438383 113 #else
vshymanskyy 0:58b20b438383 114 #define BLYNK_LOG(msg, ...) blynk_dbg_print(BLYNK_PSTR(msg), ##__VA_ARGS__)
vshymanskyy 0:58b20b438383 115 #endif
vshymanskyy 0:58b20b438383 116
vshymanskyy 0:58b20b438383 117 #define BLYNK_LOG1(p1) { BLYNK_LOG_TIME(); BLYNK_PRINT.println(p1); }
vshymanskyy 0:58b20b438383 118 #define BLYNK_LOG2(p1,p2) { BLYNK_LOG_TIME(); BLYNK_PRINT.print(p1); BLYNK_PRINT.println(p2); }
vshymanskyy 0:58b20b438383 119 #define BLYNK_LOG3(p1,p2,p3) { BLYNK_LOG_TIME(); BLYNK_PRINT.print(p1); BLYNK_PRINT.print(p2); BLYNK_PRINT.println(p3); }
vshymanskyy 0:58b20b438383 120 #define BLYNK_LOG4(p1,p2,p3,p4) { BLYNK_LOG_TIME(); BLYNK_PRINT.print(p1); BLYNK_PRINT.print(p2); BLYNK_PRINT.print(p3); BLYNK_PRINT.println(p4); }
vshymanskyy 0:58b20b438383 121 #define BLYNK_LOG6(p1,p2,p3,p4,p5,p6) { BLYNK_LOG_TIME(); BLYNK_PRINT.print(p1); BLYNK_PRINT.print(p2); BLYNK_PRINT.print(p3); BLYNK_PRINT.print(p4); BLYNK_PRINT.print(p5); BLYNK_PRINT.println(p6); }
vshymanskyy 0:58b20b438383 122 #define BLYNK_LOG_IP(msg, ip) { BLYNK_LOG_TIME(); BLYNK_PRINT.print(BLYNK_F(msg)); \
vshymanskyy 0:58b20b438383 123 BLYNK_PRINT.print(ip[0]); BLYNK_PRINT.print('.'); \
vshymanskyy 0:58b20b438383 124 BLYNK_PRINT.print(ip[1]); BLYNK_PRINT.print('.'); \
vshymanskyy 0:58b20b438383 125 BLYNK_PRINT.print(ip[2]); BLYNK_PRINT.print('.'); \
vshymanskyy 0:58b20b438383 126 BLYNK_PRINT.println(ip[3]); }
vshymanskyy 0:58b20b438383 127 #define BLYNK_LOG_IP_REV(msg, ip) { BLYNK_LOG_TIME(); BLYNK_PRINT.print(BLYNK_F(msg)); \
vshymanskyy 0:58b20b438383 128 BLYNK_PRINT.print(ip[3]); BLYNK_PRINT.print('.'); \
vshymanskyy 0:58b20b438383 129 BLYNK_PRINT.print(ip[2]); BLYNK_PRINT.print('.'); \
vshymanskyy 0:58b20b438383 130 BLYNK_PRINT.print(ip[1]); BLYNK_PRINT.print('.'); \
vshymanskyy 0:58b20b438383 131 BLYNK_PRINT.println(ip[0]); }
vshymanskyy 0:58b20b438383 132
vshymanskyy 0:58b20b438383 133 static
vshymanskyy 0:58b20b438383 134 void BLYNK_LOG_TIME() {
vshymanskyy 0:58b20b438383 135 BLYNK_PRINT.print('[');
Volodymyr Shymanskyy 15:975b60f7a8ff 136 BLYNK_PRINT.print(BlynkMillis());
vshymanskyy 0:58b20b438383 137 BLYNK_PRINT.print(BLYNK_F("] "));
vshymanskyy 0:58b20b438383 138 }
vshymanskyy 0:58b20b438383 139
vshymanskyy 0:58b20b438383 140 #ifdef BLYNK_DEBUG
vshymanskyy 0:58b20b438383 141 #include <ctype.h>
vshymanskyy 0:58b20b438383 142 #define BLYNK_DBG_BREAK() { for(;;); }
vshymanskyy 0:58b20b438383 143 #define BLYNK_ASSERT(expr) { if(!(expr)) { BLYNK_LOG2(BLYNK_F("Assertion failed: "), BLYNK_F(#expr)); BLYNK_DBG_BREAK() } }
vshymanskyy 0:58b20b438383 144
vshymanskyy 0:58b20b438383 145 static
vshymanskyy 0:58b20b438383 146 void BLYNK_DBG_DUMP(const char* msg, const void* addr, size_t len) {
vshymanskyy 0:58b20b438383 147 if (len) {
vshymanskyy 0:58b20b438383 148 BLYNK_LOG_TIME();
vshymanskyy 0:58b20b438383 149 BLYNK_PRINT.print(msg);
vshymanskyy 0:58b20b438383 150 int l2 = len;
vshymanskyy 0:58b20b438383 151 const uint8_t* octets = (const uint8_t*)addr;
vshymanskyy 0:58b20b438383 152 bool prev_print = true;
vshymanskyy 0:58b20b438383 153 while (l2--) {
vshymanskyy 0:58b20b438383 154 const uint8_t c = *octets++ & 0xFF;
Volodymyr Shymanskyy 13:ed6276c0afb7 155 if (c >= 32 && c < 127) {
vshymanskyy 0:58b20b438383 156 if (!prev_print) { BLYNK_PRINT.print(']'); }
vshymanskyy 0:58b20b438383 157 BLYNK_PRINT.print((char)c);
vshymanskyy 0:58b20b438383 158 prev_print = true;
vshymanskyy 0:58b20b438383 159 } else {
vshymanskyy 0:58b20b438383 160 BLYNK_PRINT.print(prev_print?'[':'|');
vshymanskyy 0:58b20b438383 161 if (c < 0x10) { BLYNK_PRINT.print('0'); }
vshymanskyy 0:58b20b438383 162 BLYNK_PRINT.print(c, HEX);
vshymanskyy 0:58b20b438383 163 prev_print = false;
vshymanskyy 0:58b20b438383 164 }
vshymanskyy 0:58b20b438383 165 }
Volodymyr Shymanskyy 9:7369ec77a3ea 166 if (!prev_print) {
Volodymyr Shymanskyy 9:7369ec77a3ea 167 BLYNK_PRINT.print(']');
Volodymyr Shymanskyy 9:7369ec77a3ea 168 }
Volodymyr Shymanskyy 3:31e4b850b126 169 BLYNK_PRINT.println();
vshymanskyy 0:58b20b438383 170 }
vshymanskyy 0:58b20b438383 171 }
vshymanskyy 0:58b20b438383 172 #endif
vshymanskyy 0:58b20b438383 173
vshymanskyy 0:58b20b438383 174 #if !defined(ARDUINO_ARCH_ARC32)
vshymanskyy 0:58b20b438383 175 #include <stdio.h>
vshymanskyy 0:58b20b438383 176 #include <stdarg.h>
vshymanskyy 0:58b20b438383 177
Volodymyr Shymanskyy 7:8879692d4e6c 178 BLYNK_UNUSED
vshymanskyy 0:58b20b438383 179 void blynk_dbg_print(const char* BLYNK_PROGMEM fmt, ...)
vshymanskyy 0:58b20b438383 180 {
vshymanskyy 0:58b20b438383 181 va_list ap;
vshymanskyy 0:58b20b438383 182 va_start(ap, fmt);
vshymanskyy 0:58b20b438383 183 char buff[128];
vshymanskyy 0:58b20b438383 184 BLYNK_PRINT.print('[');
Volodymyr Shymanskyy 15:975b60f7a8ff 185 BLYNK_PRINT.print(BlynkMillis());
Volodymyr Shymanskyy 7:8879692d4e6c 186 BLYNK_PRINT.print(BLYNK_F("] "));
vshymanskyy 0:58b20b438383 187 #if defined(__AVR__)
vshymanskyy 0:58b20b438383 188 vsnprintf_P(buff, sizeof(buff), fmt, ap);
vshymanskyy 0:58b20b438383 189 #else
vshymanskyy 0:58b20b438383 190 vsnprintf(buff, sizeof(buff), fmt, ap);
vshymanskyy 0:58b20b438383 191 #endif
vshymanskyy 0:58b20b438383 192 BLYNK_PRINT.println(buff);
vshymanskyy 0:58b20b438383 193 va_end(ap);
vshymanskyy 0:58b20b438383 194 }
vshymanskyy 0:58b20b438383 195 #endif // ARDUINO_ARCH_ARC32
Volodymyr Shymanskyy 2:c5b857d4f9f6 196
Volodymyr Shymanskyy 16:6d9bf99b263c 197 #elif defined(__MBED__)
Volodymyr Shymanskyy 9:7369ec77a3ea 198
Volodymyr Shymanskyy 15:975b60f7a8ff 199 #define BLYNK_LOG(msg, ...) { BLYNK_PRINT.printf("[%ld] " msg "\n", BlynkMillis(), ##__VA_ARGS__); }
Volodymyr Shymanskyy 15:975b60f7a8ff 200 #define BLYNK_LOG1(p1) { BLYNK_LOG(p1);}
Volodymyr Shymanskyy 15:975b60f7a8ff 201 #define BLYNK_LOG2(p1,p2) { BLYNK_LOG(p1,p2);}
Volodymyr Shymanskyy 15:975b60f7a8ff 202 #define BLYNK_LOG3(p1,p2,p3) { BLYNK_LOG(p1,p2,p3);}
Volodymyr Shymanskyy 15:975b60f7a8ff 203 #define BLYNK_LOG4(p1,p2,p3,p4) { BLYNK_LOG(p1,p2,p3,p4);}
Volodymyr Shymanskyy 15:975b60f7a8ff 204 #define BLYNK_LOG6(p1,p2,p3,p4,p5,p6) { BLYNK_LOG(p1,p2,p3,p4,p5,p6);}
Volodymyr Shymanskyy 15:975b60f7a8ff 205
Volodymyr Shymanskyy 15:975b60f7a8ff 206 #define BLYNK_LOG_TIME() BLYNK_PRINT.printf("[%ld]", BlynkMillis());
Volodymyr Shymanskyy 15:975b60f7a8ff 207
Volodymyr Shymanskyy 15:975b60f7a8ff 208 #ifdef BLYNK_DEBUG
Volodymyr Shymanskyy 15:975b60f7a8ff 209 #define BLYNK_DBG_BREAK() raise(SIGTRAP);
Volodymyr Shymanskyy 15:975b60f7a8ff 210 #define BLYNK_ASSERT(expr) assert(expr)
Volodymyr Shymanskyy 15:975b60f7a8ff 211
Volodymyr Shymanskyy 15:975b60f7a8ff 212 static
Volodymyr Shymanskyy 15:975b60f7a8ff 213 void BLYNK_DBG_DUMP(const char* msg, const void* addr, size_t len) {
Volodymyr Shymanskyy 15:975b60f7a8ff 214 BLYNK_LOG_TIME();
Volodymyr Shymanskyy 15:975b60f7a8ff 215 BLYNK_PRINT.printf(msg);
Volodymyr Shymanskyy 15:975b60f7a8ff 216 int l2 = len;
Volodymyr Shymanskyy 15:975b60f7a8ff 217 const uint8_t* octets = (const uint8_t*)addr;
Volodymyr Shymanskyy 15:975b60f7a8ff 218 bool prev_print = true;
Volodymyr Shymanskyy 15:975b60f7a8ff 219 while (l2--) {
Volodymyr Shymanskyy 15:975b60f7a8ff 220 const uint8_t c = *octets++ & 0xFF;
Volodymyr Shymanskyy 18:c328c1a97f90 221 if (c >= 32 && c < 127) {
Volodymyr Shymanskyy 15:975b60f7a8ff 222 if (!prev_print) { BLYNK_PRINT.putc(']'); }
Volodymyr Shymanskyy 15:975b60f7a8ff 223 BLYNK_PRINT.putc((char)c);
Volodymyr Shymanskyy 15:975b60f7a8ff 224 prev_print = true;
Volodymyr Shymanskyy 15:975b60f7a8ff 225 } else {
Volodymyr Shymanskyy 15:975b60f7a8ff 226 BLYNK_PRINT.putc(prev_print?'[':'|');
Volodymyr Shymanskyy 15:975b60f7a8ff 227 BLYNK_PRINT.printf("%02x", c);
Volodymyr Shymanskyy 15:975b60f7a8ff 228 prev_print = false;
Volodymyr Shymanskyy 15:975b60f7a8ff 229 }
Volodymyr Shymanskyy 15:975b60f7a8ff 230 }
Volodymyr Shymanskyy 15:975b60f7a8ff 231 BLYNK_PRINT.printf("%s\n", prev_print?"":"]");
Volodymyr Shymanskyy 15:975b60f7a8ff 232 }
Volodymyr Shymanskyy 15:975b60f7a8ff 233 #endif
vshymanskyy 6:b942afadf9be 234
vshymanskyy 4:fa1450a7dd08 235 #elif defined(LINUX)
vshymanskyy 0:58b20b438383 236
vshymanskyy 0:58b20b438383 237 #include <assert.h>
vshymanskyy 0:58b20b438383 238 #include <stdio.h>
vshymanskyy 0:58b20b438383 239 #include <string.h>
vshymanskyy 0:58b20b438383 240 #include <errno.h>
vshymanskyy 0:58b20b438383 241 #include <signal.h>
vshymanskyy 0:58b20b438383 242
vshymanskyy 0:58b20b438383 243 #include <iostream>
vshymanskyy 0:58b20b438383 244 using namespace std;
Volodymyr Shymanskyy 15:975b60f7a8ff 245 #define BLYNK_LOG(msg, ...) { fprintf(BLYNK_PRINT, "[%ld] " msg "\n", BlynkMillis(), ##__VA_ARGS__); }
vshymanskyy 0:58b20b438383 246 #define BLYNK_LOG1(p1) { BLYNK_LOG_TIME(); cout << p1 << endl; }
vshymanskyy 0:58b20b438383 247 #define BLYNK_LOG2(p1,p2) { BLYNK_LOG_TIME(); cout << p1 << p2 << endl; }
vshymanskyy 0:58b20b438383 248 #define BLYNK_LOG3(p1,p2,p3) { BLYNK_LOG_TIME(); cout << p1 << p2 << p3 << endl; }
vshymanskyy 0:58b20b438383 249 #define BLYNK_LOG4(p1,p2,p3,p4) { BLYNK_LOG_TIME(); cout << p1 << p2 << p3 << p4 << endl; }
vshymanskyy 0:58b20b438383 250 #define BLYNK_LOG6(p1,p2,p3,p4,p5,p6) { BLYNK_LOG_TIME(); cout << p1 << p2 << p3 << p4 << p5 << p6 << endl; }
vshymanskyy 0:58b20b438383 251
Volodymyr Shymanskyy 15:975b60f7a8ff 252 #define BLYNK_LOG_TIME() cout << '[' << BlynkMillis() << "] ";
vshymanskyy 0:58b20b438383 253
vshymanskyy 0:58b20b438383 254 #ifdef BLYNK_DEBUG
vshymanskyy 0:58b20b438383 255 #define BLYNK_DBG_BREAK() raise(SIGTRAP);
vshymanskyy 0:58b20b438383 256 #define BLYNK_ASSERT(expr) assert(expr)
vshymanskyy 0:58b20b438383 257
vshymanskyy 0:58b20b438383 258 static
vshymanskyy 0:58b20b438383 259 void BLYNK_DBG_DUMP(const char* msg, const void* addr, size_t len) {
vshymanskyy 0:58b20b438383 260 BLYNK_LOG_TIME();
Volodymyr Shymanskyy 18:c328c1a97f90 261 fprintf(BLYNK_PRINT, "%s", msg);
vshymanskyy 0:58b20b438383 262 int l2 = len;
vshymanskyy 0:58b20b438383 263 const uint8_t* octets = (const uint8_t*)addr;
vshymanskyy 0:58b20b438383 264 bool prev_print = true;
vshymanskyy 0:58b20b438383 265 while (l2--) {
vshymanskyy 0:58b20b438383 266 const uint8_t c = *octets++ & 0xFF;
Volodymyr Shymanskyy 18:c328c1a97f90 267 if (c >= 32 && c < 127) {
vshymanskyy 0:58b20b438383 268 if (!prev_print) { fputc(']', BLYNK_PRINT); }
vshymanskyy 0:58b20b438383 269 fputc((char)c, BLYNK_PRINT);
vshymanskyy 0:58b20b438383 270 prev_print = true;
vshymanskyy 0:58b20b438383 271 } else {
vshymanskyy 0:58b20b438383 272 fputc(prev_print?'[':'|', BLYNK_PRINT);
vshymanskyy 0:58b20b438383 273 fprintf(BLYNK_PRINT, "%02x", c);
vshymanskyy 0:58b20b438383 274 prev_print = false;
vshymanskyy 0:58b20b438383 275 }
vshymanskyy 0:58b20b438383 276 }
vshymanskyy 0:58b20b438383 277 fprintf(BLYNK_PRINT, "%s\n", prev_print?"":"]");
vshymanskyy 0:58b20b438383 278 }
vshymanskyy 0:58b20b438383 279 #endif
vshymanskyy 0:58b20b438383 280
vshymanskyy 0:58b20b438383 281 #else
vshymanskyy 0:58b20b438383 282
Volodymyr Shymanskyy 9:7369ec77a3ea 283 #warning "Cannot detect platform"
vshymanskyy 0:58b20b438383 284
vshymanskyy 0:58b20b438383 285 #endif
vshymanskyy 0:58b20b438383 286
vshymanskyy 0:58b20b438383 287 #endif
vshymanskyy 0:58b20b438383 288
vshymanskyy 0:58b20b438383 289 #ifndef BLYNK_LOG
vshymanskyy 0:58b20b438383 290 #define BLYNK_LOG(...)
vshymanskyy 0:58b20b438383 291 #define BLYNK_LOG1(p1)
vshymanskyy 0:58b20b438383 292 #define BLYNK_LOG2(p1,p2)
vshymanskyy 0:58b20b438383 293 #define BLYNK_LOG3(p1,p2,p3)
vshymanskyy 0:58b20b438383 294 #define BLYNK_LOG4(p1,p2,p3,p4)
vshymanskyy 0:58b20b438383 295 #define BLYNK_LOG6(p1,p2,p3,p4,p5,p6)
vshymanskyy 0:58b20b438383 296 #define BLYNK_LOG_IP(msg, ip)
vshymanskyy 0:58b20b438383 297 #define BLYNK_LOG_IP_REV(msg, ip)
vshymanskyy 0:58b20b438383 298 #endif
vshymanskyy 0:58b20b438383 299
vshymanskyy 0:58b20b438383 300 #ifndef BLYNK_DBG_BREAK
vshymanskyy 0:58b20b438383 301 #define BLYNK_DBG_BREAK()
vshymanskyy 0:58b20b438383 302 #define BLYNK_ASSERT(expr)
vshymanskyy 0:58b20b438383 303 #define BLYNK_DBG_DUMP(msg, addr, len)
vshymanskyy 0:58b20b438383 304 #endif
vshymanskyy 0:58b20b438383 305
vshymanskyy 0:58b20b438383 306 #endif