diff options
author | Takashi Sakamoto <o-takashi@sakamocchi.jp> | 2021-11-17 17:45:20 +0900 |
---|---|---|
committer | 坂本 貴史 <o-takashi@sakamocchi.jp> | 2021-11-17 17:46:15 +0900 |
commit | abb0fe2a194534a7a4a84f42c3bd1c895c337358 (patch) | |
tree | 5af7c739ec28ae4aef566fb0239c92374535206a | |
parent | 6865cfd30ef785038e44985669fdc81fde56ee0f (diff) | |
download | hinawa-rs-abb0fe2a194534a7a4a84f42c3bd1c895c337358.tar.gz |
optimization for libhinawa v2.4.0v0.5.0
The libhinawa version 2.4.0 is out:
* https://github.com/alsa-project/libhinawa/releases/tag/2.4.0
This commit adds optimization to use functions in the release.
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
-rw-r--r-- | Hinawa-3.0.gir | 793 | ||||
-rw-r--r-- | README.rst | 6 | ||||
-rw-r--r-- | conf/gir-hinawa-sys.toml | 2 | ||||
-rw-r--r-- | conf/gir-hinawa.toml | 62 | ||||
-rw-r--r-- | hinawa-sys/Cargo.toml | 6 | ||||
-rw-r--r-- | hinawa-sys/src/lib.rs | 38 | ||||
-rw-r--r-- | hinawa-sys/tests/abi.rs | 1 | ||||
-rw-r--r-- | hinawa/Cargo.toml | 4 | ||||
-rw-r--r-- | hinawa/src/auto/mod.rs | 3 | ||||
-rw-r--r-- | hinawa/src/auto/snd_motu_register_dsp_parameter.rs | 78 | ||||
-rw-r--r-- | hinawa/src/lib.rs | 6 | ||||
-rw-r--r-- | hinawa/src/snd_motu.rs | 109 | ||||
-rw-r--r-- | hinawa/src/snd_motu_register_dsp_parameter.rs | 109 |
13 files changed, 1173 insertions, 44 deletions
diff --git a/Hinawa-3.0.gir b/Hinawa-3.0.gir index ea1a7cf..1c563b3 100644 --- a/Hinawa-3.0.gir +++ b/Hinawa-3.0.gir @@ -2188,7 +2188,7 @@ specification.</doc> <function-macro name="IS_SND_MOTU" c:identifier="HINAWA_IS_SND_MOTU" introspectable="0"> - <source-position filename="../src/snd_motu.h" line="18"/> + <source-position filename="../src/snd_motu.h" line="19"/> <parameters> <parameter name="obj"> </parameter> @@ -2197,7 +2197,7 @@ specification.</doc> <function-macro name="IS_SND_MOTU_CLASS" c:identifier="HINAWA_IS_SND_MOTU_CLASS" introspectable="0"> - <source-position filename="../src/snd_motu.h" line="26"/> + <source-position filename="../src/snd_motu.h" line="27"/> <parameters> <parameter name="klass"> </parameter> @@ -2323,7 +2323,7 @@ specification.</doc> <function-macro name="SND_MOTU" c:identifier="HINAWA_SND_MOTU" introspectable="0"> - <source-position filename="../src/snd_motu.h" line="14"/> + <source-position filename="../src/snd_motu.h" line="15"/> <parameters> <parameter name="obj"> </parameter> @@ -2332,7 +2332,7 @@ specification.</doc> <function-macro name="SND_MOTU_CLASS" c:identifier="HINAWA_SND_MOTU_CLASS" introspectable="0"> - <source-position filename="../src/snd_motu.h" line="22"/> + <source-position filename="../src/snd_motu.h" line="23"/> <parameters> <parameter name="klass"> </parameter> @@ -2341,7 +2341,7 @@ specification.</doc> <function-macro name="SND_MOTU_GET_CLASS" c:identifier="HINAWA_SND_MOTU_GET_CLASS" introspectable="0"> - <source-position filename="../src/snd_motu.h" line="29"/> + <source-position filename="../src/snd_motu.h" line="30"/> <parameters> <parameter name="obj"> </parameter> @@ -3348,27 +3348,27 @@ of the response.</doc> glib:type-name="HinawaSndMotu" glib:get-type="hinawa_snd_motu_get_type" glib:type-struct="SndMotuClass"> - <source-position filename="../src/snd_motu.h" line="58"/> + <source-position filename="../src/snd_motu.h" line="77"/> <constructor name="new" c:identifier="hinawa_snd_motu_new" version="1.3."> <doc xml:space="preserve" filename="../src/snd_motu.c" - line="56">Instantiate #HinawaSndMotu object and return the instance.</doc> - <source-position filename="../src/snd_motu.h" line="62"/> + line="84">Instantiate #HinawaSndMotu object and return the instance.</doc> + <source-position filename="../src/snd_motu.h" line="81"/> <return-value transfer-ownership="full"> <doc xml:space="preserve" filename="../src/snd_motu.c" - line="61">an instance of #HinawaSndMotu.</doc> + line="89">an instance of #HinawaSndMotu.</doc> <type name="SndMotu" c:type="HinawaSndMotu*"/> </return-value> </constructor> <virtual-method name="notified" version="1.2"> <doc xml:space="preserve" filename="../src/snd_motu.h" - line="47">When Motu models transfer notification, the #HinawaSndMotuClass::notified handler is + line="48">When Motu models transfer notification, the #HinawaSndMotuClass::notified handler is called.</doc> - <source-position filename="../src/snd_motu.h" line="57"/> + <source-position filename="../src/snd_motu.h" line="58"/> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> @@ -3376,13 +3376,50 @@ called.</doc> <instance-parameter name="self" transfer-ownership="none"> <doc xml:space="preserve" filename="../src/snd_motu.h" - line="49">A #HinawaSndMotu</doc> + line="50">A #HinawaSndMotu</doc> <type name="SndMotu" c:type="HinawaSndMotu*"/> </instance-parameter> <parameter name="message" transfer-ownership="none"> <doc xml:space="preserve" filename="../src/snd_motu.h" - line="50">A notification message</doc> + line="51">A notification message</doc> + <type name="guint" c:type="guint"/> + </parameter> + </parameters> + </virtual-method> + <virtual-method name="register_dsp_changed" version="2.4"> + <doc xml:space="preserve" + filename="../src/snd_motu.h" + line="60">When MOTU register DSP models transfer events by messages in the sequence of isochronous +packet, the #HinawaSndMotuClass::register_dsp_changed handle is called. +The event consists of encoded data. The most significant byte is the type of message. The +next two bytes are identifier 0 and 1. The least significant byte is value. The meaning +of identifier 0, 1 and value is decided depending on the type. For detail, see +`sound/firewire/motu/motu-register-dsp-message-parser.c` in Linux kernel.</doc> + <source-position filename="../src/snd_motu.h" line="76"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu.h" + line="62">A #HinawaSndMotu</doc> + <type name="SndMotu" c:type="HinawaSndMotu*"/> + </instance-parameter> + <parameter name="events" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu.h" + line="63">The array with element for + unsigned 32 bit encoded data.</doc> + <array length="1" zero-terminated="0" c:type="const guint32*"> + <type name="guint32"/> + </array> + </parameter> + <parameter name="length" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu.h" + line="65">The length of events.</doc> <type name="guint" c:type="guint"/> </parameter> </parameters> @@ -3393,8 +3430,8 @@ called.</doc> throws="1"> <doc xml:space="preserve" filename="../src/snd_motu.c" - line="69">Open ALSA hwdep character device and check it for Motu devices.</doc> - <source-position filename="../src/snd_motu.h" line="64"/> + line="97">Open ALSA hwdep character device and check it for Motu devices.</doc> + <source-position filename="../src/snd_motu.h" line="83"/> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> @@ -3402,17 +3439,112 @@ called.</doc> <instance-parameter name="self" transfer-ownership="none"> <doc xml:space="preserve" filename="../src/snd_motu.c" - line="71">A #HinawaSndUnit</doc> + line="99">A #HinawaSndUnit</doc> <type name="SndMotu" c:type="HinawaSndMotu*"/> </instance-parameter> <parameter name="path" transfer-ownership="none"> <doc xml:space="preserve" filename="../src/snd_motu.c" - line="72">A full path of a special file for ALSA hwdep character device</doc> + line="100">A full path of a special file for ALSA hwdep character device</doc> <type name="utf8" c:type="gchar*"/> </parameter> </parameters> </method> + <method name="read_command_dsp_meter" + c:identifier="hinawa_snd_motu_read_command_dsp_meter" + version="2.4" + throws="1"> + <doc xml:space="preserve" + filename="../src/snd_motu.c" + line="172">Read data of meter information for command DSP models.</doc> + <source-position filename="../src/snd_motu.h" line="92"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu.c" + line="174">A #HinawaSndMotu</doc> + <type name="SndMotu" c:type="HinawaSndMotu*"/> + </instance-parameter> + <parameter name="meter" + direction="inout" + caller-allocates="0" + transfer-ownership="full"> + <doc xml:space="preserve" + filename="../src/snd_motu.c" + line="175">The data for meter.</doc> + <array zero-terminated="0" + c:type="gfloat* const*" + fixed-size="400"> + <type name="gfloat" c:type="gfloat"/> + </array> + </parameter> + </parameters> + </method> + <method name="read_register_dsp_meter" + c:identifier="hinawa_snd_motu_read_register_dsp_meter" + version="2.4" + throws="1"> + <doc xml:space="preserve" + filename="../src/snd_motu.c" + line="145">Read data of meter information for register DSP models.</doc> + <source-position filename="../src/snd_motu.h" line="89"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu.c" + line="147">A #HinawaSndMotu</doc> + <type name="SndMotu" c:type="HinawaSndMotu*"/> + </instance-parameter> + <parameter name="meter" + direction="inout" + caller-allocates="0" + transfer-ownership="full"> + <doc xml:space="preserve" + filename="../src/snd_motu.c" + line="148">The data of meter. Index 0 to 23 for inputs and index 24 + to 47 for outputs.</doc> + <array zero-terminated="0" c:type="guint8* const*" fixed-size="48"> + <type name="guint8" c:type="guint8"/> + </array> + </parameter> + </parameters> + </method> + <method name="read_register_dsp_parameter" + c:identifier="hinawa_snd_motu_read_register_dsp_parameter" + version="2.4" + throws="1"> + <doc xml:space="preserve" + filename="../src/snd_motu.c" + line="117">Read parameter for register DSP models.</doc> + <source-position filename="../src/snd_motu.h" line="85"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu.c" + line="119">A #HinawaSndMotu.</doc> + <type name="SndMotu" c:type="HinawaSndMotu*"/> + </instance-parameter> + <parameter name="param" + direction="inout" + caller-allocates="0" + transfer-ownership="full"> + <doc xml:space="preserve" + filename="../src/snd_motu.c" + line="120">A #HinawaSndMotuRegisterDspParameter.</doc> + <type name="SndMotuRegisterDspParameter" + c:type="HinawaSndMotuRegisterDspParameter* const*"/> + </parameter> + </parameters> + </method> <field name="parent_instance"> <type name="SndUnit" c:type="HinawaSndUnit"/> </field> @@ -3422,7 +3554,7 @@ called.</doc> <glib:signal name="notified" when="last" version="0.8"> <doc xml:space="preserve" filename="../src/snd_motu.c" - line="31">When Motu models transfer notification, the #HinawaSndMotu::notified signal is + line="33">When Motu models transfer notification, the #HinawaSndMotu::notified signal is generated.</doc> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> @@ -3431,7 +3563,37 @@ generated.</doc> <parameter name="message" transfer-ownership="none"> <doc xml:space="preserve" filename="../src/snd_motu.c" - line="34">A notification message</doc> + line="36">A notification message</doc> + <type name="guint" c:type="guint"/> + </parameter> + </parameters> + </glib:signal> + <glib:signal name="register-dsp-changed" when="last" version="2.4"> + <doc xml:space="preserve" + filename="../src/snd_motu.c" + line="52">When MOTU register DSP models transfer events by messages in the sequence of isochronous +packet, the #HinawaSndMotu::register-dsp-changed signal is emit. +The event consists of encoded data. The most significant byte is the type of message. The +next two bytes are identifier 0 and 1. The least significant byte is value. The meaning +of identifier 0, 1 and value is decided depending on the type. For detail, see +`sound/firewire/motu/motu-register-dsp-message-parser.c` in Linux kernel.</doc> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <parameter name="events" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu.c" + line="55">The array with element for + unsigned 32 bit encoded data.</doc> + <array length="1" zero-terminated="0" c:type="gpointer"> + <type name="guint32"/> + </array> + </parameter> + <parameter name="length" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu.c" + line="57">The length of events.</doc> <type name="guint" c:type="guint"/> </parameter> </parameters> @@ -3440,13 +3602,13 @@ generated.</doc> <record name="SndMotuClass" c:type="HinawaSndMotuClass" glib:is-gtype-struct-for="SndMotu"> - <source-position filename="../src/snd_motu.h" line="58"/> + <source-position filename="../src/snd_motu.h" line="77"/> <field name="parent_class"> <type name="SndUnitClass" c:type="HinawaSndUnitClass"/> </field> <field name="notified"> <callback name="notified"> - <source-position filename="../src/snd_motu.h" line="57"/> + <source-position filename="../src/snd_motu.h" line="58"/> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> @@ -3454,13 +3616,44 @@ generated.</doc> <parameter name="self" transfer-ownership="none"> <doc xml:space="preserve" filename="../src/snd_motu.h" - line="49">A #HinawaSndMotu</doc> + line="50">A #HinawaSndMotu</doc> <type name="SndMotu" c:type="HinawaSndMotu*"/> </parameter> <parameter name="message" transfer-ownership="none"> <doc xml:space="preserve" filename="../src/snd_motu.h" - line="50">A notification message</doc> + line="51">A notification message</doc> + <type name="guint" c:type="guint"/> + </parameter> + </parameters> + </callback> + </field> + <field name="register_dsp_changed"> + <callback name="register_dsp_changed"> + <source-position filename="../src/snd_motu.h" line="76"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu.h" + line="62">A #HinawaSndMotu</doc> + <type name="SndMotu" c:type="HinawaSndMotu*"/> + </parameter> + <parameter name="events" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu.h" + line="63">The array with element for + unsigned 32 bit encoded data.</doc> + <array length="2" zero-terminated="0" c:type="const guint32*"> + <type name="guint32"/> + </array> + </parameter> + <parameter name="length" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu.h" + line="65">The length of events.</doc> <type name="guint" c:type="guint"/> </parameter> </parameters> @@ -3468,7 +3661,531 @@ generated.</doc> </field> </record> <record name="SndMotuPrivate" c:type="HinawaSndMotuPrivate" disguised="1"> - <source-position filename="../src/snd_motu.h" line="36"/> + <source-position filename="../src/snd_motu.h" line="37"/> + </record> + <record name="SndMotuRegisterDspParameter" + c:type="HinawaSndMotuRegisterDspParameter" + glib:type-name="HinawaSndMotuRegisterDspParameter" + glib:get-type="hinawa_snd_motu_register_dsp_parameter_get_type" + c:symbol-prefix="snd_motu_register_dsp_parameter"> + <source-position filename="../src/snd_motu_register_dsp_parameter.h" + line="19"/> + <field name="parameter" readable="0" private="1"> + <array zero-terminated="0" fixed-size="512"> + <type name="guint8" c:type="guint8"/> + </array> + </field> + <constructor name="new" + c:identifier="hinawa_snd_motu_register_dsp_parameter_new" + version="2.4"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="28">Instantiate #HinawaSndMotuRegisterDspParameter object and return the instance.</doc> + <source-position filename="../src/snd_motu_register_dsp_parameter.h" + line="23"/> + <return-value transfer-ownership="full"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="33">an instance of #HinawaSndMotuRegisterDspParameter.</doc> + <type name="SndMotuRegisterDspParameter" + c:type="HinawaSndMotuRegisterDspParameter*"/> + </return-value> + </constructor> + <method name="get_headphone_output_paired_assignment" + c:identifier="hinawa_snd_motu_register_dsp_parameter_get_headphone_output_paired_assignment"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="244">Get the array with elements for the data of paired headphone output source. The data has index +value of source.</doc> + <source-position filename="../src/snd_motu_register_dsp_parameter.h" + line="52"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="246">A #HinawaSndMotuRegisterDspParameter.</doc> + <type name="SndMotuRegisterDspParameter" + c:type="const HinawaSndMotuRegisterDspParameter*"/> + </instance-parameter> + <parameter name="assignment" + direction="out" + caller-allocates="0" + transfer-ownership="full"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="247">The value of paired headphone assignment.</doc> + <type name="guint8" c:type="guint8*"/> + </parameter> + </parameters> + </method> + <method name="get_headphone_output_paired_volume" + c:identifier="hinawa_snd_motu_register_dsp_parameter_get_headphone_output_paired_volume"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="224">Get the array with elements for the data of paired headphone output volume. The data has volume +value between 0x00 and 0x80.</doc> + <source-position filename="../src/snd_motu_register_dsp_parameter.h" + line="49"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="226">A #HinawaSndMotuRegisterDspParameter.</doc> + <type name="SndMotuRegisterDspParameter" + c:type="const HinawaSndMotuRegisterDspParameter*"/> + </instance-parameter> + <parameter name="volume" + direction="out" + caller-allocates="0" + transfer-ownership="full"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="227">The value of paired headphone output.</doc> + <type name="guint8" c:type="guint8*"/> + </parameter> + </parameters> + </method> + <method name="get_input_flag" + c:identifier="hinawa_snd_motu_register_dsp_parameter_get_input_flag"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="333">Get the array with elements for the data of input flags. The data consists of bit flags below: + +- 0x01: whether to make paired input +- 0x02: whether to enable phantom powering +- 0x04: whether to enable attenuation pad +- 0x08: whether to detect plug insert to jack</doc> + <source-position filename="../src/snd_motu_register_dsp_parameter.h" + line="64"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="335">A #HinawaSndMotuRegisterDspParameter.</doc> + <type name="SndMotuRegisterDspParameter" + c:type="const HinawaSndMotuRegisterDspParameter*"/> + </instance-parameter> + <parameter name="flag" + direction="out" + caller-allocates="0" + transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="336">The array with elements for the data of input + flags.</doc> + <array zero-terminated="0" c:type="const guint8**" fixed-size="10"> + <type name="guint8" c:type="guint8"/> + </array> + </parameter> + </parameters> + </method> + <method name="get_input_gain_and_invert" + c:identifier="hinawa_snd_motu_register_dsp_parameter_get_input_gain_and_invert"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="305">Get the array with elements for input gain and invert flags. The interpretation of data is +different in below two groups: + +- Ultralite + - 0x1f: the gain. + - 0x20: whether to invert phase of the input +- Audio Express and 4 pre + - 0x3f: the gain + - 0x40: whether to invert phase of the input</doc> + <source-position filename="../src/snd_motu_register_dsp_parameter.h" + line="61"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="307">A #HinawaSndMotuRegisterDspParameter.</doc> + <type name="SndMotuRegisterDspParameter" + c:type="const HinawaSndMotuRegisterDspParameter*"/> + </instance-parameter> + <parameter name="gain_and_invert" + direction="out" + caller-allocates="0" + transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="308">The array with elements for the data + of input gain and invert flags.</doc> + <array zero-terminated="0" c:type="const guint8**" fixed-size="10"> + <type name="guint8" c:type="guint8"/> + </array> + </parameter> + </parameters> + </method> + <method name="get_line_input_boost_flag" + c:identifier="hinawa_snd_motu_register_dsp_parameter_get_line_input_boost_flag"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="264">Get the data for flags of line input boost. The data consists of bit flags for corresponding line +input channel. When the flag stands, the input is boosted.</doc> + <source-position filename="../src/snd_motu_register_dsp_parameter.h" + line="55"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="266">A #HinawaSndMotuRegisterDspParameter.</doc> + <type name="SndMotuRegisterDspParameter" + c:type="const HinawaSndMotuRegisterDspParameter*"/> + </instance-parameter> + <parameter name="boost_flag" + direction="out" + caller-allocates="0" + transfer-ownership="full"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="267">The flag of boost for line input.</doc> + <type name="guint8" c:type="guint8*"/> + </parameter> + </parameters> + </method> + <method name="get_line_input_nominal_level_flag" + c:identifier="hinawa_snd_motu_register_dsp_parameter_get_line_input_nominal_level_flag"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="284">Get the data for flags of line input nominal level. The data consists of bit flags for +corresponding line input channel. When the flag stands, the nominal level of input is +4 dBu, +else -10 dBV.</doc> + <source-position filename="../src/snd_motu_register_dsp_parameter.h" + line="58"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="286">A #HinawaSndMotuRegisterDspParameter.</doc> + <type name="SndMotuRegisterDspParameter" + c:type="const HinawaSndMotuRegisterDspParameter*"/> + </instance-parameter> + <parameter name="nominal_level_flag" + direction="out" + caller-allocates="0" + transfer-ownership="full"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="287">The flag of boost for line input.</doc> + <type name="guint8" c:type="guint8*"/> + </parameter> + </parameters> + </method> + <method name="get_main_output_paired_volume" + c:identifier="hinawa_snd_motu_register_dsp_parameter_get_main_output_paired_volume"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="204">Get the array with elements for the data of paired main output volume. The data has volume value +between 0x00 and 0x80.</doc> + <source-position filename="../src/snd_motu_register_dsp_parameter.h" + line="46"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="206">A #HinawaSndMotuRegisterDspParameter.</doc> + <type name="SndMotuRegisterDspParameter" + c:type="const HinawaSndMotuRegisterDspParameter*"/> + </instance-parameter> + <parameter name="volume" + direction="out" + caller-allocates="0" + transfer-ownership="full"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="207">The value of paired main output.</doc> + <type name="guint8" c:type="guint8*"/> + </parameter> + </parameters> + </method> + <method name="get_mixer_output_paired_flag" + c:identifier="hinawa_snd_motu_register_dsp_parameter_get_mixer_output_paired_flag"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="180">Get the array with elements for the data of paired output flags in indicated mixer. The data +consists of bit flags and masks below: + + - 0x0f: the mask for destination of paired output + - 0x10: whether to enable mute for paired output</doc> + <source-position filename="../src/snd_motu_register_dsp_parameter.h" + line="43"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="182">A #HinawaSndMotuRegisterDspParameter.</doc> + <type name="SndMotuRegisterDspParameter" + c:type="const HinawaSndMotuRegisterDspParameter*"/> + </instance-parameter> + <parameter name="flag" + direction="out" + caller-allocates="0" + transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="183">The array with elements for the data of paired + output flag.</doc> + <array zero-terminated="0" c:type="const guint8**" fixed-size="4"> + <type name="guint8" c:type="guint8"/> + </array> + </parameter> + </parameters> + </method> + <method name="get_mixer_output_paired_volume" + c:identifier="hinawa_snd_motu_register_dsp_parameter_get_mixer_output_paired_volume"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="159">Get the array with elements for the data of paired output volume in indicated mixer. The data +has gain value between 0x00 and 0x80.</doc> + <source-position filename="../src/snd_motu_register_dsp_parameter.h" + line="40"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="161">A #HinawaSndMotuRegisterDspParameter.</doc> + <type name="SndMotuRegisterDspParameter" + c:type="const HinawaSndMotuRegisterDspParameter*"/> + </instance-parameter> + <parameter name="volume" + direction="out" + caller-allocates="0" + transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="162">The array with elements for the data of + paired output volume.</doc> + <array zero-terminated="0" c:type="const guint8**" fixed-size="4"> + <type name="guint8" c:type="guint8"/> + </array> + </parameter> + </parameters> + </method> + <method name="get_mixer_source_flag" + c:identifier="hinawa_snd_motu_register_dsp_parameter_get_mixer_source_flag"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="87">Get the array with elements for the data of source flags in indicated mixer. The data consists of +bit flags below: + + - 0x01: whether to enable mute function for the source. + - 0x02: whether to enable solo function for the source.</doc> + <source-position filename="../src/snd_motu_register_dsp_parameter.h" + line="31"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="89">A #HinawaSndMotuRegisterDspParameter.</doc> + <type name="SndMotuRegisterDspParameter" + c:type="const HinawaSndMotuRegisterDspParameter*"/> + </instance-parameter> + <parameter name="mixer" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="90">the numeric index of mixer, up to 4.</doc> + <type name="gsize" c:type="gsize"/> + </parameter> + <parameter name="flag" + direction="out" + caller-allocates="0" + transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="91">The array with elements for the data of source + flag.</doc> + <array zero-terminated="0" c:type="const guint8**" fixed-size="20"> + <type name="guint8" c:type="guint8"/> + </array> + </parameter> + </parameters> + </method> + <method name="get_mixer_source_gain" + c:identifier="hinawa_snd_motu_register_dsp_parameter_get_mixer_source_gain"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="41">Get the array with elements for the data of source gains in indicated mixer. The data has gain +value between 0x00 and 0x80.</doc> + <source-position filename="../src/snd_motu_register_dsp_parameter.h" + line="25"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="43">A #HinawaSndMotuRegisterDspParameter.</doc> + <type name="SndMotuRegisterDspParameter" + c:type="const HinawaSndMotuRegisterDspParameter*"/> + </instance-parameter> + <parameter name="mixer" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="44">the numeric index of mixer, up to 4.</doc> + <type name="gsize" c:type="gsize"/> + </parameter> + <parameter name="gain" + direction="out" + caller-allocates="0" + transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="45">The array with elements for the data of source + gains.</doc> + <array zero-terminated="0" c:type="const guint8**" fixed-size="20"> + <type name="guint8" c:type="guint8"/> + </array> + </parameter> + </parameters> + </method> + <method name="get_mixer_source_paired_balance" + c:identifier="hinawa_snd_motu_register_dsp_parameter_get_mixer_source_paired_balance"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="113">Get the array with elements for the data of paired source L/R balance in indicated mixer. The +data has L/R balance value between 0x00 and 0x80.</doc> + <source-position filename="../src/snd_motu_register_dsp_parameter.h" + line="34"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="115">A #HinawaSndMotuRegisterDspParameter.</doc> + <type name="SndMotuRegisterDspParameter" + c:type="const HinawaSndMotuRegisterDspParameter*"/> + </instance-parameter> + <parameter name="mixer" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="116">the numeric index of mixer, up to 4.</doc> + <type name="gsize" c:type="gsize"/> + </parameter> + <parameter name="balance" + direction="out" + caller-allocates="0" + transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="117">The array with elements for the data of + paired source L/R balance.</doc> + <array zero-terminated="0" c:type="const guint8**" fixed-size="20"> + <type name="guint8" c:type="guint8"/> + </array> + </parameter> + </parameters> + </method> + <method name="get_mixer_source_paired_width" + c:identifier="hinawa_snd_motu_register_dsp_parameter_get_mixer_source_paired_width"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="136">Get the array with elements for the data of paired source width in indicated mixer. The data +has width value between 0x00 and 0x80.</doc> + <source-position filename="../src/snd_motu_register_dsp_parameter.h" + line="37"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="138">A #HinawaSndMotuRegisterDspParameter.</doc> + <type name="SndMotuRegisterDspParameter" + c:type="const HinawaSndMotuRegisterDspParameter*"/> + </instance-parameter> + <parameter name="mixer" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="139">the numeric index of mixer, up to 4.</doc> + <type name="gsize" c:type="gsize"/> + </parameter> + <parameter name="width" + direction="out" + caller-allocates="0" + transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="140">The array with elements for the data of + paired source width.</doc> + <array zero-terminated="0" c:type="const guint8**" fixed-size="20"> + <type name="guint8" c:type="guint8"/> + </array> + </parameter> + </parameters> + </method> + <method name="get_mixer_source_pan" + c:identifier="hinawa_snd_motu_register_dsp_parameter_get_mixer_source_pan"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="64">Get the array with elements for the data of source pans in indicated mixer. The data has pan +value between 0x00 and 0x80.</doc> + <source-position filename="../src/snd_motu_register_dsp_parameter.h" + line="28"/> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="66">A #HinawaSndMotuRegisterDspParameter.</doc> + <type name="SndMotuRegisterDspParameter" + c:type="const HinawaSndMotuRegisterDspParameter*"/> + </instance-parameter> + <parameter name="mixer" transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="67">the numeric index of mixer, up to 4.</doc> + <type name="gsize" c:type="gsize"/> + </parameter> + <parameter name="pan" + direction="out" + caller-allocates="0" + transfer-ownership="none"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="68">The array with elements for the data of source + pan.</doc> + <array zero-terminated="0" c:type="const guint8**" fixed-size="20"> + <type name="guint8" c:type="guint8"/> + </array> + </parameter> + </parameters> + </method> </record> <class name="SndTscm" c:symbol-prefix="snd_tscm" @@ -3732,7 +4449,7 @@ handler is called.</doc> throws="1"> <doc xml:space="preserve" filename="../src/snd_unit.c" - line="603">Create Gsource for GMainContext to dispatch events for the sound device.</doc> + line="595">Create Gsource for GMainContext to dispatch events for the sound device.</doc> <source-position filename="../src/snd_unit.h" line="88"/> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> @@ -3741,7 +4458,7 @@ handler is called.</doc> <instance-parameter name="self" transfer-ownership="none"> <doc xml:space="preserve" filename="../src/snd_unit.c" - line="605">A #HinawaSndUnit.</doc> + line="597">A #HinawaSndUnit.</doc> <type name="SndUnit" c:type="HinawaSndUnit*"/> </instance-parameter> <parameter name="gsrc" @@ -3750,7 +4467,7 @@ handler is called.</doc> transfer-ownership="full"> <doc xml:space="preserve" filename="../src/snd_unit.c" - line="606">A #GSource.</doc> + line="598">A #GSource.</doc> <type name="GLib.Source" c:type="GSource**"/> </parameter> </parameters> @@ -3760,7 +4477,7 @@ handler is called.</doc> version="2.0."> <doc xml:space="preserve" filename="../src/snd_unit.c" - line="355">Retrieve an instance of #HinawaFwNode associated to the given unit.</doc> + line="345">Retrieve an instance of #HinawaFwNode associated to the given unit.</doc> <source-position filename="../src/snd_unit.h" line="83"/> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> @@ -3769,7 +4486,7 @@ handler is called.</doc> <instance-parameter name="self" transfer-ownership="none"> <doc xml:space="preserve" filename="../src/snd_unit.c" - line="357">A #HinawaSndUnit.</doc> + line="347">A #HinawaSndUnit.</doc> <type name="SndUnit" c:type="HinawaSndUnit*"/> </instance-parameter> <parameter name="node" @@ -3778,7 +4495,7 @@ handler is called.</doc> transfer-ownership="none"> <doc xml:space="preserve" filename="../src/snd_unit.c" - line="358">A #HinawaFwNode.</doc> + line="348">A #HinawaFwNode.</doc> <type name="FwNode" c:type="HinawaFwNode**"/> </parameter> </parameters> @@ -3789,7 +4506,7 @@ handler is called.</doc> throws="1"> <doc xml:space="preserve" filename="../src/snd_unit.c" - line="376">Disallow ALSA to start kernel-streaming.</doc> + line="366">Disallow ALSA to start kernel-streaming.</doc> <source-position filename="../src/snd_unit.h" line="85"/> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> @@ -3798,7 +4515,7 @@ handler is called.</doc> <instance-parameter name="self" transfer-ownership="none"> <doc xml:space="preserve" filename="../src/snd_unit.c" - line="378">A #HinawaSndUnit</doc> + line="368">A #HinawaSndUnit</doc> <type name="SndUnit" c:type="HinawaSndUnit*"/> </instance-parameter> </parameters> @@ -3835,7 +4552,7 @@ handler is called.</doc> throws="1"> <doc xml:space="preserve" filename="../src/snd_unit.c" - line="408">Allow ALSA to start kernel-streaming.</doc> + line="398">Allow ALSA to start kernel-streaming.</doc> <source-position filename="../src/snd_unit.h" line="86"/> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> @@ -3844,7 +4561,7 @@ handler is called.</doc> <instance-parameter name="self" transfer-ownership="none"> <doc xml:space="preserve" filename="../src/snd_unit.c" - line="410">A #HinawaSndUnit</doc> + line="400">A #HinawaSndUnit</doc> <type name="SndUnit" c:type="HinawaSndUnit*"/> </instance-parameter> </parameters> @@ -4421,9 +5138,15 @@ This inherits #HinawaSndUnit.</doc> <docsection name="snd_motu"> <doc xml:space="preserve" filename="../src/snd_motu.c" - line="7">A #HinawaSndMotu is an application of asynchronous notification defined by + line="8">A #HinawaSndMotu is an application of asynchronous notification defined by Mark of the Unicorn (MOTU). This inherits #HinawaSndUnit.</doc> </docsection> + <docsection name="snd_motu_register_dsp_parameter"> + <doc xml:space="preserve" + filename="../src/snd_motu_register_dsp_parameter.c" + line="4">A #HinawaSndMotuRegisterDspParameter is a boxed object for container of parameter in register +DSP model.</doc> + </docsection> <docsection name="snd_tscm"> <doc xml:space="preserve" filename="../src/snd_tscm.c" @@ -2,15 +2,15 @@ hinawa Rust bindings ==================== -2020/08/24 +2021/11/17 Takashi Sakamoto Introduction ============ -* This repository includes FFI and API bindings for ``libhinawa 2`` which produces ``Hinawa-3.0.gir``. +* This repository includes FFI and API bindings for ``libhinawa 2`` which provides ``Hinawa-3.0.gir``. - * https://github.com/takaswie/libhinawa + * https://github.com/alsa-project/libhinawa * Unfortunately, it includes no support for ``libhinawa 1`` or former (``Hinawa-2.0.gir`` or ``Hinawa-1.0.gir``). diff --git a/conf/gir-hinawa-sys.toml b/conf/gir-hinawa-sys.toml index 4114223..8364af6 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.3" +min_cfg_version = "2.4" single_version_file = "." external_libraries = [ "GLib", diff --git a/conf/gir-hinawa.toml b/conf/gir-hinawa.toml index 54ffed7..1bfbe75 100644 --- a/conf/gir-hinawa.toml +++ b/conf/gir-hinawa.toml @@ -16,7 +16,6 @@ generate = [ "Hinawa.SndDiceError", "Hinawa.SndEfwStatus", "Hinawa.SndDice", - "Hinawa.SndMotu", "Hinawa.SndDg00x", ] @@ -125,3 +124,64 @@ manual_traits = ["SndTscmExtManual"] pattern = "get_state" ignore = true doc_trait_name = "SndTscmExtManual" + +[[object]] +name = "Hinawa.SndMotu" +status = "generate" +manual_traits = ["SndMotuExtManual"] + [[object.signal]] + pattern = "register-dsp-changed" + ignore = true + [[object.function]] + pattern = "read_register_dsp_parameter" + ignore = true + doc_trait_name = "SndMotuExtManual" + [[object.function]] + pattern = "read_register_dsp_meter" + ignore = true + doc_trait_name = "SndMotuExtManual" + [[object.function]] + pattern = "read_command_dsp_meter" + ignore = true + doc_trait_name = "SndMotuExtManual" + +[[object]] +name = "Hinawa.SndMotuRegisterDspParameter" +status = "generate" +manual_traits = ["SndMotuRegisterDspParameterExtManual"] + [[object.function]] + pattern = "get_input_flag" + ignore = true + doc_trait_name = "SndMotuRegisterDspParameterExtManual" + [[object.function]] + pattern = "get_input_gain_and_invert" + ignore = true + doc_trait_name = "SndMotuRegisterDspParameterExtManual" + [[object.function]] + pattern = "get_mixer_output_paired_flag" + ignore = true + doc_trait_name = "SndMotuRegisterDspParameterExtManual" + [[object.function]] + pattern = "get_mixer_output_paired_volume" + ignore = true + doc_trait_name = "SndMotuRegisterDspParameterExtManual" + [[object.function]] + pattern = "get_mixer_source_flag" + ignore = true + doc_trait_name = "SndMotuRegisterDspParameterExtManual" + [[object.function]] + pattern = "get_mixer_source_gain" + ignore = true + doc_trait_name = "SndMotuRegisterDspParameterExtManual" + [[object.function]] + pattern = "get_mixer_source_paired_balance" + ignore = true + doc_trait_name = "SndMotuRegisterDspParameterExtManual" + [[object.function]] + pattern = "get_mixer_source_paired_width" + ignore = true + doc_trait_name = "SndMotuRegisterDspParameterExtManual" + [[object.function]] + pattern = "get_mixer_source_pan" + ignore = true + doc_trait_name = "SndMotuRegisterDspParameterExtManual" diff --git a/hinawa-sys/Cargo.toml b/hinawa-sys/Cargo.toml index edb51de..9f30cf6 100644 --- a/hinawa-sys/Cargo.toml +++ b/hinawa-sys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hinawa-sys" -version = "0.4.0" +version = "0.5.0" description = "FFI bindings for libhinawa2 library" authors = ["Takashi Sakamoto <o-takashi@sakamocchi.jp>"] links = "hinawa" @@ -11,12 +11,13 @@ repository = "https://github.com/alsa-project/hinawa-rs/" features = ["dox"] [package.metadata.system-deps.hinawa] name = "hinawa" -version = "2.3" +version = "2.4" [package.metadata.system-deps.hinawa.feature-versions] v2_1 = "2.1" v2_2 = "2.2" v2_3 = "2.3" +v2_4 = "2.4" [lib] name = "hinawa_sys" @@ -39,3 +40,4 @@ dox = [] v2_1 = [] v2_2 = [] v2_3 = [] +v2_4 = [] diff --git a/hinawa-sys/src/lib.rs b/hinawa-sys/src/lib.rs index 302dd19..04a2a9f 100644 --- a/hinawa-sys/src/lib.rs +++ b/hinawa-sys/src/lib.rs @@ -260,6 +260,7 @@ pub type HinawaSndEfwPrivate = *mut _HinawaSndEfwPrivate; pub struct HinawaSndMotuClass { pub parent_class: HinawaSndUnitClass, pub notified: Option<unsafe extern "C" fn(*mut HinawaSndMotu, c_uint)>, + pub register_dsp_changed: Option<unsafe extern "C" fn(*mut HinawaSndMotu, *const u32, c_uint)>, } impl ::std::fmt::Debug for HinawaSndMotuClass { @@ -267,6 +268,7 @@ impl ::std::fmt::Debug for HinawaSndMotuClass { f.debug_struct(&format!("HinawaSndMotuClass @ {:?}", self as *const _)) .field("parent_class", &self.parent_class) .field("notified", &self.notified) + .field("register_dsp_changed", &self.register_dsp_changed) .finish() } } @@ -278,6 +280,19 @@ pub type HinawaSndMotuPrivate = *mut _HinawaSndMotuPrivate; #[repr(C)] #[derive(Copy, Clone)] +pub struct HinawaSndMotuRegisterDspParameter { + pub parameter: [u8; 512], +} + +impl ::std::fmt::Debug for HinawaSndMotuRegisterDspParameter { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("HinawaSndMotuRegisterDspParameter @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] pub struct HinawaSndTscmClass { pub parent_class: HinawaSndUnitClass, pub control: Option<unsafe extern "C" fn(*mut HinawaSndTscm, c_uint, c_uint, c_uint)>, @@ -532,6 +547,26 @@ extern "C" { pub fn hinawa_snd_unit_type_get_type() -> GType; //========================================================================= + // HinawaSndMotuRegisterDspParameter + //========================================================================= + pub fn hinawa_snd_motu_register_dsp_parameter_get_type() -> GType; + pub fn hinawa_snd_motu_register_dsp_parameter_new() -> *mut HinawaSndMotuRegisterDspParameter; + pub fn hinawa_snd_motu_register_dsp_parameter_get_headphone_output_paired_assignment(self_: *const HinawaSndMotuRegisterDspParameter, assignment: *mut u8); + pub fn hinawa_snd_motu_register_dsp_parameter_get_headphone_output_paired_volume(self_: *const HinawaSndMotuRegisterDspParameter, volume: *mut u8); + pub fn hinawa_snd_motu_register_dsp_parameter_get_input_flag(self_: *const HinawaSndMotuRegisterDspParameter, flag: *mut *const [u8; 10]); + pub fn hinawa_snd_motu_register_dsp_parameter_get_input_gain_and_invert(self_: *const HinawaSndMotuRegisterDspParameter, gain_and_invert: *mut *const [u8; 10]); + pub fn hinawa_snd_motu_register_dsp_parameter_get_line_input_boost_flag(self_: *const HinawaSndMotuRegisterDspParameter, boost_flag: *mut u8); + pub fn hinawa_snd_motu_register_dsp_parameter_get_line_input_nominal_level_flag(self_: *const HinawaSndMotuRegisterDspParameter, nominal_level_flag: *mut u8); + pub fn hinawa_snd_motu_register_dsp_parameter_get_main_output_paired_volume(self_: *const HinawaSndMotuRegisterDspParameter, volume: *mut u8); + pub fn hinawa_snd_motu_register_dsp_parameter_get_mixer_output_paired_flag(self_: *const HinawaSndMotuRegisterDspParameter, flag: *mut *const [u8; 4]); + pub fn hinawa_snd_motu_register_dsp_parameter_get_mixer_output_paired_volume(self_: *const HinawaSndMotuRegisterDspParameter, volume: *mut *const [u8; 4]); + pub fn hinawa_snd_motu_register_dsp_parameter_get_mixer_source_flag(self_: *const HinawaSndMotuRegisterDspParameter, mixer: size_t, flag: *mut *const [u8; 20]); + pub fn hinawa_snd_motu_register_dsp_parameter_get_mixer_source_gain(self_: *const HinawaSndMotuRegisterDspParameter, mixer: size_t, gain: *mut *const [u8; 20]); + pub fn hinawa_snd_motu_register_dsp_parameter_get_mixer_source_paired_balance(self_: *const HinawaSndMotuRegisterDspParameter, mixer: size_t, balance: *mut *const [u8; 20]); + pub fn hinawa_snd_motu_register_dsp_parameter_get_mixer_source_paired_width(self_: *const HinawaSndMotuRegisterDspParameter, mixer: size_t, width: *mut *const [u8; 20]); + pub fn hinawa_snd_motu_register_dsp_parameter_get_mixer_source_pan(self_: *const HinawaSndMotuRegisterDspParameter, mixer: size_t, pan: *mut *const [u8; 20]); + + //========================================================================= // HinawaFwFcp //========================================================================= pub fn hinawa_fw_fcp_get_type() -> GType; @@ -604,6 +639,9 @@ extern "C" { pub fn hinawa_snd_motu_get_type() -> GType; pub fn hinawa_snd_motu_new() -> *mut HinawaSndMotu; pub fn hinawa_snd_motu_open(self_: *mut HinawaSndMotu, path: *mut c_char, error: *mut *mut glib::GError); + pub fn hinawa_snd_motu_read_command_dsp_meter(self_: *mut HinawaSndMotu, meter: *const *mut [c_float; 400], error: *mut *mut glib::GError); + pub fn hinawa_snd_motu_read_register_dsp_meter(self_: *mut HinawaSndMotu, meter: *const *mut [u8; 48], error: *mut *mut glib::GError); + pub fn hinawa_snd_motu_read_register_dsp_parameter(self_: *mut HinawaSndMotu, param: *const *mut HinawaSndMotuRegisterDspParameter, error: *mut *mut glib::GError); //========================================================================= // HinawaSndTscm diff --git a/hinawa-sys/tests/abi.rs b/hinawa-sys/tests/abi.rs index 0b225e4..bfaf29a 100644 --- a/hinawa-sys/tests/abi.rs +++ b/hinawa-sys/tests/abi.rs @@ -262,6 +262,7 @@ const RUST_LAYOUTS: &[(&str, Layout)] = &[ ("HinawaSndEfwStatus", Layout {size: size_of::<HinawaSndEfwStatus>(), alignment: align_of::<HinawaSndEfwStatus>()}), ("HinawaSndMotu", Layout {size: size_of::<HinawaSndMotu>(), alignment: align_of::<HinawaSndMotu>()}), ("HinawaSndMotuClass", Layout {size: size_of::<HinawaSndMotuClass>(), alignment: align_of::<HinawaSndMotuClass>()}), + ("HinawaSndMotuRegisterDspParameter", Layout {size: size_of::<HinawaSndMotuRegisterDspParameter>(), alignment: align_of::<HinawaSndMotuRegisterDspParameter>()}), ("HinawaSndTscm", Layout {size: size_of::<HinawaSndTscm>(), alignment: align_of::<HinawaSndTscm>()}), ("HinawaSndTscmClass", Layout {size: size_of::<HinawaSndTscmClass>(), alignment: align_of::<HinawaSndTscmClass>()}), ("HinawaSndUnit", Layout {size: size_of::<HinawaSndUnit>(), alignment: align_of::<HinawaSndUnit>()}), diff --git a/hinawa/Cargo.toml b/hinawa/Cargo.toml index 0a0e557..4811a68 100644 --- a/hinawa/Cargo.toml +++ b/hinawa/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hinawa" -version = "0.4.0" +version = "0.5.0" description = "API bindings for libhinawa2 library" authors = ["Takashi Sakamoto <o-takashi@sakamocchi.jp>"] license = "MIT" @@ -16,7 +16,7 @@ glib = "0.10" glib-sys = "0.10" gobject-sys = "0.10" -hinawa-sys = { path = "../hinawa-sys", version = "0.4" } +hinawa-sys = { path = "../hinawa-sys", version = "0.5" } [dev-dependencies] gir-format-check = "^0.1" diff --git a/hinawa/src/auto/mod.rs b/hinawa/src/auto/mod.rs index ba0e4a0..fd50688 100644 --- a/hinawa/src/auto/mod.rs +++ b/hinawa/src/auto/mod.rs @@ -42,6 +42,9 @@ mod snd_unit; pub use self::snd_unit::{SndUnit, SndUnitClass, NONE_SND_UNIT}; pub use self::snd_unit::SndUnitExt; +mod snd_motu_register_dsp_parameter; +pub use self::snd_motu_register_dsp_parameter::SndMotuRegisterDspParameter; + mod enums; pub use self::enums::FwFcpError; pub use self::enums::FwNodeError; diff --git a/hinawa/src/auto/snd_motu_register_dsp_parameter.rs b/hinawa/src/auto/snd_motu_register_dsp_parameter.rs new file mode 100644 index 0000000..6766b71 --- /dev/null +++ b/hinawa/src/auto/snd_motu_register_dsp_parameter.rs @@ -0,0 +1,78 @@ +// This file was generated by gir (https://github.com/gtk-rs/gir) +// from gir-files (https://github.com/gtk-rs/gir-files) +// DO NOT EDIT + +use glib::translate::*; +use gobject_sys; +use hinawa_sys; +use std::mem; + +glib_wrapper! { + #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] + pub struct SndMotuRegisterDspParameter(Boxed<hinawa_sys::HinawaSndMotuRegisterDspParameter>); + + match fn { + copy => |ptr| gobject_sys::g_boxed_copy(hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_type(), ptr as *mut _) as *mut hinawa_sys::HinawaSndMotuRegisterDspParameter, + free => |ptr| gobject_sys::g_boxed_free(hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_type(), ptr as *mut _), + get_type => || hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_type(), + } +} + +impl SndMotuRegisterDspParameter { + pub fn new() -> SndMotuRegisterDspParameter { + unsafe { + from_glib_full(hinawa_sys::hinawa_snd_motu_register_dsp_parameter_new()) + } + } + + pub fn get_headphone_output_paired_assignment(&self) -> u8 { + unsafe { + let mut assignment = mem::MaybeUninit::uninit(); + hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_headphone_output_paired_assignment(self.to_glib_none().0, assignment.as_mut_ptr()); + let assignment = assignment.assume_init(); + assignment + } + } + + pub fn get_headphone_output_paired_volume(&self) -> u8 { + unsafe { + let mut volume = mem::MaybeUninit::uninit(); + hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_headphone_output_paired_volume(self.to_glib_none().0, volume.as_mut_ptr()); + let volume = volume.assume_init(); + volume + } + } + + pub fn get_line_input_boost_flag(&self) -> u8 { + unsafe { + let mut boost_flag = mem::MaybeUninit::uninit(); + hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_line_input_boost_flag(self.to_glib_none().0, boost_flag.as_mut_ptr()); + let boost_flag = boost_flag.assume_init(); + boost_flag + } + } + + pub fn get_line_input_nominal_level_flag(&self) -> u8 { + unsafe { + let mut nominal_level_flag = mem::MaybeUninit::uninit(); + hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_line_input_nominal_level_flag(self.to_glib_none().0, nominal_level_flag.as_mut_ptr()); + let nominal_level_flag = nominal_level_flag.assume_init(); + nominal_level_flag + } + } + + pub fn get_main_output_paired_volume(&self) -> u8 { + unsafe { + let mut volume = mem::MaybeUninit::uninit(); + hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_main_output_paired_volume(self.to_glib_none().0, volume.as_mut_ptr()); + let volume = volume.assume_init(); + volume + } + } +} + +impl Default for SndMotuRegisterDspParameter { + fn default() -> Self { + Self::new() + } +} diff --git a/hinawa/src/lib.rs b/hinawa/src/lib.rs index f836511..fb0da0f 100644 --- a/hinawa/src/lib.rs +++ b/hinawa/src/lib.rs @@ -33,3 +33,9 @@ pub use snd_tscm::*; mod enums; pub use enums::*; + +mod snd_motu; +pub use snd_motu::*; + +mod snd_motu_register_dsp_parameter; +pub use snd_motu_register_dsp_parameter::*; diff --git a/hinawa/src/snd_motu.rs b/hinawa/src/snd_motu.rs new file mode 100644 index 0000000..b65d349 --- /dev/null +++ b/hinawa/src/snd_motu.rs @@ -0,0 +1,109 @@ +// 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 SndMotu; +use SndMotuRegisterDspParameter; + +pub trait SndMotuExtManual { + fn read_register_dsp_parameter(&self, param: &mut SndMotuRegisterDspParameter) -> Result<(), glib::Error>; + fn read_register_dsp_meter(&self, meter: &mut [u8; 48]) -> Result<(), glib::Error>; + fn read_command_dsp_meter(&self, meter: &mut [f32; 400]) -> Result<(), glib::Error>; + fn connect_register_dsp_changed<F: Fn(&Self, &[u32]) + 'static>(&self, f: F) -> SignalHandlerId; +} + +impl<O: IsA<SndMotu>> SndMotuExtManual for O { + fn read_register_dsp_parameter( + &self, + param: &mut SndMotuRegisterDspParameter + ) -> Result<(), glib::Error> { + unsafe { + let mut error = std::ptr::null_mut(); + + hinawa_sys::hinawa_snd_motu_read_register_dsp_parameter( + self.as_ref().to_glib_none().0, + ¶m.to_glib_none_mut().0, + &mut error + ); + + if error.is_null() { + Ok(()) + } else { + Err(from_glib_full(error)) + } + } + } + + fn read_register_dsp_meter(&self, meter: &mut [u8; 48]) -> Result<(), glib::Error> { + unsafe { + let ptr: *mut [u8; 48] = meter; + let mut error = std::ptr::null_mut(); + + hinawa_sys::hinawa_snd_motu_read_register_dsp_meter( + self.as_ref().to_glib_none().0, + &ptr, + &mut error + ); + + if error.is_null() { + Ok(()) + } else { + Err(from_glib_full(error)) + } + } + } + + fn read_command_dsp_meter(&self, meter: &mut [f32; 400]) -> Result<(), glib::Error> { + unsafe { + let ptr: *mut [f32; 400] = meter; + let mut error = std::ptr::null_mut(); + + hinawa_sys::hinawa_snd_motu_read_command_dsp_meter( + self.as_ref().to_glib_none().0, + &ptr, + &mut error + ); + + if error.is_null() { + Ok(()) + } else { + Err(from_glib_full(error)) + } + } + } + + fn connect_register_dsp_changed<F>(&self, f: F) -> SignalHandlerId + where F: Fn(&Self, &[u32]) + 'static, + { + unsafe extern "C" fn register_dsp_changed_trampoline<P, F>( + this: *mut hinawa_sys::HinawaSndMotu, + events: *const u32, + length: libc::c_uint, + f: glib_sys::gpointer + ) + where P: IsA<SndMotu>, + F: Fn(&P, &[u32]) + 'static, + { + let f: &F = &*(f as *const F); + f( + &SndMotu::from_glib_borrow(this).unsafe_cast_ref(), + std::slice::from_raw_parts(events, length as usize) + ) + } + unsafe { + let f: std::boxed::Box<F> = std::boxed::Box::new(f); + connect_raw( + self.as_ptr() as *mut _, + b"register-dsp-changed\0".as_ptr() as *const _, + Some( + std::mem::transmute::<_, unsafe extern "C" fn()>( + register_dsp_changed_trampoline::<Self, F> as *const () + )), + std::boxed::Box::into_raw(f) + ) + } + } +} diff --git a/hinawa/src/snd_motu_register_dsp_parameter.rs b/hinawa/src/snd_motu_register_dsp_parameter.rs new file mode 100644 index 0000000..4190b0f --- /dev/null +++ b/hinawa/src/snd_motu_register_dsp_parameter.rs @@ -0,0 +1,109 @@ +use glib::translate::*; + +use SndMotuRegisterDspParameter; + +impl SndMotuRegisterDspParameter { + pub fn get_input_flag(&self) -> &[u8; 10] { + unsafe { + let mut ptr = std::ptr::null_mut() as *const [u8; 10]; + hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_input_flag( + self.to_glib_none().0, + &mut ptr, + ); + &*ptr + } + } + + pub fn get_input_gain_and_invert(&self) -> &[u8; 10] { + unsafe { + let mut ptr = std::ptr::null_mut() as *const [u8; 10]; + hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_input_gain_and_invert( + self.to_glib_none().0, + &mut ptr, + ); + &*ptr + } + } + + pub fn get_mixer_output_paired_flag(&self) -> &[u8; 4] { + unsafe { + let mut ptr = std::ptr::null_mut() as *const [u8; 4]; + hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_mixer_output_paired_flag( + self.to_glib_none().0, + &mut ptr, + ); + &*ptr + } + } + + pub fn get_mixer_output_paired_volume(&self) -> &[u8; 4] { + unsafe { + let mut ptr = std::ptr::null_mut() as *const [u8; 4]; + hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_mixer_output_paired_volume( + self.to_glib_none().0, + &mut ptr, + ); + &*ptr + } + } + + pub fn get_mixer_source_flag(&self, mixer: usize) -> &[u8; 20] { + unsafe { + let mut ptr = std::ptr::null_mut() as *const [u8; 20]; + hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_mixer_source_flag( + self.to_glib_none().0, + mixer, + &mut ptr, + ); + &*ptr + } + } + + pub fn get_mixer_source_gain(&self, mixer: usize) -> &[u8; 20] { + unsafe { + let mut ptr = std::ptr::null_mut() as *const [u8; 20]; + hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_mixer_source_gain( + self.to_glib_none().0, + mixer, + &mut ptr, + ); + &*ptr + } + } + + pub fn get_mixer_source_paired_balance(&self, mixer: usize) -> &[u8; 20] { + unsafe { + let mut ptr = std::ptr::null_mut() as *const [u8; 20]; + hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_mixer_source_paired_balance( + self.to_glib_none().0, + mixer, + &mut ptr, + ); + &*ptr + } + } + + pub fn get_mixer_source_paired_width(&self, mixer: usize) -> &[u8; 20] { + unsafe { + let mut ptr = std::ptr::null_mut() as *const [u8; 20]; + hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_mixer_source_paired_width( + self.to_glib_none().0, + mixer, + &mut ptr, + ); + &*ptr + } + } + + pub fn get_mixer_source_pan(&self, mixer: usize) -> &[u8; 20]{ + unsafe { + let mut ptr = std::ptr::null_mut() as *const [u8; 20]; + hinawa_sys::hinawa_snd_motu_register_dsp_parameter_get_mixer_source_pan( + self.to_glib_none().0, + mixer, + &mut ptr, + ); + &*ptr + } + } +} |