Abstract class for 'constant current (CC)' LED driver component. Including "LedPwmOutCC API" class.

Dependents:   PCA995xA

Files at this revision

API Documentation at this revision

Comitter:
nxp_ip
Date:
Wed Mar 04 10:14:02 2015 +0000
Child:
1:877856770b37
Commit message:
Initial version

Changed in this revision

CompLedDvrCC.cpp Show annotated file Show diff for this revision Revisions of this file
CompLedDvrCC.h Show annotated file Show diff for this revision Revisions of this file
CompLedDvrCCAPI.h Show annotated file Show diff for this revision Revisions of this file
LedPwmOutCC.cpp Show annotated file Show diff for this revision Revisions of this file
LedPwmOutCC.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CompLedDvrCC.cpp	Wed Mar 04 10:14:02 2015 +0000
@@ -0,0 +1,6 @@
+
+#include    "mbed.h"
+#include    "CompLedDvrCC.h"
+
+CompLedDvrCC::CompLedDvrCC() {}
+CompLedDvrCC::~CompLedDvrCC() {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CompLedDvrCC.h	Wed Mar 04 10:14:02 2015 +0000
@@ -0,0 +1,74 @@
+/** Abstract class for 'constant-current (CC)' LED driver component
+ *
+ *  Abstract class for CC-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_CompLedDvrCC
+#define     MBED_CompLedDvrCC
+
+#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 CC-LED driver component
+ *
+ *  @class CompLedDvrCC
+ *
+ *  Abstract class for LED driver family
+ *  No instance can be made from this class
+ */
+class CompLedDvrCC
+{
+public:
+    /** Default constructor */
+    CompLedDvrCC();
+
+    /** Destructor */
+    virtual ~CompLedDvrCC();
+
+    /** Virtual function to define standard function of the component   */
+    virtual void    pwm( int port, float v )    = 0;
+
+    /** Virtual function to define standard function of the component   */
+    virtual void    current( int port, float v )    = 0;
+}
+;
+
+#endif  //  MBED_CompLedDvrCC
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CompLedDvrCCAPI.h	Wed Mar 04 10:14:02 2015 +0000
@@ -0,0 +1,1 @@
+#include    "LedPwmOutCC.h"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LedPwmOutCC.cpp	Wed Mar 04 10:14:02 2015 +0000
@@ -0,0 +1,27 @@
+#include    "mbed.h"
+#include    "LedPwmOutCC.h"
+
+LedPwmOutCC::LedPwmOutCC( CompLedDvrCC &ledp, LedPinName pin_name )
+    : leddvrp( &ledp ), pin( pin_name )
+{
+    pwm( 0.0 );
+}
+
+LedPwmOutCC::~LedPwmOutCC()
+{
+}
+
+void LedPwmOutCC::pwm( float v )
+{
+    leddvrp->pwm( pin, v );
+}
+
+void LedPwmOutCC::current( float v )
+{
+    leddvrp->current( pin, v );
+}
+LedPwmOutCC& LedPwmOutCC::operator=( float rhs )
+{
+    pwm( rhs );
+    return ( *this );
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LedPwmOutCC.h	Wed Mar 04 10:14:02 2015 +0000
@@ -0,0 +1,86 @@
+/** LedPwmOutCC class for LED driver component
+ *
+ *  @author  Akifumi (Tedd) OKANO, NXP Semiconductors
+ *  @version 0.5
+ *  @date    04-Mar-2015
+ *
+ *  Released under the Apache 2 license
+ */
+
+#ifndef     MBED_LedPwmOutCC
+#define     MBED_LedPwmOutCC
+
+#include    "mbed.h"
+#include    "CompLedDvrCC.h"
+
+/** LedPwmOutCC class
+ *
+ *  @class LedPwmOutCC
+ *
+ *  "LedPwmOutCC" 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 "PCA9956A.h"
+ *  
+ *  PCA9956A    led_cntlr( p28, p27, 0xC4 );  //  SDA, SCL, Slave_address(option)
+ *  LedPwmOutCC 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 LedPwmOutCC
+{
+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. 
+     */
+    LedPwmOutCC( CompLedDvrCC &ledp, LedPinName pin_name );
+
+    /** Destractor
+     */
+    virtual ~LedPwmOutCC();
+
+    /** 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 );
+
+    /** Set output current
+     *
+     * @param v             Ratio of output current. 1.0 for 100 % output of hardware setting
+     */
+    virtual void    current( float v );
+    
+    /** A shorthand for pwm()
+     */
+    LedPwmOutCC&      operator= ( float rhs );
+
+private:
+    CompLedDvrCC    *leddvrp;
+    LedPinName      pin;
+
+    void    pwm( int pin, float value );
+}
+;
+
+#endif  //  MBED_LedPwmOutCC