Softshell pre-alpha
Basic functionality of Softshell works! In the image above, you can see the app (Cocoa-rtl-sdr is the old name) on the right. I didn’t even have the text boxes wired in yet for the sample rate and center frequency, because I was so excited that it was working. The samples from the receiver are transported into GNU radio over TCP where a simple FFT is being performed. Notice that all the extra blocks needed for the original rtl-sdr aren’t needed, because I’m doing all of the uchar to float conversion inside of Softshell.
The code that’s available on GitHub was hacked together with some network code that I can’t release right now, but I’m going to move it over to code that I can use soon.
Update:
Here’s a pre-compiled application for those that don’t feel like compiling it:

So awesome! Thanks for this. Will there eventually be native USB support as well?
There is native USB support (using IOKit)
I have been unable to successfully compile gnuradio, I think because (i’m still on Leopard) some of the dependencies won’t install in my macports.
I should update my system.
Have you been using macports, or build it yourself? I’ve never gotten it to really work building myself. I’ve just been using the ancient 3.3.something version.
Both, but I had not realized that uhd was required for some things. Last night I successfully compiled uhd.
Also, I don’t know how it happened but it appears that on May 4th, I misconfigured something and it went wild in /opt/local/bin replacing binaries with aliases- of themselves. Very bad. So, when I have a bit of time, which may not be for a while, I have to try to figure out how to fix that and then try it again.
My mac install is quite old and I really need to start fresh, I know. But money is an issue right now so I just make do.
For that reason, I am thinking of switching to Linux until I can afford to buy the software I need on OS X. It’s just easier that way. The software upgrade cycle is okay when you have a healthy income but when you don’t, its not so good.
The xcode on my machine is 3.1.4.. I have not used XCode much but I can see how it might be super useful when you are trying to manage a build of someting like gnuradio. maybe I should see if that helps me see what’s causing the oopses..
My last build got this far:
[ 55%] Built target _gnuradio_core_runtime_swig_tag
[ 55%] Generating gnuradio_core_runtime.tag
[ 55%] Swig source
[ 55%] Building CXX object gnuradio-core/src/lib/swig/CMakeFiles/_gnuradio_core_runtime.dir/gnuradio_core_runtimePYTHON_wrap.cxx.o
/opt/local/include/boost/thread/detail/thread.hpp:316: warning: type attributes are honored only at type definition
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx: In function ‘void swig::setslice(Sequence*, Difference, Difference, Py_ssize_t, const InputSeq&) [with Sequence = std::vector<gr_basic_block_sptr, std::allocator >, Difference = int, InputSeq = std::vector<gr_basic_block_sptr, std::allocator >]‘:
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:5275: instantiated from here
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4470: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘size_t’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4470: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘size_t’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:5275: instantiated from here
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4488: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘size_t’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4488: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘size_t’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx: In function ‘Sequence* swig::getslice(const Sequence*, Difference, Difference, Py_ssize_t) [with Sequence = std::vector<gr_basic_block_sptr, std::allocator >, Difference = long int]‘:
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:5290: instantiated from here
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4399: error: invalid initialization of reference of type ‘ptrdiff_t&’ from expression of type ‘long int’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4343: error: in passing argument 5 of ‘void swig::slice_adjust(ptrdiff_t, ptrdiff_t, ptrdiff_t, size_t, ptrdiff_t&, ptrdiff_t&, bool)’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx: In function ‘void swig::setslice(Sequence*, Difference, Difference, Py_ssize_t, const InputSeq&) [with Sequence = std::vector<gr_basic_block_sptr, std::allocator >, Difference = long int, InputSeq = std::vector<gr_basic_block_sptr, std::allocator >]‘:
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:5299: instantiated from here
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4442: error: invalid initialization of reference of type ‘ptrdiff_t&’ from expression of type ‘long int’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4343: error: in passing argument 5 of ‘void swig::slice_adjust(ptrdiff_t, ptrdiff_t, ptrdiff_t, size_t, ptrdiff_t&, ptrdiff_t&, bool)’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:5299: instantiated from here
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4470: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘size_t’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4470: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘size_t’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4488: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘size_t’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4488: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘size_t’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx: In function ‘void swig::delslice(Sequence*, Difference, Difference, Py_ssize_t) [with Sequence = std::vector<gr_basic_block_sptr, std::allocator >, Difference = long int]‘:
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:5308: instantiated from here
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4508: error: invalid initialization of reference of type ‘ptrdiff_t&’ from expression of type ‘long int’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4343: error: in passing argument 5 of ‘void swig::slice_adjust(ptrdiff_t, ptrdiff_t, ptrdiff_t, size_t, ptrdiff_t&, ptrdiff_t&, bool)’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx: In function ‘void swig::setslice(Sequence*, Difference, Difference, Py_ssize_t, const InputSeq&) [with Sequence = std::vector<gr_block_sptr, std::allocator >, Difference = int, InputSeq = std::vector<gr_block_sptr, std::allocator >]‘:
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:5411: instantiated from here
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4470: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘size_t’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4470: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘size_t’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:5411: instantiated from here
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4488: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘size_t’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4488: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘size_t’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx: In function ‘Sequence* swig::getslice(const Sequence*, Difference, Difference, Py_ssize_t) [with Sequence = std::vector<gr_block_sptr, std::allocator >, Difference = long int]‘:
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:5426: instantiated from here
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4399: error: invalid initialization of reference of type ‘ptrdiff_t&’ from expression of type ‘long int’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4343: error: in passing argument 5 of ‘void swig::slice_adjust(ptrdiff_t, ptrdiff_t, ptrdiff_t, size_t, ptrdiff_t&, ptrdiff_t&, bool)’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx: In function ‘void swig::setslice(Sequence*, Difference, Difference, Py_ssize_t, const InputSeq&) [with Sequence = std::vector<gr_block_sptr, std::allocator >, Difference = long int, InputSeq = std::vector<gr_block_sptr, std::allocator >]‘:
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:5435: instantiated from here
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4442: error: invalid initialization of reference of type ‘ptrdiff_t&’ from expression of type ‘long int’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4343: error: in passing argument 5 of ‘void swig::slice_adjust(ptrdiff_t, ptrdiff_t, ptrdiff_t, size_t, ptrdiff_t&, ptrdiff_t&, bool)’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:5435: instantiated from here
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4470: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘size_t’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4470: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘size_t’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4488: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘size_t’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4488: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘size_t’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx: In function ‘void swig::delslice(Sequence*, Difference, Difference, Py_ssize_t) [with Sequence = std::vector<gr_block_sptr, std::allocator >, Difference = long int]‘:
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:5444: instantiated from here
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4508: error: invalid initialization of reference of type ‘ptrdiff_t&’ from expression of type ‘long int’
/Volumes/zxcv/builds/gnuradio/gnuradio-3.6.0/builddir/gnuradio-core/src/lib/swig/gnuradio_core_runtimePYTHON_wrap.cxx:4343: error: in passing argument 5 of ‘void swig::slice_adjust(ptrdiff_t, ptrdiff_t, ptrdiff_t, size_t, ptrdiff_t&, ptrdiff_t&, bool)’
make[2]: *** [gnuradio-core/src/lib/swig/CMakeFiles/_gnuradio_core_runtime.dir/gnuradio_core_runtimePYTHON_wrap.cxx.o] Error 1
make[1]: *** [gnuradio-core/src/lib/swig/CMakeFiles/_gnuradio_core_runtime.dir/all] Error 2
make: *** [all] Error 2
…
Wish I could get it running, I would love to be able to listen to FM radio via the computer. Can someone get a decent FM radio emulation in SDR with gnuradio and rtl-sdr??
I have a nice stereo but I would prefer to just wear one headset, not two
@Chris
It looks like you’re trying to install GNURadio from scratch. I never got that to work. Have you tried macports?
As far as leopard is concerned, I’m not sure if it’s going to be a problem. Does the Xcode project from Git load? I can try setting the base SDK to be 10.5 and see if the code still compiles.
Is your system capable of running Snow Leopard?
I have it working now. It turns out that the wxpython code has a hardcoded link to the OS 6 SDK that breaks everything else.
I still have a few problems with gnuradio but I’m working through them.
Yes, I would very much appreciate your seeing if it can compile for you on 10.5. It would be nice to be able to run Windows SDR software in Wine and be able to use the RTL via UDP or TCP.
That’s really interesting! Could you write up what you did somewhere? I would love to try to duplicate your results.
I don’t have the extra CPU cycles to do that right now, I’m working on something else that dwarfs all this in importance. This is what I do to remain sane. OTOH, its not so complicated that I can’t tell you my gotchas right here.
Another thing that is helping me is making soft links from “library_name.dylib” to library_name.so Its a hack, but it seems to work to allow me to compile things.
Lots of these gnuradio programs are written on liunux. The differences between the two OSes are not so large but some things are done differently and those seem to be the things that break.
I am still trying to figure out volk, and some of the python stuff fails silently with a bus error. I think that things that try to talk to hardware directly often fail and things need to be adjusted.
If I ever get it all working well together, THEN I will write it up.
If you want to email me, go for it, but keep in mind, it may be a few days before I see it. I am studying a lot right now.
I hope this doesn’t sound like a strange question but where do you get your rigid coax from?
Seems like the stuff to use in a number of different kinds of applications.
Your hardware looks as good as high end custom-manufactured one of a kind research hardware.
@Chris
No worries, I completely understand.
My Ph.D. defense is in 5 days, so I’m not likely to spend much time on GnuRadio anyway!
@Chris
Thanks! that’s quite a compliment.
You can get the semi-rigid coax online in a few places. I can give you a guys email address, he sells the stuff from his home. Basically, you send him an email and he sends you his catalog. I’ve seen many examples of RG-402 cable on ebay, but I’m not sure about the quality.
The nice, right-angle connectors for the semi-rigid coax are this item number (ebay):
380188750279
Wow, good luck on your PhD! That is a biggie I am sure.
Also, thank you for all this great info.
I just plugged in a very jury rigged discone (it does seem to be an improvement!) and was thinking as I put it together (it uses PVC pipe to support itself) that something like rigid coax would make the build a whole lot easier to make structurally sound and repeatable. Then I could make a nice, small 1-2 GHz discone and other small test antennas completely out of flashing copper and feed them with rigid coax..
So I would love that info!
I think maybe I spoke too soon on gnuradio. A number of things are still clearly nonfunctional. I think I am going to compile it again, Maybe I can get both the WX and QT working now.
Still have not figured out volk, either that or its broken.
Do you know which compiler is best for gnuradio with a dual core (core duo) Intel CPU?
I have a bit more time now and could just send you my various build configuration files (which contain all the make info)
It easier to get it to work in its own directory.
Now gnuradio latest version is working great- but the gr-osmosdr code is not compiling for me! Arrgh. But if you send me an email we can definitely get it working when you have a bit of time. Now that I see the pitfalls a bit clearer its less intimidating.
@Chris
That sounds great, send ‘em my way!
Hi!
Great job! Softrock work perfect but i have problem with GNURadio. GNU Radio installed with MacPorts unfortunately when typing gnuradio-companion got the message “Can not import gnuradio. Are your PYTHONPATH and LD_LIBRARY_PATH set correctly?” I’m not a unix geek and do not really know how to deal with it. I would ask for a little hint how to deal with this
Thanks!
the best explanation for this problem is at oz9aec’s blog. Good luck!
Hey, awesome stuff! I’m trying to get in to the rtlsdr world – unfortunately, the ezcap I got has the FC0013 tuner instead of the E4000 which seems to have little support. When I tried softshell, the tuner type comes up as “Baseclass!”which I’m guessing is an error.
Any advice?
Unfortunately, yes. And no.
I only have an E4000, so that’s all I can port. I’m happy to port for a new device, but I don’t have the budget at the moment to buy a suite of devices. Let alone the complication of actually locating a device with each chip.
Ah, totally understand. From what I’ve read, the ezcap dongles either come with the E4000 or the FC0012/13 variety. It’s kind of a crap shoot which one you’ll get when you order one. If I knew for sure I could get an E4000, it might be worth the $20 to buy another dongle.
Right, exactly.
Well, if you roll the dice again (whether you get an E4000 or the FC001x) and want to mail the FC001x over for a port, just let me know.