H Kyle,

| +Note that relative percentages are still relative to 1.0, not to the current
| +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 reword 
accordingly.

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

Thanks,

Ravi (rpokala@)

-----Original Message-----
From: <owner-src-committ...@freebsd.org> on behalf of Kyle Evans 
<kev...@freebsd.org>
Date: 2022-06-17, Friday at 20:53
To: <src-committ...@freebsd.org>, <dev-commits-src-all@FreeBSD.org>, 
<dev-commits-src-m...@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=4014365e421991814703249d4748d6dcac6686b6

    commit 4014365e421991814703249d4748d6dcac6686b6
    Author:     Kyle Evans <kev...@freebsd.org>
    AuthorDate: 2022-04-30 03:12:56 +0000
    Commit:     Kyle Evans <kev...@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 
interpreted
        as a percent until you slap a decimal on it and magically it becomes an
        absolute value.

        Let's have a flag day in 14.0 and remove this shim entirely.  Setting 
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=-10";
    +   action                  "mixer vol.volume=-10%";
     };

     notify 0 {
    @@ -60,7 +60,7 @@ notify 0 {
        match "subsystem"       "keys";
        match "type"            "volume";
        match "notify"          "up";
    -   action                  "mixer vol.volume=+10";
    +   action                  "mixer vol.volume=+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=-10";
    +   action                  "mixer vol.volume=-10%";
     };

     notify 0 {
        match "system"          "ACPI";
        match "subsystem"       "ASUS";
        match "notify"          "0x30";
    -   action                  "mixer vol.volume=+10";
    +   action                  "mixer vol.volume=+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=-10";
    +        action                  "mixer vol.volume=-10%";
     };

     notify 0 {
             match "system"          "ACPI";
             match "subsystem"       "ASUS-Eee";
             match "notify"          "0x15";
    -        action                  "mixer vol.volume=+10";
    +        action                  "mixer vol.volume=+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=0
    -                   mixer rec.volume=30
    +                   mixer rec.volume=30%
                fi
                ;;
             *)
    diff --git a/usr.bin/fortune/datfiles/freebsd-tips 
b/usr.bin/fortune/datfiles/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 use 
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=<volume>'.  To get a list of what
    +computer by typing 'mixer <type>.volume=<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 
control 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=+1
    -Consumer:Volume_Decrement           1 0 mixer -f $1 vol.volume=-1
    +Consumer:Volume_Increment           1 0 mixer -f $1 vol.volume=+1%
    +Consumer:Volume_Decrement           1 0 mixer -f $1 vol.volume=-1%
     Consumer:Mute                               1 0 mixer -f $1 vol.mute=^
    -Consumer:Channel_Top.Microsoft:Base_Up      1 0 mixer -f $1 bass.volume=+1
    -Consumer:Channel_Top.Microsoft:Base_Down 1 0 mixer -f $1 bass.volume=-1
    +Consumer:Channel_Top.Microsoft:Base_Up      1 0 mixer -f $1 bass.volume=+1%
    +Consumer:Channel_Top.Microsoft:Base_Down 1 0 mixer -f $1 bass.volume=-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 Wingman.
     Notice the debounce of 1 for buttons and 5 for the slider.
     .Bd -literal -offset indent
    -Button:Button_1      1 1   mixer vol.volume=+10
    -Button:Button_2      1 1   mixer vol.volume=-10
    -Generic_Desktop:Z * 5      mixer vol.volume=`echo $V | awk '{print 
int($$1/255*100)}'`
    +Button:Button_1      1 1   mixer vol.volume=+10%
    +Button:Button_2      1 1   mixer vol.volume=-10%
    +Generic_Desktop:Z * 5      mixer vol.volume=`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 ^ | + | - | =
    @@ -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 
inclusively.
    -If no
    -.Ql \&.
    -character is present, the value is treated like a percentage, for 
backwards 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 the
     current settings by the amount specified.
    +Note that relative percentages are still relative to 1.0, not to the 
current
    +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 =value .
    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 = rrel = 0;
        if (n > 0) {
                if (*lstr == '+' || *lstr == '-')
    -                   lrel = rrel = 1;
    -           v.left = strtof(lstr, NULL);
    +                   lrel = 1;
    +           v.left = strtof(lstr, &endp);
    +           if (*endp != '\0' && (*endp != '%' || *(endp + 1) != '\0')) {
    +                   warnx("invalid volume value: %s", lstr);
    +                   return (-1);
    +           }

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

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



Reply via email to