gqrx-sdr / gqrx

Software defined radio receiver powered by GNU Radio and Qt.
http://gqrx.dk
GNU General Public License v3.0
3.01k stars 537 forks source link

gqrx crashes with FCDP+ #97

Closed piranha32 closed 11 years ago

piranha32 commented 11 years ago

gqrx crashes on starting DSP. Output from the program:

[jacek@dragon32 gqrx]$ ./gqrx 
gr-osmosdr v0.1.0-6-g93ad959d (0.1.1git) gnuradio 3.7.0
built-in source types: file fcd rtl rtl_tcp bladerf 
Using Volk machine: sse4_2_64_orc
gr-osmosdr v0.1.0-6-g93ad959d (0.1.1git) gnuradio 3.7.0
built-in source types: file fcd rtl rtl_tcp bladerf 
Using FUNcube Dongle V2.0 (hw:3)
Qt has caught an exception thrown from an event handler. Throwing
exceptions from an event handler is not supported in Qt. You must
reimplement QApplication::notify() and catch all exceptions there.

terminate called after throwing an instance of 'std::runtime_error'
  what():  resolve_port: hierarchical block 'fcd_source_c': output 0 is not connected internally
Aborted (core dumped)

Problem does not occur with FCDP v1

csete commented 11 years ago

Please see issue #91

csete commented 11 years ago

Of course, feel free to reopen if you think you have found a different issue.

piranha32 commented 11 years ago

I'm not sure if it deserves reopening, I'm aware of the bandwidth issues, but the "'fcd_source_c': output 0 is not connected internally" message looks different enough from the other issues that I thought it deserves own case. I haven't seen any BW related messages. You know the program better, so if you think that it's just another manifestation of the bandwidth hydra, I'm fine with closing it.

csete commented 11 years ago

The "not enough bandwidth" messages appear in the syslog either when you plug the dongle in or when you start DSP. Type dmesg in a terminal to see the messages.

If you don't see the bandwidth messages we can take a closer look at it, but I am going to need much more info than this generic error message, e.g. which version of gqrx this is and how did you installed it, the same for gr-fcdproplus.

piranha32 commented 11 years ago

No "Not enough bandwidth", but I see ALSA complaining about inability to get freq:

Aug  5 12:16:29 dragon32 kernel: [1089863.864475] usb 2-1.2.2: new full-speed USB device number 51 using ehci-pci
Aug  5 12:16:29 dragon32 kernel: [1089863.951670] usb 2-1.2.2: New USB device found, idVendor=04d8, idProduct=fb31
Aug  5 12:16:29 dragon32 kernel: [1089863.951674] usb 2-1.2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Aug  5 12:16:29 dragon32 kernel: [1089863.951676] usb 2-1.2.2: Product: FUNcube Dongle V2.0  
Aug  5 12:16:29 dragon32 kernel: [1089863.951678] usb 2-1.2.2: Manufacturer: Hanlincrest Ltd.         
Aug  5 12:16:29 dragon32 kernel: [1089863.986667] ALSA sound/usb/clock.c:237 51:1:1: cannot get freq at ep 0x81
Aug  5 12:16:29 dragon32 kernel: [1089863.989811] hid-generic 0003:04D8:FB31.000D: hiddev0,hidraw2: USB HID v1.11 Device [Hanlincrest Ltd.          FUNcube Dongle V2.0  ] on usb-0000:00:1d.7-1.2.2/input2
Aug  5 12:16:29 dragon32 mtp-probe: checking bus 2, device 51: "/sys/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1.2/2-1.2.2"
Aug  5 12:16:29 dragon32 mtp-probe: bus: 2, device: 51 was not an MTP device
Aug  5 12:16:29 dragon32 kernel: [1089864.061846] ALSA sound/usb/clock.c:237 51:1:1: cannot get freq at ep 0x81
Aug  5 12:16:29 dragon32 kernel: [1089864.095208] ALSA sound/usb/clock.c:237 51:1:1: cannot get freq at ep 0x81
Aug  5 12:16:29 dragon32 kernel: [1089864.134328] ALSA sound/usb/clock.c:237 51:1:1: cannot get freq at ep 0x81
Aug  5 12:16:29 dragon32 kernel: [1089864.167669] ALSA sound/usb/clock.c:237 51:1:1: cannot get freq at ep 0x81
Aug  5 12:16:29 dragon32 kernel: [1089864.207183] ALSA sound/usb/clock.c:237 51:1:1: cannot get freq at ep 0x81
Aug  5 12:16:29 dragon32 kernel: [1089864.240502] ALSA sound/usb/clock.c:237 51:1:1: cannot get freq at ep 0x81

gqrx, gnuradio, and gr-osmosdr pulled from git. Latest commits:

gqrx:

commit 1ee3d787bc5564b6fac8f06d3c0dbd09b3d5e8cf
Author: Alexandru Csete <oz9aec@gmail.com>
Date:   Sun Aug 4 10:00:03 2013 +0200

    Also catch boost::program_options::unknown_option exception.

gnuradio:

commit 888c07f2510c49b5100223121ee02d9faea287d9
Merge: 6834e1d 9b47ed5
Author: Tom Rondeau <trondeau@vt.edu>
Date:   Mon Apr 1 12:36:14 2013 -0400

    Merge remote-tracking branch 'm0mik/uhd_usrp_spectrum_sense_freq_readout'

gr-osmosdr:

commit 9dfe3a635481139a61256d810989dee425d41e10
Author: Dimitri Stolnikov <horiz0n@gmx.net>
Date:   Sun Jul 28 16:35:48 2013 +0200

    bladerf: update common sample rate values

ldd for gqrx:

[jacek@dragon32 gqrx]$ ldd ./gqrx
        linux-vdso.so.1 =>  (0x00007fff7a0b9000)
        libboost_system.so.1.53.0 => /lib64/libboost_system.so.1.53.0 (0x0000003558400000)
        libboost_program_options.so.1.53.0 => /lib64/libboost_program_options.so.1.53.0 (0x00007fc57b16b000)
        librt.so.1 => /lib64/librt.so.1 (0x0000003688800000)
        libpulse-simple.so.0 => /lib64/libpulse-simple.so.0 (0x00000037a0800000)
        libpulse.so.0 => /lib64/libpulse.so.0 (0x00000037a3200000)
        libgnuradio-analog-3.7.0.so.0.0.0 => /opt/gnuradio.git/lib64/libgnuradio-analog-3.7.0.so.0.0.0 (0x00007fc57aef2000)
        libgnuradio-filter-3.7.0.so.0.0.0 => /opt/gnuradio.git/lib64/libgnuradio-filter-3.7.0.so.0.0.0 (0x00007fc57ac30000)
        libgnuradio-fft-3.7.0.so.0.0.0 => /opt/gnuradio.git/lib64/libgnuradio-fft-3.7.0.so.0.0.0 (0x00007fc57aa17000)
        libgnuradio-osmosdr-0.1.1git.so.0.0.0 => /opt/gnuradio.git/lib64/libgnuradio-osmosdr-0.1.1git.so.0.0.0 (0x00007fc57a7a5000)
        libgnuradio-blocks-3.7.0.so.0.0.0 => /opt/gnuradio.git/lib64/libgnuradio-blocks-3.7.0.so.0.0.0 (0x00007fc57a3af000)
        libgnuradio-runtime-3.7.0.so.0.0.0 => /opt/gnuradio.git/lib64/libgnuradio-runtime-3.7.0.so.0.0.0 (0x00007fc57a100000)
        libgnuradio-pmt-3.7.0.so.0.0.0 => /opt/gnuradio.git/lib64/libgnuradio-pmt-3.7.0.so.0.0.0 (0x00007fc579eb9000)
        libQtSvg.so.4 => /lib64/libQtSvg.so.4 (0x0000003eca000000)
        libQtGui.so.4 => /lib64/libQtGui.so.4 (0x0000003ec8e00000)
        libQtCore.so.4 => /lib64/libQtCore.so.4 (0x0000003692800000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003687c00000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x0000003688c00000)
        libm.so.6 => /lib64/libm.so.6 (0x0000003687400000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003688400000)
        libc.so.6 => /lib64/libc.so.6 (0x0000003687000000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003686c00000)
        libjson.so.0 => /lib64/libjson.so.0 (0x00000036ab600000)
        libpulsecommon-3.0.so => /usr/lib64/pulseaudio/libpulsecommon-3.0.so (0x00000037a3600000)
        libX11-xcb.so.1 => /lib64/libX11-xcb.so.1 (0x0000003ecce00000)
        libX11.so.6 => /lib64/libX11.so.6 (0x0000003ec6000000)
        libxcb.so.1 => /lib64/libxcb.so.1 (0x000000368a000000)
        libICE.so.6 => /lib64/libICE.so.6 (0x000000368b400000)
        libSM.so.6 => /lib64/libSM.so.6 (0x000000368b800000)
        libXtst.so.6 => /lib64/libXtst.so.6 (0x0000003ec9c00000)
        libwrap.so.0 => /lib64/libwrap.so.0 (0x00000037a3a00000)
        libsndfile.so.1 => /lib64/libsndfile.so.1 (0x00000036a6e00000)
        libasyncns.so.0 => /lib64/libasyncns.so.0 (0x00000036ab200000)
        libdbus-1.so.3 => /lib64/libdbus-1.so.3 (0x0000003690000000)
        libcap.so.2 => /lib64/libcap.so.2 (0x00000036a1c00000)
        libdl.so.2 => /lib64/libdl.so.2 (0x0000003687800000)
        libvolk.so.0.0.0 => /opt/gnuradio.git/lib64/libvolk.so.0.0.0 (0x00007fc579b70000)
        libboost_date_time-mt.so.1.53.0 => /lib64/libboost_date_time-mt.so.1.53.0 (0x0000003558c00000)
        libboost_program_options-mt.so.1.53.0 => /lib64/libboost_program_options-mt.so.1.53.0 (0x0000003559000000)
        libboost_filesystem-mt.so.1.53.0 => /lib64/libboost_filesystem-mt.so.1.53.0 (0x00007fc579958000)
        libboost_system-mt.so.1.53.0 => /lib64/libboost_system-mt.so.1.53.0 (0x000000355da00000)
        libboost_thread-mt.so.1.53.0 => /lib64/libboost_thread-mt.so.1.53.0 (0x000000355d600000)
        liborc-0.4.so.0 => /lib64/liborc-0.4.so.0 (0x00000036ace00000)
        libfftw3f.so.3 => /lib64/libfftw3f.so.3 (0x0000003690800000)
        libfftw3f_threads.so.3 => /lib64/libfftw3f_threads.so.3 (0x00000033af800000)
        libgnuradio-fcd-3.7.0.so.0.0.0 => /opt/gnuradio.git/lib64/libgnuradio-fcd-3.7.0.so.0.0.0 (0x00007fc579742000)
        librtlsdr.so.0 => /usr/local/lib/librtlsdr.so.0 (0x00007fc579528000)
        libbladeRF.so.0 => /lib64/libbladeRF.so.0 (0x00007fc57931f000)
        libz.so.1 => /lib64/libz.so.1 (0x0000003688000000)
        libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x000000368d800000)
        libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x000000368a800000)
        libpng15.so.15 => /lib64/libpng15.so.15 (0x000000368c400000)
        libfreetype.so.6 => /lib64/libfreetype.so.6 (0x000000368d000000)
        libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x000000368c000000)
        libXi.so.6 => /lib64/libXi.so.6 (0x0000003ec6800000)
        libXrender.so.1 => /lib64/libXrender.so.1 (0x0000003ec6c00000)
        libXrandr.so.2 => /lib64/libXrandr.so.2 (0x0000003ec7800000)
        libXfixes.so.3 => /lib64/libXfixes.so.3 (0x0000003ec7400000)
        libXcursor.so.1 => /lib64/libXcursor.so.1 (0x0000003ec7c00000)
        libXinerama.so.1 => /lib64/libXinerama.so.1 (0x0000003ec7000000)
        libfontconfig.so.1 => /lib64/libfontconfig.so.1 (0x000000368d400000)
        libXext.so.6 => /lib64/libXext.so.6 (0x0000003ec6400000)
        libjson-c.so.2 => /lib64/libjson-c.so.2 (0x00000036aa600000)
        libXau.so.6 => /lib64/libXau.so.6 (0x0000003689c00000)
        libuuid.so.1 => /lib64/libuuid.so.1 (0x000000368b000000)
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00000036a0000000)
        libgsm.so.1 => /lib64/libgsm.so.1 (0x00000036a7600000)
        libFLAC.so.8 => /lib64/libFLAC.so.8 (0x00000036a7200000)
        libvorbisenc.so.2 => /lib64/libvorbisenc.so.2 (0x00000036a5400000)
        libvorbis.so.0 => /lib64/libvorbis.so.0 (0x00000036a1400000)
        libogg.so.0 => /lib64/libogg.so.0 (0x000000369b600000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x0000003689800000)
        libattr.so.1 => /lib64/libattr.so.1 (0x0000003693600000)
        libgnuradio-audio-3.7.0.so.0.0.0 => /opt/gnuradio.git/lib64/libgnuradio-audio-3.7.0.so.0.0.0 (0x00007fc5790e9000)
        libusb-1.0.so.0 => /lib64/libusb-1.0.so.0 (0x00000036a9600000)
        libasound.so.2 => /lib64/libasound.so.2 (0x00000037a2e00000)
        libportaudio.so.2 => /lib64/libportaudio.so.2 (0x000000346f400000)
        libffi.so.6 => /lib64/libffi.so.6 (0x000000368bc00000)
        libexpat.so.1 => /lib64/libexpat.so.1 (0x000000368c800000)
        libjack.so.0 => /lib64/libjack.so.0 (0x000000346d600000)
        libcelt0.so.2 => /lib64/libcelt0.so.2 (0x000000368dc00000)
        libopus.so.0 => /lib64/libopus.so.0 (0x000000346c600000)
[jacek@dragon32 gqrx]$ 

Output from gqrx:

[jacek@dragon32 gqrx]$ ./gqrx 
Controlport disabled 
No user supplied config file. Using "default.conf" 
gr-osmosdr v0.1.0-6-g93ad959d (0.1.1git) gnuradio 3.7.0
built-in source types: file fcd rtl rtl_tcp bladerf 
Using Volk machine: sse4_2_64_orc
IQ DCR alpha: 1.04166e-05
New filter offset: 0 Hz 
Loading configuration from: "default.conf" 
Configuration file: "/home/jacek/.config/gqrx/default.conf" 
Crash guard triggered! 

Launching I/O device editor 
Configure I/O devices. 
CIoConfig : Available input devices: 
    0 : "FUNcube Dongle V2.0" 
    1 : "RTL-SDR Spectrum Server" 
    2 : "Complex Sampled (IQ) File" 
CIoConfig : Available output devices: 
    0 : "HDA NVidia Digital Stereo (HDMI)" 
    1 : "Built-in Audio Analog Stereo" 
saveConfig 
saveSettings *** FIXME_ SQL on/off 
New FFT rate: 15 Hz 
Loading configuration from: "/home/jacek/.config/gqrx/default.conf" 
Configuration file: "/home/jacek/.config/gqrx/default.conf" 
gr-osmosdr v0.1.0-6-g93ad959d (0.1.1git) gnuradio 3.7.0
built-in source types: file fcd rtl rtl_tcp bladerf 
Using FUNcube Dongle V2.0 (hw:3)
New antenna selected: "RX" 
No change in output device:
  old: 
  new: 
IQ DCR samp_rate: 192000
IQ DCR alpha: 5.20831e-06
Changing NB_RX quad rate: 96000 -> 192000
Requested sample rate: 192000 
Actual sample rate   : "192000.000000" 
setFreqCorr : 0 ppm 
New LNB LO: 0 Hz 
"New frequnecy range: 0.15 - 2050 MHz (step is 0 Hz but we use 1 Hz)." 
"New frequnecy range: 0.15 - 2050 MHz (step is 0 Hz but we use 1 Hz)." 
Gain start/stop/rel/abs:0/59/0.5/29.5
qtgui/dockrxopt.cpp currentMaxdev FIXME 
Filter preset for mode 3 LO: -5000 HI: 5000 
Genrating taps for new filter LO:-5000 HI:5000 TW:1000
Required number of taps: 159
setFftRate to "15 fps" 
New FFT rate: 15 Hz 
setFftSize to "4096" 
Qt has caught an exception thrown from an event handler. Throwing
exceptions from an event handler is not supported in Qt. You must
reimplement QApplication::notify() and catch all exceptions there.

terminate called after throwing an instance of 'std::runtime_error'
  what():  resolve_port: hierarchical block 'fcd_source_c': output 0 is not connected internally
Aborted (core dumped)
[jacek@dragon32 gqrx]$

Distro: Fedora 19 Kernel :Linux dragon32.piranet.org 3.9.9-302.fc19.x86_64 #1 SMP Sat Jul 6 13:41:07 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

Please let me know what other information I could provide.

csete commented 11 years ago

Ok, thanks. Sounds like a different issue so I reopen the issue but I will first be able to look at it after 2.2 is released.

csete commented 11 years ago

Just to be sure, you do have an udev rule for the Pro+? It has different product ID than the Pro and needs its own entry.

piranha32 commented 11 years ago

I didn't have rules for Funcubes, but adding them (from https://raw.github.com/csete/qthid/fcdpp/funcube-dongle.rules) did not help. Still "cannot get freq" and gqrx crashes.

csete commented 11 years ago

If you download this .tar.gz file: https://launchpad.net/~gqrx/+archive/snapshots/+files/gr-fcdproplus_0.0.1%2B1git20130802-g2ba97709-0ubuntu0%7Egqrx%7Eraring9.debian.tar.gz you will find a libgnuradio-fcdproplus.udev file in. Please try that rule as it may work better.

csete commented 11 years ago

PS: I don't know if necessary, but you better rename the file to have .rules extension.

piranha32 commented 11 years ago

I added the rule and commented out FCDP+ from the old file, but gqrx still crashes. The link in /dev is created, so the new rule has been applied. Gqrx also crashes when started from root account, so it doesn't look like a problem with permissions.

piranha32 commented 11 years ago

It looks that the problem is with gr-osmosdr. From my experiments with gnuradio-companion:

Which version of gr-osmosdr do you use?

csete commented 11 years ago

for the official gqrx release I have packaged git version from 20130728 g9dfe3a63. You should get an error message when you configure gr-osmosdr with FCDPv1 since it has differetn product ID than the v2 (you shouldn't be able to set frequency and such).

piranha32 commented 11 years ago

osmocom does not detect properly FCD when I provide 'device=' parameter. Then FCD is assumed to be v1. When 'device' is omitted FCD is detected properly, but the block crashes. When I enforce device and FCD type the block crashes as well. The flow graph is very simple: source + null sink, so there is not much else to crash. Log from grc. Run as root, to avoid potential problems with permissions:

gr-osmosdr v0.1.0-7-g9dfe3a63 (0.1.1git) gnuradio 3.7.0
built-in source types: file fcd rtl rtl_tcp bladerf 
Using FUNcube Dongle V2.0 (hw:1)
Traceback (most recent call last):
  File "/root/top_block.py", line 65, in <module>
    tb.Start(True)
  File "/opt/gnuradio.git/lib64/python2.7/site-packages/grc_gnuradio/wxgui/top_block_gui.py", line 73, in Start
    self.start()
  File "/opt/gnuradio.git/lib64/python2.7/site-packages/gnuradio/gr/top_block.py", line 103, in start
    top_block_start_unlocked(self._tb, max_noutput_items)
  File "/opt/gnuradio.git/lib64/python2.7/site-packages/gnuradio/gr/runtime_swig.py", line 4297, in top_block_start_unlocked
    return _runtime_swig.top_block_start_unlocked(*args, **kwargs)
RuntimeError: resolve_port: hierarchical block 'fcd_source_c': output 0 is not connected internally

>>> Done

Device configuration string for osmocom source:

fcd=0

Still a problem, but it's not a problem with gqrx so I'm closing the issue. Feel free to reopen if you think that you can do something to fix it.

csete commented 11 years ago

FWIW I usually use device string like this:

fcd,device=hw:2,type=2

piranha32 commented 11 years ago

With fcd,device=hw:1 even a microphone is detected as FCDv1. Adding type=2 always crashes the application. Can you post somewhere statically linked version of gqrx, so I wouldn't have to depend on my libraries?

csete commented 11 years ago

I have uploaded a binary package to sourceforge: https://sourceforge.net/projects/gqrx/files/2.2.0/ I hope you can use it.

piranha32 commented 11 years ago

I'm missing some libs. Could you please add them to the package?

[jacek@dragon32 gqrx-2.2.0-x86_64]$ ldd ./gqrx |grep "not found"
        libIce.so.34 => not found
        libIceUtil.so.34 => not found
        libicuuc.so.48 => not found
        libicui18n.so.48 => not found
[jacek@dragon32 gqrx-2.2.0-x86_64]$
csete commented 11 years ago

Can you try to install zeroc ice 3.4 package?

piranha32 commented 11 years ago

Works. For the record:

csete commented 11 years ago

Strange... it should work without copying the libraries to lib/ and without doing the LD_LIBRARY_PATH thing.

piranha32 commented 11 years ago

I copied libraries to lib because thy were not packaged in rpm and I didn't want to copy them to /usr/local/lib64. LD_LIBRARY_PATH is not really necessary, but at some point linker didn't want to see one of the libraries, so I added it to be safe. Otherwise everything works fine. I posted the recipe as a reference for people who would like to run your binary on a system which does not provide proper versions of ice and icu4c.