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