Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 18 Jun 2022 13:26:37 -0700
From:      Ravi Pokala <rpokala@freebsd.org>
To:        Kyle Evans <kevans@FreeBSD.org>, <src-committers@FreeBSD.org>, <dev-commits-src-all@FreeBSD.org>, <dev-commits-src-main@FreeBSD.org>
Subject:   Re: 4014365e4219 - main - mixer: remove volume backwards compat, add % interpretation
Message-ID:  <7D9CA81D-1688-4B99-97ED-EB40A60EBF60@panasas.com>
In-Reply-To: <202206180353.25I3rkKc096344@gitrepo.freebsd.org>
References:  <202206180353.25I3rkKc096344@gitrepo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
H Kyle,

| +Note that relative percentages are still relative to 1.0, not to the cur=
rent
| +value.
| +If the volume is currently 0.40 and an adjustment of +20% is specified, =
then
| +thet final volume will be set to 0.60.

What you're describing are *absolute* percentages, not relative. Please rew=
ord accordingly.

Also, "thet" =3D> ("the" || "that").

Thanks,

Ravi (rpokala@)

=EF=BB=BF-----Original Message-----
From: <owner-src-committers@freebsd.org> on behalf of Kyle Evans <kevans@Fr=
eeBSD.org>
Date: 2022-06-17, Friday at 20:53
To: <src-committers@FreeBSD.org>, <dev-commits-src-all@FreeBSD.org>, <dev-c=
ommits-src-main@FreeBSD.org>
Subject: git: 4014365e4219 - main - mixer: remove volume backwards compat, =
add % interpretation

    The branch main has been updated by kevans:

    URL: https://cgit.FreeBSD.org/src/commit/?id=3D4014365e421991814703249d47=
48d6dcac6686b6

    commit 4014365e421991814703249d4748d6dcac6686b6
    Author:     Kyle Evans <kevans@FreeBSD.org>
    AuthorDate: 2022-04-30 03:12:56 +0000
    Commit:     Kyle Evans <kevans@FreeBSD.org>
    CommitDate: 2022-06-18 03:50:58 +0000

        mixer: remove volume backwards compat, add % interpretation

        The current situation is fairly confusing, where an integer is inte=
rpreted
        as a percent until you slap a decimal on it and magically it become=
s an
        absolute value.

        Let's have a flag day in 14.0 and remove this shim entirely.  Setti=
ng with
        percent can still be useful, so allow a trailing '%' to indicate as=
 such.
        As a side effect, we tighten down the format allowed in the volume =
a little
        bit by ensuring there's no trailing garbage after the value once it=
's
        separated into left and right components.

        Reviewed by:    christos, hselasky, pauamma_gundo.com (manpages)
        Relnotes:       yes
        Differential Revision:  https://reviews.freebsd.org/D35101
    ---
     sbin/devd/apple.conf                  |  4 ++--
     sbin/devd/asus.conf                   |  8 ++++----
     share/man/man4/acpi_ibm.4             |  2 +-
     usr.bin/fortune/datfiles/freebsd-tips |  2 +-
     usr.bin/usbhidaction/usbhidaction.1   | 14 +++++++-------
     usr.sbin/mixer/mixer.8                | 19 ++++++++++++-------
     usr.sbin/mixer/mixer.c                | 23 +++++++++++++++--------
     7 files changed, 42 insertions(+), 30 deletions(-)

    diff --git a/sbin/devd/apple.conf b/sbin/devd/apple.conf
    index 0729a9c86e7a..0a9143f7b5a5 100644
    --- a/sbin/devd/apple.conf
    +++ b/sbin/devd/apple.conf
    @@ -52,7 +52,7 @@ notify 0 {
     	match "subsystem"	"keys";
     	match "type"		"volume";
     	match "notify"		"down";
    -	action			"mixer vol.volume=3D-10";
    +	action			"mixer vol.volume=3D-10%";
     };

     notify 0 {
    @@ -60,7 +60,7 @@ notify 0 {
     	match "subsystem"	"keys";
     	match "type"		"volume";
     	match "notify"		"up";
    -	action			"mixer vol.volume=3D+10";
    +	action			"mixer vol.volume=3D+10%";
     };

     # Eject key
    diff --git a/sbin/devd/asus.conf b/sbin/devd/asus.conf
    index eed369f6ca4d..0074e7a7c55f 100644
    --- a/sbin/devd/asus.conf
    +++ b/sbin/devd/asus.conf
    @@ -14,14 +14,14 @@ notify 0 {
     	match "system"		"ACPI";
     	match "subsystem"	"ASUS";
     	match "notify"		"0x31";
    -	action			"mixer vol.volume=3D-10";
    +	action			"mixer vol.volume=3D-10%";
     };

     notify 0 {
     	match "system"		"ACPI";
     	match "subsystem"	"ASUS";
     	match "notify"		"0x30";
    -	action			"mixer vol.volume=3D+10";
    +	action			"mixer vol.volume=3D+10%";
     };

     # The next blocks enable volume hotkeys that can be found on the Asus =
EeePC
    @@ -36,14 +36,14 @@ notify 0 {
             match "system"          "ACPI";
             match "subsystem"       "ASUS-Eee";
             match "notify"          "0x14";
    -        action                  "mixer vol.volume=3D-10";
    +        action                  "mixer vol.volume=3D-10%";
     };

     notify 0 {
             match "system"          "ACPI";
             match "subsystem"       "ASUS-Eee";
             match "notify"          "0x15";
    -        action                  "mixer vol.volume=3D+10";
    +        action                  "mixer vol.volume=3D+10%";
     };

     # Enable user hotkeys that can be found on the Asus EeePC
    diff --git a/share/man/man4/acpi_ibm.4 b/share/man/man4/acpi_ibm.4
    index 290c7d3b29c1..434a1a7cba2c 100644
    --- a/share/man/man4/acpi_ibm.4
    +++ b/share/man/man4/acpi_ibm.4
    @@ -455,7 +455,7 @@ case ${NOTIFY} in
     		fi
     		if [ $LEVEL -eq 1 ]; then
     			sysctl dev.acpi_ibm.0.mic_led=3D0
    -			mixer rec.volume=3D30
    +			mixer rec.volume=3D30%
     		fi
     		;;
             *)
    diff --git a/usr.bin/fortune/datfiles/freebsd-tips b/usr.bin/fortune/da=
tfiles/freebsd-tips
    index e8fa84e02489..930110a0c3fe 100644
    --- a/usr.bin/fortune/datfiles/freebsd-tips
    +++ b/usr.bin/fortune/datfiles/freebsd-tips
    @@ -339,7 +339,7 @@ If you have sudo(8) installed and permissions to us=
e it, type
     ``<ESC>w ! sudo tee %'' to force a write.
     %
     You can adjust the volume of various parts of the sound system in your
    -computer by typing 'mixer <type>.volume=3D<volume>'.  To get a list of w=
hat
    +computer by typing 'mixer <type>.volume=3D<volume>%'.  To get a list of =
what
     you can adjust, just type 'mixer'.
     %
     You can automatically download and install binary packages by doing
    diff --git a/usr.bin/usbhidaction/usbhidaction.1 b/usr.bin/usbhidaction=
/usbhidaction.1
    index f50af8fff1ad..54d114925714 100644
    --- a/usr.bin/usbhidaction/usbhidaction.1
    +++ b/usr.bin/usbhidaction/usbhidaction.1
    @@ -139,11 +139,11 @@ The following configuration file can be used to c=
ontrol a pair
     of Philips USB speakers with the HID controls on the speakers.
     .Bd -literal -offset indent
     # Configuration for various Philips USB speakers
    -Consumer:Volume_Increment		 1 0 mixer -f $1 vol.volume=3D+1
    -Consumer:Volume_Decrement		 1 0 mixer -f $1 vol.volume=3D-1
    +Consumer:Volume_Increment		 1 0 mixer -f $1 vol.volume=3D+1%
    +Consumer:Volume_Decrement		 1 0 mixer -f $1 vol.volume=3D-1%
     Consumer:Mute				 1 0 mixer -f $1 vol.mute=3D^
    -Consumer:Channel_Top.Microsoft:Base_Up	 1 0 mixer -f $1 bass.volume=3D+1
    -Consumer:Channel_Top.Microsoft:Base_Down 1 0 mixer -f $1 bass.volume=3D-=
1
    +Consumer:Channel_Top.Microsoft:Base_Up	 1 0 mixer -f $1 bass.volume=3D+1=
%
    +Consumer:Channel_Top.Microsoft:Base_Down 1 0 mixer -f $1 bass.volume=3D-=
1%
     .Ed
     .Pp
     A sample invocation using this configuration would be
    @@ -153,9 +153,9 @@ A sample invocation using this configuration would =
be
     The following example controls the mixer volume using a Logitech Wingm=
an.
     Notice the debounce of 1 for buttons and 5 for the slider.
     .Bd -literal -offset indent
    -Button:Button_1	  1 1	mixer vol.volume=3D+10
    -Button:Button_2	  1 1	mixer vol.volume=3D-10
    -Generic_Desktop:Z * 5	mixer vol.volume=3D`echo $V | awk '{print int($$1/=
255*100)}'`
    +Button:Button_1	  1 1	mixer vol.volume=3D+10%
    +Button:Button_2	  1 1	mixer vol.volume=3D-10%
    +Generic_Desktop:Z * 5	mixer vol.volume=3D`echo $V | awk '{printf("%.02f"=
, $$1/255)}'`
     .Ed
     .Sh SEE ALSO
     .Xr usbhidctl 1 ,
    diff --git a/usr.sbin/mixer/mixer.8 b/usr.sbin/mixer/mixer.8
    index 284750538f7e..9a76cbe41f65 100644
    --- a/usr.sbin/mixer/mixer.8
    +++ b/usr.sbin/mixer/mixer.8
    @@ -21,7 +21,7 @@
     .\"
     .\" $FreeBSD$
     .\"
    -.Dd March 20, 2022
    +.Dd April 29, 2022
     .Dt MIXER 8
     .Os
     .Sh NAME
    @@ -112,8 +112,8 @@ with one of the available devices):
     .It Sy Name Ta Sy Value
     .It Ar dev Cm .volume Ta Xo
     .Ar vol |
    -.Oo Cm \&+ | Cm \&- Oc Ar lvol
    -.Oo Cm \&: Oo Cm \&+ | Cm \&- Oc Ar rvol Oc
    +.Oo Cm \&+ | Cm \&- Oc Ar lvol Oo % Oc
    +.Oo Cm \&: Oo Cm \&+ | Cm \&- Oc Ar rvol Oo % Oc Oc
     .Xc
     .It Ar dev Cm .mute Ta Cm 0 | 1 | ^
     .It Ar dev Cm .recsrc Ta Cm ^ | + | - | =3D
    @@ -128,16 +128,21 @@ The optional
     and/or
     .Ar rvol
     values have to be specified.
    -The values have to be normalized 32-bit floats, from 0.0 to 1.0 inclus=
ively.
    -If no
    -.Ql \&.
    -character is present, the value is treated like a percentage, for back=
wards compatibility.
    +The values should typically be decimal numbers between 0 and 1 with at=
 most 2
    +digits after the decimal point.
    +A trailing percent sign indicates that the value should be treated as =
a
    +percentage of 1.0, rather than an absolute value.
    +Thus, 70% means the same as 0.7.
     If the left or right volume values are prefixed with
     .Cm +
     or
     .Cm - ,
     the value following will be used as a relative adjustment, modifying t=
he
     current settings by the amount specified.
    +Note that relative percentages are still relative to 1.0, not to the c=
urrent
    +value.
    +If the volume is currently 0.40 and an adjustment of +20% is specified=
, then
    +thet final volume will be set to 0.60.
     .Pp
     Volume can also be set using the shorthand
     .Ar dev Ns Cm =3Dvalue .
    diff --git a/usr.sbin/mixer/mixer.c b/usr.sbin/mixer/mixer.c
    index c0a9ec25c6fa..e216efe3313c 100644
    --- a/usr.sbin/mixer/mixer.c
    +++ b/usr.sbin/mixer/mixer.c
    @@ -341,7 +341,7 @@ mod_volume(struct mix_dev *d, void *p)
     	mix_ctl_t *cp;
     	mix_volume_t v;
     	const char *val;
    -	char lstr[8], rstr[8];
    +	char *endp, lstr[8], rstr[8];
     	float lprev, rprev, lrel, rrel;
     	int n;

    @@ -356,25 +356,32 @@ mod_volume(struct mix_dev *d, void *p)
     	lrel =3D rrel =3D 0;
     	if (n > 0) {
     		if (*lstr =3D=3D '+' || *lstr =3D=3D '-')
    -			lrel =3D rrel =3D 1;
    -		v.left =3D strtof(lstr, NULL);
    +			lrel =3D 1;
    +		v.left =3D strtof(lstr, &endp);
    +		if (*endp !=3D '\0' && (*endp !=3D '%' || *(endp + 1) !=3D '\0')) {
    +			warnx("invalid volume value: %s", lstr);
    +			return (-1);
    +		}

    -		/* be backwards compatible */
    -		if (strstr(lstr, ".") =3D=3D NULL)
    +		if (*endp =3D=3D '%')
     			v.left /=3D 100.0f;
     	}
     	if (n > 1) {
     		if (*rstr =3D=3D '+' || *rstr =3D=3D '-')
     			rrel =3D 1;
    -		v.right =3D strtof(rstr, NULL);
    +		v.right =3D strtof(rstr, &endp);
    +		if (*endp !=3D '\0' && (*endp !=3D '%' || *(endp + 1) !=3D '\0')) {
    +			warnx("invalid volume value: %s", rstr);
    +			return (-1);
    +		}

    -		/* be backwards compatible */
    -		if (strstr(rstr, ".") =3D=3D NULL)
    +		if (*endp =3D=3D '%')
     			v.right /=3D 100.0f;
     	}
     	switch (n) {
     	case 1:
     		v.right =3D v.left; /* FALLTHROUGH */
    +		rrel =3D lrel;
     	case 2:
     		if (lrel)
     			v.left +=3D m->dev->vol.left;





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?7D9CA81D-1688-4B99-97ED-EB40A60EBF60>