38 lines
1.0 KiB
Rust
38 lines
1.0 KiB
Rust
// Build with: cross build --release --example invoke-method
|
|
|
|
use oc2r_rust::{DEFAULT_DEVICE_PATH, DeviceBus, Result};
|
|
|
|
fn main() -> Result<()> {
|
|
let mut bus = DeviceBus::connect(DEFAULT_DEVICE_PATH)?;
|
|
let devices = bus.list()?;
|
|
|
|
let Some(first) = devices.first() else {
|
|
println!("No OC2R devices detected.");
|
|
return Ok(());
|
|
};
|
|
|
|
println!("Inspecting {}", first.device_id);
|
|
|
|
let mut device = bus
|
|
.device(&first.device_id)?
|
|
.expect("device disappeared after list()");
|
|
|
|
let methods = device.methods()?.to_vec();
|
|
for method in &methods {
|
|
println!("{}()", method.name);
|
|
}
|
|
|
|
if let Some(method) = methods.iter().find(|m| m.parameters.is_empty()) {
|
|
println!("Invoking {}()", method.name);
|
|
let result = device.call(&method.name, ())?;
|
|
println!("Result: {result:?}");
|
|
} else {
|
|
println!("No zero-argument methods available to invoke.");
|
|
}
|
|
|
|
// Example for passing parameters:
|
|
// device.call("setRedstoneOutput", ("east", 15_u8))?;
|
|
|
|
Ok(())
|
|
}
|