Index: firmware/App/Drivers/Battery.c =================================================================== diff -u -r79f4d56619677890be00c1239b4de7c2b80b7cb9 -rb99fd6c434ba1f927e46f3ab80fec1239d63f28f --- firmware/App/Drivers/Battery.c (.../Battery.c) (revision 79f4d56619677890be00c1239b4de7c2b80b7cb9) +++ firmware/App/Drivers/Battery.c (.../Battery.c) (revision b99fd6c434ba1f927e46f3ab80fec1239d63f28f) @@ -36,6 +36,7 @@ #define BATTERY_CHARGER_STATUS_AC_PRESENT_MASK 0x8000 ///< Battery charger status AC present bit mask. #define BATTERY_PACK_REL_STATE_OF_CHARGE_CMD 0x0D ///< Command to get battery pack relative state of charge. +#define BATTERY_PACK_REM_CAPACITY_CMD 0x0F ///< Command to get battery pack remaining capacity (in mAh). #define BATTERY_PACK_STATUS_CMD 0x16 ///< Command to get battery pack status. #define BATTERY_PACK_ERROR_BITS 0x0F ///< Error codes are in the first byte. @@ -45,14 +46,18 @@ #define BATTERY_MONITOR_INTERVAL_MS 750 ///< Battery monitor interval in ms. #define AC_POWER_LOST_PERSISTENT_COUNT 3 ///< AC power lost persistent count before alarming. #define BATTERY_COMM_FAULT_PERSISTENTCE_COUNT 5 ///< Battery communication fault persistent count before alarming. + +#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. -static OVERRIDE_U32_T batteryRelStateOfCharge_pct = { 0, 0, 0, 0 }; ///< Battery pack relative state of charge. +static U32 batteryRelStateOfCharge_pct = 0; ///< Battery pack relative state of charge. +static OVERRIDE_F32_T batteryRemCapacity_mAh = { 0.0, 0.0, 0.0, 0 }; ///< Battery pack remaining capacity (in mAh). static U16 batteryPackStatus = 0; ///< Battery pack current status. static U32 lastBatteryMonitorTime = 0; ///< Previous battery monitor time. static U32 lostACPowerPersistentCount = 0; ///< Persistent count for AC power lost alarm. @@ -61,7 +66,7 @@ // ********** private function prototypes ********** -static U32 getBatteryRemainingPercent( void ); +static F32 getBatteryRemainingCapacity_mWh( void ); static void setupI2CDriver( void ); static BOOL waitForTxReady( void ); static BOOL waitForRxReady( void ); @@ -105,6 +110,7 @@ void execBatteryMonitor( void ) { U16 relStateOfCharge_pct; + U16 remCapacity_mAh; if ( TRUE == didTimeout( lastBatteryMonitorTime, BATTERY_MONITOR_INTERVAL_MS ) ) { @@ -139,26 +145,19 @@ if ( TRUE == getBatteryData( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_REL_STATE_OF_CHARGE_CMD, &relStateOfCharge_pct ) ) { batteryRelStateOfCharge_pct.data = (U32)relStateOfCharge_pct; - if ( getBatteryRemainingPercent() < BATTERY_PACK_MIN_CHARGE_PCT ) - { - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_BATTERY_PACK_CHARGE_TOO_LOW, getBatteryRemainingPercent() ); - } - else - { - clearAlarmCondition( ALARM_ID_HD_BATTERY_PACK_CHARGE_TOO_LOW ); - } } + 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 ( ( 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 ); } - else - { - isPersistentAlarmTriggered( ALARM_ID_HD_BATTERY_PACK_ERROR_DETECTED, FALSE ); - } } } } @@ -173,24 +172,24 @@ *************************************************************************/ BOOL isBatteryCharged( void ) { - return ( getBatteryRemainingPercent() > BATTERY_PACK_MIN_CHARGE_PCT ? TRUE : FALSE ); + return TRUE; // TODO - restore when I2C issue(s) resolved. ( getBatteryRemainingCapacity_mWh() > BATTERY_MIN_CAPACITY_MWH ? TRUE : FALSE ); } /*********************************************************************//** * @brief - * The getBatteryRemainingPercent function returns the latest battery relative - * state of charge percentage. - * @details Inputs: batteryRelStateOfCharge_pct + * The getBatteryRemainingCapacity_mWh function returns the latest battery + * remaining capacity (in mWh). + * @details Inputs: batteryRemCapacity_mAh * @details Outputs: none - * @return battery relative state of charge percentage + * @return battery remaining capacity (in mWh). *************************************************************************/ -static U32 getBatteryRemainingPercent( void ) +static F32 getBatteryRemainingCapacity_mWh( void ) { - U32 result = batteryRelStateOfCharge_pct.data; + F32 result = batteryRemCapacity_mAh.data; - if ( OVERRIDE_KEY == batteryRelStateOfCharge_pct.override ) + if ( OVERRIDE_KEY == batteryRemCapacity_mAh.override ) { - result = batteryRelStateOfCharge_pct.ovData; + result = batteryRemCapacity_mAh.ovData; } return result; @@ -426,15 +425,15 @@ * @param value override battery remaining percent * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testSetBatteryRemainingPercentOverride( U32 value ) +BOOL testSetBatteryRemainingPercentOverride( U32 value ) // TODO - rename to capacity (instead of percent) + messaging + Dialin // TODO - add override of broadcast interval // TODO - broadcast battery data { BOOL result = FALSE; if ( TRUE == isTestingActivated() ) { result = TRUE; - batteryRelStateOfCharge_pct.ovData = value; - batteryRelStateOfCharge_pct.override = OVERRIDE_KEY; + batteryRemCapacity_mAh.ovData = value; + batteryRemCapacity_mAh.override = OVERRIDE_KEY; } return result; @@ -456,8 +455,8 @@ if ( TRUE == isTestingActivated() ) { result = TRUE; - batteryRelStateOfCharge_pct.override = OVERRIDE_RESET; - batteryRelStateOfCharge_pct.ovData = batteryRelStateOfCharge_pct.ovInitData; + batteryRemCapacity_mAh.override = OVERRIDE_RESET; + batteryRemCapacity_mAh.ovData = batteryRemCapacity_mAh.ovInitData; } return result;