Index: firmware/App/Drivers/Battery.c =================================================================== diff -u -r94dab74a6432263dc4569e0cf8f9fa0b01bf1917 -r7a05bcf328dd931e81f099f96f09dc119d3c55e3 --- firmware/App/Drivers/Battery.c (.../Battery.c) (revision 94dab74a6432263dc4569e0cf8f9fa0b01bf1917) +++ firmware/App/Drivers/Battery.c (.../Battery.c) (revision 7a05bcf328dd931e81f099f96f09dc119d3c55e3) @@ -35,6 +35,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. @@ -44,11 +45,15 @@ #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). // ********** 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. @@ -57,7 +62,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 ); @@ -98,6 +103,7 @@ void execBatteryMonitor( void ) { U16 relStateOfCharge_pct; + U16 remCapacity_mAh; if ( TRUE == didTimeout( lastBatteryMonitorTime, BATTERY_MONITOR_INTERVAL_MS ) ) { @@ -132,16 +138,13 @@ 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_ERROR_DETECTED, getBatteryRemainingPercent() ); - } - else - { - clearAlarmCondition( ALARM_ID_HD_BATTERY_PACK_ERROR_DETECTED ); - } } + 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 ) ) @@ -162,24 +165,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; @@ -415,15 +418,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; @@ -445,8 +448,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; Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r8b73263b38f449dacc0795c67a7cf6240cb79026 -r7a05bcf328dd931e81f099f96f09dc119d3c55e3 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 8b73263b38f449dacc0795c67a7cf6240cb79026) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 7a05bcf328dd931e81f099f96f09dc119d3c55e3) @@ -334,12 +334,10 @@ rejReason = REQUEST_REJECT_REASON_DG_NOT_IN_STANDBY_IDLE_STATE; } -#ifndef DISABLE_BATT_COMM if ( FALSE == isBatteryCharged() ) { rejReason = REQUEST_REJECT_REASON_BATTERY_IS_NOT_CHARGED; } -#endif if ( REQUEST_REJECT_REASON_NONE == rejReason ) {