cyphal: switch to battery_info.serial_number

This commit is contained in:
Matthias Grob
2025-06-03 17:20:16 +02:00
committed by Silvan Fuhrer
parent a18453d632
commit 84ce7d2fc6
2 changed files with 16 additions and 2 deletions
@@ -94,7 +94,6 @@ public:
bat_status.connected = bat_info.status_flags & legacy_equipment_power_BatteryInfo_1_0_STATUS_FLAG_IN_USE;
bat_status.source = 1; // External
bat_status.capacity = bat_info.full_charge_capacity_wh;
bat_status.serial_number = bat_info.model_instance_id & 0xFFFF; // Take first 16 bits
bat_status.state_of_health = bat_info.state_of_health_pct; // External
bat_status.id = bat_info.battery_id;
@@ -118,9 +117,17 @@ public:
_battery_status_pub.publish(bat_status);
print_message(ORB_ID(battery_status), bat_status);
battery_info_s battery_info{};
battery_info.timestamp = bat_status.timestamp;
battery_info.id = bat_status.id;
snprintf(battery_info.serial_number, sizeof(battery_info.serial_number), "%" PRIu32,
bat_info.model_instance_id);
_battery_info_pub.publish(battery_info);
};
private:
uORB::PublicationMulti<battery_info_s> _battery_info_pub{ORB_ID(battery_info)};
uORB::PublicationMulti<battery_status_s> _battery_status_pub{ORB_ID(battery_status)};
};
@@ -41,6 +41,7 @@
#pragma once
#include <uORB/topics/battery_info.h>
#include <uORB/topics/battery_status.h>
#include <uORB/PublicationMulti.hpp>
@@ -120,6 +121,10 @@ public:
// TODO uORB publication rate limiting
_battery_status_pub.publish(bat_status);
_battery_info.timestamp = bat_status.timestamp;
_battery_info.id = bat_status.id;
_battery_info_pub.publish(_battery_info);
} else if (receive.metadata.port_id == _status_sub._canard_sub.port_id) {
reg_udral_service_battery_Status_0_2 bat {};
size_t bat_size_in_bytes = receive.payload_size;
@@ -163,7 +168,7 @@ public:
bat_status.capacity = parameters.design_capacity.coulomb / 3.6f; // Coulomb -> mAh
bat_status.cycle_count = parameters.cycle_count;
bat_status.serial_number = parameters.unique_id & 0xFFFF;
snprintf(_battery_info.serial_number, sizeof(_battery_info.serial_number), "%" PRIu64, parameters.unique_id);
bat_status.state_of_health = parameters.state_of_health_pct;
bat_status.max_error = 1; // UAVCAN didn't spec'ed this, but we're optimistic
bat_status.id = 0; //TODO instancing
@@ -174,6 +179,7 @@ public:
private:
float _nominal_voltage = NAN;
uORB::PublicationMulti<battery_info_s> _battery_info_pub{ORB_ID(battery_info)};
uORB::PublicationMulti<battery_status_s> _battery_status_pub{ORB_ID(battery_status)};
SubjectSubscription _status_sub;
@@ -182,5 +188,6 @@ private:
const char *_status_name = "battery_status";
const char *_parameters_name = "battery_parameters";
battery_info_s _battery_info{};
battery_status_s bat_status {0};
};