drivers: add perf counters and documentation to ads7953

This commit is contained in:
Phil-Engljaehringer
2025-11-24 11:06:56 +01:00
committed by GitHub
parent 7d8e79c49d
commit 0cefd74fee
5 changed files with 23 additions and 5 deletions
+16 -3
View File
@@ -8,11 +8,20 @@
ADS7953::ADS7953(const I2CSPIDriverConfig &config) :
SPI(config),
I2CSPIDriver(config),
ModuleParams(nullptr)
ModuleParams(nullptr),
_cycle_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": single-sample")),
_comms_errors(perf_alloc(PC_COUNT, MODULE_NAME": comms errors"))
{
static_assert(arraySize(adc_report_s::channel_id) >= NUM_CHANNELS, "ADS7953 reports 16 channels");
}
ADS7953::~ADS7953()
{
ScheduleClear();
perf_free(_cycle_perf);
perf_free(_comms_errors);
}
int ADS7953::init()
{
int ret = SPI::init();
@@ -30,7 +39,7 @@ int ADS7953::init()
_adc_report.channel_id[i] = -1;
}
ScheduleOnInterval(10_ms);
ScheduleOnInterval(SAMPLE_INTERVAL, SAMPLE_INTERVAL);
return PX4_OK;
}
@@ -56,7 +65,6 @@ int ADS7953::probe()
return PX4_ERROR;
}
PX4_INFO("ADS7953 was found");
return PX4_OK;
}
@@ -94,6 +102,9 @@ int ADS7953::get_measurements()
_adc_report.channel_id[ch_id] = ch_id;
_adc_report.raw_data[ch_id] = ((((uint16_t) recv_data[0]) & 0x0F) << 8) | recv_data[1];
}
} else {
perf_count(_comms_errors);
}
// Find index to measure next
@@ -112,9 +123,11 @@ int ADS7953::get_measurements()
void ADS7953::RunImpl()
{
perf_begin(_cycle_perf);
get_measurements();
_adc_report.timestamp = hrt_absolute_time();
_adc_report_pub.publish(_adc_report);
perf_end(_cycle_perf);
for (unsigned i = 0; i < PX4_MAX_ADC_CHANNELS; ++i) {
_adc_report.channel_id[i] = -1;
+4 -2
View File
@@ -19,7 +19,7 @@ class ADS7953 : public device::SPI, public I2CSPIDriver<ADS7953>, public ModuleP
{
public:
ADS7953(const I2CSPIDriverConfig &config);
virtual ~ADS7953() = default;
~ADS7953() override;
static void print_usage();
int init() override;
@@ -31,7 +31,9 @@ private:
static constexpr int NUM_CHANNELS = 16;
uORB::PublicationMulti<adc_report_s> _adc_report_pub{ORB_ID(adc_report)};
static const hrt_abstime SAMPLE_INTERVAL{50_ms};
static const hrt_abstime SAMPLE_INTERVAL{10_ms};
perf_counter_t _cycle_perf;
perf_counter_t _comms_errors;
DEFINE_PARAMETERS(
(ParamFloat<px4::params::ADC_ADS7953_REFV>) _adc_ads7953_refv