⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rme96xx

📁 linux-2.6.15.6
💻
📖 第 1 页 / 共 2 页
字号:
Beta release of the rme96xx (driver for RME 96XX cards like the "Hammerfall" and the "Hammerfall light") Important: The driver module has to be installed on a freshly rebooted system, otherwise the driver might not be able to acquire its buffers.features: - OSS programming interface (i.e. runs with standard OSS soundsoftware)  - OSS/Multichannel interface (OSS multichannel is done by just aquiring   more than 2 channels). The driver does not use more than one device    ( yet .. this feature may be implemented later )  - more than one RME card supportedThe driver uses a specific multichannel interface, which I will documentwhen the driver gets stable. (take a look at the defines in rme96xx.h,which adds blocked multichannel formats i.e instead of lrlrlrlr --> llllrrrr  etc.Use the "rmectrl" programm to look at the status of the card .. or use xrmectrl, a GUI interface for the ctrl program.What you can do with the rmectrl program is to set the stereo device forOSS emulation (e.g. if you use SPDIF out).You do:./ctrl offset 24 24which makes the stereo device use channels 25 and 26.Guenter Geiger <geiger@epy.co.at>copy the first part of the attached source code into rmectrl.cand the  second part into xrmectrl (or get the program fromhttp://gige.xdv.org/pages/soft/pages/rme)to compile: gcc -o rmectrl rmectrl.c------------------------------ snip ------------------------------------#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/ioctl.h>#include <fcntl.h>#include <linux/soundcard.h>#include <math.h>#include <unistd.h>#include <stdlib.h>#include "rme96xx.h"/*  remctrl.c  (C) 2000 Guenter Geiger <geiger@debian.org>  HP20020201 - Heiko Purnhagen <purnhage@tnt.uni-hannover.de>*//* # define DEVICE_NAME "/dev/mixer" */# define DEVICE_NAME "/dev/mixer1"void usage(void){     fprintf(stderr,"usage: rmectrl [/dev/mixer<n>] [command [options]]\n\n");     fprintf(stderr,"where command is one of:\n");     fprintf(stderr,"  help                       show this help\n");     fprintf(stderr,"  status                     show status bits\n");     fprintf(stderr,"  control                    show control bits\n");     fprintf(stderr,"  mix                        show mixer/offset status\n");     fprintf(stderr,"  master <n>                 set sync master\n");     fprintf(stderr,"  pro <n>                    set spdif out pro\n");     fprintf(stderr,"  emphasis <n>               set spdif out emphasis\n");     fprintf(stderr,"  dolby <n>                  set spdif out no audio\n");     fprintf(stderr,"  optout <n>                 set spdif out optical\n");     fprintf(stderr,"  wordclock <n>              set sync wordclock\n");     fprintf(stderr,"  spdifin <n>                set spdif in (0=optical,1=coax,2=intern)\n");     fprintf(stderr,"  syncref <n>                set sync source (0=ADAT1,1=ADAT2,2=ADAT3,3=SPDIF)\n");     fprintf(stderr,"  adat1cd <n>                set ADAT1 on internal CD\n");     fprintf(stderr,"  offset <devnr> <in> <out>  set dev (0..3) offset (0..25)\n");     exit(-1);}int main(int argc, char* argv[]){     int cards;     int ret;     int i;     double ft;     int fd, fdwr;     int param,orig;     rme_status_t stat;     rme_ctrl_t ctrl;     char *device;     int argidx;     if (argc < 2)	  usage();     if (*argv[1]=='/') {	  device = argv[1];	  argidx = 2;     }     else {	  device = DEVICE_NAME;	  argidx = 1;     }     fprintf(stdout,"mixer device %s\n",device);     if ((fd = open(device,O_RDONLY)) < 0) {	  fprintf(stdout,"opening device failed\n");	  exit(-1);     }     if ((fdwr = open(device,O_WRONLY)) < 0) {	  fprintf(stdout,"opening device failed\n");	  exit(-1);     }     if (argc < argidx+1)	  usage();     if (!strcmp(argv[argidx],"help"))        usage();     if (!strcmp(argv[argidx],"-h"))        usage();     if (!strcmp(argv[argidx],"--help"))        usage();     if (!strcmp(argv[argidx],"status")) {	  ioctl(fd,SOUND_MIXER_PRIVATE2,&stat);	  fprintf(stdout,"stat.irq %d\n",stat.irq);	  fprintf(stdout,"stat.lockmask %d\n",stat.lockmask);	  fprintf(stdout,"stat.sr48 %d\n",stat.sr48);	  fprintf(stdout,"stat.wclock %d\n",stat.wclock);	  fprintf(stdout,"stat.bufpoint %d\n",stat.bufpoint);	  fprintf(stdout,"stat.syncmask %d\n",stat.syncmask);	  fprintf(stdout,"stat.doublespeed %d\n",stat.doublespeed);	  fprintf(stdout,"stat.tc_busy %d\n",stat.tc_busy);	  fprintf(stdout,"stat.tc_out %d\n",stat.tc_out);	  fprintf(stdout,"stat.crystalrate %d (0=64k 3=96k 4=88.2k 5=48k 6=44.1k 7=32k)\n",stat.crystalrate);	  fprintf(stdout,"stat.spdif_error %d\n",stat.spdif_error);	  fprintf(stdout,"stat.bufid %d\n",stat.bufid);	  fprintf(stdout,"stat.tc_valid %d\n",stat.tc_valid);	  exit (0);     }     if (!strcmp(argv[argidx],"control")) {	  ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);	  fprintf(stdout,"ctrl.start %d\n",ctrl.start);	  fprintf(stdout,"ctrl.latency %d (0=64 .. 7=8192)\n",ctrl.latency);	  fprintf(stdout,"ctrl.master %d\n",ctrl.master);	  fprintf(stdout,"ctrl.ie %d\n",ctrl.ie);	  fprintf(stdout,"ctrl.sr48 %d\n",ctrl.sr48);	  fprintf(stdout,"ctrl.spare %d\n",ctrl.spare);	  fprintf(stdout,"ctrl.doublespeed %d\n",ctrl.doublespeed);	  fprintf(stdout,"ctrl.pro %d\n",ctrl.pro);	  fprintf(stdout,"ctrl.emphasis %d\n",ctrl.emphasis);	  fprintf(stdout,"ctrl.dolby %d\n",ctrl.dolby);	  fprintf(stdout,"ctrl.opt_out %d\n",ctrl.opt_out);	  fprintf(stdout,"ctrl.wordclock %d\n",ctrl.wordclock);	  fprintf(stdout,"ctrl.spdif_in %d (0=optical,1=coax,2=intern)\n",ctrl.spdif_in);	  fprintf(stdout,"ctrl.sync_ref %d (0=ADAT1,1=ADAT2,2=ADAT3,3=SPDIF)\n",ctrl.sync_ref);	  fprintf(stdout,"ctrl.spdif_reset %d\n",ctrl.spdif_reset);	  fprintf(stdout,"ctrl.spdif_select %d\n",ctrl.spdif_select);	  fprintf(stdout,"ctrl.spdif_clock %d\n",ctrl.spdif_clock);	  fprintf(stdout,"ctrl.spdif_write %d\n",ctrl.spdif_write);	  fprintf(stdout,"ctrl.adat1_cd %d\n",ctrl.adat1_cd);	  exit (0);     }     if (!strcmp(argv[argidx],"mix")) {	  rme_mixer mix;	  int i;	  for (i=0; i<4; i++) {	       mix.devnr = i;	       ioctl(fd,SOUND_MIXER_PRIVATE1,&mix);	       if (mix.devnr == i) {		    fprintf(stdout,"devnr %d\n",mix.devnr);		    fprintf(stdout,"mix.i_offset %2d (0-25)\n",mix.i_offset);		    fprintf(stdout,"mix.o_offset %2d (0-25)\n",mix.o_offset);	       }	  }	  exit (0);     }/* the control flags */     if (argc < argidx+2)	  usage();     if (!strcmp(argv[argidx],"master")) {	  int val = atoi(argv[argidx+1]);	  ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);	  printf("master = %d\n",val);	  ctrl.master = val;	  ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);	  exit (0);     }     if (!strcmp(argv[argidx],"pro")) {	  int val = atoi(argv[argidx+1]);	  ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);	  printf("pro = %d\n",val);	  ctrl.pro = val;	  ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);	  exit (0);     }     if (!strcmp(argv[argidx],"emphasis")) {	  int val = atoi(argv[argidx+1]);	  ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);	  printf("emphasis = %d\n",val);	  ctrl.emphasis = val;	  ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);	  exit (0);     }     if (!strcmp(argv[argidx],"dolby")) {	  int val = atoi(argv[argidx+1]);	  ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);	  printf("dolby = %d\n",val);	  ctrl.dolby = val;	  ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);	  exit (0);     }     if (!strcmp(argv[argidx],"optout")) {	  int val = atoi(argv[argidx+1]);	  ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);	  printf("optout = %d\n",val);	  ctrl.opt_out = val;	  ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);	  exit (0);     }     if (!strcmp(argv[argidx],"wordclock")) {	  int val = atoi(argv[argidx+1]);	  ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);	  printf("wordclock = %d\n",val);	  ctrl.wordclock = val;	  ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);	  exit (0);     }     if (!strcmp(argv[argidx],"spdifin")) {	  int val = atoi(argv[argidx+1]);	  ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);	  printf("spdifin = %d\n",val);	  ctrl.spdif_in = val;	  ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);	  exit (0);     }     if (!strcmp(argv[argidx],"syncref")) {	  int val = atoi(argv[argidx+1]);	  ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);	  printf("syncref = %d\n",val);	  ctrl.sync_ref = val;	  ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);	  exit (0);     }     if (!strcmp(argv[argidx],"adat1cd")) {	  int val = atoi(argv[argidx+1]);	  ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);	  printf("adat1cd = %d\n",val);	  ctrl.adat1_cd = val;	  ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);	  exit (0);     }/* setting offset */     if (argc < argidx+4)	  usage();     if (!strcmp(argv[argidx],"offset")) {	  rme_mixer mix;	  mix.devnr = atoi(argv[argidx+1]);	  mix.i_offset = atoi(argv[argidx+2]);	  mix.o_offset = atoi(argv[argidx+3]);	  ioctl(fdwr,SOUND_MIXER_PRIVATE1,&mix);	  fprintf(stdout,"devnr %d\n",mix.devnr);	  fprintf(stdout,"mix.i_offset to %d\n",mix.i_offset);	  fprintf(stdout,"mix.o_offset to %d\n",mix.o_offset);	  exit (0);     }     usage();     exit (0); /* to avoid warning */}---------------------------- <snip> --------------------------------#!/usr/bin/wish# xrmectrl# (C) 2000 Guenter Geiger <geiger@debian.org># HP20020201 - Heiko Purnhagen <purnhage@tnt.uni-hannover.de>#set defaults "-relief ridged"set CTRLPROG "./rmectrl"if {$argc} {    set CTRLPROG "$CTRLPROG $argv"}puts "CTRLPROG $CTRLPROG"frame .buttsbutton .butts.exit -text "Exit" -command "exit" -relief ridge#button .butts.state -text "State" -command "get_all"pack .butts.exit -side leftpack .butts -side bottom## STATUS#frame .status# Sampling Rateframe .status.srlabel .status.sr.text -text "Sampling Rate" -justify leftradiobutton .status.sr.441 -selectcolor red -text "44.1 kHz" -width 10 -anchor nw -variable srate -value 44100 -font timesradiobutton .status.sr.480 -selectcolor red -text "48 kHz" -width 10 -anchor nw -variable srate -value 48000 -font timesradiobutton .status.sr.882 -selectcolor red -text "88.2 kHz" -width 10 -anchor nw -variable srate -value 88200 -font timesradiobutton .status.sr.960 -selectcolor red -text "96 kHz" -width 10 -anchor nw  -variable srate -value 96000 -font timespack .status.sr.text .status.sr.441 .status.sr.480 .status.sr.882 .status.sr.960 -side top -padx 3# Lockframe .status.locklabel .status.lock.text -text "Lock" -justify leftcheckbutton .status.lock.adat1 -selectcolor red -text "ADAT1" -anchor nw -width 10 -variable adatlock1 -font timescheckbutton .status.lock.adat2 -selectcolor red -text "ADAT2" -anchor nw -width 10 -variable adatlock2 -font timescheckbutton .status.lock.adat3 -selectcolor red -text "ADAT3" -anchor nw -width 10 -variable adatlock3 -font timespack .status.lock.text .status.lock.adat1 .status.lock.adat2 .status.lock.adat3 -side top -padx 3 # Syncframe .status.synclabel .status.sync.text -text "Sync" -justify leftcheckbutton .status.sync.adat1 -selectcolor red -text "ADAT1" -anchor nw -width 10 -variable adatsync1 -font timescheckbutton .status.sync.adat2 -selectcolor red -text "ADAT2" -anchor nw -width 10 -variable adatsync2 -font timescheckbutton .status.sync.adat3 -selectcolor red -text "ADAT3" -anchor nw -width 10 -variable adatsync3 -font timespack .status.sync.text .status.sync.adat1 .status.sync.adat2 .status.sync.adat3 -side top -padx 3 # Timecodeframe .status.tclabel .status.tc.text -text "Timecode" -justify leftcheckbutton .status.tc.busy -selectcolor red -text "busy" -anchor nw -width 10 -variable tcbusy -font timescheckbutton .status.tc.out -selectcolor red -text "out" -anchor nw -width 10 -variable tcout -font timescheckbutton .status.tc.valid -selectcolor red -text "valid" -anchor nw -width 10 -variable tcvalid -font timespack .status.tc.text .status.tc.busy .status.tc.out .status.tc.valid -side top -padx 3 # SPDIF Inframe .status.spdiflabel .status.spdif.text -text "SPDIF In" -justify leftlabel .status.spdif.sr -text "--.- kHz" -anchor n -width 10 -font timescheckbutton .status.spdif.error -selectcolor red -text "Input Lock" -anchor nw -width 10 -variable spdiferr -font timespack .status.spdif.text .status.spdif.sr .status.spdif.error -side top -padx 3 pack .status.sr .status.lock .status.sync .status.tc .status.spdif -side left -fill x -anchor n -expand 1## CONTROL #proc setprof {} {    global CTRLPROG

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -