diff options
author | Takashi Sakamoto <o-takashi@sakamocchi.jp> | 2020-08-23 06:10:40 +0000 |
---|---|---|
committer | Takashi Sakamoto <o-takashi@sakamocchi.jp> | 2020-08-24 16:55:33 +0900 |
commit | ca2b4c76b4459d8c9f36c50eecfe594b601cdab5 (patch) | |
tree | 14f493efab9f95cc45ca85d1705e4e5ac5ba778d | |
parent | 8655f498e316faa9114a07f00220574d0e19a3a2 (diff) | |
download | hinawa-rs-ca2b4c76b4459d8c9f36c50eecfe594b601cdab5.tar.gz |
update hinawa-sys/hinawa crates up to libhinawa v2.2.0
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
-rw-r--r-- | conf/gir-hinawa-sys.toml | 2 | ||||
-rw-r--r-- | conf/gir-hinawa.toml | 5 | ||||
-rw-r--r-- | hinawa-sys/Cargo.toml | 4 | ||||
-rw-r--r-- | hinawa-sys/src/lib.rs | 14 | ||||
-rw-r--r-- | hinawa-sys/tests/abi.rs | 4 | ||||
-rw-r--r-- | hinawa/src/auto/enums.rs | 91 | ||||
-rw-r--r-- | hinawa/src/auto/fw_resp.rs | 1 | ||||
-rw-r--r-- | hinawa/src/auto/mod.rs | 1 | ||||
-rw-r--r-- | hinawa/src/fw_resp.rs | 50 |
9 files changed, 170 insertions, 2 deletions
diff --git a/conf/gir-hinawa-sys.toml b/conf/gir-hinawa-sys.toml index 282f77d..6782cf6 100644 --- a/conf/gir-hinawa-sys.toml +++ b/conf/gir-hinawa-sys.toml @@ -2,7 +2,7 @@ work_mode = "sys" library = "Hinawa" version = "3.0" -min_cfg_version = "2.1" +min_cfg_version = "2.2" single_version_file = "." external_libraries = [ "GLib", diff --git a/conf/gir-hinawa.toml b/conf/gir-hinawa.toml index 93a5a8d..54ffed7 100644 --- a/conf/gir-hinawa.toml +++ b/conf/gir-hinawa.toml @@ -10,6 +10,7 @@ generate = [ "Hinawa.FwTcode", "Hinawa.SndUnitType", "Hinawa.FwNodeError", + "Hinawa.FwRespError", "Hinawa.FwFcpError", "Hinawa.SndUnitError", "Hinawa.SndDiceError", @@ -65,6 +66,10 @@ manual_traits = ["FwRespExtManual"] pattern = "get_req_frame" ignore = true doc_trait_name = "FwRespExtManual" + [[object.signal]] + pattern = "requested2" + ignore = true + doc_trait_name = "FwRespExtManual" [[object]] name = "Hinawa.FwFcp" diff --git a/hinawa-sys/Cargo.toml b/hinawa-sys/Cargo.toml index 88b4b63..8ecbf92 100644 --- a/hinawa-sys/Cargo.toml +++ b/hinawa-sys/Cargo.toml @@ -11,10 +11,11 @@ repository = "https://github.com/alsa-project/hinawa-rs/" features = ["dox"] [package.metadata.system-deps.hinawa] name = "hinawa" -version = "2.1" +version = "2.2" [package.metadata.system-deps.hinawa.feature-versions] v2_1 = "2.1" +v2_2 = "2.2" [lib] name = "hinawa_sys" @@ -35,3 +36,4 @@ tempfile = "3" [features] dox = [] v2_1 = [] +v2_2 = [] diff --git a/hinawa-sys/src/lib.rs b/hinawa-sys/src/lib.rs index 3f9a8ca..0b63dd6 100644 --- a/hinawa-sys/src/lib.rs +++ b/hinawa-sys/src/lib.rs @@ -41,6 +41,11 @@ pub const HINAWA_FW_RCODE_GENERATION: HinawaFwRcode = 19; pub const HINAWA_FW_RCODE_NO_ACK: HinawaFwRcode = 20; pub const HINAWA_FW_RCODE_INVALID: HinawaFwRcode = 21; +pub type HinawaFwRespError = c_int; +pub const HINAWA_FW_RESP_ERROR_FAILED: HinawaFwRespError = 0; +pub const HINAWA_FW_RESP_ERROR_RESERVED: HinawaFwRespError = 1; +pub const HINAWA_FW_RESP_ERROR_ADDR_SPACE_USED: HinawaFwRespError = 2; + pub type HinawaFwTcode = c_int; pub const HINAWA_FW_TCODE_WRITE_QUADLET_REQUEST: HinawaFwTcode = 0; pub const HINAWA_FW_TCODE_WRITE_BLOCK_REQUEST: HinawaFwTcode = 1; @@ -174,6 +179,7 @@ pub type HinawaFwReqPrivate = *mut _HinawaFwReqPrivate; pub struct HinawaFwRespClass { pub parent_class: gobject::GObjectClass, pub requested: Option<unsafe extern "C" fn(*mut HinawaFwResp, HinawaFwTcode) -> HinawaFwRcode>, + pub requested2: Option<unsafe extern "C" fn(*mut HinawaFwResp, HinawaFwTcode, u64, u32, u32, u32, u32, *const u8, c_uint) -> HinawaFwRcode>, } impl ::std::fmt::Debug for HinawaFwRespClass { @@ -181,6 +187,7 @@ impl ::std::fmt::Debug for HinawaFwRespClass { f.debug_struct(&format!("HinawaFwRespClass @ {:?}", self as *const _)) .field("parent_class", &self.parent_class) .field("requested", &self.requested) + .field("requested2", &self.requested2) .finish() } } @@ -492,6 +499,12 @@ extern "C" { pub fn hinawa_fw_rcode_get_type() -> GType; //========================================================================= + // HinawaFwRespError + //========================================================================= + pub fn hinawa_fw_resp_error_get_type() -> GType; + pub fn hinawa_fw_resp_error_quark() -> glib::GQuark; + + //========================================================================= // HinawaFwTcode //========================================================================= pub fn hinawa_fw_tcode_get_type() -> GType; @@ -614,6 +627,7 @@ extern "C" { // Other functions //========================================================================= pub fn hinawa_sigs_marshal_ENUM__ENUM(closure: *mut gobject::GClosure, return_value: *mut gobject::GValue, n_param_values: c_uint, param_values: *const gobject::GValue, invocation_hint: gpointer, marshal_data: gpointer); + pub fn hinawa_sigs_marshal_ENUM__ENUM_UINT64_UINT_UINT_UINT_UINT_POINTER_UINT(closure: *mut gobject::GClosure, return_value: *mut gobject::GValue, n_param_values: c_uint, param_values: *const gobject::GValue, invocation_hint: gpointer, marshal_data: gpointer); pub fn hinawa_sigs_marshal_VOID__ENUM_POINTER_UINT(closure: *mut gobject::GClosure, return_value: *mut gobject::GValue, n_param_values: c_uint, param_values: *const gobject::GValue, invocation_hint: gpointer, marshal_data: gpointer); pub fn hinawa_sigs_marshal_VOID__ENUM_UINT_UINT_UINT_POINTER_UINT(closure: *mut gobject::GClosure, return_value: *mut gobject::GValue, n_param_values: c_uint, param_values: *const gobject::GValue, invocation_hint: gpointer, marshal_data: gpointer); pub fn hinawa_sigs_marshal_VOID__POINTER_UINT(closure: *mut gobject::GClosure, return_value: *mut gobject::GValue, n_param_values: c_uint, param_values: *const gobject::GValue, invocation_hint: gpointer, marshal_data: gpointer); diff --git a/hinawa-sys/tests/abi.rs b/hinawa-sys/tests/abi.rs index edf0f6d..0b225e4 100644 --- a/hinawa-sys/tests/abi.rs +++ b/hinawa-sys/tests/abi.rs @@ -250,6 +250,7 @@ const RUST_LAYOUTS: &[(&str, Layout)] = &[ ("HinawaFwReqClass", Layout {size: size_of::<HinawaFwReqClass>(), alignment: align_of::<HinawaFwReqClass>()}), ("HinawaFwResp", Layout {size: size_of::<HinawaFwResp>(), alignment: align_of::<HinawaFwResp>()}), ("HinawaFwRespClass", Layout {size: size_of::<HinawaFwRespClass>(), alignment: align_of::<HinawaFwRespClass>()}), + ("HinawaFwRespError", Layout {size: size_of::<HinawaFwRespError>(), alignment: align_of::<HinawaFwRespError>()}), ("HinawaFwTcode", Layout {size: size_of::<HinawaFwTcode>(), alignment: align_of::<HinawaFwTcode>()}), ("HinawaSndDg00x", Layout {size: size_of::<HinawaSndDg00x>(), alignment: align_of::<HinawaSndDg00x>()}), ("HinawaSndDg00xClass", Layout {size: size_of::<HinawaSndDg00xClass>(), alignment: align_of::<HinawaSndDg00xClass>()}), @@ -287,6 +288,9 @@ const RUST_CONSTANTS: &[(&str, &str)] = &[ ("(gint) HINAWA_FW_RCODE_NO_ACK", "20"), ("(gint) HINAWA_FW_RCODE_SEND_ERROR", "16"), ("(gint) HINAWA_FW_RCODE_TYPE_ERROR", "6"), + ("(gint) HINAWA_FW_RESP_ERROR_ADDR_SPACE_USED", "2"), + ("(gint) HINAWA_FW_RESP_ERROR_FAILED", "0"), + ("(gint) HINAWA_FW_RESP_ERROR_RESERVED", "1"), ("(gint) HINAWA_FW_TCODE_CYCLE_START", "8"), ("(gint) HINAWA_FW_TCODE_LOCK_BOUNDED_ADD", "21"), ("(gint) HINAWA_FW_TCODE_LOCK_COMPARE_SWAP", "18"), diff --git a/hinawa/src/auto/enums.rs b/hinawa/src/auto/enums.rs index e5c0672..4456f6f 100644 --- a/hinawa/src/auto/enums.rs +++ b/hinawa/src/auto/enums.rs @@ -304,6 +304,97 @@ impl SetValue for FwRcode { #[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] #[derive(Clone, Copy)] #[non_exhaustive] +pub enum FwRespError { + Failed, + Reserved, + AddrSpaceUsed, + #[doc(hidden)] + __Unknown(i32), +} + +impl fmt::Display for FwRespError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "FwRespError::{}", match *self { + FwRespError::Failed => "Failed", + FwRespError::Reserved => "Reserved", + FwRespError::AddrSpaceUsed => "AddrSpaceUsed", + _ => "Unknown", + }) + } +} + +#[doc(hidden)] +impl ToGlib for FwRespError { + type GlibType = hinawa_sys::HinawaFwRespError; + + fn to_glib(&self) -> hinawa_sys::HinawaFwRespError { + match *self { + FwRespError::Failed => hinawa_sys::HINAWA_FW_RESP_ERROR_FAILED, + FwRespError::Reserved => hinawa_sys::HINAWA_FW_RESP_ERROR_RESERVED, + FwRespError::AddrSpaceUsed => hinawa_sys::HINAWA_FW_RESP_ERROR_ADDR_SPACE_USED, + FwRespError::__Unknown(value) => value + } + } +} + +#[doc(hidden)] +impl FromGlib<hinawa_sys::HinawaFwRespError> for FwRespError { + fn from_glib(value: hinawa_sys::HinawaFwRespError) -> Self { + match value { + 0 => FwRespError::Failed, + 1 => FwRespError::Reserved, + 2 => FwRespError::AddrSpaceUsed, + value => FwRespError::__Unknown(value), + } + } +} + +impl ErrorDomain for FwRespError { + fn domain() -> Quark { + unsafe { from_glib(hinawa_sys::hinawa_fw_resp_error_quark()) } + } + + fn code(self) -> i32 { + self.to_glib() + } + + fn from(code: i32) -> Option<Self> { + match code { + 0 => Some(FwRespError::Failed), + 1 => Some(FwRespError::Reserved), + 2 => Some(FwRespError::AddrSpaceUsed), + _ => Some(FwRespError::Failed), + } + } +} + +impl StaticType for FwRespError { + fn static_type() -> Type { + unsafe { from_glib(hinawa_sys::hinawa_fw_resp_error_get_type()) } + } +} + +impl<'a> FromValueOptional<'a> for FwRespError { + unsafe fn from_value_optional(value: &Value) -> Option<Self> { + Some(FromValue::from_value(value)) + } +} + +impl<'a> FromValue<'a> for FwRespError { + unsafe fn from_value(value: &Value) -> Self { + from_glib(gobject_sys::g_value_get_enum(value.to_glib_none().0)) + } +} + +impl SetValue for FwRespError { + unsafe fn set_value(value: &mut Value, this: &Self) { + gobject_sys::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib()) + } +} + +#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] +#[derive(Clone, Copy)] +#[non_exhaustive] pub enum FwTcode { WriteQuadletRequest, WriteBlockRequest, diff --git a/hinawa/src/auto/fw_resp.rs b/hinawa/src/auto/fw_resp.rs index 68b1a98..4ca5003 100644 --- a/hinawa/src/auto/fw_resp.rs +++ b/hinawa/src/auto/fw_resp.rs @@ -54,6 +54,7 @@ pub trait FwRespExt: 'static { fn get_property_is_reserved(&self) -> bool; + #[deprecated] fn connect_requested<F: Fn(&Self, FwTcode) -> FwRcode + 'static>(&self, f: F) -> SignalHandlerId; fn connect_property_is_reserved_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId; diff --git a/hinawa/src/auto/mod.rs b/hinawa/src/auto/mod.rs index 0c4ab75..ba0e4a0 100644 --- a/hinawa/src/auto/mod.rs +++ b/hinawa/src/auto/mod.rs @@ -46,6 +46,7 @@ mod enums; pub use self::enums::FwFcpError; pub use self::enums::FwNodeError; pub use self::enums::FwRcode; +pub use self::enums::FwRespError; pub use self::enums::FwTcode; pub use self::enums::SndDiceError; pub use self::enums::SndEfwStatus; diff --git a/hinawa/src/fw_resp.rs b/hinawa/src/fw_resp.rs index d353e38..0c60cf8 100644 --- a/hinawa/src/fw_resp.rs +++ b/hinawa/src/fw_resp.rs @@ -1,11 +1,18 @@ // SPDX-License-Identifier: MIT use glib::object::IsA; use glib::translate::*; +use glib::object::Cast; +use glib::signal::connect_raw; +use glib::signal::SignalHandlerId; use FwResp; +use FwTcode; +use FwRcode; pub trait FwRespExtManual { fn get_req_frames(&self) -> &[u8]; + fn connect_requested2<F>(&self, f: F) -> SignalHandlerId + where F: Fn(&Self, FwTcode, u64, u32, u32, u32, u32, &[u8]) -> FwRcode + 'static; } impl<O: IsA<FwResp>> FwRespExtManual for O { @@ -22,4 +29,47 @@ impl<O: IsA<FwResp>> FwRespExtManual for O { std::slice::from_raw_parts(ptr, len) } } + + fn connect_requested2<F>(&self, f: F) -> SignalHandlerId + where F: Fn(&Self, FwTcode, u64, u32, u32, u32, u32, &[u8]) -> FwRcode + 'static + { + unsafe extern "C" fn requested_trampoline<P, F>( + this: *mut hinawa_sys::HinawaFwResp, + tcode: hinawa_sys::HinawaFwTcode, + offset: u64, + src: u32, + dst: u32, + card: u32, + generation: u32, + frame: *const u8, + length: libc::c_uint, + f: glib_sys::gpointer, + ) -> hinawa_sys::HinawaFwRcode + where P: IsA<FwResp>, + F: Fn(&P, FwTcode, u64, u32, u32, u32, u32, &[u8]) -> FwRcode + 'static + { + let f: &F = &*(f as *const F); + f( + &FwResp::from_glib_borrow(this).unsafe_cast_ref(), + from_glib(tcode), + offset, + src, + dst, + card, + generation, + std::slice::from_raw_parts(frame, length as usize), + ).to_glib() + } + unsafe { + let f: std::boxed::Box<F> = std::boxed::Box::new(f); + connect_raw( + self.as_ptr() as *mut _, + b"requested2\0".as_ptr() as *const _, + Some(std::mem::transmute::<_, unsafe extern "C" fn()>( + requested_trampoline::<Self, F> as *const () + )), + std::boxed::Box::into_raw(f), + ) + } + } } |