- Command detect:
- Issue warning for monitors for which ddcutil should not be used to
change settings.
- Currently only entry is Xaomi model "Mi Monitor"
- Issue warning for monitors for which ddcutil should not be used to
change settings.
- Debug messages. Environment variables DDCUTIL_DEBUG_PARSE, DDCUTIL_DEBUG_MAIN, DDCUTIL_DEBUG_LIBINIT can be set to enable trace messages in command line ddcutil or shared library libddcutil.so during initialization and before command options.
- Option --force-slave-address no longer has any effect. The dev-i2c ioctl() interface is now used exclusively instead of write() and read() calls for writing to and reading from the I2C bus. As a result, ioctl(SLAVE_ADDRESS), which has been the source of EBUSY errors from driver i2-dev, is no longer used. In principle, EBUSY errors are still possible from within individual video drivers, but this has never been observed.
- Sleeps immediately after opening a /dev/i2c device and after completion of a read operation are completely eliminated. The sleep-suppression related uptions, --sleep-less, ***--less-sleep, --enable-sleep-suppression, and --disable-sleep-suppression no longer have any effect.
- Option --dca: The Dynamic Sleep Adjustment algorithm was rewritten to more sensibly increment sleep times after before each retry.
- Commands getvcp and vcpinfo:
- Allow specification of multiple feature codes, for example ddcutil getvcp 10 12 , ddcutil vcpinfo 14 16 18 1a
- Command detect:
- Option --verbose produces addtional information:
- The product code is reported in hex as well as decimal
- The EDID source field is set to I2C in the normal case where the EDID is read directly from slave address X50. Alternative values include USB, X11, and SYSFS.
- Command environment:
- Scanning of /sys by option --verbose has been improved.
- Add msg re SYSENV_QUICK_TEST environment variable
- Command interrogate:
- Set --disable-capabilities-cache
- More user friendly messages at startup regarding /dev/i2c buses that cannont be opened. If the problem is inadequate permissions (EACCES), the user is directed to www.ddcutil.com/permissions.
- Better handle malformed EDIDs
- Trailing blanks on model and serial number are stripped. This affects commands detect --terse, loadvcp and dumpvcp, and also the file names of user defined features.
- Option --stats:
- I2C ioctl() calls for reading and writing are now reported as type IE_IOCTL_WRITE and IE_IOCTL_READ rather than IE_OTHER
- IE_WRITE_READ stats are no longer reported, as they are redundant
- Source code has been extensively cleaned up. In particular, directory adl containing code for the old proprietary AMD video driver, has been removed.
- Building ddcutil:
- Library libi2c.so is no longer linked. It was needed only for some experimental code. libddcutil:
- ddca_get_display_refs(), ddca_get_display_info_list2():
- Open errors can be retrieved using ddca_get_error_info(). Note that the API calls still succeed.
- Deprecated API functions have no effect:
- ddca_enable_force_slave_address(), ddca_is_force_slave_address_enabled()
- The sleep multiplier value was not respected for new API threads.
- User Defined Features: Keyword NC set the incorrect flag in a feature descriptor.
- Option --dsa: Fix adjustment factor calculation due to incorrect variable type.
- Fixed a segfault that occurred at ddcui startup. The fault was in a trace message for function ddc_start_watch_displays() which watches for displays that are added or removed.
- Fixed a segfault in ddcutil initialization because of unexpected contents in sysfs.
- Do not use glib function g_byte_array_steal(), which requires glib 2.60. ddcutil requires only glib 2.40.
- Miscellaneous memory leaks
- Double count I2C writes in stats.
- API function ddca_enable_force_slave_address()
- API function ddca_is_force_slave_address_enabled()
- Improve handling of and messages regarding DDC communication failures with
errno EBUSY. In particular, this error occurs when driver ddcci is loaded.
- Command detect: If DDC communication fails with error EBUSY, report the display as "Busy" instead of "Invalid" and suggest use of option --force-slave-address.
- Command environment: Suggest use of option --force-slave-address if driver ddcci is detected.
- Messages re EBUSY errors are always written to the system log.
- Command detect:
- Do not report the EDID source unless there is a value to show. This value is set only for USB connected monitors.
- Show extended output based on option --verbose, not undocumented option --very-verbose.
- Report color bit depth if EDID version >= 1.4
- Command environment: Simplify the exploration of sysfs.
- API changes:
- Field latest_sl_values in struct DDCA_Feature_Metadata struct is no longer set,
- API function ddca_report_display_info(): include binary serial number
- Building and porting:
- When building ddcutil, allow for building a static library if configure option --enable-static is set. Linux distributions frown on packaging static libraries, but if a user wants to build it who am I to judge. By default, static libraries are not built,
- Replace use of Linux specific function __assert_fail() with exit() in traced assertions. __assert_fail is used in the Linux implementation of assert(), but is not in the C specification. This can present a problem in porting ddcutil.
- Code cleanup:
- Delete incomplete, experimental code for asynhronous feature access, including files src/ddc/ddc_async.c/h.
- Remove unused files src/util/output_sink.c/h.
- Only write Starting/Terminating messages to the system log if option --syslog is specified.
- Avoid compilation warnings when assert() statments are disabled (NDEBUG is defined).
- Fixed a segfault in the debug/trace code of ddca_get_display_refs()
- Memory leaks.
- Option --syslog: Send trace and debug messages to the system log in addition to the trace location.
- Option --wall-timestamp, --wts: Prefix trace and debug messages with the current wall time.
- Option --settings: Report option settings in effect.
- Details of current settings are no longer reported by every command invocation when option --verbose is specified. Use option --settings to control option reporting.
- Removed sample program demo_watch_displays.
- Numerous memory leaks, in particular ones triggered by ddca_redetect_displays().
- Build failure if configure option --enable-x11=no was specified.
- API functions ddc_open_display(),ddc_open_display2() now always return DDCRC_ALREADY_OPEN if the the display is already open in the current thread. Previously an assert() failure would occur under certain circumstances.
- Options --disable-capabilities-cache, --disable-udf not respected
- Proof of concept code that watches for display hotplug events
- libddcutil log file
- libddcuti and ddcutil write critical events to syslog
- API function ddca_add_trace_group()
- API function ddca_extended_version_string()
- API function ddca_redetect_displays()
- API function ddca_get_display_refs()
- API function ddca_get_display_info()
- API function ddca_free_display_info()
- Macro DDCUTIL_VSUFFIX
- If possible, command ddcutil environment --verbose calls get-edid|parse-edid as an additional EDID check.
- Additional validation of DDCA_Display_Ref and DDCA_Display_Handle arguments to API functions
- Improved tracing of assert() failures
- --enable-capabilities-cache is now the default
- libddcutil name is now libddcutil.so.4.1.0
- Command detect: improved analysis of /sys
- Command detect: --verbose option reports raw EDID
- Option --help does not report undocumented option --very-verbose.
- Incorrect assembly of sysfs path definitions in ddcutil environment --verbose
- ddcutil diagnostics were not finding module i2c-dev if the system (e.g. NixOS) used a non-standard location for the modules directory (Issue #178). The checks have been rewritten to use libkmod.
- Eliminate repeated messages from the experimental display hotplug detection code if no /sys/class/drm/cardN devices exist. (libddcutil)
For details, see ddcutil Release Notes.
- Configuration file ddcutilrc, located on the XDG config path.
- Cache monitor capabilities strings to improve performance of the capabilities command.
Controlled by options --enable-capabilities-cache, --disable-capabilities-cache. - Workarounds for problems in DRM video drivers (e.g. i915, AMDGPU) when displays are connected to a docking station. The same monitor can appear as two different /dev/i2c devices, but only one supports DDC/CI. If possible these are reported as a "Phantom Display" instead of as "Invalid Display". Also, try to work around problems reading the EDID on these monitors, which can cause the monitor to not be detected.
- Option --edid-read-size 128 or --edid-read-size 256 forces ddcutil to request that number of bytes when reading the EDID, which can occasionally allow the EDID to be read successfully.
- Issue warning at startup if driver i2c-dev is neither loaded nor built into the kernel.
- By default, files generated by dumpvcp are saved in the XDG_DATA_HOME directory.
- environment --verbose has more detailed reporting of relevant sections of /sys.
- Additional information on detect --verbose.
- Additional functions are traceable using option --trcfunc
- User defined features are enabled by default.
- Regard IO operations setting errno EBUSY as recoverable, suggest use of option --force-slave-address. (EBUSY can occur when ddcontrol's ddcci driver is loaded.)
- Fix build failure when configure option --disable-usb is combined with --enable-envcmds.
- On AMD Navi2 variants, e.g. RX 6000 series, ddcutil display detection put the GPU into an inconsistent state when probing a SMU I2C bus exposed by the GPU. This change ensures that ddcutil does not attempt to probe such buses.