RF product - moRFeus - frequency converter and signal generator


@Abhishek @Konrad_Roeder It is on the input. I’ve tested this on 100+ devices at this point :slight_smile: Setting bias tee to on supplies about 5V to the RF IN antenna


thanks @karascanlin!


Thanks Abhishek for the link! Is there Source code available? I want to implement it in Python and therefore it would be nice to see how you communicate with the device. Sure, I could reverse the code, but this is a very nice device for HAM’s etc and therefore having the sources would be very nice. Thanks!


Yup, with python and Qt, you can build a really nice GUI interface or it.

The other thing that’s really needed is to be able to sweep the LO so you can look at filter passbands, etc Eg. with an SDR like HackRF.

–Konrad, WA4OSH


I would love to be able to initiate a continuous sweep of say 1 mhz or setting a top / bottom limit
and let it run while I make adjustments on my filters. I watch the output on my analyzer screens, so It
would be better if I could initiate scans from the moRFeus buttons and not tie up a computer port.



The protocol is simple:

  1. set frequency to 1234567890 (0x00000000499602D2 in hex, 64 bits):
    sent hid report (16 bytes): 0x77,0x81,0x00,0x00,0x00,0x00,0x49,0x96,0x02,0xD2,0x00,0x00,0x00,x00,0x00,0x00
    reply from moRFeus (16 bytes):

  2. get frequency:
    sent hid report (16 bytes): 0x72,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,x00,0x00,0x00
    reply from moRFeus (16 bytes):

  3. set mixer mode:
    sent hid report (16 bytes): 0x77,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,x00,0x00,0x00
    reply from moRFeus (16 bytes):

  4. set generator mode:
    sent hid report (16 bytes): 0x77,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,x00,0x00,0x00
    reply from moRFeus (16 bytes):

  5. get mode (mixer/generator):
    sent hid report (16 bytes): 0x72,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,x00,0x00,0x00
    reply from moRFeus (16 bytes) when in mixer mode:
    reply from moRFeus (16 bytes) when in generator mode:

general: first byte is 0x72 for “get”-ing and 0x77 for “set”-ing. second byte is 0x81 for frequency, 0x82 for function (mixer/generator), 0x83 for mixer current, 0x84 for biastee on(1) and off(0). Value to be set is sent in the next eight bytes (and returned in those eight bytes), and after these 10 bytes (1+1+8), 6 bytes of zero padding is sent.

Please note this is as the protocol works in raw form. Depending upon OS and libraries used, there might be complications (for example windows expects an extra byte to be sent before the sent report).

Also, the protocol may change on a firmware update, and comes with no support. The command line tools released above are the preferred options for scripting (sweep could easily be implemented by calling out to the tools from python, for example, instead of re-implementing the protocol in python).


@Abhishek @Syed
I agree with James that it would be nice to have a sweep function - either center frequency and width or start and stop frequencies. It’s very useful for sweeping filters, receivers, amplifiers, etc.

Also an RFon / RF off feature would be very useful if the moRFeus hardware supports it. If not, it really needs an RF switch to connect the output to a 50 ohm load when not used. And towards the DUT, there should probably be another RF switch to source a 50 ohm load to prevent oscillations.

I will be adding a step attenuator 0-31 dB in 0.5 dB steps and manually adding some larger 20dB inline attenuators manually. I will use my HP438 to measure the output power and calibrate it.

–Konrad, WA4OSH


Hi, just received the package, it took just 48hrs to come here (France).
First big thanks to @Abhishek and @zoltam, and the whole Outernet team.

So far it’s it’s looks really promising, and I just tested the generator mode, also using the tool (linux-32bits) provided yesterday, thanks ! Helpful !

Below a quick try performed few minutes ago, and associated shell script. Feel free to adapt and fork it, I’m not a programmer at all.

$morf_tool Generator
$morf_tool setCurrent 1

for i in {433500000..433600000..2500}
     echo "Freq : $i"
     $morf_tool  setFrequency $i
     sleep 2
sleep 3
for i in {433600000..433500000..-2500}
     echo "Freq : $i"
     $morf_tool  setFrequency $i
     sleep 2



Excellent! Glad you are liking it. Thanks for sharing your script.

Could you please also share details of the particular Linux distribution and version you used, and the kernel version? It might be useful to others in case someone runs into problems trying to run the tools.


Hi @Abhishek, thanks.
I’m running Lubuntu 16.04.4 LTS distrib on my old Dell computer, 2Gb RAM. Kernel is 4.4.0. GQRX to perform the capture.
Forgot to mention :

  • have to run the script as root (or sudo).
  • setCurrent 0 is enough in most cases. Just using a very short wire as antenna.
    Will try later on Rpi.


Nice Bash script! Thanks for sharing.

Here is a simple bash script tutorial for the very beginners. This should work on most Linux distributions.

The windows equivalent is called powershell. Perhaps someone could try writing a script to see if it can talk to the windows version of morf_tool.

–Konrad, WA4OSH



Firstly thanks @Abhishek & @Konrad_Roeder for all the great information in here.

I could try write a powershell script as soon as I have my device( this should be tomorrow here in Cape Town ).

Will report back my findings




Oh guys I was able to listen FM broadcast on 600.5 MHz for the first time in my life :rofl:
Just set : mixer mode, mixer freq to 500MHz, mixer current first to 0 then increased to 2.
Stock antenna connected to RF-IN, SDR connected to RF-OUT.
Signal level is very good, but I can see lot of noise all over the band, I will investigate later on this and try other bands.
Attached screenshot: GQRX is displaying real frequency just because I modified “LO” to -500MHz (upper right corner) but the SDR is really listening on 600.5MHz
So yes, MoRFeus is really easy to use and have a big potential for amateurs. Thanks again and enjoy everyone !


Abhishekt, thanks a lot. With that I should be able to try it in Python.


Is this a tar.gz archive? or a .rar? I’m not able to open the 32 or 64 bit versions in Linux Mint (Umbuntu like).

–Konrad, WA4OSH


Hi Konrad,
both 32, 64bits and ARM version of the morfeus_tools are not compressed.
You have to make it executable once downloaded :

sudo chmod +x ./morfeus_tool_linux_x64

Since I don’t want to flood this post with screenshots, here is an album, will add few results later : https://imgur.com/a/llATo
I added a scan of the wifi band (2.4GHz mixer set to 2GHz) . Just easy to do.

Btw, the morfeus_tool is working well on Rpi3 latest distrib, good news.

tested on Raspberry Pi 3B, latest Raspbian v9 "stretch "(13 March 2018) - kernel 4.9.80-v7+ #1098


Hi All,

I received my moRFeus last week, very nice.

Be gentle please, I’m pretty new to all of this, I also have a BladeRF SDR.

I work in cyber security and the mention of it in video made me decide to back it.

What stuff can I do with this thing?




Hi my unit is on the delivery van :smiley:

Here is a sample powershell script I wrote thus far, until I get my unit later today.

Paste in *.ps1 file and place it in the same folder as morfeus_tool_win32_win64.exe

Write-Host “This is a frequency sweep script for moRFeus - Test”

$startFreq = Read-Host -Prompt ‘Please enter start freqency in MHz from 0.040 - 6.0GHz’
$endFreq = Read-Host -Prompt ‘Please enter stop freuqencyin MHz from 0.040 - 6.0GHz’
$Date = Get-Date
$moRFeus = “.\morfeus_tool_win32_win64.exe”

$MsF = ( [int]$startFreq * 1000000 )
$MeF = ( [int]$endFreq * 1000000 )

Write-Host “’$Date’ moRFeus has been called with ‘$MsF’ and ‘$MeF’”

While ($true)
For ($i=$MsF; $i -le $MeF; $i=($i +3000)) { #we jump with 3000Hz for testing purposes as mentioned in the posts above the unit jumps in 3Hz steps

# Write-Host "Value of i'$i' and slept for '$sleep'ms " TEST CODE TO SEE INFINITE LOOP IN ACTION - This consumes a lot of time.
 # We would have to hookup a SDR to see the limits of the amount of commands per second the moRFeus can handle 

# Here we would call $moRFeus plus the setFrequency argument with variable $i
 Start-Sleep -m $sleep


So anyone with a unit and Windows could further expand on this if need be, we also need to make a loop that runs from $MsF(moRFeus start Freq) to $MeF(moRFeus end Freq) with millisecond steps(if possible nano second) and then stop when told.

I will try this once I am greeted by my unit after work :drooling_face:




Thanks for the RPi3 test report! Could you also mention the version of Raspbian and the kernel version?


Hi, edited my previous message, to be more clear.