drivers/sensors: Use sensor_data_t for the electrical quantities.

The voltage, current, power, resistance and conductivity messages
declare their measurement as float, where every other message in
uorb.h declares it as sensor_data_t.  That type is b16_t under
CONFIG_SENSORS_USE_B16 and float otherwise, so on a fixed point
configuration these five are the only sensors still producing floats.

A driver that computes in sensor_data_t, as the helpers in fixedmath.h
encourage, then assigns a b16_t to a float field: the raw fixed point
integer is stored as a float and the reading is wrong by 65536 with no
diagnostic.

The accumulators keep int64_t.  Energy in uJ and charge in uC are
counts of micro units rather than measurements, and neither is
affected by the fixed point option.

Assisted-by: Claude:claude-opus-5
Signed-off-by: Justin Hammond <justin@dynam.ac>
This commit is contained in:
Justin Hammond 2026-09-20 16:01:54 +08:00 • committed by Matteo Golin
parent 964c68b109
commit 1757b28b1f

View file

@ -1091,34 +1091,37 @@ struct sensor_eng /* Type: ENG */
uint32_t stat; /* Status. bit3:0 - value 3:0 is valid or not */
};
struct sensor_voltage /* Type: Voltage */
struct sensor_voltage /* Type: Voltage */
{
uint64_t timestamp; /* Unit is microseconds */
float voltage; /* in SI units V */
uint64_t timestamp; /* Unit is microseconds */
sensor_data_t voltage; /* in SI units V */
};
struct sensor_current /* Type: Current */
struct sensor_current /* Type: Current */
{
uint64_t timestamp; /* Unit is microseconds */
float current; /* in SI units A, signed */
uint64_t timestamp; /* Unit is microseconds */
sensor_data_t current; /* in SI units A, signed */
};
struct sensor_power /* Type: Power */
struct sensor_power /* Type: Power */
{
uint64_t timestamp; /* Unit is microseconds */
float power; /* Instantaneous active power in SI units W */
uint64_t timestamp; /* Unit is microseconds */
sensor_data_t power; /* Instantaneous active power, SI units W */
};
struct sensor_resistance /* Type: Resistance */
struct sensor_resistance /* Type: Resistance */
{
uint64_t timestamp; /* Unit is microseconds */
float resistance; /* in SI units Ohm(Ω) */
uint64_t timestamp; /* Unit is microseconds */
sensor_data_t resistance; /* in SI units Ohm(Ω) */
};
struct sensor_conductivity /* Type: Electrical conductivity */
struct sensor_conductivity /* Type: Electrical conductivity */
{
uint64_t timestamp; /* Unit is microseconds */
float conductivity; /* in SI units S/m, 1 S/m = 1e4 uS/cm */
uint64_t timestamp; /* Unit is microseconds */
/* In SI units S/m, where 1 S/m is 1e4 uS/cm */
sensor_data_t conductivity;
};
struct sensor_energy /* Type: Energy */