Index: firmware/App/Drivers/Battery.c =================================================================== diff -u -r7ee8cdc1b33d94117ba53a9bc9a1ce21b3bf31b7 -rf6ee9517385497e9c909ab355109fa4fa7e23554 --- firmware/App/Drivers/Battery.c (.../Battery.c) (revision 7ee8cdc1b33d94117ba53a9bc9a1ce21b3bf31b7) +++ firmware/App/Drivers/Battery.c (.../Battery.c) (revision f6ee9517385497e9c909ab355109fa4fa7e23554) @@ -18,6 +18,7 @@ #include "i2c.h" #include "Battery.h" +#include "PersistentAlarm.h" #include "SystemCommMessages.h" #include "Timers.h" @@ -49,6 +50,9 @@ #define BATTERY_MAH_2_MWH_FACTOR 14.7F ///< Conversion factor for mAh to mWh. #define BATTERY_MIN_CAPACITY_MWH 5000.0F ///< Minimum battery capacity for starting a treatment is 10 minutes (5 Wh @ 30W). +/// Persist time (in ms) for battery pack status error condition. +static const U32 BATT_STATUS_ERROR_PERSIST_MS = ( 5 * MS_PER_SECOND ); + // ********** private data ********** static U16 batteryStatus = 0; ///< Battery current status. @@ -82,22 +86,26 @@ void initBattery( void ) { batteryStatus = 0; - batteryRelStateOfCharge_pct.data = 0; + batteryRelStateOfCharge_pct = 0; batteryPackStatus = 0; lastBatteryMonitorTime = 0; lostACPowerPersistentCount = 0; hasBatteryChargerStatus = FALSE; commFaultPersistentCount = 0; + // Initialize persistent alarm for battery pack status error + initPersistentAlarm( ALARM_ID_HD_BATTERY_PACK_ERROR_DETECTED, 0, BATT_STATUS_ERROR_PERSIST_MS ); + setupI2CDriver(); } /*********************************************************************//** * @brief * The execBatteryMonitor function monitors the battery status. * @details Inputs: lastBatteryMonitorTime, hasBatteryChargerStatus, batteryStatus, - * batteryRelStateOfCharge_pct, batteryPackStatus - * @details Outputs: monitor battery status + * batteryRelStateOfCharge_pct, batteryPackStatus, lostACPowerPersistentCount + * @details Outputs: lastBatteryMonitorTime, hasBatteryChargerStatus, + * lostACPowerPersistentCount, batteryRelStateOfCharge_pct, batteryRemCapacity_mAh * @return none *************************************************************************/ void execBatteryMonitor( void ) @@ -140,9 +148,14 @@ batteryRemCapacity_mAh.data = (F32)remCapacity_mAh * BATTERY_MAH_2_MWH_FACTOR; } + if ( TRUE == getBatteryData( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_REM_CAPACITY_CMD, &remCapacity_mAh ) ) + { + batteryRemCapacity_mAh.data = (F32)remCapacity_mAh * BATTERY_MAH_2_MWH_FACTOR; + } + if ( TRUE == getBatteryData( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_STATUS_CMD, &batteryPackStatus ) ) { - if ( 0 != ( batteryPackStatus & BATTERY_PACK_ERROR_BITS ) ) + if ( ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_BATTERY_PACK_ERROR_DETECTED, ( batteryPackStatus & BATTERY_PACK_ERROR_BITS ) != 0 ) ) ) { SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_BATTERY_PACK_ERROR_DETECTED, batteryPackStatus ); } @@ -409,7 +422,7 @@ * The testSetBatteryRemainingPercentOverride function overrides the battery * remaining percent value. * @details Inputs: none - * @details Outputs: batteryRelStateOfCharge_pct + * @details Outputs: batteryRemCapacity_mAh * @param value override battery remaining percent * @return TRUE if override successful, FALSE if not *************************************************************************/ @@ -432,8 +445,7 @@ * The testResetSetBatteryRemainingPercentOverride function resets the * override of the battery remaining percent value. * @details Inputs: none - * @details Outputs: batteryRelStateOfCharge_pct - * @param value override battery remaining percent + * @details Outputs: batteryRemCapacity_mAh * @return TRUE if reset successful, FALSE if not *************************************************************************/ BOOL testResetSetBatteryRemainingPercentOverride( void )