📄 multisound
字号:
# This shar contains:# length mode name# ------ ---------- ------------------------------------------# 2046 -rw-rw-r-- MultiSound.d/setdigital.c# 10235 -rw-rw-r-- MultiSound.d/pinnaclecfg.c# 106 -rw-rw-r-- MultiSound.d/Makefile# 141 -rw-rw-r-- MultiSound.d/conv.l# 1472 -rw-rw-r-- MultiSound.d/msndreset.c#save_IFS="${IFS}"IFS="${IFS}:"gettext_dir=FAILEDlocale_dir=FAILEDfirst_param="$1"for dir in $PATHdo if test "$gettext_dir" = FAILED && test -f $dir/gettext \ && ($dir/gettext --version >/dev/null 2>&1) then set `$dir/gettext --version 2>&1` if test "$3" = GNU then gettext_dir=$dir fi fi if test "$locale_dir" = FAILED && test -f $dir/shar \ && ($dir/shar --print-text-domain-dir >/dev/null 2>&1) then locale_dir=`$dir/shar --print-text-domain-dir` fidoneIFS="$save_IFS"if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILEDthen echo=echoelse TEXTDOMAINDIR=$locale_dir export TEXTDOMAINDIR TEXTDOMAIN=sharutils export TEXTDOMAIN echo="$gettext_dir/gettext -s"fitouch -am 1231235999 $$.touch >/dev/null 2>&1if test ! -f 1231235999 && test -f $$.touch; then shar_touch=touchelse shar_touch=: echo $echo 'WARNING: not restoring timestamps. Consider getting and' $echo "installing GNU \`touch', distributed in GNU File Utilities..." echofirm -f 1231235999 $$.touch#if mkdir _sh01426; then $echo 'x -' 'creating lock directory'else $echo 'failed to create lock directory' exit 1fi# ============= MultiSound.d/setdigital.c ==============if test ! -d 'MultiSound.d'; then $echo 'x -' 'creating directory' 'MultiSound.d' mkdir 'MultiSound.d'fiif test -f 'MultiSound.d/setdigital.c' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'MultiSound.d/setdigital.c' '(file already exists)'else $echo 'x -' extracting 'MultiSound.d/setdigital.c' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'MultiSound.d/setdigital.c' &&/*********************************************************************X *X * setdigital.c - sets the DIGITAL1 input for a mixerX *X * Copyright (C) 1998 Andrew VeliathX *X * This program is free software; you can redistribute it and/or modifyX * it under the terms of the GNU General Public License as published byX * the Free Software Foundation; either version 2 of the License, orX * (at your option) any later version.X *X * This program is distributed in the hope that it will be useful,X * but WITHOUT ANY WARRANTY; without even the implied warranty ofX * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theX * GNU General Public License for more details.X *X * You should have received a copy of the GNU General Public LicenseX * along with this program; if not, write to the Free SoftwareX * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.X *X ********************************************************************/X#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/ioctl.h>#include <sys/soundcard.h>Xint main(int argc, char *argv[]){X int fd;X unsigned long recmask, recsrc;XX if (argc != 2) {X fprintf(stderr, "usage: setdigital <mixer device>\n");X exit(1);X }XX if ((fd = open(argv[1], O_RDWR)) < 0) {X perror(argv[1]);X exit(1);X }XX if (ioctl(fd, SOUND_MIXER_READ_RECMASK, &recmask) < 0) {X fprintf(stderr, "error: ioctl read recording mask failed\n");X perror("ioctl");X close(fd);X exit(1);X }XX if (!(recmask & SOUND_MASK_DIGITAL1)) {X fprintf(stderr, "error: cannot find DIGITAL1 device in mixer\n");X close(fd);X exit(1);X }XX if (ioctl(fd, SOUND_MIXER_READ_RECSRC, &recsrc) < 0) {X fprintf(stderr, "error: ioctl read recording source failed\n");X perror("ioctl");X close(fd);X exit(1);X }XX recsrc |= SOUND_MASK_DIGITAL1;X X if (ioctl(fd, SOUND_MIXER_WRITE_RECSRC, &recsrc) < 0) {X fprintf(stderr, "error: ioctl write recording source failed\n");X perror("ioctl");X close(fd);X exit(1);X }XX close(fd);X X return 0;}SHAR_EOF $shar_touch -am 1204092598 'MultiSound.d/setdigital.c' && chmod 0664 'MultiSound.d/setdigital.c' || $echo 'restore of' 'MultiSound.d/setdigital.c' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'MultiSound.d/setdigital.c:' 'MD5 check failed'e87217fc3e71288102ba41fd81f71ec4 MultiSound.d/setdigital.cSHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'MultiSound.d/setdigital.c'`" test 2046 -eq "$shar_count" || $echo 'MultiSound.d/setdigital.c:' 'original size' '2046,' 'current size' "$shar_count!" fifi# ============= MultiSound.d/pinnaclecfg.c ==============if test -f 'MultiSound.d/pinnaclecfg.c' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'MultiSound.d/pinnaclecfg.c' '(file already exists)'else $echo 'x -' extracting 'MultiSound.d/pinnaclecfg.c' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'MultiSound.d/pinnaclecfg.c' &&/*********************************************************************X *X * pinnaclecfg.c - Pinnacle/Fiji Device Configuration ProgramX *X * This is for NON-PnP mode only. For PnP mode, use isapnptools.X *X * This is Linux-specific, and must be run with root permissions.X *X * Part of the Turtle Beach MultiSound Sound Card Driver for LinuxX *X * Copyright (C) 1998 Andrew VeliathX *X * This program is free software; you can redistribute it and/or modifyX * it under the terms of the GNU General Public License as published byX * the Free Software Foundation; either version 2 of the License, orX * (at your option) any later version.X *X * This program is distributed in the hope that it will be useful,X * but WITHOUT ANY WARRANTY; without even the implied warranty ofX * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theX * GNU General Public License for more details.X *X * You should have received a copy of the GNU General Public LicenseX * along with this program; if not, write to the Free SoftwareX * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.X *X ********************************************************************/X#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <unistd.h>#include <asm/io.h>#include <asm/types.h>X#define IREG_LOGDEVICE 0x07#define IREG_ACTIVATE 0x30#define LD_ACTIVATE 0x01#define LD_DISACTIVATE 0x00#define IREG_EECONTROL 0x3F#define IREG_MEMBASEHI 0x40#define IREG_MEMBASELO 0x41#define IREG_MEMCONTROL 0x42#define IREG_MEMRANGEHI 0x43#define IREG_MEMRANGELO 0x44#define MEMTYPE_8BIT 0x00#define MEMTYPE_16BIT 0x02#define MEMTYPE_RANGE 0x00#define MEMTYPE_HIADDR 0x01#define IREG_IO0_BASEHI 0x60#define IREG_IO0_BASELO 0x61#define IREG_IO1_BASEHI 0x62#define IREG_IO1_BASELO 0x63#define IREG_IRQ_NUMBER 0x70#define IREG_IRQ_TYPE 0x71#define IRQTYPE_HIGH 0x02#define IRQTYPE_LOW 0x00#define IRQTYPE_LEVEL 0x01#define IRQTYPE_EDGE 0x00X#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))#define LOBYTE(w) ((BYTE)(w))#define MAKEWORD(low,hi) ((WORD)(((BYTE)(low))|(((WORD)((BYTE)(hi)))<<8)))Xtypedef __u8 BYTE;typedef __u16 USHORT;typedef __u16 WORD;Xstatic int config_port = -1;Xstatic int msnd_write_cfg(int cfg, int reg, int value){X outb(reg, cfg);X outb(value, cfg + 1);X if (value != inb(cfg + 1)) {X fprintf(stderr, "error: msnd_write_cfg: I/O error\n");X return -EIO;X }X return 0;}Xstatic int msnd_read_cfg(int cfg, int reg){X outb(reg, cfg);X return inb(cfg + 1);}Xstatic int msnd_write_cfg_io0(int cfg, int num, WORD io){X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))X return -EIO;X if (msnd_write_cfg(cfg, IREG_IO0_BASEHI, HIBYTE(io)))X return -EIO;X if (msnd_write_cfg(cfg, IREG_IO0_BASELO, LOBYTE(io)))X return -EIO;X return 0;}Xstatic int msnd_read_cfg_io0(int cfg, int num, WORD *io){X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))X return -EIO;X X *io = MAKEWORD(msnd_read_cfg(cfg, IREG_IO0_BASELO),X msnd_read_cfg(cfg, IREG_IO0_BASEHI));XX return 0;}Xstatic int msnd_write_cfg_io1(int cfg, int num, WORD io){X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))X return -EIO;X if (msnd_write_cfg(cfg, IREG_IO1_BASEHI, HIBYTE(io)))X return -EIO;X if (msnd_write_cfg(cfg, IREG_IO1_BASELO, LOBYTE(io)))X return -EIO;X return 0;}Xstatic int msnd_read_cfg_io1(int cfg, int num, WORD *io){X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))X return -EIO;X X *io = MAKEWORD(msnd_read_cfg(cfg, IREG_IO1_BASELO),X msnd_read_cfg(cfg, IREG_IO1_BASEHI));XX return 0;}Xstatic int msnd_write_cfg_irq(int cfg, int num, WORD irq){X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))X return -EIO;X if (msnd_write_cfg(cfg, IREG_IRQ_NUMBER, LOBYTE(irq)))X return -EIO;X if (msnd_write_cfg(cfg, IREG_IRQ_TYPE, IRQTYPE_EDGE))X return -EIO;X return 0;}Xstatic int msnd_read_cfg_irq(int cfg, int num, WORD *irq){X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))X return -EIO;X X *irq = msnd_read_cfg(cfg, IREG_IRQ_NUMBER);XX return 0;}Xstatic int msnd_write_cfg_mem(int cfg, int num, int mem){X WORD wmem;XX mem >>= 8;X mem &= 0xfff;X wmem = (WORD)mem;X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))X return -EIO;X if (msnd_write_cfg(cfg, IREG_MEMBASEHI, HIBYTE(wmem)))X return -EIO;X if (msnd_write_cfg(cfg, IREG_MEMBASELO, LOBYTE(wmem)))X return -EIO;X if (wmem && msnd_write_cfg(cfg, IREG_MEMCONTROL, (MEMTYPE_HIADDR | MEMTYPE_16BIT)))X return -EIO;X return 0;}Xstatic int msnd_read_cfg_mem(int cfg, int num, int *mem){X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))X return -EIO;X X *mem = MAKEWORD(msnd_read_cfg(cfg, IREG_MEMBASELO),X msnd_read_cfg(cfg, IREG_MEMBASEHI));X *mem <<= 8;XX return 0;}Xstatic int msnd_activate_logical(int cfg, int num){X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))X return -EIO;X if (msnd_write_cfg(cfg, IREG_ACTIVATE, LD_ACTIVATE))X return -EIO;X return 0;}Xstatic int msnd_write_cfg_logical(int cfg, int num, WORD io0, WORD io1, WORD irq, int mem){X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))X return -EIO;X if (msnd_write_cfg_io0(cfg, num, io0))X return -EIO;X if (msnd_write_cfg_io1(cfg, num, io1))X return -EIO;X if (msnd_write_cfg_irq(cfg, num, irq))X return -EIO;X if (msnd_write_cfg_mem(cfg, num, mem))X return -EIO;X if (msnd_activate_logical(cfg, num))X return -EIO;X return 0;}Xstatic int msnd_read_cfg_logical(int cfg, int num, WORD *io0, WORD *io1, WORD *irq, int *mem)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -