diff options
Diffstat (limited to 'edid/cmd')
-rwxr-xr-x | edid/cmd/parse_hdmi_edid.c | 154 |
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 100755 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; +} |