On Fri, Oct 14, 2022 at 04:17:20PM +0530, Viresh Kumar wrote: > Add rust wrapper crate, around the libpiod-sys crate added earlier, to > provide a convenient interface for the users. > > Signed-off-by: Viresh Kumar <viresh.kumar@xxxxxxxxxx> One more thing - I overlooked trying to build on 32-bit while reviewing. (in this case on a Raspberry Pi 4) Unfortunately that fails: Compiling libgpiod v0.1.0 (/home/pi/libgpiod/bindings/rust/libgpiod) error[E0308]: mismatched types --> libgpiod/src/edge_event.rs:32:88 | 32 | let event = unsafe { gpiod::gpiod_edge_event_buffer_get_event(buffer.buffer(), index) }; | ---------------------------------------- ^^^^^ expected `u32`, found `u64` | | | arguments to this function are incorrect | note: function defined here --> /home/pi/libgpiod/bindings/rust/libgpiod-sys/src/bindings.rs:1151:12 | 1151 | pub fn gpiod_edge_event_buffer_get_event( | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can convert a `u64` to a `u32` and panic if the converted value doesn't fit | 32 | let event = unsafe { gpiod::gpiod_edge_event_buffer_get_event(buffer.buffer(), index.try_into().unwrap()) }; | ++++++++++++++++++++ error[E0308]: mismatched types --> libgpiod/src/edge_event.rs:81:18 | 80 | pub fn global_seqno(&self) -> u64 { | --- expected `u64` because of return type 81 | unsafe { gpiod::gpiod_edge_event_get_global_seqno(self.event) } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `u64`, found `u32` | help: you can convert a `u32` to a `u64` | 81 | unsafe { gpiod::gpiod_edge_event_get_global_seqno(self.event).into() } | +++++++ error[E0308]: mismatched types --> libgpiod/src/edge_event.rs:89:18 | 88 | pub fn line_seqno(&self) -> u64 { | --- expected `u64` because of return type 89 | unsafe { gpiod::gpiod_edge_event_get_line_seqno(self.event) } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `u64`, found `u32` | help: you can convert a `u32` to a `u64` | 89 | unsafe { gpiod::gpiod_edge_event_get_line_seqno(self.event).into() } | +++++++ error[E0308]: mismatched types --> libgpiod/src/line_config.rs:100:72 | 100 | unsafe { gpiod::gpiod_line_config_get_offsets(self.config, &mut num, &mut offsets) }; | ------------------------------------ ^^^^^^^^ expected `u32`, found `u64` | | | arguments to this function are incorrect | = note: expected raw pointer `*mut u32` found mutable reference `&mut u64` note: function defined here --> /home/pi/libgpiod/bindings/rust/libgpiod-sys/src/bindings.rs:847:12 | 847 | pub fn gpiod_line_config_get_offsets( | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error[E0308]: mismatched types --> libgpiod/src/line_info.rs:168:40 | 168 | Duration::from_micros(unsafe { gpiod::gpiod_line_info_get_debounce_period_us(self.info) }) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `u64`, found `u32` | help: you can convert a `u32` to a `u64` | 168 | Duration::from_micros(unsafe { gpiod::gpiod_line_info_get_debounce_period_us(self.info).into() }) | +++++++ error[E0308]: mismatched types --> libgpiod/src/line_request.rs:226:17 | 223 | gpiod::gpiod_line_request_read_edge_event( | ----------------------------------------- arguments to this function are incorrect ... 226 | buffer.capacity() as u64, | ^^^^^^^^^^^^^^^^^^^^^^^^ expected `u32`, found `u64` | note: function defined here --> /home/pi/libgpiod/bindings/rust/libgpiod-sys/src/bindings.rs:1058:12 | 1058 | pub fn gpiod_line_request_read_edge_event( | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can convert a `u64` to a `u32` and panic if the converted value doesn't fit | 226 | (buffer.capacity() as u64).try_into().unwrap(), | + +++++++++++++++++++++ error[E0308]: mismatched types --> libgpiod/src/line_settings.rs:209:17 | 207 | gpiod::gpiod_line_settings_set_debounce_period_us( | ------------------------------------------------- arguments to this function are incorrect 208 | self.settings, 209 | period.as_micros() as u64, | ^^^^^^^^^^^^^^^^^^^^^^^^^ expected `u32`, found `u64` | note: function defined here --> /home/pi/libgpiod/bindings/rust/libgpiod-sys/src/bindings.rs:746:12 | 746 | pub fn gpiod_line_settings_set_debounce_period_us( | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can convert a `u64` to a `u32` and panic if the converted value doesn't fit | 209 | (period.as_micros() as u64).try_into().unwrap(), | + +++++++++++++++++++++ error[E0308]: mismatched types --> libgpiod/src/line_settings.rs:217:13 | 217 | gpiod::gpiod_line_settings_get_debounce_period_us(self.settings) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `u64`, found `u32` | help: you can convert a `u32` to a `u64` | 217 | gpiod::gpiod_line_settings_get_debounce_period_us(self.settings).into() | +++++++ For more information about this error, try `rustc --explain E0308`. error: could not compile `libgpiod` due to 8 previous errors --- An example of one of the relevant generated signatures is: pub fn gpiod_edge_event_buffer_get_event( buffer: *mut gpiod_edge_event_buffer, index: ::std::os::raw::c_ulong, ) -> *mut gpiod_edge_event; On 32-bit c_ulong maps to u32, not u64. Cheers, Kent.