From 2df23f1f41eef49efa4e8adf8baef334f002caee Mon Sep 17 00:00:00 2001 From: Maximilian Stiefel Date: Sat, 13 Jun 2020 15:20:42 +0200 Subject: [PATCH] Done with basic display parameters --- .gitignore | 3 + edid_stockach.json | 23 ++++- edid.json => edid_wädi.json | 2 +- main | Bin 0 -> 49400 bytes main.c | 159 +++++++++++++++++++++++++++++------ 5 files changed, 157 insertions(+), 30 deletions(-) rename edid.json => edid_wädi.json (94%) create mode 100755 main diff --git a/.gitignore b/.gitignore index cd531cf..56048a3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ # ---> C +#vim +*.swp + # Prerequisites *.d diff --git a/edid_stockach.json b/edid_stockach.json index d51df62..a4dee2b 100644 --- a/edid_stockach.json +++ b/edid_stockach.json @@ -10,11 +10,28 @@ }, "video_input_parameters": { "input_type": "analog", - "levels": 3, + "levels": { + "upper": 0.7, + "lower": 0.0 + }, "blank_to_black": false, "seperate_sync": true, "composite_sync": false, "sync_on_green": false, - "vsync_serrated": false + "vsync_serrated": false, + "horizontal_screen_size": 53, + "vertical_screen_size": 30, + "gamma": 2.2, + "features": { + "dpms": { + "standby_supported": true, + "suspend_supported": true, + "active_off_supported": true + }, + "display_type": "analog_non_rgb_color", + "standard_srgb": false, + "preferred_timing_mode": true, + "continuous_timings": false + } } -} \ No newline at end of file +} diff --git a/edid.json b/edid_wädi.json similarity index 94% rename from edid.json rename to edid_wädi.json index e2a46e8..fca701f 100644 --- a/edid.json +++ b/edid_wädi.json @@ -20,7 +20,7 @@ "sync_on_green": true, "vsync_serrated": false, "horizontal_screen_size": 38, - "vertical_screen_size": 30 + "vertical_screen_size": 30, "gamma": 2.2 } } diff --git a/main b/main new file mode 100755 index 0000000000000000000000000000000000000000..0eb9f1d8f0381b387375054454a4c641af8417c3 GIT binary patch literal 49400 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 z{eLX;8`W%header.product_code = 0xFFFF & multi_use_int; @@ -214,9 +222,9 @@ static int generate_header(edid_t* edid, unsigned char* json_str, size_t json_le return 0; } -static int generate_video_input_parameters( edid_t* edid, - unsigned char* json_str, - size_t json_len) +static int generate_basic_display_parameters( edid_t* edid, + unsigned char* json_str, + size_t json_len) { char* multi_use_str; float multi_use_flt0; @@ -232,10 +240,12 @@ static int generate_video_input_parameters( edid_t* edid, edid->basic_display_parameters.video_input_parameters .analog.input_type = 0; // Levels - json_scanf( json_str, json_len, "{video_input_parameters: {levels: {upper: %f}}}", - &multi_use_flt0); - json_scanf( json_str, json_len, "{video_input_parameters: {levels: {lower: %f}}}", - &multi_use_flt1); + json_scanf( json_str, json_len, + "{video_input_parameters: {levels: {upper: %f}}}", + &multi_use_flt0); + json_scanf( json_str, json_len, + "{video_input_parameters: {levels: {lower: %f}}}", + &multi_use_flt1); if (multi_use_flt0 == 0.7f && multi_use_flt1 == -0.3f) { multi_use_int = 0; } else if (multi_use_flt0 == 0.714f && multi_use_flt1 == -0.286f) { @@ -248,36 +258,35 @@ static int generate_video_input_parameters( edid_t* edid, printf("Error: The levels %f/%f are not conforming to the standard.\n", multi_use_flt0, multi_use_flt1); } - printf("level> %d\n", multi_use_int); edid->basic_display_parameters.video_input_parameters .analog.levels = 0x3 & multi_use_int; // Blank to black json_scanf( json_str, json_len, - "{video_input_parameters: {blank_to_black: %B}", + "{video_input_parameters: {blank_to_black: %B}}", &multi_use_bool); edid->basic_display_parameters.video_input_parameters .analog.blank_to_black = 0x1 & multi_use_bool; // Seperate sync json_scanf( json_str, json_len, - "{video_input_parameters: {seperate_sync: %B}", + "{video_input_parameters: {seperate_sync: %B}}", &multi_use_bool); edid->basic_display_parameters.video_input_parameters .analog.seperate_sync = 0x1 & multi_use_bool; // Composite sync json_scanf( json_str, json_len, - "{video_input_parameters: {composite_sync: %B}", + "{video_input_parameters: {composite_sync: %B}}", &multi_use_bool); edid->basic_display_parameters.video_input_parameters .analog.composite_sync = 0x1 & multi_use_bool; // Sync on green json_scanf( json_str, json_len, - "{video_input_parameters: {sync_on_green: %B}", + "{video_input_parameters: {sync_on_green: %B}}", &multi_use_bool); edid->basic_display_parameters.video_input_parameters .analog.sync_on_green = 0x1 & multi_use_bool; // Vsync serrated json_scanf( json_str, json_len, - "{video_input_parameters: {blank_to_black: %B}", + "{video_input_parameters: {blank_to_black: %B}}", &multi_use_bool); edid->basic_display_parameters.video_input_parameters .analog.blank_to_black = 0x1 & multi_use_bool; @@ -289,9 +298,107 @@ static int generate_video_input_parameters( edid_t* edid, the video input params.\n"); return 2; } + // %Q mallocs a string + free(multi_use_str); + // Horizontal screen size + json_scanf( json_str, json_len, + "{video_input_parameters: {horizontal_screen_size: %d}}", + &multi_use_int); + edid->basic_display_parameters + .horizontal_screen_size = multi_use_int; + // Vertical screen size + json_scanf( json_str, json_len, + "{video_input_parameters: {vertical_screen_size: %d}}", + &multi_use_int); + edid->basic_display_parameters + .vertical_screen_size = multi_use_int; + // Horizontal screen size + json_scanf( json_str, json_len, + "{video_input_parameters: {gamma: %f}}", + &multi_use_flt0); + edid->basic_display_parameters + .gamma = (multi_use_flt0-1)*100; + // Display Power Management Signaling (DPMS) + // Standby + json_scanf( json_str, json_len, + "{video_input_parameters: {features: {dpms: \ + {standby_supported: %B}}}}", + &multi_use_bool); + edid->basic_display_parameters + .features.dpms_standby_supported = 0x1 & multi_use_bool; + // Suspend + json_scanf( json_str, json_len, + "{video_input_parameters: {features: {dpms: \ + {suspend_supported: %B}}}}", + &multi_use_bool); + edid->basic_display_parameters + .features.dpms_suspend_supported = 0x1 & multi_use_bool; + // Active-off + json_scanf( json_str, json_len, + "{video_input_parameters: {features: {dpms: \ + {active_off_supported: %B}}}}", + &multi_use_bool); + edid->basic_display_parameters + .features.dpms_active_off_supported = 0x1 & multi_use_bool; + // Display type + char a_str[] = "analog"; + char d_str[] = "digital"; + json_scanf( json_str, json_len, + "{video_input_parameters: {features: {display_type: %Q}}}", + &multi_use_str); + // Create substrings for comparison + memcpy(a_str, multi_use_str, strlen(a_str)); + memcpy(d_str, multi_use_str, strlen(d_str)); + if (strcmp(a_str, "analog") == 0) { + // Remove "analog_" + memcpy( multi_use_str, multi_use_str+strlen(a_str)+1, + strlen(multi_use_str)-strlen(a_str)); + if (strcmp(multi_use_str, "monochrome_or_grayscale") == 0) { + edid->basic_display_parameters + .features.display_type = 0x3 & EDID_DISPLAY_TYPE_MONOCHROME_OR_GRAYSCALE; + } else if (strcmp(multi_use_str, "rgb_color") == 0) { + edid->basic_display_parameters + .features.display_type = 0x3 & ~EDID_DISPLAY_TYPE_RGB_COLOR; + } else if (strcmp(multi_use_str, "non_rgb_color") == 0) { + edid->basic_display_parameters + .features.display_type = 0x3 & ~EDID_DISPLAY_TYPE_NON_RGB_COLOR; + } else if (strcmp(multi_use_str, "undefined") == 0) { + edid->basic_display_parameters + .features.display_type = 0x3 & EDID_DISPLAY_TYPE_UNDEFINED; + } else { + printf("Error: Unknown analog display_type.\n"); + return 3; + } + } else if (strcmp(d_str, "digital") == 0) { + printf("Error: Digital format is not supported yet.\n"); + return 4; + } else { + printf("Error: JSON format is wrong. First word needs of display_type \ + should either be analog or digital.\n"); + } + // %Q mallocs a string, which needs to be freed + free(multi_use_str); + // Standard sRGB + json_scanf( json_str, json_len, + "{video_input_parameters: {features: {standard_srgb: %B}}}", + &multi_use_bool); + edid->basic_display_parameters + .features.standard_srgb = 0x1 & multi_use_bool; + // Prefered timing mode + json_scanf( json_str, json_len, + "{video_input_parameters: {features: {preferred_timing_mode: %B}}}", + &multi_use_bool); + edid->basic_display_parameters + .features.preferred_timing_mode = 0x1 & multi_use_bool; + // Continuous timings + json_scanf( json_str, json_len, + "{video_input_parameters: {features: {continuous_timings: %B}}}", + &multi_use_bool); + edid->basic_display_parameters + .features.continuous_timings = 0x1 & multi_use_bool; } else { - printf("One of either edid or json_str is NULL.\n"); - return 3; + printf("Error: One of either edid or json_str is NULL.\n"); + return 5; } return 0; } @@ -304,14 +411,14 @@ int main(void) printf("size> %d bytes\n", sizeof(edith)); generate_preamble(&edith); unsigned char* mystr = NULL; - size_t len = file_to_str(&mystr, "edid.json"); + size_t len = file_to_str(&mystr, "edid_stockach.json"); if (mystr) { printf("%s\n", mystr); printf("len> %d\n", len); //free(mystr); } generate_header(&edith, mystr, len); - generate_video_input_parameters(&edith, mystr, len); + generate_basic_display_parameters(&edith, mystr, len); disp_buf((uint8_t*)&edith, EDID_LENGTH); return 0; }