From owner-svn-src-user@FreeBSD.ORG Wed Jan 9 20:39:31 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 42B3BC7B; Wed, 9 Jan 2013 20:39:31 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 26C40B9E; Wed, 9 Jan 2013 20:39:31 +0000 (UTC) Received: from svn.freebsd.org (svn.FreeBSD.org [8.8.178.70]) by svn.freebsd.org (8.14.5/8.14.5) with ESMTP id r09KdVZ9014511; Wed, 9 Jan 2013 20:39:31 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.5/8.14.5/Submit) id r09KdUnF014505; Wed, 9 Jan 2013 20:39:30 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201301092039.r09KdUnF014505@svn.freebsd.org> From: Adrian Chadd Date: Wed, 9 Jan 2013 20:39:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r245240 - user/adrian/ath_radar_stuff/src/spectral_fft X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Jan 2013 20:39:31 -0000 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