fork of library for MAX14661 16:2 mux

Dependents:   ard2pmod

Fork of max14661 by Maxim Integrated

Revision:
10:ccbe1afdab31
Parent:
8:44257d87fa9e
Child:
11:d3971b4fbdd8
--- a/max14661.cpp	Tue Mar 17 00:05:40 2015 +0000
+++ b/max14661.cpp	Tue Sep 29 22:26:09 2015 +0000
@@ -8,6 +8,8 @@
 * Started: 11NOV14
 *
 * Updated: 
+* 29SEP15 - added second constructor that uses pointer to I2C bus
+*         - removed redundant comments, see 'DRY' methodology
 *
 * @brief Source file for MAX14661 class
 *
@@ -49,55 +51,38 @@
 #include "max14661.h"
 
 
-/**********************************************************//**
-* Constructor for Max14661 Class
-*
-* On Entry:
-*     @param[in] sda - sda pin of I2C bus
-*     @param[in] scl - scl pin of I2C bus
-*     @param[in] i2c_adrs - 7-bit slave address of MAX14661
-*
-* On Exit:
-*    @return none
-*
-* Example:
-* @code
-* 
-* //declare mux object
-* Max14661 mux(D14, D15, MAX14661_I2C_ADRS0); 
-*
-* @endcode
-**************************************************************/
-Max14661::Max14661(PinName sda, PinName scl, max14661_i2c_adrs_t i2c_adrs) :
-I2C(sda, scl)
+//*********************************************************************
+Max14661::Max14661(I2C *i2c_bus, max14661_i2c_adrs_t i2c_adrs): _p_i2c(i2c_bus)
 {
-    w_adrs = (i2c_adrs << 1);
-    r_adrs = (w_adrs | 0x01);
+    _i2c_owner = false;
+    
+    _r_adrs = ((i2c_adrs << 1) | 1);
+    _w_adrs = (i2c_adrs << 1);
 }
 
 
-/******************************************************************//**
-* Writes given commands to CMD_A and CMD_B
-*
-* On Entry:
-*     @param[in] cmdA - command for CMD_A
-*     @param[in] cmdB - command for CMD_B
-*
-* On Exit:
-*     @return return value = 0 on success, non-0 on failure
-*
-* Example:
-* @code
-*
-* //declare mux object
-* Max14661 mux(D14, D15, MAX14661_I2C_ADRS0); 
-*
-* uint16_t rtn_val;  
-*
-* rtn_val = mux.wrt_cmd_registers(DISABLE_BANK, DISABLE_BANK);
-* 
-* @endcode
-**********************************************************************/
+//*********************************************************************
+Max14661::Max14661(PinName sda, PinName scl, max14661_i2c_adrs_t i2c_adrs)
+{
+    _p_i2c = new I2C(sda, scl);
+    _i2c_owner = true;
+    
+    _r_adrs = ((i2c_adrs << 1) | 1);
+    _w_adrs = (i2c_adrs << 1);
+}
+
+
+//*********************************************************************
+Max14661::~Max14661()
+{
+    if(_i2c_owner) 
+    {
+        delete _p_i2c;
+    }
+}
+
+
+/*********************************************************************/
 uint16_t Max14661::wrt_cmd_registers(max14661_cmds_t cmdA, 
                               max14661_cmds_t cmdB)
 {
@@ -110,37 +95,13 @@
     data[data_length++] = cmdA;
     data[data_length++] = cmdB;
     
-    rtn_val = write(w_adrs,(const char*) data, data_length);
+    rtn_val = _p_i2c->write(_w_adrs,(const char*) data, data_length);
     
     return(rtn_val);
 }
 
 
-/******************************************************************//**
-* Writes bankA and bankB to coresponding shadow registers
-*
-* On Entry:
-*     @param[in] bankA - binary representation of switch states
-*     @param[in] bankB - binary representation of switch states
-*
-* On Exit:
-*     @return return value = 0 on success, non-0 on failure
-*
-* Example:
-* @code
-*
-* //declare mux object
-* Max14661 mux(D14, D15, MAX14661_I2C_ADRS0); 
-*
-* uint16_t bankA = (SW12 | SW02); //example only
-* uint16_t bankB = (SW11 | SW01);
-* uint16_t rtn_val;  
-*  
-* //wite shadow registers
-* rtn_val = mux.wrt_shadow_registers(bankA, bankB);
-*
-* @endcode
-**********************************************************************/
+/*********************************************************************/
 uint16_t Max14661::wrt_shadow_registers(uint16_t bankA, uint16_t bankB)
 {
     uint8_t data[5];
@@ -153,37 +114,13 @@
     data[data_length++] = (bankB & 0x00FF);
     data[data_length++] = ((bankB >> 8) & 0x00FF);
     
-    rtn_val = write(w_adrs,(const char*) data, data_length);
+    rtn_val = _p_i2c->write(_w_adrs,(const char*) data, data_length);
     
     return(rtn_val);
 }
 
 
-/******************************************************************//**
-* Writes bankA and bankB to coresponding direct access registers 
-*
-* On Entry:
-*     @param[in] bankA - binary representation of switch states
-*     @param[in] bankB - binary representation of switch states
-*
-* On Exit:
-*     @return return value = 0 on success, non-0 on failure
-*
-* Example:
-* @code  
-*
-* //declare mux object
-* Max14661 mux(D14, D15, MAX14661_I2C_ADRS0);   
-*
-* uint16_t bankA = (SW12 | SW02); //example only
-* uint16_t bankB = (SW11 | SW01);
-* uint16_t rtn_val;  
-*  
-* //wite shadow registers
-* rtn_val = mux.wrt_dir_registers(bankA, bankB);
-*
-* @endcode
-**********************************************************************/
+/*********************************************************************/
 uint16_t Max14661::wrt_dir_registers(uint16_t bankA, uint16_t bankB)
 {
     uint8_t data[5];
@@ -196,38 +133,13 @@
     data[data_length++] = (bankB & 0x00FF);
     data[data_length++] = ((bankB >> 8) & 0x00FF);
     
-    rtn_val = write(w_adrs,(const char*) data, data_length);
+    rtn_val = _p_i2c->write(_w_adrs,(const char*) data, data_length);
     
     return(rtn_val);
 }
 
 
-/******************************************************************//**
-* Writes bankA and bankB to coresponding shadow register and then 
-* issues copy command for both banks
-*
-* On Entry:
-*     @param[in] bankA - binary representation of switch states
-*     @param[in] bankB - binary representation of switch states
-*
-* On Exit:
-*     @return return value = 0 on success, non-0 on failure
-*
-* Example:
-* @code  
-*
-* //declare mux object
-* Max14661 mux(D14, D15, MAX14661_I2C_ADRS0);   
-*
-* uint16_t bankA = (SW12 | SW02); //example only
-* uint16_t bankB = (SW11 | SW01);
-* uint16_t rtn_val;  
-*  
-* //wite shadow registers
-* rtn_val = mux.set_switches(bankA, bankB);
-*
-* @endcode
-**********************************************************************/
+/*********************************************************************/
 uint16_t Max14661::set_switches(uint16_t bankA, uint16_t bankB)
 {
     uint8_t data[7];
@@ -242,92 +154,42 @@
     data[data_length++] = COPY_SHADOW;
     data[data_length++] = COPY_SHADOW;
     
-    rtn_val = write(w_adrs,(const char*) data, data_length);
+    rtn_val = _p_i2c->write(_w_adrs,(const char*) data, data_length);
     
     return(rtn_val);
 }
 
 
-/**********************************************************//**
-* Reads data from direct access registers starting at DIR0 and 
-* stores it in byte array pointed at by 'data'
-*
-* On Entry:
-*     @param[in] data - pointer to byte array for storing data
-*
-* On Exit:
-*     @param[out] data - data buffer now contains data read 
-*                        from dir registers
-*     @return return value = 0 on success, non-0 on failure
-*
-* Example:
-* @code
-*
-* //declare mux object
-* Max14661 mux(D14, D15, MAX14661_I2C_ADRS0); 
-*
-* uint16_t rtn_val;  
-* uint8_t data[4];
-* 
-* //read direct access registers
-* rtn_val = mux.rd_dir_registers(data);
-*
-* @endcode
-**********************************************************************/
+/*********************************************************************/
 uint16_t Max14661::rd_dir_registers(uint8_t* data)
 {
     uint16_t rtn_val = 1;
     
     data[0] = DIR0;
     
-    rtn_val = write(w_adrs,(const char*) data, 1);
+    rtn_val = _p_i2c->write(_w_adrs,(const char*) data, 1);
     
     if(!rtn_val)
     {
-        rtn_val = read(r_adrs,(char*) data, 4);
+        rtn_val = _p_i2c->read(_r_adrs,(char*) data, 4);
     }
     
     return(rtn_val);
 }
 
 
-/**********************************************************//**
-* Reads data from shadow registers starting at SHDW0 and stores 
-* it in byte array pointed at by 'data'
-*
-* On Entry:
-*     @param[in] data - pointer to byte array for storing data
-*
-* On Exit:
-*     @param[out] data - data buffer now contains data read 
-*                        from shadow registers
-*     @return return value = 0 on success, non-0 on failure
-*
-* Example:
-* @code
-*
-* //declare mux object
-* Max14661 mux(D14, D15, MAX14661_I2C_ADRS0); 
-*
-* uint16_t rtn_val;  
-* uint8_t data[4];
-* 
-* //read shadow registers
-* rtn_val = mux.rd_shadow_registers(data);
-*
-* @endcode
-**************************************************************/      
+/*********************************************************************/ 
 uint16_t Max14661::rd_shadow_registers(uint8_t* data)  
 {
     uint16_t rtn_val = 1;
     
     data[0] = SHDW0;
     
-    rtn_val = write(w_adrs,(const char*) data, 1);
+    rtn_val = _p_i2c->write(_w_adrs,(const char*) data, 1);
     
     if(!rtn_val)
     {
-        rtn_val = read(r_adrs,(char*) data, 4);
+        rtn_val = _p_i2c->read(_r_adrs,(char*) data, 4);
     }
     
     return(rtn_val);