Report the SVDs inside the video data block.
We'll need to add additional APIs to get detailed SVD mode info
in the future (with a SVD table).
Signed-off-by: Simon Ser <contact@emersion.fr>
Nested structs makes it impossible to extend the nested struct after
extending the base struct. The union acts as a single struct in this
case but the nesting is still an issue. Use pointers to those structs instead
to keep all of them extensible. Only the struct which is applicable for the
signal type is not a null pointer to make sure only valid data is accessed.
Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com>
This is a private function which parses DTDs. This will be useful
in the next commit to parse DTDs from the CTA extension.
Signed-off-by: Simon Ser <contact@emersion.fr>
This is a bit messy because the values depend on various misc flags
defined earlier in the spec, and the meaning changes between EDID 1.3
and 1.4. On top of that edid-decode prints something confusing in the
EDID 1.3 case.
Signed-off-by: Simon Ser <contact@emersion.fr>
This will allow us to use the helpers from cta.c.
The functions are marked "static inline" to avoid warnings about
unused functions.
Signed-off-by: Simon Ser <contact@emersion.fr>
The Display Monitor Timing specification is a PDF with data tables.
A small Python script can be used to extract its contents in a
machine-readable form.
For now only extract a few fields. This can be extended later.
Signed-off-by: Simon Ser <contact@emersion.fr>
The analog/digital flags are left for a future patch.
A join_str() function is introduced in di-edid-decode: upstream
edid-decode uses a comma-separated list with a handful of other
flags.
Signed-off-by: Simon Ser <contact@emersion.fr>
This makes it clearer what the range of the value can be: we no
longer need to deal with 16-bit integers.
Signed-off-by: Simon Ser <contact@emersion.fr>
According to table 3.21 note 17, these fields should be set to zero
for some sinks, e.g. front projectors.
edid-decode hides the size from its output if both fields are zero.
Signed-off-by: Simon Ser <contact@emersion.fr>
The extra underscore indicates that it's not a function which is
part of our public API. This will allow the next commit to setup the
linker to export functions based on their name.
Signed-off-by: Simon Ser <contact@emersion.fr>
These appear after the basic display parameters and features in
the EDID structure, so it makes sense to put them below in the
header.
I got confused while during a rebase.
While at it, move the declaration for struct di_edid_display_descriptor
before the one for di_edid_get_display_descriptors(), because the
latter uses the former.
Signed-off-by: Simon Ser <contact@emersion.fr>
Upstream edid-decode hides the serial number in this case.
The spec says that it's optional, and set to zero when unused.
Signed-off-by: Simon Ser <contact@emersion.fr>
The spec defines an upper bound for the extension block count,
which means we don't need to dynamically allocate the array. This
simplifies our logic a bit by removing an allocation error codepath.
The array is NULL-terminated, so EDID_MAX_BLOCK_COUNT is suitable
since it's the max number of extension blocks including the base
block, and the array doesn't include the base block.
Signed-off-by: Simon Ser <contact@emersion.fr>
This high-level function leverages the low-level
di_edid_get_vendor_product function to build a string describing
the display device product.
Signed-off-by: Simon Ser <contact@emersion.fr>
This exposes a new di_info opaque struct from which high-level
information will be able to be queried by the user. A new
di_info_parse_edid function creates a di_info from an EDID blob.
Signed-off-by: Simon Ser <contact@emersion.fr>
Introduce an opaque struct di_edid to host EDID structures. Add
a function to create a di_edid (with basic size, header and
checksum validation). Add functions to fetch the EDID version and
revision.
This doesn't do much, but hopefully can be used as a fundation.
Signed-off-by: Simon Ser <contact@emersion.fr>