mirror of
git://projects.qi-hardware.com/ben-wpan.git
synced 2024-11-26 12:11:34 +02:00
Added graphical display of RSSI scan results.
- tools/Makefile.common: CFLAGS and OBJS can now be target-specific - tools/atspi-rssi/Makefile: add SDL, SDL_gfx, and the GUI object files when building on the host - tools/atspi-rssi/Makefile: set -DHAVE_GFX when building on the host - tools/atspi-rssi/atspi-rssi.c (usage, main): new option -g to use GUI mode - tools/atspi-rssi/atspi-rssi.c (main): rename variable for the number of sweeps in non-GUI mode from "sweeps" to "arg", since it may have other uses in the future - tools/atspi-rssi/digit.h, tools/atspi-rssi/digit.c: draw 7 segment style digits - tools/atspi-rssi/zgrid.h, tools/atspi-rssi/zgrid.c: display a surface in faux 3D with SDL/SDL_gfx - tools/tools/atspi-rssi/gui.h, tools/atspi-rssi/gui.c: display RSSI scans as a scrolling 3D profile
This commit is contained in:
parent
a7a94b85cd
commit
0463bbea5d
@ -22,6 +22,8 @@ endif
|
|||||||
|
|
||||||
CC_host = gcc
|
CC_host = gcc
|
||||||
CC_ben = mipsel-openwrt-linux-gcc
|
CC_ben = mipsel-openwrt-linux-gcc
|
||||||
|
CFLAGS_host =
|
||||||
|
CFLAGS_ben =
|
||||||
LDLIBS_host = -lusb
|
LDLIBS_host = -lusb
|
||||||
LDLIBS_ben =
|
LDLIBS_ben =
|
||||||
MACROS_host = -DHAVE_USB
|
MACROS_host = -DHAVE_USB
|
||||||
@ -40,5 +42,7 @@ else
|
|||||||
AR = $(AR_quiet)
|
AR = $(AR_quiet)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CFLAGS += -I../../atusb/fw/include -I../include $(MACROS_$(TARGET))
|
CFLAGS += $(CFLAGS_$(TARGET)) -I../../atusb/fw/include -I../include \
|
||||||
|
$(MACROS_$(TARGET))
|
||||||
LDLIBS = $(LDLIBS_$(TARGET)) -L../lib -latspi
|
LDLIBS = $(LDLIBS_$(TARGET)) -L../lib -latspi
|
||||||
|
OBJS += $(OBJS_$(TARGET))
|
||||||
|
@ -14,3 +14,10 @@
|
|||||||
MAIN = atspi-rssi
|
MAIN = atspi-rssi
|
||||||
|
|
||||||
include ../Makefile.common
|
include ../Makefile.common
|
||||||
|
|
||||||
|
CFLAGS_host += $(shell sdl-config --cflags)
|
||||||
|
MACROS_host += -DHAVE_GFX
|
||||||
|
LDLIBS_host += $(shell sdl-config --libs) -lSDL_gfx
|
||||||
|
OBJS_host = gui.o zgrid.o digit.o
|
||||||
|
|
||||||
|
$(MAIN): $(OBJS_$(TARGET))
|
||||||
|
@ -21,6 +21,12 @@
|
|||||||
#include "atspi.h"
|
#include "atspi.h"
|
||||||
#include "misctxrx.h"
|
#include "misctxrx.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_GFX
|
||||||
|
#include "gui.h"
|
||||||
|
#else
|
||||||
|
#define gui(dsc) abort()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static struct timeval t0;
|
static struct timeval t0;
|
||||||
static volatile int run = 1;
|
static volatile int run = 1;
|
||||||
@ -59,6 +65,12 @@ static void usage(const char *name)
|
|||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"usage: %s [-n] sweeps\n", name);
|
"usage: %s [-n] sweeps\n", name);
|
||||||
|
|
||||||
|
#ifdef HAVE_GFX
|
||||||
|
fprintf(stderr,
|
||||||
|
"%6s %s -g\n", "", name);
|
||||||
|
#endif
|
||||||
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,12 +78,19 @@ static void usage(const char *name)
|
|||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct atspi_dsc *dsc;
|
struct atspi_dsc *dsc;
|
||||||
unsigned long sweeps, i;
|
unsigned long arg = 0, i;
|
||||||
char *end;
|
char *end;
|
||||||
int c;
|
int c;
|
||||||
|
int graphical = 0;
|
||||||
|
|
||||||
while ((c = getopt(argc, argv, "n")) != EOF)
|
while ((c = getopt(argc, argv, "gn")) != EOF)
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
#ifdef HAVE_GFX
|
||||||
|
case 'g':
|
||||||
|
graphical = 1;
|
||||||
|
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
case 'n':
|
case 'n':
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -79,8 +98,14 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (argc-optind) {
|
switch (argc-optind) {
|
||||||
|
case 0:
|
||||||
|
if (!graphical)
|
||||||
|
usage(*argv);
|
||||||
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
sweeps = strtoul(argv[optind], &end, 0);
|
if (graphical)
|
||||||
|
usage(*argv);
|
||||||
|
arg = strtoul(argv[optind], &end, 0);
|
||||||
if (*end)
|
if (*end)
|
||||||
usage(*argv);
|
usage(*argv);
|
||||||
break;
|
break;
|
||||||
@ -100,9 +125,13 @@ int main(int argc, char **argv)
|
|||||||
* We'll wait for the PLL lock after selecting the channel.
|
* We'll wait for the PLL lock after selecting the channel.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if (graphical)
|
||||||
|
gui(dsc);
|
||||||
|
else {
|
||||||
gettimeofday(&t0, NULL);
|
gettimeofday(&t0, NULL);
|
||||||
for (i = 0; run && i != sweeps; i++)
|
for (i = 0; run && i != arg; i++)
|
||||||
sweep(dsc);
|
sweep(dsc);
|
||||||
|
}
|
||||||
|
|
||||||
atspi_reg_write(dsc, REG_TRX_STATE, TRX_CMD_TRX_OFF);
|
atspi_reg_write(dsc, REG_TRX_STATE, TRX_CMD_TRX_OFF);
|
||||||
|
|
||||||
|
87
tools/atspi-rssi/digit.c
Normal file
87
tools/atspi-rssi/digit.c
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* atspi-rssi/digit.c - Draw 7 segment style digits
|
||||||
|
*
|
||||||
|
* Written 2010 by Werner Almesberger
|
||||||
|
* Copyright 2010 Werner Almesberger
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "SDL.h"
|
||||||
|
#include "SDL_gfxPrimitives.h"
|
||||||
|
|
||||||
|
#include "digit.h"
|
||||||
|
|
||||||
|
|
||||||
|
static void hlines_3(SDL_Surface *s, int x0, int x1, int y0, int ym, int y1,
|
||||||
|
uint32_t fg)
|
||||||
|
{
|
||||||
|
hlineColor(s, x0, x1, y0, fg);
|
||||||
|
hlineColor(s, x0, x1, ym, fg);
|
||||||
|
hlineColor(s, x0, x1, y1, fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void digit(SDL_Surface *s, int n, int x0, int x1, int y0, int ym, int y1,
|
||||||
|
uint32_t fg)
|
||||||
|
{
|
||||||
|
switch (n) {
|
||||||
|
case 8:
|
||||||
|
hlineColor(s, x0, x1, ym, fg);
|
||||||
|
/* fall through */
|
||||||
|
case 0:
|
||||||
|
hlineColor(s, x0, x1, y0, fg);
|
||||||
|
vlineColor(s, x0, y0, y1, fg);
|
||||||
|
/* fall through */
|
||||||
|
case 7:
|
||||||
|
hlineColor(s, x0, x1, y1, fg);
|
||||||
|
vlineColor(s, x1, y0, y1, fg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
lineColor(s, x0, ym, x1, y1, fg);
|
||||||
|
vlineColor(s, x1, y0, y1, fg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
hlines_3(s, x0, x1, y0, ym, y1, fg);
|
||||||
|
vlineColor(s, x0, y0, ym, fg);
|
||||||
|
vlineColor(s, x1, ym, y1, fg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 9:
|
||||||
|
vlineColor(s, x0, ym, y1, fg);
|
||||||
|
/* fall through */
|
||||||
|
case 3:
|
||||||
|
hlines_3(s, x0, x1, y0, ym, y1, fg);
|
||||||
|
vlineColor(s, x1, y0, y1, fg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
hlineColor(s, x0, x1, ym, fg);
|
||||||
|
vlineColor(s, x0, ym, y1, fg);
|
||||||
|
vlineColor(s, x1, y0, y1, fg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6:
|
||||||
|
hlines_3(s, x0, x1, y0, ym, y1, fg);
|
||||||
|
vlineColor(s, x0, y0, y1, fg);
|
||||||
|
vlineColor(s, x1, y0, ym, fg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
hlines_3(s, x0, x1, y0, ym, y1, fg);
|
||||||
|
vlineColor(s, x0, ym, y1, fg);
|
||||||
|
vlineColor(s, x1, y0, ym, fg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
}
|
25
tools/atspi-rssi/digit.h
Normal file
25
tools/atspi-rssi/digit.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* atspi-rssi/digit.h - Draw 7 segment style digits
|
||||||
|
*
|
||||||
|
* Written 2010 by Werner Almesberger
|
||||||
|
* Copyright 2010 Werner Almesberger
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef DIGIT_H
|
||||||
|
#define DIGIT_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "SDL.h"
|
||||||
|
|
||||||
|
|
||||||
|
void digit(SDL_Surface *s, int n, int x0, int x1, int y0, int ym, int y1,
|
||||||
|
uint32_t fg);
|
||||||
|
|
||||||
|
#endif /* !DIGIT_H */
|
147
tools/atspi-rssi/gui.c
Normal file
147
tools/atspi-rssi/gui.c
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
/*
|
||||||
|
* atspi-rssi/gui.c - Graphical output for atspi-rssi
|
||||||
|
*
|
||||||
|
* Written 2010 by Werner Almesberger
|
||||||
|
* Copyright 2010 Werner Almesberger
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
#include "SDL.h"
|
||||||
|
#include "SDL_gfxPrimitives.h"
|
||||||
|
|
||||||
|
#include "at86rf230.h"
|
||||||
|
#include "atspi.h"
|
||||||
|
#include "misctxrx.h"
|
||||||
|
|
||||||
|
#include "zgrid.h"
|
||||||
|
#include "digit.h"
|
||||||
|
#include "gui.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define XRES 320
|
||||||
|
#define YRES 240
|
||||||
|
|
||||||
|
#define N_CHAN 16
|
||||||
|
#define N_TIME 64
|
||||||
|
|
||||||
|
|
||||||
|
static struct timeval t0;
|
||||||
|
|
||||||
|
|
||||||
|
static void shift_grid(int *z, int nx, int ny)
|
||||||
|
{
|
||||||
|
int *p1, *p0, *s;
|
||||||
|
int x, y;
|
||||||
|
|
||||||
|
p1 = z+(ny-1)*nx;
|
||||||
|
for (y = 1; y != ny; y++) {
|
||||||
|
p0 = s = p1-nx;
|
||||||
|
for (x = 0; x != nx; x++)
|
||||||
|
*p1++ = *p0++;
|
||||||
|
p1 = s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void sweep(struct atspi_dsc *dsc, int *z)
|
||||||
|
{
|
||||||
|
int chan;
|
||||||
|
|
||||||
|
for (chan = 11; chan <= 26; chan++) {
|
||||||
|
atspi_reg_write(dsc, REG_PHY_CC_CCA, chan);
|
||||||
|
/* 150 us, according to AVR2001 section 3.5 */
|
||||||
|
wait_for_interrupt(dsc, IRQ_PLL_LOCK, IRQ_PLL_LOCK, 10, 20);
|
||||||
|
|
||||||
|
*z++ = 3*atspi_reg_read(dsc, REG_PHY_RSSI) & RSSI_MASK;
|
||||||
|
#if 0
|
||||||
|
if (chan >= 13 && chan <= 19 )
|
||||||
|
z[-1] = 3*28-(chan-16)*(chan-16)*(chan-16)*(chan-16);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void clear(SDL_Surface *s)
|
||||||
|
{
|
||||||
|
SDL_FillRect(s, NULL, SDL_MapRGB(s->format, 0, 0, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define CBIG(pos) \
|
||||||
|
x-5+(pos)*6, x-1+(pos)*6, y+8, y+4, y, 0xff4040ff
|
||||||
|
#define CSMALL(pos) \
|
||||||
|
x-7+(pos)*4, x-5+(pos)*4, y+15, y+13, y+11, 0x20ff00ff
|
||||||
|
|
||||||
|
|
||||||
|
static void label_channels(SDL_Surface *s, int sx, int x0, int y0)
|
||||||
|
{
|
||||||
|
int x, y, i, c, f;
|
||||||
|
|
||||||
|
x = x0;
|
||||||
|
y = s->h-y0+4;
|
||||||
|
for (i = 0; i != N_CHAN; i++) {
|
||||||
|
c = i+11;
|
||||||
|
digit(s, c/10, CBIG(0));
|
||||||
|
digit(s, c % 10, CBIG(1));
|
||||||
|
f = 2405+5*i;
|
||||||
|
if (i & 1)
|
||||||
|
y++;
|
||||||
|
digit(s, f/1000, CSMALL(0));
|
||||||
|
digit(s, (f/100) % 10, CSMALL(1));
|
||||||
|
digit(s, (f/10) % 10, CSMALL(2));
|
||||||
|
digit(s, f % 10, CSMALL(3));
|
||||||
|
if (i & 1)
|
||||||
|
y--;
|
||||||
|
x += sx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void gui(struct atspi_dsc *dsc)
|
||||||
|
{
|
||||||
|
SDL_Surface *surf;
|
||||||
|
int z[N_CHAN*N_TIME];
|
||||||
|
|
||||||
|
memset(z, 0, sizeof(z));
|
||||||
|
gettimeofday(&t0, NULL);
|
||||||
|
|
||||||
|
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
|
||||||
|
fprintf(stderr, "SDL_init: %s\n", SDL_GetError());
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
atexit(SDL_Quit);
|
||||||
|
|
||||||
|
surf = SDL_SetVideoMode(XRES, YRES, 0, SDL_SWSURFACE);
|
||||||
|
if (!surf) {
|
||||||
|
fprintf(stderr, "SDL_SetVideoMode: %s\n", SDL_GetError());
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
shift_grid(z, N_CHAN, N_TIME);
|
||||||
|
sweep(dsc, z);
|
||||||
|
|
||||||
|
SDL_LockSurface(surf);
|
||||||
|
|
||||||
|
clear(surf);
|
||||||
|
zgrid_draw(surf, z, N_CHAN, N_TIME,
|
||||||
|
17, 2, 1,
|
||||||
|
7, 40,
|
||||||
|
0xffffff00, 0x00408080);
|
||||||
|
label_channels(surf, 17, 7, 40);
|
||||||
|
|
||||||
|
SDL_UnlockSurface(surf);
|
||||||
|
SDL_UpdateRect(surf, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
21
tools/atspi-rssi/gui.h
Normal file
21
tools/atspi-rssi/gui.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* atspi-rssi/gui.h - Graphical output for atspi-rssi
|
||||||
|
*
|
||||||
|
* Written 2010 by Werner Almesberger
|
||||||
|
* Copyright 2010 Werner Almesberger
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GUI_H
|
||||||
|
#define GUI_H
|
||||||
|
|
||||||
|
#include "atspi.h"
|
||||||
|
|
||||||
|
|
||||||
|
void gui(struct atspi_dsc *dsc);
|
||||||
|
|
||||||
|
#endif /* !GUI_H */
|
99
tools/atspi-rssi/zgrid.c
Normal file
99
tools/atspi-rssi/zgrid.c
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* atspi-rssi/zgrid.c - Display a surface in faux 3D with SDL/SDL_gfx
|
||||||
|
*
|
||||||
|
* Written 2010 by Werner Almesberger
|
||||||
|
* Copyright 2010 Werner Almesberger
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "SDL.h"
|
||||||
|
#include "SDL_gfxPrimitives.h"
|
||||||
|
|
||||||
|
#include "zgrid.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define SWAP(x, y) \
|
||||||
|
do { typeof(x) swap_tmp = (x); (x) = (y); (y) = swap_tmp; } while (0)
|
||||||
|
|
||||||
|
|
||||||
|
static int *alloc_row(int nx)
|
||||||
|
{
|
||||||
|
int *p;
|
||||||
|
|
||||||
|
p = malloc(nx*sizeof(*p));
|
||||||
|
if (p)
|
||||||
|
return p;
|
||||||
|
perror("malloc");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void draw_band(SDL_Surface *s, const int *ax, const int *ay,
|
||||||
|
const int *bx, const int *by, int n, uint32_t fg, uint32_t bg)
|
||||||
|
{
|
||||||
|
Sint16 px[4], py[4];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = n-2; i >= 0; i--) {
|
||||||
|
px[0] = ax[i];
|
||||||
|
px[1] = ax[i+1];
|
||||||
|
px[2] = bx[i+1];
|
||||||
|
px[3] = bx[i];
|
||||||
|
py[0] = ay[i];
|
||||||
|
py[1] = ay[i+1];
|
||||||
|
py[2] = by[i+1];
|
||||||
|
py[3] = by[i];
|
||||||
|
filledPolygonColor(s, px, py, 4, bg);
|
||||||
|
aalineColor(s, ax[i+1], ay[i+1], bx[i+1], by[i+1], fg);
|
||||||
|
aalineColor(s, bx[i], by[i], bx[i+1], by[i+1], fg);
|
||||||
|
}
|
||||||
|
aalineColor(s, ax[0], ay[0], bx[0], by[0], fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void draw_polyline(SDL_Surface *s, const int *px, const int *py,
|
||||||
|
int n, uint32_t rgba)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i != n-1; i++)
|
||||||
|
aalineColor(s, px[i], py[i], px[i+1], py[i+1], rgba);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void zgrid_draw(SDL_Surface *s, const int *z, int nx, int ny,
|
||||||
|
int sx, int sy, int sxy, int x0, int y0, uint32_t fg, uint32_t bg)
|
||||||
|
{
|
||||||
|
int *lx = alloc_row(nx);
|
||||||
|
int *ly = alloc_row(nx);
|
||||||
|
int *px = alloc_row(nx);
|
||||||
|
int *py = alloc_row(nx);
|
||||||
|
int x, y, yz0;
|
||||||
|
const int *zp;
|
||||||
|
uint8_t a;
|
||||||
|
|
||||||
|
for (y = ny-1; y >= 0; y--) {
|
||||||
|
a = (ny-1-y)*0xe0/(ny-1)+0x1f;
|
||||||
|
yz0 = s->h-y0-y*sy-1;
|
||||||
|
zp = z+y*nx;
|
||||||
|
for (x = 0; x != nx; x++) {
|
||||||
|
px[x] = x0+x*sx+y*sxy;
|
||||||
|
py[x] = yz0-zp[x];
|
||||||
|
}
|
||||||
|
if (y != ny-1) {
|
||||||
|
draw_band(s, px, py, lx, ly, nx, fg | a, bg);
|
||||||
|
}
|
||||||
|
SWAP(px, lx);
|
||||||
|
SWAP(py, ly);
|
||||||
|
}
|
||||||
|
draw_polyline(s, lx, ly, nx, fg | 0xff);
|
||||||
|
}
|
24
tools/atspi-rssi/zgrid.h
Normal file
24
tools/atspi-rssi/zgrid.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* atspi-rssi/zgrid.h - Display a surface in faux 3D with SDL/SDL_gfx
|
||||||
|
*
|
||||||
|
* Written 2010 by Werner Almesberger
|
||||||
|
* Copyright 2010 Werner Almesberger
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ZGRID_H
|
||||||
|
#define ZGRID_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "SDL.h"
|
||||||
|
|
||||||
|
|
||||||
|
void zgrid_draw(SDL_Surface *s, const int *z, int nx, int ny,
|
||||||
|
int sx, int sy, int sxy, int x0, int y0, uint32_t fg, uint32_t bg);
|
||||||
|
|
||||||
|
#endif /* !ZGRID_H */
|
Loading…
Reference in New Issue
Block a user