Core Base Classes for the Light Endpoints

Dependencies:   BufferedSerial

Dependents:   mbed_mqtt_endpoint_ublox_ethernet mbed_mqtt_endpoint_ublox_cellular mbed_nsp_endpoint_ublox_cellular mbed_nsp_endpoint_ublox_ethernet ... more

Revision:
192:54b758a8eaaa
Parent:
191:c83c1c5010ed
diff -r c83c1c5010ed -r 54b758a8eaaa ErrorHandler.cpp
--- a/ErrorHandler.cpp	Wed Sep 24 19:12:35 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,365 +0,0 @@
-/* Copyright C2013 Doug Anson, MIT License
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
- * and associated documentation files the "Software", to deal in the Software without restriction,
- * including without limitation the rights to use, copy, modify, merge, publish, distribute,
- * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all copies or
- * substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
- * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
- 
- #include "ErrorHandler.h"
- #include "MBEDEndpoint.h"
- 
-#ifdef _ENDPOINT_UBLOX_PLATFORM
-    // Annunciations
-    DigitalOut led1(P3_25);
-    DigitalOut led2(P3_25);
-    DigitalOut led3(P3_25);
-    DigitalOut led4(P3_25);
-    
-    // Multi-color LED support
-    PwmOut r(D5);
-    PwmOut g(D9);
-    PwmOut b(D8);  
-#endif
-
-#ifdef _ENDPOINT_NXP_PLATFORM
-   // Annunciations
-    DigitalOut led1(LED1);
-    DigitalOut led2(LED2);
-    DigitalOut led3(LED3);
-    DigitalOut led4(LED4);  
-    
-    // Multi-color LED support
-    PwmOut r(p23);
-    PwmOut g(p24);
-    PwmOut b(p25);  
-#endif
-
-#ifdef _ENDPOINT_FREEDOM_PLATFORM   
-    // Annunciations
-    DigitalOut led1(LED1);
-    DigitalOut led2(LED2);
-    DigitalOut led3(LED3);
-    DigitalOut led4(LED4);
-    
-    // Multi-color LED support
-    PwmOut r(p23);
-    PwmOut g(p24);
-    PwmOut b(p25);  
-#endif
-
-// Memory statistics macro
-#define ERROR_HANDLER_MEM_STATS(x) \
-    int s##x=0;\
-    int *h##x = new int [1];\
-    if (this->m_pc != NULL) this->m_pc->printf("\r\nMEMORY: stack: 0x%08x  heap: 0x%08x  avail: %d bytes\r\n", &s##x, h##x, &s##x-h##x);\
-    if (h##x > &s##x)\
-    error("collision\n");\
-    delete [] h##x;\
-    __nop();
-
- // close down connections
- extern void closedown(int code);
- 
- // default constructor
- ErrorHandler::ErrorHandler(BufferedSerial *pc,LCDCLASS *lcd) {
-     this->m_pc = pc;
-     this->m_lcd = lcd;
-     this->m_status_lcd = false;
-     memset(this->m_message,0,MAX_LOG_MESSAGE+1);    
-#ifdef EH_USE_MUTEXES
-     this->m_mutex = NULL;
-     this->m_close_mutex = NULL;
-     this->m_led_mutex = NULL;
-     this->m_rgb_mutex = NULL;
-     this->m_mutex = new Mutex();
-     this->m_close_mutex = new Mutex();
-     this->m_led_mutex = new Mutex();
-     this->m_rgb_mutex = new Mutex();
-     this->releaseMutexes();
-#endif
-     this->resetLEDs();
- }
- 
- // default destructor
- ErrorHandler::~ErrorHandler() {
-#ifdef EH_USE_MUTEXES
-     this->releaseMutexes();
-     if (this->m_mutex != NULL) delete this->m_mutex;
-     if (this->m_close_mutex != NULL) delete this->m_close_mutex;
-     if (this->m_led_mutex != NULL) delete this->m_led_mutex;
-     if (this->m_rgb_mutex != NULL) delete this->m_rgb_mutex;
-#endif
- }
- 
- // enable LCD to only show summary status
- void ErrorHandler::lcdStatusOnly(bool status_lcd) { this->m_status_lcd = status_lcd; }
- 
- #ifdef EH_USE_MUTEXES
- // release all mutexes
- void ErrorHandler::releaseMutexes() {
-     if (this->m_mutex != NULL) this->m_mutex->unlock();
-     if (this->m_close_mutex != NULL) this->m_close_mutex->unlock();
-     if (this->m_led_mutex != NULL) this->m_led_mutex->unlock();
-     if (this->m_rgb_mutex != NULL) this->m_rgb_mutex->unlock();
- }
- #endif
- 
- // log information
- void ErrorHandler::log(const char *format, ...) {
-#ifndef HUSH_LOG
-    memset(this->m_message,0,MAX_LOG_MESSAGE+1);
-    va_list args;
-    va_start(args, format);
-    vsprintf(this->m_message, format, args);
-    va_end(args);
-#ifdef EH_USE_MUTEXES
-    if (this->m_mutex != NULL) this->m_mutex->lock();
-#endif
-    if (this->m_pc != NULL) this->m_pc->printf(this->m_message);
-    #ifdef ENABLE_MEMORY_DEBUG
-    ERROR_HANDLER_MEM_STATS(0);
-    #endif
-    if (this->m_pc != NULL) this->m_pc->printf("\r\n");
-    if (this->m_status_lcd) {
-        MBEDEndpoint *endpoint = (MBEDEndpoint *)this->m_endpoint;
-        if (endpoint != NULL) {
-            this->m_lcd->cls();
-            this->m_lcd->locate(0,0);
-            this->m_lcd->printf(endpoint->getLCDStatus());
-        }
-    }
-    else {
-        this->m_lcd->cls();
-        this->m_lcd->locate(0,0);
-        this->m_lcd->printf(this->m_message);
-    }
-#ifdef EH_USE_MUTEXES
-    if (this->m_mutex != NULL) this->m_mutex->unlock();
-#endif
-#else
-#ifdef EH_USE_MUTEXES
-    if (this->m_mutex != NULL) this->m_mutex->lock();
-#endif
-    if (this->m_status_lcd) {
-        MBEDEndpoint *endpoint = (MBEDEndpoint *)this->m_endpoint;
-        if (endpoint != NULL) {
-            this->m_lcd->cls();
-            this->m_lcd->locate(0,0);
-            this->m_lcd->printf(endpoint->getLCDStatus());
-        }
-    }
-#ifdef EH_USE_MUTEXES
-    if (this->m_mutex != NULL) this->m_mutex->unlock();
-#endif
-#endif
- }
- 
- // log information
- void ErrorHandler::log_memory(const char *format, ...) {
- #ifndef HUSH_LOG
- #ifdef MEMORY_LOGGING
-    memset(this->m_message,0,MAX_LOG_MESSAGE+1);
-    va_list args;
-    va_start(args, format);
-    vsprintf(this->m_message, format, args);
-    va_end(args);
- #ifdef EH_USE_MUTEXES
-    if (this->m_mutex != NULL) this->m_mutex->lock();
- #endif
-    if (this->m_pc != NULL) this->m_pc->printf(this->m_message);
-    ERROR_HANDLER_MEM_STATS(0);
- #ifdef EH_USE_MUTEXES
-    if (this->m_mutex != NULL) this->m_mutex->unlock();
- #endif
- #endif
- #endif
- }
- 
- // pause
- void ErrorHandler::pause(const char *format, ...) {
- #ifndef HUSH_LOG
-    memset(this->m_message,0,MAX_LOG_MESSAGE+1);
-    va_list args;
-    va_start(args, format);
-    vsprintf(this->m_message, format, args);
-    va_end(args);
- #ifdef EH_USE_MUTEXES
-    if (this->m_mutex != NULL) this->m_mutex->lock();
- #endif
-    if (this->m_pc != NULL) this->m_pc->printf(this->m_message);
-    if (this->m_pc != NULL) this->m_pc->printf("\r\n");
-    this->m_lcd->cls();
-    this->m_lcd->locate(0,0);
-    this->m_lcd->printf(this->m_message);
-    if (this->m_pc != NULL) { 
-        this->m_pc->printf("Press any key to continue...ctrl-c to stop\r\n");
-        char c = this->m_pc->getc();
-        if (c == 0x03) {    // CTRL-C ASCII
-        this->m_pc->printf("ctrl-c: closing down...\r\n");
- #ifdef EH_USE_MUTEXES
-        if (this->m_mutex != NULL) this->m_mutex->unlock();
- #endif
-            closedown(1);
-        }
-    }
- #ifdef EH_USE_MUTEXES
-    if (this->m_mutex != NULL) this->m_mutex->unlock();
- #endif
- #endif
- }
- 
- // check for exit
- void ErrorHandler::checkForExit() {
- #ifdef EH_USE_MUTEXES
-    if (this->m_close_mutex != NULL) this->m_close_mutex->lock();
- #endif
-    if (this->m_pc != NULL && this->m_pc->readable()) {
-        char c = this->m_pc->getc();
-        if (c == 0x03) {    // CTRL-C ASCII
-            this->m_pc->printf("ctrl-c: closing down...\r\n");
-            closedown(1);
-        }
-    }
- #ifdef EH_USE_MUTEXES
-    if (this->m_close_mutex != NULL) this->m_close_mutex->unlock();
- #endif
-}
-
-// set the color LED 
-void ErrorHandler::setRGBLED(float H, float S, float V) {
-#ifndef HUSH_LEDS
-#ifdef EH_USE_MUTEXES
-    if (this->m_rgb_mutex != NULL) this->m_rgb_mutex->lock();
-#endif
-    float f,h,p,q,t;
-    int i;
-    if( S == 0.0) {
-        r = 1.0 - V;  // invert pwm !
-        g = 1.0 - V;
-        b = 1.0 - V;
-        return;
-    }
-    if(H > 360.0) H = 0.0;   // check values
-    if(S > 1.0) S = 1.0; 
-    if(S < 0.0) S = 0.0;
-    if(V > 1.0) V = 1.0;
-    if(V < 0.0) V = 0.0;
-    h = H / 60.0;
-    i = (int) h;
-    f = h - i;
-    p = V * (1.0 - S);
-    q = V * (1.0 - (S * f));
-    t = V * (1.0 - (S * (1.0 - f)));
-
-    switch(i) {
-        case 0:
-            r = 1.0 - V;  // invert pwm !
-            g = 1.0 - t;
-            b = 1.0 - p;
-            break;
-        case 1:
-            r = 1.0 - q;
-            g = 1.0 - V;
-            b = 1.0 - p;
-            break;
-        case 2:
-            r = 1.0 - p;
-            g = 1.0 - V;
-            b = 1.0 - t;
-            break;
-        case 3:
-            r = 1.0 - p;
-            g = 1.0 - q;
-            b = 1.0 - V;
-            break;
-        case 4:
-            r = 1.0 - t;
-            g = 1.0 - p;
-            b = 1.0 - V;
-            break;
-        case 5:
-        default:
-            r = 1.0 - V;
-            g = 1.0 - p;
-            b = 1.0 - q;
-            break;
-    }
- #ifdef EH_USE_MUTEXES
-    if (this->m_rgb_mutex != NULL) this->m_rgb_mutex->unlock();
- #endif
- #endif
-}
-
-// turn the RGB LED specific colors
-void ErrorHandler::turnLEDRed() { this->setRGBLED(0.0,1.0,0.2); }
-void ErrorHandler::turnLEDGreen() { this->setRGBLED(120.0,1.0,0.2); }
-void ErrorHandler::turnLEDBlue() { this->setRGBLED(200.0,1.0,0.2); }
-void ErrorHandler::turnLEDPurple() { this->setRGBLED(261.9,1.0,0.2); }
-void ErrorHandler::turnLEDOrange() { this->setRGBLED(51.0,1.0,0.2); }
-void ErrorHandler::turnLEDBlack() { this->setRGBLED(0,0,0); }
-void ErrorHandler::turnLEDYellow() { this->setRGBLED(60.0,1.0,0.133); }
-
-// reset LEDs
-void ErrorHandler::resetLEDs() {
-#ifndef HUSH_LEDS
-    // turn off all LEDs
-    led1 = 0; led2 = 0; led3 = 0; led4 = 0;
-#endif
-}
-
-// blink an LED
-void ErrorHandler::blinkLED(DigitalOut led) {
-#ifndef HUSH_LEDS
-#ifdef EH_USE_MUTEXES
-    if (this->m_led_mutex != NULL) this->m_led_mutex->lock();
-#endif
-    led = 1;
-#ifdef EH_USE_MUTEXES
-    if (this->m_led_mutex != NULL) this->m_led_mutex->unlock();
-#endif
-    Thread::wait(BLINK_TIME);
-#ifdef EH_USE_MUTEXES
-    if (this->m_led_mutex != NULL) this->m_led_mutex->lock();
-#endif
-    led = 0;
-#ifdef EH_USE_MUTEXES
-    if (this->m_led_mutex != NULL) this->m_led_mutex->unlock();
-#endif
-#endif
-}
-
-void ErrorHandler::changeLED(DigitalOut led,bool onoff) { 
-#ifdef EH_USE_MUTEXES
-    if (this->m_led_mutex != NULL) this->m_led_mutex->lock();
-#endif
-    if (onoff) led = 1;
-    else led = 0;
-#ifdef EH_USE_MUTEXES
-    if (this->m_led_mutex != NULL) this->m_led_mutex->unlock();
-#endif
-}
-
-void ErrorHandler::led2On() { this->changeLED(led2,true); }
-void ErrorHandler::led2Off() { this->changeLED(led2,false); }
-void ErrorHandler::led3On() { this->changeLED(led3,true); }
-void ErrorHandler::led3Off() { this->changeLED(led3,false); }
-
-void  ErrorHandler::setEndpoint(void *endpoint) { this->m_endpoint = endpoint; }
-void *ErrorHandler::getEndpoint() { return this->m_endpoint; }
-
-// blink the Transport TX LED
-void ErrorHandler::blinkTransportTxLED() { this->blinkLED(led4); }
-
-// blink the Transport RX LED
-void ErrorHandler::blinkTransportRxLED() { this->blinkLED(led1); }
\ No newline at end of file