Zvukova a radiova karta

Petr Machacek xmachac na aisa.fi.muni.cz
Středa Květen 6 23:09:45 CEST 1998


LUDVIK na cihla.fsv.cvut.cz (Mirek Ludvik k175 t.4942) writes:

>Chci si koupit zvukovou a radiovou kartu. Jeden clovek mi nabizi 
>original soundblaster 16 se zabudovanou radio karou. Nevite nekdo o 
>co jde ???? Rozchodim to v linuxu ????
Mohla by to byt Vibra - na nejakou ISA verzi pry fungovaly (po prepsani
cisla portu ve zdrojaku) bezne dostupne programy na radio karty,
meli jsme tu PnP, standardni veci nechodily :(

Pred casem jsem v DejaNews objevil program nejakeho Madara, lide
s tou PnP Vibrou rikali, ze jim to funguje.

Zvukovka na tom byla zcela bez problemu, nevylucuje ale, ze by to
v nejake konfiguraci mohlo potrebovat nakonfigurovane pnputils (snadne).
--------------------------------------------------------------------------
/*
Tilla's Radio tuner prg V0.1 : http://ftp.bme.hu/~vegtilla/linux/radio.c
HP: http://ftp.bme.hu/~vegtilla
mail: vegtilla na eik.bme.hu

compile: gcc radio.c -O2 -o radio
root privilege needed to execute (else segfault...)
HW: SB16 (PnP Vibra) + FM radio. = SB16-FMI
SW: no special library required
*/

#include <stdio.h>
#include <asm/io.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

const addr=0x384;               // vagy 0x284

void tune ( double freq );
void cardoff (void);
void cardon (void);

void main(int argc, char *argv[]) {
  if (argc<2)
     {printf("Usage: radio off\n       radio freq\n"); return; }
iopl(3); 		//ez nagyon csunya, vigyazni kene vele!!
//ioperm( (unsigned long) addr, 2L ,1);	//enable i/o port

  if (!strncmp((argv[1]),"off",3)) {cardoff(); return;}
  else tune(atof(argv[1]));
}

//-----------------------TUNE----------------
void tune (double freq) {
long bits,mask;
int i;

outb(0,addr);
bits=(freq*40)+10486188;

/*  { 24 bits to be written serially
      last byte always 10100000 = $a0 -> 160 * 256 * 256 = 10485760
      other two bytes set frequency in 25 kHz steps,
      IF offset is 10.7 MHz, 10.7 * 40                   =      428
                                                           --------
      thus offset is                                       10486188

      bits:=(trunc(int(freq*40)))+10486188;                            */

mask=1;
for (i=1; i<=24; i++) {
  if (!(bits & mask)) {
     outb(1,addr);
     outb(1,addr);
     outb(3,addr);
     outb(3,addr);}
  else {
     outb(5,addr);
     outb(5,addr);
     outb(7,addr);
     outb(7,addr);}
  mask*=2;
  }
outb(0,addr);
usleep(1000);
outb(0xc8,addr);

}

//----------------------------On/Off-----------
void cardoff (void) {
outb(0,addr);
outb(0,addr);
}

void cardon (void) {
outb(0,addr);
outb(0xc8,addr);
}

-------------------------------------------------------------------------
>Pokud si myslite, ze to neni to prave poradte mi neco jineho.
>PS: Musi to behat v linuxu a Win NT.
Drivery pro M$ veci s tim snad dodavaji...

--PM,mp


Další informace o konferenci Linux