diff mbox series

[08/10] edid-decode: Dump hex of non-decoded extension blocks

Message ID 20191123164604.268-9-joevt@shaw.ca (mailing list archive)
State New, archived
Headers show
Series edid-decode: bug fixes, additions, changes | expand

Commit Message

joevt Nov. 23, 2019, 4:46 p.m. UTC
- Extension blocks that are not decoded will at least have their contents output as hex. With this, two EDIDs with different data in an undecoded extension block will not be considered equal.
- For unknown extension blocks, include the Extension Block tag number.
- Renamed conformant_extension to nonconformant_extension in parse_extension because boolean value of 1 = nonconformant according to return result of parse_cta and parse_displayid; matches interpretation in edid_from_file.

Signed-off-by: Joe van Tunen <joevt@shaw.ca>
---
 edid-decode.c | 80 +++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 62 insertions(+), 18 deletions(-)
diff mbox series

Patch

diff --git a/edid-decode.c b/edid-decode.c
index a40ee96..2f2f1c5 100644
--- a/edid-decode.c
+++ b/edid-decode.c
@@ -2474,7 +2474,7 @@  static void cta_block(const unsigned char *x)
 
 static int parse_cta(const unsigned char *x)
 {
-	int ret = 0;
+	int ret = 0; // 0 = conformant
 	unsigned version = x[1];
 	unsigned offset = x[2];
 	const unsigned char *detailed;
@@ -2483,7 +2483,7 @@  static int parse_cta(const unsigned char *x)
 
 	if (version >= 1) do {
 		if (version == 1 && x[3] != 0)
-			ret = 1;
+			ret = 1; // 1 = nonconformant
 
 		if (offset < 4)
 			break;
@@ -2866,28 +2866,72 @@  static void extension_version(const unsigned char *x)
 
 static int parse_extension(const unsigned char *x)
 {
-	int conformant_extension = 0;
+	int nonconformant_extension = 0;
 
 	printf("\n");
 
 	switch (x[0]) {
-	case 0x02: printf("CTA Extension Block\n");
-		   extension_version(x);
-		   conformant_extension = parse_cta(x);
-		   break;
-	case 0x10: printf("VTB Extension Block\n"); break;
-	case 0x40: printf("DI Extension Block\n"); break;
-	case 0x50: printf("LS Extension Block\n"); break;
-	case 0x60: printf("DPVL Extension Block\n"); break;
-	case 0x70: printf("DisplayID Extension Block\n");
-		   conformant_extension = parse_displayid(x);
-		   break;
-	case 0xf0: printf("Block map\n"); break;
-	case 0xff: printf("Manufacturer-specific Extension Block\n"); break;
-	default:   printf("Unknown Extension Block\n"); break;
+	case 0x02:
+		printf("CTA Extension Block\n");
+		extension_version(x);
+		nonconformant_extension = parse_cta(x);
+		break;
+	case 0x10:
+		printf("VTB Extension Block\n");
+		extension_version(x);
+		printf("  ");
+		hex_block(x + 2, 125);
+		do_checksum(x, EDID_PAGE_SIZE);
+		break;
+	case 0x40:
+		printf("DI Extension Block\n");
+		extension_version(x);
+		printf("  ");
+		hex_block(x + 2, 125);
+		do_checksum(x, EDID_PAGE_SIZE);
+		break;
+	case 0x50:
+		printf("LS Extension Block\n");
+		extension_version(x);
+		printf("  ");
+		hex_block(x + 2, 125);
+		do_checksum(x, EDID_PAGE_SIZE);
+		break;
+	case 0x60:
+		printf("DPVL Extension Block\n");
+		extension_version(x);
+		printf("  ");
+		hex_block(x + 2, 125);
+		do_checksum(x, EDID_PAGE_SIZE);
+		break;
+	case 0x70:
+		printf("DisplayID Extension Block\n");
+		nonconformant_extension = parse_displayid(x);
+		do_checksum(x, EDID_PAGE_SIZE);
+		break;
+	case 0xf0:
+		printf("Block map\n");
+		printf("  ");
+		hex_block(x + 1, 126);
+		do_checksum(x, EDID_PAGE_SIZE);
+		break;
+	case 0xff:
+		printf("Manufacturer-specific Extension Block\n");
+		extension_version(x);
+		printf("  ");
+		hex_block(x + 2, 125);
+		do_checksum(x, EDID_PAGE_SIZE);
+		break;
+	default:
+		printf("Unknown Extension Block (%02Xh)\n", x[0]);
+		extension_version(x);
+		printf("  ");
+		hex_block(x + 2, 125);
+		do_checksum(x, EDID_PAGE_SIZE);
+		break;
 	}
 
-	return conformant_extension;
+	return nonconformant_extension;
 }
 
 static int edid_lines = 0;