aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>2020-08-23 06:10:40 +0000
committerTakashi Sakamoto <o-takashi@sakamocchi.jp>2020-08-24 16:55:33 +0900
commitca2b4c76b4459d8c9f36c50eecfe594b601cdab5 (patch)
tree14f493efab9f95cc45ca85d1705e4e5ac5ba778d
parent8655f498e316faa9114a07f00220574d0e19a3a2 (diff)
downloadhinawa-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.toml2
-rw-r--r--conf/gir-hinawa.toml5
-rw-r--r--hinawa-sys/Cargo.toml4
-rw-r--r--hinawa-sys/src/lib.rs14
-rw-r--r--hinawa-sys/tests/abi.rs4
-rw-r--r--hinawa/src/auto/enums.rs91
-rw-r--r--hinawa/src/auto/fw_resp.rs1
-rw-r--r--hinawa/src/auto/mod.rs1
-rw-r--r--hinawa/src/fw_resp.rs50
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),
+ )
+ }
+ }
}