Work on LPC824. 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:   ESP8266BlynkWeatherStation TEST123

Fork of Blynk by Volodymyr Shymanskyy

Committer:
lixianyu
Date:
Thu Jun 16 08:06:28 2016 +0000
Revision:
2:1538810a5d87
Parent:
0:58b20b438383
?9600?????ESP8266????????115200??ESP8266???????9600?????????????????Timer?????

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>
vshymanskyy 0:58b20b438383 15 #include <stddef.h>
vshymanskyy 0:58b20b438383 16 #ifdef ESP8266
lixianyu 2:1538810a5d87 17 extern "C" {
lixianyu 2:1538810a5d87 18 #include "ets_sys.h"
lixianyu 2:1538810a5d87 19 #include "os_type.h"
lixianyu 2:1538810a5d87 20 #include "mem.h"
lixianyu 2:1538810a5d87 21 }
vshymanskyy 0:58b20b438383 22 #else
lixianyu 2:1538810a5d87 23 #include <inttypes.h>
vshymanskyy 0:58b20b438383 24 #endif
vshymanskyy 0:58b20b438383 25
vshymanskyy 0:58b20b438383 26 #if defined(ARDUINO_ARCH_ARC32)
lixianyu 2:1538810a5d87 27 typedef uint64_t millis_time_t;
vshymanskyy 0:58b20b438383 28 #else
lixianyu 2:1538810a5d87 29 typedef uint32_t millis_time_t;
vshymanskyy 0:58b20b438383 30 #endif
vshymanskyy 0:58b20b438383 31
vshymanskyy 0:58b20b438383 32 #if defined(SPARK) || defined(PARTICLE)
lixianyu 2:1538810a5d87 33 #include "application.h"
vshymanskyy 0:58b20b438383 34 #endif
vshymanskyy 0:58b20b438383 35
vshymanskyy 0:58b20b438383 36 #if defined(ARDUINO)
lixianyu 2:1538810a5d87 37 #if ARDUINO >= 100
lixianyu 2:1538810a5d87 38 #include "Arduino.h"
lixianyu 2:1538810a5d87 39 #else
lixianyu 2:1538810a5d87 40 #include "WProgram.h"
lixianyu 2:1538810a5d87 41 #endif
vshymanskyy 0:58b20b438383 42 #endif
vshymanskyy 0:58b20b438383 43
vshymanskyy 0:58b20b438383 44 #if !defined(ARDUINO) || (ARDUINO < 151)
lixianyu 2:1538810a5d87 45 #define BLYNK_NO_YIELD
vshymanskyy 0:58b20b438383 46 #endif
vshymanskyy 0:58b20b438383 47
vshymanskyy 0:58b20b438383 48 // General defines
vshymanskyy 0:58b20b438383 49
vshymanskyy 0:58b20b438383 50 #define STRINGIFY(x) #x
vshymanskyy 0:58b20b438383 51 #define TOSTRING(x) STRINGIFY(x)
vshymanskyy 0:58b20b438383 52 #define COUNT_OF(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x])))))
vshymanskyy 0:58b20b438383 53 #define BLYNK_ATTR_PACKED __attribute__ ((__packed__))
vshymanskyy 0:58b20b438383 54 #define BLYNK_NORETURN __attribute__ ((noreturn))
vshymanskyy 0:58b20b438383 55
vshymanskyy 0:58b20b438383 56 // Causes problems on some platforms
vshymanskyy 0:58b20b438383 57 #define BLYNK_FORCE_INLINE inline //__attribute__((always_inline))
vshymanskyy 0:58b20b438383 58
vshymanskyy 0:58b20b438383 59 #if defined(__AVR__)
lixianyu 2:1538810a5d87 60 #include <avr/pgmspace.h>
lixianyu 2:1538810a5d87 61 #define BLYNK_HAS_PROGMEM
lixianyu 2:1538810a5d87 62 #define BLYNK_PROGMEM PROGMEM
lixianyu 2:1538810a5d87 63 #define BLYNK_F(s) F(s)
lixianyu 2:1538810a5d87 64 #define BLYNK_PSTR(s) PSTR(s)
vshymanskyy 0:58b20b438383 65 #else
lixianyu 2:1538810a5d87 66 #define BLYNK_PROGMEM
lixianyu 2:1538810a5d87 67 #define BLYNK_F(s) s
lixianyu 2:1538810a5d87 68 #define BLYNK_PSTR(s) s
vshymanskyy 0:58b20b438383 69 #endif
vshymanskyy 0:58b20b438383 70
vshymanskyy 0:58b20b438383 71 #ifndef LED_BUILTIN
vshymanskyy 0:58b20b438383 72 # define LED_BUILTIN 2
vshymanskyy 0:58b20b438383 73 #endif
vshymanskyy 0:58b20b438383 74
vshymanskyy 0:58b20b438383 75 // Diagnostic defines
vshymanskyy 0:58b20b438383 76
vshymanskyy 0:58b20b438383 77 size_t BlynkFreeRam();
vshymanskyy 0:58b20b438383 78 void BlynkReset() BLYNK_NORETURN;
vshymanskyy 0:58b20b438383 79 void BlynkFatal() BLYNK_NORETURN;
vshymanskyy 0:58b20b438383 80
vshymanskyy 0:58b20b438383 81 #define BLYNK_FATAL(msg) { BLYNK_LOG1(msg); BlynkFatal(); }
vshymanskyy 0:58b20b438383 82 #define BLYNK_LOG_RAM() { BLYNK_LOG2(BLYNK_F("Free RAM: "), BlynkFreeRam()); }
vshymanskyy 0:58b20b438383 83 #define BLYNK_LOG_FN() BLYNK_LOG3(BLYNK_F(__FUNCTION__), '@', __LINE__);
vshymanskyy 0:58b20b438383 84 #define BLYNK_LOG_TROUBLE(t) BLYNK_LOG2(BLYNK_F("Trouble detected: http://docs.blynk.cc/#troubleshooting-"), t)
vshymanskyy 0:58b20b438383 85
vshymanskyy 0:58b20b438383 86 #ifndef BLYNK_PRINT
vshymanskyy 0:58b20b438383 87 #undef BLYNK_DEBUG
vshymanskyy 0:58b20b438383 88 #endif
vshymanskyy 0:58b20b438383 89
vshymanskyy 0:58b20b438383 90 #ifdef BLYNK_PRINT
vshymanskyy 0:58b20b438383 91
lixianyu 2:1538810a5d87 92 #if defined(ARDUINO) || defined(SPARK) || defined(PARTICLE)
vshymanskyy 0:58b20b438383 93
vshymanskyy 0:58b20b438383 94 #if defined(ARDUINO_ARCH_ARC32)
lixianyu 2:1538810a5d87 95 // This will cause error - on purpose
lixianyu 2:1538810a5d87 96 #define BLYNK_LOG(msg, ...) BLYNK_LOG_UNAVAILABLE(msg, ##__VA_ARGS__)
vshymanskyy 0:58b20b438383 97 #else
lixianyu 2:1538810a5d87 98 #define BLYNK_LOG(msg, ...) blynk_dbg_print(BLYNK_PSTR(msg), ##__VA_ARGS__)
vshymanskyy 0:58b20b438383 99 #endif
vshymanskyy 0:58b20b438383 100
lixianyu 2:1538810a5d87 101 #define BLYNK_LOG1(p1) { BLYNK_LOG_TIME(); BLYNK_PRINT.println(p1); }
lixianyu 2:1538810a5d87 102 #define BLYNK_LOG2(p1,p2) { BLYNK_LOG_TIME(); BLYNK_PRINT.print(p1); BLYNK_PRINT.println(p2); }
lixianyu 2:1538810a5d87 103 #define BLYNK_LOG3(p1,p2,p3) { BLYNK_LOG_TIME(); BLYNK_PRINT.print(p1); BLYNK_PRINT.print(p2); BLYNK_PRINT.println(p3); }
lixianyu 2:1538810a5d87 104 #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); }
lixianyu 2:1538810a5d87 105 #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); }
lixianyu 2:1538810a5d87 106 #define BLYNK_LOG_IP(msg, ip) { BLYNK_LOG_TIME(); BLYNK_PRINT.print(BLYNK_F(msg)); \
vshymanskyy 0:58b20b438383 107 BLYNK_PRINT.print(ip[0]); BLYNK_PRINT.print('.'); \
vshymanskyy 0:58b20b438383 108 BLYNK_PRINT.print(ip[1]); BLYNK_PRINT.print('.'); \
vshymanskyy 0:58b20b438383 109 BLYNK_PRINT.print(ip[2]); BLYNK_PRINT.print('.'); \
vshymanskyy 0:58b20b438383 110 BLYNK_PRINT.println(ip[3]); }
lixianyu 2:1538810a5d87 111 #define BLYNK_LOG_IP_REV(msg, ip) { BLYNK_LOG_TIME(); BLYNK_PRINT.print(BLYNK_F(msg)); \
vshymanskyy 0:58b20b438383 112 BLYNK_PRINT.print(ip[3]); BLYNK_PRINT.print('.'); \
vshymanskyy 0:58b20b438383 113 BLYNK_PRINT.print(ip[2]); BLYNK_PRINT.print('.'); \
vshymanskyy 0:58b20b438383 114 BLYNK_PRINT.print(ip[1]); BLYNK_PRINT.print('.'); \
vshymanskyy 0:58b20b438383 115 BLYNK_PRINT.println(ip[0]); }
vshymanskyy 0:58b20b438383 116
lixianyu 2:1538810a5d87 117 static
lixianyu 2:1538810a5d87 118 void BLYNK_LOG_TIME()
lixianyu 2:1538810a5d87 119 {
lixianyu 2:1538810a5d87 120 BLYNK_PRINT.print('[');
lixianyu 2:1538810a5d87 121 BLYNK_PRINT.print(millis());
lixianyu 2:1538810a5d87 122 BLYNK_PRINT.print(BLYNK_F("] "));
lixianyu 2:1538810a5d87 123 }
vshymanskyy 0:58b20b438383 124
vshymanskyy 0:58b20b438383 125 #ifdef BLYNK_DEBUG
lixianyu 2:1538810a5d87 126 #include <ctype.h>
lixianyu 2:1538810a5d87 127 #define BLYNK_DBG_BREAK() { for(;;); }
lixianyu 2:1538810a5d87 128 #define BLYNK_ASSERT(expr) { if(!(expr)) { BLYNK_LOG2(BLYNK_F("Assertion failed: "), BLYNK_F(#expr)); BLYNK_DBG_BREAK() } }
vshymanskyy 0:58b20b438383 129
lixianyu 2:1538810a5d87 130 static
lixianyu 2:1538810a5d87 131 void BLYNK_DBG_DUMP(const char* msg, const void* addr, size_t len)
lixianyu 2:1538810a5d87 132 {
lixianyu 2:1538810a5d87 133 if (len) {
lixianyu 2:1538810a5d87 134 BLYNK_LOG_TIME();
lixianyu 2:1538810a5d87 135 BLYNK_PRINT.print(msg);
lixianyu 2:1538810a5d87 136 int l2 = len;
lixianyu 2:1538810a5d87 137 const uint8_t* octets = (const uint8_t*)addr;
lixianyu 2:1538810a5d87 138 bool prev_print = true;
lixianyu 2:1538810a5d87 139 while (l2--) {
lixianyu 2:1538810a5d87 140 const uint8_t c = *octets++ & 0xFF;
lixianyu 2:1538810a5d87 141 if (isprint(c)) {
lixianyu 2:1538810a5d87 142 if (!prev_print) {
lixianyu 2:1538810a5d87 143 BLYNK_PRINT.print(']');
vshymanskyy 0:58b20b438383 144 }
lixianyu 2:1538810a5d87 145 BLYNK_PRINT.print((char)c);
lixianyu 2:1538810a5d87 146 prev_print = true;
lixianyu 2:1538810a5d87 147 } else {
lixianyu 2:1538810a5d87 148 BLYNK_PRINT.print(prev_print?'[':'|');
lixianyu 2:1538810a5d87 149 if (c < 0x10) {
lixianyu 2:1538810a5d87 150 BLYNK_PRINT.print('0');
lixianyu 2:1538810a5d87 151 }
lixianyu 2:1538810a5d87 152 BLYNK_PRINT.print(c, HEX);
lixianyu 2:1538810a5d87 153 prev_print = false;
vshymanskyy 0:58b20b438383 154 }
vshymanskyy 0:58b20b438383 155 }
lixianyu 2:1538810a5d87 156 BLYNK_PRINT.println(prev_print?"":"]");
lixianyu 2:1538810a5d87 157 }
lixianyu 2:1538810a5d87 158 }
vshymanskyy 0:58b20b438383 159 #endif
vshymanskyy 0:58b20b438383 160
lixianyu 2:1538810a5d87 161 #if !defined(ARDUINO_ARCH_ARC32)
lixianyu 2:1538810a5d87 162 #include <stdio.h>
lixianyu 2:1538810a5d87 163 #include <stdarg.h>
lixianyu 2:1538810a5d87 164 static
lixianyu 2:1538810a5d87 165 void blynk_dbg_print(const char* BLYNK_PROGMEM fmt, ...)
lixianyu 2:1538810a5d87 166 {
lixianyu 2:1538810a5d87 167 va_list ap;
lixianyu 2:1538810a5d87 168 va_start(ap, fmt);
lixianyu 2:1538810a5d87 169 char buff[128];
lixianyu 2:1538810a5d87 170 BLYNK_PRINT.print('[');
lixianyu 2:1538810a5d87 171 BLYNK_PRINT.print(millis());
lixianyu 2:1538810a5d87 172 BLYNK_PRINT.print(F("] "));
vshymanskyy 0:58b20b438383 173 #if defined(__AVR__)
lixianyu 2:1538810a5d87 174 vsnprintf_P(buff, sizeof(buff), fmt, ap);
vshymanskyy 0:58b20b438383 175 #else
lixianyu 2:1538810a5d87 176 vsnprintf(buff, sizeof(buff), fmt, ap);
vshymanskyy 0:58b20b438383 177 #endif
lixianyu 2:1538810a5d87 178 BLYNK_PRINT.println(buff);
lixianyu 2:1538810a5d87 179 va_end(ap);
lixianyu 2:1538810a5d87 180 }
lixianyu 2:1538810a5d87 181 #endif // ARDUINO_ARCH_ARC32
lixianyu 2:1538810a5d87 182 /*#elif defined(MBED_LIBRARY_VERSION)
lixianyu 2:1538810a5d87 183 void delay(unsigned long ms);
lixianyu 2:1538810a5d87 184 unsigned long millis(void);
lixianyu 2:1538810a5d87 185 */
lixianyu 2:1538810a5d87 186 #elif defined(LINUX)
vshymanskyy 0:58b20b438383 187
lixianyu 2:1538810a5d87 188 #include <assert.h>
lixianyu 2:1538810a5d87 189 #include <stdio.h>
lixianyu 2:1538810a5d87 190 #include <string.h>
lixianyu 2:1538810a5d87 191 #include <errno.h>
lixianyu 2:1538810a5d87 192 #include <signal.h>
vshymanskyy 0:58b20b438383 193
lixianyu 2:1538810a5d87 194 #include <iostream>
lixianyu 2:1538810a5d87 195 using namespace std;
lixianyu 2:1538810a5d87 196 #define BLYNK_LOG(msg, ...) { fprintf(BLYNK_PRINT, "[%ld] " msg "\n", millis(), ##__VA_ARGS__); }
lixianyu 2:1538810a5d87 197 #define BLYNK_LOG1(p1) { BLYNK_LOG_TIME(); cout << p1 << endl; }
lixianyu 2:1538810a5d87 198 #define BLYNK_LOG2(p1,p2) { BLYNK_LOG_TIME(); cout << p1 << p2 << endl; }
lixianyu 2:1538810a5d87 199 #define BLYNK_LOG3(p1,p2,p3) { BLYNK_LOG_TIME(); cout << p1 << p2 << p3 << endl; }
lixianyu 2:1538810a5d87 200 #define BLYNK_LOG4(p1,p2,p3,p4) { BLYNK_LOG_TIME(); cout << p1 << p2 << p3 << p4 << endl; }
lixianyu 2:1538810a5d87 201 #define BLYNK_LOG6(p1,p2,p3,p4,p5,p6) { BLYNK_LOG_TIME(); cout << p1 << p2 << p3 << p4 << p5 << p6 << endl; }
vshymanskyy 0:58b20b438383 202
lixianyu 2:1538810a5d87 203 #define BLYNK_LOG_TIME() cout << '[' << millis() << "] ";
vshymanskyy 0:58b20b438383 204
vshymanskyy 0:58b20b438383 205 #ifdef BLYNK_DEBUG
lixianyu 2:1538810a5d87 206 #define BLYNK_DBG_BREAK() raise(SIGTRAP);
lixianyu 2:1538810a5d87 207 #define BLYNK_ASSERT(expr) assert(expr)
vshymanskyy 0:58b20b438383 208
lixianyu 2:1538810a5d87 209 static
lixianyu 2:1538810a5d87 210 void BLYNK_DBG_DUMP(const char* msg, const void* addr, size_t len)
lixianyu 2:1538810a5d87 211 {
lixianyu 2:1538810a5d87 212 BLYNK_LOG_TIME();
lixianyu 2:1538810a5d87 213 fprintf(BLYNK_PRINT, msg);
lixianyu 2:1538810a5d87 214 int l2 = len;
lixianyu 2:1538810a5d87 215 const uint8_t* octets = (const uint8_t*)addr;
lixianyu 2:1538810a5d87 216 bool prev_print = true;
lixianyu 2:1538810a5d87 217 while (l2--) {
lixianyu 2:1538810a5d87 218 const uint8_t c = *octets++ & 0xFF;
lixianyu 2:1538810a5d87 219 if (c > 31) {
lixianyu 2:1538810a5d87 220 if (!prev_print) {
lixianyu 2:1538810a5d87 221 fputc(']', BLYNK_PRINT);
vshymanskyy 0:58b20b438383 222 }
lixianyu 2:1538810a5d87 223 fputc((char)c, BLYNK_PRINT);
lixianyu 2:1538810a5d87 224 prev_print = true;
lixianyu 2:1538810a5d87 225 } else {
lixianyu 2:1538810a5d87 226 fputc(prev_print?'[':'|', BLYNK_PRINT);
lixianyu 2:1538810a5d87 227 fprintf(BLYNK_PRINT, "%02x", c);
lixianyu 2:1538810a5d87 228 prev_print = false;
vshymanskyy 0:58b20b438383 229 }
lixianyu 2:1538810a5d87 230 }
lixianyu 2:1538810a5d87 231 fprintf(BLYNK_PRINT, "%s\n", prev_print?"":"]");
lixianyu 2:1538810a5d87 232 }
vshymanskyy 0:58b20b438383 233 #endif
vshymanskyy 0:58b20b438383 234
lixianyu 2:1538810a5d87 235 #else
vshymanskyy 0:58b20b438383 236
lixianyu 2:1538810a5d87 237 #warning Could not detect platform
vshymanskyy 0:58b20b438383 238
lixianyu 2:1538810a5d87 239 #endif
vshymanskyy 0:58b20b438383 240
vshymanskyy 0:58b20b438383 241 #endif
vshymanskyy 0:58b20b438383 242
vshymanskyy 0:58b20b438383 243 #ifndef BLYNK_LOG
lixianyu 2:1538810a5d87 244 #define BLYNK_LOG(...)
lixianyu 2:1538810a5d87 245 #define BLYNK_LOG1(p1)
lixianyu 2:1538810a5d87 246 #define BLYNK_LOG2(p1,p2)
lixianyu 2:1538810a5d87 247 #define BLYNK_LOG3(p1,p2,p3)
lixianyu 2:1538810a5d87 248 #define BLYNK_LOG4(p1,p2,p3,p4)
lixianyu 2:1538810a5d87 249 #define BLYNK_LOG6(p1,p2,p3,p4,p5,p6)
lixianyu 2:1538810a5d87 250 #define BLYNK_LOG_IP(msg, ip)
lixianyu 2:1538810a5d87 251 #define BLYNK_LOG_IP_REV(msg, ip)
vshymanskyy 0:58b20b438383 252 #endif
vshymanskyy 0:58b20b438383 253
vshymanskyy 0:58b20b438383 254 #ifndef BLYNK_DBG_BREAK
lixianyu 2:1538810a5d87 255 #define BLYNK_DBG_BREAK()
lixianyu 2:1538810a5d87 256 #define BLYNK_ASSERT(expr)
lixianyu 2:1538810a5d87 257 #define BLYNK_DBG_DUMP(msg, addr, len)
vshymanskyy 0:58b20b438383 258 #endif
vshymanskyy 0:58b20b438383 259
vshymanskyy 0:58b20b438383 260 #endif