MMDVM & UDRC
|
|
Michael Champion Sr
Is there another thread where this has continued? Or did it just die off in December?
Thanks, Michael N7UIC
|
|
Annaliese McDermond
Dan --
toggle quoted messageShow quoted text
I’m still working on the code to get things running, but I’m not quite there yet. I’ve gotten sidetracked by some DRAWS issues that I’m running down for the team. Thanks for trying things out, though, it’s nice to have some folks to test and see if things are running correctly. -- Annaliese McDermond (NH6Z) nh6z@nh6z.net
On Dec 29, 2018, at 12:10 PM, Dan Porter (AI2M) <groups@ai2m.danporter.net> wrote:
|
|
Dan Porter (AI2M)
Hi Anna, I noticed several recent GitHub updates. Am I missing something obvious or are there still some things to be worked out? When I start MMDVM-UDRC it appears ok…
But MMDVMHost fails like this:
Followed by this in MMDVM-UDRC:
This is on a working DStarRepeater system with the dstarrepeaterd service disabled. I’m just fooling around with it in my spare time out of curiosity. I don’t have a real need for it otherwise. I’ll admit I don’t understand the Pseudo TTY part very well. Thanks,
On 7 Dec 2018, at 1:01, Annaliese McDermond wrote:
|
|
Annaliese McDermond
Thanks Johnathan. I’ll be working a things a bit today and this evening.
On Dec 8, 2018, at 12:36 PM, Jonathan Naylor via Groups.Io <naylorjs=yahoo.com@groups.io> wrote:I’ll mainly be concentrating on D-STAR, YSF and DMR since that’s what I have test gear for. This version should at least allow you to test with the UDRC and iron out any bugs.I have a serial code fix for the read side of things. The transplanted MMDVMHost code has different semantics than the code for MMDVM-UDRC expects. The MMDVMHost code blocks when it receives an initial chunk of data and then waits indefinitely until it reads the entire buffer length requested. This doesn’t work for MMDVM-UDRC because it blocks the main event thread waiting for more serial data that will never come. I did some significant remodeling of the serial input code so that it reads a little bit more judiciously and uses the length field of the MMDVM frame to figure out how much to ask the OS to read for it. This seems to solve the problem. I’ll PR it soon so you can at least take a look at it. Remember that the DMR in this version is simplex only. Using the UDRC or similar hardware makes it impossible to have the type of synchronisation that duplex DMR repeating requires.I understand the synchronization issues surrounding the DMR time slots. I’d like to get the rest of the protocols working correctly and then Bryan and I have had recurring ideas on how we could potentially deal with that issue. I’m curious, though, how tight is the timing issue time-wise. Does the PTT have to cycle in 1ms, 10ms, 100ms? I’m assuming it’s the time from the preamble in that slot to when actual data begins to flow. Jonathan G4KLX-- Annaliese McDermond (NH6Z) Xenotropic Systems mcdermj@xenotropic.com
|
|
Hi Annaliese I've done the changes to use a 48 kHz sample rate with the MMDVM-UDRC. I'm making no guarantees but the values are based on the working 48 kHz branch of the main MMDVM firmware. The only area that bothers me is the output level for POCSAG which may be very out compared to the others. This version should at least allow you to test with the UDRC and iron out any bugs. I'd be very interested in any problems you find, and of course any pull requests that you may make to fix them. Remember that the DMR in this version is simplex only. Using the UDRC or similar hardware makes it impossible to have the type of synchronisation that duplex DMR repeating requires. Jonathan G4KLX
On Friday, 7 December 2018, 10:18:47 GMT, Annaliese McDermond <nh6z@...> wrote:
> On Dec 7, 2018, at 12:14 AM, Jonathan Naylor via Groups.Io <naylorjs=yahoo.com@groups.io> wrote: > > Hi Annaliese > > There are a set of filter coefficients for 48 kHz sample rate in a branch of the MMDVM firmware. I’ll look into slotting those in and altering the other variables. > > Ideally I’d recalculate them in MATLAB as floating point but my license for it ran out. Octave can probably do it though. Even rescaling from Q15 format will probably give enough precision. If you have some matlab code, I have a Matlab 2015b license on my Mac that I could spit out the coefficients for you. I’m mildly familiar with the process because I’ve done it for filter coefficients in the OpenHPSDR FPGA code that I was playing with. > It’s bizarre seeing Linux kernel AX25 being mentioned. I wrote that stuff 23 years ago and last looked at it 20 years ago. I’m not sure I could add anything to that discussion these days. > > Jonathan G4KLX -- Annaliese McDermond (NH6Z) nh6z@...
|
|
Dan Porter (AI2M)
Hi Anna,
toggle quoted messageShow quoted text
Thanks for the info. I’m definitely interested in following your progress. Dan - AI2M
|
|
Annaliese McDermond
On Dec 7, 2018, at 12:14 AM, Jonathan Naylor via Groups.Io <naylorjs=yahoo.com@groups.io> wrote:If you have some matlab code, I have a Matlab 2015b license on my Mac that I could spit out the coefficients for you. I’m mildly familiar with the process because I’ve done it for filter coefficients in the OpenHPSDR FPGA code that I was playing with. It’s bizarre seeing Linux kernel AX25 being mentioned. I wrote that stuff 23 years ago and last looked at it 20 years ago. I’m not sure I could add anything to that discussion these days.-- Annaliese McDermond (NH6Z) nh6z@nh6z.net
|
|
Hi Annaliese
toggle quoted messageShow quoted text
There are a set of filter coefficients for 48 kHz sample rate in a branch of the MMDVM firmware. I’ll look into slotting those in and altering the other variables. Ideally I’d recalculate them in MATLAB as floating point but my license for it ran out. Octave can probably do it though. Even rescaling from Q15 format will probably give enough precision. It’s bizarre seeing Linux kernel AX25 being mentioned. I wrote that stuff 23 years ago and last looked at it 20 years ago. I’m not sure I could add anything to that discussion these days.
On Friday, December 7, 2018, 06:01, Annaliese McDermond <nh6z@...> wrote:
|
|
Annaliese McDermond
Dan --
toggle quoted messageShow quoted text
Because I’m trying to get my repeater up and running again, and would like to use MMDVM-UDRC to do so, I’ve been doing some work on getting MMDVM-UDRC to work. My code is in the nwdigitalradio github account at: https://github.com/nwdigitalradio/MMDVM-UDRC You’re welcome to play with it with the understanding that it’s development code, may not work at all. I’m getting close to having things possibly working acceptably. An issue you’ll have to deal with is that mmdvm-udrc expects a 24000 sample rate. The UDRC hardware doesn’t support this and if you try to use hw:CARD=udrc,DEV=0 it will fail complaining on not being able to send sample rate. You might try using plughw:CARD=udrc,DEV=0 instead. I’m using a custom asound.conf to support it. More as I get things worked out. -- Annaliese McDermond (NH6Z) nh6z@nh6z.net
On Dec 6, 2018, at 4:51 AM, Dan Porter (AI2M) <groups@ai2m.danporter.net> wrote:
|
|
Geoffrey Merck
Hi, I am waiting for my DRAWS to be delivered as I plan to address this issue. 73 Geoffrey F4FXL / KC3FRA
Le jeu. 6 déc. 2018 à 13:51, Dan Porter (AI2M) <groups@...> a écrit :
|
|
Dan Porter (AI2M)
Hi Rich, Did you eventually manage to get it working? I was thinking of trying again with my UDRC. 73, Dan - AI2M
|
|
Thanks John, that helped but there were still a few errors along the way:
g++ -g -O3 -Wall -std=c++0x -pthread -c -o Biquad.o Biquad.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o CalDMR.o CalDMR.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o CalDStarRX.o CalDStarRX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o CalDStarTX.o CalDStarTX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o CalNXDN.o CalNXDN.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o CalP25.o CalP25.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o CWIdTX.o CWIdTX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRDMORX.o DMRDMORX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRDMOTX.o DMRDMOTX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRSlotType.o DMRSlotType.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DStarRX.o DStarRX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DStarTX.o DStarTX.cpp
DStarTX.cpp: In member function ‘void CDStarTX::txHeader(const uint8_t*, uint8_t*) const’:
DStarTX.cpp:382:7: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
if (d & 0x08U)
^~
DStarTX.cpp:384:9: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the ‘if’
i++;
^
g++ -g -O3 -Wall -std=c++0x -pthread -c -o FIR.o FIR.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o FIRInterpolator.o FIRInterpolator.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o IO.o IO.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o IOUDRC.o IOUDRC.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o MMDVM.o MMDVM.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o NXDNRX.o NXDNRX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o NXDNTX.o NXDNTX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o P25RX.o P25RX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o P25TX.o P25TX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o POCSAGTX.o POCSAGTX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o SampleRB.o SampleRB.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o SerialController.o SerialController.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o SerialPort.o SerialPort.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o SerialRB.o SerialRB.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o SoundCardReaderWriter.o SoundCardReaderWriter.cpp
SoundCardReaderWriter.cpp: In member function ‘virtual void CSoundCardWriter::entry()’:
SoundCardReaderWriter.cpp:479:85: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
le ((ret = ::snd_pcm_writei(m_handle, m_samples + offset, nSamples - offset)) != (nSamples - offset)) {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
g++ -g -O3 -Wall -std=c++0x -pthread -c -o Thread.o Thread.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o Utils.o Utils.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o YSFRX.o YSFRX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o YSFTX.o YSFTX.cpp
g++ Biquad.o CalDMR.o CalDStarRX.o CalDStarTX.o CalNXDN.o CalP25.o CWIdTX.o DMRDMORX.o DMRDMOTX.o DMRSlotType.o DStarRX.o DStarTX.o FIR.o FIRInterpolator.o IO.o IOUDRC.o MMDVM.o NXDNRX.o NXDNTX.o P25RX.o P25TX.o POCSAGTX.o SampleRB.o SerialController.o SerialPort.o SerialRB.o SoundCardReaderWriter.o Thread.o Utils.o YSFRX.o YSFTX.o -g -lpthread -lasound -lwiringPi -o MMDVM
it did complete the compile. When I attempt ./MMDVM is receive the following: Link does not exist: /dev/pts/1 <> ttyMMDVM0
Error creating symlink from /dev/pts/1 to ttyMMDVM0
Unable to open serial port on vpty: ttyMMDVM0
I am assuming this indicates that it is not properly configured for the UDRC. That is what I will be exploring next. Thanks for the help Rich, KR4PI
|
|
I haven't had a chance to build yet, but it looks like you haven't installed the dev package for asoundlib. Try: sudo apt install libasound2-dev
On Fri, Jul 6, 2018 at 11:02 AM, Rich KR4PI <rich.schnieders@...> wrote: Does anyone have MMDVM running on their UDRC yet? I have tried to compile and run with the latest compass Cedar but still cannot complete the build. Sudo make results in:
|
|
Does anyone have MMDVM running on their UDRC yet? I have tried to compile and run with the latest compass Cedar but still cannot complete the build. Sudo make results in:
g++ -g -O3 -Wall -std=c++0x -pthread -c -o Biquad.o Biquad.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o CalDMR.o CalDMR.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o CalDStarRX.o CalDStarRX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o CalDStarTX.o CalDStarTX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o CalNXDN.o CalNXDN.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o CalP25.o CalP25.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o CWIdTX.o CWIdTX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRDMORX.o DMRDMORX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRDMOTX.o DMRDMOTX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRSlotType.o DMRSlotType.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DStarRX.o DStarRX.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DStarTX.o DStarTX.cpp
DStarTX.cpp: In member function ‘void CDStarTX::txHeader(const uint8_t*, uint8_t*) const’:
DStarTX.cpp:382:7: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
if (d & 0x08U)
^~
DStarTX.cpp:384:9: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the ‘if’
i++;
^
g++ -g -O3 -Wall -std=c++0x -pthread -c -o FIR.o FIR.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o FIRInterpolator.o FIRInterpolator.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o IO.o IO.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o IOUDRC.o IOUDRC.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o MMDVM.o MMDVM.cpp
In file included from MMDVM.cpp:21:0:
SoundCardReaderWriter.h:51:28: fatal error: alsa/asoundlib.h: No such file or directory
^
compilation terminated.
Makefile:17: recipe for target 'MMDVM.o' failed
make: *** [MMDVM.o] Error 1
Thanks in advance for the help. Rich, KR4PI
|
|
Hi All
toggle quoted messageShow quoted text
I don’t have a Compass Linux up and running yet so I built it on a standard Linux box with the WiringPi header added. In MMDVM.cpp you will see two strings, “READ” and “WRITE” or similar. These need to be replaced with the Compass Linux UDRC ALSA sound devices. If someone could do a pull request with that info and the missing library, I’d appreciate it. To use it, you need to use a pseudo tty to link it to the host, and have one end of the pseudo tty on the command line. It will run as a daemon if you pass -daemon on the command line. It’s untested, but closely related to the latest MMDVM firmware.
On Saturday, May 5, 2018, 05:49, Tony <w7efs@...> wrote:
|
|
Tony <w7efs@...>
Thank you, it compiles successfully with that library addition to
the Makefile.
toggle quoted messageShow quoted text
Hopefully we'll soon receive some guidance on how to make the resulting executable MMDVM work with the UDRC-II. Does it replace one of the existing components dstarrepeaterd or ircddbgatewayd, perhaps via symlink? Where is the "more sensible configuration file"? Enquiring minds would like to know, as there's no man page and no "make install", only a usage message.
On 05/04/2018 01:59 PM, Jeremy
McDermond wrote:
I don’t see a -lwiringPi in the link command you have cut/pasted.
|
|
Jeremy McDermond <mcdermj@...>
I don’t see a -lwiringPi in the link command you have cut/pasted.
toggle quoted messageShow quoted text
— Anna
|
|
I ran into the same issue trying to compile on Compass Wilderness from March 2018.
Rich, KR4PI
|
|
Tony <w7efs@...>
Greetings all,
toggle quoted messageShow quoted text
I downloaded the zip file from https://github.com/g4klx/MMDVM-UDRC. The README.md contains no specific build instructions, and "make" encounters an error. First I check for some things: root@:~/src/MMDVM-UDRC-master# aplay -l **** List of PLAYBACK Hardware Devices **** card 0: udrc [udrc], device 0: Universal Digital Radio Controller tlv320aic32x4-hifi-0 [] Subdevices: 0/1 Subdevice #0: subdevice #0 root@:~/src/MMDVM-UDRC-master# dpkg --get-selections | grep wiringpi wiringpi install root@:~/src/MMDVM-UDRC-master# make ... g++ Biquad.o CalDMR.o CalDStarRX.o CalDStarTX.o CalNXDN.o CalP25.o CWIdTX.o DMRDMORX.o DMRDMOTX.o DMRSlotType.o DStarRX.o DStarTX.o FIR.o FIRInterpolator.o IO.o IOUDRC.o MMDVM.o NXDNRX.o NXDNTX.o P25RX.o P25TX.o SampleRB.o SerialDataController.o SerialPort.o SerialRB.o SoundCardReaderWriter.o Thread.o Utils.o YSFRX.o YSFTX.o -g -lpthread -lasound -o MMDVM IOUDRC.o: In function `CIO::initInt()': /root/src/MMDVM-UDRC-master/IOUDRC.cpp:32: undefined reference to `wiringPiSetup' /root/src/MMDVM-UDRC-master/IOUDRC.cpp:34: undefined reference to `pinMode' /root/src/MMDVM-UDRC-master/IOUDRC.cpp:37: undefined reference to `pullUpDnControl' /root/src/MMDVM-UDRC-master/IOUDRC.cpp:39: undefined reference to `pinMode' /root/src/MMDVM-UDRC-master/IOUDRC.cpp:40: undefined reference to `pinMode' /root/src/MMDVM-UDRC-master/IOUDRC.cpp:41: undefined reference to `pinMode' IOUDRC.o: In function `CIO::startInt()': /root/src/MMDVM-UDRC-master/IOUDRC.cpp:50: undefined reference to `digitalWrite' /root/src/MMDVM-UDRC-master/IOUDRC.cpp:51: undefined reference to `digitalWrite' /root/src/MMDVM-UDRC-master/IOUDRC.cpp:47: undefined reference to `digitalWrite' /root/src/MMDVM-UDRC-master/IOUDRC.cpp:48: undefined reference to `digitalWrite' IOUDRC.o: In function `CIO::getCOSInt()': /root/src/MMDVM-UDRC-master/IOUDRC.cpp:57: undefined reference to `digitalRead' IOUDRC.o: In function `CIO::setLEDInt(bool)': /root/src/MMDVM-UDRC-master/IOUDRC.cpp:62: undefined reference to `digitalWrite' IOUDRC.o: In function `CIO::setPTTInt(bool)': /root/src/MMDVM-UDRC-master/IOUDRC.cpp:74: undefined reference to `digitalWrite' /root/src/MMDVM-UDRC-master/IOUDRC.cpp:76: undefined reference to `digitalWrite' collect2: error: ld returned 1 exit status Makefile:14: recipe for target 'MMDVM' failed make: *** [MMDVM] Error 1 Thinking that I might be missing some package(s), I search for the undefined references without result: root@:~/src/MMDVM-UDRC-master# for i in \ > $(make 2>&1 | grep "^/root" | awk '{print $NF}' | \ > tr -d [:punct:] | sort | uniq) > do > echo $i > apt-file search $i > done digitalRead digitalWrite pinMode pullUpDnControl wiringPiSetup root@:~/src/MMDVM-UDRC-master# What am I missing please to successfully compile this code?
On 05/03/2018 07:38 AM, Jonathan Naylor
via Groups.Io wrote:
|
|