From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: [PATCH] control: Allow cset'ing specific values in the multi-value case Date: Wed, 10 Jun 2015 11:58:50 +0200 Message-ID: References: <1433847307-26125-1-git-send-email-arun@accosted.net> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by alsa0.perex.cz (Postfix) with ESMTP id 4543F26147E for ; Wed, 10 Jun 2015 11:58:51 +0200 (CEST) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Arun Raghavan Cc: Arun Raghavan , "alsa-devel@alsa-project.org" List-Id: alsa-devel@alsa-project.org At Wed, 10 Jun 2015 14:26:48 +0530, Arun Raghavan wrote: > > On 9 June 2015 at 17:33, Takashi Iwai wrote: > > At Tue, 9 Jun 2015 16:25:07 +0530, > > arun@accosted.net wrote: > >> > >> From: Arun Raghavan > >> > >> This works with syntax like ... > >> > >> amixer cset 'IIR1 Band1' ,,200 > >> > >> ... to set the third value of the control to 200. > >> --- > >> src/control/ctlparse.c | 10 ++++++---- > >> 1 file changed, 6 insertions(+), 4 deletions(-) > >> > >> diff --git a/src/control/ctlparse.c b/src/control/ctlparse.c > >> index 8d6c385..64c6480 100644 > >> --- a/src/control/ctlparse.c > >> +++ b/src/control/ctlparse.c > >> @@ -48,9 +48,9 @@ static inline long int convert_prange1(long val, long min, long max) > >> #define check_range(val, min, max) \ > >> ((val < min) ? (min) : ((val > max) ? (max) : (val))) > >> > >> -static long get_integer(const char **ptr, long min, long max) > >> +static long get_integer(const char **ptr, long def, long min, long max) > >> { > >> - long val = min; > >> + long val = def; > >> char *p = (char *)*ptr, *s; > >> > >> if (*p == ':') > >> @@ -351,6 +351,8 @@ int snd_ctl_ascii_value_parse(snd_ctl_t *handle, > >> break; > >> case SND_CTL_ELEM_TYPE_INTEGER: > >> tmp = get_integer(&ptr, > >> + snd_ctl_elem_value_get_integer(dst, > >> + idx), > >> snd_ctl_elem_info_get_min(info), > >> snd_ctl_elem_info_get_max(info)); > >> snd_ctl_elem_value_set_integer(dst, idx, tmp); > >> @@ -364,12 +366,12 @@ int snd_ctl_ascii_value_parse(snd_ctl_t *handle, > >> case SND_CTL_ELEM_TYPE_ENUMERATED: > >> tmp = get_ctl_enum_item_index(handle, info, &ptr); > >> if (tmp < 0) > >> - tmp = get_integer(&ptr, 0, > >> + tmp = get_integer(&ptr, 0, 0, > >> snd_ctl_elem_info_get_items(info) - 1); > >> snd_ctl_elem_value_set_enumerated(dst, idx, tmp); > >> break; > >> case SND_CTL_ELEM_TYPE_BYTES: > >> - tmp = get_integer(&ptr, 0, 255); > >> + tmp = get_integer(&ptr, 0, 0, 255); > >> snd_ctl_elem_value_set_byte(dst, idx, tmp); > >> break; > > > > Hmm, if it's just about skipping the empty element, how about the > > patch below instead? > > Thanks, this works and does look better. Pushed to git tree now. Thanks. Takashi