From patchwork Thu Jul 26 06:23:36 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yi Sun X-Patchwork-Id: 1240531 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by patchwork1.kernel.org (Postfix) with ESMTP id B695D3FDFB for ; Thu, 26 Jul 2012 07:30:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8CB019E878 for ; Thu, 26 Jul 2012 00:30:14 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mga14.intel.com (mga14.intel.com [143.182.124.37]) by gabe.freedesktop.org (Postfix) with ESMTP id C304C9E97F for ; Wed, 25 Jul 2012 23:25:16 -0700 (PDT) Received: from azsmga002.ch.intel.com ([10.2.17.35]) by azsmga102.ch.intel.com with ESMTP; 25 Jul 2012 23:25:16 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.71,315,1320652800"; d="scan'208";a="127035231" Received: from sunyi-pc.sh.intel.com ([10.239.13.42]) by AZSMGA002.ch.intel.com with ESMTP; 25 Jul 2012 23:25:14 -0700 From: Yi Sun To: daniel.vetter@ffwll.ch Date: Thu, 26 Jul 2012 14:23:36 +0800 Message-Id: <1343283816-5176-1-git-send-email-yi.sun@intel.com> X-Mailer: git-send-email 1.7.6.4 Cc: intel-gfx@lists.freedesktop.org Subject: [Intel-gfx] [PATCH] tests/testdisplay.c: Add a option '-r'. X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: intel-gfx-bounces+patchwork-intel-gfx=patchwork.kernel.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+patchwork-intel-gfx=patchwork.kernel.org@lists.freedesktop.org With the option '-r', the testdisplay could paint a 2-D bar code(QR bar code) on the screen. The word "pass" is hiden in the bar code image. Further more, with this option, testdisplay will wait until a system signal 'SIGUSR1' coming after each mode setting. This function is for another program to control testdisplay. Signed-off-by: Yi Sun diff --git a/lib/drmtest.c b/lib/drmtest.c index 34db126..2101f6a 100644 --- a/lib/drmtest.c +++ b/lib/drmtest.c @@ -774,5 +774,6 @@ void kmstest_dump_mode(drmModeModeInfo *mode) mode->flags, mode->type, mode->clock); + fflush(stdout); } diff --git a/tests/pass.png b/tests/pass.png new file mode 100644 index 0000000000000000000000000000000000000000..5928d5ca109b7db33640851ceb352f9da742ff7b GIT binary patch literal 376 zcmV-;0f+vHP)K&qlmd8Y?m?=S>V};d!&JC-@c%hEGI?~i|G%bw#%`yn#2zFYS z+0-7gg|{O}1!wgI00c~fPDf?c;Hvckz~B`9IOHyYm1SA#|bqn!+nJepLch5kgVzT3%I zOA6OV+pcX-Uvy+}b(EP0H?%ow8?F&4v@mQk8p>PG2rCR<_!R9VEK^wF&vD>^r0@l& W)>)U}2&Hxa0000 +#include + drmModeRes *resources; int drm_fd, modes; int dump_info = 0, test_all_modes =0, test_preferred_mode = 0, force_mode = 0, test_plane, enable_tiling; int sleep_between_modes = 5; uint32_t depth = 24, stride, bpp; +int qr_code = 0; drmModeModeInfo force_timing; @@ -334,6 +338,40 @@ paint_color_key(void) } } +static void paint_image(cairo_t *cr, const char *file) +{ + int img_x, img_y, img_w, img_h, img_w_o, img_h_o; + double img_w_scale, img_h_scale; + + cairo_surface_t *image; + + img_y = height * (0.10 ); + img_h = height * 0.08 * 4; + img_w = img_h; + + img_x = (width / 2) - (img_w / 2); + + image = cairo_image_surface_create_from_png(file); + + img_w_o = cairo_image_surface_get_width(image); + img_h_o = cairo_image_surface_get_height(image); + + cairo_translate(cr, img_x, img_y); + + fprintf(stderr, "drew %dx%d image at %d,%d\n", img_w, img_h, + img_x, img_y); + + img_w_scale = (double)img_w / (double)img_w_o; + img_h_scale = (double)img_h / (double)img_h_o; + cairo_scale(cr, img_w_scale, img_h_scale); + + cairo_set_source_surface(cr, image, 0, 0); + cairo_scale(cr, 1, 1); + + cairo_paint(cr); + cairo_surface_destroy(image); +} + static void paint_output_info(cairo_t *cr, int l_width, int l_height, void *priv) { @@ -419,6 +457,26 @@ paint_output_info(cairo_t *cr, int l_width, int l_height, void *priv) cairo_set_source_rgb(cr, 1, 1, 1); cairo_fill(cr); } + + if (qr_code) + paint_image(cr, "./pass.png"); +} + +static void sighandler(int signo) +{ + return; +} + +static void set_single(void) +{ + int sigs[] = { SIGUSR1 }; + struct sigaction sa; + sa.sa_handler = sighandler; + + sigemptyset(&sa.sa_mask); + + if (sigaction(sigs[0], &sa, NULL) == -1) + perror("Could not set signal handler"); } static void @@ -480,9 +538,14 @@ set_mode(struct connector *c) continue; } - if (sleep_between_modes && test_all_modes) + if (sleep_between_modes && test_all_modes && !qr_code) sleep(sleep_between_modes); + if (qr_code){ + set_single(); + pause(); + } + } if(test_all_modes){ @@ -536,7 +599,7 @@ int update_display(void) return 1; } -static char optstr[] = "hiaf:s:d:p:mt"; +static char optstr[] = "hiaf:s:d:p:mrt"; static void usage(char *name) { @@ -548,6 +611,7 @@ static void usage(char *name) fprintf(stderr, "\t-p\t,, test overlay plane\n"); fprintf(stderr, "\t-m\ttest the preferred mode\n"); fprintf(stderr, "\t-t\tuse a tiled framebuffer\n"); + fprintf(stderr, "\t-r\tprint a QR code on the screen whose content is \"pass\" for the automatic test\n"); fprintf(stderr, "\t-f\t,,,,,\n"); fprintf(stderr, "\t\t,,,\n"); fprintf(stderr, "\t\ttest force mode\n"); @@ -558,7 +622,7 @@ static void usage(char *name) #define dump_resource(res) if (res) dump_##res() static gboolean input_event(GIOChannel *source, GIOCondition condition, - gpointer data) + gpointer data) { gchar buf[2]; gsize count; @@ -571,6 +635,24 @@ static gboolean input_event(GIOChannel *source, GIOCondition condition, return TRUE; } +void enter_exec_path( char **argv ) +{ + char *exec_path = NULL; + char *pos = NULL; + short len_path = 0; + + len_path = strlen( argv[0] ); + exec_path = (char*) malloc(len_path); + + memcpy(exec_path, argv[0], len_path); + pos = strrchr(exec_path, '/'); + if (pos != NULL) + *(pos+1) = '\0'; + + chdir(exec_path); + free(exec_path); +} + int main(int argc, char **argv) { int c; @@ -579,6 +661,8 @@ int main(int argc, char **argv) GMainLoop *mainloop; float force_clock; + enter_exec_path( argv ); + opterr = 0; while ((c = getopt(argc, argv, optstr)) != -1) { switch (c) { @@ -617,6 +701,9 @@ int main(int argc, char **argv) case 't': enable_tiling = 1; break; + case 'r': + qr_code = 1; + break; default: fprintf(stderr, "unknown option %c\n", c); /* fall through */