@@ -19,6 +19,7 @@ pub extern crate nb;
1919pub extern crate serial_core;
2020pub extern crate serial_unix;
2121pub extern crate spidev;
22+ #[ cfg( feature = "gpio_sysfs" ) ]
2223pub extern crate sysfs_gpio;
2324
2425use std:: io:: { self , Write } ;
@@ -33,7 +34,13 @@ use spidev::SpidevTransfer;
3334
3435mod serial;
3536
37+ #[ cfg( feature = "gpio_sysfs" ) ]
38+ /// Sysfs Pin wrapper module
39+ mod sysfs_pin;
40+
3641pub use serial:: Serial ;
42+ #[ cfg( feature = "gpio_sysfs" ) ]
43+ pub use sysfs_pin:: SysfsPin ;
3744
3845/// Empty struct that provides delay functionality on top of `thread::sleep`
3946pub struct Delay ;
@@ -92,72 +99,6 @@ impl hal::blocking::delay::DelayMs<u64> for Delay {
9299 }
93100}
94101
95- /// Newtype around [`sysfs_gpio::Pin`] that implements the `embedded-hal` traits
96- ///
97- /// [`sysfs_gpio::Pin`]: https://docs.rs/sysfs_gpio/0.5.1/sysfs_gpio/struct.Pin.html
98- pub struct Pin ( pub sysfs_gpio:: Pin ) ;
99-
100- impl Pin {
101- /// See [`sysfs_gpio::Pin::new`][0] for details.
102- ///
103- /// [0]: https://docs.rs/sysfs_gpio/0.5.1/sysfs_gpio/struct.Pin.html#method.new
104- pub fn new ( pin_num : u64 ) -> Pin {
105- Pin ( sysfs_gpio:: Pin :: new ( pin_num) )
106- }
107-
108- /// See [`sysfs_gpio::Pin::from_path`][0] for details.
109- ///
110- /// [0]: https://docs.rs/sysfs_gpio/0.5.1/sysfs_gpio/struct.Pin.html#method.from_path
111- pub fn from_path < P > ( path : P ) -> sysfs_gpio:: Result < Pin >
112- where
113- P : AsRef < Path > ,
114- {
115- sysfs_gpio:: Pin :: from_path ( path) . map ( Pin )
116- }
117- }
118-
119- impl hal:: digital:: v2:: OutputPin for Pin {
120- type Error = sysfs_gpio:: Error ;
121-
122- fn set_low ( & mut self ) -> Result < ( ) , Self :: Error > {
123- self . 0 . set_value ( 0 )
124- }
125-
126- fn set_high ( & mut self ) -> Result < ( ) , Self :: Error > {
127- self . 0 . set_value ( 1 )
128- }
129- }
130-
131- impl hal:: digital:: v2:: InputPin for Pin {
132- type Error = sysfs_gpio:: Error ;
133-
134- fn is_high ( & self ) -> Result < bool , Self :: Error > {
135- if !self . 0 . get_active_low ( ) ? {
136- self . 0 . get_value ( ) . map ( |val| val != 0 )
137- } else {
138- self . 0 . get_value ( ) . map ( |val| val == 0 )
139- }
140- }
141-
142- fn is_low ( & self ) -> Result < bool , Self :: Error > {
143- self . is_high ( ) . map ( |val| !val)
144- }
145- }
146-
147- impl ops:: Deref for Pin {
148- type Target = sysfs_gpio:: Pin ;
149-
150- fn deref ( & self ) -> & Self :: Target {
151- & self . 0
152- }
153- }
154-
155- impl ops:: DerefMut for Pin {
156- fn deref_mut ( & mut self ) -> & mut Self :: Target {
157- & mut self . 0
158- }
159- }
160-
161102/// Newtype around [`i2cdev::linux::LinuxI2CDevice`] that implements the `embedded-hal` traits
162103///
163104/// [`i2cdev::linux::LinuxI2CDevice`]: https://docs.rs/i2cdev/0.3.1/i2cdev/linux/struct.LinuxI2CDevice.html
0 commit comments