summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYi Sun <yi.sun@intel.com>2011-08-04 00:50:06 +0800
committerYi Sun <yi.sun@intel.com>2011-08-04 00:50:06 +0800
commit2af02c8a2895ea1caca6dc44830fdddf1b678995 (patch)
tree42f43bbbe881908ae6d03f495fbdca2e921ada8f
parent38b003efdb505da87a882f5c96807bbe2e9101ec (diff)
Fix segmengfault.
-rw-r--r--testedid.c44
1 files changed, 25 insertions, 19 deletions
diff --git a/testedid.c b/testedid.c
index 9e5deac..ce27e6c 100644
--- a/testedid.c
+++ b/testedid.c
@@ -264,13 +264,13 @@ get_connected_edid_list (char ***edid_list)
{
char **connected_card_list;
int connected_count;
-
connected_count = get_connected_card_list( & connected_card_list );
+ (*edid_list) = malloc (connected_count * sizeof(char));
+
for (int i = 0; i < connected_count; i++)
{
//sprintf(edid_file, "%s%s/edid", EDIDPATH, dirent_ptr->d_name);
-
(*edid_list)[i] = get_edid(connected_card_list[i]);
}
return connected_count;
@@ -281,6 +281,7 @@ static char chrmap(char ch)
{
return 'A'+ch-1;
}
+
/*
Get the whole mode line declared in DRM by mode and frequency.
*/
@@ -295,7 +296,7 @@ static void find_dmt_mode(struct mode_line* m, struct drm_display_mode* rmode)
static void find_est_mode(struct mode_line* m, struct drm_display_mode* rmode)
{
- for (int i=0; i < 16; i++) {
+ for (int i = 0; i < 16; i++) {
if (strcmp(m->mode, est_modes[i].name) == 0 && m->freq == est_modes[i].freq) {
memcpy(rmode, &est_modes[i], sizeof(struct drm_display_mode));
}
@@ -303,7 +304,7 @@ static void find_est_mode(struct mode_line* m, struct drm_display_mode* rmode)
}
static int gethdmiblock(char edid[])
{
- for (int i=0; i < MAXEDID; i++) {
+ for (int i = 0; i < MAXEDID; i++) {
if (edid[i] == 0x03 && edid[i+1] == 0x0c && edid[i+2] == 0) {
return i;
}
@@ -457,7 +458,7 @@ static int parse_edid_power_support(char edid[])
static int parse_edid_established_timing(char edid[])
{
/*
- * 23h 1 Established Timing I
+ * 23h 1 Established Timing I
* 7 720 x 400 @ 70Hz IBM, VGA
* 6 720 x 400 @ 88Hz IBM, XGA2
* 5 640 x 480 @ 60Hz IBM, VGA
@@ -466,7 +467,7 @@ static int parse_edid_established_timing(char edid[])
* 2 640 x 480 @ 75Hz VESA
* 1 800 x 600 @ 56Hz VESA
* 0 800 x 600 @ 60Hz VESA
- * 24h 1 Established Timing II
+ * 24h 1 Established Timing II
* 7 800 x 600 @ 72Hz VESA
* 6 800 x 600 @ 75Hz VESA
* 5 832 x 624 @ 75Hz Apple, Mac II
@@ -475,7 +476,7 @@ static int parse_edid_established_timing(char edid[])
* 2 1024 x 768 @ 70Hz VESA
* 1 1024 x 768 @ 75Hz VESA
* 0 1280 x 1024 @ 75Hz VESA
- * 25h 1 Manufacturer's Timings
+ * 25h 1 Manufacturer's Timings
* 7 1152 x 870 @ 75Hz Apple, Mac II
*/
struct mode_line curestmode[80];
@@ -509,7 +510,7 @@ static int parse_edid_established_timing(char edid[])
static int parse_edid_standar_timing(char edid[])
{
/*
- * 26h 1 256 pixels → 2288 pixels, in increments of 8 pixels
+ * 26h 1 256 pixels → 2288 pixels, in increments of 8 pixels
* 00h Reserved: Do not use.
* Bit Definitions Description
* 7 6 _ _ _ _ _ _ Image Aspect Ratio: bits 7 & 6
@@ -519,27 +520,27 @@ static int parse_edid_standar_timing(char edid[])
* 1 1 _ _ _ _ _ _ 16 : 9 AR
* 5 4 3 2 1 0 Field Refresh Rate: bits 5 → 0
* Value Stored (in binary) = Field Refresh Rate (in Hz) – 60
- * 27h 1
+ * 27h 1
* n n n n n n
* Range: 60 Hz → 123Hz
*/
struct StdTiming stdtiminginfo;
-
struct mode_line curestmode[80];
- printf("\r\tStandarTiming:\n");
- memset(curestmode, 0, 80 * sizeof(struct mode_line));
-// int escount = 0;
struct mode_line tdmtmode;
struct drm_display_mode rmodeline;
char tmod[20];
char msg[512];
char ratio[2][6];
+
+ printf("\r\tStandarTiming:\n");
+ memset(curestmode, 0, 80 * sizeof(struct mode_line));
for (int i = 0; i < 8; i++) {
int tem = 0;
memcpy(&tem, &edid[38 + 2 * i], 1);
memcpy(&stdtiminginfo, &edid[39 + 2 * i], 1);
memset(msg, 0, 256);
memset(ratio, 0, sizeof(ratio));
+
if(!(stdtiminginfo.aspectratio & 3)) strcat(msg, "16:10");
else if(stdtiminginfo.aspectratio & 1) strcat(msg, "4:3");
else if(stdtiminginfo.aspectratio & 2) strcat(msg, "5:4");
@@ -579,7 +580,6 @@ static int parse_edid_detail_timing(char edid[])
pixclk.clkchr.clkl = edid[0x36 + i*18];
pixclk.clkchr.clkh = edid[0x37 + i*18];
if (pixclk.clk == 0) continue;
- //printf("pixel clock: %d\n",pixclk.clk*10);
union H4bit h4bit;
vdisp.vdispchr.vdispl = edid[0x36 + i*18 + 2];
@@ -587,7 +587,6 @@ static int parse_edid_detail_timing(char edid[])
vdisp.vdispchr.vdispl = edid[0x36+ i*18 + 2];
vdisp.vdispchr.vdisph = h4bit.h4bitchr.disp;
Hdisp = vdisp.value;
- // printf("Hdisplay: %d\n",vdisp.value);
memset(&h4bit, 0, 1);
memset(&vdisp, 0, 4);
@@ -596,7 +595,6 @@ static int parse_edid_detail_timing(char edid[])
vdisp.vdispchr.vdispl = edid[0x36+ i*18 + 5];
vdisp.vdispchr.vdisph = h4bit.h4bitchr.disp;
Vdisp = vdisp.value;
- //printf("Vdisplay: %d\n",vdisp.value);
memset(&h4bit,0,1);
memset(&vdisp,0,4);
@@ -605,7 +603,6 @@ static int parse_edid_detail_timing(char edid[])
vdisp.vdispchr.vdispl = edid[0x36+ i*18 + 3];
vdisp.vdispchr.vdisph = h4bit.h4bitchr.blank;
Hblank = vdisp.value;
- //printf("Hblank:: %d\n",vdisp.value);
memset(&h4bit,0,1);
memset(&vdisp,0,4);
@@ -615,7 +612,7 @@ static int parse_edid_detail_timing(char edid[])
vdisp.vdispchr.vdisph = h4bit.h4bitchr.blank;
Vblank = vdisp.value;
freq = pixclk.clk * 10000.0 / (Hdisp+Hblank) / (Vdisp+Vblank);
- //printf("Vblank: %d\n",vdisp.value);
+
printf("\tDetailTiming:\n\t\t%dx%d @ %.2f %d %d %d\n", Hdisp, Vdisp, freq, pixclk.clk * 10, Hdisp + Hblank, Vdisp + Vblank);
union H2bit h2bit;
@@ -623,7 +620,6 @@ static int parse_edid_detail_timing(char edid[])
memset(&sync, 0, 4);
sync.syncchr.syncl = edid[0x36 + i*18 + 8];
sync.syncchr.synch = h2bit.chr.vsync;
- // printf("VSync: %d\n",sync.value);
}
return 0;
}
@@ -652,13 +648,21 @@ static int parse_edid(char edid[])
{
if (check_edid(edid))
return 1;
+
parse_edid_vendor_product(edid);
+
parse_edid_video_input(edid);
+
parse_edid_power_support(edid);
+
parse_edid_established_timing(edid);
+
parse_edid_standar_timing(edid);
+
parse_edid_detail_timing(edid);
+
parse_edid_hdmi_bpp(edid);
+
return 0;
}
@@ -667,6 +671,7 @@ static int parse_edid(char edid[])
int main(void)
{
+ printf("9999999999999999999asdf");
int connected_count;
char **edid_list;
char **connected_card_list;
@@ -680,6 +685,7 @@ int main(void)
printf("\33[1;;32m%d. Connected monitor card: %s\n\33[0m", 1, connected_card_list[0]);
print_edid(edid_list[i]);
+
parse_edid(edid_list[i]);
}