diff --git a/edid_stockach.json b/edid_stockach.json index df1343e..5860682 100644 --- a/edid_stockach.json +++ b/edid_stockach.json @@ -45,5 +45,24 @@ "blue_y": 0.065, "white_x": 0.3125, "white_y": 0.329 + }, + "common_timing_modes": { + "m720_400_70": true, + "m720_400_88": false, + "m640_480_60": true, + "m640_480_67": false, + "m640_480_72": false, + "m640_480_75": true, + "m800_600_56": true, + "m800_600_60": true, + "m800_600_72": false, + "m800_600_75": true, + "m832_624_75": true, + "m1024_768_87": false, + "m1024_768_60": true, + "m1024_768_70": false, + "m1024_768_75": true, + "m1280_1024_75": true, + "m1152_870_75": true } } diff --git a/main b/main index 765140e..2c9646f 100755 Binary files a/main and b/main differ diff --git a/main.c b/main.c index 1703eb1..a9656e6 100644 --- a/main.c +++ b/main.c @@ -92,24 +92,24 @@ typedef struct __attribute__ (( packed )) { /*! Established timing bitmap. Supported bitmap for (formerly) very common timing modes. 3 bytes */ struct __attribute__ (( packed )) { - uint8_t m720_400_70 : 1; - uint8_t m720_400_80 : 1; - uint8_t m640_480_60 : 1; - uint8_t m640_480_67 : 1; - uint8_t m640_480_72 : 1; - uint8_t m640_480_75 : 1; - uint8_t m800_600_56 : 1; uint8_t m800_600_60 : 1; - uint8_t m800_600_72 : 1; - uint8_t m800_600_75 : 1; - uint8_t m832_624_75 : 1; - uint8_t m1024_768_87 : 1; - uint8_t m1024_768_60 : 1; - uint8_t m1024_768_70 : 1; - uint8_t m1024_768_75 : 1; + uint8_t m800_600_56 : 1; + uint8_t m640_480_75 : 1; + uint8_t m640_480_72 : 1; + uint8_t m640_480_67 : 1; + uint8_t m640_480_60 : 1; + uint8_t m720_400_88 : 1; + uint8_t m720_400_70 : 1; uint8_t m1280_1024_75: 1; - uint8_t m1152_870_75 : 1; + uint8_t m1024_768_75 : 1; + uint8_t m1024_768_70 : 1; + uint8_t m1024_768_60 : 1; + uint8_t m1024_768_87 : 1; + uint8_t m832_624_75 : 1; + uint8_t m800_600_75 : 1; + uint8_t m800_600_72 : 1; uint8_t reserved : 7; + uint8_t m1152_870_75 : 1; } common_timing_modes; /*! Standard timing information. Up to 8 2-byte fields describing standard display modes. Unused fields are filled with 01 01 hex. 16 bytes */ @@ -465,7 +465,6 @@ static int generate_chromaticity_coordinates( edid_t* edid, "{chromaticity_coordinates: {white_x: %f}}", &multi_use_flt); multi_use_int = stp_round(1024.0f * multi_use_flt); - printf("white_y>%f, %d\n", multi_use_flt, multi_use_int); edid->chromaticity_coordinates.blue_white_lsbs.white_x = 0x3 & multi_use_int; edid->chromaticity_coordinates.white_x_msbs = 0xFF & multi_use_int >> 2; // White y @@ -473,7 +472,6 @@ static int generate_chromaticity_coordinates( edid_t* edid, "{chromaticity_coordinates: {white_y: %f}}", &multi_use_flt); multi_use_int = stp_round(1024.0f * multi_use_flt); - printf("white_y>%f, %d\n", multi_use_flt, multi_use_int); edid->chromaticity_coordinates.blue_white_lsbs.white_y = 0x3 & multi_use_int; edid->chromaticity_coordinates.white_y_msbs = 0xFF & multi_use_int >> 2; } else { @@ -483,6 +481,88 @@ static int generate_chromaticity_coordinates( edid_t* edid, return 0; } +static int generate_common_timing_modes( edid_t* edid, + unsigned char* json_str, + size_t json_len) +{ + bool multi_use_bool; + + if (edid && json_str) { + json_scanf( json_str, json_len, + "{common_timing_modes: {m720_400_70: %B}}", + &multi_use_bool); + edid->common_timing_modes.m720_400_70 = 0x1 & multi_use_bool; + json_scanf( json_str, json_len, + "{common_timing_modes: {m720_400_88: %B}}", + &multi_use_bool); + edid->common_timing_modes.m720_400_88 = 0x1 & multi_use_bool; + json_scanf( json_str, json_len, + "{common_timing_modes: {m640_480_60: %B}}", + &multi_use_bool); + edid->common_timing_modes.m640_480_60 = 0x1 & multi_use_bool; + json_scanf( json_str, json_len, + "{common_timing_modes: {m640_480_67: %B}}", + &multi_use_bool); + edid->common_timing_modes.m640_480_67 = 0x1 & multi_use_bool; + json_scanf( json_str, json_len, + "{common_timing_modes: {m640_480_72: %B}}", + &multi_use_bool); + edid->common_timing_modes.m640_480_72 = 0x1 & multi_use_bool; + json_scanf( json_str, json_len, + "{common_timing_modes: {m640_480_75: %B}}", + &multi_use_bool); + edid->common_timing_modes.m640_480_75 = 0x1 & multi_use_bool; + json_scanf( json_str, json_len, + "{common_timing_modes: {m800_600_56: %B}}", + &multi_use_bool); + edid->common_timing_modes.m800_600_56 = 0x1 & multi_use_bool; + json_scanf( json_str, json_len, + "{common_timing_modes: {m800_600_60: %B}}", + &multi_use_bool); + edid->common_timing_modes.m800_600_60 = 0x1 & multi_use_bool; + json_scanf( json_str, json_len, + "{common_timing_modes: {m800_600_72: %B}}", + &multi_use_bool); + edid->common_timing_modes.m800_600_72 = 0x1 & multi_use_bool; + json_scanf( json_str, json_len, + "{common_timing_modes: {m800_600_75: %B}}", + &multi_use_bool); + edid->common_timing_modes.m800_600_75 = 0x1 & multi_use_bool; + json_scanf( json_str, json_len, + "{common_timing_modes: {m832_624_75: %B}}", + &multi_use_bool); + edid->common_timing_modes.m832_624_75 = 0x1 & multi_use_bool; + json_scanf( json_str, json_len, + "{common_timing_modes: {m1024_768_87: %B}}", + &multi_use_bool); + edid->common_timing_modes.m1024_768_87 = 0x1 & multi_use_bool; + json_scanf( json_str, json_len, + "{common_timing_modes: {m1024_768_60: %B}}", + &multi_use_bool); + edid->common_timing_modes.m1024_768_60 = 0x1 & multi_use_bool; + json_scanf( json_str, json_len, + "{common_timing_modes: {m1024_768_70: %B}}", + &multi_use_bool); + edid->common_timing_modes.m1024_768_70 = 0x1 & multi_use_bool; + json_scanf( json_str, json_len, + "{common_timing_modes: {m1024_768_75: %B}}", + &multi_use_bool); + edid->common_timing_modes.m1024_768_75 = 0x1 & multi_use_bool; + json_scanf( json_str, json_len, + "{common_timing_modes: {m1280_1024_75: %B}}", + &multi_use_bool); + edid->common_timing_modes.m1280_1024_75 = 0x1 & multi_use_bool; + json_scanf( json_str, json_len, + "{common_timing_modes: {m1152_870_75: %B}}", + &multi_use_bool); + edid->common_timing_modes.m1152_870_75 = 0x1 & multi_use_bool; + } else { + printf("Error: One of either edid or json_str is NULL.\n"); + return 1; + } + return 0; +} + int main(void) { //uint8_t edith[EDID_LENGTH]; @@ -500,6 +580,8 @@ int main(void) generate_header(&edith, mystr, len); generate_basic_display_parameters(&edith, mystr, len); generate_chromaticity_coordinates(&edith, mystr, len); + generate_common_timing_modes(&edith, mystr, len); disp_buf((uint8_t*)&edith, EDID_LENGTH); + free(mystr); return 0; }