Kabuki Starship / Mbed 2 deprecated mbedBug

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
kabukistarship
Date:
Thu Apr 09 22:40:13 2020 +0000
Parent:
5:4136e9141bde
Commit message:
Renamed StatusLED to StatusIndicator.

Changed in this revision

ErrorList.h Show annotated file Show diff for this revision Revisions of this file
LEDRGBStatus.h Show diff for this revision Revisions of this file
LEDStatus.h Show diff for this revision Revisions of this file
MorseCode.cpp Show annotated file Show diff for this revision Revisions of this file
MorseCode.h Show annotated file Show diff for this revision Revisions of this file
StatusIndicator.h Show annotated file Show diff for this revision Revisions of this file
StatusIndicatorRGB.h Show annotated file Show diff for this revision Revisions of this file
mbedBug.cpp Show annotated file Show diff for this revision Revisions of this file
mbedBugConfig.h Show annotated file Show diff for this revision Revisions of this file
--- a/ErrorList.h	Wed Apr 08 12:36:17 2020 +0000
+++ b/ErrorList.h	Thu Apr 09 22:40:13 2020 +0000
@@ -7,7 +7,7 @@
 Public License, v. 2.0. If a copy of the MPL was not distributed with this file,
 You can obtain one at <https://mozilla.org/MPL/2.0/>. */
 #pragma once
-#include <mbedbug_config.h>
+#include <mbedBugConfig.h>
 namespace mbedBug {
 
 /* An array of error strings.
--- a/LEDRGBStatus.h	Wed Apr 08 12:36:17 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-/* mbedbug @version 0.x
-@link    https://github.com/KabukiStarship/mbedbug.git
-@file    /led_rgb_status.h
-@author  Cale McCollough <https://cale-mccollough.github.io>
-@license Copyright 2016-20 (C) Kabuki Starship <kabukistarship.com>; all rights 
-reserved (R). This Source Code Form is subject to the terms of the Mozilla 
-Public License, v. 2.0. If a copy of the MPL was not distributed with this file,
-You can obtain one at <https://mozilla.org/MPL/2.0/>. */
-#ifndef _mbedBug_RGBStatusLED_header
-#define _mbedBug_RGBStatusLED_header
-#include "mbed.h"
-#include <stdint.h>
-#define CREATE_RGB_STATUS_LED \
-static RGBStatusLED<0,1> Status (RED_LED, GREEN_LED, BLUE_LED);\
-
-#define Assert(statement, message) {\
-    if (!(statement)) {\
-        printf("Assert: %s\r\n%s, line %d\r\n", #message, __FILE__, __LINE__)\
-        Status.HandleAssert ()\
-        while (true)\
-    }\
-}
-
-namespace Primary {
-
-typedef enum {
-    ColorPresetBlack   = 0,
-    ColorPresetRed     = 1,
-    ColorPresetYellow  = 2,
-    ColorPresetGreen   = 3,
-    cColorPresetCyan   = 4,
-    ColorPresetBlue    = 5,
-    ColorPresetMagenta = 6,
-    cColorPresetWhite   = 7
-} Color;
-}   //< namespace Primary
-
-namespace mbedbug {
-    
-/* The onboard mbed RGB LED.
-Some boards have PWM on the RGB LED, some don't. This class uses DigitalOut(s). 
-There are 8 potential combinations  of Color without PWM (@see Wiki 
-"Color Space").
-
-@code
-RGBStatusLED<0, 1> stausLED (RED_LED, GREEN_LED, BLUE_LED);    //< Use <0, 1> if you're LED is active low.
-RGBStatusLED<1, 0> stausLED (p0, p1, p2);                      //< Use <0, 1> if you're LED is active high.
-
-statusLED.SetColorA (Color::);
-
-@endcode
-*/
-template <int On, int Off>
-class RGBStatusLED {
-  public:
-    
-    enum {
-        BrightnessDefault = 128
-    };
-    
-    float Frequency;            //< The Frequency of the blinking.
-    
-    DigitalOut Red,             //< ColorPresetRed LED on the mbed board.
-         Green,                 //< ColorPresetGreen LED on the mbed board.
-         Blue;                  //< ColorPresetBlue LED on the mbed board.
-    
-    Ticker Blinker;             //< Ticker for blinking the LEDs.
-    
-    uint8_t Color,              //< The current Color.
-        ColorA,                 //< Blink Color A.
-        ColorB;                 //< Blink Color B.
-    
-    /* Simple constructor. */
-    RGBStatusLED (PinName RedLED, PinName GreenLED, PinName BlueLED, float BinkDelay = 0.2f)
-    :   Frequency (Frequency),
-        Red       (RedLED),
-        Green     (GreenLED),
-        Blue      (BlueLED),
-        Blinker   (),
-        Color     (Color::ColorPresetBlack),
-        ColorA    (Color::ColorPresetBlack),
-        ColorB    (Color::ColorPresetBlack) {
-        Red = Green = Blue = 1;
-    }
-    
-    /* Updates the RGB status LED "frame": Color. */
-    void Update () {
-        switch (Color) {
-            case Color::ColorPresetBlack  : Red = 1; Green = 1; Blue = 1; return;
-            case Color::ColorPresetRed    : Red = 0; Green = 1; Blue = 1; return;
-            case Color::ColorPresetYellow : Red = 0; Green = 0; Blue = 1; return;
-            case Color::ColorPresetGreen  : Red = 1; Green = 0; Blue = 1; return;
-            case Color::cColorPresetCyan   : Red = 1; Green = 0; Blue = 0; return;
-            case Color::ColorPresetBlue   : Red = 1; Green = 1; Blue = 0; return;
-            case Color::ColorPresetMagenta: Red = 0; Green = 1; Blue = 0; return;
-            case Color::cColorPresetWhite  : Red = 0; Green = 0; Blue = 0; return;
-        }
-    }
-    
-    /* Sets ColorA. */
-    void SetColorA (Primary::Color Value) {
-        ColorA = Value; 
-    }
-    
-    /* Sets ColorB. */
-    void SetColorB (Primary::Color Value) {
-        ColorB = Value; 
-    }
-    
-    /* Turns off the Blinker. */
-    void TurnOff () {
-        Red = Green = Blue = 1;
-    }
-    
-    /* Turns on the Blinker. */
-    void TurnOn () { 
-        Color = ColorA; 
-        Update ();
-    }
-    
-    /* Sets the Color of the Blinker. */
-    void ColorsSet (Primary::Color ColorA, Primary::Color ColorB = Primary::ColorPresetBlack)
-    {
-        ColorA = ColorA;
-        ColorB = ColorB;
-    }
-    
-    void FlashRedBlue ()
-    /* Starts flashing Red and Blue lights. */
-    {
-        ColorA = Primary::ColorPresetRed;
-        ColorB = Primary::ColorPresetBlue;
-        StartBlinking ();
-    }
-    
-    void StartBlinking ()
-    /* Starts blinking. */
-    {
-        Blinker.attach (this, &RGBStatusLED::Blink, Frequency);
-        Color = ColorA;
-        Update ();
-    }
-    
-    /* Stops blinking and turns off the LED. */
-    void StopBlinking  () {
-        TurnOff ();
-        Blinker.detach ();
-        Color = Primary::ColorPresetBlack;
-        Update ();
-    }
-    
-    /* Starts blinking and turns on Color A. */
-    void StopBlinkingA () {
-        Color = ColorA;
-        Blinker.detach ();
-    }
-    
-    /* Starts blinking and turns on Color B. */
-    void StopBlinkingB () {
-        Color = ColorB;
-        Blinker.detach ();
-    }
-    
-    
-    /* Sets the Blink Frequency. */
-    void FrequencySet (float Value) {
-        Frequency = Value;
-        Blinker.attach (this, &RGBStatusLED::Blink, Value);
-    }
-    
-    /* Handler for the Assert macro. */
-    void HandleAssert () {
-        FlashRedBlue ()
-    }
-
-  private:
-    
-    /* Blinks the status RGB LED on the mbed board between ColorA and ColorB. */
-    void Blink () { 
-        Color = (Color == ColorA) ? ColorB : ColorA;   
-        Update ();
-    }
-};
-}
-
-// _D_e_m_o_____________________________________________________________________
-
-#if 0   //< Set to non-zero to run this demo.
-
-using namespace mbedbug;
-
-RGBStatusLED Status (LED_RED, LED_GREEN, LED_BLUE);
-InterruptIn Switch3 (SW3);
-
-/* Interrupt handler for SW2. */
-void SW3Handler () {
-    static int counter = 16;
-    
-    if (++counter > 15) {
-        Status.FlashRedBlue (); counter = 0;
-    }
-    else if (counter & 1) { 
-        Status.StopBlinking  ();
-    } else {  
-        Status.SetColorA ((Primary::Color)(counter >> 1));
-        Status.SetColorB (Primary::ColorPresetBlack);
-        Status.StartBlinking ();
-    }
-}
-
-int main() {
-    printf ("\r\nTesting mbed Utils.\r\n");
-    PrintLine ('-');
-    
-    Switch3.rise (&SW3Handler);
-    //Status.StartBlinking ();
-    
-    while (true);
-}
-#endif  //< #if _Demo
-
-#endif
--- a/LEDStatus.h	Wed Apr 08 12:36:17 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,294 +0,0 @@
-/* mbedBug @version 0.x
-@link    https://github.com/KabukiStarship/mbedBug.git
-@file    /led_status.h
-@author  Cale McCollough <https://cale-mccollough.github.io>
-@license Copyright 2016-20 (C) Kabuki Starship <kabukistarship.com>; all rights 
-reserved (R). This Source Code Form is subject to the terms of the Mozilla 
-Public License, v. 2.0. If a copy of the MPL was not distributed with this file,
-You can obtain one at <https://mozilla.org/MPL/2.0/>. */
-#ifndef _mbedBug_StatusLED_header
-#define _mbedBug_StatusLED_header
-#define _Debug 0    //< Use this flag to turn this library into a debug example program. @see mbedBug.cpp:int main ()
-#include <mbed.h>
-#include <stdint.h>
-#define _CreateStatusLED \
-static StatusLED<0,1> Status (GREEN_LED);\
-
-#define ASSERT(STATEMENT, MESSAGE) {\
-    if (!(STATEMENT)) {\
-        printf("ASSERT: %s\r\n%s, line %d\r\n", #MESSAGE, __FILE__, __LINE__)\
-        Status.HandleAssert ()\
-        while (true)\
-    }\
-} 
-
-namespace mbedBug {
-
-/* Outputs the firmware Status using the LED on the mbed board.
-This class works by using strings with ASCII Mores Code. Each char in a 
-represents a pulse split into 4 lengths.
-
-| Frame | ASCII | Index | Duty Cycle |
-|:-----:|:-----:|:-----:|:----------:|
-| Off   | ' '   | <= 44 |     0%     |
-| Long  | '-'   | 45    |    1/3     |
-| Short | '.'   | 46    |    1/3     |
-| On    | '_'   | >= 47 |   100%     |
-
-Off could be any value less than 44, and On could be any value greater than 
-47, but ASCII space (' ') and Period ('.') are used by convention because 
-they look like the pulse widths.
-
-## Terminology
-* Frame    - Each character in a char Sequence represents 3 timer interrupts.
-* Pattern  - A null-terminated string of frames.
-* Sequence - A null-terminated string of const char*.
-
-@code
-StatusLED<0, 1> stausLED ();        //< Use <0, 1> if you're LED is active low.
-StatusLED<1, 0> stausLED (LED_2);   //< Use <0, 1> if you're LED is active high.
-    
-const char* ExamplePattern[] = { 
-    "...   ",       //< Blinks fast three times in a row.
-    "...---...   ", //< SOS in Mores Code.
-    "____    ",     //< Slowly blinks on and off.
-    0               //< Must have null-termination pointer.
-};
-
-statusLED.SetPattern (exapmlePattern, 1.5f);
-
-@endcode
-*/
-template <int On, int Off>
-class StatusLED {
-  public:
-  
-    char Count,             //< Counter counts from from 1-3.
-        Period;             //< The current Period char.
-    
-    float Frequency;        //< The Period length
-
-    const char** Sequence;  //< Null-terminated string of pointers.
-    
-    const char* Pattern,    //< The current string in the Sequence.
-        * Cursor;           //< The current char in the current string.
-    
-    DigitalOut Pin;         //< Red LED on the mbed board.
-    
-    Ticker Blinker;         //< Ticker for blinking the LEDs.
-    
-    static const float FrequencyDefault = 0.5f, //< Default Frequency in hertz.
-        FrequencyMin = 0.01f,                   //< Min Frequency in hertz.
-        FrequencyMax = 2.0f;                    //< Max Frequency in hertz.
-    
-    typedef enum {
-        Off     = 0,
-        Short   = 63,
-        Long    = 127,
-        On      = 255
-    } Pulse;
-    
-    /* Simple constructor. */
-    StatusLED (PinName LEDPin = LED1, float Frequency = FrequencyDefault)
-    :   Count     (0),
-        Period    (0),
-        Sequence  (0),
-        Pattern   (0),
-        Cursor    (0),
-        Frequency (Frequency),
-        Pin       (LEDPin, Off) {
-        /// Nothing to do here.
-    }
-    
-    /* Sets the light blinking Sequence. */
-    void SetSequence (char** SequenceNew) {
-        if (!SequenceNew) {
-            Sequence = 0;
-            StopBlinking ();
-            return;
-        }
-        
-        const char* TempString = Sequence[0];
-        
-        if (TempString == 0 || TempString[0] == 0) {
-           #if _Debug
-            printf ("\r\n\nError: First Sequence and first char can't be null.\r\n\n");
-           #endif
-            return;
-        }
-        Sequence = SequenceNew;
-        Pattern = SequenceNew[0];
-        Cursor = Pattern;
-        CurrentByte = *Cursor;
-        Update ();
-    }
-    
-    /* Turns off the Blinker. */
-    void TurnOff () {
-        Pin = Off; 
-    }
-    
-    /* Turns on the Blinker. */
-    void TurnOn () { 
-        Color = ColorA;
-        Update (); 
-    }
-    
-    /* Starts flashing the SOS Sequence. */
-    void FlashSOS () {
-        Sequence = SoSPattern ();
-        Cursor = Sequence[0];
-        Cursor = *Cursor;
-        Period = *Cursor;
-    }
-    
-    /* Starts blinking. */
-    void StartBlinking () {
-        const char* _pattern = Sequence[0];
-        Pattern = _pattern;
-        Cursor = _pattern;
-        Period = *_pattern;
-
-        Blinker.attach (this, &StatusLED::blink, Frequency / 4);
-        Update ();
-    }
-    
-    /* Stops blinking and turns off the LED. */
-    void StopBlinking  () {
-        TurnOff ();
-        Blinker.detach ();
-        Pin = Off;
-        Update ();
-    }
-    
-    /* Sets the blink Frequency. */
-    void FrequencySet (float Value) {
-        Frequency = Value;
-        Blinker.attach (this, &StatusLED::Blink, Value);
-    }
-    
-    /* Handler for the ASSERT macro. */
-    void HandleAssert () {
-        SetPattern (SoSPattern ());
-    }
-    
-    /* Pattern blinks three times in a row. */
-    const char** Blink3TimesPattern () {
-        static const char** Sequence = { "...   ", 0 };
-        return &Sequence;
-    }
-
-    /* Standard blink Sequence. */
-    const char** SlowBlinkPattern () {
-        static const char** Sequence = { "__  ", 0 };
-        return &Sequence;
-    }
-    
-    /* Standard blink Sequence. */
-    const char** FastBlinkPattern ()     {
-        static const char** Sequence = { "_ ", 0 };
-        return &Sequence;
-    }
-    
-    /* Standard SOS Sequence. */
-    const char** SoSPattern () {
-        static const char** Sequence = { "...---...      ", 0 };
-        return &Sequence;
-    }
-    
-    /* Returns the next char in the Sequence. */
-    inline char GetNextPeriod () {
-        /// We've already checked that the Sequence and Cursor and not null.
-        
-        char period_temp = *(++Cursor);
-        
-        if (period_temp == 0) {
-            const char* temp_pattern = *(Pattern + sizeof (const char*));
-            
-            if (!temp_pattern) {
-                const char* _cursor = Sequence[0];
-                Cursor = Pattern = _cursor;
-                return *_cursor;
-            }
-            Pattern = temp_pattern;
-            return *temp_pattern;    //< We don't particularly care if the Period is '\0'.
-        }
-        
-        return period_temp;
-    }
-    
-    /* Updates the Status LED. */
-    inline void Update () {
-        const char* period_temp = Period;
-        if (!Sequence || !period_temp) return;
-        
-        if (Count == 0) {       //< Beginning of cycle Period.
-            char _period = GetNextPeriod ();
-            Period = _period;
-            Count = 1;
-            if (_period < '-') {
-                Pin = Off; 
-                return; 
-            }
-            Pin = On;
-            return;
-        }
-        else if (Count == 1) { //< 1/3 duty cycle.
-            Count = 2;
-            if (Period == '.') {
-                Pin = Off; 
-                return; 
-            }
-            return;
-        }
-        /// 2/3 duty cycle.
-        Count = 0;
-        if (Period > '.')       //< Leave the LED on
-            return;
-        Pin = Off;
-    }
-};
-}
-
-// _D_e_m_o_____________________________________________________________________
-
-#if 0   //< Set to non-zero to run this demo.
-
-using namespace mbedBug;
-
-StatusLED Status ();
-InterruptIn switch3 (SW3);
-
-const char* ExamplePattern[] = {
-    "...   ",           //< Blinks fast three times in a row.
-    "...---...      ",  //< SOS in Mores Code.
-    "____    ",         //< Slowly blinks on and off.
-    0                   //< Pattern must have null-term pointer.
-};
-/* Interrupt handler for SW2. */
-void SwitchIRQHandler () {
-    static bool ExamplePatterMode = true;
-    
-    if (ExamplePatterMode) {
-        Status.SetPattern (ExamplePattern);
-        Status.StartBlinking ();
-        ExamplePatterMode = false;
-    }
-    else {  
-        Status.SetPattern(Status.SOSPattern ()));
-        ExamplePatterMode = true;
-    }
-}
-
-int main() {
-    printf ("\r\n\nTesting mbed Utils.\r\n\n");
-    PrintLine ();
-    
-    switch3.rise (&SwitchIRQHandler);
-    //Status.StartBlinking ()
-    
-    while (true);
-}
-
-#endif  //< Demo
-#endif
--- a/MorseCode.cpp	Wed Apr 08 12:36:17 2020 +0000
+++ b/MorseCode.cpp	Thu Apr 09 22:40:13 2020 +0000
@@ -1,6 +1,6 @@
 /* mbedBug @version 0.x
 @link    https://github.com/KabukiStarship/mbedbug.git
-@file    /morse_code.cpp
+@file    /MorseCode.cpp
 @author  Cale McCollough <https://cale-mccollough.github.io>
 @license Copyright 2016-20 (C) Kabuki Starship <kabukistarship.com>; all rights 
 reserved (R). This Source Code Form is subject to the terms of the Mozilla 
--- a/MorseCode.h	Wed Apr 08 12:36:17 2020 +0000
+++ b/MorseCode.h	Thu Apr 09 22:40:13 2020 +0000
@@ -7,12 +7,12 @@
 Public License, v. 2.0. If a copy of the MPL was not distributed with this file,
 You can obtain one at <https://mozilla.org/MPL/2.0/>. */
 #pragma once
-#ifndef MBEDBUG_MORSECODE_DECL
-#define MBEDBUG_MORSECODE_DECL
-namespace mbedbug {
+#ifndef MbedBugMorseCodeDecl
+#define MbedBugMorseCodeDecl
+namespace mbedBug {
 
 /* Gets the Morse code for the given char. */
 const char* CodeMorseEncode (char Value);
 
-}   //< namespace mbedbug
+}   //< namespace mbedBug
 #endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/StatusIndicator.h	Thu Apr 09 22:40:13 2020 +0000
@@ -0,0 +1,292 @@
+/* mbedBug @version 0.x
+@link    https://github.com/KabukiStarship/mbedBug.git
+@file    /StatusIndicator.h
+@author  Cale McCollough <https://cale-mccollough.github.io>
+@license Copyright 2016-20 (C) Kabuki Starship <kabukistarship.com>; all rights 
+reserved (R). This Source Code Form is subject to the terms of the Mozilla 
+Public License, v. 2.0. If a copy of the MPL was not distributed with this file,
+You can obtain one at <https://mozilla.org/MPL/2.0/>. */
+#ifndef _mbedBug_StatusLED_header
+#define _mbedBug_StatusLED_header
+#define _Debug 0    //< Use this flag to turn this library into a debug example program. @see mbedBug.cpp:int main ()
+#include <mbedBug.h>
+#define _CreateStatusLED \
+static StatusIndicator<0,1> Status (GREEN_LED);\
+
+#define Assert(Statement, Message) {\
+  if (!(Statement)) {\
+    printf("Assert: %s\r\n%s, line %d\r\n", #Message, __FILE__, __LINE__)\
+    Status.HandleAssert ()\
+    while (true)\
+  }\
+} 
+
+namespace mbedBug {
+
+/* Outputs the firmware Status using an LED/buzzer/etc.
+This class works by using strings with ASCII Mores Code. Each char in a 
+represents a pulse split into 4 lengths.
+
+| Frame | ASCII | Index | Duty Cycle |
+|:-----:|:-----:|:-----:|:----------:|
+| Off   | ' '   | <= 44 |     0%     |
+| Long  | '-'   | 45    |    1/3     |
+| Short | '.'   | 46    |    1/3     |
+| On    | '_'   | >= 47 |   100%     |
+
+Off could be any value less than 44, and On could be any value greater than 
+47, but ASCII space (' ') and Period ('.') are used by convention because 
+they look like the pulse widths.
+
+## Terminology
+* Frame    - Each character in a char Sequence represents 3 timer interrupts.
+* Pattern  - A null-terminated string of frames.
+* Sequence - A null-terminated string of const char*.
+
+@code
+StatusIndicator<0, 1> stausLED ();        //< Use <0, 1> if you're LED is active low.
+StatusIndicator<1, 0> stausLED (LED_2);   //< Use <0, 1> if you're LED is active high.
+    
+const char* ExamplePattern[] = { 
+    "...   ",       //< Blinks fast three times in a row.
+    "...---...   ", //< SOS in Mores Code.
+    "____    ",     //< Slowly blinks on and off.
+    0               //< Must have null-termination pointer.
+};
+
+statusLED.SetPattern (exapmlePattern, 1.5f);
+
+@endcode
+*/
+template <int On, int Off>
+class StatusIndicator {
+  public:
+  
+  char Count,             //< Counter counts from from 1-3.
+       Period;             //< The current Period char.
+    
+  float Frequency;        //< The Period length
+
+  const char** Sequence;  //< Null-terminated string of pointers.
+   
+  const char* Pattern,    //< The current string in the Sequence.
+            * Cursor;     //< The current char in the current string.
+    
+  DigitalOut Pin;         //< Red LED on the mbed board.
+    
+  Ticker Blinker;         //< Ticker for blinking the LEDs.
+    
+  static const float FrequencyDefault = 0.5f, //< Default Frequency in hertz.
+                     FrequencyMin = 0.01f,    //< Min Frequency in hertz.
+                     FrequencyMax = 2.0f;     //< Max Frequency in hertz.
+    
+    typedef enum {
+      Off     = 0,
+      Short   = 63,
+      Long    = 127,
+      On      = 255
+    } Pulse;
+    
+    /* Simple constructor. */
+    StatusIndicator (PinName LEDPin = LED1, float Frequency = FrequencyDefault):
+      Count     (0),
+      Period    (0),
+      Sequence  (0),
+      Pattern   (0),
+      Cursor    (0),
+      Frequency (Frequency),
+      Pin       (LEDPin, Off) {
+      /// Nothing to do here.
+    }
+    
+    /* Sets the light blinking Sequence. */
+    void SetSequence (char** SequenceNew) {
+      if (!SequenceNew) {
+        Sequence = 0;
+        StopBlinking ();
+        return;
+      }
+        
+      const char* TempString = Sequence[0];
+        
+      if (TempString == 0 || TempString[0] == 0) {
+        DPrintf("\r\n\nError: First Sequence and first char can't be null."
+                "\r\n\n");
+        return;
+      }
+      Sequence = SequenceNew;
+      Pattern = SequenceNew[0];
+      Cursor = Pattern;
+      CurrentByte = *Cursor;
+      Update ();
+    }
+    
+    /* Turns off the Blinker. */
+    void TurnOff () {
+      Pin = Off; 
+    }
+    
+    /* Turns on the Blinker. */
+    void TurnOn () { 
+      Color = ColorA;
+      Update (); 
+    }
+    
+    /* Starts flashing the SOS Sequence. */
+    void FlashSOS () {
+      Sequence = SoSPattern ();
+      Cursor = Sequence[0];
+      Cursor = *Cursor;
+      Period = *Cursor;
+    }
+    
+    /* Starts blinking. */
+    void StartBlinking () {
+      const char* _pattern = Sequence[0];
+      Pattern = _pattern;
+      Cursor = _pattern;
+      Period = *_pattern;
+
+      Blinker.attach (this, &StatusIndicator::blink, Frequency / 4);
+      Update ();
+    }
+    
+    /* Stops blinking and turns off the LED. */
+    void StopBlinking  () {
+      TurnOff ();
+      Blinker.detach ();
+      Pin = Off;
+      Update ();
+    }
+    
+    /* Sets the blink Frequency. */
+    void FrequencySet (float Value) {
+      Frequency = Value;
+      Blinker.attach (this, &StatusIndicator::Blink, Value);
+    }
+    
+    /* Handler for the Assert macro. */
+    void HandleAssert () {
+      SetPattern (SoSPattern ());
+    }
+    
+    /* Pattern blinks three times in a row. */
+    const char** Blink3TimesPattern () {
+      static const char** Sequence = { "...   ", 0 };
+      return &Sequence;
+    }
+
+    /* Standard blink Sequence. */
+    const char** SlowBlinkPattern () {
+        static const char** Sequence = { "__  ", 0 };
+        return &Sequence;
+    }
+    
+    /* Standard blink Sequence. */
+    const char** FastBlinkPattern ()     {
+        static const char** Sequence = { "_ ", 0 };
+        return &Sequence;
+    }
+    
+    /* Standard SOS Sequence. */
+    const char** SoSPattern () {
+        static const char** Sequence = { "...---...      ", 0 };
+        return &Sequence;
+    }
+    
+    /* Returns the next char in the Sequence. */
+    inline char GetNextPeriod () {
+        /// We've already checked that the Sequence and Cursor and not null.
+        
+        char period_temp = *(++Cursor);
+        
+        if (period_temp == 0) {
+            const char* temp_pattern = *(Pattern + sizeof (const char*));
+            
+            if (!temp_pattern) {
+                const char* _cursor = Sequence[0];
+                Cursor = Pattern = _cursor;
+                return *_cursor;
+            }
+            Pattern = temp_pattern;
+            return *temp_pattern;    //< We don't particularly care if the Period is '\0'.
+        }
+        
+        return period_temp;
+    }
+    
+    /* Updates the Status LED. */
+    inline void Update () {
+        const char* period_temp = Period;
+        if (!Sequence || !period_temp) return;
+        
+        if (Count == 0) {       //< Beginning of cycle Period.
+            char _period = GetNextPeriod ();
+            Period = _period;
+            Count = 1;
+            if (_period < '-') {
+                Pin = Off; 
+                return; 
+            }
+            Pin = On;
+            return;
+        }
+        else if (Count == 1) { //< 1/3 duty cycle.
+            Count = 2;
+            if (Period == '.') {
+                Pin = Off; 
+                return; 
+            }
+            return;
+        }
+        /// 2/3 duty cycle.
+        Count = 0;
+        if (Period > '.')       //< Leave the LED on
+            return;
+        Pin = Off;
+    }
+};
+}
+
+// _D_e_m_o_____________________________________________________________________
+
+#if 0   //< Set to non-zero to run this demo.
+
+using namespace mbedBug;
+
+StatusIndicator Status ();
+InterruptIn switch3 (SW3);
+
+const char* ExamplePattern[] = {
+    "...   ",           //< Blinks fast three times in a row.
+    "...---...      ",  //< SOS in Mores Code.
+    "____    ",         //< Slowly blinks on and off.
+    0                   //< Pattern must have null-term pointer.
+};
+/* Interrupt handler for SW2. */
+void SwitchIRQHandler () {
+  static bool ExamplePatterMode = true;
+    
+  if (ExamplePatterMode) {
+    Status.SetPattern (ExamplePattern);
+    Status.StartBlinking ();
+    ExamplePatterMode = false;
+  }
+  else {  
+    Status.SetPattern(Status.SOSPattern ()));
+    ExamplePatterMode = true;
+  }
+}
+
+int main() {
+  printf ("\r\n\nTesting mbed Utils.\r\n\n");
+  PrintLine ();
+    
+  switch3.rise (&SwitchIRQHandler);
+  //Status.StartBlinking ()
+    
+  while (true);
+}
+
+#endif  //< Demo
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/StatusIndicatorRGB.h	Thu Apr 09 22:40:13 2020 +0000
@@ -0,0 +1,221 @@
+/* mbedbug @version 0.x
+@link  https://github.com/KabukiStarship/mbedbug.git
+@file    /StatusIndicatorRGB.h
+@author  Cale McCollough <https://cale-mccollough.github.io>
+@license Copyright 2016-20 (C) Kabuki Starship <kabukistarship.com>; all rights 
+reserved (R). This Source Code Form is subject to the terms of the Mozilla 
+Public License, v. 2.0. If a copy of the MPL was not distributed with this file,
+You can obtain one at <https://mozilla.org/MPL/2.0/>. */
+#ifndef MbedBugStatusIndicatorRGBDecl
+#define MbedBugStatusIndicatorRGBDecl
+#include "mbedBug.h"
+#define CREATE_RGB_STATUS_LED \
+static RGBStatusLED<0,1> Status (RED_LED, GREEN_LED, BLUE_LED);\
+
+#define Assert(statement, message) {\
+  if (!(statement)) {\
+  printf("Assert: %s\r\n%s, line %d\r\n", #message, __FILE__, __LINE__)\
+  Status.HandleAssert ()\
+  while (true)\
+  }\
+}
+
+namespace Primary {
+
+typedef enum {
+  ColorPresetBlack   = 0,
+  ColorPresetRed   = 1,
+  ColorPresetYellow  = 2,
+  ColorPresetGreen   = 3,
+  ColorPresetCyan   = 4,
+  ColorPresetBlue  = 5,
+  ColorPresetMagenta = 6,
+  ColorPresetWhite   = 7
+} Color;
+}   //< namespace Primary
+
+namespace mbedbug {
+  
+/* The onboard mbed RGB LED.
+Some boards have PWM on the RGB LED, some don't. This class uses DigitalOut(s). 
+There are 8 potential combinations  of Color without PWM (@see Wiki 
+"Color Space").
+
+@code
+RGBStatusLED<0, 1> stausLED (RED_LED, GREEN_LED, BLUE_LED);  //< Use <0, 1> if you're LED is active low.
+RGBStatusLED<1, 0> stausLED (p0, p1, p2);  //< Use <0, 1> if you're LED is active high.
+
+statusLED.SetColorA (Color::);
+
+@endcode
+*/
+template <int On, int Off>
+class RGBStatusLED {
+  public:
+  
+  enum {
+    BrightnessDefault = 128
+  };
+  
+  float Frequency;  //< The Frequency of the blinking.
+  
+  DigitalOut Red,   //< ColorPresetRed LED on the mbed board.
+     Green,     //< ColorPresetGreen LED on the mbed board.
+     Blue;      //< ColorPresetBlue LED on the mbed board.
+  
+  Ticker Blinker;   //< Ticker for blinking the LEDs.
+  
+  uint8_t Color,  //< The current Color.
+    ColorA,     //< Blink Color A.
+    ColorB;     //< Blink Color B.
+  
+  /* Simple constructor. */
+  RGBStatusLED (PinName RedLED, PinName GreenLED, PinName BlueLED, float BinkDelay = 0.2f)
+  :   Frequency (Frequency),
+    Red   (RedLED),
+    Green   (GreenLED),
+    Blue  (BlueLED),
+    Blinker   (),
+    Color   (Color::ColorPresetBlack),
+    ColorA  (Color::ColorPresetBlack),
+    ColorB  (Color::ColorPresetBlack) {
+    Red = Green = Blue = 1;
+  }
+  
+  /* Updates the RGB status LED "frame": Color. */
+  void Update () {
+    switch (Color) {
+      case Color::ColorPresetBlack  : Red = 1; Green = 1; Blue = 1; return;
+      case Color::ColorPresetRed  : Red = 0; Green = 1; Blue = 1; return;
+      case Color::ColorPresetYellow : Red = 0; Green = 0; Blue = 1; return;
+      case Color::ColorPresetGreen  : Red = 1; Green = 0; Blue = 1; return;
+      case Color::ColorPresetCyan   : Red = 1; Green = 0; Blue = 0; return;
+      case Color::ColorPresetBlue   : Red = 1; Green = 1; Blue = 0; return;
+      case Color::ColorPresetMagenta: Red = 0; Green = 1; Blue = 0; return;
+      case Color::ColorPresetWhite  : Red = 0; Green = 0; Blue = 0; return;
+    }
+  }
+  
+  /* Sets ColorA. */
+  void SetColorA (Primary::Color Value) {
+    ColorA = Value; 
+  }
+  
+  /* Sets ColorB. */
+  void SetColorB (Primary::Color Value) {
+    ColorB = Value; 
+  }
+  
+  /* Turns off the Blinker. */
+  void TurnOff () {
+    Red = Green = Blue = 1;
+  }
+  
+  /* Turns on the Blinker. */
+  void TurnOn () { 
+    Color = ColorA; 
+    Update ();
+  }
+  
+  /* Sets the Color of the Blinker. */
+  void ColorsSet (Primary::Color ColorA, Primary::Color ColorB = Primary::ColorPresetBlack)
+  {
+    ColorA = ColorA;
+    ColorB = ColorB;
+  }
+  
+  void FlashRedBlue ()
+  /* Starts flashing Red and Blue lights. */
+  {
+    ColorA = Primary::ColorPresetRed;
+    ColorB = Primary::ColorPresetBlue;
+    StartBlinking ();
+  }
+  
+  void StartBlinking ()
+  /* Starts blinking. */
+  {
+    Blinker.attach (this, &RGBStatusLED::Blink, Frequency);
+    Color = ColorA;
+    Update ();
+  }
+  
+  /* Stops blinking and turns off the LED. */
+  void StopBlinking  () {
+    TurnOff ();
+    Blinker.detach ();
+    Color = Primary::ColorPresetBlack;
+    Update ();
+  }
+  
+  /* Starts blinking and turns on Color A. */
+  void StopBlinkingA () {
+    Color = ColorA;
+    Blinker.detach ();
+  }
+  
+  /* Starts blinking and turns on Color B. */
+  void StopBlinkingB () {
+    Color = ColorB;
+    Blinker.detach ();
+  }
+  
+  
+  /* Sets the Blink Frequency. */
+  void FrequencySet (float Value) {
+    Frequency = Value;
+    Blinker.attach (this, &RGBStatusLED::Blink, Value);
+  }
+  
+  /* Handler for the Assert macro. */
+  void HandleAssert () {
+    FlashRedBlue ()
+  }
+
+  private:
+  
+  /* Blinks the status RGB LED on the mbed board between ColorA and ColorB. */
+  void Blink () { 
+    Color = (Color == ColorA) ? ColorB : ColorA;   
+    Update ();
+  }
+};
+}
+
+// _D_e_m_o_____________________________________________________________________
+
+#if 0   //< Set to non-zero to run this demo.
+
+using namespace mbedbug;
+
+RGBStatusLED Status (LED_RED, LED_GREEN, LED_BLUE);
+InterruptIn Switch3 (SW3);
+
+/* Interrupt handler for SW2. */
+void SW3Handler () {
+  static int counter = 16;
+  
+  if (++counter > 15) {
+    Status.FlashRedBlue (); counter = 0;
+  }
+  else if (counter & 1) { 
+    Status.StopBlinking  ();
+  } else {  
+    Status.SetColorA ((Primary::Color)(counter >> 1));
+    Status.SetColorB (Primary::ColorPresetBlack);
+    Status.StartBlinking ();
+  }
+}
+
+int main() {
+  printf ("\r\nTesting mbed Utils.\r\n");
+  PrintLine ('-');
+  
+  Switch3.rise (&SW3Handler);
+  //Status.StartBlinking ();
+  
+  while (true);
+}
+#endif  //< #if _Demo
+
+#endif
--- a/mbedBug.cpp	Wed Apr 08 12:36:17 2020 +0000
+++ b/mbedBug.cpp	Thu Apr 09 22:40:13 2020 +0000
@@ -1,6 +1,6 @@
 /** mbedbug @version 0.x
 @link    https://github.com/KabukiStarship/mbedbug.git
-@file    /mbedbug.cpp
+@file    /mbedBug.cpp
 @author  Cale McCollough <https://cale-mccollough.github.io>
 @license Copyright 2016-20 (C) Kabuki Starship <kabukistarship.com>; all rights 
 reserved (R). This Source Code Form is subject to the terms of the Mozilla 
--- a/mbedBugConfig.h	Wed Apr 08 12:36:17 2020 +0000
+++ b/mbedBugConfig.h	Thu Apr 09 22:40:13 2020 +0000
@@ -1,6 +1,6 @@
 /** mbedBug @version 0.x
 @link    https://github.com/KabukiStarship/mbedbug.git
-@file    /mbedbug_config.h
+@file    /mbedBugConfig.h
 @author  Cale McCollough <https://cale-mccollough.github.io>
 @license Copyright 2016-20 (C) Kabuki Starship <kabukistarship.com>; all rights 
 reserved (R). This Source Code Form is subject to the terms of the Mozilla