From owner-svn-ports-all@FreeBSD.ORG Tue Jun 3 08:21:09 2014 Return-Path: Delivered-To: svn-ports-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 84793EE9; Tue, 3 Jun 2014 08:21:09 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6F2702C2E; Tue, 3 Jun 2014 08:21:09 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.8/8.14.8) with ESMTP id s538L9Wi034099; Tue, 3 Jun 2014 08:21:09 GMT (envelope-from miwi@svn.freebsd.org) Received: (from miwi@localhost) by svn.freebsd.org (8.14.8/8.14.8/Submit) id s538L6kL034079; Tue, 3 Jun 2014 08:21:06 GMT (envelope-from miwi@svn.freebsd.org) Message-Id: <201406030821.s538L6kL034079@svn.freebsd.org> From: Martin Wilke Date: Tue, 3 Jun 2014 08:21:06 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r356307 - in head/comms: . lysdr lysdr/files X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-all@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: SVN commit messages for the ports tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Jun 2014 08:21:09 -0000 Author: miwi Date: Tue Jun 3 08:21:05 2014 New Revision: 356307 URL: http://svnweb.freebsd.org/changeset/ports/356307 QAT: https://qat.redports.org/buildarchive/r356307/ Log: lysdr, is a simple SDR program for amateur radio. WWW: https://github.com/gordonjcp/lysdr PR: ports/190549 Submitted by: shurd@sasktel.net Added: head/comms/lysdr/ head/comms/lysdr/Makefile (contents, props changed) head/comms/lysdr/distinfo (contents, props changed) head/comms/lysdr/files/ head/comms/lysdr/files/Makefile (contents, props changed) head/comms/lysdr/files/cexp.c (contents, props changed) head/comms/lysdr/files/patch-audio_jack.c (contents, props changed) head/comms/lysdr/files/patch-filter.c (contents, props changed) head/comms/lysdr/files/patch-filter.h (contents, props changed) head/comms/lysdr/files/patch-gui.c (contents, props changed) head/comms/lysdr/files/patch-lysdr.c (contents, props changed) head/comms/lysdr/files/patch-sdr.c (contents, props changed) head/comms/lysdr/files/patch-sdr.h (contents, props changed) head/comms/lysdr/files/patch-smeter.c (contents, props changed) head/comms/lysdr/files/patch-smeter.h (contents, props changed) head/comms/lysdr/files/patch-waterfall.c (contents, props changed) head/comms/lysdr/files/patch-waterfall.h (contents, props changed) head/comms/lysdr/pkg-descr (contents, props changed) Modified: head/comms/Makefile Modified: head/comms/Makefile ============================================================================== --- head/comms/Makefile Tue Jun 3 08:20:06 2014 (r356306) +++ head/comms/Makefile Tue Jun 3 08:21:05 2014 (r356307) @@ -87,6 +87,7 @@ SUBDIR += lirc SUBDIR += locator SUBDIR += lrzsz + SUBDIR += lysdr SUBDIR += mgetty+sendfax SUBDIR += minicom SUBDIR += mlan3 Added: head/comms/lysdr/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/comms/lysdr/Makefile Tue Jun 3 08:21:05 2014 (r356307) @@ -0,0 +1,33 @@ +# $FreeBSD$ + +PORTNAME= lysdr +PORTVERSION= 0.0.6 +CATEGORIES= comms hamradio +MASTER_SITES= GH + +MAINTAINER= shurd@sasktel.net +COMMENT= Lysdr SDR program for Unix + +LICENSE= GPLv2 + +LIB_DEPENDS= libfftw3.so:${PORTSDIR}/math/fftw3 \ + libjack.so:${PORTSDIR}/audio/jack + +WRKSRC= ${WRKDIR}/gordonjcp-lysdr-46d31fe +USE_GITHUB= yes +GH_ACCOUNT= gordonjcp +GH_COMMIT= 46d31fe +GH_TAGNAME= stable-0 + +USES= pkgconfig +USE_GNOME= gtk20 +PLIST_FILES= bin/lysdr + +post-patch: + ${CP} ${FILESDIR}/Makefile ${WRKSRC} + ${CP} ${FILESDIR}/cexp.c ${WRKSRC} + +do-install: + @${INSTALL_PROGRAM} ${WRKSRC}/lysdr ${STAGEDIR}${PREFIX}/bin/lysdr + +.include Added: head/comms/lysdr/distinfo ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/comms/lysdr/distinfo Tue Jun 3 08:21:05 2014 (r356307) @@ -0,0 +1,2 @@ +SHA256 (lysdr-0.0.6.tar.gz) = 747b04f0306a3258a02a41a208373a9f0e4c7a59c0c6215ac037c3b76d4e5969 +SIZE (lysdr-0.0.6.tar.gz) = 109559 Added: head/comms/lysdr/files/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/comms/lysdr/files/Makefile Tue Jun 3 08:21:05 2014 (r356307) @@ -0,0 +1,15 @@ +# Makefile based on wscript +# waf does deep magic ignoring our environment. + +PACKAGES= gtk+-2.0 jack fftw3 +CFLAGS+= `pkg-config -cflags ${PACKAGES}` +LDFLAGS+= `pkg-config -libs ${PACKAGES}` -lm + +SRCS= gui.c sdr.c filter.c audio_jack.c smeter.c waterfall.c lysdr.c +.if ${OSVERSION} < 900000 +SRCS+= cexp.c +.endif +PROG= lysdr +WITHOUT_MAN= yes + +.include Added: head/comms/lysdr/files/cexp.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/comms/lysdr/files/cexp.c Tue Jun 3 08:21:05 2014 (r356307) @@ -0,0 +1,46 @@ +/* $NetBSD: cexp.c,v 1.1 2007/08/20 16:01:34 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include + +double complex +cexp(double complex z) +{ + double complex w; + double r, x, y; + + x = creal(z); + y = cimag(z); + r = exp(x); + w = r * cos(y) + r * sin(y) * I; + return w; +} Added: head/comms/lysdr/files/patch-audio_jack.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/comms/lysdr/files/patch-audio_jack.c Tue Jun 3 08:21:05 2014 (r356307) @@ -0,0 +1,29 @@ +--- audio_jack.c.orig 2011-11-26 16:01:22.000000000 -0800 ++++ audio_jack.c 2014-06-02 02:37:35.000000000 -0700 +@@ -93,8 +93,9 @@ + // save some info in the SDR + sdr->size = jack_get_buffer_size(client); + sdr->sample_rate = jack_get_sample_rate(client); +- sdr->iqSample = g_new0(complex, sdr->size); ++ sdr->iqSample = g_new0(complex double, sdr->size); + sdr->output = g_new0(double, sdr->size); ++ return 0; + } + + int audio_stop(sdr_data_t *sdr) { +@@ -104,6 +105,7 @@ + if (sdr->iqSample) g_free(sdr->iqSample); + if (sdr->output) g_free(sdr->output); + ++ return 0; + } + + int audio_connect(sdr_data_t *sdr, gboolean ci, gboolean co) { +@@ -163,6 +165,7 @@ + } + free(ports); + } ++ return 0; + } + + /* vim: set noexpandtab ai ts=4 sw=4 tw=4: */ Added: head/comms/lysdr/files/patch-filter.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/comms/lysdr/files/patch-filter.c Tue Jun 3 08:21:05 2014 (r356307) @@ -0,0 +1,47 @@ +--- filter.c.orig 2011-11-26 16:01:22.000000000 -0800 ++++ filter.c 2014-06-02 03:50:20.000000000 -0700 +@@ -22,16 +22,19 @@ + #include + #include + #include ++ ++double complex cexp(double complex z); ++ + #include "filter.h" + #include "sdr.h" + + #define IS_ALMOST_DENORMAL(f) (fabs(f) < 3.e-34) + +-static void make_impulse(complex fir_imp[], float sample_rate, int taps, float bw, float centre) { ++static void make_impulse(complex double fir_imp[], float sample_rate, int taps, float bw, float centre) { + + float K = bw * taps / sample_rate; + float w; +- complex z; ++ complex double z; + int k, i=0; + + float tune = 2.0 * M_PI * centre / sample_rate; +@@ -57,7 +60,7 @@ + filter_fir_t *filter = malloc(sizeof(filter_fir_t)); + filter->taps = taps; + filter->size = size; +- filter->impulse = malloc(sizeof(complex)*taps); ++ filter->impulse = malloc(sizeof(complex double)*taps); + filter->imp_I = malloc(sizeof(double)*taps); + filter->imp_Q = malloc(sizeof(double)*taps); + filter->buf_I = malloc(sizeof(double)*taps); +@@ -89,11 +92,11 @@ + } + } + +-void filter_fir_process(filter_fir_t *filter, complex *samples) { ++void filter_fir_process(filter_fir_t *filter, complex double *samples) { + // Perform an FIR filter on the data "in place" + // this routine is slow and has a horrible hack to avoid denormals + int i, j, k; +- complex c; ++ complex double c; + double accI, accQ; + double *buf_I = filter->buf_I; + double *buf_Q = filter->buf_Q; Added: head/comms/lysdr/files/patch-filter.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/comms/lysdr/files/patch-filter.h Tue Jun 3 08:21:05 2014 (r356307) @@ -0,0 +1,20 @@ +--- filter.h.orig 2014-06-02 02:18:30.000000000 -0700 ++++ filter.h 2014-06-02 02:18:39.000000000 -0700 +@@ -30,7 +30,7 @@ + + // FIR filter defs + typedef struct { +- complex *impulse; ++ complex double *impulse; + double *buf_I; + double *buf_Q; + double *imp_I; +@@ -43,7 +43,7 @@ + filter_fir_t *filter_fir_new(int taps, int size); + void filter_fir_destroy(filter_fir_t *filter); + void filter_fir_set_response(filter_fir_t *filter, int sample_rate, float bw, float centre); +-void filter_fir_process(filter_fir_t *filter, complex *samples); ++void filter_fir_process(filter_fir_t *filter, complex double *samples); + #endif + + /* vim: set noexpandtab ai ts=4 sw=4 tw=4: */ Added: head/comms/lysdr/files/patch-gui.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/comms/lysdr/files/patch-gui.c Tue Jun 3 08:21:05 2014 (r356307) @@ -0,0 +1,31 @@ +--- gui.c.orig 2011-11-26 16:01:22.000000000 -0800 ++++ gui.c 2014-06-02 03:45:03.000000000 -0700 +@@ -23,6 +23,8 @@ + #include + #include + ++double complex cexp(double complex z); ++ + #include "sdr.h" + #include "waterfall.h" + #include "smeter.h" +@@ -31,7 +33,7 @@ + + // these are global so that the gui_update routine can fiddle with them + static GtkWidget *label; +-static GtkWidget *wfdisplay; ++static SDRWaterfall *wfdisplay; + static GtkWidget *meter; + + /* +@@ -215,8 +217,8 @@ + // 20m = 14075000 + // 15m = 21045000 + SDR_WATERFALL(wfdisplay)->centre_freq = sdr->centre_freq; +- gtk_widget_set_size_request(wfdisplay, FFT_SIZE, 250); +- gtk_box_pack_start(GTK_BOX(vbox), wfdisplay, TRUE, TRUE, 0); ++ gtk_widget_set_size_request(GTK_WIDGET(wfdisplay), FFT_SIZE, 250); ++ gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(wfdisplay), TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + + gtk_widget_show_all(mainWindow); Added: head/comms/lysdr/files/patch-lysdr.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/comms/lysdr/files/patch-lysdr.c Tue Jun 3 08:21:05 2014 (r356307) @@ -0,0 +1,13 @@ +--- lysdr.c.orig 2014-06-02 01:02:06.000000000 -0700 ++++ lysdr.c 2014-06-02 01:02:18.000000000 -0700 +@@ -103,10 +103,6 @@ + + printf("lysdr starting\n"); + +- // get the Gtk threads support going +- if(!g_thread_supported()) +- g_thread_init(NULL); +- + gdk_threads_init(); + gdk_threads_enter(); + Added: head/comms/lysdr/files/patch-sdr.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/comms/lysdr/files/patch-sdr.c Tue Jun 3 08:21:05 2014 (r356307) @@ -0,0 +1,39 @@ +--- sdr.c.orig 2011-11-26 16:01:22.000000000 -0800 ++++ sdr.c 2014-06-02 03:45:08.000000000 -0700 +@@ -26,6 +26,8 @@ + #include + #include + ++double complex cexp(double complex z); ++ + #include "filter.h" + #include "sdr.h" + +@@ -56,7 +58,7 @@ + // actually do the SDR bit + int i, j, k; + double y, accI, accQ; +- complex c; ++ complex double c; + fft_data_t *fft = sdr->fft; + int size = sdr->size; + int block_size = MIN(size, FFT_SIZE); // ensure we don't try to copy a block larger than FFT_SIZE +@@ -73,8 +75,8 @@ + + // copy this period to FFT buffer, or as much as will fit + // note that if the jack periodsize is greater than FFT_LEN, it will only copy FFT_LEN samples +- memmove(fft->samples, fft->samples+block_size, sizeof(complex)*(FFT_SIZE-block_size)); // move the last lot up +- memmove(fft->samples+FFT_SIZE-block_size, sdr->iqSample, sizeof(complex)*block_size); // copy the current block ++ memmove(fft->samples, fft->samples+block_size, sizeof(complex double)*(FFT_SIZE-block_size)); // move the last lot up ++ memmove(fft->samples+FFT_SIZE-block_size, sdr->iqSample, sizeof(complex double)*block_size); // copy the current block + + + // shift frequency +@@ -123,6 +125,7 @@ + } + break; + } ++ return 0; + } + + void fft_setup(sdr_data_t *sdr) { Added: head/comms/lysdr/files/patch-sdr.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/comms/lysdr/files/patch-sdr.h Tue Jun 3 08:21:05 2014 (r356307) @@ -0,0 +1,34 @@ +--- sdr.h.orig 2011-11-26 16:01:22.000000000 -0800 ++++ sdr.h 2014-06-02 02:33:44.000000000 -0700 +@@ -46,9 +46,9 @@ + } fft_data_t; + + typedef struct { +- complex *iqSample; // the array of incoming samples +- complex loVector; // local oscillator vector +- complex loPhase; // local oscillator phase angle (sets tuning) ++ complex double *iqSample; // the array of incoming samples ++ complex double loVector; // local oscillator vector ++ complex double loPhase; // local oscillator phase angle (sets tuning) + gdouble *output; // pointer to output samples + + GtkObject *tuning; // adjustment for tuning +@@ -63,7 +63,7 @@ + filter_fir_t *filter; + + // things to keep track of between callbacks +- complex dc_remove; ++ complex double dc_remove; + gfloat agc_gain; + gfloat agc_speed; + // jack parameters +@@ -74,6 +74,9 @@ + + sdr_data_t *sdr_new(); + int sdr_process(sdr_data_t *sdr); ++void sdr_destroy(sdr_data_t *sdr); ++void fft_setup(sdr_data_t *sdr); ++void fft_teardown(sdr_data_t *sdr); + #endif + + /* vim: set noexpandtab ai ts=4 sw=4 tw=4: */ Added: head/comms/lysdr/files/patch-smeter.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/comms/lysdr/files/patch-smeter.c Tue Jun 3 08:21:05 2014 (r356307) @@ -0,0 +1,10 @@ +--- smeter.c.orig 2014-06-02 02:39:40.000000000 -0700 ++++ smeter.c 2014-06-02 02:40:19.000000000 -0700 +@@ -85,6 +85,7 @@ + cairo_fill(cr); + + cairo_destroy(cr); ++ return TRUE; + } + + void sdr_smeter_set_level(SDRSMeter *sm, gdouble level) { Added: head/comms/lysdr/files/patch-smeter.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/comms/lysdr/files/patch-smeter.h Tue Jun 3 08:21:05 2014 (r356307) @@ -0,0 +1,10 @@ +--- smeter.h.orig 2014-06-02 02:51:37.000000000 -0700 ++++ smeter.h 2014-06-02 02:51:54.000000000 -0700 +@@ -55,6 +55,7 @@ + + GtkWidget *sdr_smeter_new(); + void sdr_smeter_set_level(SDRSMeter *sm, gdouble value); ++GType sdr_smeter_get_type(void); + + #endif /* __SMETER_H */ + Added: head/comms/lysdr/files/patch-waterfall.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/comms/lysdr/files/patch-waterfall.c Tue Jun 3 08:21:05 2014 (r356307) @@ -0,0 +1,109 @@ +--- waterfall.c.orig 2011-11-26 16:01:22.000000000 -0800 ++++ waterfall.c 2014-06-02 03:12:20.000000000 -0700 +@@ -21,6 +21,7 @@ + */ + + #include ++#include + #include + + #include +@@ -38,8 +39,6 @@ + static void sdr_waterfall_realize(GtkWidget *widget); + static void sdr_waterfall_unrealize(GtkWidget *widget); + static void sdr_waterfall_draw_scale(GtkWidget *widget); +-void sdr_waterfall_set_lowpass(SDRWaterfall *wf, gdouble value); +-void sdr_waterfall_set_highpass(SDRWaterfall *wf, gdouble value); + + static void sdr_waterfall_class_init (SDRWaterfallClass *class) { + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(class); +@@ -132,8 +131,7 @@ + + sdr_waterfall_set_scale(widget, wf->centre_freq); + +- g_assert(priv->mutex == NULL); +- priv->mutex = g_mutex_new(); ++ g_mutex_init(&priv->mutex); + gtk_adjustment_value_changed(wf->tuning); + } + +@@ -146,7 +144,7 @@ + if (wf->scale) // we might not have a scale + g_object_unref(wf->scale); + +- g_mutex_free(priv->mutex); ++ g_mutex_clear(&priv->mutex); + GTK_WIDGET_CLASS(parent_class)->unrealize(widget); + } + +@@ -184,7 +182,7 @@ + gtk_widget_queue_draw(GTK_WIDGET(wf)); + } + +-GtkWidget *sdr_waterfall_new(GtkAdjustment *tuning, GtkAdjustment *lp_tune, GtkAdjustment *hp_tune, gint sample_rate, gint fft_size) { ++SDRWaterfall *sdr_waterfall_new(GtkAdjustment *tuning, GtkAdjustment *lp_tune, GtkAdjustment *hp_tune, gint sample_rate, gint fft_size) { + // call this with three Adjustments, for tuning, lowpass filter and highpass filter + // the tuning Adjustment should have its upper and lower bounds set to half the sample rate + SDRWaterfall *wf; +@@ -209,7 +207,7 @@ + G_CALLBACK (sdr_waterfall_lowpass_changed), wf); + g_signal_connect (hp_tune, "value-changed", + G_CALLBACK (sdr_waterfall_highpass_changed), wf); +- return GTK_WIDGET(wf); ++ return wf; + + } + +@@ -328,6 +326,7 @@ + gtk_widget_queue_draw(widget); + priv->prelight = prelight; + } ++ return TRUE; + } + + static gboolean sdr_waterfall_button_press(GtkWidget *widget, GdkEventButton *event) { +@@ -358,6 +357,7 @@ + gtk_widget_queue_draw(widget); + break; + } ++ return TRUE; + } + + static gboolean sdr_waterfall_button_release(GtkWidget *widget, GdkEventButton *event) { +@@ -392,6 +392,8 @@ + case GDK_SCROLL_DOWN: + tuning += step; + break; ++ default: ++ break; + } + + sdr_waterfall_set_tuning(wf, tuning); +@@ -418,12 +420,12 @@ + cairo_rectangle(cr, 0, 0, width, height); + cairo_clip(cr); + +- g_mutex_lock(priv->mutex); ++ g_mutex_lock(&priv->mutex); + gdk_cairo_set_source_pixmap(cr, wf->pixmap, 0, -priv->scroll_pos); + cairo_paint(cr); + gdk_cairo_set_source_pixmap(cr, wf->pixmap, 0, height-priv->scroll_pos); + cairo_paint(cr); +- g_mutex_unlock(priv->mutex); ++ g_mutex_unlock(&priv->mutex); + + // cursor is translucent when "off", opaque when prelit + cursor = priv->cursor_pos; +@@ -486,10 +488,10 @@ + (4*wf->fft_size) + ); + +- g_mutex_lock(priv->mutex); ++ g_mutex_lock(&priv->mutex); + cairo_set_source_surface (cr, s_row, 0, priv->scroll_pos); + cairo_paint(cr); +- g_mutex_unlock(priv->mutex); ++ g_mutex_unlock(&priv->mutex); + + priv->scroll_pos++; + if (priv->scroll_pos >= wf->wf_height) priv->scroll_pos = 0; Added: head/comms/lysdr/files/patch-waterfall.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/comms/lysdr/files/patch-waterfall.h Tue Jun 3 08:21:05 2014 (r356307) @@ -0,0 +1,30 @@ +--- waterfall.h.orig 2011-11-26 16:01:22.000000000 -0800 ++++ waterfall.h 2014-06-02 03:08:41.000000000 -0700 +@@ -74,7 +74,7 @@ + gint drag; + gint click_pos; + gdouble bandspread; +- GMutex *mutex; ++ GMutex mutex; + }; + + #define SDR_TYPE_WATERFALL (sdr_waterfall_get_type ()) +@@ -93,7 +93,7 @@ + #define SCALE_HEIGHT 24 + #define SCALE_TICK 5000 + +-GtkWidget *sdr_waterfall_new(GtkAdjustment *tuning, GtkAdjustment *lp_tune, GtkAdjustment *hp_tune, gint sample_rate, gint fft_size); ++SDRWaterfall *sdr_waterfall_new(GtkAdjustment *tuning, GtkAdjustment *lp_tune, GtkAdjustment *hp_tune, gint sample_rate, gint fft_size); + float sdr_waterfall_get_tuning(SDRWaterfall *wf); + float sdr_waterfall_get_lowpass(SDRWaterfall *wf); + float sdr_waterfall_get_highpass(SDRWaterfall *wf); +@@ -102,6 +102,9 @@ + void sdr_waterfall_update(GtkWidget *widget, guchar *row); + void sdr_waterfall_set_scale(GtkWidget *widget, gint centre_freq); + void sdr_waterfall_filter_cursors(SDRWaterfall *wf); ++void sdr_waterfall_set_lowpass(SDRWaterfall *wf, gdouble value); ++void sdr_waterfall_set_highpass(SDRWaterfall *wf, gdouble value); ++GType sdr_waterfall_get_type(void); + #endif /* __WATERFALL_H */ + + /* vim: set noexpandtab ai ts=4 sw=4 tw=4: */ Added: head/comms/lysdr/pkg-descr ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/comms/lysdr/pkg-descr Tue Jun 3 08:21:05 2014 (r356307) @@ -0,0 +1,3 @@ +lysdr, is a simple SDR program for amateur radio. + +WWW: https://github.com/gordonjcp/lysdr