Un controlador OSS/Free para tarjetas WaveFront (Turtle Beach Maui, Tropez, Tropez Plus) Paul Barton-Davis, Julio 1998 VERSIÓN 0.2.5 Estado del Controlador ---------------------- Requiere: Kernel 2.1.106 o posterior (el controlador está incluido en núcleos 2.1.109 y superiores) A día de hoy 7/22/1998, este controlador está en estado *BETA*. Esto significa que compila y ejecuta, y que lo uso en mi sistema (Linux 2.1.106) con algunas aplicaciones que demandan bastante potencia y diferentes usos. Creo que el código se está aproximando a un estado inicial "finalizado" que provee soporte para la Tropez Plus libre de fallos. Por favor note que hasta la fecha, el controlador sólo se ha probado en una tarjeta Tropez Plus. Me gustaría oír (y ayudar) a personas con una tarjeta Tropez y Maui, ya que creo que este controlador soporta también esas tarjetas. Finalmente, el controlador no ha sido probado (ni siquiera compilado) como una parte estática (no-modular) del núcleo. El buen trabajo de Alan Cox modularizando OSS/Free para Linux hace esto innecesario. Alguna preguntas ---------------- ********************************************************************** 0) ¿Qué hace este controlador que no hiciera el controlador maui? ********************************************************************** * Puede inicializar la tarjeta WaveFront de un arranque en frío - NO necesita utilidades DOS * Carga y descarga de parches/muestras/programas (el controlador maui no documentaba como hacer funcionar esto, y asumía una preparación de los parches a nivel de usuario para escribir en la tarjeta. ick.) * Acceso total a nivel de usuario a los comandos de WaveFront * Para la Tropez Plus, control (primitivo) del procesador YSS225 FX * Soporta el modo MIDI Virtual - 2 dispositivos MIDI accesibles a través de la emulación MPU401/UART de WaveFront. Uno accede al sintetizador WaveFront, el otro accede al conector MIDI externo. Soporte total de lectura/escritura MIDI para los dos dispositivos. * Interfaz /dev/sequencer compatible-OSS para el sintetizador WaveFront, incluyendo la descarga de parches en formato GUS. * Gestión de parches semi-inteligente (Por ahora es un prototipo) ********************************************************************** 1) ¿Qué hacer con los interfaces MIDI ? ********************************************************************** La Tropez Plus (y quizás otras tarjetas WF) puede en teoría soportar hasta 2 interfaces MIDI físicos. Una de estos se conecta al chip ICS2115 (el sintetizador WaveFront) y es controlado por el código de emulación MPU/UART-401 ejecutándose como parte del SO WaveFront. El otro es controlado por el chip CS4232 presente en la placa. De todas formas, el acceso físico al conector del CS4232 es difícil, y es probable que no quiera usarlo. Una versión anterior del controlador introdujo una variable de configuración del núcleo para controlar si el interfaz MIDI del CS4232 MIDI estaba configurado. Debido al trabajo de Alan Cox modularizando los controladores de sonido, y ahora la conversión a los núcleos 2.0.34, parece que hay poca razones para soportar variables de configuración "estáticas". Por esto, se han abandonado en favor de *solo* parámetros de módulos. Si especifica los parámetros "mpuio" y "mpuirq" para el cs4232 configurará la interfaz MIDI; Si no los especifica los dejará sin configurar (y por lo tanto inusable). De todas formas, he oido de un usuario de Tropez+ que la interfaz CS4232 es más fiable que la del ICS2115. Yo no he tenido problemas con esta última, y no tengo el cable apropiado para comprobar la primera afirmación. Se aceptan comentarios. ********************************************************************** 2) ¿Por qué la línea XXX del código se parece a esto .... ? ********************************************************************** Porque todavía no está acabada, o porque usted es mejor programador que yo, o porque no entiende algunos aspectos sobre como trabaja el código o la tarjeta. Agradezco absolutamente cualquier comentario, crítica y sugerencias acerca del diseño e implementación del controlador. ********************************************************************** 3) ¿Qué ficheros están incluidos ? ********************************************************************** drivers/sound/README.wavefront -- este fichero drivers/sound/wavefront.patch -- parches para el controlador del 2.1.106 necesarios para hacer que funcione el resto NO LO USE SI HA APLICADO UN PARCHE ANTERIORMENTE, O TIENE UN NÚCLEO 2.1.109 O SUPERIOR drivers/sound/wavfront.c -- el controlador drivers/sound/ys225.h -- declaraciones de datos para la configuración de FX drivers/sound/ys225.c -- definiciones de datos para la configuración de FX drivers/sound/wf_midi.c -- el controlador "uart401" para soportar el modo virtual MIDI. include/wavefront.h -- El fichero de cabecera Documentation/sound/Tropez+ -- Documentación corta sobre la configuración ********************************************************************** 4) ¿Cómo lo compilo/intalo/uso? ********************************************************************** PARTE UNO: instale el código fuente en el directorio del controlador de sonido cd tar -zxvf PARTE DOS: aplique los parches HAGA ESTO SOLO SI TIENE UNA VERSIÓN DE NÚCLEO INFERIOR A LA 2.1.109 Y NO HA INSTALADO ANTERIORMENTE LOS PARCHES. cd drivers/sound patch < wavefront.patch PARTE TRES: configure el núcleo cd make xconfig (o la configuración que use) - elija SI a "Sound Support" - elija MÓDULO (M) para "OSS Sound Modules" - elija MÓDULO (M) para "YM3812/OPL3 support" - elija MÓDULE (M) para "WaveFront support" - elija MÓDULE (M) para "CS4232 support" - elija "N" a todo lo demás (a menos que tenga otras tarjetas que deba soportar) make dep make boot . . . make modules . . . make modules_install Aquí está mi sección de SONIDO de autoconf.h: /* * Sound */ #define CONFIG_SOUND 1 #undef CONFIG_SOUND_OSS #define CONFIG_SOUND_OSS_MODULE 1 #undef CONFIG_SOUND_PAS #undef CONFIG_SOUND_SB #undef CONFIG_SOUND_ADLIB #undef CONFIG_SOUND_GUS #undef CONFIG_SOUND_MPU401 #undef CONFIG_SOUND_PSS #undef CONFIG_SOUND_MSS #undef CONFIG_SOUND_SSCAPE #undef CONFIG_SOUND_TRIX #undef CONFIG_SOUND_MAD16 #undef CONFIG_SOUND_WAVEFRONT #define CONFIG_SOUND_WAVEFRONT_MODULE 1 #undef CONFIG_SOUND_CS4232 #define CONFIG_SOUND_CS4232_MODULE 1 #undef CONFIG_SOUND_MAUI #undef CONFIG_SOUND_SGALAXY #undef CONFIG_SOUND_OPL3SA1 #undef CONFIG_SOUND_SOFTOSS #undef CONFIG_SOUND_YM3812 #define CONFIG_SOUND_YM3812_MODULE 1 #undef CONFIG_SOUND_VMIDI #undef CONFIG_SOUND_UART6850 /* * Additional low level sound drivers */ #undef CONFIG_LOWLEVEL_SOUND ************************************************************ 6) ¿ Cómo configuro mi tarjeta de sonido ? ************************************************************ Necesita editar /etc/conf.modules. Aquí está el mio (editado para mostrar solo los detalles importantes): # Sistema de sonido alias char-major-14 wavefront alias synth0 wavefront alias mixer0 cs4232 alias audio0 cs4232 pre-install wavefront modprobe "-k" "cs4232" post-install wavefront modprobe "-k" "opl3" options wavefront io=0x200 irq=9 options cs4232 synthirq=9 synthio=0x200 io=0x530 irq=5 dma=1 dma2=0 options opl3 io=0x388 Cosas que anotar: las opciones de wavefront "io" y "irq" ***DEBEN*** concordar con las opciones "synthio" y "synthirq" del cs4232. lo puede hacer sin el módulo opl3 si no quiere usar el sintetizador FM OPL/[34] de la tarjeta el parámetro opl3 io normalmente no es ajustable. En teoría, cualquier dirección E/S que no esté en uso debería valer pero mejor use 0x388 y siga como la mayoría. ********************************************************************** 7) ¿ Que hay acerca del firmware ? ********************************************************************** Turtle Beach no ha dado permiso para distribuir su firmware para el ICS2115. Sin embargo, si tiene una tarjeta WaveFront, seguramente tenga el firmware, y si no, está disponible gratuitamente en su página web, en: http://www.tbeach.com/tbs/downloads/scardsdown.htm#tropezplus El fichero se llama WFOS2001.MOT (para la Tropez+). Este controlador, sin embargo, no usa el firmware puro como ha sido distribuido sino que confía en una forma procesada de él. Puede generarlo muy fácilmente. Siguiendo una idea del controlador para Pinnacle de Andrew Veliath's, el siguiente programa en flex generará la versión procesada: ---- corte aquí ------------------------- %option main %% ^S[28].*\r$ printf ("%c%.*s", yyleng-1,yyleng-1,yytext); <> { fputc ('\0', stdout); return; } \n {} . {} ---- corte aquí ------------------------- Para usarlo, ponga la parte de arriba en en un fichero (por ejemplo, ws.l) compílelo de esta forma: shell> flex -ows.c ws.l shell> cc -o ws ws.c y despues uselo así: ws < mi-copia-del-fichero-oswf.mot > /etc/sound/wavefront.os Si lo pone en algún otro sitio, deberá usar el parámetro del módulo wf_ospath (vea abajo) o alterar el código fuente. ********************************************************************** 7) ¿ Cómo consigo que funcione ? ********************************************************************** Opcionalmente, puede reiniciar con un núcleo nuevo (aunque los únicos cambios que haya realizado hayan sido hechos a un módulo). Luego, como root haga: modprobe wavefront Debería obtener algo como esto en /var/log/messages: WaveFront: firmware 1.20 already loaded. o WaveFront: no response to firmware probe, assume raw. despues: WaveFront: waiting for memory configuration ... WaveFront: hardware version 1.64 WaveFront: available DRAM 8191k WaveFront: 332 samples used (266 real, 13 aliases, 53 multi), 180 empty WaveFront: 128 programs slots in use WaveFront: 256 patch slots filled, 142 in use El proceso completo tarda aproximadamente 16 segundos, la mayor espera se hace despues de informar de la versión del hardware (durante la carga del firmware), y después de informar del estado del programa (durante la pregunta del estado de los parches). Es más corta (como unos 10 segundos) si el firmware está ya cargado (p.e. solo arranques en caliente desde la última carga del firmware). La línea "available DRAM" variará dependiendo de cuanta RAM tenga su tarjeta. La mía tiene 8MB. Lo siguiente, comprobar /dev/sndstat, que en mi máquina dice: ------------------------------------------------------------ OSS/Free:3.8s2++-971130 Tipo de carga: Controlador cargado como módulo Núcleo: Linux bd 2.1.106 #12 SMP Fri Jul 3 00:37:34 EDT 1998 i486 Config options: 0 Controladores instalados: configuración de la tarjeta: Dispositivos de sonido: 0: Crystal audio controller (CS4232) (DUPLEX) Dispositivos de sintetización: 0: Turtle Beach WaveFront 1: Yamaha OPL-3 Dispositivos Midi: 0: WaveFront Internal MIDI 1: WaveFront External MIDI Temporizadores: 0: System clock 1: Crystal audio controller (CS4232) Mezcladores: 0: Crystal audio controller (CS4232) ----------------------------------------------------------- Para comprobar la funcionalidad básica, use play(1) o splay(1) para mandar un fichero .WAV o otro fichero de sonido a través del controlador. Después use playmidi para reproducir un fichero general MIDI. Pruebe la opción "-D 0" para oir la diferencia entre mandar MIDI a la WaveFront o usar el OPL/3, que es la opción por defecto (creo ...). Si tiene sintetizadores externos conectados a la tarjeta, puede usar la opción "-e" para enrutar hacia los sintetizadores externos (en teoría, -D 1 debería funcionar también, pero creo que hay un fallo en playmidi que no permite hacer lo que debe). ********************************************************************** 8) ¿Cuales son los parámetros de los módulos ? ********************************************************************** Para saber esto lo mejor es leer wavefront.c, pero aquí tiene un resumen: enteros: wf_raw - si es activado, se ignora la aparente presencia del firmware cargado en el ICS2115, se inicializa la tarjeta entera desde cero. (por defecto = 0) fx_raw - si es activado, siempre inicializa el procesador YSS225 en la Tropez plus. (por defecto = 1) < Las siguientes 4 son básicamente para permitir a los desarrolladores del núcleo trucar el controlador para probarlo. > wait_usecs - Temporizador usado cuando se esperan condiciones de estado en la tarjeta. Por defecto es 150. debug_default - banderas de depuración. Vea sound/wavefront.h para consultar los valores WF_DEBUG_*. Por defecto es cero. Activando esto permite depurar el controlador durante la instalación del módulo. cadenas: ospath - ruta de acceso para al firmware pre-procesado del SO. (por defecto: /etc/sound/wavefront.os) ********************************************************************** 9) ¿Con quién tengo que contactar si tengo problemas? ********************************************************************** Sólo conmigo: Paul Barton-Davis "Traducido para el proyecto NuLies por Gorka Olaizola Sánchez "