Skip to content

Commit 8fed4e3

Browse files
committed
clear throttle, configure lsm6 sensor, read->get
1 parent f1e5405 commit 8fed4e3

File tree

12 files changed

+138
-131
lines changed

12 files changed

+138
-131
lines changed

FprimeZephyrReference/Components/Drv/Lis2mdlManager/Lis2mdlManager.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ namespace Drv {
1414
// ----------------------------------------------------------------------
1515

1616
Lis2mdlManager ::Lis2mdlManager(const char* const compName) : Lis2mdlManagerComponentBase(compName) {
17-
// Initialize the lis2mdl sensor
18-
lis2mdl = device_get_binding("LIS2MDL");
17+
dev = device_get_binding("LIS2MDL");
1918
}
2019

2120
Lis2mdlManager ::~Lis2mdlManager() {}
@@ -24,8 +23,8 @@ Lis2mdlManager ::~Lis2mdlManager() {}
2423
// Handler implementations for typed input ports
2524
// ----------------------------------------------------------------------
2625

27-
Drv::MagneticField Lis2mdlManager ::magneticFieldRead_handler(FwIndexType portNum) {
28-
if (!device_is_ready(lis2mdl)) {
26+
Drv::MagneticField Lis2mdlManager ::magneticFieldGet_handler(FwIndexType portNum) {
27+
if (!device_is_ready(dev)) {
2928
this->log_WARNING_HI_DeviceNotReady();
3029
return Drv::MagneticField(0.0, 0.0, 0.0);
3130
}
@@ -35,11 +34,11 @@ Drv::MagneticField Lis2mdlManager ::magneticFieldRead_handler(FwIndexType portNu
3534
struct sensor_value y;
3635
struct sensor_value z;
3736

38-
sensor_sample_fetch_chan(lis2mdl, SENSOR_CHAN_MAGN_XYZ);
37+
sensor_sample_fetch_chan(dev, SENSOR_CHAN_MAGN_XYZ);
3938

40-
sensor_channel_get(lis2mdl, SENSOR_CHAN_MAGN_X, &x);
41-
sensor_channel_get(lis2mdl, SENSOR_CHAN_MAGN_Y, &y);
42-
sensor_channel_get(lis2mdl, SENSOR_CHAN_MAGN_Z, &z);
39+
sensor_channel_get(dev, SENSOR_CHAN_MAGN_X, &x);
40+
sensor_channel_get(dev, SENSOR_CHAN_MAGN_Y, &y);
41+
sensor_channel_get(dev, SENSOR_CHAN_MAGN_Z, &z);
4342

4443
Drv::MagneticField magnetic_readings =
4544
Drv::MagneticField(Drv::sensor_value_to_f64(x), Drv::sensor_value_to_f64(y), Drv::sensor_value_to_f64(z));

FprimeZephyrReference/Components/Drv/Lis2mdlManager/Lis2mdlManager.fpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
# Port definition
22
module Drv {
3-
port MagneticFieldRead -> MagneticField
3+
port MagneticFieldGet -> MagneticField
44
}
55

66
# Component definition
77
module Drv {
88
@ LIS2MDL Manager Component for F Prime FSW framework.
99
passive component Lis2mdlManager {
1010
@ Port to read the current magnetic field in gauss.
11-
sync input port magneticFieldRead: MagneticFieldRead
11+
sync input port magneticFieldGet: MagneticFieldGet
1212

1313
@ Event for reporting LSM6DSO not ready error
1414
event DeviceNotReady() severity warning high format "LIS2MDL device not ready" throttle 5

FprimeZephyrReference/Components/Drv/Lis2mdlManager/Lis2mdlManager.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@ class Lis2mdlManager final : public Lis2mdlManagerComponentBase {
3636
// ----------------------------------------------------------------------
3737

3838
//! Get the magnetic field reading from the LIS2MDL sensor
39-
Drv::MagneticField magneticFieldRead_handler(const FwIndexType portNum //!< The port number
40-
) override;
39+
Drv::MagneticField magneticFieldGet_handler(const FwIndexType portNum //!< The port number
40+
) override;
4141

4242
// ----------------------------------------------------------------------
4343
// Member variables
4444
// ----------------------------------------------------------------------
4545

4646
//! Zephyr device stores the initialized LIS2MDL sensor
47-
const struct device* lis2mdl;
47+
const struct device* dev;
4848
};
4949

5050
} // namespace Drv

FprimeZephyrReference/Components/Drv/Lis2mdlManager/docs/sdd.md

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Components::Lis2mdlManager
1+
# Drv::Lis2mdlManager
22

33
The LIS2MDL Manager component interfaces with the LIS2MDL magnetometer to provide magnetic field measurements.
44

@@ -9,25 +9,26 @@ The LIS2MDL Manager component is designed to be called periodically to collect a
99
### Typical Usage
1010

1111
1. The component is instantiated and initialized during system startup
12-
2. A manager calls the `MagneticFieldRead` port
12+
2. A manager calls the `MagneticFieldGet` port
1313
3. On each call, the component:
1414
- Fetches fresh sensor samples from the sensor
1515
- Converts sensor data to F Prime data structures
16+
- Writes telemetry data
1617
- Returns data in SI units
1718

1819
## Class Diagram
1920

2021
```mermaid
2122
classDiagram
22-
namespace Components {
23+
namespace Drv {
2324
class Lis2mdlManagerComponentBase {
2425
<<Auto-generated>>
2526
}
2627
class Lis2mdlManager {
27-
- lis2mdl: device*
28-
+ Lis2mdlManager(char* compName)
28+
- lis2mdl: const struct device*
29+
+ Lis2mdlManager(const char* compName)
2930
+ ~Lis2mdlManager()
30-
- magneticFieldRead_handler(FwIndexType portNum): Drv::MagneticField
31+
- magneticFieldGet_handler(const FwIndexType portNum): Drv::MagneticField
3132
}
3233
}
3334
Lis2mdlManagerComponentBase <|-- Lis2mdlManager : inherits
@@ -36,7 +37,7 @@ classDiagram
3637
## Port Descriptions
3738
| Name | Type | Description |
3839
|---|---|---|
39-
| MagneticFieldRead | sync input | Triggers magnetic field data collection and returns a MagneticField struct |
40+
| MagneticFieldGet | sync input | Triggers magnetic field data collection and returns a MagneticField struct |
4041

4142
## Sequence Diagrams
4243

@@ -47,19 +48,20 @@ sequenceDiagram
4748
participant Zephyr Sensor API
4849
participant LIS2MDL Sensor
4950
50-
Manager-->>LIS2MDL Manager: Call MagneticFieldRead synchronous input port
51+
Manager-->>LIS2MDL Manager: Call MagneticFieldGet synchronous input port
5152
LIS2MDL Manager->>Zephyr Sensor API: Fetch sensor data
5253
Zephyr Sensor API->>LIS2MDL Sensor: Read sensor
5354
LIS2MDL Sensor->>Zephyr Sensor API: Return sensor data
5455
Zephyr Sensor API->>LIS2MDL Manager: Return x, y, z sensor_value structs
56+
LIS2MDL Manager->>LIS2MDL Manager: Write telemetry
5557
LIS2MDL Manager-->>Manager: Return MagneticField struct
5658
```
5759

5860
## Requirements
5961
Add requirements in the chart below
6062
| Name | Description | Validation |
6163
|---|---|---|
62-
| MagneticFieldRead Port | The component shall provide access magnetic field sensor data and return in MagneticField struct, readings will be in gauss | Verify output matches expected values from sensor datasheet |
64+
| MagneticFieldGet Port | The component shall provide access magnetic field sensor data and return in MagneticField struct, readings will be in gauss | Verify output matches expected values from sensor datasheet |
6365

6466
## Change Log
6567
| Date | Description |

FprimeZephyrReference/Components/Drv/Lsm6dsoManager/Lsm6dsoManager.cpp

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,18 @@ namespace Drv {
1414
// ----------------------------------------------------------------------
1515

1616
Lsm6dsoManager ::Lsm6dsoManager(const char* const compName) : Lsm6dsoManagerComponentBase(compName) {
17-
// Initialize the LSM6DSO sensor
18-
lsm6dso = DEVICE_DT_GET_ONE(st_lsm6dso);
17+
dev = DEVICE_DT_GET_ONE(st_lsm6dso);
1918

20-
// Configure the LSM6DSO sensor
19+
// Configure the sensor
2120
struct sensor_value odr = {.val1 = 12, .val2 = 500000}; // 12.5 Hz
21+
22+
if (sensor_attr_set(dev, SENSOR_CHAN_ACCEL_XYZ, SENSOR_ATTR_SAMPLING_FREQUENCY, &odr) != 0) {
23+
this->log_WARNING_HI_AccelerometerSamplingFrequencyNotConfigured();
24+
}
25+
26+
if (sensor_attr_set(dev, SENSOR_CHAN_GYRO_XYZ, SENSOR_ATTR_SAMPLING_FREQUENCY, &odr) != 0) {
27+
this->log_WARNING_HI_GyroscopeSamplingFrequencyNotConfigured();
28+
}
2229
}
2330

2431
Lsm6dsoManager ::~Lsm6dsoManager() {}
@@ -27,21 +34,22 @@ Lsm6dsoManager ::~Lsm6dsoManager() {}
2734
// Handler implementations for typed input ports
2835
// ----------------------------------------------------------------------
2936

30-
Drv::Acceleration Lsm6dsoManager ::accelerationRead_handler(FwIndexType portNum) {
31-
if (!device_is_ready(lsm6dso)) {
37+
Drv::Acceleration Lsm6dsoManager ::accelerationGet_handler(FwIndexType portNum) {
38+
if (!device_is_ready(dev)) {
3239
this->log_WARNING_HI_DeviceNotReady();
3340
return Drv::Acceleration(0.0, 0.0, 0.0);
3441
}
42+
this->log_WARNING_HI_DeviceNotReady_ThrottleClear();
3543

3644
struct sensor_value x;
3745
struct sensor_value y;
3846
struct sensor_value z;
3947

40-
sensor_sample_fetch_chan(lsm6dso, SENSOR_CHAN_ACCEL_XYZ);
48+
sensor_sample_fetch_chan(dev, SENSOR_CHAN_ACCEL_XYZ);
4149

42-
sensor_channel_get(lsm6dso, SENSOR_CHAN_ACCEL_X, &x);
43-
sensor_channel_get(lsm6dso, SENSOR_CHAN_ACCEL_Y, &y);
44-
sensor_channel_get(lsm6dso, SENSOR_CHAN_ACCEL_Z, &z);
50+
sensor_channel_get(dev, SENSOR_CHAN_ACCEL_X, &x);
51+
sensor_channel_get(dev, SENSOR_CHAN_ACCEL_Y, &y);
52+
sensor_channel_get(dev, SENSOR_CHAN_ACCEL_Z, &z);
4553

4654
Drv::Acceleration acceleration =
4755
Drv::Acceleration(Drv::sensor_value_to_f64(x), Drv::sensor_value_to_f64(y), Drv::sensor_value_to_f64(z));
@@ -50,21 +58,22 @@ Drv::Acceleration Lsm6dsoManager ::accelerationRead_handler(FwIndexType portNum)
5058
return acceleration;
5159
}
5260

53-
Drv::AngularVelocity Lsm6dsoManager ::angularVelocityRead_handler(FwIndexType portNum) {
54-
if (!device_is_ready(lsm6dso)) {
61+
Drv::AngularVelocity Lsm6dsoManager ::angularVelocityGet_handler(FwIndexType portNum) {
62+
if (!device_is_ready(dev)) {
5563
this->log_WARNING_HI_DeviceNotReady();
5664
return Drv::AngularVelocity(0.0, 0.0, 0.0);
5765
}
66+
this->log_WARNING_HI_DeviceNotReady_ThrottleClear();
5867

5968
struct sensor_value x;
6069
struct sensor_value y;
6170
struct sensor_value z;
6271

63-
sensor_sample_fetch_chan(lsm6dso, SENSOR_CHAN_GYRO_XYZ);
72+
sensor_sample_fetch_chan(dev, SENSOR_CHAN_GYRO_XYZ);
6473

65-
sensor_channel_get(lsm6dso, SENSOR_CHAN_GYRO_X, &x);
66-
sensor_channel_get(lsm6dso, SENSOR_CHAN_GYRO_Y, &y);
67-
sensor_channel_get(lsm6dso, SENSOR_CHAN_GYRO_Z, &z);
74+
sensor_channel_get(dev, SENSOR_CHAN_GYRO_X, &x);
75+
sensor_channel_get(dev, SENSOR_CHAN_GYRO_Y, &y);
76+
sensor_channel_get(dev, SENSOR_CHAN_GYRO_Z, &z);
6877

6978
Drv::AngularVelocity angular_velocity =
7079
Drv::AngularVelocity(Drv::sensor_value_to_f64(x), Drv::sensor_value_to_f64(y), Drv::sensor_value_to_f64(z));
@@ -73,17 +82,18 @@ Drv::AngularVelocity Lsm6dsoManager ::angularVelocityRead_handler(FwIndexType po
7382
return angular_velocity;
7483
}
7584

76-
F64 Lsm6dsoManager ::temperatureRead_handler(FwIndexType portNum) {
77-
if (!device_is_ready(lsm6dso)) {
85+
F64 Lsm6dsoManager ::temperatureGet_handler(FwIndexType portNum) {
86+
if (!device_is_ready(dev)) {
7887
this->log_WARNING_HI_DeviceNotReady();
7988
return 0;
8089
}
90+
this->log_WARNING_HI_DeviceNotReady_ThrottleClear();
8191

8292
struct sensor_value temp;
8393

84-
sensor_sample_fetch_chan(lsm6dso, SENSOR_CHAN_DIE_TEMP);
94+
sensor_sample_fetch_chan(dev, SENSOR_CHAN_DIE_TEMP);
8595

86-
sensor_channel_get(lsm6dso, SENSOR_CHAN_DIE_TEMP, &temp);
96+
sensor_channel_get(dev, SENSOR_CHAN_DIE_TEMP, &temp);
8797

8898
this->tlmWrite_Temperature(Drv::sensor_value_to_f64(temp));
8999

FprimeZephyrReference/Components/Drv/Lsm6dsoManager/Lsm6dsoManager.fpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# Port definition
22
module Drv {
3-
port AccelerationRead -> Acceleration
4-
port AngularVelocityRead -> AngularVelocity
5-
port TemperatureRead -> F64
3+
port AccelerationGet -> Acceleration
4+
port AngularVelocityGet -> AngularVelocity
5+
port TemperatureGet -> F64
66
}
77

88
# Component definition
@@ -11,13 +11,13 @@ module Drv {
1111
passive component Lsm6dsoManager {
1212
# Ports
1313
@ Port to read the current acceleration in m/s^2.
14-
sync input port accelerationRead: AccelerationRead
14+
sync input port accelerationGet: AccelerationGet
1515

1616
@ Port to read the current angular velocity in rad/s.
17-
sync input port angularVelocityRead: AngularVelocityRead
17+
sync input port angularVelocityGet: AngularVelocityGet
1818

1919
@ Port to read the current temperature in degrees celsius.
20-
sync input port temperatureRead: TemperatureRead
20+
sync input port temperatureGet: TemperatureGet
2121

2222
# Telemetry channels
2323
@ Telemetry channel for current acceleration in m/s^2.
@@ -32,6 +32,12 @@ module Drv {
3232
@ Event for reporting LSM6DSO not ready error
3333
event DeviceNotReady() severity warning high format "LSM6DSO device not ready" throttle 5
3434

35+
@ Event for reporting LSM6DSO accelerometer sampling frequency not configured error
36+
event AccelerometerSamplingFrequencyNotConfigured() severity warning high format "LSM6DSO accelerometer sampling frequency not configured"
37+
38+
@ Event for reporting LSM6DSO gyroscope sampling frequency not configured error
39+
event GyroscopeSamplingFrequencyNotConfigured() severity warning high format "LSM6DSO gyroscope sampling frequency not configured"
40+
3541
###############################################################################
3642
# Standard AC Ports: Required for Channels, Events, Commands, and Parameters #
3743
###############################################################################

FprimeZephyrReference/Components/Drv/Lsm6dsoManager/Lsm6dsoManager.hpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,23 +36,23 @@ class Lsm6dsoManager final : public Lsm6dsoManagerComponentBase {
3636
// ----------------------------------------------------------------------
3737

3838
//! Get the acceleration reading from the LSM6DSO sensor
39-
Drv::Acceleration accelerationRead_handler(const FwIndexType portNum //!< The port number
40-
) override;
39+
Drv::Acceleration accelerationGet_handler(const FwIndexType portNum //!< The port number
40+
) override;
4141

4242
//! Get the angular velocity reading from the LSM6DSO sensor
43-
Drv::AngularVelocity angularVelocityRead_handler(const FwIndexType portNum //!< The port number
44-
) override;
43+
Drv::AngularVelocity angularVelocityGet_handler(const FwIndexType portNum //!< The port number
44+
) override;
4545

4646
//! Get the temperature reading from the LSM6DSO sensor
47-
F64 temperatureRead_handler(const FwIndexType portNum //!< The port number
48-
) override;
47+
F64 temperatureGet_handler(const FwIndexType portNum //!< The port number
48+
) override;
4949

5050
// ----------------------------------------------------------------------
5151
// Member variables
5252
// ----------------------------------------------------------------------
5353

5454
//! Zephyr device stores the initialized LSM6DSO sensor
55-
const struct device* lsm6dso;
55+
const struct device* dev;
5656
};
5757

5858
} // namespace Drv

0 commit comments

Comments
 (0)