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
Diff: utility/BlynkDebug.cpp
- Revision:
- 15:975b60f7a8ff
- Parent:
- 12:787e0f06e047
- Child:
- 16:6d9bf99b263c
--- a/utility/BlynkDebug.cpp Tue Jun 20 00:20:01 2017 +0300 +++ b/utility/BlynkDebug.cpp Mon Nov 27 19:48:07 2017 +0200 @@ -8,26 +8,16 @@ */ #include <Blynk/BlynkDebug.h> -#if defined(BLYNK_USE_AVR_WDT) +#if defined(ARDUINO) && defined(__AVR__) && defined(BLYNK_USE_AVR_WDT) #include <Arduino.h> #include <avr/wdt.h> - size_t BlynkFreeRam() - { - extern int __heap_start, *__brkval; - int v; - return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); - } - - void wdt_init(void) __attribute__((naked)) __attribute__((section(".init3"))); - - void wdt_init(void) + __attribute__((constructor)) + static void BlynkSystemInit() { MCUSR = 0; wdt_disable(); - - return; } void BlynkReset() @@ -39,10 +29,27 @@ for(;;) {} // To make compiler happy } -#elif defined(__AVR__) + size_t BlynkFreeRam() + { + extern int __heap_start, *__brkval; + int v; + return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); + } + + #define _BLYNK_USE_DEFAULT_MILLIS + #define _BLYNK_USE_DEFAULT_DELAY + +#elif defined(ARDUINO) && defined(__AVR__) #include <Arduino.h> + void BlynkReset() + { + void(*resetFunc)(void) = 0; + resetFunc(); + for(;;) {} + } + size_t BlynkFreeRam() { extern int __heap_start, *__brkval; @@ -50,14 +57,10 @@ return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); } - void BlynkReset() - { - void(*resetFunc)(void) = 0; - resetFunc(); - for(;;) {} - } + #define _BLYNK_USE_DEFAULT_MILLIS + #define _BLYNK_USE_DEFAULT_DELAY -#elif defined(ESP8266) +#elif defined(ARDUINO) && defined(ESP8266) #include <Arduino.h> @@ -72,6 +75,9 @@ for(;;) {} } + #define _BLYNK_USE_DEFAULT_MILLIS + #define _BLYNK_USE_DEFAULT_DELAY + #elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) #include <Arduino.h> @@ -87,77 +93,177 @@ for(;;) {} } -#elif defined (PARTICLE) || defined(SPARK) + #define _BLYNK_USE_DEFAULT_MILLIS + #define _BLYNK_USE_DEFAULT_DELAY - #include "application.h" +#elif defined (ARDUINO_ARCH_ARC32) - size_t BlynkFreeRam() + millis_time_t BlynkMillis() { - return 0; + // TODO: Remove workaround for Intel Curie + // https://forum.arduino.cc/index.php?topic=391836.0 + noInterrupts(); + uint64_t t = millis(); + interrupts(); + return t; } - void BlynkReset() - { - System.reset(); - for(;;) {} // To make compiler happy - } + #define _BLYNK_USE_DEFAULT_FREE_RAM + #define _BLYNK_USE_DEFAULT_RESET + #define _BLYNK_USE_DEFAULT_DELAY -#elif defined(__STM32F1__) || defined(__STM32F3__) +#elif defined(ARDUINO) && (defined(__STM32F1__) || defined(__STM32F3__)) #include <Arduino.h> #include <libmaple/nvic.h> - size_t BlynkFreeRam() - { - return 0; - } - void BlynkReset() { nvic_sys_reset(); for(;;) {} } -// TODO: -//#elif defined (TEENSYDUINO) -//#elif defined (__STM32F4__) -//#elif defined (ARDUINO_ARCH_ARC32) -//#elif defined (__RFduino__) || defined (__Simblee__) + #define _BLYNK_USE_DEFAULT_FREE_RAM + #define _BLYNK_USE_DEFAULT_MILLIS + #define _BLYNK_USE_DEFAULT_DELAY + +#elif defined (PARTICLE) || defined(SPARK) + + #include "application.h" + + void BlynkReset() + { + System.reset(); + for(;;) {} // To make compiler happy + } + + #define _BLYNK_USE_DEFAULT_FREE_RAM + #define _BLYNK_USE_DEFAULT_MILLIS + #define _BLYNK_USE_DEFAULT_DELAY #elif defined(MBED_LIBRARY_VERSION) #include "mbed.h" - size_t BlynkFreeRam() + static Timer blynk_millis_timer; + static Ticker blynk_waker; + + static + void blynk_wake() { + //pc.puts("(...)"); + } + + __attribute__((constructor)) + static void BlynkSystemInit() + { + blynk_waker.attach(&blynk_wake, 2.0); + blynk_millis_timer.start(); + } + + void BlynkDelay(millis_time_t ms) { - return 0; + wait_ms(ms); + } + + millis_time_t BlynkMillis() + { + return blynk_millis_timer.read_ms(); + } + + #define _BLYNK_USE_DEFAULT_FREE_RAM + #define _BLYNK_USE_DEFAULT_RESET + +#elif defined(LINUX) && defined(RASPBERRY) + #include <stdlib.h> + #include <wiringPi.h> + + __attribute__((constructor)) + static void BlynkSystemInit() + { + wiringPiSetupGpio(); } void BlynkReset() { + exit(1); for(;;) {} // To make compiler happy } + #define _BLYNK_USE_DEFAULT_FREE_RAM + #define _BLYNK_USE_DEFAULT_MILLIS + #define _BLYNK_USE_DEFAULT_DELAY + +#elif defined(LINUX) + + #define _POSIX_C_SOURCE 200809L + #include <stdlib.h> + #include <time.h> + #include <unistd.h> + + void BlynkReset() + { + exit(1); + for(;;) {} // To make compiler happy + } + + void BlynkDelay(millis_time_t ms) + { + usleep(ms * 1000); + } + + millis_time_t BlynkMillis() + { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts ); + return ( ts.tv_sec * 1000 + ts.tv_nsec / 1000000L ); + } + + #define _BLYNK_USE_DEFAULT_FREE_RAM + #else #if defined(BLYNK_DEBUG_ALL) #warning "Need to implement board-specific utilities" #endif + #define _BLYNK_USE_DEFAULT_FREE_RAM + #define _BLYNK_USE_DEFAULT_RESET + #define _BLYNK_USE_DEFAULT_MILLIS + #define _BLYNK_USE_DEFAULT_DELAY + +#endif + +#ifdef _BLYNK_USE_DEFAULT_DELAY + void BlynkDelay(millis_time_t ms) + { + return delay(ms); + } +#endif + +#ifdef _BLYNK_USE_DEFAULT_MILLIS + millis_time_t BlynkMillis() + { + return millis(); + } +#endif + +#ifdef _BLYNK_USE_DEFAULT_FREE_RAM size_t BlynkFreeRam() { return 0; } +#endif +#ifdef _BLYNK_USE_DEFAULT_RESET void BlynkReset() { for(;;) {} // To make compiler happy } - #endif void BlynkFatal() { - //delay(10000L); + BlynkDelay(10000L); BlynkReset(); } +