svn commit: r245240 - user/adrian/ath_radar_stuff/src/spectral_fft
Adrian Chadd
adrian at FreeBSD.org
Wed Jan 9 20:39:31 UTC 2013
Author: adrian
Date: Wed Jan 9 20:39:29 2013
New Revision: 245240
URL: http://svnweb.freebsd.org/changeset/base/245240
Log:
Migrate the fft histogram code to work as an object, rather than a global.
Modified:
user/adrian/ath_radar_stuff/src/spectral_fft/fft_display.c
user/adrian/ath_radar_stuff/src/spectral_fft/fft_display.h
user/adrian/ath_radar_stuff/src/spectral_fft/fft_eval.c
user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.c
user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.h
Modified: user/adrian/ath_radar_stuff/src/spectral_fft/fft_display.c
==============================================================================
--- user/adrian/ath_radar_stuff/src/spectral_fft/fft_display.c Wed Jan 9 20:27:38 2013 (r245239)
+++ user/adrian/ath_radar_stuff/src/spectral_fft/fft_display.c Wed Jan 9 20:39:29 2013 (r245240)
@@ -186,7 +186,8 @@ render_text(struct fft_display *fdisp, S
}
struct fft_display *
-fft_display_create(SDL_Surface *screen, TTF_Font *font)
+fft_display_create(SDL_Surface *screen, TTF_Font *font,
+ struct fft_histogram *fh)
{
struct fft_display *fdisp;
@@ -197,6 +198,7 @@ fft_display_create(SDL_Surface *screen,
}
fdisp->screen = screen;
fdisp->font = font;
+ fdisp->fh = fh;
return (fdisp);
}
@@ -270,7 +272,7 @@ fft_display_draw_picture(struct fft_disp
continue;
/* Fetch dBm value at the given frequency in KHz */
- s = fft_fetch_freq_avg(freqKhz);
+ s = fft_fetch_freq_avg(fdisp->fh, freqKhz);
if (s == NULL)
continue;
@@ -287,7 +289,7 @@ fft_display_draw_picture(struct fft_disp
/* .. and the max */
- signal = (float) fft_fetch_freq_max(freqKhz);
+ signal = (float) fft_fetch_freq_max(fdisp->fh, freqKhz);
color = RMASK | AMASK;
opacity = 128;
y = 400 - (400.0 + Y_SCALE * signal);
Modified: user/adrian/ath_radar_stuff/src/spectral_fft/fft_display.h
==============================================================================
--- user/adrian/ath_radar_stuff/src/spectral_fft/fft_display.h Wed Jan 9 20:27:38 2013 (r245239)
+++ user/adrian/ath_radar_stuff/src/spectral_fft/fft_display.h Wed Jan 9 20:39:29 2013 (r245240)
@@ -11,10 +11,11 @@
struct fft_display {
SDL_Surface *screen;
TTF_Font *font;
+ struct fft_histogram *fh;
};
extern struct fft_display * fft_display_create(SDL_Surface *screen,
- TTF_Font *font);
+ TTF_Font *font, struct fft_histogram *fh);
extern void fft_display_destroy(struct fft_display *disp);
extern int fft_display_draw_picture(struct fft_display *fdisp,
int highlight, int startfreq);
Modified: user/adrian/ath_radar_stuff/src/spectral_fft/fft_eval.c
==============================================================================
--- user/adrian/ath_radar_stuff/src/spectral_fft/fft_eval.c Wed Jan 9 20:27:38 2013 (r245239)
+++ user/adrian/ath_radar_stuff/src/spectral_fft/fft_eval.c Wed Jan 9 20:39:29 2013 (r245240)
@@ -55,6 +55,7 @@ struct fft_app {
SDL_Surface *screen;
TTF_Font *font;
struct fft_display *fdisp;
+ struct fft_histogram *fh;
};
int graphics_init_sdl(struct fft_app *fap)
@@ -236,7 +237,7 @@ fft_eval_cb(struct radar_entry *re, void
pthread_mutex_lock(&fap->mtx_histogram);
for (i = 0; i < re->re_num_spectral_entries; i++) {
- fft_add_sample(re, &re->re_spectral_entries[i]);
+ fft_add_sample(fap->fh, re, &re->re_spectral_entries[i]);
}
fap->g_do_update = 1;
pthread_mutex_unlock(&fap->mtx_histogram);
@@ -261,6 +262,11 @@ int main(int argc, char *argv[])
errx(127, "calloc");
}
+ /* Setup histogram data */
+ fap->fh = fft_histogram_init();
+ if (! fap->fh)
+ exit(127);
+
/* Setup radar entry callback */
pthread_mutex_init(&fap->mtx_histogram, NULL);
set_scandata_callback(fft_eval_cb, fap);
@@ -274,7 +280,7 @@ int main(int argc, char *argv[])
/* Setup fft display */
- fap->fdisp = fft_display_create(fap->screen, fap->font);
+ fap->fdisp = fft_display_create(fap->screen, fap->font, fap->fh);
if (fap->fdisp == NULL)
exit(127);
Modified: user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.c
==============================================================================
--- user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.c Wed Jan 9 20:27:38 2013 (r245239)
+++ user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.c Wed Jan 9 20:39:29 2013 (r245240)
@@ -19,18 +19,24 @@
#include "fft_histogram.h"
-struct fft_histogram_data fdata;
-
/* XXX ew */
#define SPECTRAL_HT20_NUM_BINS 56
-void
+struct fft_histogram *
fft_histogram_init(void)
{
- bzero(&fdata, sizeof(fdata));
+ struct fft_histogram *fh;
+
+ fh = calloc(1, sizeof(*fh));
+ if (fh == NULL) {
+ warn("%s: calloc", __func__);
+ return (NULL);
+ }
+
+ return (fh);
}
-int
+static int
freq2fidx(int freqKhz)
{
int freqMhz = freqKhz / 1000;
@@ -53,7 +59,8 @@ freq2fidx(int freqKhz)
}
void
-fft_add_sample(struct radar_entry *re, struct radar_fft_entry *fe)
+fft_add_sample(struct fft_histogram *fh, struct radar_entry *re,
+ struct radar_fft_entry *fe)
{
float ffreq;
int i;
@@ -75,25 +82,25 @@ fft_add_sample(struct radar_entry *re, s
continue;
/* Rolling/decaying average */
- cur = fdata.avg_pts_cur[fidx];
- if (fdata.avg_pts[fidx][cur] == 0) {
- fdata.avg_pts[fidx][cur] = fe->pri.bins[i].dBm;
+ cur = fh->d.avg_pts_cur[fidx];
+ if (fh->d.avg_pts[fidx][cur] == 0) {
+ fh->d.avg_pts[fidx][cur] = fe->pri.bins[i].dBm;
} else {
- fdata.avg_pts[fidx][cur] = (((fdata.avg_pts[fidx][cur] * 100) / 90) + fe->pri.bins[i].dBm) / 2;
+ fh->d.avg_pts[fidx][cur] = (((fh->d.avg_pts[fidx][cur] * 100) / 90) + fe->pri.bins[i].dBm) / 2;
}
- fdata.avg_pts_cur[fidx] = (fdata.avg_pts_cur[fidx] + 1) % FFT_HISTOGRAM_HISTORY_DEPTH;
+ fh->d.avg_pts_cur[fidx] = (fh->d.avg_pts_cur[fidx] + 1) % FFT_HISTOGRAM_HISTORY_DEPTH;
/* Max */
- if (fdata.max_pts[fidx] == 0 || fe->pri.bins[i].dBm > fdata.max_pts[fidx]) {
- fdata.max_pts[fidx] = fe->pri.bins[i].dBm;
+ if (fh->d.max_pts[fidx] == 0 || fe->pri.bins[i].dBm > fh->d.max_pts[fidx]) {
+ fh->d.max_pts[fidx] = fe->pri.bins[i].dBm;
} else {
- fdata.max_pts[fidx] = ((fdata.max_pts[fidx] * 975) + (fe->pri.bins[i].dBm * 25)) / 1000;
+ fh->d.max_pts[fidx] = ((fh->d.max_pts[fidx] * 975) + (fe->pri.bins[i].dBm * 25)) / 1000;
}
}
}
int16_t *
-fft_fetch_freq_avg(int freqKhz)
+fft_fetch_freq_avg(struct fft_histogram *fh, int freqKhz)
{
int fidx;
@@ -101,11 +108,11 @@ fft_fetch_freq_avg(int freqKhz)
if (fidx < 0)
return NULL;
- return fdata.avg_pts[fidx];
+ return fh->d.avg_pts[fidx];
}
int16_t
-fft_fetch_freq_max(int freqKhz)
+fft_fetch_freq_max(struct fft_histogram *fh, int freqKhz)
{
int fidx;
@@ -113,5 +120,5 @@ fft_fetch_freq_max(int freqKhz)
if (fidx < 0)
return -180; /* XXX */
- return fdata.max_pts[fidx];
+ return fh->d.max_pts[fidx];
}
Modified: user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.h
==============================================================================
--- user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.h Wed Jan 9 20:27:38 2013 (r245239)
+++ user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.h Wed Jan 9 20:39:29 2013 (r245240)
@@ -18,10 +18,14 @@ struct fft_histogram_data {
int16_t max_pts[FFT_HISTOGRAM_SIZE];
};
-extern void fft_histogram_init(void);
-extern void fft_add_sample(struct radar_entry *re,
- struct radar_fft_entry *fe);
-extern int16_t * fft_fetch_freq_avg(int freqKhz);
-extern int16_t fft_fetch_freq_max(int freqKhz);
+struct fft_histogram {
+ struct fft_histogram_data d;
+};
+
+extern struct fft_histogram * fft_histogram_init(void);
+extern void fft_add_sample(struct fft_histogram *,
+ struct radar_entry *re, struct radar_fft_entry *fe);
+extern int16_t * fft_fetch_freq_avg(struct fft_histogram *, int freqKhz);
+extern int16_t fft_fetch_freq_max(struct fft_histogram *, int freqKhz);
#endif
More information about the svn-src-user
mailing list