Library DS2782 Stand-Alone Fuel Gauge IC

Revision:
0:e6d413e57654
Child:
1:7cd80eb4df4c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ds2782.h	Sun Nov 30 23:23:42 2014 +0000
@@ -0,0 +1,148 @@
+/*
+  @file ds2782.h
+  
+  @brief DS2782 Stand-Alone Fuel Gauge IC
+         Breakout I2C Library      
+
+  @Author lukasz uszko(luszko@op.pl)
+
+  Tested on FRDM-KL46Z and FRDM-KL25Z
+  
+  Copyright (c) 2014 lukasz uszko
+  Released under the MIT License (see http://mbed.org/license/mit)
+
+  Documentation regarding the MAX9611 might be found here: 
+  http://www.maximintegrated.com/en/products/power/battery-management/DS2782.html
+*/
+
+
+#ifndef DS2782_H
+#define DS2782_H
+
+#include "mbed.h"
+
+#define DS2782_I2C_ADDRESS 0x34<<1  
+
+
+
+ 
+
+
+class DS2782{
+      
+      
+ /**********private members and methods********************************/       
+ private: 
+     
+  typedef enum {
+    STATUS=0x01,     /*STATUS - Status Register*/
+    RAAC_MSB_REG,        /*RAAC - Remaining Active Absolute Capacity MSB*/
+    RAAC_LSB_REG,       
+    RSAC_MSB_REG,        /*RSAC - Remaining Standby Absolute Capacity MSB*/
+    RSAC_LSB_REG,     
+    RARC_REG,            /*RARC - Remaining Active Relative Capacity*/
+    RSRC_REG,            /*RSRC - Remaining Standby Relative Capacity*/
+    IAVG_MSB_REG,        /*IAVG - Average Current Register MSB*/
+    IAVG_LSB_REG,     
+    TEMP_MSB_REG,        /*TEMP - Temperature Register MSB*/
+    TEMP_LSB_REG, 
+    VOLT_MSB_REG,        /*VOLT - Voltage Register MSB*/
+    VOLT_LSB_REG,      
+    CURRENT_MSB_REG,     /*CURRENT - Current Register MSB*/
+    CURRENT_LSB_REG,    
+    ACR_MSB_REG,         /*ACR - Accumulated Current Register MSB*/
+    ACR_LSB_REG,       
+    ACRL_MSB_REG,        /*Low Accumulated Current Register MSB*/
+    ACRL_LSB_REG,     
+    AS_REG,              /*AS - Age Scalar*/
+    SFR_REG,             /*SFR - Special Feature Register*/
+    FULL_MSB_REG,        /*FULL - Full Capacity MSB*/
+    FULL_LSB_REG,       
+    AE_MSB_REG,          /*AE - Active Empty MSB*/
+    AE_LSB_REG,    
+    SE_MSB_REG,          /*SE - Standby Empty MSB*/
+    SE_LSB_REG,
+    EEPROM_REG= 0x1F,         /*EEPROM - EEPROM Register */
+    USR_EEPROM_REG= 0x20,     /*User EEPROM, Lockable, Block 0 [20 to 2F]*/
+    ADD_USR_EEPROM_REG=0x30,  /*Additional User EEPROM, Lockable, Block 0 [30 to 37]*/
+    PARAM_EEPROM_REG=0x60,    /*Parameter EEPROM, Lockable, Block 1 [60 to 7F]*/
+    UNIQUE_ID_REG =0xF0,      /*Unique ID [F0 to F7]*/
+    FUNC_COMMAND_REG= 0xFE    /*Function Command Register */
+         
+ }RegAddr;
+ 
+    /** Write data to the given register
+     *  
+     * @returns
+     *   1 on success,
+     *   0 on error
+     */  
+    bool write(uint8_t regAddress, uint8_t* data,int dataLength);
+  
+    /** Write data to the given register
+     * @param register Address
+     * @param data to read
+     * @param length of data to read 
+     * @returns
+     *   1 on success,
+     *   0 on error
+     */  
+    bool read(uint8_t regAddress, uint8_t* data,int length);
+    
+   /** merge two bytes in one word
+    * @param 1st byte
+    * @param 2nd byte
+    * @returns 16 bit word
+    */
+    inline uint16_t get16BitData(uint8_t msbByte,uint8_t lsbByte){
+        uint16_t data16Bit= (msbByte<<8)|(lsbByte);
+        return data16Bit; 
+    }
+        
+    I2C mI2c;   
+    uint8_t mI2cAddr;
+   
+    
+    /**********protected members and methods********************************/
+    protected:
+    float mTemperature; 
+    float mCurrent;  
+    float mVoltage;
+   
+   /**********public methods********************************/
+    public:
+
+    /** Create an SI7020 instance
+     * @param sda pin 
+     * @param scl pin 
+     * @param address: I2C slave address 
+     */
+     DS2782(PinName sda, PinName scl,int i2cFrequencyHz=100000,uint8_t address = DS2782_I2C_ADDRESS); 
+
+
+    /** Initialization: set member values and configuration registers, ought to be invoked in the body of constructor 
+     * @returns
+     *    true on success,
+     *    false on error
+     */
+    bool initDS2782(void);
+    
+    /** Read temperature from the sensor.
+     * @param none
+     * @returns
+     *   1 on success,
+     *   0 on error
+     */ 
+    bool readTemperature(void);   
+    bool readCurrent(void);
+    bool readVoltage(void);
+    
+    // setters-getters
+    float getTemperature(void);
+    float getCurrent(void);
+    float getVoltage(void);
+    
+    float readTest(void);
+};
+
+#endif
\ No newline at end of file