Changeset 1222:260aca01b2af in roaraudio


Ignore:
Timestamp:
02/25/09 00:03:32 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

unified driver vio ctl to support setting of blocksize

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/driver_oss.c

    r1209 r1222  
    3232 int ctmp; 
    3333 char * es; 
     34 uint32_t tmp32; 
    3435 
    3536#ifdef ROAR_DEFAULT_OSS_DEV 
     
    188189 
    189190 
    190 #ifdef SNDCTL_DSP_SETFRAGMENT 
    191  tmp = 4 << 16 | 11; // 4 fragements of 2048 Bytes. 
    192  if ( ioctl(fh, SNDCTL_DSP_SETFRAGMENT, &tmp) == -1 ) { 
    193   ROAR_WARN("driver_oss_open(*): Can not set fragment size, sorry :("); 
    194  } 
    195 #endif 
     191 tmp32 = 4; 
     192 driver_oss_ctl(inst, ROAR_VIO_CTL_SET_DBLOCKS, &tmp32); 
    196193 
    197194 ROAR_DBG("driver_oss_open(*): OSS devices opened :)"); 
     
    213210 
    214211int driver_oss_ctl(struct roar_vio_calls * vio, int cmd, void * data) { 
    215 #ifdef SNDCTL_DSP_GETODELAY 
    216212 int d; 
    217213 
     
    219215  return -1; 
    220216 
    221  if ( cmd != ROAR_VIO_CTL_GET_DELAY ) 
    222   return -1; 
    223  
    224  if ( ioctl(roar_vio_get_fh(vio), SNDCTL_DSP_GETODELAY, &d) == -1 ) 
    225   return -1; 
    226  
    227  ROAR_DBG("driver_oss_ctl(*): delay=%i byte", d); 
    228  
    229  *(uint_least32_t *)data = d; 
     217 switch (cmd) { 
     218  case ROAR_VIO_CTL_GET_DELAY: 
     219#ifdef SNDCTL_DSP_GETODELAY 
     220    if ( ioctl(roar_vio_get_fh(vio), SNDCTL_DSP_GETODELAY, &d) == -1 ) 
     221     return -1; 
     222 
     223    ROAR_DBG("driver_oss_ctl(*): delay=%i byte", d); 
     224 
     225    *(uint_least32_t *)data = d; 
     226#else 
     227    return -1; 
     228#endif 
     229   break; 
     230  case ROAR_VIO_CTL_SET_DBLOCKS: 
     231#ifdef SNDCTL_DSP_SETFRAGMENT 
     232    d = (*(uint_least32_t *)data) << 16 | 11; // (*data) fragements of 2048 Bytes. 
     233    if ( ioctl(roar_vio_get_fh(vio), SNDCTL_DSP_SETFRAGMENT, &d) == -1 ) { 
     234     ROAR_WARN("driver_oss_ctl(*): Can not set fragment size, sorry :("); 
     235    } 
     236#else 
     237    return -1; 
     238#endif 
     239   break; 
     240  case ROAR_VIO_CTL_GET_DBLKSIZE: 
     241    *(uint_least32_t *)data = 2048; 
     242    return 0; 
     243   break; 
     244  default: 
     245   return -1; 
     246 } 
    230247 
    231248 return 0; 
    232 #else 
    233  return -1; 
    234 #endif 
    235249} 
    236250 
Note: See TracChangeset for help on using the changeset viewer.