mirror of
git://projects.qi-hardware.com/antorcha.git
synced 2024-11-25 19:51:52 +02:00
tools/: add sampling mode (-S) with graphical output
This commit is contained in:
parent
734e33cd19
commit
4eb1065dd7
@ -15,10 +15,12 @@ MAIN = antorcha
|
||||
|
||||
CFLAGS = -g -I../fw -I../../ben-wpan/tools/include \
|
||||
-I../../ben-wpan/atusb/fw/include \
|
||||
-Wall
|
||||
LDLIBS = -L../../ben-wpan/tools/lib -latrf -lusb
|
||||
-Wall \
|
||||
$(shell sdl-config --cflags)
|
||||
LDLIBS = -L../../ben-wpan/tools/lib -latrf -lusb \
|
||||
$(shell sdl-config --libs) -lSDL_gfx
|
||||
|
||||
OBJS = antorcha.o hash.o
|
||||
OBJS = antorcha.o hash.o plot.o
|
||||
|
||||
.PHONY: all update ping off
|
||||
|
||||
|
@ -22,9 +22,11 @@
|
||||
#include <atrf.h>
|
||||
#include <misctxrx.h>
|
||||
|
||||
#include <hash.h>
|
||||
#include <proto.h>
|
||||
|
||||
#include "hash.h"
|
||||
#include "plot.h"
|
||||
|
||||
|
||||
static int verbose = 1;
|
||||
static int debug = 0;
|
||||
@ -275,6 +277,52 @@ static void image(struct atrf_dsc *dsc, const char *name)
|
||||
}
|
||||
|
||||
|
||||
/* ----- Samples ----------------------------------------------------------- */
|
||||
|
||||
|
||||
static void samples(struct atrf_dsc *dsc)
|
||||
{
|
||||
uint8_t buf[MAX_PSDU] = { 0, };
|
||||
int got;
|
||||
uint8_t *s;
|
||||
int x, y;
|
||||
|
||||
buf[0] = 1;
|
||||
packet(dsc, SAMPLE, 0, 0, buf, PAYLOAD);
|
||||
plot_init();
|
||||
while (1) {
|
||||
got = rf_recv(dsc, buf, sizeof(buf));
|
||||
if (got <= 3)
|
||||
continue;
|
||||
if (buf[0] != SAMPLES)
|
||||
continue;
|
||||
if (debug > 1) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i != got; i++)
|
||||
fprintf(stderr, " %02x", buf[i]);
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
if (debug)
|
||||
fprintf(stderr, "%d:", got);
|
||||
s = buf+3+2;
|
||||
while (s < buf+got-2) {
|
||||
s += 2;
|
||||
x = *s++;
|
||||
x |= *s++ << 8;
|
||||
s += 2;
|
||||
y = *s++;
|
||||
y |= *s++ << 8;
|
||||
if (debug)
|
||||
fprintf(stderr, "\t%d %d\n", x, y);
|
||||
plot(x, y);
|
||||
}
|
||||
}
|
||||
buf[0] = 0;
|
||||
packet(dsc, SAMPLE, 0, 0, buf, PAYLOAD);
|
||||
}
|
||||
|
||||
|
||||
/* ----- Command-line processing ------------------------------------------- */
|
||||
|
||||
|
||||
@ -284,7 +332,8 @@ static void usage(const char *name)
|
||||
"usage: %s [-d] image_file\n"
|
||||
"%6s %s [-d] -F firmware_file\n"
|
||||
"%6s %s [-d] -P\n"
|
||||
, name, "", name, "", name);
|
||||
"%6s %s [-d] -S\n"
|
||||
, name, "", name, "", name, "", name);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@ -292,14 +341,14 @@ static void usage(const char *name)
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const char *fw = NULL;
|
||||
int do_ping = 0;
|
||||
int do_ping = 0, do_sample = 0;
|
||||
struct atrf_dsc *dsc;
|
||||
int c;
|
||||
|
||||
while ((c = getopt(argc, argv, "dF:P")) != EOF)
|
||||
while ((c = getopt(argc, argv, "dF:PS")) != EOF)
|
||||
switch (c) {
|
||||
case 'd':
|
||||
debug = 1;
|
||||
debug++;
|
||||
break;
|
||||
case 'F':
|
||||
fw = optarg;
|
||||
@ -307,13 +356,16 @@ int main(int argc, char **argv)
|
||||
case 'P':
|
||||
do_ping = 1;
|
||||
break;
|
||||
case 'S':
|
||||
do_sample = 1;
|
||||
break;
|
||||
default:
|
||||
usage(*argv);
|
||||
}
|
||||
|
||||
if (do_ping && fw)
|
||||
if (do_ping+do_sample+!!fw > 1)
|
||||
usage(*argv);
|
||||
if (do_ping || fw) {
|
||||
if (do_ping || do_sample || fw) {
|
||||
if (argc != optind)
|
||||
usage(*argv);
|
||||
} else {
|
||||
@ -328,6 +380,8 @@ int main(int argc, char **argv)
|
||||
rf_init(dsc, 8, 15);
|
||||
if (do_ping)
|
||||
ping(dsc);
|
||||
else if (do_sample)
|
||||
samples(dsc);
|
||||
else if (fw)
|
||||
firmware(dsc, fw);
|
||||
else
|
||||
|
101
tools/plot.c
Normal file
101
tools/plot.c
Normal file
@ -0,0 +1,101 @@
|
||||
/*
|
||||
* tools/plot.c - Sample plot
|
||||
*
|
||||
* Written 2012 by Werner Almesberger
|
||||
* Copyright 2012 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 "SDL.h"
|
||||
#include "SDL_gfxPrimitives.h"
|
||||
|
||||
|
||||
#define XRES 1024
|
||||
#define YRES 1024
|
||||
|
||||
#define RADIUS 3
|
||||
|
||||
#define OLD_RGBA 0xffffff20
|
||||
#define NEW_RGBA 0xffffffff
|
||||
|
||||
|
||||
static SDL_Surface *surf;
|
||||
static int first = 1;
|
||||
static int last_x, last_y;
|
||||
|
||||
static SDL_Surface *back;
|
||||
static SDL_Rect back_rect = {
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.w = 2*RADIUS+1,
|
||||
.h = 2*RADIUS+1,
|
||||
};
|
||||
|
||||
static SDL_Rect front_rect = {
|
||||
.w = 2*RADIUS+1,
|
||||
.h = 2*RADIUS+1,
|
||||
};
|
||||
|
||||
|
||||
void plot(int x, int y)
|
||||
{
|
||||
if (!first) {
|
||||
SDL_BlitSurface(back, &back_rect, surf, &front_rect);
|
||||
SDL_LockSurface(surf);
|
||||
filledCircleColor(surf, last_x, last_y, RADIUS, OLD_RGBA);
|
||||
SDL_UnlockSurface(surf);
|
||||
}
|
||||
|
||||
front_rect.x = x;
|
||||
front_rect.y = y;
|
||||
x += RADIUS;
|
||||
y += RADIUS;
|
||||
|
||||
SDL_BlitSurface(surf, &front_rect, back, &back_rect);
|
||||
SDL_LockSurface(surf);
|
||||
filledCircleColor(surf, x, y, RADIUS, NEW_RGBA);
|
||||
SDL_UnlockSurface(surf);
|
||||
|
||||
if (!first)
|
||||
SDL_UpdateRect(surf,
|
||||
last_x-RADIUS, last_y-RADIUS, 2*RADIUS+1, 2*RADIUS+1);
|
||||
SDL_UpdateRect(surf, x-RADIUS, y-RADIUS, 2*RADIUS+1, 2*RADIUS+1);
|
||||
|
||||
first = 0;
|
||||
last_x = x;
|
||||
last_y = y;
|
||||
}
|
||||
|
||||
|
||||
void plot_init(void)
|
||||
{
|
||||
const SDL_PixelFormat *f;
|
||||
|
||||
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
|
||||
fprintf(stderr, "SDL_init: %s\n", SDL_GetError());
|
||||
exit(1);
|
||||
}
|
||||
atexit(SDL_Quit);
|
||||
|
||||
surf = SDL_SetVideoMode(XRES+2*RADIUS+1, YRES+2*RADIUS+1, 0,
|
||||
SDL_SWSURFACE);
|
||||
if (!surf) {
|
||||
fprintf(stderr, "SDL_SetVideoMode: %s\n", SDL_GetError());
|
||||
exit(1);
|
||||
}
|
||||
|
||||
f = surf->format;
|
||||
back = SDL_CreateRGBSurface(SDL_SWSURFACE, 2*RADIUS+1, 2*RADIUS+1,
|
||||
f->BitsPerPixel, f->Rmask, f->Gmask, f->Bmask, f->Amask);
|
||||
if (!back) {
|
||||
fprintf(stderr, "SDL_SetVideoMode: %s\n", SDL_GetError());
|
||||
exit(1);
|
||||
}
|
||||
}
|
20
tools/plot.h
Normal file
20
tools/plot.h
Normal file
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* tools/plot.h - Sample plot
|
||||
*
|
||||
* Written 2012 by Werner Almesberger
|
||||
* Copyright 2012 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 PLOT_H
|
||||
#define PLOT_H
|
||||
|
||||
void plot(int x, int y);
|
||||
void plot_init(void);
|
||||
|
||||
#endif /* !PLOT_H */
|
Loading…
Reference in New Issue
Block a user