Index: firmware/App/Monitors/Battery.c =================================================================== diff -u -r0b606b5cbf2df52ea9845544155eae947ca4b8ee -r9e14f8c931ea3f2afdedc92de71bd497868a4176 --- firmware/App/Monitors/Battery.c (.../Battery.c) (revision 0b606b5cbf2df52ea9845544155eae947ca4b8ee) +++ firmware/App/Monitors/Battery.c (.../Battery.c) (revision 9e14f8c931ea3f2afdedc92de71bd497868a4176) @@ -28,19 +28,19 @@ // ********** private definitions ********** -#define BATTERY_CHARGER_STATUS1_CMD 0x21 ///< Battery charger status register 1 -#define BATTERY_CHARGER_STATUS2_CMD 0x22 ///< Battery charger status register 2. -#define BATTERY_CHARGER_FAULT_CMD 0x24 ///< Command to get battery charger fault. +#define BATTERY_CHARGER_ADDR_STATUS1 0x21 ///< Battery charger status register 1 +#define BATTERY_CHARGER_ADDR_STATUS2 0x22 ///< Battery charger status register 2. +#define BATTERY_CHARGER_ADDR_FAULT 0x24 ///< Command to get battery charger fault. #define BATTERY_PACK_ERROR_BITS 0x0F ///< Error codes are in the first byte. #define BATTERY_MONITOR_INTERVAL_MS 850 ///< Battery monitor interval in ms. #define BATTERY_COMM_FAULT_COUNT 5 ///< Battery communication fault persistent count before alarming. #define BATTERY_COMM_FAULT_TIMER ( 10 * SEC_PER_MIN * MS_PER_SECOND ) ///< Battery communication fault persistence timer. // Battery logging -#define BATTERY_CHARGER_ADDR_TS 0x37 ///< Battery thermistor ADC register. -#define BATTERY_CHARGER_ADDR_VBAT 0x33 ///< Battery voltage ADC register. +#define BATTERY_CHARGER_ADDR_TS 0x08 ///< Battery thermistor ADC register. +#define BATTERY_CHARGER_ADDR_VBAT 0x09 ///< Battery voltage ADC register. #define BATTERY_CHARGER_ADDR_VSYS 0x35 ///< Battery system voltage ADC register. -#define BATTERY_CHARGER_ADDR_CURRENT 0x2F ///< Battery current ADC register. +#define BATTERY_CHARGER_ADDR_CURRENT 0x0a ///< Battery current ADC register. #define BATTERY_PACK_ADDR_RELATIVE_STATE_OF_CHARGE 0x0d ///< Battery pack address relative state of charge. #define BATTERY_PACK_ADDR_REMAINING_CAPACITY 0x0f ///< Battery pack address remaining capacity. #define BATTERY_PACK_ADDR_FULL_CHARGE_CAPACITY 0x10 ///< Battery pack address full charge capacity. @@ -56,17 +56,15 @@ static OVERRIDE_U32_T batteryChargerStatus; ///< Battery charger status static OVERRIDE_F32_T batteryRemCapacity_mAh; ///< Battery pack remaining capacity (in mAh). 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. +static BATTERY_DATA_PAYLOAD_T BatteryData; ///< Record with latest battery data. // ********** private function prototypes ********** static F32 getBatteryRemainingCapacity_mAh( void ); static U32 getBatteryStatus( void ); static U32 getBatteryChargerStatus( void ); static void getBatteryManagementData( void ); -static void publishBatteryManagementData( void ); -static void publishBatteryStatusData( void ); +static void publishBatteryDataPayload( void ); /*********************************************************************//** * @brief @@ -83,8 +81,7 @@ memset( &batteryStatus, 0, sizeof(OVERRIDE_U32_T)); memset( &batteryChargerStatus, 0, sizeof(OVERRIDE_U32_T)); memset( &batteryRemCapacity_mAh, 0, sizeof(OVERRIDE_U32_T)); - memset( &BatteryStatusData, 0, sizeof( BATTERY_STATUS_PAYLOAD_T ) ); - memset( &BatteryManagerData, 0, sizeof( BATTERY_MANAGER_PAYLOAD_T ) ); + memset( &BatteryData, 0, sizeof( BATTERY_DATA_PAYLOAD_T ) ); // Initialize persistent alarm for battery pack status error initPersistentAlarm( ALARM_ID_TD_BATTERY_PACK_ERROR_DETECTED, 0, BATT_STATUS_ERROR_PERSIST_MS ); // Initialize bad message CRC time windowed count @@ -170,14 +167,15 @@ /*********************************************************************//** * @brief * The getBatteryManagementData function reads one battery data item per - * call in a round robin fashion and publishes the collected data when - * the full list has been read. + * call in a round-robin fashion and publishes the collected battery data + * when the full list has been read. * @details \b Alarm: ALARM_ID_TD_BATTERY_PACK_ERROR_DETECTED if battery * pack status error bits are set. - * @details \b Alarm: ALARM_ID_TD_SOFTWARE_FAULT if invalid battery + * @details \b Alarm: ALARM_ID_TD_SOFTWARE_FAULT if an invalid battery * management data state is detected. - * @details \b Inputs: current_BM_value, BatteryStatusData - * @details \b Outputs: batteryRemCapacity_mAh, BatteryManagerData + * @details \b Inputs: current_BM_value, BatteryData + * @details \b Outputs: current_BM_value, batteryRemCapacity_mAh, + * batteryStatus, batteryChargerStatus, BatteryData * @return none *************************************************************************/ static void getBatteryManagementData(void) @@ -189,63 +187,61 @@ switch( current_BM_value ) { case BATTERY_PACK_REMAINING_CAPACITY: - getBatteryData (BATTERY_PACK_ADDRESS, BATTERY_PACK_ADDR_REMAINING_CAPACITY, &BatteryStatusData.RemainingCapacity ); - batteryRemCapacity_mAh.data = (F32)BatteryStatusData.RemainingCapacity; + getBatteryData (BATTERY_PACK_ADDRESS, BATTERY_PACK_ADDR_REMAINING_CAPACITY, &BatteryData.RemainingCapacity ); + batteryRemCapacity_mAh.data = (F32)BatteryData.RemainingCapacity; break; case BATTERY_PACK_BATTERY_STATUS: - getBatteryData ( BATTERY_PACK_ADDRESS, BATTERY_PACK_ADDR_BATTERY_STATUS, &BatteryStatusData.BatteryStatus ); - batteryStatus.data = BatteryStatusData.BatteryStatus; + getBatteryData ( BATTERY_PACK_ADDRESS, BATTERY_PACK_ADDR_BATTERY_STATUS, &BatteryData.BatteryStatus ); + batteryStatus.data = BatteryData.BatteryStatus; if ( ( TRUE == isPersistentAlarmTriggered( ALARM_ID_TD_BATTERY_PACK_ERROR_DETECTED, ( getBatteryStatus() & BATTERY_PACK_ERROR_BITS ) != 0 ) ) ) { SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_BATTERY_PACK_ERROR_DETECTED, getBatteryStatus(), BATTERY_PACK_ERROR_BITS ); } break; case BATTERY_CHARGER_STATUS: - if ( TRUE == getBatteryData( BATTERY_CHARGER_ADDRESS, BATTERY_CHARGER_STATUS1_CMD, &BatteryStatusData.BatteryChargerStatus ) ) + if ( TRUE == getBatteryData( BATTERY_CHARGER_ADDRESS, BATTERY_CHARGER_ADDR_STATUS1, &BatteryData.BatteryChargerStatus ) ) { - batteryChargerStatus.data = BatteryStatusData.BatteryChargerStatus; + batteryChargerStatus.data = BatteryData.BatteryChargerStatus; } - // Publish battery status data after reading battery charger status (last status read) - publishBatteryStatusData(); break; case BATTERY_PACK_RELATIVE_STATE_OF_CHARGE: - getBatteryData ( BATTERY_PACK_ADDRESS, BATTERY_PACK_ADDR_RELATIVE_STATE_OF_CHARGE, &BatteryManagerData.RelativeStateOfCharge ); + getBatteryData ( BATTERY_PACK_ADDRESS, BATTERY_PACK_ADDR_RELATIVE_STATE_OF_CHARGE, &BatteryData.RelativeStateOfCharge ); break; case BATTERY_PACK_FULL_CHARGE_CAPACITY: - getBatteryData ( BATTERY_PACK_ADDRESS, BATTERY_PACK_ADDR_FULL_CHARGE_CAPACITY, &BatteryManagerData.FullChargeCapacity ); + getBatteryData ( BATTERY_PACK_ADDRESS, BATTERY_PACK_ADDR_FULL_CHARGE_CAPACITY, &BatteryData.FullChargeCapacity ); break; case BATTERY_CHARGER_TS: - getBatteryData ( BATTERY_CHARGER_ADDRESS, BATTERY_CHARGER_ADDR_TS, &BatteryManagerData.TS ); - BatteryManagerData.TS = (BatteryManagerData.TS * 1024.0f) / 100.0F; + getBatteryData ( BATTERY_PACK_ADDRESS, BATTERY_CHARGER_ADDR_TS, &BatteryData.TS ); + BatteryData.TS = (BatteryData.TS * 1024.0f) / 100.0F; break; case BATTERY_CHARGER_VBAT: - getBatteryData( BATTERY_CHARGER_ADDRESS, BATTERY_CHARGER_ADDR_VBAT, &BatteryManagerData.VBAT ); - BatteryManagerData.VBAT = BatteryManagerData.VBAT * 2U; + getBatteryData( BATTERY_PACK_ADDRESS, BATTERY_CHARGER_ADDR_VBAT, &BatteryData.VBAT ); + BatteryData.VBAT = BatteryData.VBAT * 2U; break; case BATTERY_CHARGER_VSYS: - getBatteryData( BATTERY_CHARGER_ADDRESS, BATTERY_CHARGER_ADDR_VSYS, &BatteryManagerData.VSYS ); - BatteryManagerData.VSYS = BatteryManagerData.VSYS * 2U; + getBatteryData( BATTERY_CHARGER_ADDRESS, BATTERY_CHARGER_ADDR_VSYS, &BatteryData.VSYS ); + BatteryData.VSYS = BatteryData.VSYS * 2U; break; case BATTERY_CHARGER_FAULT: - getBatteryData( BATTERY_CHARGER_ADDRESS, BATTERY_CHARGER_FAULT_CMD, &BatteryManagerData.FaultStatus ); + getBatteryData( BATTERY_CHARGER_ADDRESS, BATTERY_CHARGER_ADDR_FAULT, &BatteryData.FaultStatus ); break; case BATTERY_CHARGER_CURRENT: - getBatteryData( BATTERY_CHARGER_ADDRESS, BATTERY_CHARGER_ADDR_CURRENT, &BatteryManagerData.IBAT ); - BatteryManagerData.IBAT = BatteryManagerData.IBAT * 2U; + getBatteryData( BATTERY_PACK_ADDRESS, BATTERY_CHARGER_ADDR_CURRENT, &BatteryData.IBAT ); + BatteryData.IBAT = BatteryData.IBAT * 2U; break; case END_OF_LIST: current_BM_value = BEGINNING_OF_LIST; - publishBatteryManagementData(); + publishBatteryDataPayload(); break; default: @@ -269,39 +265,23 @@ /*********************************************************************//** * @brief - * The publishBatteryManagementData function publishes the battery - * management data over CAN. - * @details \b Message \b Sent: MSG_ID_TD_BATTERY_MANAGEMENT_DATA - * @details \b Inputs: BatteryManagerData - * @details \b Outputs: none + * The publishBatteryDataPayload function updates and publishes the battery + * data payload over CAN. + * @details \b Message \b Sent: MSG_ID_TD_BATTERY_DATA + * @details \b Inputs: BatteryData, batteryRemCapacity_mAh, batteryStatus, + * batteryChargerStatus, batteryI2CStatusRegister + * @details \b Outputs: BatteryData * @return none *************************************************************************/ -static void publishBatteryManagementData( void ) +static void publishBatteryDataPayload( void ) { - broadcastData( MSG_ID_TD_BATTERY_MANAGEMENT_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&BatteryManagerData, sizeof( BATTERY_MANAGER_PAYLOAD_T ) ); + BatteryData.RemainingCapacity = (U32)getBatteryRemainingCapacity_mAh(); + BatteryData.BatteryStatus = getBatteryStatus(); + BatteryData.BatteryChargerStatus = getBatteryChargerStatus(); + BatteryData.BatteryI2CStatus = getI2CStatusRegister( FALSE ); + broadcastData( MSG_ID_TD_BATTERY_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&BatteryData, sizeof( BATTERY_DATA_PAYLOAD_T ) ); } -/*********************************************************************//** - * @brief - * The publishBatteryStatusData function publishes the battery status - * data over CAN. - * @details \b Message \b Sent: MSG_ID_TD_BATTERY_STATUS_DATA - * @details \b Inputs: BatteryStatusData - * @details \b Outputs: none - * @return none - *************************************************************************/ -static void publishBatteryStatusData( void ) -{ - BATTERY_STATUS_PAYLOAD_T batteryStatusData; - - batteryStatusData.RemainingCapacity = (U32)getBatteryRemainingCapacity_mAh(); - batteryStatusData.BatteryStatus = getBatteryStatus(); - batteryStatusData.BatteryChargerStatus = getBatteryChargerStatus(); - batteryStatusData.BatteryI2CStatus = getI2CStatusRegister( FALSE ); - - broadcastData( MSG_ID_TD_BATTERY_STATUS_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&batteryStatusData, sizeof( BATTERY_STATUS_PAYLOAD_T ) ); -} - /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/