mirror of
git://projects.qi-hardware.com/ben-wpan.git
synced 2024-11-26 19:57:31 +02:00
atrf-path: added visual history of dumps
- gui.c (segment, draw, gui): make caller provide color, to ease sharing - gui.c (dump, gui): moved call to print_sweep to separate function - gui.c (DUMP_RGBA, dumps, n_dumps, dump, draw_dumps, gui): record all dumps and display them in the background
This commit is contained in:
parent
b82472bb01
commit
0eec747510
@ -14,6 +14,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "SDL.h"
|
#include "SDL.h"
|
||||||
#include "SDL_gfxPrimitives.h"
|
#include "SDL_gfxPrimitives.h"
|
||||||
@ -34,6 +35,7 @@
|
|||||||
#define OVER_RGBA 0xffff00ff
|
#define OVER_RGBA 0xffff00ff
|
||||||
#define UNDER_RGBA 0xff0000ff
|
#define UNDER_RGBA 0xff0000ff
|
||||||
#define LIMIT_RGBA 0xff0000ff
|
#define LIMIT_RGBA 0xff0000ff
|
||||||
|
#define DUMP_RGBA 0x4040ffff
|
||||||
|
|
||||||
#define CHAN_STEP 20 /* 4 pixels/MHz */
|
#define CHAN_STEP 20 /* 4 pixels/MHz */
|
||||||
#define SIDE_STEP 2
|
#define SIDE_STEP 2
|
||||||
@ -46,6 +48,10 @@
|
|||||||
#define STATUS_R 8
|
#define STATUS_R 8
|
||||||
|
|
||||||
|
|
||||||
|
static struct sample **dumps = NULL;
|
||||||
|
static int n_dumps = 0;
|
||||||
|
|
||||||
|
|
||||||
static int avg2y(double avg)
|
static int avg2y(double avg)
|
||||||
{
|
{
|
||||||
return YRES-(avg-Y_MIN)/(Y_MAX-Y_MIN)*YRES-1;
|
return YRES-(avg-Y_MIN)/(Y_MAX-Y_MIN)*YRES-1;
|
||||||
@ -53,19 +59,20 @@ static int avg2y(double avg)
|
|||||||
|
|
||||||
|
|
||||||
static void segment(SDL_Surface *s, int *last_x, int *last_y, int x,
|
static void segment(SDL_Surface *s, int *last_x, int *last_y, int x,
|
||||||
const struct sample *res, int first)
|
const struct sample *res, int first, uint32_t color)
|
||||||
{
|
{
|
||||||
int y = avg2y(res->avg);
|
int y = avg2y(res->avg);
|
||||||
|
|
||||||
if (!first) {
|
if (!first) {
|
||||||
aalineColor(s, *last_x, *last_y, x, y, FG_RGBA);
|
aalineColor(s, *last_x, *last_y, x, y, color);
|
||||||
}
|
}
|
||||||
*last_x = x;
|
*last_x = x;
|
||||||
*last_y = y;
|
*last_y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void draw(SDL_Surface *s, const struct sample *res, int cont_tx)
|
static void draw(SDL_Surface *s, const struct sample *res, int cont_tx,
|
||||||
|
uint32_t color)
|
||||||
{
|
{
|
||||||
int last_x, last_y;
|
int last_x, last_y;
|
||||||
int first, x, i;
|
int first, x, i;
|
||||||
@ -74,14 +81,14 @@ static void draw(SDL_Surface *s, const struct sample *res, int cont_tx)
|
|||||||
first = 1;
|
first = 1;
|
||||||
for (i = 0; i != N_CHAN; i++) {
|
for (i = 0; i != N_CHAN; i++) {
|
||||||
if (cont_tx != CONT_TX_P500K) {
|
if (cont_tx != CONT_TX_P500K) {
|
||||||
segment(s, &last_x, &last_y, x, res, first);
|
segment(s, &last_x, &last_y, x, res, first, color);
|
||||||
first = 0;
|
first = 0;
|
||||||
}
|
}
|
||||||
res++;
|
res++;
|
||||||
x += 2*SIDE_STEP;
|
x += 2*SIDE_STEP;
|
||||||
|
|
||||||
if (cont_tx != CONT_TX_M500K) {
|
if (cont_tx != CONT_TX_M500K) {
|
||||||
segment(s, &last_x, &last_y, x, res, first);
|
segment(s, &last_x, &last_y, x, res, first, color);
|
||||||
first = 0;
|
first = 0;
|
||||||
}
|
}
|
||||||
res++;
|
res++;
|
||||||
@ -176,6 +183,36 @@ static void clear(SDL_Surface *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void dump(const struct sweep *sweep, const struct sample *res)
|
||||||
|
{
|
||||||
|
const size_t size = sizeof(struct sample)*N_CHAN*2;
|
||||||
|
|
||||||
|
print_sweep(sweep, res);
|
||||||
|
|
||||||
|
dumps = realloc(dumps, (n_dumps+1)*sizeof(struct sample *));
|
||||||
|
if (!dumps) {
|
||||||
|
perror("realloc");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
dumps[n_dumps] = malloc(size);
|
||||||
|
if (!dumps[n_dumps]) {
|
||||||
|
perror("malloc");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
memcpy(dumps[n_dumps], res, size);
|
||||||
|
n_dumps++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void draw_dumps(SDL_Surface *s, int cont_tx)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i != n_dumps; i++)
|
||||||
|
draw(s, dumps[i], cont_tx, DUMP_RGBA);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* --- temporarily, for optimizing --- */
|
/* --- temporarily, for optimizing --- */
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@ -263,7 +300,7 @@ int gui(const struct sweep *sweep, int sweeps)
|
|||||||
break;
|
break;
|
||||||
case SDLK_d:
|
case SDLK_d:
|
||||||
if (cycle)
|
if (cycle)
|
||||||
print_sweep(sweep, res);
|
dump(sweep, res);
|
||||||
break;
|
break;
|
||||||
case SDLK_q:
|
case SDLK_q:
|
||||||
return 0;
|
return 0;
|
||||||
@ -285,10 +322,11 @@ int gui(const struct sweep *sweep, int sweeps)
|
|||||||
|
|
||||||
clear(surf);
|
clear(surf);
|
||||||
|
|
||||||
|
draw_dumps(surf, sweep->cont_tx);
|
||||||
draw_limit(surf, sweep->min);
|
draw_limit(surf, sweep->min);
|
||||||
draw_limit(surf, sweep->max);
|
draw_limit(surf, sweep->max);
|
||||||
indicate(surf, fail);
|
indicate(surf, fail);
|
||||||
draw(surf, res, sweep->cont_tx);
|
draw(surf, res, sweep->cont_tx, FG_RGBA);
|
||||||
|
|
||||||
SDL_UnlockSurface(surf);
|
SDL_UnlockSurface(surf);
|
||||||
SDL_UpdateRect(surf, 0, 0, 0, 0);
|
SDL_UpdateRect(surf, 0, 0, 0, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user