meta-digi-del: recipes-digi, add fbtest.
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
This commit is contained in:
parent
ca86900065
commit
96d7eecb4d
|
|
@ -0,0 +1,23 @@
|
||||||
|
SUMMARY = "Digi's framebuffer test utility"
|
||||||
|
SECTION = "base"
|
||||||
|
LICENSE = "GPL-2.0"
|
||||||
|
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
|
||||||
|
|
||||||
|
PR = "r0"
|
||||||
|
|
||||||
|
DEPENDS = "microwindows"
|
||||||
|
|
||||||
|
FILESEXTRAPATHS_append := "${THISDIR}/files:"
|
||||||
|
SRC_URI = "file://fbtest.c \
|
||||||
|
"
|
||||||
|
|
||||||
|
S = "${WORKDIR}"
|
||||||
|
|
||||||
|
do_compile() {
|
||||||
|
${CC} -O2 -Wall -I usr/include/ -L usr/lib fbtest.c -lnano-X -o fbtest
|
||||||
|
}
|
||||||
|
|
||||||
|
do_install() {
|
||||||
|
install -d ${D}${bindir}
|
||||||
|
install -m 0755 fbtest ${D}${bindir}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,187 @@
|
||||||
|
/*
|
||||||
|
* fbtest.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2009 by Digi International Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 as published by
|
||||||
|
* the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Description: draws some test patterns (R,G,B and white colorbars)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <linux/kd.h>
|
||||||
|
#include <stdio.h> /* fprintf */
|
||||||
|
#include <stdlib.h> /* EXIT_SUCCESS */
|
||||||
|
#include <string.h> /* strcpy */
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#define MWINCLUDECOLORS
|
||||||
|
#include <microwin/nano-X.h> /* GrOpen */
|
||||||
|
|
||||||
|
#ifdef S_SPLINT_S
|
||||||
|
typedef /*@abstract@ */ MWCOLORVAL;
|
||||||
|
typedef /*@abstract@ */ GR_EVENT;
|
||||||
|
typedef /*@abstract@ */ GR_EVENT_EXPOSURE;
|
||||||
|
typedef /*@abstract@ */ GR_WINDOW_ID;
|
||||||
|
typedef /*@abstract@ */ GR_GC_ID;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void draw(const GR_EVENT * e);
|
||||||
|
static void draw_colorbar(GR_WINDOW_ID wid, GR_GC_ID gc,
|
||||||
|
int x, int y, int height, int dred, int dgreen, int dblue, char *label);
|
||||||
|
|
||||||
|
static GR_SCREEN_INFO l_xSIP;
|
||||||
|
|
||||||
|
static int dX = 0;
|
||||||
|
static int dY = 0;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
GR_EVENT event;
|
||||||
|
GR_WINDOW_ID w;
|
||||||
|
|
||||||
|
printf("fbtest $Revision: 1.3 $ " __TIME__ "\n");
|
||||||
|
|
||||||
|
if ((argc != 1) && (argc != 3)) {
|
||||||
|
fprintf(stderr, "Usage: %s [dX dY]\n", argv[0]);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Disable framebuffer console cursor */
|
||||||
|
int fd = open("/sys/class/graphics/fbcon/cursor_blink", O_WRONLY);
|
||||||
|
if (fd >= 0) {
|
||||||
|
write(fd, "0", 1);
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (3 == argc) {
|
||||||
|
/* dX and dY is for testing the display to see that lines
|
||||||
|
* vanish from display */
|
||||||
|
dX = atoi(argv[1]);
|
||||||
|
dY = atoi(argv[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GrOpen() < 0) {
|
||||||
|
fprintf(stderr, "cannot open graphics\n");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
GrGetScreenInfo(&l_xSIP);
|
||||||
|
/* create window, center it in display */
|
||||||
|
w = GrNewWindowEx(GR_WM_PROPS_NOAUTOMOVE,
|
||||||
|
(unsigned char *)"nanox_mini", GR_ROOT_WINDOW_ID,
|
||||||
|
dX, dY, l_xSIP.vs_width, l_xSIP.vs_height, GR_RGB(0, 0, 0));
|
||||||
|
GrSelectEvents(w, GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_CLOSE_REQ);
|
||||||
|
GrMapWindow(w);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
GrGetNextEvent(&event);
|
||||||
|
|
||||||
|
switch (event.type) {
|
||||||
|
case GR_EVENT_TYPE_EXPOSURE:
|
||||||
|
/* now do the actual display work */
|
||||||
|
draw(&event);
|
||||||
|
break;
|
||||||
|
case GR_EVENT_TYPE_CLOSE_REQ:
|
||||||
|
GrClose();
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* @notreached@ */
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* @Function: draw
|
||||||
|
* @Return: n/a
|
||||||
|
* @Descr: displays colorbar
|
||||||
|
***********************************************************************/
|
||||||
|
static void draw(const GR_EVENT * e)
|
||||||
|
{
|
||||||
|
GR_WINDOW_ID wid = ((GR_EVENT_EXPOSURE *) e)->wid;
|
||||||
|
GR_GC_ID gc = GrNewGC();
|
||||||
|
char szResolution[64];
|
||||||
|
int iY = 40;
|
||||||
|
int idY = ((l_xSIP.vs_height - (2 * iY)) / 4) - 10;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
GrSetGCForeground(gc, WHITE);
|
||||||
|
|
||||||
|
/* border frame */
|
||||||
|
GrRect(wid, gc, 0, 0, l_xSIP.vs_width, l_xSIP.vs_height);
|
||||||
|
for (i = 0; i < l_xSIP.vs_height; i += 10) {
|
||||||
|
int iLength;
|
||||||
|
|
||||||
|
if (!(i % 100))
|
||||||
|
iLength = 10;
|
||||||
|
else if (!(i % 50))
|
||||||
|
iLength = 5;
|
||||||
|
else
|
||||||
|
iLength = 2;
|
||||||
|
|
||||||
|
GrLine(wid, gc, 0, i, iLength, i);
|
||||||
|
GrLine(wid, gc, l_xSIP.vs_width, i, l_xSIP.vs_width - iLength - 1, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < l_xSIP.vs_width; i += 10) {
|
||||||
|
int iLength;
|
||||||
|
|
||||||
|
if (!(i % 100))
|
||||||
|
iLength = 10;
|
||||||
|
else if (!(i % 50))
|
||||||
|
iLength = 5;
|
||||||
|
else
|
||||||
|
iLength = 2;
|
||||||
|
|
||||||
|
GrLine(wid, gc, i, 0, i, iLength);
|
||||||
|
GrLine(wid, gc, i, l_xSIP.vs_height, i, l_xSIP.vs_height - iLength - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* resolution */
|
||||||
|
sprintf(szResolution, "%ix%i", l_xSIP.vs_width, l_xSIP.vs_height);
|
||||||
|
GrText(wid, gc, l_xSIP.vs_width / 2 - 20, 20, szResolution, -1, GR_TFASCII | GR_TFTOP);
|
||||||
|
|
||||||
|
/* display colorbards */
|
||||||
|
draw_colorbar(wid, gc, 10, iY, idY, 1, 0, 0, "red");
|
||||||
|
iY += idY + 10;
|
||||||
|
draw_colorbar(wid, gc, 10, iY, idY, 0, 1, 0, "green");
|
||||||
|
iY += idY + 10;
|
||||||
|
draw_colorbar(wid, gc, 10, iY, idY, 0, 0, 1, "blue");
|
||||||
|
iY += idY + 10;
|
||||||
|
draw_colorbar(wid, gc, 10, iY, idY, 1, 1, 1, "white");
|
||||||
|
|
||||||
|
GrDestroyGC(gc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* @Function: draw_colorbar
|
||||||
|
* @Return: n/a
|
||||||
|
* @Descr: draws a colorbar with RGB modified by dred/dgreen/dblue
|
||||||
|
***********************************************************************/
|
||||||
|
static void draw_colorbar(GR_WINDOW_ID wid, GR_GC_ID gc,
|
||||||
|
int x, int y, int height, int dred, int dgreen, int dblue, char *label)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int red = 0;
|
||||||
|
int green = 0;
|
||||||
|
int blue = 0;
|
||||||
|
|
||||||
|
GrSetGCForeground(gc, WHITE);
|
||||||
|
GrText(wid, gc, x, y, label, -1, GR_TFASCII | GR_TFTOP);
|
||||||
|
|
||||||
|
x += 40; /* leave room for text */
|
||||||
|
|
||||||
|
for (i = x; i < l_xSIP.vs_width - 20; i++) {
|
||||||
|
GrSetGCForeground(gc, MWRGB(red, green, blue));
|
||||||
|
GrLine(wid, gc, x, y, x, y + height);
|
||||||
|
|
||||||
|
red += dred;
|
||||||
|
green += dgreen;
|
||||||
|
blue += dblue;
|
||||||
|
|
||||||
|
x++;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue