Library DS2782 Stand-Alone Fuel Gauge IC

Revision:
1:7cd80eb4df4c
Parent:
0:e6d413e57654
--- a/ds2782.cpp	Sun Nov 30 23:23:42 2014 +0000
+++ b/ds2782.cpp	Wed Dec 17 21:14:59 2014 +0000
@@ -5,11 +5,46 @@
     
     mI2c.frequency(i2cFrequencyHz);
     mTemperature=0;
+    //initDS2782();
+    //setACRRegister(0xffff);  //to clear flags
 }   
     
     
 bool DS2782::initDS2782(void){
      
+     uint16_t full40Reg = 0x3200;
+     uint8_t buf[2];
+     fillBuf(full40Reg, buf);
+     setEepromBlockRegister(FULL_40_MSB,buf, 2);
+    
+     buf[0]= 0xD5;
+     setEepromBlockRegister(VCHG,buf, 1);
+     
+     buf[0]=0x14;
+     setEepromBlockRegister(IMIN,buf,1);
+     
+     buf[0]=0xB3;
+     setEepromBlockRegister(VAE,buf,1);
+     
+     buf[0]=0x0a;
+     setEepromBlockRegister(IAE,buf,1);
+     
+     buf[0]=0x06;
+     setEepromBlockRegister(ACTIVE_EMPTY_40,buf,1);
+     
+     //fillBuf(full40Reg, buf);
+     //setEepromBlockRegister(RSGAIN_MSB,buf,2);
+     
+     buf[0]=0;
+     setEepromBlockRegister(RSTC,buf,1);
+     
+     buf[0]=0x32;
+     setEepromBlockRegister(RSNSP,buf,1);
+     
+     buf[0]=0;
+     setEepromBlockRegister(AB,buf,1);
+     
+     
      return true;
 }
 
@@ -85,22 +120,49 @@
 }
 
 
+bool DS2782::setACRRegister(uint16_t reg)
+{    
+    uint8_t buf[2];
+    buf[0]= ((reg>>8)&0xFF);
+    buf[1]= ((reg)&0xFF);
+    if(!(write(ACR_MSB_REG, buf,2))) return false;
+    return true;        
+}
 
 
-
-float DS2782::readTest(void){
+float DS2782::readAcrReg(void){
 
    uint8_t rawData[2];
    uint16_t rawRes=0;
-   /*if(!read(ACR_MSB_REG, rawData,2)) return false;
+   if(!read(ACR_MSB_REG, rawData,2)) return false;
       rawRes= get16BitData(rawData[0],rawData[1]);
-      */
-    /*if(rawRes &0x8000){
-      return ((float)(rawRes-65536)*0.07813);
+      
+    if(rawRes &0x8000){
+      return ((float)(rawRes-65536)*1.5625);
     }
     else 
-    */
-    if(!read(RARC_REG, rawData,1)) return false;
-      rawRes= get16BitData(rawData[0],rawData[1]);
-    return ((float)(rawData[0]*0.3906));
+      return ((float)(rawRes)*1.5625);
+}
+
+
+bool DS2782::setEepromBlockRegister(ParamEepromReg reg, uint8_t * value, uint8_t length){
+    uint8_t buf[length];
+    memcpy(buf,value,length);
+    if(!(write(reg, buf,length))) return false;
+    return true; 
+    
 }
+
+uint8_t DS2782::readRarcReg(void){
+    uint8_t rarcRegVal;  //unit [%]
+    if(!read(RARC_REG, &rarcRegVal,1)) return 255;    
+    return rarcRegVal;
+}
+
+
+uint8_t DS2782::readStatusReg(void){
+    uint8_t statusRegVal;
+    if(!read(STATUS, &statusRegVal,1)) return 255;    
+    return statusRegVal;
+    
+}