Skip to content

Commit d064a09

Browse files
committed
Spit out common helpers and types from drivers, standardize port name schema, update SDDs
1 parent 8478ca1 commit d064a09

33 files changed

+665
-473
lines changed
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# Include project-wide components here
22

3+
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Drv/")
34
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/FatalHandler")
5+
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/ImuManager/")
46
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Watchdog")
5-
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Imu/")
6-
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/lms6dsoDriver/")
7-
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Lis2mdlDriver/")
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Include project-wide components here
2+
3+
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Helpers/")
4+
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Lis2mdlDriver/")
5+
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Lsm6dsoDriver/")
6+
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Types/")

FprimeZephyrReference/Components/Imu/CMakeLists.txt renamed to FprimeZephyrReference/Components/Drv/Helpers/CMakeLists.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,20 @@
1616

1717
register_fprime_library(
1818
AUTOCODER_INPUTS
19-
"${CMAKE_CURRENT_LIST_DIR}/Imu.fpp"
19+
"${CMAKE_CURRENT_LIST_DIR}/Helpers.fpp"
2020
SOURCES
21-
"${CMAKE_CURRENT_LIST_DIR}/Imu.cpp"
21+
"${CMAKE_CURRENT_LIST_DIR}/Helpers.cpp"
2222
# DEPENDS
2323
# MyPackage_MyOtherModule
2424
)
2525

2626
### Unit Tests ###
2727
# register_fprime_ut(
2828
# AUTOCODER_INPUTS
29-
# "${CMAKE_CURRENT_LIST_DIR}/Imu.fpp"
29+
# "${CMAKE_CURRENT_LIST_DIR}/Helpers.fpp"
3030
# SOURCES
31-
# "${CMAKE_CURRENT_LIST_DIR}/test/ut/ImuTestMain.cpp"
32-
# "${CMAKE_CURRENT_LIST_DIR}/test/ut/ImuTester.cpp"
31+
# "${CMAKE_CURRENT_LIST_DIR}/test/ut/HelpersTestMain.cpp"
32+
# "${CMAKE_CURRENT_LIST_DIR}/test/ut/HelpersTester.cpp"
3333
# DEPENDS
3434
# STest # For rules-based testing
3535
# UT_AUTO_HELPERS
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// ======================================================================
2+
// \title Helpers.cpp
3+
// \brief cpp file for Helpers component implementation class
4+
// ======================================================================
5+
6+
#include "FprimeZephyrReference/Components/Drv/Helpers/Helpers.hpp"
7+
8+
#include <Fw/Types/Assert.hpp>
9+
10+
namespace Drv {
11+
12+
F64 sensor_value_to_f64(const struct sensor_value& val) {
13+
return val.val1 + val.val2 / 1000000.0f;
14+
}
15+
16+
} // namespace Drv

FprimeZephyrReference/Components/Drv/Helpers/Helpers.fpp

Whitespace-only changes.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// ======================================================================
2+
// \title Helpers.hpp
3+
// \brief hpp file for Helpers component implementation class
4+
// ======================================================================
5+
6+
#ifndef Components_Helpers_HPP
7+
#define Components_Helpers_HPP
8+
9+
#include <Fw/Types/BasicTypes.h>
10+
#include <zephyr/drivers/sensor.h>
11+
12+
namespace Drv {
13+
14+
//! Convert a Zephyr sensor_value to an Fprime F64
15+
F64 sensor_value_to_f64(const struct sensor_value& val);
16+
17+
} // namespace Drv
18+
19+
#endif

FprimeZephyrReference/Components/Lis2mdlDriver/CMakeLists.txt renamed to FprimeZephyrReference/Components/Drv/Lis2mdlDriver/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ register_fprime_library(
1919
"${CMAKE_CURRENT_LIST_DIR}/Lis2mdlDriver.fpp"
2020
SOURCES
2121
"${CMAKE_CURRENT_LIST_DIR}/Lis2mdlDriver.cpp"
22-
# DEPENDS
23-
# MyPackage_MyOtherModule
22+
DEPENDS
23+
FprimeZephyrReference_Components_Drv_Helpers
2424
)
2525

2626
### Unit Tests ###
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,47 @@
11
// ======================================================================
22
// \title Lis2mdlDriver.cpp
3-
// \author aychar
43
// \brief cpp file for Lis2mdlDriver component implementation class
54
// ======================================================================
65

7-
#include "FprimeZephyrReference/Components/Lis2mdlDriver/Lis2mdlDriver.hpp"
6+
#include "FprimeZephyrReference/Components/Drv/Lis2mdlDriver/Lis2mdlDriver.hpp"
87

98
#include <Fw/Types/Assert.hpp>
109

11-
namespace Components {
10+
namespace Drv {
1211

1312
// ----------------------------------------------------------------------
1413
// Component construction and destruction
1514
// ----------------------------------------------------------------------
1615

1716
Lis2mdlDriver ::Lis2mdlDriver(const char* const compName) : Lis2mdlDriverComponentBase(compName) {
17+
// Initialize the lis2mdl sensor
1818
lis2mdl = device_get_binding("LIS2MDL");
1919
FW_ASSERT(device_is_ready(lis2mdl));
2020
}
2121

2222
Lis2mdlDriver ::~Lis2mdlDriver() {}
2323

24-
F64 Lis2mdlDriver ::sensor_value_to_f64(const struct sensor_value& val) {
25-
return val.val1 + val.val2 / 1000000.0f;
26-
}
24+
// ----------------------------------------------------------------------
25+
// Handler implementations for typed input ports
26+
// ----------------------------------------------------------------------
2727

28-
Components::MagneticField Lis2mdlDriver ::getMagneticField_handler(FwIndexType portNum) {
29-
// Fetch new data sample from sensors
30-
sensor_sample_fetch_chan(lis2mdl, SENSOR_CHAN_MAGN_XYZ);
28+
Drv::MagneticField Lis2mdlDriver ::magneticFieldRead_handler(FwIndexType portNum) {
29+
if (!device_is_ready(lis2mdl)) {
30+
this->log_WARNING_HI_DeviceNotReady();
31+
return Drv::MagneticField(0.0, 0.0, 0.0);
32+
}
3133

3234
struct sensor_value x;
3335
struct sensor_value y;
3436
struct sensor_value z;
3537

38+
sensor_sample_fetch_chan(lis2mdl, SENSOR_CHAN_MAGN_XYZ);
39+
3640
sensor_channel_get(lis2mdl, SENSOR_CHAN_MAGN_X, &x);
3741
sensor_channel_get(lis2mdl, SENSOR_CHAN_MAGN_Y, &y);
3842
sensor_channel_get(lis2mdl, SENSOR_CHAN_MAGN_Z, &z);
3943

40-
return Components::MagneticField(this->sensor_value_to_f64(x), this->sensor_value_to_f64(y),
41-
this->sensor_value_to_f64(z));
44+
return Drv::MagneticField(Drv::sensor_value_to_f64(x), Drv::sensor_value_to_f64(y), Drv::sensor_value_to_f64(z));
4245
}
4346

44-
} // namespace Components
47+
} // namespace Drv
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Port definition
2+
module Drv {
3+
port MagneticFieldRead -> MagneticField
4+
}
5+
6+
# Component definition
7+
module Drv {
8+
@ LIS2MDL Driver Component for F Prime FSW framework.
9+
passive component Lis2mdlDriver {
10+
@ Port to read the current magnetic field in gauss.
11+
sync input port magneticFieldRead: MagneticFieldRead
12+
13+
@ Event for reporting LSM6DSO not ready error
14+
event DeviceNotReady() severity warning high format "LIS2MDL device not ready" throttle 5
15+
16+
###############################################################################
17+
# Standard AC Ports: Required for Channels, Events, Commands, and Parameters #
18+
###############################################################################
19+
@ Port for requesting the current time
20+
time get port timeCaller
21+
22+
@ Port for sending textual representation of events
23+
text event port logTextOut
24+
25+
@ Port for sending events to downlink
26+
event port logOut
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
11
// ======================================================================
22
// \title Lis2mdlDriver.hpp
3-
// \author aychar
43
// \brief hpp file for Lis2mdlDriver component implementation class
54
// ======================================================================
65

76
#ifndef Components_Lis2mdlDriver_HPP
87
#define Components_Lis2mdlDriver_HPP
98

10-
#include "FprimeZephyrReference/Components/Lis2mdlDriver/Lis2mdlDriverComponentAc.hpp"
9+
// clang-format off
10+
// Keep the includes in this order
11+
#include "FprimeZephyrReference/Components/Drv/Lis2mdlDriver/Lis2mdlDriverComponentAc.hpp"
12+
#include "FprimeZephyrReference/Components/Drv/Helpers/Helpers.hpp"
13+
// clang-format on
1114

1215
#include <zephyr/device.h>
1316
#include <zephyr/drivers/sensor.h>
1417
#include <zephyr/kernel.h>
1518

16-
namespace Components {
19+
namespace Drv {
1720

1821
class Lis2mdlDriver final : public Lis2mdlDriverComponentBase {
1922
public:
@@ -22,22 +25,19 @@ class Lis2mdlDriver final : public Lis2mdlDriverComponentBase {
2225
// ----------------------------------------------------------------------
2326

2427
//! Construct Lis2mdlDriver object
25-
Lis2mdlDriver(const char* const compName //!< The component name
26-
);
28+
Lis2mdlDriver(const char* const compName);
2729

2830
//! Destroy Lis2mdlDriver object
2931
~Lis2mdlDriver();
3032

3133
private:
32-
//! Handler implementation
33-
MagneticField getMagneticField_handler(FwIndexType portNum) override;
34-
3534
// ----------------------------------------------------------------------
36-
// Helper methods
35+
// Handler implementations for typed input ports
3736
// ----------------------------------------------------------------------
3837

39-
//! Convert a Zephyr sensor_value to an Fprime F64
40-
F64 sensor_value_to_f64(const struct sensor_value& val);
38+
//! Get the magnetic field reading from the LIS2MDL sensor
39+
Drv::MagneticField magneticFieldRead_handler(const FwIndexType portNum //!< The port number
40+
) override;
4141

4242
// ----------------------------------------------------------------------
4343
// Member variables
@@ -47,6 +47,6 @@ class Lis2mdlDriver final : public Lis2mdlDriverComponentBase {
4747
const struct device* lis2mdl;
4848
};
4949

50-
} // namespace Components
50+
} // namespace Drv
5151

5252
#endif

0 commit comments

Comments
 (0)