|
|
@ -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; |
|
|
|
} |
|
|
|