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

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();
 }
+