svn commit: r356307 - in head/comms: . lysdr lysdr/files

Martin Wilke miwi at FreeBSD.org
Tue Jun 3 08:21:09 UTC 2014


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 at 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 at 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 <bsd.port.mk>

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 <bsd.prog.mk>

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 <complex.h>
+#include <math.h>
+
+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 <stdlib.h>
+ #include <complex.h>
+ #include <math.h>
++
++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 <complex.h> 
+ #include <gtk/gtk.h>
+ 
++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 <fftw3.h>
+ #include <string.h>
+ 
++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 <math.h>
++#include <stdlib.h>
+ #include <string.h>
+ 
+ #include <gtk/gtk.h>
+@@ -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


More information about the svn-ports-head mailing list