flexlib-go - OpenSource Library, Cross-platform

  • 10
  • Idea
  • Updated 8 months ago
  • (Edited)
Invested quite some time to start my cross-platform flexlib in GO. Yes, I'm publishing my work - again - in an early stage and open sourced it, with good hope, that someone wants to join forces.
https://github.com/krippendorf/flexlib-go

The Goal is to have all SmartSDR available features available in the API, with good performance and written with good quality. That should be a good foundation for any kind of Radio Client (e.g. QT QML, HTML5 - maybe Android)

A first util is "iq-transfer", it is based on parts of the library. A small tool  <3MB to capture / record / forward DAX IQ streams from a radio operated with SmartSDR. Especially interesting for Linux users. Currently tested on 64-bit Linux. Binaries are in the repo for all kind of platforms, also ARM for the RaspberryPi (untested).

Makes it possible to e.g. use Baudline, GNU-Radio, OpenWebRx etc.



Photo of Frank, HB9FXQ

Frank, HB9FXQ

  • 56 Posts
  • 25 Reply Likes

Posted 1 year ago

  • 10
Photo of Mike va3mw

Mike va3mw

  • 824 Posts
  • 195 Reply Likes
Frank

Matt showed me this yesterday.  That is frigg'n awesome stuff!

Mike va3mw
Photo of Ria - N2RJ

Ria - N2RJ, Elmer

  • 2255 Posts
  • 884 Reply Likes
Very nice!
Photo of Milen KG2C

Milen KG2C

  • 58 Posts
  • 13 Reply Likes
Frank, that's awesome!
Photo of KC2QMA_John

KC2QMA_John

  • 548 Posts
  • 188 Reply Likes
Awesome!
Photo of Frank, HB9FXQ

Frank, HB9FXQ

  • 56 Posts
  • 25 Reply Likes
Thx for all that emails that arrived in my inbox. Trying to reply to most of them, but I can't provide support to all kind of VITA49 decoding stuff. The Vita parsing - how I did it - is published on Github, the specs are available in the FRS developer wiki. Trying to invest my time into my go library, so you might want to put your questions into the forum instead of writing emails if you need help with the APIs.

Spend another couple of hours to get a small websocket based client working, based on flexlib-go. Hardest part is opus decoding/resampling inside the browser. Prototype shows, that it is perfectly possible to create a standalong multiuser HTML5 radio client. Also the OpenWebRx/IQ-Stream things are covered in the following video:  

(Edited)
Photo of Mohamed Al-Bufalasa

Mohamed Al-Bufalasa

  • 4 Posts
  • 1 Reply Like
Hi Frank

Finally somebody brave to think out of the box ( box here refer to smartSDR software).
Let me start with a confession that I am not an expert in programming by any mean.
I did play with Ubuntu Mint for a while just for curiosity. I manage to install GNU Radio after 2 days of constant fails due to all the overwhelming needs to know about Linux libraries and dependencies etc...

I didnt manage to do anything else which understandable in my case.

I did find that there is a Windows version of GNU radio companion.

My intention is to find a way to forward DAX IQ output to GNU radio as you did in your GO project.

The reason of that is to find an alternative to the rigid (take it or leave it ) atmosphere of smartsdr.
I would love to experiment and learn how to use GNUradio and experiment with blocks etc..

I know i can use GNU on windows with a cheap RTL-SDR dongle, but hey i own an expensive U$3K hardware to play with !

Hope somebody will Jump and comment.
Again Many thanks for Frank for sharing his brilliant work with us.

73
Mohamed
A92GR
Photo of Frank, HB9FXQ

Frank, HB9FXQ

  • 56 Posts
  • 25 Reply Likes
If you have GNURadio running it's shound be an easy task:
Download the example GNURadio project file from https://github.com/krippendorf/flexlib-go/blob/master/GRC/iq-transfer/iq-transfer-test.grc and open it with gnuradio.

Download my pre compiled tool from https://github.com/krippendorf/flexlib-go/releases/download/0.001/iq-transfer_linux64 resp. https://github.com/krippendorf/flexlib-go/releases/download/0.001/iq-transfer_linux32 if you are on a 32bit system

run it in a terminal with
./iq-transfer_linux64 --RADIO=192.168.92.8 --MYUDP=7799 --CH=1 --RATE=192 --FWD=127.0.0.1:2345

in a console - remember to replace 192.168.92.8 with your radio ip address.

done.
Photo of Mohamed Al-Bufalasa

Mohamed Al-Bufalasa

  • 4 Posts
  • 1 Reply Like
Hello Frank

Thanks for the directions.
I would like to let you know that the iq-transfer tool works flawlessly on my machine
Flex 6500, Lan, Ubuntu Mint 18.2  and GNUradio 3.7.10

Now the hard part of learning ...
Signal processing, use of filters
Sampling ..... DSP..... etc

I am taking it easy and build up my knowledge in this field.

It would be great in you give some references and direction to material to read and learn.
I know i may need a college degree in telecommunication engineering to master this art, but nevertheless i am a good student, I have already done an MBBS in medicine and surgery and BSc and a clinical fellowship all medical ! For me its never too late to study and learn.

Thanks again for the help.

73
Mohamed 
A92GR
Photo of Frank, HB9FXQ

Frank, HB9FXQ

  • 56 Posts
  • 25 Reply Likes
That is great news! An online course I can really recommend is https://www.coursera.org/learn/dsp# by by École Polytechnique Fédérale de Lausanne. Lots of math, but you gain solid DSP knowledge by completing that course.
Photo of Colter McQuay

Colter McQuay

  • 1 Post
  • 0 Reply Likes
Hey Frank,

Great work on the Go lib/utility.  I haven't had a chance to use it as I have been spending most of my time lately integrating the FlexLibMono library within a GNU Radio block.   So far it's working fairly well.  I've run into a couple bugs in the FlexLibMono library that I fixed in my fork and may push back into the original branch.  It's been nice to have the FlexLibMono library to work with to give insight to the shape of the data and commands being sent back and forth.  

Your Go-based utility seems very similar to the example HB9FXQ.Queryutil tool within the FlexLibMono repo.  Right now the gnu-block that I'm making is using the FlexLibMono library to setup, initialize and create the radio, panadapter, IQStream and take the resulting data and pipe it back into the output buffers of the GNU-Block.  Basically the same as your IQStream tool + UDP Source.  What I'm hoping to be able to do is add in parameters to the block that will send the commands back to the radio to update say center frequency etc.

Colter
Photo of WA6FXT Mike

WA6FXT Mike

  • 207 Posts
  • 37 Reply Likes
Frank,
  Are you still working on the project? I noticed that it has been four (4) months, since any activity on GitHUB.

  I'm trying to setup a Linux build configuration and help on the project.

73's de Mike WA6FXT
(Edited)