[alsa-devel] [FFADO-devel] [RFC][PATCH 00/13] alsa-tools: libhinawa for control applications of FireWire devices

Damien Zammit damien.zammit at gmail.com
Fri Mar 20 10:28:10 CET 2015


Folks,

Why can't we just use the proven alsa-mixer control system for all this?

It seems like you are reinventing the wheel just to save a little extra
code in the kernel.

Some of the benefits are that for pro-audio devices, you can use alsactl
save and restore to preserve internal sound card configuration between
bootups.  Also things like gnome-mixer just work out of the box.
Timing of when to send the commands is automatically solved, and the
problem of which sound card is which is already solved when multiple
sound cards are used.

Some of the sound cards don't have internal mixer matrices, and so for
these devices only the clock source control would be necessary.

Surely this is not too much of a burden to add to the kernel for the
benefits it provides?

Damien

On 25/01/15 22:34, Takashi Sakamoto wrote:
> This is RFC for a new library into alsa-tools.
> 
> ALSA in Linux 3.16 or later extends a support for FireWire sound devices.
> Currently ALSA drivers supports streaming functionality only, while
> most of these devices require software implementation to control its
> internal DSP. The way to achieve this is to transfer byte sequence to
> the unit and wait byte sequence which the unit transfers if required.
> 
> This library, libhinawa, just support these operations, nothing others. The
> supported types of transactions are:
>  - IEEE 1394 read transaction
>  - IEEE 1394 write transaction
>  - IEEE 1394 lock transaction
>  - IEC 61883-1 FCP transaction
>  - Echo Fireworks transaction (with a help of snd-fireworks kernel driver)
>  - Dice notification (with a help of snd-dice kernel driver)
> 
> To help new developers, this library supports GObject Introspection for
> language bindings. The main logic of applications can be written with
> preferred languages such as Python, Ruby, Perl and so on. In the end of
> this patchset, some Python scripts with Gtk+, Qt4 and Qt5 are committed as
> samples.
> 
> This is my first development with GNU Autotools, GLib/GObject and GObject
> Introspection. Furthermore, I'm a beginner of FireWire subsystem programming.
> I'm happy to receive your comments, especially:
>  - the way to write Linux version dependency in configure.ac
>  - the way of libtool versioning
>  - the value of poll timeout in fw_unit/snd_unit
>  - the value of thread condition timeout in fw_fcp/snd_dice/snd_efw
>  - improvements of 'unit_query' object
>  - any programming mistakes (threading and so on...)
> 
> Regards
> 
> Takashi Sakamoto (13):
>   libhinawa: add build definitions
>   libhinawa: add hinawa context
>   libhinawa: support GTK-Doc to generate references
>   libhinawa: add 'fw_unit' object as a listener for FireWire unit
>   libhinawa: support GObject Introspection for language bindings
>   libhinawa: add 'fw_resp' object as a responder for FireWire
>     transaction
>   libhinawa: add 'fw_req' object as requester for FireWire transaction
>   libhinawa: add 'fw_fcp' object as a helper of FCP transaction
>   libhinawa: add 'snd_unit' object as a listener for ALSA FireWire
>     devices
>   libhinawa: add 'snd_dice' object as a helper for Dice notification
>   libhinawa: add 'snd_efw' object as a helper for EFW transaction
>   libhinawa: add 'unit_query' as a query for ALSA FireWire devices
>   libhinawa: add sample scripts
> 
>  Makefile                                 |   2 +-
>  libhinawa/AUTHORS                        |   1 +
>  libhinawa/COPYING                        | 504 ++++++++++++++++++++++++++++
>  libhinawa/ChangeLog                      |   5 +
>  libhinawa/Makefile.am                    |   6 +
>  libhinawa/NEWS                           |   0
>  libhinawa/README                         |  30 ++
>  libhinawa/autogen.sh                     |  11 +
>  libhinawa/configure.ac                   |  68 ++++
>  libhinawa/doc/Makefile.am                |   2 +
>  libhinawa/doc/reference/Makefile.am      |  46 +++
>  libhinawa/doc/reference/hinawa-docs.sgml |  47 +++
>  libhinawa/doc/reference/version.xml.in   |   1 +
>  libhinawa/samples/gtk3.py                | 190 +++++++++++
>  libhinawa/samples/qt4.py                 | 206 ++++++++++++
>  libhinawa/samples/qt5.py                 | 192 +++++++++++
>  libhinawa/samples/run.sh                 |  15 +
>  libhinawa/src/Makefile.am                |  97 ++++++
>  libhinawa/src/backport.h                 |  41 +++
>  libhinawa/src/fw_fcp.c                   | 282 ++++++++++++++++
>  libhinawa/src/fw_fcp.h                   |  58 ++++
>  libhinawa/src/fw_req.c                   | 265 +++++++++++++++
>  libhinawa/src/fw_req.h                   |  56 ++++
>  libhinawa/src/fw_resp.c                  | 232 +++++++++++++
>  libhinawa/src/fw_resp.h                  |  51 +++
>  libhinawa/src/fw_unit.c                  | 343 +++++++++++++++++++
>  libhinawa/src/fw_unit.h                  |  52 +++
>  libhinawa/src/hinawa_context.c           |  60 ++++
>  libhinawa/src/hinawa_context.h           |  10 +
>  libhinawa/src/internal.h                 |  31 ++
>  libhinawa/src/snd_dice.c                 | 195 +++++++++++
>  libhinawa/src/snd_dice.h                 |  53 +++
>  libhinawa/src/snd_efw.c                  | 315 ++++++++++++++++++
>  libhinawa/src/snd_efw.h                  |  54 +++
>  libhinawa/src/snd_unit.c                 | 548 +++++++++++++++++++++++++++++++
>  libhinawa/src/snd_unit.h                 |  69 ++++
>  libhinawa/src/unit_query.c               | 116 +++++++
>  libhinawa/src/unit_query.h               |  48 +++
>  38 files changed, 4301 insertions(+), 1 deletion(-)
>  create mode 100644 libhinawa/AUTHORS
>  create mode 100644 libhinawa/COPYING
>  create mode 100644 libhinawa/ChangeLog
>  create mode 100644 libhinawa/Makefile.am
>  create mode 100644 libhinawa/NEWS
>  create mode 100644 libhinawa/README
>  create mode 100755 libhinawa/autogen.sh
>  create mode 100644 libhinawa/configure.ac
>  create mode 100644 libhinawa/doc/Makefile.am
>  create mode 100644 libhinawa/doc/reference/Makefile.am
>  create mode 100644 libhinawa/doc/reference/hinawa-docs.sgml
>  create mode 100644 libhinawa/doc/reference/version.xml.in
>  create mode 100755 libhinawa/samples/gtk3.py
>  create mode 100755 libhinawa/samples/qt4.py
>  create mode 100755 libhinawa/samples/qt5.py
>  create mode 100755 libhinawa/samples/run.sh
>  create mode 100644 libhinawa/src/Makefile.am
>  create mode 100644 libhinawa/src/backport.h
>  create mode 100644 libhinawa/src/fw_fcp.c
>  create mode 100644 libhinawa/src/fw_fcp.h
>  create mode 100644 libhinawa/src/fw_req.c
>  create mode 100644 libhinawa/src/fw_req.h
>  create mode 100644 libhinawa/src/fw_resp.c
>  create mode 100644 libhinawa/src/fw_resp.h
>  create mode 100644 libhinawa/src/fw_unit.c
>  create mode 100644 libhinawa/src/fw_unit.h
>  create mode 100644 libhinawa/src/hinawa_context.c
>  create mode 100644 libhinawa/src/hinawa_context.h
>  create mode 100644 libhinawa/src/internal.h
>  create mode 100644 libhinawa/src/snd_dice.c
>  create mode 100644 libhinawa/src/snd_dice.h
>  create mode 100644 libhinawa/src/snd_efw.c
>  create mode 100644 libhinawa/src/snd_efw.h
>  create mode 100644 libhinawa/src/snd_unit.c
>  create mode 100644 libhinawa/src/snd_unit.h
>  create mode 100644 libhinawa/src/unit_query.c
>  create mode 100644 libhinawa/src/unit_query.h
> 


More information about the Alsa-devel mailing list