mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-03 15:48:52 +08:00
smbus_sbs: switch to battery_info.serial_number
This commit is contained in:
committed by
Silvan Fuhrer
parent
7895976a17
commit
2237bfa9a9
@@ -45,6 +45,7 @@
|
|||||||
|
|
||||||
#include <px4_platform_common/i2c_spi_buses.h>
|
#include <px4_platform_common/i2c_spi_buses.h>
|
||||||
#include <lib/drivers/smbus/SMBus.hpp>
|
#include <lib/drivers/smbus/SMBus.hpp>
|
||||||
|
#include <uORB/topics/battery_info.h>
|
||||||
#include <uORB/topics/battery_status.h>
|
#include <uORB/topics/battery_status.h>
|
||||||
#include <px4_platform_common/param.h>
|
#include <px4_platform_common/param.h>
|
||||||
#include <lib/atmosphere/atmosphere.h>
|
#include <lib/atmosphere/atmosphere.h>
|
||||||
@@ -66,7 +67,7 @@ public:
|
|||||||
|
|
||||||
friend SMBus;
|
friend SMBus;
|
||||||
|
|
||||||
int populate_smbus_data(battery_status_s &msg);
|
int populate_smbus_data(battery_status_s &msg, battery_info_s &battery_info);
|
||||||
|
|
||||||
virtual void RunImpl(); // Can be overridden by derived implimentation
|
virtual void RunImpl(); // Can be overridden by derived implimentation
|
||||||
|
|
||||||
@@ -136,7 +137,7 @@ protected:
|
|||||||
|
|
||||||
perf_counter_t _cycle{perf_alloc(PC_ELAPSED, "batmon_cycle")}; // TODO
|
perf_counter_t _cycle{perf_alloc(PC_ELAPSED, "batmon_cycle")}; // TODO
|
||||||
|
|
||||||
/** @param _batt_topic uORB battery topic. */
|
orb_advert_t _battery_info_topic{nullptr};
|
||||||
orb_advert_t _batt_topic{nullptr};
|
orb_advert_t _batt_topic{nullptr};
|
||||||
|
|
||||||
/** @param _cell_count Number of series cell (retrieved from cell_count PX4 params) */
|
/** @param _cell_count Number of series cell (retrieved from cell_count PX4 params) */
|
||||||
@@ -173,8 +174,10 @@ SMBUS_SBS_BaseClass<T>::SMBUS_SBS_BaseClass(const I2CSPIDriverConfig &config, SM
|
|||||||
I2CSPIDriver<T>(config),
|
I2CSPIDriver<T>(config),
|
||||||
_interface(interface)
|
_interface(interface)
|
||||||
{
|
{
|
||||||
|
battery_info_s battery_info{};
|
||||||
battery_status_s new_report = {};
|
battery_status_s new_report = {};
|
||||||
int SBS_instance_number = 0;
|
int SBS_instance_number = 0;
|
||||||
|
_battery_info_topic = orb_advertise_multi(ORB_ID(battery_info), &battery_info, &SBS_instance_number);
|
||||||
_batt_topic = orb_advertise_multi(ORB_ID(battery_status), &new_report, &SBS_instance_number);
|
_batt_topic = orb_advertise_multi(ORB_ID(battery_status), &new_report, &SBS_instance_number);
|
||||||
_interface->init();
|
_interface->init();
|
||||||
}
|
}
|
||||||
@@ -251,7 +254,7 @@ int SMBUS_SBS_BaseClass<T>::get_startup_info()
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
int SMBUS_SBS_BaseClass<T>::populate_smbus_data(battery_status_s &data)
|
int SMBUS_SBS_BaseClass<T>::populate_smbus_data(battery_status_s &data, battery_info_s &battery_info)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Temporary variable for storing SMBUS reads.
|
// Temporary variable for storing SMBUS reads.
|
||||||
@@ -285,7 +288,7 @@ int SMBUS_SBS_BaseClass<T>::populate_smbus_data(battery_status_s &data)
|
|||||||
|
|
||||||
// Read serial number.
|
// Read serial number.
|
||||||
ret |= _interface->read_word(BATT_SMBUS_SERIAL_NUMBER, result);
|
ret |= _interface->read_word(BATT_SMBUS_SERIAL_NUMBER, result);
|
||||||
data.serial_number = result;
|
snprintf(battery_info.serial_number, sizeof(battery_info.serial_number), "%" PRIu16, result);
|
||||||
|
|
||||||
// Read battery temperature and covert to Celsius.
|
// Read battery temperature and covert to Celsius.
|
||||||
ret |= _interface->read_word(BATT_SMBUS_TEMP, result);
|
ret |= _interface->read_word(BATT_SMBUS_TEMP, result);
|
||||||
@@ -312,12 +315,17 @@ void SMBUS_SBS_BaseClass<T>::RunImpl()
|
|||||||
|
|
||||||
new_report.connected = true;
|
new_report.connected = true;
|
||||||
|
|
||||||
int ret = populate_smbus_data(new_report);
|
battery_info_s battery_info{};
|
||||||
|
battery_info.timestamp = now;
|
||||||
|
battery_info.id = new_report.id;
|
||||||
|
|
||||||
|
int ret = populate_smbus_data(new_report, battery_info);
|
||||||
|
|
||||||
new_report.cell_count = _cell_count;
|
new_report.cell_count = _cell_count;
|
||||||
|
|
||||||
// Only publish if no errors.
|
// Only publish if no errors.
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
orb_publish(ORB_ID(battery_status), _batt_topic, &new_report);
|
orb_publish(ORB_ID(battery_status), _batt_topic, &new_report);
|
||||||
|
orb_publish(ORB_ID(battery_info), _battery_info_topic, &battery_info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user