Index: firmware/App/Drivers/Battery.c =================================================================== diff -u -rdaf588d921e54637b54d364a0bb0c8063f9135eb -r9b64066d98f80589129c28618d07cf2c3645d1c9 --- firmware/App/Drivers/Battery.c (.../Battery.c) (revision daf588d921e54637b54d364a0bb0c8063f9135eb) +++ firmware/App/Drivers/Battery.c (.../Battery.c) (revision 9b64066d98f80589129c28618d07cf2c3645d1c9) @@ -20,8 +20,8 @@ #include "Battery.h" #include "PersistentAlarm.h" #include "SystemCommMessages.h" -#include "Timers.h" - +#include "Timers.h" + /** * @addtogroup Battery * @{ @@ -35,132 +35,167 @@ #define BATTERY_CHARGER_STATUS_CMD 0x13 ///< Command to get battery charger status. #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. #define BATTERY_PACK_MIN_CHARGE_PCT 50 ///< Minimum battery pack state of charge in percentage. -#define BATTERY_COMM_TIME_OUT_MS 1 ///< Battery communication time out in ms. -#define BATTERY_MONITOR_INTERVAL_MS 250 ///< Battery monitor interval in ms. +#define BATTERY_COMM_TIME_OUT_MS 2 ///< Battery communication time out in ms. +#define BATTERY_MONITOR_INTERVAL_MS 247 ///< 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). - + +// Battery logging +#define BATTERY_PACK_ADDR_REMAINING_CAPACITY_ALARM 0x01 +#define BATTERY_PACK_ADDR_REMAINING_TIME_ALARM 0x02 +#define BATTERY_PACK_ADDR_BATTERY_MODE 0x03 +#define BATTERY_PACK_ADDR_AT_RATE 0x04 +#define BATTERY_PACK_ADDR_AT_RATE_TIME_TO_FULL 0x05 +#define BATTERY_PACK_ADDR_AT_RATE_TIME_TO_EMPTY 0x06 +#define BATTERY_PACK_ADDR_AT_RATE_OK 0x07 +#define BATTERY_PACK_ADDR_TEMPERATURE 0x08 +#define BATTERY_PACK_ADDR_VOLTAGE 0x09 +#define BATTERY_PACK_ADDR_CURRENT 0x0a +#define BATTERY_PACK_ADDR_AVERAGE_CURRENT 0x0b +#define BATTERY_PACK_ADDR_MAX_ERROR 0x0c +#define BATTERY_PACK_ADDR_RELATIVE_STATE_OF_CHARGE 0x0d +#define BATTERY_PACK_ADDR_ABSOLUTE_STATE_OF_CHARGE 0x0e +#define BATTERY_PACK_ADDR_REMAINING_CAPACITY 0x0f +#define BATTERY_PACK_ADDR_FULL_CHARGE_CAPACITY 0x10 +#define BATTERY_PACK_ADDR_RUN_TIME_TO_EMPTY 0x11 +#define BATTERY_PACK_ADDR_AVERAGE_TIME_TO_EMPTY 0x12 +#define BATTERY_PACK_ADDR_AVERAGE_TIME_TO_FULL 0x13 +#define BATTERY_PACK_ADDR_CHARGING_CURRENT 0x14 +#define BATTERY_PACK_ADDR_CHARGING_VOLTAGE 0x15 +#define BATTERY_PACK_ADDR_BATTERY_STATUS 0x16 +#define BATTERY_PACK_ADDR_CYCLE_COUNT 0x17 +#define BATTERY_PACK_ADDR_DESIGN_CAPACITY 0x18 +#define BATTERY_PACK_ADDR_DESIGN_VOLTAGE 0x19 +#define BATTERY_PACK_ADDR_SPECIFICATION_INFO 0x1a +#define BATTERY_PACK_ADDR_MANUFACTURE_DATE 0x1b +#define BATTERY_PACK_ADDR_SERIAL_NUMBER 0x1c +#define BATTERY_PACK_ADDR_MANUFACTURER_NAME 0x20 +#define BATTERY_PACK_ADDR_DEVICE_NAME 0x21 +#define BATTERY_PACK_ADDR_DEVICE_CHEMISTRY 0x22 + /// Persist time (in ms) for battery pack status error condition. static const U32 BATT_STATUS_ERROR_PERSIST_MS = ( 5 * MS_PER_SECOND ); +// ENUM of battery management values for iterating +typedef enum BatteryManagementEnum +{ + BEGINNING_OF_LIST = 0, + BATTERY_PACK_REMAINING_CAPACITY1, + BATTERY_PACK_BATTERY_STATUS1, + BATTERY_CHARGER_STATUS1, + BATTERY_PACK_REMAINING_CAPACITY_ALARM, + BATTERY_PACK_REMAINING_TIME_ALARM, + BATTERY_PACK_BATTERY_MODE, + BATTERY_PACK_AT_RATE, + BATTERY_PACK_AT_RATE_TIME_TO_FULL, + BATTERY_PACK_REMAINING_CAPACITY2, + BATTERY_PACK_BATTERY_STATUS2, + BATTERY_CHARGER_STATUS2, + BATTERY_PACK_AT_RATE_TIME_TO_EMPTY, + BATTERY_PACK_AT_RATE_OK, + BATTERY_PACK_TEMPERATURE, + BATTERY_PACK_VOLTAGE, + BATTERY_PACK_CURRENT, + BATTERY_PACK_AVERAGE_CURRENT, + BATTERY_PACK_REMAINING_CAPACITY3, + BATTERY_PACK_BATTERY_STATUS3, + BATTERY_CHARGER_STATUS3, + BATTERY_PACK_MAX_ERROR, + BATTERY_PACK_RELATIVE_STATE_OF_CHARGE, + BATTERY_PACK_ABSOLUTE_STATE_OF_CHARGE, + BATTERY_PACK_FULL_CHARGE_CAPACITY, + BATTERY_PACK_RUN_TIME_TO_EMPTY, + BATTERY_PACK_AVERAGE_TIME_TO_EMPTY, + BATTERY_PACK_AVERAGE_TIME_TO_FULL, + BATTERY_PACK_REMAINING_CAPACITY4, + BATTERY_PACK_BATTERY_STATUS4, + BATTERY_CHARGER_STATUS4, + BATTERY_PACK_CHARGING_CURRENT, + BATTERY_PACK_CHARGING_VOLTAGE, + BATTERY_PACK_CYCLE_COUNT, + BATTERY_PACK_DESIGN_CAPACITY, + BATTERY_PACK_DESIGN_VOLTAGE, + BATTERY_PACK_SPECIFICATION_INFO, + BATTERY_PACK_MANUFACTURE_DATE, + BATTERY_PACK_REMAINING_CAPACITY5, + BATTERY_PACK_BATTERY_STATUS5, + BATTERY_CHARGER_STATUS5, + BATTERY_PACK_SERIAL_NUMBER, + BATTERY_PACK_MANUFACTURER_NAME, + BATTERY_PACK_DEVICE_NAME, + BATTERY_PACK_DEVICE_CHEMISTRY, + + END_OF_LIST +} BATTERY_MANAGEMENT_ENUM_T; + // ********** private data ********** -static U16 batteryStatus = 0; ///< Battery current status. -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. -static BOOL hasBatteryChargerStatus = FALSE; ///< Flag indicates if battery charger status has been obtained. static U32 commFaultPersistentCount = 0; ///< Persistence count for battery comm fault. -// ********** private function prototypes ********** +static BATTERY_MANAGEMENT_ENUM_T current_BM_value; +static BATTERY_MANAGER_PAYLOAD_T BatteryManagerData; +static BATTERY_STATUS_PAYLOAD_T BatteryStatusData; +// ********** private function prototypes ********** static F32 getBatteryRemainingCapacity_mWh( void ); static void setupI2CDriver( void ); static BOOL waitForTxReady( void ); static BOOL waitForRxReady( void ); static BOOL waitForAccessReady( void ); static void generateStopCondition( void ); -static BOOL getBatteryData( U32 slaveAddr, U08 command, U16 * dataPtr ); +static BOOL getBatteryData( U32 slaveAddr, U08 command, U32 * dataPtr ); static BOOL startCommTx( U32 slaveAddr ); static BOOL getData( U08 command, U16 * dataPtr ); - -/*********************************************************************//** - * @brief - * The initBattery function initializes the Battery module. - * @details Inputs: none - * @details Outputs: Battery module is initialized. - * @return none - *************************************************************************/ -void initBattery( void ) + +// For logging +static void getBatteryManagementData( void ); +static void publishBatteryManagementData( void ); +static void publishBatteryStatusData( void ); + +/*********************************************************************//** + * @brief + * The initBattery function initializes the Battery module. + * @details Inputs: none + * @details Outputs: Battery module is initialized. + * @return none + *************************************************************************/ +void initBattery( void ) { - batteryStatus = 0; - batteryRelStateOfCharge_pct = 0; - batteryPackStatus = 0; lastBatteryMonitorTime = 0; - lostACPowerPersistentCount = 0; - hasBatteryChargerStatus = FALSE; commFaultPersistentCount = 0; + current_BM_value = BEGINNING_OF_LIST; + memset( &BatteryStatusData, 0, sizeof( BATTERY_STATUS_PAYLOAD_T ) ); + memset( &BatteryManagerData, 0, sizeof( BATTERY_MANAGER_PAYLOAD_T ) ); + // 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, lostACPowerPersistentCount - * @details Outputs: lastBatteryMonitorTime, hasBatteryChargerStatus, - * lostACPowerPersistentCount, batteryRelStateOfCharge_pct, batteryRemCapacity_mAh - * @return none +} + +/*********************************************************************//** + * @brief + * The execBatteryMonitor function monitors the battery status. + * @details Inputs: lastBatteryMonitorTime + * @details Outputs: lastBatteryMonitorTime + * @return none *************************************************************************/ -void execBatteryMonitor( void ) +void execBatteryMonitor( void ) { - U16 relStateOfCharge_pct; - U16 remCapacity_mAh; - if ( TRUE == didTimeout( lastBatteryMonitorTime, BATTERY_MONITOR_INTERVAL_MS ) ) { lastBatteryMonitorTime = getMSTimerCount(); - if ( FALSE == hasBatteryChargerStatus ) - { - hasBatteryChargerStatus = TRUE; - - if ( TRUE == getBatteryData( BATTERY_CHARGER_SLAVE_ADDRESS, BATTERY_CHARGER_STATUS_CMD, &batteryStatus ) ) - { - if ( 0 == ( batteryStatus & BATTERY_CHARGER_STATUS_AC_PRESENT_MASK ) ) - { - if ( ++lostACPowerPersistentCount > AC_POWER_LOST_PERSISTENT_COUNT ) - { -#ifndef DISABLE_BATT_COMM - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_AC_POWER_LOST, batteryStatus ); -#endif - } - } - else - { - clearAlarmCondition( ALARM_ID_HD_AC_POWER_LOST ); - lostACPowerPersistentCount = 0; - } - } - } - else - { - hasBatteryChargerStatus = FALSE; - - 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_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 ); - } - } - } + getBatteryManagementData(); } } @@ -173,7 +208,7 @@ *************************************************************************/ BOOL isBatteryCharged( void ) { - return TRUE; // TODO - restore when I2C issue(s) resolved. ( getBatteryRemainingCapacity_mWh() > BATTERY_MIN_CAPACITY_MWH ? TRUE : FALSE ); + return ( getBatteryRemainingCapacity_mWh() > BATTERY_MIN_CAPACITY_MWH ? TRUE : FALSE ); } /*********************************************************************//** @@ -304,14 +339,17 @@ * @param dataPtr data pointer to store command response data * @return none *************************************************************************/ -static BOOL getBatteryData( U32 slaveAddr, U08 command, U16 * dataPtr ) +static BOOL getBatteryData( U32 slaveAddr, U08 command, U32 * dataPtr ) { BOOL result = FALSE; if ( TRUE == startCommTx( slaveAddr ) ) { - if ( TRUE == getData( command, dataPtr ) ) + U16 data = (U16)( (*dataPtr) & MASK_OFF_MSW ); + + if ( TRUE == getData( command, &data ) ) { + *dataPtr = data; result = TRUE; } } @@ -408,10 +446,246 @@ } } + if ( FALSE == result ) + { + if ( ++commFaultPersistentCount > BATTERY_COMM_FAULT_PERSISTENTCE_COUNT ) + { +#ifndef DISABLE_BATT_COMM + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_BATTERY_COMM_FAULT, dataPtr ); +#endif + commFaultPersistentCount = 0; + } + } + return result; } +/*********************************************************************//** + * @brief + * The getBatteryManagementData function accumulates the battery management and status data and + * publishes the two sets of values when complete. Also, the battery remaining capacity is stored, + * the battery status alarm is set if necessary, and the loss of AC power alarm is set if necessary. + * @details Inputs: current_BM_value determines which single value to read + * @details Outputs: batteryRemCapacity_mAh, publishes battery management data and battery status data, + * battery status alarm, AC power loss alarm. + * @return none + *************************************************************************/ +static void getBatteryManagementData(void) +{ + HD_OP_MODE_T opMode = getCurrentOperationMode(); + // Increment the position in the enum. Starting value is BEGINNING_OF_LIST (0), so on the first + // cycle through this function it will be set to the first valid position (1) + current_BM_value += 1; + + switch( current_BM_value ) + { + case BATTERY_PACK_REMAINING_CAPACITY1: + case BATTERY_PACK_REMAINING_CAPACITY2: + case BATTERY_PACK_REMAINING_CAPACITY3: + case BATTERY_PACK_REMAINING_CAPACITY4: + case BATTERY_PACK_REMAINING_CAPACITY5: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_REMAINING_CAPACITY, &BatteryStatusData.RemainingCapacity); + batteryRemCapacity_mAh.data = (F32)BatteryStatusData.RemainingCapacity * BATTERY_MAH_2_MWH_FACTOR; + break; + + case BATTERY_PACK_BATTERY_STATUS1: + case BATTERY_PACK_BATTERY_STATUS2: + case BATTERY_PACK_BATTERY_STATUS3: + case BATTERY_PACK_BATTERY_STATUS4: + case BATTERY_PACK_BATTERY_STATUS5: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_BATTERY_STATUS, &BatteryStatusData.BatteryStatus); + if ( ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_BATTERY_PACK_ERROR_DETECTED, ( BatteryStatusData.BatteryStatus & BATTERY_PACK_ERROR_BITS ) != 0 ) ) ) + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_BATTERY_PACK_ERROR_DETECTED, BatteryStatusData.BatteryStatus ); + } + break; + + case BATTERY_PACK_REMAINING_CAPACITY_ALARM: + getBatteryData( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_REMAINING_CAPACITY_ALARM, &BatteryManagerData.RemainingCapacityAlarm ); + break; + + case BATTERY_PACK_REMAINING_TIME_ALARM: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_REMAINING_TIME_ALARM, &BatteryManagerData.RemainingTimeAlarm); + break; + + case BATTERY_PACK_BATTERY_MODE: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_BATTERY_MODE, &BatteryManagerData.BatteryMode); + break; + + case BATTERY_PACK_AT_RATE: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_AT_RATE, &BatteryManagerData.AtRate); + break; + + case BATTERY_PACK_AT_RATE_TIME_TO_FULL: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_AT_RATE_TIME_TO_FULL, &BatteryManagerData.AtRateTimeToFull); + break; + + case BATTERY_PACK_AT_RATE_TIME_TO_EMPTY: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_AT_RATE_TIME_TO_EMPTY, &BatteryManagerData.AtRateTimeToEmpty); + break; + + case BATTERY_PACK_AT_RATE_OK: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_AT_RATE_OK, &BatteryManagerData.AtRateOK); + break; + + case BATTERY_PACK_TEMPERATURE: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_TEMPERATURE, &BatteryManagerData.Temperature); + break; + + case BATTERY_PACK_VOLTAGE: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_VOLTAGE, &BatteryManagerData.Voltage); + break; + + case BATTERY_PACK_CURRENT: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_CURRENT, &BatteryManagerData.Current); + break; + + case BATTERY_PACK_AVERAGE_CURRENT: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_AVERAGE_CURRENT, &BatteryManagerData.AverageCurrent); + break; + + case BATTERY_PACK_MAX_ERROR: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_MAX_ERROR, &BatteryManagerData.MaxError); + break; + + case BATTERY_PACK_RELATIVE_STATE_OF_CHARGE: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_RELATIVE_STATE_OF_CHARGE, &BatteryManagerData.RelativeStateOfCharge); + break; + + case BATTERY_PACK_ABSOLUTE_STATE_OF_CHARGE: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_ABSOLUTE_STATE_OF_CHARGE, &BatteryManagerData.AbsoluteStateOfCharge); + break; + + case BATTERY_PACK_FULL_CHARGE_CAPACITY: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_FULL_CHARGE_CAPACITY, &BatteryManagerData.FullChargeCapacity); + break; + + case BATTERY_PACK_RUN_TIME_TO_EMPTY: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_RUN_TIME_TO_EMPTY, &BatteryManagerData.RunTimeToEmpty); + break; + + case BATTERY_PACK_AVERAGE_TIME_TO_EMPTY: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_AVERAGE_TIME_TO_EMPTY, &BatteryManagerData.AverageTimeToEmpty); + break; + + case BATTERY_PACK_AVERAGE_TIME_TO_FULL: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_AVERAGE_TIME_TO_FULL, &BatteryManagerData.AverageTimeToFull); + break; + + case BATTERY_PACK_CHARGING_CURRENT: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_CHARGING_CURRENT, &BatteryManagerData.ChargingCurrent); + break; + + case BATTERY_PACK_CHARGING_VOLTAGE: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_CHARGING_VOLTAGE, &BatteryManagerData.ChargingVoltage); + break; + + case BATTERY_PACK_CYCLE_COUNT: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_CYCLE_COUNT, &BatteryManagerData.CycleCount); + break; + + case BATTERY_PACK_DESIGN_CAPACITY: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_DESIGN_CAPACITY, &BatteryManagerData.DesignCapacity); + break; + + case BATTERY_PACK_DESIGN_VOLTAGE: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_DESIGN_VOLTAGE, &BatteryManagerData.DesignVoltage); + break; + + case BATTERY_PACK_SPECIFICATION_INFO: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_SPECIFICATION_INFO, &BatteryManagerData.SpecificationInfo); + break; + + case BATTERY_PACK_MANUFACTURE_DATE: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_MANUFACTURE_DATE, &BatteryManagerData.ManufactureDate); + break; + + case BATTERY_PACK_SERIAL_NUMBER: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_SERIAL_NUMBER, &BatteryManagerData.SerialNumber); + break; + + case BATTERY_PACK_MANUFACTURER_NAME: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_MANUFACTURER_NAME, &BatteryManagerData.ManufacturerName); + break; + + case BATTERY_PACK_DEVICE_NAME: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_DEVICE_NAME, &BatteryManagerData.DeviceName); + break; + + case BATTERY_PACK_DEVICE_CHEMISTRY: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_DEVICE_CHEMISTRY, &BatteryManagerData.DeviceChemistry); + break; + + case BATTERY_CHARGER_STATUS1: + case BATTERY_CHARGER_STATUS2: + case BATTERY_CHARGER_STATUS3: + case BATTERY_CHARGER_STATUS4: + case BATTERY_CHARGER_STATUS5: + if ( TRUE == getBatteryData( BATTERY_CHARGER_SLAVE_ADDRESS, BATTERY_CHARGER_STATUS_CMD, &BatteryStatusData.BatteryChargerStatus ) ) + { + if ( 0 == ( BatteryStatusData.BatteryChargerStatus & BATTERY_CHARGER_STATUS_AC_PRESENT_MASK ) ) + { +#ifndef DISABLE_BATT_COMM + // Standby, Service, or Treatment Parameters mode + if ( opMode == MODE_STAN || opMode == MODE_SERV || opMode == MODE_TPAR ) + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_AC_POWER_LOST, BatteryStatusData.BatteryChargerStatus ); + } + // Pre-Treatment, Treatment, or Post-Treatment mode + else if( opMode == MODE_PRET || opMode == MODE_TREA || opMode == MODE_POST ) + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_AC_POWER_LOST_SECOND, BatteryStatusData.BatteryChargerStatus ); + } +#endif + } + else + { + clearAlarmCondition( ALARM_ID_HD_AC_POWER_LOST ); + } + } + + publishBatteryStatusData(); + break; + + case END_OF_LIST: + current_BM_value = BEGINNING_OF_LIST; + publishBatteryManagementData(); + break; + + default: + // TODO s/w fault + break; + } + +} + +/*********************************************************************//** + * @brief + * The publishBatteryManagementData function publishes the battery management data + * @details Inputs: BatteryManagerData + * @details Outputs: send battery management data + * @return none + *************************************************************************/ +static void publishBatteryManagementData( void ) +{ + broadcastData( MSG_ID_HD_BATTERY_MANAGEMENT_DATA, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&BatteryManagerData, sizeof( BATTERY_MANAGER_PAYLOAD_T ) ); +} + +/*********************************************************************//** + * @brief + * The publishBatteryStatusData function publishes the battery status data + * @details Inputs: BatteryStatusData + * @details Outputs: send battery status data + * @return none + *************************************************************************/ +static void publishBatteryStatusData( void ) +{ + BatteryStatusData.RemainingCapacity = (U32)getBatteryRemainingCapacity_mWh(); + broadcastData( MSG_ID_HD_BATTERY_STATUS_DATA, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&BatteryStatusData, sizeof( BATTERY_STATUS_PAYLOAD_T ) ); +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ @@ -426,7 +700,7 @@ * @param value override battery remaining percent * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testSetBatteryRemainingPercentOverride( U32 value ) // TODO - rename to capacity (instead of percent) + messaging + Dialin // TODO - add override of broadcast interval // TODO - broadcast battery data +BOOL testSetBatteryRemainingPercentOverride( F32 value ) // TODO - rename to capacity (instead of percent) + messaging + Dialin // TODO - add override of broadcast interval // TODO - broadcast battery data { BOOL result = FALSE;