static void cls(struct fbc_priv *priv) { void *buf = gui_screen_render_buffer(priv->sc); memset(buf, 0, priv->fb->line_length * priv->fb->yres); gu_screen_blit(priv->sc); }
static int do_fbtest(int argc, char *argv[]) { struct screen *sc; int opt; unsigned int i; const char *pattern_name = NULL; char *fbdev = "/dev/fb0"; void (*pattern) (struct screen *sc, u32 color) = NULL; u32 color = 0xffffff; struct { const char *name; void (*func) (struct screen *sc, u32 color); } patterns[] = { { "geometry", fbtest_pattern_geometry }, { "bars", fbtest_pattern_bars } }; while((opt = getopt(argc, argv, "d:p:c:")) > 0) { switch(opt) { case 'd': fbdev = optarg; break; case 'p': pattern_name = optarg; break; case 'c': color = simple_strtoul(optarg, NULL, 16); break; default: return COMMAND_ERROR_USAGE; } } if (pattern_name) { for (i = 0; i < ARRAY_SIZE(patterns); i++) if (!strcmp(pattern_name, patterns[i].name)) pattern = patterns[i].func; if (!pattern) { printf("Unknown pattern: %s\n", pattern_name); return -EINVAL; } } sc = fb_open(fbdev); if (IS_ERR(sc)) { perror("fd_open"); return PTR_ERR(sc); } if (!pattern_name) { printf("No pattern selected. Cycling through all of them.\n"); printf("Press Ctrl-C to stop\n"); i = 0; for (;;) { uint64_t start; pattern = patterns[i++ % ARRAY_SIZE(patterns)].func; pattern(sc, color); gu_screen_blit(sc); start = get_time_ns(); while (!is_timeout(start, 2 * SECOND)) if (ctrlc()) goto done; } } else { pattern(sc, color); gu_screen_blit(sc); } done: fb_close(sc); return 0; }