All of lore.kernel.org
 help / color / mirror / Atom feed
From: Robin Gareus <robin@gareus.org>
To: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Cc: tiwai@suse.de, damien@zamaudio.com, clemens@ladisch.de,
	alsa-devel@alsa-project.org, ffado-devel@lists.sf.net
Subject: Re: [PATCH 11/11] ALSA: digi00x: apply double-oh-three algorism to multiplex PCM samples
Date: Mon, 16 Mar 2015 15:25:50 +0100	[thread overview]
Message-ID: <5506E7EE.6060300@gareus.org> (raw)
In-Reply-To: <1426435269-17059-12-git-send-email-o-takashi@sakamocchi.jp>

Hi Takashi,

Many thanks for doing this!

On 03/15/2015 05:01 PM, Takashi Sakamoto wrote:

> +
> +void snd_dg00x_protocol_write_s32(struct amdtp_stream *s,
> +				  struct snd_pcm_substream *pcm,
> +				  __be32 *buffer, unsigned int frames)
> +{
> +	struct snd_pcm_runtime *runtime = pcm->runtime;
> +	unsigned int channels, remaining_frames, i, c;
> +	const u32 *src;
> +	static struct dot_state state;

There's no need to declare this as static. The state is per frame.

> +	channels = s->pcm_channels;
> +	src = (void *)runtime->dma_area +
> +			frames_to_bytes(runtime, s->pcm_buffer_pointer);
> +	remaining_frames = runtime->buffer_size - s->pcm_buffer_pointer;
> +
> +	for (i = 0; i < frames; ++i) {

..it is zeroed here, anyway:

> +		dot_state_reset(&state);


> +		for (c = 0; c < channels; ++c) {
> +			buffer[s->pcm_positions[c]] =
> +					cpu_to_be32((*src >> 8) | 0x40000000);
> +			dot_encode_step(&state, &buffer[s->pcm_positions[c]]);
> +			src++;
> +		}
> +
> +		buffer += s->data_block_quadlets;
> +		if (--remaining_frames == 0)
> +			src = (void *)runtime->dma_area;
> +	}
> +}


In any case, the algorithm to xor-encode the digidesign data is not yet
100% correct there. One will need to continue iterating after the last
channel (feeding zero) until the state->carry (dot_scrt()) is 0x00.

The current code here only works only correctly for data on the first 4
chanels (18 [total channels] - 14 [max xor-chain length]).

I'll let Damien elaborate. He has access to a Digidesign interface and
did the protocol-dumps. I only did the clean room reverse-engineering
and maths on the other end.

Cheers!
robin

  parent reply	other threads:[~2015-03-16 14:26 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-15 16:00 [RFC][PATCH 00/11] digi00x: new driver for Digidesign 002/003 family Takashi Sakamoto
2015-03-15 16:00 ` [PATCH 01/11] ALSA: digi00x: add skelton for Digi 002/003 device driver Takashi Sakamoto
2015-03-15 16:01 ` [PATCH 02/11] ALSA: digi00x: add streaming functionality Takashi Sakamoto
2015-03-15 16:01 ` [PATCH 03/11] ALSA: digi00x: add proc node for clock status Takashi Sakamoto
2015-03-15 16:01 ` [PATCH 04/11] ALSA: digi00x: add PCM functionality Takashi Sakamoto
2015-03-15 16:01 ` [PATCH 05/11] ALSA: digi00x: add MIDI functionality Takashi Sakamoto
2015-03-15 16:01 ` [PATCH 06/11] ALSA: digi00x: add hwdep interface Takashi Sakamoto
2015-03-15 16:01 ` [PATCH 07/11] ALSA: digi00x: support unknown asynchronous message Takashi Sakamoto
2015-03-15 16:01 ` [PATCH 08/11] ALSA: digi00x: support MIDI ports for device control Takashi Sakamoto
2015-03-15 16:01 ` [PATCH 09/11] ALSA: firewire-lib: allows to implement external MIDI callback function Takashi Sakamoto
2015-03-15 16:01 ` [PATCH 10/11] digi00x: improve MIDI capture/playback Takashi Sakamoto
2015-03-15 16:01 ` [PATCH 11/11] ALSA: digi00x: apply double-oh-three algorism to multiplex PCM samples Takashi Sakamoto
2015-03-16 11:39   ` Damien Zammit
2015-03-16 13:24     ` Takashi Sakamoto
2015-03-16 14:25   ` Robin Gareus [this message]
2015-03-16 16:25     ` Takashi Sakamoto
2015-03-16 17:13       ` Robin Gareus
2015-03-16 22:47         ` Takashi Sakamoto
2015-03-17 13:37           ` Robin Gareus
2015-03-17 13:49             ` Damien Zammit
2015-03-18  1:06               ` Takashi Sakamoto
2015-03-19  5:18                 ` Damien Zammit
2015-03-19 13:59                 ` Robin Gareus
2015-03-19 22:46                   ` Takashi Sakamoto
2015-03-19 22:51                     ` Takashi Sakamoto
2015-03-20 12:05                     ` firewire mixer interface -- was " Robin Gareus
2015-03-20 13:00                       ` Clemens Ladisch
2015-03-20 13:25                       ` Takashi Sakamoto
2015-03-20 13:35                         ` Takashi Iwai
2015-03-20 13:51                           ` Takashi Sakamoto
2015-03-20 14:13                             ` Takashi Iwai
2015-03-20 14:45                               ` Takashi Sakamoto
2015-03-20 15:01                                 ` Takashi Iwai
2015-03-21  5:59                                   ` Damien Zammit
2015-03-22  2:55                                     ` Takashi Sakamoto
2015-03-22  5:56                                       ` [FFADO-devel] " Jonathan Woithe
2015-03-24  3:15                                       ` Robin Gareus
2015-03-20 13:55                         ` Damien Zammit
2015-03-20 14:07                           ` Clemens Ladisch
2015-03-22  6:11                       ` [FFADO-devel] " Jonathan Woithe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5506E7EE.6060300@gareus.org \
    --to=robin@gareus.org \
    --cc=alsa-devel@alsa-project.org \
    --cc=clemens@ladisch.de \
    --cc=damien@zamaudio.com \
    --cc=ffado-devel@lists.sf.net \
    --cc=o-takashi@sakamocchi.jp \
    --cc=tiwai@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.