summaryrefslogtreecommitdiffstats
path: root/edid/cmd/parse_hdmi_edid.c
diff options
context:
space:
mode:
Diffstat (limited to 'edid/cmd/parse_hdmi_edid.c')
-rw-r--r--edid/cmd/parse_hdmi_edid.c154
1 files changed, 154 insertions, 0 deletions
diff --git a/edid/cmd/parse_hdmi_edid.c b/edid/cmd/parse_hdmi_edid.c
new file mode 100644
index 0000000..9f84505
--- /dev/null
+++ b/edid/cmd/parse_hdmi_edid.c
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) Texas Instruments - http://www.ti.com/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <fcntl.h>
+
+#define LOG_TAG "EDID"
+#include <utils/Log.h>
+
+#include <inc/edid_parser.h>
+
+static const char kHdmiEdidPathName[] = "/sys/devices/platform/omapdss/display1/edid";
+
+static void print_s3d_format_info(struct edid_t *edid, const struct hdmi_s3d_format_info_t *info)
+{
+ unsigned int i;
+ if(info == NULL) {
+ return;
+ }
+
+ switch(info->format) {
+ case HDMI_FRAME_PACKING:
+ fprintf(stdout, "--Frame Packing");
+ break;
+ case HDMI_FIELD_ALTERNATIVE:
+ fprintf(stdout, "--Filed Alternative");
+ break;
+ case HDMI_LINE_ALTERNATIVE:
+ fprintf(stdout, "--Line Alternative");
+ break;
+ case HDMI_SIDE_BY_SIDE_FULL:
+ fprintf(stdout, "--Side by Side FULL");
+ break;
+ case HDMI_L_DEPTH:
+ fprintf(stdout, "--L + Depth");
+ break;
+ case HDMI_L_DEPTH_GFX_GFX_DEPTH:
+ fprintf(stdout, "--L + Depth + Graphics + Graphics + Depth");
+ break;
+ case HDMI_TOPBOTTOM:
+ fprintf(stdout, "--Top Bottom");
+ break;
+ case HDMI_SIDE_BY_SIDE_HALF:
+ fprintf(stdout, "--Side by Side HALF");
+ break;
+ default:
+ fprintf(stdout, "--Unkown format");
+ break;
+ }
+ fprintf(stdout, "\n");
+
+ for (i = 0; i < info->num_valid_vic; i++) {
+ const struct svd_t * svd = edid_get_svd_descriptor(edid, info->vic_info[i].vic_pos);
+ fprintf(stdout, "----Mode:%s sub-sampling: ", svd->info.name);
+ switch(info->vic_info[i].subsampling) {
+ case HDMI_SS_HORZANDQUINCUNX:
+ fprintf(stdout, "Horizontal and Quincunx");
+ break;
+ case HDMI_SS_HORIZONTAL:
+ fprintf(stdout, "Horizontal");
+ break;
+ case HDMI_SS_QUINCUNX_ALL:
+ fprintf(stdout, "Quincunx");
+ break;
+ case HDMI_SS_QUINCUNX_OLOR:
+ fprintf(stdout, "Quincunx Odd-Left/Odd-Right");
+ break;
+ case HDMI_SS_QUINCUNX_OLER:
+ fprintf(stdout, "Quincunx Odd-Left/Even-Right");
+ break;
+ case HDMI_SS_QUINCUNX_ELOR:
+ fprintf(stdout, "Quincunx Even-Left/Odd-Right");
+ break;
+ case HDMI_SS_QUINCUNX_ELER:
+ fprintf(stdout, "Quincunx Even-Left/Even-Right");
+ break;
+ case HDMI_SS_VERTICAL:
+ fprintf(stdout, "Vertical");
+ break;
+ case HDMI_SS_NONE:
+ fprintf(stdout, "None");
+ break;
+ default:
+ break;
+ }
+ fprintf(stdout, "\n");
+ }
+
+}
+int main()
+{
+ unsigned int i;
+ struct svd_t *svd_list;
+ unsigned int num_svds;
+
+ int fd = open(kHdmiEdidPathName, O_RDONLY);
+
+ if (!fd) {
+ return 1;
+ }
+
+ uint8_t edid_data[EDID_SIZE];
+ size_t bytes_read = read(fd, edid_data, EDID_SIZE);
+ close(fd);
+
+ if (bytes_read < EDID_SIZE) {
+ fprintf(stderr, "Could not read EDID data\n");
+ return 1;
+ }
+
+ struct edid_t *edid = NULL;
+ if(edid_parser_init(&edid, edid_data)) {
+ fprintf(stderr, "Could not init parser\n");
+ return 1;
+ }
+
+ edid_get_svd_list(edid, &svd_list, &num_svds);
+
+ fprintf(stdout, "EDID Info\n");
+ fprintf(stdout, "[Short Video Descriptors]\n");
+ for (i = 0; i < num_svds; i++) {
+ fprintf(stdout, "----%d: %s [code:%d, native:%d] [xres:%d, yres:%d Hz:%d]\n",
+ i, svd_list[i].info.name, svd_list[i].code, svd_list[i].native,
+ svd_list[i].info.xres, svd_list[i].info.yres, svd_list[i].info.hz);
+ }
+
+ fprintf(stdout, "\n[S3D Optional Formats]\n");
+ print_s3d_format_info(edid, edid_get_s3d_format_info(edid, HDMI_FRAME_PACKING));
+ print_s3d_format_info(edid, edid_get_s3d_format_info(edid, HDMI_FIELD_ALTERNATIVE));
+ print_s3d_format_info(edid, edid_get_s3d_format_info(edid, HDMI_LINE_ALTERNATIVE));
+ print_s3d_format_info(edid, edid_get_s3d_format_info(edid, HDMI_SIDE_BY_SIDE_FULL));
+ print_s3d_format_info(edid, edid_get_s3d_format_info(edid, HDMI_L_DEPTH));
+ print_s3d_format_info(edid, edid_get_s3d_format_info(edid, HDMI_L_DEPTH_GFX_GFX_DEPTH));
+ print_s3d_format_info(edid, edid_get_s3d_format_info(edid, HDMI_TOPBOTTOM));
+ print_s3d_format_info(edid, edid_get_s3d_format_info(edid, HDMI_SIDE_BY_SIDE_HALF));
+
+ edid_parser_deinit(edid);
+
+ return 0;
+}