Index: firmware/App/Drivers/Battery.c =================================================================== diff -u -rffa216b61ad4197eebb4aecdbe2517cad4996a21 -r71a7f0933979567e138791eab4783d9cb76447be --- firmware/App/Drivers/Battery.c (.../Battery.c) (revision ffa216b61ad4197eebb4aecdbe2517cad4996a21) +++ firmware/App/Drivers/Battery.c (.../Battery.c) (revision 71a7f0933979567e138791eab4783d9cb76447be) @@ -86,35 +86,51 @@ typedef enum BatteryManagementEnum { BEGINNING_OF_LIST = 0, - BATTERY_PACK_REMAINING_CAPACITY_ALARM = BEGINNING_OF_LIST, + 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; @@ -142,7 +158,6 @@ // For logging static void getBatteryManagementData( void ); -static void getBatteryStatusData( void ); static void publishBatteryManagementData( void ); static void publishBatteryStatusData( void ); @@ -181,7 +196,6 @@ if ( TRUE == didTimeout( lastBatteryMonitorTime, BATTERY_MONITOR_INTERVAL_MS ) ) { lastBatteryMonitorTime = getMSTimerCount(); - getBatteryStatusData(); getBatteryManagementData(); } } @@ -435,164 +449,150 @@ return result; } + /*********************************************************************//** * @brief - * The getBatteryManagementData function gets the battery status data and checks for error conditions - * It also publishes the values for logging - * @details Inputs: hasBatteryChargerStatus, batteryStatus, batteryRelStateOfCharge_pct, - * batteryPackStatus, lostACPowerPersistentCount - * @details Outputs: hasBatteryChargerStatus, lostACPowerPersistentCount, batteryRelStateOfCharge_pct, - * batteryRemCapacity_mAh - * @return none - *************************************************************************/ -static void getBatteryStatusData(void) -{ - getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_REMAINING_CAPACITY, &BatteryStatusData.RemainingCapacity); - batteryRemCapacity_mAh.data = (F32)BatteryStatusData.RemainingCapacity * BATTERY_MAH_2_MWH_FACTOR; - 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 ); - } -/* TODO: Uncomment when battery charger is installed. - if ( TRUE == getBatteryData( BATTERY_CHARGER_SLAVE_ADDRESS, BATTERY_CHARGER_STATUS_CMD, &BatteryStatusData.BatteryChargerStatus ) ) - { - if ( 0 == ( BatteryStatusData.BatteryChargerStatus & 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, BatteryStatusData.BatteryChargerStatus ); -#endif - } - } - else - { - clearAlarmCondition( ALARM_ID_HD_AC_POWER_LOST ); - lostACPowerPersistentCount = 0; - } - } -*/ - publishBatteryStatusData(); -} -/*********************************************************************//** - * @brief * The getBatteryManagementData function accumulates the battery management data and publishes when complete * @details Inputs: * @details Outputs: * @return none *************************************************************************/ static void getBatteryManagementData(void) { + // 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; + 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); + 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; + 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; + 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; + 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; + 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; + 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; + 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); + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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); @@ -602,6 +602,33 @@ 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: +/* TODO: Uncomment when battery charger is installed. + if ( TRUE == getBatteryData( BATTERY_CHARGER_SLAVE_ADDRESS, BATTERY_CHARGER_STATUS_CMD, &BatteryStatusData.BatteryChargerStatus ) ) + { + if ( 0 == ( BatteryStatusData.BatteryChargerStatus & 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, BatteryStatusData.BatteryChargerStatus ); +#endif + } + } + else + { + clearAlarmCondition( ALARM_ID_HD_AC_POWER_LOST ); + lostACPowerPersistentCount = 0; + } + } +*/ + publishBatteryStatusData(); + break; + case END_OF_LIST: current_BM_value = BEGINNING_OF_LIST; publishBatteryManagementData(); @@ -612,8 +639,6 @@ break; } - // Go to next value for next time - current_BM_value += 1; }