14
14
15
15
//! PWM access under Linux using the PWM sysfs interface
16
16
17
- use std:: io:: prelude:: * ;
18
- use std:: fs:: File ;
19
17
use std:: fs;
18
+ use std:: fs:: File ;
20
19
use std:: fs:: OpenOptions ;
20
+ use std:: io:: prelude:: * ;
21
21
use std:: str:: FromStr ;
22
22
23
23
mod error;
@@ -44,15 +44,19 @@ pub type Result<T> = ::std::result::Result<T, error::Error>;
44
44
45
45
/// Open the specified entry name as a writable file
46
46
fn pwm_file_wo ( chip : & PwmChip , pin : u32 , name : & str ) -> Result < File > {
47
- let f = OpenOptions :: new ( )
48
- . write ( true )
49
- . open ( format ! ( "/sys/class/pwm/pwmchip{}/pwm{}/{}" , chip. number, pin, name) ) ?;
47
+ let f = OpenOptions :: new ( ) . write ( true ) . open ( format ! (
48
+ "/sys/class/pwm/pwmchip{}/pwm{}/{}" ,
49
+ chip. number, pin, name
50
+ ) ) ?;
50
51
Ok ( f)
51
52
}
52
53
53
54
/// Open the specified entry name as a readable file
54
55
fn pwm_file_ro ( chip : & PwmChip , pin : u32 , name : & str ) -> Result < File > {
55
- let f = File :: open ( format ! ( "/sys/class/pwm/pwmchip{}/pwm{}/{}" , chip. number, pin, name) ) ?;
56
+ let f = File :: open ( format ! (
57
+ "/sys/class/pwm/pwmchip{}/pwm{}/{}" ,
58
+ chip. number, pin, name
59
+ ) ) ?;
56
60
Ok ( f)
57
61
}
58
62
@@ -63,11 +67,13 @@ fn pwm_file_parse<T: FromStr>(chip: &PwmChip, pin: u32, name: &str) -> Result<T>
63
67
f. read_to_string ( & mut s) ?;
64
68
match s. trim ( ) . parse :: < T > ( ) {
65
69
Ok ( r) => Ok ( r) ,
66
- Err ( _) => Err ( Error :: Unexpected ( format ! ( "Unexpeted value file contents: {:?}" , s) ) ) ,
70
+ Err ( _) => Err ( Error :: Unexpected ( format ! (
71
+ "Unexpeted value file contents: {:?}" ,
72
+ s
73
+ ) ) ) ,
67
74
}
68
75
}
69
76
70
-
71
77
impl PwmChip {
72
78
pub fn new ( number : u32 ) -> Result < PwmChip > {
73
79
fs:: metadata ( & format ! ( "/sys/class/pwm/pwmchip{}" , number) ) ?;
@@ -81,13 +87,21 @@ impl PwmChip {
81
87
npwm_file. read_to_string ( & mut s) ?;
82
88
match s. parse :: < u32 > ( ) {
83
89
Ok ( n) => Ok ( n) ,
84
- Err ( _) => Err ( Error :: Unexpected ( format ! ( "Unexpected npwm contents: {:?}" , s) ) ) ,
90
+ Err ( _) => Err ( Error :: Unexpected ( format ! (
91
+ "Unexpected npwm contents: {:?}" ,
92
+ s
93
+ ) ) ) ,
85
94
}
86
95
}
87
96
88
97
pub fn export ( & self , number : u32 ) -> Result < ( ) > {
89
98
// only export if not already exported
90
- if fs:: metadata ( & format ! ( "/sys/class/pwm/pwmchip{}/pwm{}" , self . number, number) ) . is_err ( ) {
99
+ if fs:: metadata ( & format ! (
100
+ "/sys/class/pwm/pwmchip{}/pwm{}" ,
101
+ self . number, number
102
+ ) )
103
+ . is_err ( )
104
+ {
91
105
let path = format ! ( "/sys/class/pwm/pwmchip{}/export" , self . number) ;
92
106
let mut export_file = File :: create ( & path) ?;
93
107
let _ = export_file. write_all ( format ! ( "{}" , number) . as_bytes ( ) ) ;
@@ -96,7 +110,12 @@ impl PwmChip {
96
110
}
97
111
98
112
pub fn unexport ( & self , number : u32 ) -> Result < ( ) > {
99
- if fs:: metadata ( & format ! ( "/sys/class/pwm/pwmchip{}/pwm{}" , self . number, number) ) . is_ok ( ) {
113
+ if fs:: metadata ( & format ! (
114
+ "/sys/class/pwm/pwmchip{}/pwm{}" ,
115
+ self . number, number
116
+ ) )
117
+ . is_ok ( )
118
+ {
100
119
let path = format ! ( "/sys/class/pwm/pwmchip{}/unexport" , self . number) ;
101
120
let mut export_file = File :: create ( & path) ?;
102
121
let _ = export_file. write_all ( format ! ( "{}" , number) . as_bytes ( ) ) ;
@@ -112,15 +131,16 @@ impl Pwm {
112
131
pub fn new ( chip : u32 , number : u32 ) -> Result < Pwm > {
113
132
let chip: PwmChip = PwmChip :: new ( chip) ?;
114
133
Ok ( Pwm {
115
- chip : chip,
116
- number : number,
117
- } )
134
+ chip : chip,
135
+ number : number,
136
+ } )
118
137
}
119
138
120
139
/// Run a closure with the GPIO exported
121
140
#[ inline]
122
141
pub fn with_exported < F > ( & self , closure : F ) -> Result < ( ) >
123
- where F : FnOnce ( ) -> Result < ( ) >
142
+ where
143
+ F : FnOnce ( ) -> Result < ( ) > ,
124
144
{
125
145
self . export ( ) ?;
126
146
match closure ( ) {
@@ -152,7 +172,7 @@ impl Pwm {
152
172
match enable_state {
153
173
1 => true ,
154
174
0 => false ,
155
- _ => panic ! ( "enable != 1|0 should be unreachable" )
175
+ _ => panic ! ( "enable != 1|0 should be unreachable" ) ,
156
176
}
157
177
} )
158
178
}
@@ -168,8 +188,7 @@ impl Pwm {
168
188
pub fn set_duty_cycle_ns ( & self , duty_cycle_ns : u32 ) -> Result < ( ) > {
169
189
// we'll just let the kernel do the validation
170
190
let mut duty_cycle_file = pwm_file_wo ( & self . chip , self . number , "duty_cycle" ) ?;
171
- duty_cycle_file
172
- . write_all ( format ! ( "{}" , duty_cycle_ns) . as_bytes ( ) ) ?;
191
+ duty_cycle_file. write_all ( format ! ( "{}" , duty_cycle_ns) . as_bytes ( ) ) ?;
173
192
Ok ( ( ) )
174
193
}
175
194
@@ -181,8 +200,7 @@ impl Pwm {
181
200
/// The period of the PWM signal in Nanoseconds
182
201
pub fn set_period_ns ( & self , period_ns : u32 ) -> Result < ( ) > {
183
202
let mut period_file = pwm_file_wo ( & self . chip , self . number , "period" ) ?;
184
- period_file
185
- . write_all ( format ! ( "{}" , period_ns) . as_bytes ( ) ) ?;
203
+ period_file. write_all ( format ! ( "{}" , period_ns) . as_bytes ( ) ) ?;
186
204
Ok ( ( ) )
187
205
}
188
206
}
0 commit comments