Commit graph

282 commits

Author SHA1 Message Date
Simon Ser
3b83980dde Add code coverage configuration file
Exclude build/ from code coverage, otherwise build/pnp-id-table.c
is included in the stats. Also add subprojects/ which is added by
default by Meson unless there is a custom config file.

Signed-off-by: Simon Ser <contact@emersion.fr>
2023-01-07 13:47:28 +01:00
Sebastian Wick
4a8684d1b0 edid: add support for CVT timing code descriptors
Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com>
2023-01-04 02:12:22 +01:00
Simon Ser
f7160730cc Introduce di_cvt_compute()
Same as di_gtf_compute(), but for CVT.

Code imported from edid-decode, fixed up [1] [2], edited for
code style and extended to return all output parameters.

Will help with CVT timing code descriptors in EDID [3].

[1]: https://lore.kernel.org/linux-media/20221005121221.14882-1-contact@emersion.fr/T/#u
[2]: https://lore.kernel.org/linux-media/20221028142405.81894-1-contact@emersion.fr/T/#u
[3]: https://gitlab.freedesktop.org/emersion/libdisplay-info/-/merge_requests/93

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-12-16 15:37:38 +01:00
Sebastian Wick
8fbc366c7c cta: parse short audio descriptors
Co-authored-by: Simon Ser <contact@emersion.fr>
Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com>
2022-12-14 15:19:27 +01:00
Joshua Ashton
c995305a69 info: Use memory_stream_cleanup in di_info_get_serial
Signed-off-by: Joshua Ashton <joshua@froggi.es>
2022-11-25 12:15:14 +00:00
Joshua Ashton
12923cc3bc info: Use memory-stream API for di_info_parse_edid
Avoids a bunch of duplicated code here.

Signed-off-by: Joshua Ashton <joshua@froggi.es>
2022-11-25 12:15:14 +00:00
Joshua Ashton
c63ca40ef7 memory-stream: Add memory_stream_cleanup helper
Signed-off-by: Joshua Ashton <joshua@froggi.es>
2022-11-25 12:15:14 +00:00
Joshua Ashton
a10c478558 memory-stream: Factor out memory-stream related code to a new file
Signed-off-by: Joshua Ashton <joshua@froggi.es>
2022-11-25 12:15:14 +00:00
Simon Ser
b21fdb3a0d ci: pin Alpine version
This prevents the Alpine image from being upgraded to a new major
version when re-generated. ci-templates defaults FDO_BASE_IMAGE to
alpine:latest.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-11-24 10:27:13 +01:00
Simon Ser
4e0fd2c979 di-edid-decode: print DMT reduced blanking flag
Signed-off-by: Simon Ser <contact@emersion.fr>
2022-11-23 15:30:33 +01:00
Simon Ser
7d5003c5ac dmt: add reduced_blanking field
Signed-off-by: Simon Ser <contact@emersion.fr>
2022-11-23 15:30:33 +01:00
Simon Ser
671c8d78d3 di-edid-decode: print full established timings III
Signed-off-by: Simon Ser <contact@emersion.fr>
2022-11-23 15:30:33 +01:00
Simon Ser
5b81e0b578 di-edid-decode: add special case for 16:10 aspect ratio
The mathematical aspect ratio is 8:5 but people use 16:10.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-11-23 15:30:33 +01:00
Simon Ser
6b8bdb5b3b ci: upgrade edid-decode
Signed-off-by: Simon Ser <contact@emersion.fr>
2022-11-23 15:30:28 +01:00
Simon Ser
7289c6ea59 ci: upgrade to Alpine 3.17
This gives us the hwdata package.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-11-23 14:23:59 +00:00
Simon Ser
85d6a3a1db test: fix default path for di-edid-decode
Since a001cab480 ("build: split off di-edid-decode into separate
file"), di-edid-decode is located in a subdirectory.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-11-23 11:12:24 +01:00
Simon Ser
a001cab480 build: split off di-edid-decode into separate file
Avoids repeating the directory name.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-11-21 15:41:07 +01:00
Simon Ser
448046519e build: override dependency for subproject usage
Makes it easier to use libdisplay-info as a Meson subproject.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-11-21 14:10:21 +00:00
Simon Ser
e19ee5d1bc build: add gen-test-data run target
This makes it easier to re-generate the test diffs. The build system
will properly set DI_EDID_DECODE/DI_EDID_PRINT (and will rebuild
these tools if they are out-of-date).

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-11-17 22:10:08 +01:00
Pekka Paalanen
ac857e8985 info: use PNP ID database for manufacturer names
The three character PNP ID is a key to manufacturer name database. It
may be desirable to report the manufacturer's real name than just PNP ID
which can be misleading, e.g. MSI refers to Microstep and not MSI GmbH.

This builds the PNP ID database into libdisplay-info to avoid having to
find and parse files at runtime.

tool/gen-search-table.py started as a copy of Wayland 1.21.0's
src/embed.py and took influence from
10945c4ed8/conv.py
However, our script parses the text file shipped in hwdata package in
Debian (and presumably other distributions) rather than the original
CSV.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2022-11-11 13:09:18 +02:00
Pekka Paalanen
3c675db02f ci: install hwdata
This is needed for the following patch to find pnp.ids.

This is not available in the Alpine release we are using right now.

That --disable-blacklist works around the error:
install: unrecognized option: T
BusyBox v1.35.0 (2022-08-01 15:14:44 UTC) multi-call binary.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2022-11-09 14:18:24 +02:00
Pekka Paalanen
89f8eecc11 editorconfig: add python rules
This seems to be what the existing python file uses, and trying to write
python when your editor is constantly resetting its settings according
to the previous "incorrect" editorconfig was infuriating.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2022-11-09 14:18:24 +02:00
Pekka Paalanen
00b446d5db test: make edid-decode-diff.sh easier to run
Having to define just DI_EDID_DECODE was tolerable when REF_EDID_DECODE
does not need setting, but now that there are two built tools, it is
getting inconvenient.

Change the defaults to match the build directory structure and add a new
overridable for the build directory.

Now I only need to set BUILDDIR for this to work. My build dirs are
completely elsewhere, but if someone uses the usual 'meson build'
incantation, the default value for BUILDDIR should be fine.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2022-11-09 14:18:04 +02:00
Pekka Paalanen
f70fa58441 test: add high-level API test
This new test exercises all existing high-level API to make sure the
output does not change unexpectedly.

Unlike with edid-decode tests, these new print tests do not have an
externally defined groundtruth. They are only to detect changes and
exercise code paths.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2022-11-09 14:18:04 +02:00
Pekka Paalanen
b3231b85dd info: add getters for make, model and serial
The functionality of these new high-level functions as implemented here
follows what Weston 11.0's ad hoc EDID parser extracted. There are
differences to Weston though:
- get_model() falls back to the numeric model field
- unusual characters are escaped as hex rather than replaced with dash

The documentation of the new functions allows to change the behavior of
get_model and get_make to e.g. convert PNP ID to a company name. The
notes about UTF-8 allow us to make use of UTF-8 fields if such appear
useful in the future.

Weston's ad hoc parser shall be replaced with this. After another API
addition, the high-level API semantics will match what Weston expects.

The memory_stream stuff is for convenience and will see more complex
use in the future.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2022-11-09 14:14:27 +02:00
Simon Ser
4af5b96140 di-edid-decode/cta: round VESA transfer characteristics
Fixes the differences with edid-decode.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-10-20 08:07:22 +00:00
Simon Ser
b7d0793a03 edid-decode/cta: align data block names with edid-decode
We were diverging here.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-10-20 08:07:22 +00:00
Simon Ser
c930f13457 test: add custom-uncommon-cta-vesa
This is a hand-crafted EDID taken from edid-decode (test/cta-vesa.test).
It contains uncommon blocks: VESA Display Transfer Characteristics Data
Block and VESA Video Display Device Data Block in the CTA-861 extension.

While it's not as good as a real-world EDID, it can still improve our
test coverage and ensure we behave like edid-decode.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-10-20 08:07:22 +00:00
Simon Ser
add5d0bd76 info: drop di_info_get_product_name()
This was used as an example of what a high-level API function would
look like, but is too opinionated to be useful across many
compositors.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-10-15 19:01:08 +02:00
Pekka Paalanen
cda99a0913 readme: add Using section
I believe this is what we intended, and it is what I want.

It could lead to duplicating low-level API in high-level API at first,
but once we start seeing DisplayID in the wild, the high-level functions
need to start looking into both EDID and DisplayID APIs to deliver the
desired information.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2022-10-14 13:26:40 +03:00
Pekka Paalanen
6d7ce6dbd8 readme: mention edid-decode version
I was scratching my head for a good while, why does the test suite fail
straight out of upstream on one EDID file. Turns out I was using a
different version of edid-decode than CI, which caused the recorded diff
patch to fail to apply. I was missing

41507c0b5f "ci: update edid-decode"

Make an explicit note about this dependency.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2022-10-14 13:26:37 +03:00
Pekka Paalanen
50ce9c73f5 Get size_t definition for info.h
VScode told me that this header wasn't self-contained. Fix it.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2022-10-14 13:26:30 +03:00
Pekka Paalanen
56be915e27 edid: fix uint16_t conversion warning
../../git/weston/subprojects/display-info/edid.c: In function ‘decode_chromaticity_coord’:
../../git/weston/subprojects/display-info/edid.c:250:8: warning: conversion from ‘int’ to ‘uint16_t’ {aka ‘short unsigned int’} may change value [-Wconversion]
  250 |  raw = (uint16_t) (hi << 2) | lo;
      |        ^

Apparently the cast applies to (hi << 2), then bitwise-or implicitly
promotes to signed int, and that gets assigned to uint16_t raw. At least
gcc 10.2.1 from Debian seems to think so.

Fix it by forcing the cast on the complete result.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2022-10-13 13:03:16 +03:00
Simon Ser
619fc30c7b ci: update edid-decode
Contains a fix for DsiplayID tiled display topology and for CVT
RBv3.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-10-11 11:48:29 +00:00
Simon Ser
41d3278807 readme: link to latest code coverage report
Signed-off-by: Simon Ser <contact@emersion.fr>
2022-10-07 07:20:18 +02:00
Simon Ser
97a8f16d1f di-edid-decode: split into multiple files
di-edid-decode.c is getting bit and messy.

Use one file per spec.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-10-07 05:05:27 +00:00
Simon Ser
f2d6819f04 displayid: add missing includes in public header
Signed-off-by: Simon Ser <contact@emersion.fr>
2022-10-07 05:05:27 +00:00
Simon Ser
2ec42b3bd2 readme: add link to website
The website hosts the documentation.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-10-05 10:47:44 +00:00
Simon Ser
ec2521e4e0 Generate HTML documentation
Leverages gyosu [1] to generate HTML documentation from the header
files.

[1]: https://sr.ht/~emersion/gyosu/

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-10-04 16:21:46 +00:00
Simon Ser
eea7215002 di-edid-decode: print preferred flag for type I timing
Signed-off-by: Simon Ser <contact@emersion.fr>
2022-10-03 14:14:45 +02:00
Simon Ser
cad7de92c7 displayid: add support for display parameters data block
Signed-off-by: Simon Ser <contact@emersion.fr>
2022-10-03 08:56:03 +02:00
Simon Ser
d7144ad9b9 displayid: parse type I timings
Signed-off-by: Simon Ser <contact@emersion.fr>
2022-10-03 06:32:38 +00:00
Simon Ser
87e264f7fb Introduce di_gtf_compute()
This is a function to compute a timing according to GTF.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-09-29 11:50:09 +00:00
Sebastian Wick
11f48480d8 cta: add support for VESA Display Transfer Characteristic data block
Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com>
2022-09-28 23:56:46 +02:00
Sebastian Wick
78b4f0eb68 edid: use the correct definition for maximum standard timings
Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com>
2022-09-28 02:44:35 +02:00
Simon Ser
40d8018a7e displayid: parse data blocks
Just parse the tag for now.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-09-27 07:56:09 +00:00
Simon Ser
3b8816ba3f displayid: add logging helpers
Signed-off-by: Simon Ser <contact@emersion.fr>
2022-09-27 07:56:09 +00:00
Simon Ser
186e78c128 displayid: validate checksum
Signed-off-by: Simon Ser <contact@emersion.fr>
2022-09-27 07:56:09 +00:00
Simon Ser
ceabc884fd displayid: parse product type
Signed-off-by: Simon Ser <contact@emersion.fr>
2022-09-27 07:56:09 +00:00
Simon Ser
106947ac1f displayid: parse section size
The section size might be smaller than the provided buffer size,
because the buffer might have padding at the end.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-09-27 07:56:09 +00:00