OpenBCM V1.07b12 (Linux)

Packet Radio Mailbox

IW8PGT

[Mendicino(CS)-Italy]

 Login: GUEST





  
LW1EAA > TODOS    20.10.17 02:14l 531 Lines 20041 Bytes #999 (0) @ WW
BID : 1132-LW1EAA
Read: GUEST
Subj: Linux y Soundmodem
Path: IW8PGT<IR2UBX<DB0RES<DB0OVN<DB0GOS<ON0AR<GB7CIP<SR1BSZ<LU4ECL<LW1EAA
Sent: 171019/2335Z @:LW1EAA.LP.BA.ARG.SOAM #:1132 [LA PLATA] FBB7.00e $:1132-LW
From: LW1EAA@LW1EAA.LP.BA.ARG.SOAM
To  : TODOS@WW

Como Utilizar Placa de Sonido como Modem de Radio bajo Linux

La utilización de una placa de sonido como modem de radio es quizßs unas de las formas mßs económicas de hacer packet aprovechando el hardware disponible en nuestra PC, sin necesidad de agregar mas que unos cables de conexiones y un sencillo circuito de PTT.

En 1995 el colega Thomas M. Sailer, HB9JNX/AE4WA, sailer@ife.ee.ethz.ch escribió el primer driver para linux. Por aquel entonces tan solo existían las placas de sonido para slot ISA y el controlador era capaz de soportar Sound Blaster y compatibles y las tarjetas del tipo Windows Sound System.

A mediados del año 2000 Thomas Sailer modificó el driver para optimizarlo al hardware y software mßs modernos, permitiendo controlar las mas recientes placas de sonido PCI, y por supuesto las viejas SB ISA.

Lamentablemente no existe mucha documentación sobre el nuevo desarrollo y mucho menos en español. Trataremos aquí de describir las dos posibilidades desarrolladas por el colega en tiempos distintos.

El driver escrito en 1995 se concebía como parte integrante del kernel, y era necesario compilarlo dentro del núcleo o bien cargar los módulos correspondientes.

La nueva versión consiste en una aplicación ejecutable a nivel de usuario, que utiliza los módulos ya existentes de la placa sonido (los mismos que utilizamos para escuchar música) y los asocia a los módulos ax25 y mkiss, los cuales sí debemos tener disponibles o compilados previamente.

De esta forma, podremos utilizar casi la totalidad de tarjetas de sonido que existen en el mercado. Es decir, si nuestro linux es capaz de reproducir sonidos, serß capaz de utilizar soundmodem, como dodem de radio.

En ambos casos, para interconectar la PC con el equipo de radio, cablearemos la salida de la placa de sonido con la entrada de micrófono del equipo, y la salida de parlante del equipo de radio a la entrada de audio de la tarjeta de sonido.

Adicionalmente serß necesario crear un circuito para activar el PTT. Esta señal se podrß tomar de cualquiera de los puertos serie, o paralelo o bien de la conexión MIDI. De este circuito hablaremos en detalle mas abajo.

A continuación describiremos la forma de instalar y configurar nuestro soundmodem según el driver mas reciente. Mas adelante, para aquellos que tengan alguna antigua placa ISA y quieran experimentar hablaremos del viejo método.

Utilizando Soundmodem (Año 2000)

Necesitaremos descargar de internet el programa "soundmodem".En la pßgina oficial del autor podremos encontrar la versión autoinstalable "rpm"; o la versión "tar.gz" para poder compilar a nuestro gusto. También hay una versión de Windows... pero no es nuestro propósito analizarla.

http://www.baycom.org/~tom/ham/soundmodem

Supongamos que elegimos el paquete "rpm" lo descargamos y lo instalamos:

rpm -i soundmodem-0.6-1.i386.rpm

Esto instalarß el programa ejecutable "soundmodem" y la utilidad de configuración grßfica llamada "soundmodemconfig".

No serß indispensable la instalación de las llamadas "ax25-utils", pero no estß de mßs instalarlas, ya que nos servirßn para futuros trabajos.

ax25-utils-2.1.42a-3.i386.rpm

Este paquete auto-instalable lo podremos bajar de:

http://www.rpmfind.net

y lo instalaremos con:

rpm -i ax25-utils-2.1.42a-3.i386.rpm

(Si la distribución no acepta el formato rpm, o si queremos el código fuente para compilar a gusto, es posible encontrar el paquete "tar.gz" en:

http://radio.linux.org.au

Asimismo necesitaremos el código fuente del kernel de linux. Normalmente estarß alojado en /usr/src/linux o bien descargarlo de

http://www.kernel.org

Necesitaremos incluir en el kernel, las opciones de AX.25 y Serial KISS Driver y la placa de sonido.

Compilando el Kernel

Como en la mayoría de las necesidades de radioaficionados, habrß que compilar un nuevo kernel capaz de soportar el protocolo AX.25 y los drivers adecuados. El kernel genérico instalado por Linux no estß preparado, aunque el código fuente nos ofrece todas las herramientas como para armarlo a medida.

No describiremos aquí todas las opciones a incluir para un correcto funcionamiento del sistema. Tan sólo nos limitaremos a describir las opciones necesarias para operar AX.25 con driver KISS, que son las necesarias para operar con el soundmodem.

Recordemos que solamente una cuidadosa selección de las opciones en concordancia con todo nuestro hardware nos garantizarß el correcto funcionamiento del sistema.

Para esta descripción utilizaremos Código fuente del kernel 2.4.19 (último kernel estable al momento de este documento)

En Linux es posible utilizar un kernel con los drivers incluidos en él, o bien crearlos como módulos, para poder cargar y descargarlos según lo necesitemos.

Si nuestra intención es armar un kernel con los drivers incluidos (built in), en la sección Amateur Packet Radio seleccionaremos lo siguiente:

[*] Amateur Radio Support

      <*> Amateur Radio AX.25 level 2 Protocol

AX.25 Network Device Drivers --->
    
       <*> Serial port KISS driver for AX.25

Sound --->

      <*> Sound card support

      <*> OSS sound modules

      <*> 100% Sound Blaster compatibles (SB16/32/64 etc.) support

Si nuestra intención es armar un kernel con los drivers construidos como módulos, en la sección Amateur Packet Radio seleccionaremos lo siguiente:

[*] Amateur Radio Support

      <M> Amateur Radio AX.25 level 2 Protocol

AX.25 Network Device Drivers --->

      <M> Serial port KISS driver for AX.25

Sound --->

      <M> Sound card support

      <M> OSS sound modules

      <M> 100% Sound Blaster compatibles (SB16/32/64 etc.) support

Es importante destacar que no utilizaremos ninguna opción de las que figuran como "soundmodem". Esas corresponden para el viejo método del cual hablaremos mßs abajo. Claro estß que la elección de la placa de sonido dependerß del modelo que tengamos instalado.

Repasemos los pasos para compilar el kernel:

Comúnmente el código fuente lo encontraremos en el dir:

/usr/src/linux

allí, ejecutaremos los siguientes comandos:

make mrproper             Prepara archivos para compilar

make menuconfig         Presenta el menú contextual de selección

make dep                     Establece las dependencias

make clean                 Limpia elementos innecesarios

make bzImage             Compila el nuevo núcleo

make modules             Compila los módulos

make modules_install  Instala los módulos en el dir /lib/modules


Nuestro nuevo kernel se ubicarß en:

/usr/src/linux/arch/i386/boot/bzImage

Este archivo lo copiaremos a nuestro directorio de boteo y luego haremos las modificaciones necesarias en /etc/lilo.conf para que al reiniciar la mßquina encontremos disponible nuestro flamante kernel con soporte para protocolo AX25 en modo KISS, listo para vincularse al soundmodem

NOTA: Un error frecuente al reiniciar con el nuevo kernel, se debe a la selección del tipo de microprocesador. Si tenemos algún problema, podremos seleccionar procesador 386, el cual serß compatible con una gran cantidad de hardware, incluso Pentium y AMD.

Cargando los módulos

Si elegimos compilar con los driver incluidos en el kernel, podremos dedicarnos directamente a la configuración de los dispositivos.

Si optamos por compilar los módulos, deberemos cargarlos antes de configurar:

modprobe ax25

modprobe mkiss

Los módulos de la placa de sonido se cargarßn automßticamente. En caso de no ser así, podremos hacerlo de forma manual:

modprobe sb

(o el módulo correspondiente a la placa a utilizar)

Recordemos algunos comandos para el manejo de módulos:

insmod nombre_del_archivo         Cargo el módulo

modprobe nombre_del_modulo     Carga el módulo y módulos dependientes

lsmod                                             Muestra la lista de módulos cargados

rmmod nombre_del_modulo         Descarga un determinado módulo

Tengamos en cuenta que los módulos se pueden cargar con el comando "insmod", pero para que funcione satisfactoriamente habrß que cargar en orden el resto de los módulos dependientes. Por ello si utilizamos "modprobe" se cargaran de forma inteligente todos los módulos necesarios que dependan del indicado.

Una vez cargados los módulos, si pedimos un listado encontraremos los siguientes módulos activos:

ax25
mkiss
sb
sb_lib
uart401
sound
soundcore

Destaquemos que estas pruebas estßn hechas con una Sound Blaster 16, si probamos con otras tarjetas de sonido, los módulos serßn otros.

Configurando el Soundmodem

Hasta aquí ya tenemos el kernel con soporte para placa de sonido, AX25 y KISS. Ahora es momento de configurar nuestro soundmodem.

Para ello es posible ejecutar en una ventana del entorno grßfico la utilidad:

soundmodemconfig

Aparecerß un cuadro grßfico de configuración, el cual nos pedirß en principio crear el nuevo soundmodem:

File
    New
        Configuration

Luego iluminando el MODEM creado crearemos el canal:

File
    New
        Channel

Una vez creado el canal ya podremos especificar:

Tipo de modulación
Velocidad de transmisión
Parßmetros AX25
Puerto de PTT
Licencia y número ip etc . etc.

Esto crearß el archivo llamado:

/etc/ax25/soundmodem.conf


#/etc/ax25/soundmodem.conf
<?xml version="1.0"?>
<modem>
<configuration name="lw2dtq">
<channel name="Channel 0">
<mod mode="afsk" bps="1200" f0="1200" f1="2200"/>
<demod mode="afsk" bps="1200" f0="1200" f1="2200"/>
<pkt mode="MKISS" ifname="sm0" hwaddr="LW2DTQ" ip="44.153.32.70" netmask="255.255.255.255" broadcast="44.153.32.255"/>
</channel>
<chaccess txdelay="450" slottime="10" ppersist="60" fulldup="0" txtail="10"/>
<audio type="soundcard" device="/dev/dsp" halfdup="0"/>
<ptt file="/dev/ttyS1"/>
</configuration>
</modem>

Si nuestro linux no tiene instalado entrono grßfico es posible tomar este ejemplo y hacer las modificaciones para cada necesidad.

Declarando el nuevo dispositivo

Ahora tendremos que declarar datos esenciales de los nuevos puertos que utilizaremos.

Este archivo se aloja en:

/etc/ax25/axports

Se puede crear con un procesador de texto común, y su formato es el siguiente:

# /etc/ax25/axports
#
#
# name     callsign         speed     paclen window description
#
sonido     LW2DTQ-6     1200     256         4         Placa de sonido

El formato de la línea serß: en primer término el nombre del port, en este caso sonido (que se asociarß al dispositivo sm0), luego la licencia, luego la velocidad de comunicación, luego el paclen, el window (similar al maxframe) y una descripción.

Ejecutando el Soundmodem y calibrando niveles de audio.

Ahora en una terminal ejecutaremos en comando:

soundmodem

Y nuestro linux ya estarß en condiciones de operar packet con la placa de sonido. Solo resta ajustar los niveles de audio. Para ello podremos utilizar la consola mezcladora multimedia instalada en nuestro entorno grßfico.

Aquí debemos ajustar con cuidado los niveles de audio tanto de volumen general (master) con el nivel de entrada de línea. En mi caso funciona correctamente con ambos niveles en torno al 80 %.

Para que el soundmodem registre los datos, habilitaremos en el mixer la opción de grabación.

Si nuestro linux solo opera en modo texto podemos utilizar los siguientes comandos desde una terminal:

aumix -v 80

aumix -l 80

aumix -l R

Estos comandos setean el volumen al 80 %, la entrada de línea al 80% y habilita la opción "grabar" para la entrada de línea.

Ahora podremos ejecutar en otra terminal el comando

ifconfig sm0

y veremos los datos del nuevo dispositivos creados. En el caso de ejecutar la utilidad ax25 llamada:

listen -a

Observaremos el trßfico entrante y salientes del sistema.

Utilizando el Viejo Soundmodem

Como analizamos antes, el driver original de soundmodem para Linux, formaba parte del kernel, tanto para su construcción monolítica como modular. Aún en las versiones actuales del kernel es posible encontrar el código para su compilación.

Recordemos que es una herramienta limitada, capaz de controlar viejas placas de sonido.

Esta versión del driver "soundmodem" ocupa los mismos recursos de una PC que son utilizados por la placa de sonido para emitir los sonidos reales, por lo tanto, no es posible manejar ambas configuraciones de manera simultßnea. Es decir: o utilizamos la placa como MODEM, o la utilizamos para escuchar música. Pero nunca ambas cosas juntas.

El kernel tampoco puede incluir el driver de sonido y el de soundmodem.

Si nuestra intención es armar un kernel con el driver incluido (built in) elegiremos:

En principio para satisfacer las dependencias:

Parallel port support ---->

    <*> Parallel port support

Luego habilitaremos la sección de Amateur Packet radio

[*] Amateur Radio Support

    <*> Amateur Radio AX.25 level 2 Protocol

AX.25 Network Device Drivers -à

    <*> Sound Card Modem Driver

    <*> Soundmodem support for Sound Blaster and compatible cards

    < > Soundmodem support for WSS and Crystal Cards

    <*> 1200 bauds AFSK Modulation (7.3728 Mhz crystal)

    < > 2400 bauds AFSK Modulation (8MHz crystal)

    < > 2666 bauds AFSK Modulation

     < > 4800 bauds HAPN-1 Modulation

    < > 4800 bauds PSK Modulation

    < > 9600 bauds FSK G3RUH Modulation

Recordemos de dejar inhabilitado las opciones para soporte de sonido:

Sound ----->

    < > Sound card support

Ahora bien, este kernel ya no permitirß escuchar sonido si ese fuera nuestro deseo temporal. Por lo tanto es recomendable compilar las opciones de sonido y soundmodem como módulos y de esa forma podremos cargar uno u otro en el kernel según nuestras preferencias.

Si esa fuera nuestra intención seleccionaremos:

Parallel port support ---->

    <M> Parallel port support

[*] Amateur Radio Support

    <M> Amateur Radio AX.25 level 2 Protocol

AX.25 Network Device Drivers -à

    <M> Sound Card Modem Driver

    <*> Soundmodem support for Sound Blaster and compatible cards

    <     > Soundmodem support for WSS and Crystal Cards

    <*> 1200 bauds AFSK Modulation (7.3728 Mhz crystal)

    < > 2400 bauds AFSK Modulation (8MHz crystal)

    < > 2666 bauds AFSK Modulation

    < > 4800 bauds HAPN-1 Modulation

    < > 4800 bauds PSK Modulation

    < > 9600 bauds FSK G3RUH Modulation

Sound ----->

    <M> Sound card support

    <M> OSS sound modules

    <M> 100% Sound Blaster compatibles (SB16/32/64 etc.) support

Claro estß que en la sección soundmodem podremos elegir el tipo de placa y el tipo de modulación que necesitemos.

Y en la sección de sonido podremos elegir la placa que tengamos. En mi caso para estas pruebas yo utilizo una placa Sound Blaster SB16

Para la compilación del kernel, hay una rßpida referencia mßs arriba.

Cargando los módulos

Si elegimos compilar con los dirver incluidos en el kernel, podremos dedicarnos directamente a la configuración de los dispositivos.

Si optamos por compilar los módulos, deberemos trabajar con ellos un poco hasta poner las cosas en orden.

Como dijimos antes, no pueden convivir el soundmodem y el audio. Al inicio, la mßquina detecta la placa de sonido y carga los módulos destinados al manejo del audio.

Si pedimos una lista de los módulos cargados con lsmod encontraremos, entre otros:

sb
sb_lib
uart401
sound
soundcore

Procederemos a descargarlos y dejar el terreno libre para nuestro soundmodem:

rmmod sb
rmmod sb_lib
rmmod uart401
rmmod sound
rmmod soundcore

Ahora sí estamos en condiciones de cargar los módulos ax25 y soundmodem:

modprobe soundmodem

Una vez cargados los módulos, si pedimos un listado encontraremos los siguientes módulos activos:

parport
soundmodem
hdlcdrv
ax25

Configurando la Placa de Sonido

Una vez que hemos boteado con el nuevo kernel (y cargado los módulos si fuere necesario) deberemos configurar los dispositivos a utilizar. Una vez mas recurriremos a las ax25 utils.

Ahora tendremos que saber algunos datos esenciales de la placa que nos servirßn para su configuración (io address, irq, DMA)

Utilizaremos la utilidad ax25 llamada "setcrystal" para inicializar la placa de sonido. Veamos un ejemplo utilizando soundblaster o compatible con io=0x220, irq 9 y DMA 1:

setcrystal -s 0x220 -i 9 -d 1

En el caso de una placa del tipo WindowsSoundSystem:

setcrystal -w 0x220 -i 9 &-d 1

También puede utilizarse otra opción mßs ( -c dma2) para operación full duplex.

Configurando el Soundmodem

Una vez inicializada la Placa de sonido procederemos a configurar el soundmodem, indicßndole que recursos utilizarß y que tipo de modulación que emularß.

Una vez mas recurriremos a las utilidades ax25.

En este caso la llamada "sethdlc" que nos permitirß configurar múltiples dispositivos:

Tomando el caso de la Sound Blaster del ejemplo anterior, emulando un simple MODEM de 1200 bauds AFSK:

sethdlc -p -i sm0 mode sbc:afsk1200 io 0x220 irq 9 dma 1 serio 0x2f8

Analicemos cada uno de los parßmetros:

-p Muestra o configura el puerto a utilizar

-i sm0 Indica el dispositivo que vamos a crear

mode sbc:afsk1200 Indica el tipo de placa y MODEM

io 0x220 Dirección de entrada y salida de la placa de sonido

irq 9 Interrupción que utilizarß la placa

DMA 1 Canal DMA de la placa de sonido

serio 0x2f8 Dirección de entrada y salida del puerto serie que utilizarß el PTT

Declarando el nuevo dispositivo

Ahora tendremos que declarar datos esenciales de los nuevos puertos que utilizaremos. Este archivo se aloja en:

/etc/ax25/axports

Se puede crear con un procesador de texto común, y su formato es el siguiente:

# /etc/ax25/axports
#
#
# name     callsign         speed    paclen window     description
#
sonido     LW2DTQ-6     1200     256          4         Placa de sonido

El formato de la línea serß: en primer término el nombre del port, en este caso sonido (que se asociarß al dispositivo sm0), luego la licencia, luego la velocidad de comunicación, luego el paclen, el window (similar al maxframe) y una descripción.

Ahora sí inicializamos el dispositivos con nuestros datos:

ifconfig sm0 44.153.32.70 hw ax25 lw2dtq-6

Aquí el SSID de nuestra licencia debe coincidir con el declarado en el archivo /etc/ax25/axports

Calibrando los Niveles de Audio

La calibración de los niveles de audio, es uno de los pasos mßs sensibles, y sobre el cual debemos prestar especial atención.

Por un lado habrß que regular manualmente el Volumen de salida de nuestro equipo de radio, y por otro ajustaremos por software los niveles de entrada y salida de la placa de sonido.

Ambas calibraciones deben hacerse en conjunto y puede ser necesario retocar una y otra alternativamente hasta lograr el equilibrio deseado, ya que la saturación o escasez de audio, harßn fracasar los intentos.

Una vez que, auditivamente, logramos una salida del equipo de radio que consideramos adecuada, ejecutaremos la utilidad AX.25 llamada "smmixer" para ajustar los niveles de entrada y salida de la placa.

Veamos los niveles actuales:

smmixer -i sm0 (o el dispositivo a calibrar)

Indiquemos que ajustaremos el valor de entrada de línea:

smmixer -i sm0 s=line

Tambien se aceptan entradas como s=cd / s=mic

Ahora ajustemos el valor de entrada de línea:

smmixer -i sm0 i=12

Aquí los valores pueden ser: 0/6/16/18 dB dependiendo del caudal de audio que necesitemos. También puede ajustarse de forma individual los canales izquierdo y derecho (Ejemplo: il=12 para left o bien ir=12 para right).

Ahora podremos ajustar los niveles de salida de audio:

smmixer -i sm0 o=12

Cada placa de sonido puede aceptar valores diferentes y necesitan su propia calibración. Prestar atención para determinar que parßmetros se adaptan con cada placa.

Si nuestro linux tiene entorno grßfico podremos ejecutar en una terminal:

smdiag

Y al recibir un paquete se mostrarß grßficamente, pudiendo así adecuar los niveles.

Utilizando Jnos/Tnos

Si ahora nuestra intención en levantar un programa del tipo nos, lo podremos vincular con estos nuevo dispositivos del kernel. Una amplia referencia de este método lo encontramos en el documento destinado a placas SCC:

http://www.qsl.net/lw2dtq/scc.htm

Diego de Nicolßs

LW2DTQ

lw2dtq@qsl.net

24 de octubre de 2002


Read previous mail | Read next mail


 11.05.2024 13:39:47lGo back Go up