[hpsdr] KISS 1.1.24 used with VAC from digital program?
John Marvin
jm-hpsdr at themarvins.org
Sat Dec 15 14:36:56 PST 2012
Hermann,
Over time a large number of software applications were written for
interacting with "HDR's" (Hardware Defined Radio :) ). These included 1)
connections via serial ports so that software could control a radio, or
a radio could control software (e.g. CAT control), and 2) connections
via audio card inputs and outputs to process demodulated audio (i.e.
input to the computer) or transmit audio. The most common example of
these are applications that implement one or more digital modes.
With SDR's the "radio" is an application. In order to take advantage of
the already existing large number of applications for hardware radios
people chose to leverage the already existing interfaces to these
programs, i.e. serial ports and audio ports. With hardware radios these
connections were made by real serial cables and real audio cables. In
order to connect a software radio to these applications drivers were
written to implement virtual serial cables and virtual audio cables. A
virtual serial cable driver provides two serial ports (COM ports in
Windows terminology) that are "connected" within the driver to pass data
from one to the other. A virtual audio cable provides a single audio
"device" with input and output that are connected together within the
driver to pass data from input to output. Think of a sound card with
cables connecting the Left line out to the Left line in and the Right
line out to the Right line in.
These virtual devices allow one application to "talk" to another without
having to actually use a hardware loopback (i.e. like I described above
for an audio card). When we refer to VAC support we refer to the ability
to send demodulated audio to a virtual audio cable IN ADDITION to being
able to send it to a "hardware" audio output. Note that if someone has
the VAC driver installed on there system they show up in any list of
available audio outputs and inputs. I say "IN ADDITION" because a user
usually wants the primary audio sent to an audio output that they are
listening to, since they may be looking for both voice and digital
contacts. Once they see something they are interested in they may start
another application to listen to the other side of the VAC to process
that audio in some way. For example there is no one single wonderful
application that knows every digital mode and provides the optimal
implementation of each mode. So it sometimes requires the operator to
listen to the transmission (and observe it in the waterfall) in order to
try to identify the mode before choosing the application that would be
used to receive it.
Receiving audio via VAC gets even more complicated since it usually is
done in order to transmit, and that usually requires that the program
sending the audio also needs to control at least the PTT and perhaps the
transmit frequency. This usually requires a virtual serial cable in
addition to a virtual audio cable. The setup can get somewhat
complicated, especially for first time users. Obviously you have to add
transmit capability to CuSDR before you can even consider this, but you
should be thinking about it if you plan on adding "VAC" capability.
So, essentially it is called "VAC" capability since the VAC driver is
used to implement the connection between the software radio and other
software applications. There are other components of this feature that
make it more useful. For example PowerSDR has DIGL and DIGU buttons in
addition to LSB and USB buttons for indicating SSB demodulation. This
has the advantage that each button typically remembers the last settings
for that mode (e.g. filter parameters, AGC etc.) so you can set up what
makes sense for a digital mode and not have it interfere with your
settings for the equivalent voice mode, which may not be approprite for
digital modes. It also allows the software radio to allow settings like
only send audio when the DIGL or DIGU mode button is being used. There
are other features like allowing thepushing of PTT on the mike to
override the PTT on the digital mode, i.e. the transmit audio would
then come from the mike rather than the VAC input. Other options include
allowing the sending of the direct I/Q data to the VAC for programs that
know how to deal directly with I/Q data.
I would highly recommend playing with the VAC capability on PowerSDR
before adding such capability to CuSDR. You should actually install a
digital mode program (e.g. fldigi, WSPR, etc.) and make it work with
PowerSDR. That would give you a much better feel for what is involved,
and you can then understand what is needed and perhaps how things can be
done better. Note that the VAC driver is not free and has to be purchased.
Personally, I think it is time to start looking at something better than
having to deal with virtual serial and virtual audio cables. These were
done in order to leverage existing software while SDR was new. But they
are kind of archaic methods that should be replaced as SDR gets more
popular. I think it would be great if a group of people consisting of
SDR authors, digital mode software authors, etc. got together and
defined a new interface which makes it possible to connect these
programs together without having to go through a kernel driver in an
easier and even more powerful way. I think it can be done in a way that
allows for a graceful transition, so that SDR's that don't implement the
new interface can still connect to the new/modified programs via an
intermediary program that implemented a VAC to new api connection, and
also allowed SDR's that only implemented the new interface to talk to
old programs by doing the reverse (i.e. an external program or built
into the new api library for compatibility). This would also allow HDR's
to continue to interface with applications that were written to only
support the new interface. The underlying transport could be a variety
of things like shared memory (lowest latency), local sockets, and even
IP sockets (higher latency but allows for incredible versatility). The
applications wouldn't have to know what the actual transport is,
although it might have to provide the mechanism for configuring it (or
overriding automatic configuration).
John
AC0ZG
1355611016.0
More information about the Hpsdr
mailing list