Index: firmware/App/Drivers/BatteryDriver.c =================================================================== diff -u -r2e75c0c69869132ff4adb46a0509aab7a04d60a3 -r78d196593cdcc9c3cd7166f02a99a7408a3e0b32 --- firmware/App/Drivers/BatteryDriver.c (.../BatteryDriver.c) (revision 2e75c0c69869132ff4adb46a0509aab7a04d60a3) +++ firmware/App/Drivers/BatteryDriver.c (.../BatteryDriver.c) (revision 78d196593cdcc9c3cd7166f02a99a7408a3e0b32) @@ -31,21 +31,19 @@ #define BATTERY_COMM_TIME_OUT_MS 2 ///< Battery communication time out in ms. #define BATTERY_CHARGER_SLAVE_ADDRESS 0x6B ///< Battery charger controller device address. #define BATTERY_PACK_SLAVE_ADDRESS 0x0B ///< Battery pack device address. -#define BATTERY_I2C_STATUS_REGISTER_MIN 0 //ToDo -#define BATTERY_I2C_STATUS_REGISTER_MAX 2 //ToDo // ********** private data ********** static OVERRIDE_U32_T batteryI2CStatusRegister; ///< Battery I2C Interrupt Status register /// Lookup table mapping device enum to I2C slave addresses. -const U32 device_addr[MAXIMUM_DEVICE_ADDRESSES] = { +const U32 device_addr[NUM_OF_BATTERY_DEVICES] = { 0x6B, ///< BATTERY_CHARGER_ADDRESS 0x0B, ///< BATTERY_PACK_ADDRESS }; /// Lookup table mapping register enum to register addresses. -const U32 reg_addr[MAXIMUM_BATTERY_REGISTERS] = { +const U32 reg_addr[NUM_OF_BATTERY_REGISTERS-1] = { 0x00, ///< BEGINNING_OF_LIST 0x0f, ///< BATTERY_PACK_REMAINING_CAPACITY 0x16, ///< BATTERY_PACK_BATTERY_STATUS @@ -191,8 +189,8 @@ * and get data based on given command. * @details \b Inputs: none * @details \b Outputs: get data from battery device - * @param device battery device to communicate with. - * @param registers register to read from batteru device. + * @param deviceSel battery device to communicate with. + * @param registerSel register to read from batteru device. * @param dataPtr pointer to store the register data * @return TRUE if data received successfully, otherwise FALSE *************************************************************************/ @@ -371,7 +369,7 @@ *************************************************************************/ BOOL testBatteryI2CStatusOverride( MESSAGE_T *message ) { - BOOL result = u32Override( message, &batteryI2CStatusRegister, BATTERY_I2C_STATUS_REGISTER_MIN, BATTERY_I2C_STATUS_REGISTER_MAX ); + BOOL result = u32Override( message, &batteryI2CStatusRegister, 0x0, 0xFFFFFFFF ); return result; } Index: firmware/App/Drivers/BatteryDriver.h =================================================================== diff -u -r2e75c0c69869132ff4adb46a0509aab7a04d60a3 -r78d196593cdcc9c3cd7166f02a99a7408a3e0b32 --- firmware/App/Drivers/BatteryDriver.h (.../BatteryDriver.h) (revision 2e75c0c69869132ff4adb46a0509aab7a04d60a3) +++ firmware/App/Drivers/BatteryDriver.h (.../BatteryDriver.h) (revision 78d196593cdcc9c3cd7166f02a99a7408a3e0b32) @@ -45,14 +45,16 @@ BATTERY_CHARGER_VSYS, ///< Battery charger system voltage (in mV) BATTERY_CHARGER_FAULT, ///< Battery charger fault status BATTERY_CHARGER_CURRENT, ///< Battery charger current (in mA) - MAXIMUM_BATTERY_REGISTERS, ///< End of battery data list + NUM_OF_BATTERY_REGISTERS, ///< Number of battery registers + BATTERY_END_OF_LIST_TIME_TO_PUBLISH, ///< End of battery data list + } BATTERY_MANAGEMENT_ENUM_T; typedef enum BatteryDevicesEnum { BATTERY_CHARGER_ADDRESS = 0, ///< Battery charger at I2C address BATTERY_PACK_ADDRESS, ///< Battery pack at SMBus address - MAXIMUM_DEVICE_ADDRESSES, ///< Number of battery devices + NUM_OF_BATTERY_DEVICES, ///< Number of battery devices } BATTERY_DEVICE_ADDRESS_ENUM_T; // ********** public function prototypes ********** Index: firmware/App/Monitors/Battery.c =================================================================== diff -u -r2e75c0c69869132ff4adb46a0509aab7a04d60a3 -r78d196593cdcc9c3cd7166f02a99a7408a3e0b32 --- firmware/App/Monitors/Battery.c (.../Battery.c) (revision 2e75c0c69869132ff4adb46a0509aab7a04d60a3) +++ firmware/App/Monitors/Battery.c (.../Battery.c) (revision 78d196593cdcc9c3cd7166f02a99a7408a3e0b32) @@ -33,12 +33,6 @@ #define BATTERY_COMM_FAULT_TIMER ( 10 * SEC_PER_MIN * MS_PER_SECOND ) ///< Battery communication fault persistence timer. #define BATTERY_PACK_ERROR_BITS 0x0F ///< Error codes are in the first byte. #define BATTERY_MIN_CAPACITY_MAH 1950.0F ///< Minimum battery capacity for starting a treatment. -#define BATTERY_REM_CAPACITY_MAH_MIN 0 // ToDo -#define BATTERY_REM_CAPACITY_MAH_MAX 5000 // ToDo -#define BATTERY_STATUS_MIN 0 // ToDo -#define BATTERY_STATUS_MAX 5 // ToDo -#define BATTERY_CHARGER_STATUS_MIN 0 // ToDo -#define BATTERY_CHARGER_STATUS_MAX 5 // ToDo // ********** private data ********** @@ -49,6 +43,7 @@ static OVERRIDE_U32_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_DATA_PAYLOAD_T BatteryData; ///< Record with latest battery data. +static BATTERY_DATA_PAYLOAD_T batterydata; ///< Record with latest battery data. // ********** private function prototypes ********** @@ -83,6 +78,7 @@ batteryRemCapacity_mAh.ovInitData = 0; batteryRemCapacity_mAh.override = OVERRIDE_RESET; memset( &BatteryData, 0, sizeof( BATTERY_DATA_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 @@ -188,59 +184,60 @@ switch( current_BM_value ) { case BATTERY_PACK_REMAINING_CAPACITY: - getBatteryData (BATTERY_PACK_ADDRESS, BATTERY_PACK_REMAINING_CAPACITY, &BatteryData.RemainingCapacity ); - batteryRemCapacity_mAh.data = BatteryData.RemainingCapacity; + getBatteryData (BATTERY_PACK_ADDRESS, BATTERY_PACK_REMAINING_CAPACITY, &batterydata.RemainingCapacity ); + batteryRemCapacity_mAh.data = batterydata.RemainingCapacity; break; case BATTERY_PACK_BATTERY_STATUS: - getBatteryData ( BATTERY_PACK_ADDRESS, BATTERY_PACK_BATTERY_STATUS, &BatteryData.BatteryStatus ); - batteryStatus.data = BatteryData.BatteryStatus; + getBatteryData ( BATTERY_PACK_ADDRESS, BATTERY_PACK_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_PACK_RELATIVE_STATE_OF_CHARGE: - getBatteryData ( BATTERY_PACK_ADDRESS, BATTERY_PACK_RELATIVE_STATE_OF_CHARGE, &BatteryData.RelativeStateOfCharge ); + getBatteryData ( BATTERY_PACK_ADDRESS, BATTERY_PACK_RELATIVE_STATE_OF_CHARGE, &batterydata.RelativeStateOfCharge ); break; case BATTERY_PACK_FULL_CHARGE_CAPACITY: - getBatteryData ( BATTERY_PACK_ADDRESS, BATTERY_PACK_FULL_CHARGE_CAPACITY, &BatteryData.FullChargeCapacity ); + getBatteryData ( BATTERY_PACK_ADDRESS, BATTERY_PACK_FULL_CHARGE_CAPACITY, &batterydata.FullChargeCapacity ); break; case BATTERY_CHARGER_STATUS: - if ( TRUE == getBatteryData( BATTERY_CHARGER_ADDRESS, BATTERY_CHARGER_STATUS, &BatteryData.BatteryChargerStatus ) ) + if ( TRUE == getBatteryData( BATTERY_CHARGER_ADDRESS, BATTERY_CHARGER_STATUS, &batterydata.BatteryChargerStatus ) ) { - batteryChargerStatus.data = BatteryData.BatteryChargerStatus; + batteryChargerStatus.data = batterydata.BatteryChargerStatus; } break; case BATTERY_CHARGER_TS: - getBatteryData ( BATTERY_PACK_ADDRESS, BATTERY_CHARGER_TS, &BatteryData.TS ); - BatteryData.TS = (BatteryData.TS * 1024.0f) / 100.0F; + getBatteryData ( BATTERY_PACK_ADDRESS, BATTERY_CHARGER_TS, &batterydata.TS ); + batterydata.TS = (batterydata.TS * 1024.0f) / 100.0F; break; case BATTERY_CHARGER_VBAT: - getBatteryData( BATTERY_PACK_ADDRESS, BATTERY_CHARGER_VBAT, &BatteryData.VBAT ); - BatteryData.VBAT = BatteryData.VBAT * 2U; + getBatteryData( BATTERY_PACK_ADDRESS, BATTERY_CHARGER_VBAT, &batterydata.VBAT ); + batterydata.VBAT = batterydata.VBAT * 2U; break; case BATTERY_CHARGER_VSYS: - getBatteryData( BATTERY_CHARGER_ADDRESS, BATTERY_CHARGER_VSYS, &BatteryData.VSYS ); - BatteryData.VSYS = BatteryData.VSYS * 2U; + getBatteryData( BATTERY_CHARGER_ADDRESS, BATTERY_CHARGER_VSYS, &batterydata.VSYS ); + batterydata.VSYS = batterydata.VSYS * 2U; break; case BATTERY_CHARGER_FAULT: - getBatteryData( BATTERY_CHARGER_ADDRESS, BATTERY_CHARGER_FAULT, &BatteryData.FaultStatus ); + getBatteryData( BATTERY_CHARGER_ADDRESS, BATTERY_CHARGER_FAULT, &batterydata.FaultStatus ); break; case BATTERY_CHARGER_CURRENT: - getBatteryData( BATTERY_PACK_ADDRESS, BATTERY_CHARGER_CURRENT, &BatteryData.IBAT ); - BatteryData.IBAT = BatteryData.IBAT * 2U; + getBatteryData( BATTERY_PACK_ADDRESS, BATTERY_CHARGER_CURRENT, &batterydata.IBAT ); + batterydata.IBAT = batterydata.IBAT * 2U; + current_BM_value += 1; /// To avoid default case and execute the publish data in a next iteration break; - case MAXIMUM_BATTERY_REGISTERS: + case BATTERY_END_OF_LIST_TIME_TO_PUBLISH: current_BM_value = BEGINNING_OF_LIST; publishBatteryDataPayload(); break; @@ -280,6 +277,13 @@ BatteryData.BatteryStatus = getBatteryStatus(); BatteryData.BatteryChargerStatus = getBatteryChargerStatus(); BatteryData.BatteryI2CStatus = getI2CStatusRegister( FALSE ); + BatteryData.FaultStatus = batterydata.FaultStatus; + BatteryData.FullChargeCapacity = batterydata.FullChargeCapacity; + BatteryData.IBAT = batterydata.IBAT; + BatteryData.RelativeStateOfCharge = batterydata.RelativeStateOfCharge; + BatteryData.TS = batterydata.TS; + BatteryData.VBAT = batterydata.VBAT; + BatteryData.VSYS = batterydata.VSYS; broadcastData( MSG_ID_TD_BATTERY_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&BatteryData, sizeof( BATTERY_DATA_PAYLOAD_T ) ); } @@ -300,7 +304,7 @@ *************************************************************************/ BOOL testBatteryRemainingCapacityOverride( MESSAGE_T *message ) { - BOOL result = u32Override( message, &batteryRemCapacity_mAh, BATTERY_REM_CAPACITY_MAH_MIN, BATTERY_REM_CAPACITY_MAH_MAX ); + BOOL result = u32Override( message, &batteryRemCapacity_mAh, 0x0, 0xFFFFFFFF ); return result; } @@ -316,7 +320,7 @@ *************************************************************************/ BOOL testBatteryStatusOverride( MESSAGE_T *message ) { - BOOL result = u32Override( message, &batteryStatus, BATTERY_STATUS_MIN, BATTERY_STATUS_MAX ); + BOOL result = u32Override( message, &batteryStatus, 0x0, 0xFFFFFFFF ); return result; } @@ -332,6 +336,6 @@ *************************************************************************/ BOOL testBatteryChargerStatusOverride( MESSAGE_T *message ) { - BOOL result = u32Override( message, &batteryChargerStatus, BATTERY_CHARGER_STATUS_MIN, BATTERY_CHARGER_STATUS_MIN ); + BOOL result = u32Override( message, &batteryChargerStatus, 0x0, 0xFFFFFFFF ); return result; } Index: firmware/App/Monitors/Battery.h =================================================================== diff -u -ree67a27bd69956eb8cfd7c5986538b441b8b7aa7 -r78d196593cdcc9c3cd7166f02a99a7408a3e0b32 --- firmware/App/Monitors/Battery.h (.../Battery.h) (revision ee67a27bd69956eb8cfd7c5986538b441b8b7aa7) +++ firmware/App/Monitors/Battery.h (.../Battery.h) (revision 78d196593cdcc9c3cd7166f02a99a7408a3e0b32) @@ -31,6 +31,7 @@ */ // ********** public definitions ********** + /// Payload record structure for battery data broadcast message typedef struct {