Index: firmware/App/Drivers/Battery.c =================================================================== diff -u -r25ee7dc9e64357fd2c1bb27dc8ec017d5ad7d3a9 -r2105b91266b177c68da8f9d42be9ca442a57f136 --- firmware/App/Drivers/Battery.c (.../Battery.c) (revision 25ee7dc9e64357fd2c1bb27dc8ec017d5ad7d3a9) +++ firmware/App/Drivers/Battery.c (.../Battery.c) (revision 2105b91266b177c68da8f9d42be9ca442a57f136) @@ -82,55 +82,54 @@ /// 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 +/// Enumeration of battery data to be read from the battery pack or battery charger in a round-robin fashion. 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, - + BEGINNING_OF_LIST = 0, ///< Start of battery data list + BATTERY_PACK_REMAINING_CAPACITY1, ///< Remaining battery capacity (in mWh) (first of 5 to increase frequency of reads) + BATTERY_PACK_BATTERY_STATUS1, ///< Battery pack status (first of 5 to increase frequency of reads) + BATTERY_CHARGER_STATUS1, ///< Battery charger status (first of 5 to increase frequency of reads) + BATTERY_PACK_REMAINING_CAPACITY_ALARM, ///< Remaining battery capacity alarm + BATTERY_PACK_REMAINING_TIME_ALARM, ///< Remaining battery time alarm + BATTERY_PACK_BATTERY_MODE, ///< Battery pack mode + BATTERY_PACK_AT_RATE, ///< Battery pack at rate + BATTERY_PACK_AT_RATE_TIME_TO_FULL, ///< Battery pack at rate time to full + BATTERY_PACK_REMAINING_CAPACITY2, ///< Remaining battery capacity (in mWh) (second of 5 to increase frequency of reads) + BATTERY_PACK_BATTERY_STATUS2, ///< Battery pack status (second of 5 to increase frequency of reads) + BATTERY_CHARGER_STATUS2, ///< Battery charger status (second of 5 to increase frequency of reads) + BATTERY_PACK_AT_RATE_TIME_TO_EMPTY, ///< Battery pack at rate time to empty + BATTERY_PACK_AT_RATE_OK, ///< Battery pack at rate ok (boolean) + BATTERY_PACK_TEMPERATURE, ///< Battery pack temperature (in deg K) + BATTERY_PACK_VOLTAGE, ///< Battery pack terminal voltage (in mV) + BATTERY_PACK_CURRENT, ///< Battery pack terminal current (in mA) + BATTERY_PACK_AVERAGE_CURRENT, ///< Battery pack average terminal current (in mA - 1 minute rolling avg) + BATTERY_PACK_REMAINING_CAPACITY3, ///< Remaining battery capacity (in mWh) (third of 5 to increase frequency of reads) + BATTERY_PACK_BATTERY_STATUS3, ///< Battery pack status (third of 5 to increase frequency of reads) + BATTERY_CHARGER_STATUS3, ///< Battery charger status (third of 5 to increase frequency of reads) + BATTERY_PACK_MAX_ERROR, ///< Battery pack expected margin of error (%) in the state of charge calculation + BATTERY_PACK_RELATIVE_STATE_OF_CHARGE, ///< Battery pack relative state of charge (%) (relative to full charge capacity) + BATTERY_PACK_ABSOLUTE_STATE_OF_CHARGE, ///< Battery pack absolute state of charge (%) (relative to design capacity) + BATTERY_PACK_FULL_CHARGE_CAPACITY, ///< Battery pack full charge capacity (in mWh) + BATTERY_PACK_RUN_TIME_TO_EMPTY, ///< Battery pack run time (in minutes) predicted based on present rate of discharge + BATTERY_PACK_AVERAGE_TIME_TO_EMPTY, ///< Battery pack average time to empty (in minutes - 1 minute rolling avg) + BATTERY_PACK_AVERAGE_TIME_TO_FULL, ///< Battery pack average time to full (in minutes - 1 minute rolling avg) + BATTERY_PACK_REMAINING_CAPACITY4, ///< Remaining battery capacity (in mWh) (fourth of 5 to increase frequency of reads) + BATTERY_PACK_BATTERY_STATUS4, ///< Battery pack status (fourth of 5 to increase frequency of reads) + BATTERY_CHARGER_STATUS4, ///< Battery charger status (fourth of 5 to increase frequency of reads) + BATTERY_PACK_CHARGING_CURRENT, ///< Battery pack desired charging current (in mA) + BATTERY_PACK_CHARGING_VOLTAGE, ///< Battery pack desired charging voltage (in mV) + BATTERY_PACK_CYCLE_COUNT, ///< Battery pack cycle count + BATTERY_PACK_DESIGN_CAPACITY, ///< Battery pack design capacity (in mWh) + BATTERY_PACK_DESIGN_VOLTAGE, ///< Battery pack design voltage (in mV) + BATTERY_PACK_SPECIFICATION_INFO, ///< Version number of the smart battery specification the battery pack supports + BATTERY_PACK_MANUFACTURE_DATE, ///< Battery pack mfg date ( [year - 1980] x 512 + month x 32 + day + BATTERY_PACK_REMAINING_CAPACITY5, ///< Remaining battery capacity (in mWh) (fifth of 5 to increase frequency of reads) + BATTERY_PACK_BATTERY_STATUS5, ///< Battery pack status (fifth of 5 to increase frequency of reads) + BATTERY_CHARGER_STATUS5, ///< Battery charger status (fifth of 5 to increase frequency of reads) + BATTERY_PACK_SERIAL_NUMBER, ///< Battery pack serial number + BATTERY_PACK_MANUFACTURER_NAME, ///< Battery pack mfg name + BATTERY_PACK_DEVICE_NAME, ///< Battery pack device name + BATTERY_PACK_DEVICE_CHEMISTRY, ///< Battery pack device chemistry END_OF_LIST } BATTERY_MANAGEMENT_ENUM_T; @@ -140,9 +139,10 @@ static U32 lastBatteryMonitorTime = 0; ///< Previous battery monitor time. static U32 commFaultPersistentCount = 0; ///< Persistence count for battery comm fault. -static BATTERY_MANAGEMENT_ENUM_T current_BM_value; -static BATTERY_MANAGER_PAYLOAD_T BatteryManagerData; -static BATTERY_STATUS_PAYLOAD_T BatteryStatusData; +static BATTERY_MANAGEMENT_ENUM_T current_BM_value; ///< Index for which battery data to read now. +static BATTERY_MANAGER_PAYLOAD_T BatteryManagerData; ///< Record with latest battery pack data updated at the slower frequency. +static BATTERY_STATUS_PAYLOAD_T BatteryStatusData; ///< Record with latest battery pack/charger status data updated at the faster frequency. + // ********** private function prototypes ********** static F32 getBatteryRemainingCapacity_mWh( void ); @@ -622,28 +622,28 @@ case BATTERY_CHARGER_STATUS4: case BATTERY_CHARGER_STATUS5: if ( TRUE == getBatteryData( BATTERY_CHARGER_SLAVE_ADDRESS, BATTERY_CHARGER_STATUS_CMD, &BatteryStatusData.BatteryChargerStatus ) ) - { + { // If A/C not present, trigger A/C lost alarm if ( 0 == ( BatteryStatusData.BatteryChargerStatus & BATTERY_CHARGER_STATUS_AC_PRESENT_MASK ) ) { #ifndef DISABLE_BATT_COMM + // Pre-Treatment, Treatment, or Post-Treatment mode + if( opMode == MODE_PRET || opMode == MODE_TREA || opMode == MODE_POST ) + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_AC_POWER_LOST_IN_TREATMENT, BatteryStatusData.BatteryChargerStatus ); + } // Standby, Service, or Treatment Parameters mode - if ( opMode == MODE_STAN || opMode == MODE_SERV || opMode == MODE_TPAR ) + else { 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 ); } } - + // Publish battery status data after reading battery charger status (last status read) publishBatteryStatusData(); break;