Index: firmware/App/Drivers/BatteryDriver.c =================================================================== diff -u -r9e14f8c931ea3f2afdedc92de71bd497868a4176 -ree67a27bd69956eb8cfd7c5986538b441b8b7aa7 --- firmware/App/Drivers/BatteryDriver.c (.../BatteryDriver.c) (revision 9e14f8c931ea3f2afdedc92de71bd497868a4176) +++ firmware/App/Drivers/BatteryDriver.c (.../BatteryDriver.c) (revision ee67a27bd69956eb8cfd7c5986538b441b8b7aa7) @@ -28,13 +28,32 @@ // ********** private definitions ********** -#define BATTERY_COMM_TIME_OUT_MS 2 ///< Battery communication time out in ms. +#define BATTERY_COMM_TIME_OUT_MS 2 ///< Battery communication time out in ms. #define BATTERY_CHARGER_SLAVE_ADDRESS 0x6B ///< Battery charger controller device address. #define BATTERY_PACK_SLAVE_ADDRESS 0x0B ///< Battery pack device address. // ********** private data ********** static OVERRIDE_U32_T batteryI2CStatusRegister; ///< Battery I2C Interrupt Status register +/// Lookup table mapping device enum to I2C slave addresses. +const U32 device_addr[NUM_OF_BATTERY_DEVICES] = { + 0x6B, ///< BATTERY_CHARGER_ADDRESS + 0x0B, ///< BATTERY_PACK_ADDRESS +}; +/// Lookup table mapping register enum to register addresses. +const U32 reg_addr[END_OF_LIST] = { + 0x00, ///< BEGINNING_OF_LIST + 0x0f, ///< BATTERY_PACK_REMAINING_CAPACITY + 0x16, ///< BATTERY_PACK_BATTERY_STATUS + 0x0d, ///< BATTERY_PACK_RELATIVE_STATE_OF_CHARGE + 0x10, ///< BATTERY_PACK_FULL_CHARGE_CAPACITY + 0x21, ///< BATTERY_CHARGER_STATUS + 0x08, ///< BATTERY_CHARGER_TS + 0x09, ///< BATTERY_CHARGER_VBAT + 0x35, ///< BATTERY_CHARGER_VSYS + 0x24, ///< BATTERY_CHARGER_FAULT + 0x0a, ///< BATTERY_CHARGER_CURRENT +}; // ********** private function prototypes ********** @@ -57,10 +76,6 @@ *************************************************************************/ void initsetupI2CDriver(void) { -// batteryI2CStatusRegister.data = 0; -// batteryI2CStatusRegister.ovData = 0; -// batteryI2CStatusRegister.ovInitData = 0; -// batteryI2CStatusRegister.override = 0; memset(&batteryI2CStatusRegister, 0, sizeof(OVERRIDE_U32_T)); setupI2CDriver(); } @@ -169,27 +184,20 @@ * and get data based on given command. * @details \b Inputs: none * @details \b Outputs: get data from battery device - * @param slaveAddr battery slave device address - * @param command command to send to the slave device - * @param dataPtr data pointer to store command response data - * @return none + * @param devicesel battery device to communicate with. + * @param registersel register to read from batteru device. + * @param dataPtr pointer to store the register data + * @return TRUE if data received successfully, otherwise FALSE *************************************************************************/ -BOOL getBatteryData( U32 slaveAddr, U08 command, U32 * dataPtr ) +BOOL getBatteryData( BATTERY_DEVICE_ADDRESS_ENUM_T devicesel, BATTERY_MANAGEMENT_ENUM_T registersel, U32 * dataPtr ) { BOOL result = FALSE; - if (slaveAddr) + + if ( TRUE == startCommTx( device_addr[devicesel] ) ) { - slaveAddr = BATTERY_PACK_SLAVE_ADDRESS; - } - else - { - slaveAddr = BATTERY_CHARGER_SLAVE_ADDRESS; - } - if ( TRUE == startCommTx( slaveAddr ) ) - { U16 data = (U16)( (*dataPtr) & MASK_OFF_MSW ); - if ( TRUE == getData( command, &data ) ) + if ( TRUE == getData( reg_addr[registersel], &data ) ) { *dataPtr = data; result = TRUE; @@ -338,6 +346,12 @@ } } + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + /*********************************************************************//** * @brief * The testBatteryI2CStatusOverride function overrides the battery I2C