Skip to content

Commit 46c181d

Browse files
committed
write: add gpio write support
Signed-off-by: Paul Osborne <[email protected]>
1 parent 18e063f commit 46c181d

File tree

4 files changed

+48
-3
lines changed

4 files changed

+48
-3
lines changed

src/commands/gpio_write.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright (C) 2016, The gpio-utils Authors
2+
3+
use options::GpioWriteOptions;
4+
use config::GpioConfig;
5+
use std::process::exit;
6+
use sysfs_gpio::Direction;
7+
8+
pub fn main(config: &GpioConfig, opts: &GpioWriteOptions) {
9+
let pin_config = match config.get_pin(&opts.pin[..]) {
10+
Some(pin) => pin,
11+
None => {
12+
println!("Unable to find config entry for pin '{}'", opts.pin);
13+
exit(1);
14+
}
15+
};
16+
17+
let pin = pin_config.get_pin();
18+
pin.set_direction(Direction::Out).unwrap_or_else(|e| {
19+
println!("Error setting GPIO direction: {:?}", e);
20+
exit(1)
21+
});
22+
pin.set_value(opts.value).unwrap_or_else(|e| {
23+
println!("There was an error writing to the gpio: {:?}", e);
24+
exit(1);
25+
});
26+
}

src/commands/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
pub mod gpio_read;
44
pub mod gpio_export;
55
pub mod gpio_exportall;
6+
pub mod gpio_write;

src/main.rs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use clap::{Arg, App, SubCommand, AppSettings};
1111
use gpio_utils::options::*;
1212
use gpio_utils::commands::*;
1313
use gpio_utils::config::{self, GpioConfig};
14+
use std::process::exit;
1415

1516
fn main() {
1617
env_logger::init().unwrap();
@@ -51,6 +52,10 @@ fn main() {
5152
.arg(Arg::with_name("pin")
5253
.help("The pin name (or number)")
5354
.index(1)
55+
.required(true))
56+
.arg(Arg::with_name("value")
57+
.help("Value to write to pin (0|1)")
58+
.index(2)
5459
.required(true)))
5560

5661
// gpio export
@@ -128,7 +133,21 @@ fn main() {
128133
gpio_read::main(&cfg, &read_options);
129134
}
130135
("poll", Some(_)) => {}
131-
("write", Some(_)) => {}
136+
("write", Some(m)) => {
137+
let write_options = GpioWriteOptions {
138+
gpio_opts: gpio_options,
139+
pin: String::from(m.value_of("pin").unwrap()),
140+
value: match m.value_of("value").unwrap().parse::<u8>() {
141+
Ok(value) => value,
142+
Err(_) => {
143+
println!("Provided value {:?} is not valid",
144+
m.value_of("value").unwrap());
145+
exit(1);
146+
}
147+
},
148+
};
149+
gpio_write::main(&cfg, &write_options);
150+
}
132151
("export", Some(m)) => {
133152
let export_options = GpioExportOptions {
134153
gpio_opts: gpio_options,
@@ -138,7 +157,6 @@ fn main() {
138157
None => None,
139158
},
140159
};
141-
142160
gpio_export::main(&cfg, &export_options);
143161
}
144162
("export-all", Some(m)) => {
@@ -149,7 +167,6 @@ fn main() {
149167
None => None,
150168
},
151169
};
152-
153170
gpio_exportall::main(&cfg, &exportall_options);
154171
}
155172
("unexport", Some(_)) => {}

src/options.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ pub struct GpioReadOptions {
1515
pub struct GpioWriteOptions {
1616
pub gpio_opts: GpioOptions,
1717
pub pin: String,
18+
pub value: u8,
1819
}
1920

2021
#[derive(Debug)]

0 commit comments

Comments
 (0)