Re: ALSA: dice: improve support for Weiss devices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Takashi,

On 05.09.23 03:20, Takashi Sakamoto wrote:
Hi Rolf,

On Mon, Sep 04, 2023 at 06:00:24PM +0200, Rolf Anderegg wrote:
Hi Takashi,

Glad that we could be of help.
We checked this on the firmware side and yes, we can confirm that the
Weiss MAN301 is the only device with AV/C protocol (using vendor dependent
commands).
OK. It is good firmware design to make snd-dice-ctl-service simpler.

We are deploying a small set of commands in order to probe and control
the parameters on the MAN301:

WEISS_CMD_ID_DEV_CONST:
	probe the number of parameters

WEISS_CMD_ID_PARAM_OP:
	read/write to a parameter

WEISS_CMD_ID_PARAM_INFO:
	read parameter info (index, type, iface type, name)

WEISS_CMD_ID_ENUM_ITEM_INFO:
	read parameter enum type info

This allows us to populate and control snd-control instances that represent
the device's featured parameters [1].

How would you like to proceed for `snd-firewire-ctl-services`?
We can start by giving you the output of `amixer contents` for the MAN301,
so you see all the controls and their possible values (see below).
Great. In my current plan for snd-dice-ctl-service, action items would
be enumerated in below:

1. Add support for all of models except for MA301 (need additional work to
    current MR to exclude MA301)
2. implement the vendor dependent command to `firewire-dice-protocols`
    crate[2] with dependency on `ta1394_avc_general` crate[3]
3. implement the control primitives to `firewire-dice-protocols` in the
    fasion of hard-code
4. Add support for MA301

The reason of hard-code against your implementation in dice-avc.c is
to express hardware specification in code. FireWire audio devices are
nowadays not updated anymore, and I think the explicit control primitives
is helpful to remaining users.

Yes, we agree that it's appropriate to hardcode the currently available
controls.

In that case you will only be using the following vendor specific command
to write parameter values [1][2]:

WEISS_CMD_ID_PARAM_OP:
	read/write to a parameter


[1] https://github.com/alsa-project/snd-firewire-ctl-services/pull/175
[2] https://crates.io/crates/firewire-dice-protocols
[3] https://docs.rs/ta1394-avc-general/latest/ta1394_avc_general/

Let us know if there's any additional information we can provide.

If the control primitives have been changed (newly added or abandoned)
between several firmware versions, I would like you to inform it to me.

Thank you, we would inform you of any changes. But I doubt that that will
ever be necessary.


Kind regards,
Rolf Anderegg


[1] https://github.com/weiss-engineering/snd-dice/blob/avc/dice-avc.c
Thanks for your delivery of useful information for Weiss models. It is
my pleasure to maintain Linux systems to use them for 6 more years.

Thank you Takashi, we highly appreciate your engagement.

Best regards,
Rolf Anderegg

[1] https://github.com/weiss-engineering/snd-dice/blob/avc/dice-avc.c#L135
[2] https://github.com/weiss-engineering/snd-dice/blob/avc/dice-avc.c#L201



Regards

Takashi Sakamoto

--
$ amixer contents
numid=3,iface=CARD,name='Dual Wire Mode Switch'
   ; type=BOOLEAN,access=rw------,values=1
   : values=off
numid=4,iface=CARD,name='Dual Wire Word Clock Half Rate Switch'
   ; type=BOOLEAN,access=rw------,values=1
   : values=off
numid=1,iface=CARD,name='Sync source'
   ; type=ENUMERATED,access=rw------,values=1,items=13
   ; Item #0 'AES1'
   ; Item #1 'AES2'
   ; Item #2 'AES3'
   ; Item #3 'AES4'
   ; Item #4 'AES'
   ; Item #5 'ADAT'
   ; Item #6 'TDIF'
   ; Item #7 'Wordclock'
   ; Item #8 'ARX1'
   ; Item #9 'ARX2'
   ; Item #10 'ARX3'
   ; Item #11 'ARX4'
   ; Item #12 'Internal'
   : values=2
numid=10,iface=MIXER,name='DAC::Analog Output Level'
   ; type=ENUMERATED,access=rw------,values=1,items=4
   ; Item #0 '0 dB'
   ; Item #1 '-10 dB'
   ; Item #2 '-20 dB'
   ; Item #3 '-30 dB'
   : values=1
numid=8,iface=MIXER,name='DAC::DAC Filter Type'
   ; type=ENUMERATED,access=rw------,values=1,items=2
   ; Item #0 'A'
   ; Item #1 'B'
   : values=0
numid=9,iface=MIXER,name='DAC::DAC Output Playback Switch'
   ; type=BOOLEAN,access=rw------,values=1
   : values=on
numid=7,iface=MIXER,name='DAC::DAC Polarity Inversion Playback Switch'
   ; type=BOOLEAN,access=rw------,values=1
   : values=off
numid=2,iface=MIXER,name='Digital Input Capture Route'
   ; type=ENUMERATED,access=rw------,values=1,items=3
   ; Item #0 'AES/EBU (XLR)'
   ; Item #1 'S/PDIF (RCA)'
   ; Item #2 'S/PDIF (TOS)'
   : values=2
numid=6,iface=MIXER,name='RCA::RCA Output Playback Switch'
   ; type=BOOLEAN,access=rw------,values=1
   : values=on
numid=5,iface=MIXER,name='XLR::XLR Output Playback Switch'
   ; type=BOOLEAN,access=rw------,values=1
   : values=on

On 31.08.23 15:28, Takashi Sakamoto wrote:
Hi Michele,

Thanks for your contribution of configuration ROM for Weiss models[1].
I'm sorry for my little reaction but currently I'm working for Debian ITP
to linux-firewire-utils package[2][3].

As a quick glance, all of configuration ROMs except for Weiss MAN301
include single unit directory, while the exception includes two unit
directories; 1394TA AV/C protocol and TCAT protocol. It means that
the vendor-dependent AV/C command[4] is implemented in MAN301, but not
in the others. Then I would like to figure out whether it is correct or
not. If it is unique for MAN301, the implementation of control service
can be simpler to support the command just for MAN301.

[1] https://github.com/takaswie/am-config-roms/pull/5
[2] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1050551
[3] https://mentors.debian.net/package/linux-firewire-utils/
[4] https://github.com/weiss-engineering/snd-dice/blob/avc/dice-avc.c


Regards

Takashi Sakamoto



[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Pulse Audio]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux