15
15
//! PWM access under Linux using the PWM sysfs interface
16
16
17
17
use std:: io:: prelude:: * ;
18
- use std:: os:: unix:: prelude:: * ;
19
18
use std:: fs:: File ;
20
19
use std:: fs;
21
20
use std:: fs:: OpenOptions ;
@@ -45,25 +44,23 @@ pub type Result<T> = ::std::result::Result<T, error::Error>;
45
44
46
45
/// Open the specified entry name as a writable file
47
46
fn pwm_file_wo ( chip : & PwmChip , pin : u32 , name : & str ) -> Result < File > {
48
- let f = try!( OpenOptions :: new ( ) . write ( true )
49
- . open ( format ! ( "/sys/class/pwm/pwmchip{}/pwm{}/{}" ,
50
- chip. number,
51
- pin,
52
- name) ) ) ;
47
+ let f = OpenOptions :: new ( )
48
+ . write ( true )
49
+ . open ( format ! ( "/sys/class/pwm/pwmchip{}/pwm{}/{}" , chip. number, pin, name) ) ?;
53
50
Ok ( f)
54
51
}
55
52
56
53
/// Open the specified entry name as a readable file
57
54
fn pwm_file_ro ( chip : & PwmChip , pin : u32 , name : & str ) -> Result < File > {
58
- let f = try! ( File :: open ( format ! ( "/sys/class/pwm/pwmchip{}/pwm{}/{}" , chip. number, pin, name) ) ) ;
55
+ let f = File :: open ( format ! ( "/sys/class/pwm/pwmchip{}/pwm{}/{}" , chip. number, pin, name) ) ? ;
59
56
Ok ( f)
60
57
}
61
58
62
59
/// Get the u32 value from the given entry
63
60
fn pwm_file_parse < T : FromStr > ( chip : & PwmChip , pin : u32 , name : & str ) -> Result < T > {
64
61
let mut s = String :: with_capacity ( 10 ) ;
65
- let mut f = try! ( pwm_file_ro ( chip, pin, name) ) ;
66
- try! ( f. read_to_string ( & mut s) ) ;
62
+ let mut f = pwm_file_ro ( chip, pin, name) ? ;
63
+ f. read_to_string ( & mut s) ? ;
67
64
match s. trim ( ) . parse :: < T > ( ) {
68
65
Ok ( r) => Ok ( r) ,
69
66
Err ( _) => Err ( Error :: Unexpected ( format ! ( "Unexpeted value file contents: {:?}" , s) ) ) ,
@@ -73,15 +70,15 @@ fn pwm_file_parse<T: FromStr>(chip: &PwmChip, pin: u32, name: &str) -> Result<T>
73
70
74
71
impl PwmChip {
75
72
pub fn new ( number : u32 ) -> Result < PwmChip > {
76
- try! ( fs:: metadata ( & format ! ( "/sys/class/pwm/pwmchip{}" , number) ) ) ;
73
+ fs:: metadata ( & format ! ( "/sys/class/pwm/pwmchip{}" , number) ) ? ;
77
74
Ok ( PwmChip { number : number } )
78
75
}
79
76
80
77
pub fn count ( & self ) -> Result < u32 > {
81
78
let npwm_path = format ! ( "/sys/class/pwm/pwmchip{}/npwm" , self . number) ;
82
- let mut npwm_file = try! ( File :: open ( & npwm_path) ) ;
79
+ let mut npwm_file = File :: open ( & npwm_path) ? ;
83
80
let mut s = String :: new ( ) ;
84
- try! ( npwm_file. read_to_string ( & mut s) ) ;
81
+ npwm_file. read_to_string ( & mut s) ? ;
85
82
match s. parse :: < u32 > ( ) {
86
83
Ok ( n) => Ok ( n) ,
87
84
Err ( _) => Err ( Error :: Unexpected ( format ! ( "Unexpected npwm contents: {:?}" , s) ) ) ,
@@ -94,7 +91,7 @@ impl PwmChip {
94
91
self . number,
95
92
number) ) {
96
93
let path = format ! ( "/sys/class/pwm/pwmchip{}/export" , self . number) ;
97
- let mut export_file = try! ( File :: create ( & path) ) ;
94
+ let mut export_file = File :: create ( & path) ? ;
98
95
let _ = export_file. write_all ( format ! ( "{}" , number) . as_bytes ( ) ) ;
99
96
}
100
97
Ok ( ( ) )
@@ -105,7 +102,7 @@ impl PwmChip {
105
102
self . number,
106
103
number) ) {
107
104
let path = format ! ( "/sys/class/pwm/pwmchip{}/unexport" , self . number) ;
108
- let mut export_file = try! ( File :: create ( & path) ) ;
105
+ let mut export_file = File :: create ( & path) ? ;
109
106
let _ = export_file. write_all ( format ! ( "{}" , number) . as_bytes ( ) ) ;
110
107
}
111
108
Ok ( ( ) )
@@ -117,19 +114,19 @@ impl Pwm {
117
114
///
118
115
/// This function does not export the Pwm pin
119
116
pub fn new ( chip : u32 , number : u32 ) -> Result < Pwm > {
120
- let chip: PwmChip = try! ( PwmChip :: new ( chip) ) ;
117
+ let chip: PwmChip = PwmChip :: new ( chip) ? ;
121
118
Ok ( Pwm {
122
- chip : chip,
123
- number : number,
124
- } )
119
+ chip : chip,
120
+ number : number,
121
+ } )
125
122
}
126
123
127
124
/// Run a closure with the GPIO exported
128
125
#[ inline]
129
126
pub fn with_exported < F > ( & self , closure : F ) -> Result < ( ) >
130
127
where F : FnOnce ( ) -> Result < ( ) >
131
128
{
132
- try! ( self . export ( ) ) ;
129
+ self . export ( ) ? ;
133
130
match closure ( ) {
134
131
Ok ( ( ) ) => self . unexport ( ) ,
135
132
Err ( _) => self . unexport ( ) ,
@@ -148,13 +145,9 @@ impl Pwm {
148
145
149
146
/// Enable/Disable the PWM Signal
150
147
pub fn enable ( & self , enable : bool ) -> Result < ( ) > {
151
- let mut enable_file = try!( pwm_file_wo ( & self . chip , self . number , "enable" ) ) ;
152
- let contents = if enable {
153
- "1"
154
- } else {
155
- "0"
156
- } ;
157
- try!( enable_file. write_all ( contents. as_bytes ( ) ) ) ;
148
+ let mut enable_file = pwm_file_wo ( & self . chip , self . number , "enable" ) ?;
149
+ let contents = if enable { "1" } else { "0" } ;
150
+ enable_file. write_all ( contents. as_bytes ( ) ) ?;
158
151
Ok ( ( ) )
159
152
}
160
153
@@ -168,8 +161,9 @@ impl Pwm {
168
161
/// Value is in nanoseconds and must be less than the period.
169
162
pub fn set_duty_cycle_ns ( & self , duty_cycle_ns : u32 ) -> Result < ( ) > {
170
163
// we'll just let the kernel do the validation
171
- let mut duty_cycle_file = try!( pwm_file_wo ( & self . chip , self . number , "duty_cycle" ) ) ;
172
- try!( duty_cycle_file. write_all ( format ! ( "{}" , duty_cycle_ns) . as_bytes ( ) ) ) ;
164
+ let mut duty_cycle_file = pwm_file_wo ( & self . chip , self . number , "duty_cycle" ) ?;
165
+ duty_cycle_file
166
+ . write_all ( format ! ( "{}" , duty_cycle_ns) . as_bytes ( ) ) ?;
173
167
Ok ( ( ) )
174
168
}
175
169
@@ -180,8 +174,9 @@ impl Pwm {
180
174
181
175
/// The period of the PWM signal in Nanoseconds
182
176
pub fn set_period_ns ( & self , period_ns : u32 ) -> Result < ( ) > {
183
- let mut period_file = try!( pwm_file_wo ( & self . chip , self . number , "period" ) ) ;
184
- try!( period_file. write_all ( format ! ( "{}" , period_ns) . as_bytes ( ) ) ) ;
177
+ let mut period_file = pwm_file_wo ( & self . chip , self . number , "period" ) ?;
178
+ period_file
179
+ . write_all ( format ! ( "{}" , period_ns) . as_bytes ( ) ) ?;
185
180
Ok ( ( ) )
186
181
}
187
182
}
0 commit comments