Changeset 919:0d97efb0782c in roaraudio for roard/driver_oss.c


Ignore:
Timestamp:
12/06/08 23:28:06 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

wrote working(!) OSS driver

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/driver_oss.c

    r917 r919  
    2626#if defined(ROAR_HAVE_OSS_BSD) || defined(ROAR_HAVE_OSS) 
    2727 
     28#define er() close(fh); return -1 
     29 
    2830int driver_oss_open(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info) { 
     31 int tmp; 
     32 int fh; 
     33 
     34 if ( device == NULL ) 
     35  device = ROAR_DEFAULT_OSS_DEV; 
     36 
     37 roar_vio_init_calls(inst); 
     38 
     39 if ( (fh = open(device, O_WRONLY, 0644)) == -1 ) { 
     40  ROAR_ERR("driver_oss_open(*): Can not open OSS device: %s: %s", device, strerror(errno)); 
     41  return -1; 
     42 } 
     43 
     44 roar_vio_set_fh(inst, fh); 
     45 
     46 switch (info->channels) { 
     47  case  1: tmp = 0; break; 
     48  case  2: tmp = 1; break; 
     49  default: er(); 
     50 } 
     51 
     52 if ( ioctl(fh, SNDCTL_DSP_STEREO, &tmp) == -1 ) { 
     53  er(); 
     54 } 
     55 
     56 switch (info->bits) { 
     57  case  8: tmp = AFMT_S8; break; 
     58  case 16: 
     59    switch (info->codec) { 
     60     case ROAR_CODEC_PCM_S_LE: tmp = AFMT_S16_LE; break; 
     61     case ROAR_CODEC_PCM_S_BE: tmp = AFMT_S16_BE; break; 
     62     default                 : er(); 
     63    } 
     64   break; 
     65  default: er(); 
     66 } 
     67 
     68 if ( ioctl(fh, SNDCTL_DSP_SAMPLESIZE, &tmp) == -1 ) { 
     69  er(); 
     70 } 
     71 
     72 tmp = info->rate; 
     73 
     74 if ( ioctl(fh, SNDCTL_DSP_SPEED, &tmp) == -1 ) { 
     75  er(); 
     76 } 
     77 
     78 if ( tmp < info->rate * 0.98 || tmp > info->rate * 1.02 ) { 
     79  er(); 
     80 } 
     81 
     82 return 0; 
    2983} 
    3084 
    3185int driver_oss_close(DRIVER_USERDATA_T   inst) { 
     86 return close(roar_vio_get_fh((struct roar_vio_calls *)inst)); 
    3287} 
    3388 
Note: See TracChangeset for help on using the changeset viewer.