From e2a9c9d06894bd7180a1f88b6fcfc4dba21fdd51 Mon Sep 17 00:00:00 2001 From: Werner Almesberger Date: Wed, 13 Apr 2011 14:01:12 -0300 Subject: [PATCH] atrf-path: new option -T to sweep only one offset atrf-path -T +0.5 -g ... 10 10 time: before (both offsets) 0.65 s after (one offset) 0.32-0.33 s (50%) - atrf-path.c (usage, main): new option -T to specify which offset to sweep (default: sweep both) - atrf-path.c (do_half_sweep): only sample points with the desired offset - atrf-path.c (print_sweep): only prints points we've sweeped - gui.c (segment, draw): inverted flag logic from "have_last" to "first" - gui.c (draw): only plot points we've sweeped - gui.c (gui): pass the offset selection to "draw" --- tools/atrf-path/atrf-path.c | 35 +++++++++++++++++++++++++---------- tools/atrf-path/gui.c | 24 +++++++++++++++++------- tools/atrf-path/sweep.h | 3 +++ 3 files changed, 45 insertions(+), 17 deletions(-) diff --git a/tools/atrf-path/atrf-path.c b/tools/atrf-path/atrf-path.c index a1e0e96..aec0b38 100644 --- a/tools/atrf-path/atrf-path.c +++ b/tools/atrf-path/atrf-path.c @@ -14,6 +14,7 @@ #include #include #include +#include #include "at86rf230.h" @@ -111,6 +112,8 @@ static void do_half_sweep(const struct sweep *sweep, int cont_tx, { int chan; + if (sweep->cont_tx && sweep->cont_tx != cont_tx) + return; for (chan = 11; chan <= 26; chan++) { set_channel(sweep->rx, chan); set_channel(sweep->tx, chan); @@ -134,11 +137,13 @@ static void print_sweep(const struct sweep *sweep, const struct sample *res) int chan; for (chan = 11; chan <= 26; chan++) { - printf("%.1f %.2f %.0f %.0f\n", - 2350+5*chan-0.5, res->avg, res->min, res->max); + if (sweep->cont_tx != CONT_TX_P500K) + printf("%.1f %.2f %.0f %.0f\n", + 2350+5*chan-0.5, res->avg, res->min, res->max); res++; - printf("%.1f %.2f %.0f %.0f\n", - 2350+5*chan+0.5, res->avg, res->min, res->max); + if (sweep->cont_tx != CONT_TX_M500K) + printf("%.1f %.2f %.0f %.0f\n", + 2350+5*chan+0.5, res->avg, res->min, res->max); res++; } } @@ -167,14 +172,15 @@ static void usage(const char *name) "%6s %s -g common_args [[sweeps] samples]\n" #endif "\n" -" common args: [-p power] [-t trim_tx [-t trim_rx]] driver_tx[:arg]\n" -" driver_rx[:arg]\n\n" +" common args: [-p power] [-t trim_tx [-t trim_rx]] [-T offset]\n" +" driver_tx[:arg] driver_rx[:arg]\n\n" #ifdef HAVE_GFX -" -g display results graphically\n" +" -g display results graphically\n" #endif -" -p power transmit power, 0 to 15 (default %d)\n" -" -t trim trim capacitor, 0 to 15 (default %d)\n" +" -p power transmit power, 0 to 15 (default %d)\n" +" -t trim trim capacitor, 0 to 15 (default %d)\n" +" -T offset constant wave offset in MHz, -0.5 or +0.5 (default: scan both)\n" , name, #ifdef HAVE_GFX @@ -192,6 +198,7 @@ int main(int argc, char **argv) struct sweep sweep = { .trim_tx = -1, .trim_rx = DEFAULT_TRIM, + .cont_tx = 0, .samples = 1, }; int graphical = 0; @@ -201,7 +208,7 @@ int main(int argc, char **argv) char *end; int c; - while ((c = getopt(argc, argv, "gp:t:")) != EOF) + while ((c = getopt(argc, argv, "gp:t:T:")) != EOF) switch (c) { case'g': graphical = 1; @@ -222,6 +229,14 @@ int main(int argc, char **argv) else sweep.trim_rx = tmp; break; + case 'T': + if (!strcmp(optarg, "-0.5")) + sweep.cont_tx = CONT_TX_M500K; + else if (!strcmp(optarg, "+0.5")) + sweep.cont_tx = CONT_TX_P500K; + else + usage(*argv); + break; default: usage(*argv); } diff --git a/tools/atrf-path/gui.c b/tools/atrf-path/gui.c index 4bd47bf..b8809cf 100644 --- a/tools/atrf-path/gui.c +++ b/tools/atrf-path/gui.c @@ -47,11 +47,11 @@ static void segment(SDL_Surface *s, int *last_x, int *last_y, int x, - const struct sample *res, int have_last) + const struct sample *res, int first) { int y = YRES-(res->avg-Y_MIN)/(Y_MAX-Y_MIN)*YRES-1; - if (have_last) { + if (!first) { aalineColor(s, *last_x, *last_y, x, y, FG_RGBA); } *last_x = x; @@ -59,16 +59,26 @@ static void segment(SDL_Surface *s, int *last_x, int *last_y, int x, } -static void draw(SDL_Surface *s, const struct sample *res) +static void draw(SDL_Surface *s, const struct sample *res, int cont_tx) { int last_x, last_y; - int x, i; + int first, x, i; x = CHAN_X_OFFSET; + first = 1; for (i = 0; i != N_CHAN; i++) { - segment(s, &last_x, &last_y, x, res++, i); + if (cont_tx != CONT_TX_P500K) { + segment(s, &last_x, &last_y, x, res, first); + first = 0; + } + res++; x += 2*SIDE_STEP; - segment(s, &last_x, &last_y, x, res++, 1); + + if (cont_tx != CONT_TX_M500K) { + segment(s, &last_x, &last_y, x, res, first); + first = 0; + } + res++; x += CHAN_STEP-2*SIDE_STEP; } } @@ -148,7 +158,7 @@ void gui(const struct sweep *sweep, int sweeps) aacircleColor(surf, STATUS_X, STATUS_Y, STATUS_R, OK_RGBA); } - draw(surf, res); + draw(surf, res, sweep->cont_tx); SDL_UnlockSurface(surf); SDL_UpdateRect(surf, 0, 0, 0, 0); diff --git a/tools/atrf-path/sweep.h b/tools/atrf-path/sweep.h index d8e6733..73c89ce 100644 --- a/tools/atrf-path/sweep.h +++ b/tools/atrf-path/sweep.h @@ -14,6 +14,8 @@ #ifndef SWEEP_H #define SWEEP_H +#include + #include "atrf.h" @@ -23,6 +25,7 @@ struct sweep { int trim_tx; int trim_rx; int power; + uint8_t cont_tx; int samples; };