mirror of
https://github.com/apache/nuttx.git
synced 2026-10-02 19:58:01 +00:00
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:
parent
964c68b109
commit
1757b28b1f
1 changed files with 18 additions and 15 deletions
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue