From e6830abc40e5889296014ecf0e69008ec231d278 Mon Sep 17 00:00:00 2001 From: MasaGratoR Date: Sat, 31 May 2025 19:29:38 +0200 Subject: [PATCH] Update SetSysEdid to include different types of Extension blocks --- nx/include/switch/services/set.h | 38 +++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/nx/include/switch/services/set.h b/nx/include/switch/services/set.h index 85fad53b..9533fcab 100644 --- a/nx/include/switch/services/set.h +++ b/nx/include/switch/services/set.h @@ -487,6 +487,30 @@ typedef struct { u8 padding[2]; } SetSysDataBlock; +typedef struct { + u8 extension_tag; ///< 2 = CEA EDID timing extension, 0x70 = DisplayID Extension Block, 0xF0 = EDID Extension Block Map + union { + struct { + u8 revision; + u8 dtd_start; + u8 native_dtd_count : 4; + u8 native_dtd_feature_bitmap : 4; + SetSysDataBlock data_block; + SetSysModeLine extended_timing_descriptor[5]; + u8 padding[5]; + } NX_PACKED cea; ///< CEA EDID timing extension + struct { + u8 data[0x7E]; + } NX_PACKED display_id; ///< [13.0.0+] DisplayID Extension Block + struct { + u8 second_block_extension_tag; + u8 third_block_extension_tag; + u8 padding[0x7C]; + } NX_PACKED block_map; ///< [13.0.0+] EDID Extension Block Map + } extension_block; + u8 extended_checksum; ///< Sum of 128 extended bytes should equal 0 mod 256. +} SetSysExtensionBlock; + /// Edid typedef struct { u8 pattern[8]; ///< Fixed pattern 00 FF FF FF FF FF FF 00. @@ -548,17 +572,9 @@ typedef struct { u8 extension_count; ///< Always 1. u8 checksum; ///< Sum of all 128 bytes should equal 0 mod 256. ///< Extended data. - u8 extension_tag; ///< Always 2 = CEA EDID timing extension. - u8 revision; - u8 dtd_start; - u8 native_dtd_count : 4; - u8 native_dtd_feature_bitmap : 4; - SetSysDataBlock data_block; - SetSysModeLine extended_timing_descriptor[5]; - u8 padding[5]; - u8 extended_checksum; ///< Sum of 128 extended bytes should equal 0 mod 256. - u8 data2[0x80]; ///< [13.0.0+] - u8 data3[0x80]; ///< [13.0.0+] + SetSysExtensionBlock data1; + SetSysExtensionBlock data2; ///< [13.0.0+] + SetSysExtensionBlock data3; ///< [13.0.0+] } SetSysEdid; /// DataDeletionSettings