Monitorcontrol: Volume/brightness increments don't work properly on non standard scales

Created on 16 Apr 2020  Â·  9Comments  Â·  Source: MonitorControl/MonitorControl

Hello,

When using my monitor over usb-c with the lid closed and a magic keyboard 2, my volume is capped at 4 bars when using the media keys (12/50 in monitor values).
However, when using ⇧ + ⌥ + Volume up/down, I can increase the volume above 4 bars.
Moreover, once this threshold crossed, I cannot increase volume in normal increments; decreasing works fine.

Screen Recording 2020-04-16 at 15 03 54

Using the sliders from the menu bars works even though the volume and brightness sections are greyed out.


Greyed out sections in the menubar screenshot

Screenshot 2020-04-16 at 15 11 19

Troubleshooting:

  • [x] Restarted macbook
  • [x] Restarted monitor
  • [x] Ran ddcctl (see below)
  • [x] Tried different cables:

    • USB-C to USB-C

    • HDMI to USB-C

ddcctl

I compiled ddcctl locally for amd and intel.
Running ./ddcctl -d 1 -v <volume> was successful in changing the volume.
(My monitor volume ranges between 0 and 50)

Information:

| Type | Model/Version |
|-------------------------|-------------------|
| Display | BenQ EX2780q over USB-C |
| Device | MBP 15" (2016) |
| OS | 10.15.4 |
| Monitor Control | 2.0.0 (Build 640) |

Minor Bug

All 9 comments

I have the issue with the same monitor + mac mini 2018

I have a similar issue.

At this level, my monitor displays it at 95/100. Any higher and it will go above 100 which doesn't make any sense. Each increment is also not the same value.

Screen Shot 2020-05-14 at 5 20 56 PM

I wonder if this is a Monitor specific issue or a problem with MonitorControl 🤔

Each increment is also not the same value.

This is a feature, it's done this way because we display the native macOS OSD and otherwise it would end up with uneven chicklet filling or other issues.

Is MonitorControl a wrapper around ddcctl ?

I might take a stab at modifying the app locally to see if I can get something working

Not anymore, it's currently using https://github.com/reitermarkus/DDC.swift

My best guess is it has something to do with the way we currently calculate volume steps and the fact that your monitor maxes out at 50, but I'm not sure.

Hum I see. Would it be realistic to add an option to specify the upper cap ?
I could try to verify this theory by changing the cap if need

Yes, either we take a look at the calculation method again or provide the ability to define a custom bounds. I think the custom bounds is probably the best approach as every single monitor seems to do something different.. lol.

After compiling and running locally, I got this at startup:


startup logs

2020-06-10 21:50:29.946110+0200 MonitorControl[57013:921861] [plugin] AddInstanceForFactory: No factory registered for id <REMOVED>
2020-06-10 21:50:29.985942+0200 MonitorControl[57013:921861]  HALC_ShellDriverPlugIn::Open: Can't get a pointer to the Open routine
2020-06-10 21:50:29.986665+0200 MonitorControl[57013:921861]  HALC_ShellDriverPlugIn::Open: Can't get a pointer to the Open routine
2020-06-10 21:50:30.013714+0200 MonitorControl[57013:921861]  HALC_ShellDriverPlugIn::Open: Can't get a pointer to the Open routine
Event tap creation failed: is your application sandboxed?
2020-06-10 21:50:30.129573+0200 MonitorControl[57013:921861] Metal API Validation Enabled
2020-06-10 21:50:30.288786+0200 MonitorControl[57013:922421] flock failed to lock maps file: errno = 35
2020-06-10 21:50:30.324510+0200 MonitorControl[57013:922421] flock failed to lock maps file: errno = 35
2020-06-10 21:51:03.083698+0200 MonitorControl[57013:921861] Service port vendor ID 0 differs from display product ID 2513.
2020-06-10 21:51:03.085799+0200 MonitorControl[57013:921861] Framebuffer: AMDFramebufferVIB
2020-06-10 21:51:03.085842+0200 MonitorControl[57013:921861] Location: IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/PEG0@1/IOPP/GFX0@0/ATY,Berbice@1/AMDFramebufferVIB/display0/AppleDisplay
2020-06-10 21:51:03.085870+0200 MonitorControl[57013:921861] Vendor ID: 2513, Product ID: 32630, Serial Number: 21573
2020-06-10 21:51:03.085888+0200 MonitorControl[57013:921861] Unit Number: 7
2020-06-10 21:51:03.085898+0200 MonitorControl[57013:921861] Service Port: 57363
2020-06-10 21:51:03.086551+0200 MonitorControl[57013:921861] kIOI2CSimpleTransactionType is supported.
2020-06-10 21:51:03.086786+0200 MonitorControl[57013:921861] Supported display found: BenQ EX2780Q (Vendor: 2513, Model: 32630)
2020-06-10 21:51:03.094209+0200 MonitorControl[57013:921861] Polling 10 times
2020-06-10 21:51:03.098524+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:03.098657+0200 MonitorControl[57013:921861] Response was: 00 00 00
2020-06-10 21:51:03.098675+0200 MonitorControl[57013:921861] Display does not support DDC.
2020-06-10 21:51:03.154646+0200 MonitorControl[57013:921861] Display supports enabling DDC application report.
2020-06-10 21:51:03.212942+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:03.213110+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:03.261382+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:03.261496+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:03.308299+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:03.308423+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:03.355068+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 228.
2020-06-10 21:51:03.355188+0200 MonitorControl[57013:921861] Response was: 62 00 00 32 00 0C E8 00 00 00 00
2020-06-10 21:51:03.403766+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:03.403903+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:03.452596+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:03.452711+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:03.501163+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:03.501327+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:03.549436+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:03.549597+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:03.598476+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:03.598588+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:03.646532+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:03.646646+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:03.646724+0200 MonitorControl[57013:921861] Reading 98 failed.
2020-06-10 21:51:03.647429+0200 MonitorControl[57013:921861] BenQ EX2780Q (DDC.DDC.Command.audioSpeakerVolume):
2020-06-10 21:51:03.647453+0200 MonitorControl[57013:921861]  - current ddc value: 12 - from display? false
2020-06-10 21:51:03.647465+0200 MonitorControl[57013:921861]  - maximum ddc value: 50 - from display? false
2020-06-10 21:51:03.647478+0200 MonitorControl[57013:921861] Polling 10 times
2020-06-10 21:51:03.647493+0200 MonitorControl[57013:921861] BenQ EX2780Q (DDC.DDC.Command.audioMuteScreenBlank):
2020-06-10 21:51:03.695152+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 50.
2020-06-10 21:51:03.695254+0200 MonitorControl[57013:921861] Response was: 00 62 00
2020-06-10 21:51:03.695271+0200 MonitorControl[57013:921861] Display does not support DDC.
2020-06-10 21:51:03.751723+0200 MonitorControl[57013:921861] Display supports enabling DDC application report.
2020-06-10 21:51:03.809028+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:03.809205+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:03.857687+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:03.857808+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:03.906231+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:03.906350+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:03.954414+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:03.954534+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:04.003777+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:04.003937+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:04.052573+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:04.052688+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:04.098695+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:04.098812+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:04.147349+0200 MonitorControl[57013:921861] Reading 141 took 8 tries.
2020-06-10 21:51:04.147389+0200 MonitorControl[57013:921861]  - current ddc value: 2
2020-06-10 21:51:04.147399+0200 MonitorControl[57013:921861]  - maximum ddc value: 2
2020-06-10 21:51:04.151176+0200 MonitorControl[57013:921861] Polling 10 times
2020-06-10 21:51:04.195240+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:04.195378+0200 MonitorControl[57013:921861] Response was: 00 00 00
2020-06-10 21:51:04.195405+0200 MonitorControl[57013:921861] Display does not support DDC.
2020-06-10 21:51:04.251659+0200 MonitorControl[57013:921861] Display supports enabling DDC application report.
2020-06-10 21:51:04.308853+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:04.308974+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:04.356833+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:04.356960+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:04.403957+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:04.404078+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:04.452576+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 228.
2020-06-10 21:51:04.452691+0200 MonitorControl[57013:921861] Response was: 10 00 00 64 00 12 D2 00 00 00 00
2020-06-10 21:51:04.498163+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:04.498275+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:04.546428+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:04.546540+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:04.594234+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:04.594347+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:04.641869+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:04.641988+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:04.689950+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 228.
2020-06-10 21:51:04.690078+0200 MonitorControl[57013:921861] Response was: 10 00 00 64 00 12 D2 00 00 00 00
2020-06-10 21:51:04.738796+0200 MonitorControl[57013:921861] Checksum of reply does not match. Expected 0, got 80.
2020-06-10 21:51:04.738935+0200 MonitorControl[57013:921861] Response was: 00 00 00 00 00 00 00 00 00 00 00
2020-06-10 21:51:04.738959+0200 MonitorControl[57013:921861] Reading 16 failed.
2020-06-10 21:51:04.739082+0200 MonitorControl[57013:921861] BenQ EX2780Q (DDC.DDC.Command.luminance):
2020-06-10 21:51:04.739099+0200 MonitorControl[57013:921861]  - current ddc value: 18 - from display? false
2020-06-10 21:51:04.739112+0200 MonitorControl[57013:921861]  - maximum ddc value: 100 - from display? false

Does it help triaging the issue ?

I will investigate further at some other time.

Was this page helpful?
0 / 5 - 0 ratings