Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion FprimeZephyrReference/Components/Drv/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Helpers/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Ina219Manager/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Lis2mdlManager/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Lsm6dsoManager/")
Expand Down
34 changes: 0 additions & 34 deletions FprimeZephyrReference/Components/Drv/Helpers/CMakeLists.txt

This file was deleted.

16 changes: 0 additions & 16 deletions FprimeZephyrReference/Components/Drv/Helpers/Helpers.cpp

This file was deleted.

19 changes: 0 additions & 19 deletions FprimeZephyrReference/Components/Drv/Helpers/Helpers.hpp

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ register_fprime_library(
"${CMAKE_CURRENT_LIST_DIR}/Lis2mdlManager.fpp"
SOURCES
"${CMAKE_CURRENT_LIST_DIR}/Lis2mdlManager.cpp"
DEPENDS
FprimeZephyrReference_Components_Drv_Helpers
# DEPENDS
# FprimeZephyrReference_Components_Drv_Helpers
Comment on lines +22 to +23
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# DEPENDS
# FprimeZephyrReference_Components_Drv_Helpers

Should we just remove this if the Helpers are gone?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You've got a point. I guess I left this line because for every generated component it is commented out. It doesn't say FprimeZephyrReference_Components_Drv_Helpers but instead MyPackage_MyOtherModule: https://github.com/Open-Source-Space-Foundation/proves-core-reference/blob/main/FprimeZephyrReference/Components/Burnwire/CMakeLists.txt#L22-L23

I think it's OK to leave this for now but maybe we should go remove them from all packages if we end up doing a cleanup some day...

)

### Unit Tests ###
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,24 @@ namespace Drv {
// Component construction and destruction
// ----------------------------------------------------------------------

Lis2mdlManager ::Lis2mdlManager(const char* const compName) : Lis2mdlManagerComponentBase(compName) {
dev = device_get_binding("LIS2MDL");
}
Lis2mdlManager ::Lis2mdlManager(const char* const compName) : Lis2mdlManagerComponentBase(compName) {}

Lis2mdlManager ::~Lis2mdlManager() {}

// ----------------------------------------------------------------------
// Helper methods
// ----------------------------------------------------------------------

void Lis2mdlManager ::configure(const struct device* dev) {
this->m_dev = dev;
}

// ----------------------------------------------------------------------
// Handler implementations for typed input ports
// ----------------------------------------------------------------------

Drv::MagneticField Lis2mdlManager ::magneticFieldGet_handler(FwIndexType portNum) {
if (!device_is_ready(dev)) {
if (!device_is_ready(this->m_dev)) {
this->log_WARNING_HI_DeviceNotReady();
return Drv::MagneticField(0.0, 0.0, 0.0);
}
Expand All @@ -34,14 +40,14 @@ Drv::MagneticField Lis2mdlManager ::magneticFieldGet_handler(FwIndexType portNum
struct sensor_value y;
struct sensor_value z;

sensor_sample_fetch_chan(dev, SENSOR_CHAN_MAGN_XYZ);
sensor_sample_fetch_chan(this->m_dev, SENSOR_CHAN_MAGN_XYZ);

sensor_channel_get(dev, SENSOR_CHAN_MAGN_X, &x);
sensor_channel_get(dev, SENSOR_CHAN_MAGN_Y, &y);
sensor_channel_get(dev, SENSOR_CHAN_MAGN_Z, &z);
sensor_channel_get(this->m_dev, SENSOR_CHAN_MAGN_X, &x);
sensor_channel_get(this->m_dev, SENSOR_CHAN_MAGN_Y, &y);
sensor_channel_get(this->m_dev, SENSOR_CHAN_MAGN_Z, &z);

Drv::MagneticField magnetic_readings =
Drv::MagneticField(Drv::sensor_value_to_f64(x), Drv::sensor_value_to_f64(y), Drv::sensor_value_to_f64(z));
Drv::MagneticField(sensor_value_to_double(&x), sensor_value_to_double(&y), sensor_value_to_double(&z));

this->tlmWrite_MagneticField(magnetic_readings);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@
#ifndef Components_Lis2mdlManager_HPP
#define Components_Lis2mdlManager_HPP

// clang-format off
// Keep the includes in this order
#include "FprimeZephyrReference/Components/Drv/Lis2mdlManager/Lis2mdlManagerComponentAc.hpp"
#include "FprimeZephyrReference/Components/Drv/Helpers/Helpers.hpp"
// clang-format on

#include <zephyr/device.h>
#include <zephyr/drivers/sensor.h>
Expand All @@ -30,6 +26,14 @@ class Lis2mdlManager final : public Lis2mdlManagerComponentBase {
//! Destroy Lis2mdlManager object
~Lis2mdlManager();

public:
// ----------------------------------------------------------------------
// Helper methods
// ----------------------------------------------------------------------

//! Configure the LIS2MDL device
void configure(const struct device* dev);

private:
// ----------------------------------------------------------------------
// Handler implementations for typed input ports
Expand All @@ -44,7 +48,7 @@ class Lis2mdlManager final : public Lis2mdlManagerComponentBase {
// ----------------------------------------------------------------------

//! Zephyr device stores the initialized LIS2MDL sensor
const struct device* dev;
const struct device* m_dev;
};

} // namespace Drv
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ register_fprime_library(
"${CMAKE_CURRENT_LIST_DIR}/Lsm6dsoManager.fpp"
SOURCES
"${CMAKE_CURRENT_LIST_DIR}/Lsm6dsoManager.cpp"
DEPENDS
FprimeZephyrReference_Components_Drv_Helpers
# DEPENDS
# FprimeZephyrReference_Components_Drv_Helpers
)

### Unit Tests ###
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,29 +13,35 @@ namespace Drv {
// Component construction and destruction
// ----------------------------------------------------------------------

Lsm6dsoManager ::Lsm6dsoManager(const char* const compName) : Lsm6dsoManagerComponentBase(compName) {
dev = DEVICE_DT_GET_ONE(st_lsm6dso);
Lsm6dsoManager ::Lsm6dsoManager(const char* const compName) : Lsm6dsoManagerComponentBase(compName) {}

Lsm6dsoManager ::~Lsm6dsoManager() {}

// ----------------------------------------------------------------------
// Helper methods
// ----------------------------------------------------------------------

void Lsm6dsoManager ::configure(const struct device* dev) {
this->m_dev = dev;

// Configure the sensor
struct sensor_value odr = {.val1 = 12, .val2 = 500000}; // 12.5 Hz

if (sensor_attr_set(dev, SENSOR_CHAN_ACCEL_XYZ, SENSOR_ATTR_SAMPLING_FREQUENCY, &odr) != 0) {
if (sensor_attr_set(this->m_dev, SENSOR_CHAN_ACCEL_XYZ, SENSOR_ATTR_SAMPLING_FREQUENCY, &odr) != 0) {
this->log_WARNING_HI_AccelerometerSamplingFrequencyNotConfigured();
}

if (sensor_attr_set(dev, SENSOR_CHAN_GYRO_XYZ, SENSOR_ATTR_SAMPLING_FREQUENCY, &odr) != 0) {
if (sensor_attr_set(this->m_dev, SENSOR_CHAN_GYRO_XYZ, SENSOR_ATTR_SAMPLING_FREQUENCY, &odr) != 0) {
this->log_WARNING_HI_GyroscopeSamplingFrequencyNotConfigured();
}
}

Lsm6dsoManager ::~Lsm6dsoManager() {}

// ----------------------------------------------------------------------
// Handler implementations for typed input ports
// ----------------------------------------------------------------------

Drv::Acceleration Lsm6dsoManager ::accelerationGet_handler(FwIndexType portNum) {
if (!device_is_ready(dev)) {
if (!device_is_ready(this->m_dev)) {
this->log_WARNING_HI_DeviceNotReady();
return Drv::Acceleration(0.0, 0.0, 0.0);
}
Expand All @@ -45,21 +51,21 @@ Drv::Acceleration Lsm6dsoManager ::accelerationGet_handler(FwIndexType portNum)
struct sensor_value y;
struct sensor_value z;

sensor_sample_fetch_chan(dev, SENSOR_CHAN_ACCEL_XYZ);
sensor_sample_fetch_chan(this->m_dev, SENSOR_CHAN_ACCEL_XYZ);

sensor_channel_get(dev, SENSOR_CHAN_ACCEL_X, &x);
sensor_channel_get(dev, SENSOR_CHAN_ACCEL_Y, &y);
sensor_channel_get(dev, SENSOR_CHAN_ACCEL_Z, &z);
sensor_channel_get(this->m_dev, SENSOR_CHAN_ACCEL_X, &x);
sensor_channel_get(this->m_dev, SENSOR_CHAN_ACCEL_Y, &y);
sensor_channel_get(this->m_dev, SENSOR_CHAN_ACCEL_Z, &z);

Drv::Acceleration acceleration =
Drv::Acceleration(Drv::sensor_value_to_f64(x), Drv::sensor_value_to_f64(y), Drv::sensor_value_to_f64(z));
Drv::Acceleration(sensor_value_to_double(&x), sensor_value_to_double(&y), sensor_value_to_double(&z));

this->tlmWrite_Acceleration(acceleration);
return acceleration;
}

Drv::AngularVelocity Lsm6dsoManager ::angularVelocityGet_handler(FwIndexType portNum) {
if (!device_is_ready(dev)) {
if (!device_is_ready(this->m_dev)) {
this->log_WARNING_HI_DeviceNotReady();
return Drv::AngularVelocity(0.0, 0.0, 0.0);
}
Expand All @@ -69,35 +75,35 @@ Drv::AngularVelocity Lsm6dsoManager ::angularVelocityGet_handler(FwIndexType por
struct sensor_value y;
struct sensor_value z;

sensor_sample_fetch_chan(dev, SENSOR_CHAN_GYRO_XYZ);
sensor_sample_fetch_chan(this->m_dev, SENSOR_CHAN_GYRO_XYZ);

sensor_channel_get(dev, SENSOR_CHAN_GYRO_X, &x);
sensor_channel_get(dev, SENSOR_CHAN_GYRO_Y, &y);
sensor_channel_get(dev, SENSOR_CHAN_GYRO_Z, &z);
sensor_channel_get(this->m_dev, SENSOR_CHAN_GYRO_X, &x);
sensor_channel_get(this->m_dev, SENSOR_CHAN_GYRO_Y, &y);
sensor_channel_get(this->m_dev, SENSOR_CHAN_GYRO_Z, &z);

Drv::AngularVelocity angular_velocity =
Drv::AngularVelocity(Drv::sensor_value_to_f64(x), Drv::sensor_value_to_f64(y), Drv::sensor_value_to_f64(z));
Drv::AngularVelocity(sensor_value_to_double(&x), sensor_value_to_double(&y), sensor_value_to_double(&z));

this->tlmWrite_AngularVelocity(angular_velocity);
return angular_velocity;
}

F64 Lsm6dsoManager ::temperatureGet_handler(FwIndexType portNum) {
if (!device_is_ready(dev)) {
if (!device_is_ready(this->m_dev)) {
this->log_WARNING_HI_DeviceNotReady();
return 0;
}
this->log_WARNING_HI_DeviceNotReady_ThrottleClear();

struct sensor_value temp;

sensor_sample_fetch_chan(dev, SENSOR_CHAN_DIE_TEMP);
sensor_sample_fetch_chan(this->m_dev, SENSOR_CHAN_DIE_TEMP);

sensor_channel_get(dev, SENSOR_CHAN_DIE_TEMP, &temp);
sensor_channel_get(this->m_dev, SENSOR_CHAN_DIE_TEMP, &temp);

this->tlmWrite_Temperature(Drv::sensor_value_to_f64(temp));
this->tlmWrite_Temperature(sensor_value_to_double(&temp));

return Drv::sensor_value_to_f64(temp);
return sensor_value_to_double(&temp);
}

} // namespace Drv
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@
#ifndef Components_Lsm6dsoManager_HPP
#define Components_Lsm6dsoManager_HPP

// clang-format off
// Keep the includes in this order
#include "FprimeZephyrReference/Components/Drv/Lsm6dsoManager/Lsm6dsoManagerComponentAc.hpp"
#include "FprimeZephyrReference/Components/Drv/Helpers/Helpers.hpp"
// clang-format on

#include <zephyr/device.h>
#include <zephyr/drivers/sensor.h>
Expand All @@ -30,6 +26,14 @@ class Lsm6dsoManager final : public Lsm6dsoManagerComponentBase {
//! Destroy Lsm6dsoManager object
~Lsm6dsoManager();

public:
// ----------------------------------------------------------------------
// Helper methods
// ----------------------------------------------------------------------

//! Configure the LSM6DSO device
void configure(const struct device* dev);

private:
// ----------------------------------------------------------------------
// Handler implementations for typed input ports
Expand All @@ -52,7 +56,7 @@ class Lsm6dsoManager final : public Lsm6dsoManagerComponentBase {
// ----------------------------------------------------------------------

//! Zephyr device stores the initialized LSM6DSO sensor
const struct device* dev;
const struct device* m_dev;
};

} // namespace Drv
Expand Down
4 changes: 4 additions & 0 deletions FprimeZephyrReference/ReferenceDeployment/Main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ const struct device* ina219Sys = device_get_binding("INA219 sys");
const struct device* ina219Sol = device_get_binding("INA219 sol");
const struct device* serial = DEVICE_DT_GET(DT_NODELABEL(cdc_acm_uart0));
const struct device* lora = DEVICE_DT_GET(DT_NODELABEL(lora0));
const struct device* lsm6dso = DEVICE_DT_GET(DT_NODELABEL(lsm6dso0));
const struct device* lis2mdl = DEVICE_DT_GET(DT_NODELABEL(lis2mdl0));

int main(int argc, char* argv[]) {
// ** DO NOT REMOVE **//
Expand All @@ -28,6 +30,8 @@ int main(int argc, char* argv[]) {
inputs.ina219SolDevice = ina219Sol;
inputs.loraDevice = lora;
inputs.uartDevice = serial;
inputs.lsm6dsoDevice = lsm6dso;
inputs.lis2mdlDevice = lis2mdl;
inputs.baudRate = 115200;

// Setup, cycle, and teardown topology
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,9 @@ void setupTopology(const TopologyState& state) {
// for over-the-air communications.
lora.start(state.loraDevice, Zephyr::TransmitState::DISABLED);
comDriver.configure(state.uartDevice, state.baudRate);

lsm6dsoManager.configure(state.lsm6dsoDevice);
lis2mdlManager.configure(state.lis2mdlDevice);
ina219SysManager.configure(state.ina219SysDevice);
ina219SolManager.configure(state.ina219SolDevice);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ struct TopologyState {
const device* ina219SolDevice; //!< device path for solar panel ina219
const device* uartDevice; //!< UART device path for communication
const device* loraDevice; //!< LoRa device path for communication
const device* lsm6dsoDevice; //!< LSM6DSO device path for accelerometer/gyroscope
const device* lis2mdlDevice; //!< LIS2MDL device path for magnetometer
U32 baudRate; //!< Baud rate for UART communication
CdhCore::SubtopologyState cdhCore; //!< Subtopology state for CdhCore
ComCcsds::SubtopologyState comCcsds; //!< Subtopology state for ComCcsds
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ zephyr_udc0: &usbd {
label = "LSM6DSO";
};

lis2mdl: lis2mdl@1e {
lis2mdl0: lis2mdl0@1e {
compatible = "st,lis2mdl";
reg = <0x1e>;
label = "LIS2MDL";
Expand Down