Changeset 1547:751826b3e553 in roaraudio


Ignore:
Timestamp:
04/12/09 22:29:18 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

started writing some code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/driver_sndio.c

    r1543 r1547  
    2626#ifdef ROAR_HAVE_LIBSNDIO 
    2727 
     28int driver_sndio_init_vio(struct roar_vio_calls * vio, struct driver_sndio * inst) { 
     29 if ( vio == NULL ) 
     30  return -1; 
     31 
     32 memset(vio, 0, sizeof(struct roar_vio_calls)); 
     33 
     34 vio->close    = driver_sndio_close_vio; 
     35 vio->write    = driver_sndio_write; 
     36 vio->sync     = driver_sndio_sync; 
     37 vio->ctl      = driver_sndio_ctl; 
     38 
     39 vio->inst     = (void*) inst; 
     40 
     41 return 0; 
     42} 
     43 
     44#define er() if ( self->handle ) sio_close(self->handle); if ( self->device ) free(self->device); free(self); return -1 
    2845int driver_sndio_open(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info, int fh) { 
     46 struct driver_sndio * self = NULL; 
     47 
     48 if ( (self = malloc(sizeof(struct driver_sndio))) == NULL ) { 
     49  ROAR_ERR("driver_sndio_open(*): Can not malloc() instance data: %s", strerror(errno)); 
     50  return -1; 
     51 } 
     52 
     53 memset(self, 0, sizeof(struct driver_sndio)); 
     54 memcpy(&(self->info), info, sizeof(struct roar_audio_info)); 
     55 
     56 self->ssid = -1; 
     57 
     58 if ( device != NULL ) 
     59  self->device = strdup(device); 
     60 
     61 if ( driver_sndio_init_vio(inst, self) == -1 ) { 
     62  ROAR_ERR("driver_sndio_open(*): Can not init vio interface"); 
     63  er(); 
     64 } 
     65 
     66 if ( driver_sndio_open_device(self) == -1 ) { 
     67  ROAR_ERR("driver_sndio_open(*): Can not open audio device"); 
     68  er(); 
     69 } 
     70 
     71 ROAR_DBG("driver_sndio_open(*): OSS devices opened :)"); 
     72 
     73 return 0; 
     74} 
     75#undef er 
     76 
     77int     driver_sndio_close_vio    (struct roar_vio_calls * vio) { 
     78 struct driver_sndio * self = vio->inst; 
     79 
     80 if ( self->handle != NULL ) 
     81  sio_close(self->handle); 
     82 
     83 if ( self->device != NULL ) 
     84  free(self->device); 
     85 
     86 free(self); 
     87 
     88 return 0; 
     89} 
     90 
     91int     driver_sndio_open_device  (struct driver_sndio * self) { 
     92 
     93 if ( (self->handle = sio_open(self->device, SIO_PLAY, 0)) == NULL ) { 
     94  ROAR_ERR("driver_sndio_open_device(*): Can not open sndio audio device"); 
     95  return -1; 
     96 } 
     97 
     98 return 0; 
     99} 
     100 
     101int     driver_sndio_config_device(struct driver_sndio * self) { 
     102 struct sio_par par; 
     103 
     104 sio_initpar(&par); 
     105 
     106 par.bits  = self->info.bits; 
     107 par.rate  = self->info.rate; 
     108 par.pchan = self->info.channels; 
     109 
     110 switch (self->info.codec) { 
     111  case ROAR_CODEC_PCM_S_LE: 
     112    par.le  = 1; 
     113    par.sig = 1; 
     114   break; 
     115  case ROAR_CODEC_PCM_S_BE: 
     116    par.le  = 0; 
     117    par.sig = 1; 
     118   break; 
     119  case ROAR_CODEC_PCM_U_LE: 
     120    par.le  = 1; 
     121    par.sig = 0; 
     122   break; 
     123  case ROAR_CODEC_PCM_U_BE: 
     124    par.le  = 0; 
     125    par.sig = 0; 
     126   break; 
     127  default: 
     128    return -1; 
     129   break; 
     130 } 
     131 
    29132 return -1; 
     133} 
     134 
     135int     driver_sndio_reopen_device(struct driver_sndio * self); 
     136ssize_t driver_sndio_write        (struct roar_vio_calls * vio, void *buf, size_t count); 
     137int     driver_sndio_sync         (struct roar_vio_calls * vio); 
     138 
     139int     driver_sndio_ctl          (struct roar_vio_calls * vio, int cmd, void * data) { 
     140 switch (cmd) { 
     141  default: return -1; 
     142 } 
     143 
     144 return 0; 
    30145} 
    31146 
Note: See TracChangeset for help on using the changeset viewer.