Home > HAM Radio, Projects, RTL-SDR, Uncategorized > Softshell pre-alpha

Softshell pre-alpha

Softshell works!

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:

Softshell-alpha



  1. Playaspec
    May 11th, 2012 at 15:43 | #1

    So awesome! Thanks for this. Will there eventually be native USB support as well?

  2. May 11th, 2012 at 16:44 | #2

    There is native USB support (using IOKit)

  3. Chris
    May 11th, 2012 at 18:35 | #3

    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.

  4. May 11th, 2012 at 19:38 | #4

    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.

  5. Chris
    May 14th, 2012 at 17:27 | #5

    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 ;)

  6. May 14th, 2012 at 20:01 | #6

    @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?

  7. Chris
    May 22nd, 2012 at 18:23 | #7

    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.

  8. May 22nd, 2012 at 19:55 | #8

    That’s really interesting! Could you write up what you did somewhere? I would love to try to duplicate your results.

  9. Chris
    May 23rd, 2012 at 18:57 | #9

    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.

  10. Chris
    May 23rd, 2012 at 19:07 | #10

    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.

  11. May 23rd, 2012 at 19:36 | #11

    @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

  12. Chris
    May 24th, 2012 at 12:53 | #12

    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?

  13. Chris
    May 30th, 2012 at 21:27 | #13

    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.

  14. May 30th, 2012 at 21:34 | #14

    @Chris

    That sounds great, send ‘em my way!

  15. July 17th, 2012 at 07:50 | #15

    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

  16. July 17th, 2012 at 08:25 | #16

    Thanks!

    the best explanation for this problem is at oz9aec’s blog. Good luck! :)

  17. vanquish
    July 25th, 2012 at 17:57 | #17

    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?

  18. July 25th, 2012 at 18:16 | #18

    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.

  19. vanquish
    July 27th, 2012 at 09:42 | #19

    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.

  20. July 27th, 2012 at 09:48 | #20

    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.

  1. No trackbacks yet.


× 2 = ten