Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revisiting the possibility of including generic sensor traits #614

Open
kurtjd opened this issue Jul 8, 2024 · 1 comment
Open

Revisiting the possibility of including generic sensor traits #614

kurtjd opened this issue Jul 8, 2024 · 1 comment

Comments

@kurtjd
Copy link

kurtjd commented Jul 8, 2024

Hi everyone, a while back a discussion was started about the inclusion of traits for interfacing with sensors (#32) but unfortunately it did not gain much traction. I was hoping to revisit this as I currently have a use-case requiring generic sensor interfacing and would like to get a feel from the community as to whether these traits would fit the goals of embedded-hal or if they are best left to a separate, standalone crate.

Regardless, I feel feedback and input from the community regarding the design of such traits would be highly valuable so I would like to open discussion toward that as well (with some topics worth considering below).

Scope

As sensors can vary widely in their functionality and supported features, some thought needs to be put into what functionality should actually be captured by generic traits.

At its simplest, we could have traits which only provide methods for reading data from the sensor. E.g. a TemperatureSensor trait might only provide a read_temperature method, and perhaps additional wrapper types (such as Celsius, Fahrenheit, and Kelvin) as well as associated conversion methods. Any other behavior and configuration would then be behind a purely implementation-defined interface.

At its broadest, in addition to traits for reading values from specific types of sensors, we could provide traits for configuring triggers/alerts, power management, calibration, etc. which can apply to a wide variety of sensors. However, even, say, an AlertTypeSensor trait may need to be split into multiple other traits to adequately capture all the ways a sensor could be configured to trigger alerts if we are aiming to be as generic as possible while not requiring implementers to think of sane ways to implement methods which are not supported by their specific sensor.

Sensor reading type

While different types of sensors may want to wrap the measured reading in unit-appropriate types (such as Celsius, Fahrenheit, and Kelvin for a TemperatureSensor trait as mentioned above) some thought will need to go into what the actual underlying type should be.

If the type is left purely as an associated type to the trait to be decided by the implementer, we run into the difficulties that unconstrained associated types make for writing generic code (hence a large reason for some traits being removed as mentioned in #357). However, if the type is simply defined as f32 for example, this may be problematic for users who wish to avoid floating-point operations. Likely some combination of associated types/generics with appropriate trait bounds will be necessary.

@kurtjd
Copy link
Author

kurtjd commented Aug 13, 2024

@Dirbaio @eldruin
I have crates for embedded-sensors and embedded-fans (generic traits for interfacing with Sensors and Fans respectively) in a good state though still deciding where they best fit in the community.

I'm guessing such abstractions are beyond the scope of embedded-hal which seems to focus on more low-level peripherals, though if the community thinks they belong here I can see about trying to integrate them. If not, I may decide to look into transferring the crates over to rust-embedded-community.

Any input would be appreciated, thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant