Steve: Thanks for the great response as always.
Yes, I've been having fun playing with this stuff. DVB-T is the EU standard for digital broadcast television. The standard is different in the US(go figure☺). The dongle I bought was around $12 USD. I've heard WWV on 25MHz, US Citizen's Band around 27MHz, US Broadcast FM 88-108 MHz, Aircraft 120-135 MHz, 2m Amateur 144-148 MHz, NOAA Weather 162 MHz, and 70cm Amateur 440 Mhz. Normal Amateur bands and shortwave stations below 24 MHz require the 24 MHz upconverter which I haven't built yet). The output of gqrx can be fed through Pulse Audio to fldigi for decoding digital data streams(I have just started looking at this feature). Based on your comments I went and read the Perl Threads tutorial and searched Perl Monks for Wx and Threads(very little there). Also no working example on the wxPerl Wiki. I think Threads and Threads::Shared with lock() is the way to go. Now I just have to go figure it out! Thanks again, James On Thu, Sep 24, 2015 at 9:47 AM, Steve Cookson <steve.cook...@sca-uk.com> wrote: > Hi James, > > On 21/09/15 23:43, James Lynes wrote: > > I apologize for the length of this question in advance. > > Background: The July 2015 issue of Nuts and Volts magazine had an article > on using an inexpensive DVB-T USB dongle along with a 24MHz upconverter as > the basis for an HF and higher Software Defined Receiver(SDR). > > Amazing, I didn't know there were such things as SDRs, although I did play > around with the idea of using a microprocessor to act as a video capture > card, which I guess is a similar idea. So you're using a TV receiver as a > radio receiver? Slightly inverted, but cool. > > The software used in the article was SDR# an MS-Windows application. As I > am an Ubuntu user, I looked for a similar Linux application. I found gqrx. > While waiting on parts to build the upconverter, I installed gqrx-sdr from > the Ubuntu Software Center. It ran and pulled in various signals from 24MHz > up, but was unstable. Turns out this was a pretty old version and after > uninstalling and then installing sudo add-apt-repository > ppa:gqrx/snapshots, a stable version was found. > > Well, gqrx has a Remote Control feature that can accept commands over a > Telnet connection and more digging turned up a perl script(gqrx-scan) that > uses this interface, through Net::Telnet, to implement a scanner feature. > gqrx-scan has many bells and whistles that I wouldn't ever use so I wrote a > lite/crude version(lite.pl) that just scans from F1 to F2 repeatedly. For > more flexibility(and practice) I decided to expand lite.pl into a wxPerl > application(wxgqrxLite.pl), mostly a bunch of text controls and sizers. > > Problem 1: lite.pl is basically a while(1) loop scanning from F1 to F2, > listening for a second when a strong signal is detected. > Question 1: Where should the non-GUI stuff fit into a wxPerl application? > Current Solution 1: I created two timer events and put the scan code in > one and the listen code in the other. They trigger each other alternately > at separate rates(30msec and 2 seconds). Only one of these events/timers > are active at a time. This actually works! > > This depends on how decoupled you are. If you are completely decoupled > and just want an on or off signal (and I have a number of cases where I do > this) then a parallel process will do it. For instrance I have a process > to check network availability. Sometimes the network availability is > mixed, like on the edge of a mobile or wifi signal, in this case wx::Timer > will appear to hang and your process will freeze. If this is not what you > want, use a separate process. Here is an example where I use a temporary > file with 1 byte in it. > > `echo 0 > /home/image/Documents/Endoscopia/DB/nw.txt`; # > Create base file with '0' (network not available) > > # if in case previous instance crashed > with nw available > > # and it now isn't. > > $gl_nw_process_id_int=Wx::ExecuteCommand("perl iM_nw.pl", > wxEXEC_ASYNC); # Maintain network status file asynchronously. > . > . > . > call other stuff. > . > . > . > # on exit or crash > # Switch off nw monitor. > Wx::Process::Kill( $gl_nw_process_id_int, Wx::wxSIGKILL() ) if > $gl_nw_process_id_int; > > I then use wx::Timer to reread the file and there is no pause. It always > returns 1 or 0. > > > Problem 2: You can't start scanning unless the Telnet connection is open, > otherwise it throws a connection refused error. > Solution 2: Add code to track scanning and connection status to prevent > the user from doing illegal operations or multiple consecutive hits of the > same button, and popup message boxes to flag these errors. > > You can use a similar solution to the above. > > > Problem 3: The error checks, interlocks and message boxes between the > {startbutton} and {stopbutton} events seems to be ok. The same cannot be > said for the {connectbutton} and {disconnectbutton} events. There seems to > be a race/async processing problem between establishing the Telnet > connection(which errors and should set the {tnerror} flag) and the mainline > event code. The three individual print Dumper $self->{tnerror} statements > all show {tnerror} = 0 (wrong!) while the print Dumper $self statement > below shows {tnerror} = 1 (right!). There's a delay in this flag being set > in the Net::Telnet call which causes the rest of the {connectbutton} event > routine to process a wrong flag value. > Question 3: HELP ????? I'm out of ideas... > > Maybe a similar one a again? > > > Question 4: Does event->Skip() terminate the current event handler like > last terminates a while loop? > > You have Skip and Veto, Skip says continue and imagine I am not here. Eg > if you pressed the escape key out of a dialog box, if you have code there, > the dialog box will not exit. If you use ->Skip, it will, as it would as > if there was no code there. > > Veto says, undo what you just did and is not always applicable. > > Neither of these says this routine over-rides and replaces the default > behaviour. > > (People, do you all agree?). > > > Code attached. It will run without the dongle or gqrx installed. It just > fails on the Telnet connection. > > Thanks for your input. > > Broadly speaking your choices are Wx::Timer, Threads and > Wx::ExecuteCommand/Wx::Process > > Good luck, > > Steve > > > James > Ubuntu 14.04.2LTS/perl 5.18.2/wxPerl 3.0.1/HP 15 Quadcore Laptop > > > >