Maxim Integrated 7-bit Sink/Source Current DAC. Driver/library for DS4424, DS4422

Revision:
1:cdaea8ff359c
Parent:
0:a010119890ed
Child:
3:c40703da0faf
--- a/DS4424.cpp	Thu May 10 22:57:25 2018 +0000
+++ b/DS4424.cpp	Fri May 11 23:52:54 2018 +0000
@@ -52,11 +52,22 @@
  
 //******************************************************************************
 
-DS4424::DS4424(I2C &i2c_bus, DS4424_i2c_adrs_t slaveAddress):
+DS4424::DS4424(I2C &i2c_bus, DS4424_i2c_adrs_t slaveAddress, DS4424_ic_t ic_variant):
 m_i2c(i2c_bus), 
 m_writeAddress(slaveAddress <<1),
 m_readAddress ((slaveAddress << 1) | 1)
 {
+    switch(ic_variant) {
+       case DS4424_IC:
+            m_max_ch_reg_addr = REG_OUT3;
+            break;
+        case DS4422_IC:
+            m_max_ch_reg_addr = REG_OUT1;
+            break;
+        default:
+            m_max_ch_reg_addr = REG_OUT3;
+            break;
+    }
 }
  
  
@@ -68,17 +79,17 @@
  
  
 //******************************************************************************
-int DS4424::readRaw(int32_t &result, ChannelReg_e channel) 
+int DS4424::readRaw(int32_t &result, ChannelRegAddr_e chan_addr) 
 {
     uint8_t value;
     int ret = DS4424_ERROR;
     union ds4424_raw_data raw;
     
-    if (channel >= REG_OUT0 && channel <= REG_OUT3)
-        ret = readRegister(channel, value);
- 
+    if (chan_addr >= REG_OUT0 && chan_addr <=  m_max_ch_reg_addr)
+        ret = readRegister(chan_addr, value);
     if (ret != 0)
         return DS4424_ERROR;
+    
 
     raw.bits = value;
     result = raw.dx;
@@ -88,8 +99,9 @@
 
 }
 
+
 //******************************************************************************
-int DS4424::writeRaw(int32_t value, ChannelReg_e channel) 
+int DS4424::writeRaw(int32_t value, ChannelRegAddr_e chan_addr) 
 {
     #define U8_MAX     ((uint8_t)~0U)
     #define S8_MAX     ((int8_t)(U8_MAX>>1))
@@ -97,7 +109,7 @@
     int ret = DS4424_ERROR;
     union ds4424_raw_data raw;
     
-    if ((channel >= REG_OUT0 && channel <= REG_OUT3) &&
+    if ((chan_addr >= REG_OUT0 && chan_addr <=  m_max_ch_reg_addr) &&
         (value >= S8_MIN && value <= S8_MAX)) {
         if (value > 0) {
             raw.source_bit = DS4424_SOURCE_I;
@@ -106,7 +118,7 @@
             raw.source_bit = DS4424_SINK_I;
             raw.dx = -value;
         }
-        ret = writeRegister(channel, raw.bits);
+        ret = writeRegister(chan_addr, raw.bits);
  
         if (ret != 0)
             return DS4424_ERROR;
@@ -118,45 +130,7 @@
 
  
 //******************************************************************************
-int DS4424::printRawRegs() 
-{
-    uint8_t value, i;
-    ChannelReg_e channel;
-    int ret = DS4424_ERROR;
-    
-    for (i = (uint8_t)REG_OUT0; i <= (uint8_t)REG_OUT3; i++) {
-        channel = (ChannelReg_e)(i);
-        ret = readRegister(channel, value);
-        if (ret != 0)
-            return DS4424_ERROR;
-        printf("read raw reg[0x%X]=0x%X \r\n", (uint8_t)channel, value);
-        wait(0.1);
-    }
-    return DS4424_NO_ERROR;
-}
-
-  
-//******************************************************************************
-int DS4424::printRegs() 
-{
-    uint8_t i;
-    int32_t value;
-    ChannelReg_e channel;
-    int ret = DS4424_ERROR;
-    
-    for (i = (uint8_t)REG_OUT0; i <= (uint8_t)REG_OUT3; i++) {
-        channel = (ChannelReg_e)(i);
-        ret = readRaw(value, channel);
-        if (ret != 0)
-            return DS4424_ERROR;
-        printf("read reg[0x%X]=0x%d \r\n", (uint8_t)channel, value);
-    }
-    return DS4424_NO_ERROR;
-}
-
- 
-//******************************************************************************
-int DS4424::readRegister(ChannelReg_e reg, uint8_t &value) 
+int DS4424::readRegister(ChannelRegAddr_e reg, uint8_t &value) 
 {
     int32_t ret;
  
@@ -181,7 +155,7 @@
 
 
 //******************************************************************************
-int DS4424::writeRegister(ChannelReg_e reg, uint8_t value)
+int DS4424::writeRegister(ChannelRegAddr_e reg, uint8_t value)
 {
     
     int32_t ret;