parameters

This commit is contained in:
Magnus Ulimoen 2020-07-24 01:21:10 +02:00
parent 62ee11ec19
commit 35c3299d51
1 changed files with 53 additions and 10 deletions

View File

@ -1,3 +1,5 @@
#![allow(unused)]
use sane_sys::*; use sane_sys::*;
use std::ffi::CStr; use std::ffi::CStr;
@ -78,6 +80,22 @@ impl Drop for Context {
} }
} }
#[derive(Copy, Clone)]
#[repr(transparent)]
struct Version(SANE_Int);
impl Version {
fn major(self) -> SANE_Word {
SANE_VERSION_MAJOR(self.0)
}
fn minor(self) -> SANE_Word {
SANE_VERSION_MINOR(self.0)
}
fn build(self) -> SANE_Word {
SANE_VERSION_BUILD(self.0)
}
}
struct Device(*const SANE_Device); struct Device(*const SANE_Device);
impl Device { impl Device {
@ -142,6 +160,17 @@ impl Handle {
Some(Descriptor(desc)) Some(Descriptor(desc))
} }
} }
fn parameters(&self) -> Result<Parameters, Error> {
let mut parameters = std::mem::MaybeUninit::uninit();
unsafe { checked(|| sane_get_parameters(self.0, parameters.as_mut_ptr()))? }
Ok(Parameters(unsafe { parameters.assume_init() }))
}
fn start(&self) -> Result<(), Error> {
unsafe { checked(|| sane_start(self.0)) }
}
fn cancel(&self) {
unsafe { sane_cancel(self.0) }
}
} }
struct Descriptor(*const SANE_Option_Descriptor); struct Descriptor(*const SANE_Option_Descriptor);
@ -159,19 +188,27 @@ impl Descriptor {
} }
} }
#[derive(Copy, Clone)] #[derive(Debug, Clone)]
#[repr(transparent)] struct Parameters(SANE_Parameters);
struct Version(SANE_Int);
impl Version { impl Parameters {
fn major(self) -> SANE_Word { fn format(&self) -> SANE_Frame {
SANE_VERSION_MAJOR(self.0) self.0.format
} }
fn minor(self) -> SANE_Word { fn last_frame(&self) -> SANE_Bool {
SANE_VERSION_MINOR(self.0) self.0.last_frame
} }
fn build(self) -> SANE_Word { fn bytes_per_line(&self) -> SANE_Int {
SANE_VERSION_BUILD(self.0) self.0.bytes_per_line
}
fn pixels_per_line(&self) -> SANE_Int {
self.0.pixels_per_line
}
fn lines(&self) -> SANE_Int {
self.0.lines
}
fn depth(&self) -> SANE_Int {
self.0.depth
} }
} }
@ -201,4 +238,10 @@ fn main() {
for descriptor in handle.descriptors() { for descriptor in handle.descriptors() {
println!("\t{}", descriptor.name()); println!("\t{}", descriptor.name());
} }
let parameters = handle.parameters().unwrap();
println!("{:?}", parameters);
handle.start().unwrap();
handle.cancel();
} }