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:
Volodymyr Shymanskyy
Date:
Thu Jan 05 14:55:36 2017 +0200
Revision:
9:7369ec77a3ea
Parent:
0:58b20b438383
Child:
11:991ded8c9703
Update version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vshymanskyy 0:58b20b438383 1 /**
vshymanskyy 0:58b20b438383 2 * @file BlynkDebug.cpp
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 for Arduino
vshymanskyy 0:58b20b438383 8 */
Volodymyr Shymanskyy 9:7369ec77a3ea 9 #include <Blynk/BlynkDebug.h>
vshymanskyy 0:58b20b438383 10
Volodymyr Shymanskyy 9:7369ec77a3ea 11 #if defined(BLYNK_USE_AVR_WDT)
Volodymyr Shymanskyy 9:7369ec77a3ea 12
Volodymyr Shymanskyy 9:7369ec77a3ea 13 #include <Arduino.h>
Volodymyr Shymanskyy 9:7369ec77a3ea 14 #include <avr/wdt.h>
Volodymyr Shymanskyy 9:7369ec77a3ea 15
Volodymyr Shymanskyy 9:7369ec77a3ea 16 size_t BlynkFreeRam()
Volodymyr Shymanskyy 9:7369ec77a3ea 17 {
Volodymyr Shymanskyy 9:7369ec77a3ea 18 extern int __heap_start, *__brkval;
Volodymyr Shymanskyy 9:7369ec77a3ea 19 int v;
Volodymyr Shymanskyy 9:7369ec77a3ea 20 return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
Volodymyr Shymanskyy 9:7369ec77a3ea 21 }
Volodymyr Shymanskyy 9:7369ec77a3ea 22
Volodymyr Shymanskyy 9:7369ec77a3ea 23 void wdt_init(void) __attribute__((naked)) __attribute__((section(".init3")));
Volodymyr Shymanskyy 9:7369ec77a3ea 24
Volodymyr Shymanskyy 9:7369ec77a3ea 25 void wdt_init(void)
Volodymyr Shymanskyy 9:7369ec77a3ea 26 {
Volodymyr Shymanskyy 9:7369ec77a3ea 27 MCUSR = 0;
Volodymyr Shymanskyy 9:7369ec77a3ea 28 wdt_disable();
Volodymyr Shymanskyy 9:7369ec77a3ea 29
Volodymyr Shymanskyy 9:7369ec77a3ea 30 return;
Volodymyr Shymanskyy 9:7369ec77a3ea 31 }
Volodymyr Shymanskyy 9:7369ec77a3ea 32
Volodymyr Shymanskyy 9:7369ec77a3ea 33 void BlynkReset()
Volodymyr Shymanskyy 9:7369ec77a3ea 34 {
Volodymyr Shymanskyy 9:7369ec77a3ea 35 wdt_enable(WDTO_15MS);
Volodymyr Shymanskyy 9:7369ec77a3ea 36 delay(50);
Volodymyr Shymanskyy 9:7369ec77a3ea 37 void(*resetFunc)(void) = 0;
Volodymyr Shymanskyy 9:7369ec77a3ea 38 resetFunc();
Volodymyr Shymanskyy 9:7369ec77a3ea 39 for(;;) {} // To make compiler happy
Volodymyr Shymanskyy 9:7369ec77a3ea 40 }
Volodymyr Shymanskyy 9:7369ec77a3ea 41
Volodymyr Shymanskyy 9:7369ec77a3ea 42 #elif defined(__AVR__)
Volodymyr Shymanskyy 9:7369ec77a3ea 43
Volodymyr Shymanskyy 9:7369ec77a3ea 44 #include <Arduino.h>
Volodymyr Shymanskyy 9:7369ec77a3ea 45
Volodymyr Shymanskyy 9:7369ec77a3ea 46 size_t BlynkFreeRam()
Volodymyr Shymanskyy 9:7369ec77a3ea 47 {
Volodymyr Shymanskyy 9:7369ec77a3ea 48 extern int __heap_start, *__brkval;
Volodymyr Shymanskyy 9:7369ec77a3ea 49 int v;
Volodymyr Shymanskyy 9:7369ec77a3ea 50 return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
Volodymyr Shymanskyy 9:7369ec77a3ea 51 }
Volodymyr Shymanskyy 9:7369ec77a3ea 52
Volodymyr Shymanskyy 9:7369ec77a3ea 53 void BlynkReset()
Volodymyr Shymanskyy 9:7369ec77a3ea 54 {
Volodymyr Shymanskyy 9:7369ec77a3ea 55 void(*resetFunc)(void) = 0;
Volodymyr Shymanskyy 9:7369ec77a3ea 56 resetFunc();
Volodymyr Shymanskyy 9:7369ec77a3ea 57 for(;;) {}
Volodymyr Shymanskyy 9:7369ec77a3ea 58 }
Volodymyr Shymanskyy 9:7369ec77a3ea 59
Volodymyr Shymanskyy 9:7369ec77a3ea 60 #elif defined(ESP8266)
Volodymyr Shymanskyy 9:7369ec77a3ea 61
Volodymyr Shymanskyy 9:7369ec77a3ea 62 #include <Arduino.h>
Volodymyr Shymanskyy 9:7369ec77a3ea 63
Volodymyr Shymanskyy 9:7369ec77a3ea 64 size_t BlynkFreeRam()
Volodymyr Shymanskyy 9:7369ec77a3ea 65 {
Volodymyr Shymanskyy 9:7369ec77a3ea 66 return ESP.getFreeHeap();
Volodymyr Shymanskyy 9:7369ec77a3ea 67 }
Volodymyr Shymanskyy 9:7369ec77a3ea 68
Volodymyr Shymanskyy 9:7369ec77a3ea 69 void BlynkReset()
Volodymyr Shymanskyy 9:7369ec77a3ea 70 {
Volodymyr Shymanskyy 9:7369ec77a3ea 71 ESP.restart();
Volodymyr Shymanskyy 9:7369ec77a3ea 72 for(;;) {}
Volodymyr Shymanskyy 9:7369ec77a3ea 73 }
Volodymyr Shymanskyy 9:7369ec77a3ea 74
Volodymyr Shymanskyy 9:7369ec77a3ea 75 #elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM)
Volodymyr Shymanskyy 9:7369ec77a3ea 76
Volodymyr Shymanskyy 9:7369ec77a3ea 77 #include <Arduino.h>
Volodymyr Shymanskyy 9:7369ec77a3ea 78
Volodymyr Shymanskyy 9:7369ec77a3ea 79 size_t BlynkFreeRam()
Volodymyr Shymanskyy 9:7369ec77a3ea 80 {
Volodymyr Shymanskyy 9:7369ec77a3ea 81 return 0;
Volodymyr Shymanskyy 9:7369ec77a3ea 82 }
vshymanskyy 0:58b20b438383 83
Volodymyr Shymanskyy 9:7369ec77a3ea 84 void BlynkReset()
Volodymyr Shymanskyy 9:7369ec77a3ea 85 {
Volodymyr Shymanskyy 9:7369ec77a3ea 86 NVIC_SystemReset();
Volodymyr Shymanskyy 9:7369ec77a3ea 87 for(;;) {}
Volodymyr Shymanskyy 9:7369ec77a3ea 88 }
Volodymyr Shymanskyy 9:7369ec77a3ea 89
Volodymyr Shymanskyy 9:7369ec77a3ea 90 #elif defined (PARTICLE) || defined(SPARK)
Volodymyr Shymanskyy 9:7369ec77a3ea 91
Volodymyr Shymanskyy 9:7369ec77a3ea 92 #include "application.h"
Volodymyr Shymanskyy 9:7369ec77a3ea 93
Volodymyr Shymanskyy 9:7369ec77a3ea 94 size_t BlynkFreeRam()
Volodymyr Shymanskyy 9:7369ec77a3ea 95 {
Volodymyr Shymanskyy 9:7369ec77a3ea 96 return 0;
Volodymyr Shymanskyy 9:7369ec77a3ea 97 }
Volodymyr Shymanskyy 9:7369ec77a3ea 98
Volodymyr Shymanskyy 9:7369ec77a3ea 99 void BlynkReset()
Volodymyr Shymanskyy 9:7369ec77a3ea 100 {
Volodymyr Shymanskyy 9:7369ec77a3ea 101 System.reset();
Volodymyr Shymanskyy 9:7369ec77a3ea 102 for(;;) {} // To make compiler happy
Volodymyr Shymanskyy 9:7369ec77a3ea 103 }
Volodymyr Shymanskyy 9:7369ec77a3ea 104
Volodymyr Shymanskyy 9:7369ec77a3ea 105 #elif defined(__STM32F1__) || defined(__STM32F3__)
Volodymyr Shymanskyy 9:7369ec77a3ea 106
Volodymyr Shymanskyy 9:7369ec77a3ea 107 #include <Arduino.h>
Volodymyr Shymanskyy 9:7369ec77a3ea 108 #include <libmaple/nvic.h>
Volodymyr Shymanskyy 9:7369ec77a3ea 109
Volodymyr Shymanskyy 9:7369ec77a3ea 110 size_t BlynkFreeRam()
Volodymyr Shymanskyy 9:7369ec77a3ea 111 {
Volodymyr Shymanskyy 9:7369ec77a3ea 112 return 0;
Volodymyr Shymanskyy 9:7369ec77a3ea 113 }
Volodymyr Shymanskyy 9:7369ec77a3ea 114
Volodymyr Shymanskyy 9:7369ec77a3ea 115 void BlynkReset()
Volodymyr Shymanskyy 9:7369ec77a3ea 116 {
Volodymyr Shymanskyy 9:7369ec77a3ea 117 nvic_sys_reset();
Volodymyr Shymanskyy 9:7369ec77a3ea 118 for(;;) {}
Volodymyr Shymanskyy 9:7369ec77a3ea 119 }
vshymanskyy 0:58b20b438383 120
Volodymyr Shymanskyy 9:7369ec77a3ea 121 // TODO:
Volodymyr Shymanskyy 9:7369ec77a3ea 122 //#elif defined (TEENSYDUINO)
Volodymyr Shymanskyy 9:7369ec77a3ea 123 //#elif defined (__STM32F4__)
Volodymyr Shymanskyy 9:7369ec77a3ea 124 //#elif defined (ARDUINO_ARCH_ARC32)
Volodymyr Shymanskyy 9:7369ec77a3ea 125 //#elif defined (__RFduino__) || defined (__Simblee__)
Volodymyr Shymanskyy 9:7369ec77a3ea 126
Volodymyr Shymanskyy 9:7369ec77a3ea 127 #elif defined(MBED_LIBRARY_VERSION)
Volodymyr Shymanskyy 9:7369ec77a3ea 128
Volodymyr Shymanskyy 9:7369ec77a3ea 129 #include "mbed.h"
Volodymyr Shymanskyy 9:7369ec77a3ea 130
Volodymyr Shymanskyy 9:7369ec77a3ea 131 size_t BlynkFreeRam()
Volodymyr Shymanskyy 9:7369ec77a3ea 132 {
Volodymyr Shymanskyy 9:7369ec77a3ea 133 return 0;
Volodymyr Shymanskyy 9:7369ec77a3ea 134 }
Volodymyr Shymanskyy 9:7369ec77a3ea 135
Volodymyr Shymanskyy 9:7369ec77a3ea 136 void BlynkReset()
Volodymyr Shymanskyy 9:7369ec77a3ea 137 {
Volodymyr Shymanskyy 9:7369ec77a3ea 138 for(;;) {} // To make compiler happy
Volodymyr Shymanskyy 9:7369ec77a3ea 139 }
Volodymyr Shymanskyy 9:7369ec77a3ea 140
Volodymyr Shymanskyy 9:7369ec77a3ea 141 #else
Volodymyr Shymanskyy 9:7369ec77a3ea 142
Volodymyr Shymanskyy 9:7369ec77a3ea 143 #if defined(BLYNK_DEBUG_ALL)
Volodymyr Shymanskyy 9:7369ec77a3ea 144 #warning "Need to implement board-specific utilities"
Volodymyr Shymanskyy 9:7369ec77a3ea 145 #endif
Volodymyr Shymanskyy 9:7369ec77a3ea 146
Volodymyr Shymanskyy 9:7369ec77a3ea 147 size_t BlynkFreeRam()
Volodymyr Shymanskyy 9:7369ec77a3ea 148 {
Volodymyr Shymanskyy 9:7369ec77a3ea 149 return 0;
Volodymyr Shymanskyy 9:7369ec77a3ea 150 }
Volodymyr Shymanskyy 9:7369ec77a3ea 151
Volodymyr Shymanskyy 9:7369ec77a3ea 152 void BlynkReset()
Volodymyr Shymanskyy 9:7369ec77a3ea 153 {
Volodymyr Shymanskyy 9:7369ec77a3ea 154 for(;;) {} // To make compiler happy
Volodymyr Shymanskyy 9:7369ec77a3ea 155 }
Volodymyr Shymanskyy 9:7369ec77a3ea 156
Volodymyr Shymanskyy 9:7369ec77a3ea 157 #endif
vshymanskyy 0:58b20b438383 158
vshymanskyy 0:58b20b438383 159 void BlynkFatal()
vshymanskyy 0:58b20b438383 160 {
Volodymyr Shymanskyy 9:7369ec77a3ea 161 delay(10000L);
vshymanskyy 0:58b20b438383 162 BlynkReset();
vshymanskyy 0:58b20b438383 163 }