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:
160:24337c83dd1d
Parent:
149:7fde829ed672
Child:
179:35e88daf2d75
--- a/ErrorHandler.cpp	Mon Jun 30 22:17:32 2014 +0000
+++ b/ErrorHandler.cpp	Tue Jul 01 17:12:18 2014 +0000
@@ -76,33 +76,36 @@
      this->m_pc = pc;
      this->m_lcd = lcd;
      this->m_status_lcd = false;
-     memset(this->m_message,0,MAX_LOG_MESSAGE+1);
+     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;
-#ifdef EH_USE_MUTEXES
      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->releaseMutexes();
      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();
@@ -110,6 +113,7 @@
      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, ...) {
@@ -119,7 +123,9 @@
     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);
@@ -138,9 +144,13 @@
         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) {
@@ -149,8 +159,10 @@
             this->m_lcd->printf(endpoint->getLCDStatus());
         }
     }
+#ifdef EH_USE_MUTEXES
     if (this->m_mutex != NULL) this->m_mutex->unlock();
 #endif
+#endif
  }
  
  // log information
@@ -162,12 +174,16 @@
     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
@@ -178,7 +194,9 @@
     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();
@@ -189,17 +207,23 @@
         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
@@ -207,13 +231,17 @@
             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) {
@@ -267,8 +295,10 @@
             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
@@ -291,21 +321,33 @@
 // 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
     wait_ms(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); }