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