Building a transcoder for DMR -> D-Star

At the Online Radio Club, we have a D-Star XLX reflector with SmartGroups. This is XLX944, and the smart groups TORC1, TORC2, and TORC3. We want to bring more people to this online watering hole, so we hatched a plan to add a transcoder to/from DMR. This post is about how I went about getting that organised. The transcoder needs to sit on a fixed IP with access to physical hardware to add some AMBE hardware encoder/decoders. While all the rest of reflectors can live in somebody’s cloud, there’s a need for something physical to plug the AMBE USB sticks into.

I grabbed a Raspberry Pi 3B as the server for this. I got a Pi 3B, loaded the latest Raspbian lite onto it. I ordered a pair of DV Mega DVstick30s. These are AMBE3000 chips, so you need two to do transcoding (on in each direction at once, full-duplex, I presume) You may be able to get the

Now, let’s get some software organised on this. The transcoding software is called ambed and it is a part of the xlxd software. I’m just running ambed on the Pi 3B, the actual xlxd is running in the cloud somewhere.

I found I needed to configure the DVstick30s to have a different USB name to be detected properly by ambed. I did that using FTD Prog to re-program the USB Product Description from a generic FTDI serial name to USB-3000. See how to do this in this message by KB2EAR.

Now to the ambed software. There’s a set of command to type on PA7LIM’s page for the AMBE3003 config. They worked for me.

A little bit of config. In /ambed, edit the run file and replace the IP address 127.0.0.1 with the IP address of your Pi on your network.

Finally, I wrote a systemd service script:

[Unit]
 Description=AMBED
 After=network.target
 [Service]
 ExecStart=/ambed/run
 Type=simple
 PIDFile=/run/ambed.pid
 User=root
 Group=root
 [Install]
 WantedBy=default.target

I placed this in a file called /etc/systemd/system/ambed.service. And then issued a couple of commands:

sudo systemctl daemon-reload
sudo enable ambed
sudo start ambed
sudo status ambed

And you should see something like:

pi@transcode:~ $ systemctl status ambed
 ● ambed.service - AMBED
    Loaded: loaded (/etc/systemd/system/ambed.service; enabled; vendor preset: enabled)
    Active: active (running) since Tue 2019-08-06 07:03:45 BST; 2h 48min ago
  Main PID: 498 (run)
     Tasks: 15 (limit: 2200)
    Memory: 5.5M
    CGroup: /system.slice/ambed.service
            ├─498 /bin/bash /ambed/run
            ├─527 sudo /ambed/ambed 192.168.105.112
            └─532 /ambed/ambed 192.168.105.112
 Aug 06 07:03:46 transcode run[498]: Description : USB-3000         Serial : DM481NAO
 Aug 06 07:03:46 transcode run[498]: Opening USB-3000:DM41GIUP device
 Aug 06 07:03:46 transcode run[498]: ReadDeviceVersion : 0AMBE3000R
 Aug 06 07:03:46 transcode run[498]: 1V120.E100.XXXX.C106.G514.R009.B0010411.C0020208
 Aug 06 07:03:46 transcode run[498]: Opening USB-3000:DM481NAO device
 Aug 06 07:03:46 transcode run[498]: ReadDeviceVersion : 0AMBE3000R
 Aug 06 07:03:46 transcode run[498]: 1V120.E100.XXXX.C106.G514.R009.B0010411.C0020208
 Aug 06 07:03:46 transcode run[498]: Codec interfaces initialized successfully : 2 channels available
 Aug 06 07:03:46 transcode run[498]: Initializing controller
 Aug 06 07:03:46 transcode run[498]: AMBEd started and listening on 172.21.105.112

And that is about it. It looks like it is working. More on the testing and xlxd integration later.

Leave a Reply

Your email address will not be published. Required fields are marked *