Abstract class for LED driver component. Including "LedPwmOut API" class.

Dependents:   PCA962x PCA9632

Files at this revision

API Documentation at this revision

Comitter:
nxp_ip
Date:
Wed Mar 04 08:16:10 2015 +0000
Child:
1:8a0aa36b236c
Commit message:
Initial version

Changed in this revision

CompLedDvr.cpp Show annotated file Show diff for this revision Revisions of this file
CompLedDvr.h Show annotated file Show diff for this revision Revisions of this file
CompLedDvrAPI.h Show annotated file Show diff for this revision Revisions of this file
LedPwmOut.cpp Show annotated file Show diff for this revision Revisions of this file
LedPwmOut.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CompLedDvr.cpp	Wed Mar 04 08:16:10 2015 +0000
@@ -0,0 +1,6 @@
+
+#include    "mbed.h"
+#include    "CompLedDvr.h"
+
+CompLedDvr::CompLedDvr() {}
+CompLedDvr::~CompLedDvr() {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CompLedDvr.h	Wed Mar 04 08:16:10 2015 +0000
@@ -0,0 +1,71 @@
+/** Abstract class for LED driver component
+ *
+ *  Abstract class for LED driver family
+ *  No instance can be made from this class
+ *
+ *  @author  Akifumi (Tedd) OKANO, NXP Semiconductors
+ *  @version 0.5
+ *  @date    04-Mar-2015
+ *
+ *  Released under the Apache 2 license License
+ */
+
+#ifndef     MBED_CompLedDvr
+#define     MBED_CompLedDvr
+
+#include    "mbed.h"
+
+typedef enum {
+    /** Pin names of LED driver. Those are L0 .. L3, not like "LED0" to avoid mbed board LED names  */
+    L0,            /**< LED0 pin                               */
+    L1,            /**< LED2 pin                               */
+    L2,            /**< LED2 pin                               */
+    L3,            /**< LED2 pin                               */
+    L4,            /**< LED2 pin                               */
+    L5,            /**< LED2 pin                               */
+    L6,            /**< LED2 pin                               */
+    L7,            /**< LED2 pin                               */
+    L8,            /**< LED2 pin                               */
+    L9,            /**< LED2 pin                               */
+    L10,           /**< LED2 pin                               */
+    L11,           /**< LED2 pin                               */
+    L12,           /**< LED2 pin                               */
+    L13,           /**< LED2 pin                               */
+    L14,           /**< LED2 pin                               */
+    L15,           /**< LED2 pin                               */
+    L16,           /**< LED2 pin                               */
+    L17,           /**< LED2 pin                               */
+    L18,           /**< LED2 pin                               */
+    L19,           /**< LED2 pin                               */
+    L20,           /**< LED2 pin                               */
+    L21,           /**< LED2 pin                               */
+    L22,           /**< LED2 pin                               */
+    L23,           /**< LED23 pin                               */
+    L_NC = ~0x0L   /**< for when the pin is left no-connection */
+} LedPinName;
+
+
+/** Abstract class for LED driver component
+ *
+ *  @class CompLedDvr
+ *
+ *  Abstract class for LED driver family
+ *  No instance can be made from this class
+ */
+class CompLedDvr
+{
+public:
+    /** Default constructor */
+    CompLedDvr();
+
+    /** Destructor */
+    virtual ~CompLedDvr();
+
+    /** Virtual function to define standard function of the component   */
+    virtual void    pwm( int port, float v )    = 0;
+}
+;
+
+#endif  //  MBED_CompLedDvr
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CompLedDvrAPI.h	Wed Mar 04 08:16:10 2015 +0000
@@ -0,0 +1,1 @@
+#include    "LedPwmOut.h"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LedPwmOut.cpp	Wed Mar 04 08:16:10 2015 +0000
@@ -0,0 +1,23 @@
+#include    "mbed.h"
+#include    "LedPwmOut.h"
+
+LedPwmOut::LedPwmOut( CompLedDvr &ledp, LedPinName pin_name )
+    : leddvrp( &ledp ), pin( pin_name )
+{
+    pwm( 0.0 );
+}
+
+LedPwmOut::~LedPwmOut()
+{
+}
+
+void LedPwmOut::pwm( float v )
+{
+    leddvrp->pwm( pin, v );
+}
+
+LedPwmOut& LedPwmOut::operator=( float rhs )
+{
+    pwm( rhs );
+    return ( *this );
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LedPwmOut.h	Wed Mar 04 08:16:10 2015 +0000
@@ -0,0 +1,80 @@
+/** LedPwmOut class for LED driver component
+ *
+ *  @author  Akifumi (Tedd) OKANO, NXP Semiconductors
+ *  @version 0.5
+ *  @date    04-Mar-2015
+ *
+ *  Released under the Apache 2 license License
+ */
+
+#ifndef     MBED_LedPwmOut
+#define     MBED_LedPwmOut
+
+#include    "mbed.h"
+#include    "CompLedDvr.h"
+
+/** LedPwmOut class
+ *
+ *  @class LedPwmOut
+ *
+ *  "LedPwmOut" class works like "PwmOut" class of mbed-SDK. 
+ *  This class provides API on device's pin level with abstracting the LED controller. 
+ *
+ *  Example:
+ *  @code
+ *  #include "mbed.h"
+ *  #include "PCA9626.h"
+ *  
+ *  PCA9626     led_cntlr( p28, p27, 0xC4 );  //  SDA, SCL, Slave_address(option)
+ *  LedPwmOut   led( led_cntlr, L0 );
+ *  
+ *  int main()
+ *  {
+ *      while( 1 ) {
+ *          for( float p = 0.0f; p < 1.0f; p += 0.1f ) {
+ *              led     = p;
+ *              wait( 0.1 );
+ *          }
+ *      }
+ *  }
+ *  @endcode
+ */
+class LedPwmOut
+{
+public:
+
+    /** Create a LedPwmOutCC instance connected to a pin on the LED driver
+     *  A pin which performs PWM and constant current sink
+     *
+     * @param ledp          Instance of a device (LED driver)
+     * @param pin_name      Specifying pin by LedPinName like 'L7'. 
+     *
+     * @note
+     *   Pin names of LED driver are defined like L0, L1, L2.. It is not like "LED0". 
+     *   Because we cannot use mbed reserved symbols. 
+     */
+    LedPwmOut( CompLedDvr &ledp, LedPinName pin_name );
+
+    /** Destractor
+     */
+    virtual ~LedPwmOut();
+
+    /** Set PWM duty-cycle
+     *
+     * @param v             Ratio of duty-cycle. '0.0' for 0 %. '1.0' for 99.6 % on PCA9956A and 100 % for PCA9955A.
+     */
+    virtual void    pwm( float v );
+
+    /** A shorthand for pwm()
+     */
+    LedPwmOut&      operator= ( float rhs );
+
+private:
+    CompLedDvr      *leddvrp;
+    LedPinName      pin;
+
+    void    pwm( int pin, float value );
+}
+;
+
+#endif  //  MBED_LedPwmOut