Changeset 5276:0eb24ca6810e in roaraudio


Ignore:
Timestamp:
11/20/11 18:36:49 (12 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

merged VIO's _nonblock() into _ctl() (Closes: #135)

Files:
38 edited

Legend:

Unmodified
Added
Removed
  • ChangeLog

    r5275 r5276  
    11v. 1.0beta0 - ? 
    2         * Updated API (SONAME change) (Closes: #184, #185, #128) 
     2        * Updated API (SONAME change) (Closes: #184, #185, #128, #135) 
    33        * Do not set errno to zero in ogg_vorbis codec filter (Closes: #191) 
    44        * Updated data types for struct roar_audio_info (Closes: #189) 
  • include/libroar/vio.h

    r5260 r5276  
    5353 ssize_t (*write   )(struct roar_vio_calls * vio, void *buf, size_t count); 
    5454 off_t   (*lseek   )(struct roar_vio_calls * vio, off_t offset, int whence); 
    55  int     (*nonblock)(struct roar_vio_calls * vio, int state); 
     55// int     (*nonblock)(struct roar_vio_calls * vio, int state); 
    5656 int     (*sync    )(struct roar_vio_calls * vio); 
    5757 int     (*ctl     )(struct roar_vio_calls * vio, int cmd, void * data); 
     
    104104ssize_t roar_vio_basic_write   (struct roar_vio_calls * vio, void *buf, size_t count); 
    105105off_t   roar_vio_basic_lseek   (struct roar_vio_calls * vio, off_t offset, int whence); 
    106 int     roar_vio_basic_nonblock(struct roar_vio_calls * vio, int state); 
    107106int     roar_vio_basic_sync    (struct roar_vio_calls * vio); 
    108107int     roar_vio_basic_ctl     (struct roar_vio_calls * vio, int cmd, void * data); 
     
    120119ssize_t roar_vio_pass_write   (struct roar_vio_calls * vio, void *buf, size_t count); 
    121120off_t   roar_vio_pass_lseek   (struct roar_vio_calls * vio, off_t offset, int whence); 
    122 int     roar_vio_pass_nonblock(struct roar_vio_calls * vio, int state); 
    123121int     roar_vio_pass_sync    (struct roar_vio_calls * vio); 
    124122int     roar_vio_pass_ctl     (struct roar_vio_calls * vio, int cmd, void * data); 
  • include/libroar/vio_ctl.h

    r4902 r5276  
    9999#define ROAR_VIO_CTL_GET_USERPASS        (ROAR_VIO_CTL_GENERIC|ROAR_VIO_CTL_SET|0x0194) 
    100100#define ROAR_VIO_CTL_SET_USERPASS        (ROAR_VIO_CTL_GENERIC|ROAR_VIO_CTL_SET|0x0194) 
    101 // NOTE: continue with 0x01A0 from here. 
     101 
     102// Implement roar_vio_nonblock()... 
     103#define ROAR_VIO_CTL_NONBLOCK            (ROAR_VIO_CTL_GENERIC|0x01A0) /* roar_vio_nonblock(), int */ 
    102104 
    103105// get or set data format used for read and write calls, see below 
  • include/libroar/vio_winsock.h

    r4708 r5276  
    4242ssize_t roar_vio_winsock_read    (struct roar_vio_calls * vio, void *buf, size_t count); 
    4343ssize_t roar_vio_winsock_write   (struct roar_vio_calls * vio, void *buf, size_t count); 
    44 int     roar_vio_winsock_nonblock(struct roar_vio_calls * vio, int state); 
    4544int     roar_vio_winsock_sync    (struct roar_vio_calls * vio); 
    4645int     roar_vio_winsock_ctl     (struct roar_vio_calls * vio, int cmd, void * data); 
  • libroar/vio.c

    r5270 r5276  
    6565 calls->write    = roar_vio_basic_write; 
    6666 calls->lseek    = roar_vio_basic_lseek; 
    67  calls->nonblock = roar_vio_basic_nonblock; 
    6867 calls->sync     = roar_vio_basic_sync; 
    6968 calls->ctl      = roar_vio_basic_ctl; 
     
    179178 
    180179int     roar_vio_nonblock(struct roar_vio_calls * vio, int state) { 
    181  int ret; 
    182  
    183180 ROAR_DBG("roar_vio_nonblock(vio=%p, state=%i) = ?", vio, state); 
    184181 
     
    188185 } 
    189186 
    190  if ( vio->nonblock == NULL ) { 
    191   roar_err_set(ROAR_ERROR_NOSYS); 
    192   return -1; 
    193  } 
    194  
    195  roar_err_clear_all(); 
    196  ret = vio->nonblock(vio, state); 
    197  roar_err_update(); 
    198  
    199  return ret; 
     187 return roar_vio_ctl(vio, ROAR_VIO_CTL_NONBLOCK, &state); 
    200188} 
    201189 
     
    346334 calls->read     = roar_vio_winsock_read; 
    347335 calls->write    = roar_vio_winsock_write; 
    348  calls->nonblock = roar_vio_winsock_nonblock; 
    349336 calls->sync     = roar_vio_winsock_sync; 
    350337 calls->ctl      = roar_vio_winsock_ctl; 
     
    414401 return -1; 
    415402#endif 
    416 } 
    417  
    418 int     roar_vio_basic_nonblock(struct roar_vio_calls * vio, int state) { 
    419  if ( roar_socket_nonblock(roar_vio_get_fh(vio), state) == -1 ) 
    420   return -1; 
    421  
    422  if ( state == ROAR_SOCKET_NONBLOCK ) 
    423   return 0; 
    424  
    425  roar_vio_sync(vio); 
    426  
    427  return 0; 
    428403} 
    429404 
     
    666641   break; 
    667642#endif 
     643  case ROAR_VIO_CTL_NONBLOCK: 
     644    if ( roar_socket_nonblock(roar_vio_get_fh(vio), *(int*)data) == -1 ) 
     645     return -1; 
     646 
     647    if ( *(int*)data == ROAR_SOCKET_NONBLOCK ) 
     648     return 0; 
     649 
     650    roar_vio_sync(vio); 
     651    return 0; 
     652   break; 
    668653 } 
    669654 
     
    713698 calls->write    = roar_vio_pass_write; 
    714699 calls->lseek    = roar_vio_pass_lseek; 
    715  calls->nonblock = roar_vio_pass_nonblock; 
    716700 calls->sync     = roar_vio_pass_sync; 
    717701 calls->ctl      = roar_vio_pass_ctl; 
     
    733717off_t   roar_vio_pass_lseek(struct roar_vio_calls * vio, off_t offset, int whence) { 
    734718 return roar_vio_lseek((struct roar_vio_calls *) vio->inst, offset, whence); 
    735 } 
    736  
    737 int     roar_vio_pass_nonblock(struct roar_vio_calls * vio, int state) { 
    738  return roar_vio_nonblock((struct roar_vio_calls *) vio->inst, state); 
    739719} 
    740720 
  • libroar/vio_buffer.c

    r4708 r5276  
    6363 calls->close    = roar_vio_buffer_close; 
    6464 calls->write    = roar_vio_buffer_write; 
    65  calls->nonblock = roar_vio_buffer_nonblock; 
    6665 calls->ctl      = roar_vio_buffer_ctl; 
    6766 calls->sync     = roar_vio_buffer_sync; 
     
    327326    return 0; 
    328327   break; 
     328  case ROAR_VIO_CTL_NONBLOCK: 
     329    if ( self->use_re ) { 
     330     return roar_vio_ctl(&(self->re_vio), ROAR_VIO_CTL_NONBLOCK, data); 
     331    } else { 
     332     return roar_vio_ctl(self->backend, ROAR_VIO_CTL_NONBLOCK, data); 
     333    } 
     334   break; 
    329335 } 
    330336 
     
    342348} 
    343349 
    344 int     roar_vio_buffer_nonblock(struct roar_vio_calls * vio, int state) { 
    345  struct roar_vio_buffer * self = vio->inst; 
    346  
    347  if ( self->use_re ) { 
    348   return roar_vio_nonblock(&(self->re_vio), state); 
    349  } else { 
    350   return roar_vio_nonblock(self->backend, state); 
    351  } 
    352 } 
    353  
    354350//ll 
  • libroar/vio_buffer_store.c

    r4708 r5276  
    5656 calls->inst     = self; 
    5757 calls->close    = roar_vio_buffer_store_close; 
    58  calls->nonblock = roar_vio_buffer_store_nonblock; 
    5958 calls->sync     = roar_vio_buffer_store_sync; 
    6059 calls->ctl      = roar_vio_buffer_store_ctl; 
     
    138137} 
    139138 
    140 int     roar_vio_buffer_store_nonblock(struct roar_vio_calls * vio, int state) { 
    141  return 0; // if we are in nonblock or not is the same for us. 
    142 } 
    143  
    144139int     roar_vio_buffer_store_sync    (struct roar_vio_calls * vio) { 
    145140 return 0; // we are always sync. 
     
    160155    return 0; 
    161156   break; 
     157  case ROAR_VIO_CTL_NONBLOCK: 
     158    return 0; // if we are in nonblock or not is the same for us. 
     159   break; 
    162160 } 
    163161 
  • libroar/vio_cmd.c

    r5111 r5276  
    8080 calls->read     = roar_vio_cmd_read; 
    8181 calls->write    = roar_vio_cmd_write; 
    82  calls->nonblock = roar_vio_cmd_nonblock; 
    8382 calls->sync     = roar_vio_cmd_sync; 
    8483 calls->ctl      = roar_vio_cmd_ctl; 
     
    514513} 
    515514 
    516 int     roar_vio_cmd_nonblock(struct roar_vio_calls * vio, int state) { 
    517  struct roar_vio_cmd_state * self = (struct roar_vio_cmd_state *)vio->inst; 
    518  
    519  self->options |= ROAR_VIO_CMD_OPTS_NONBLOCK; 
    520  
    521  if ( state == ROAR_SOCKET_BLOCK ) 
    522   self->options -= ROAR_VIO_CMD_OPTS_NONBLOCK; 
    523  
    524  _LIBROAR_IGNORE_RET(roar_vio_nonblock(self->next, state)); // this should help, but may not nessessery. 
    525  
    526  return 0; 
    527 } 
    528  
    529515int     roar_vio_cmd_sync    (struct roar_vio_calls * vio) { 
    530516 struct roar_vio_cmd_state * state = (struct roar_vio_cmd_state *)vio->inst; 
     517 int newblock = ROAR_SOCKET_BLOCK; 
    531518 int oldblock; 
    532519 int ret = 0; 
     
    534521 oldblock = state->options & ROAR_VIO_CMD_OPTS_NONBLOCK ? ROAR_SOCKET_NONBLOCK : ROAR_SOCKET_BLOCK; 
    535522 
    536  if ( roar_vio_cmd_nonblock(vio, ROAR_SOCKET_BLOCK) == -1 ) 
     523 if ( roar_vio_cmd_ctl(vio, ROAR_VIO_CTL_NONBLOCK, &newblock) == -1 ) 
    537524  return -1; 
    538525 
     
    543530  ret = -1; 
    544531 
    545  if ( roar_vio_cmd_nonblock(vio, oldblock) == -1 ) 
     532 if ( roar_vio_cmd_ctl(vio, ROAR_VIO_CTL_NONBLOCK, &oldblock) == -1 ) 
    546533  return -1; 
    547534 
     
    586573    return -1; 
    587574   break; 
     575  case ROAR_VIO_CTL_NONBLOCK: 
     576    state->options |= ROAR_VIO_CMD_OPTS_NONBLOCK; 
     577 
     578    if ( *(int*)data == ROAR_SOCKET_BLOCK ) 
     579     state->options -= ROAR_VIO_CMD_OPTS_NONBLOCK; 
     580 
     581    _LIBROAR_IGNORE_RET(roar_vio_ctl(state->next, cmd, data)); // this should help, but may not necessarily. 
     582   break; 
    588583  default: 
    589584    return -1; 
  • libroar/vio_jumbo.c

    r5270 r5276  
    5858 calls->write    = roar_vio_jumbo_write; 
    5959 calls->lseek    = roar_vio_jumbo_lseek; 
    60  calls->nonblock = roar_vio_jumbo_nonblock; 
    6160 calls->sync     = roar_vio_jumbo_sync; 
    6261 calls->ctl      = roar_vio_jumbo_ctl; 
     
    130129} 
    131130 
    132 int     roar_vio_jumbo_nonblock(struct roar_vio_calls * vio, int state) { 
    133  struct roar_vio_jumbo * self = vio->inst; 
    134  
    135  return roar_vio_nonblock(self->backend, state); 
    136 } 
    137  
    138131int     roar_vio_jumbo_sync    (struct roar_vio_calls * vio) { 
    139132 struct roar_vio_jumbo * self = vio->inst; 
     
    156149 
    157150int     roar_vio_jumbo_ctl     (struct roar_vio_calls * vio, int cmd, void * data) { 
     151 struct roar_vio_jumbo * self = vio->inst; 
     152 
     153 switch (cmd) { 
     154  case ROAR_VIO_CTL_NONBLOCK: 
     155    return roar_vio_ctl(self->backend, cmd, data); 
     156   break; 
     157 } 
     158 
     159 roar_err_set(ROAR_ERROR_BADRQC); 
    158160 return -1; 
    159161} 
  • libroar/vio_misc.c

    r5270 r5276  
    5959} 
    6060 
    61 static int     roar_vio_misc_nonblock(struct roar_vio_calls * vio, int state) { 
    62  struct roar_vio_misc * self = vio->inst; 
    63  
    64  if ( self->support_nonblocking ) 
    65   return 0; 
    66  
    67  if ( state == ROAR_SOCKET_BLOCK ) 
    68   return 0; 
    69  
    70  return -1; 
    71 } 
    72  
    7361static int     roar_vio_misc_sync    (struct roar_vio_calls * vio) { 
    7462 (void)vio; 
     
    9482    return 0; 
    9583   break; 
     84  case ROAR_VIO_CTL_NONBLOCK: 
     85    if ( self->support_nonblocking ) 
     86     return 0; 
     87 
     88    if ( *(int*)data == ROAR_SOCKET_BLOCK ) 
     89     return 0; 
     90 
     91    return -1; 
     92   break;  
    9693 } 
    9794 
     
    112109 calls->write    = roar_vio_misc_write; 
    113110 calls->lseek    = roar_vio_misc_lseek; 
    114  calls->nonblock = roar_vio_misc_nonblock; 
    115111 calls->sync     = roar_vio_misc_sync; 
    116112 calls->ctl      = roar_vio_misc_ctl; 
  • libroar/vio_pipe.c

    r5270 r5276  
    119119#ifndef ROAR_WITHOUT_VIO_PIPE 
    120120int roar_vio_pipe_init (struct roar_vio_calls * s,  struct roar_vio_pipe * self, int flags) { 
     121 int nonblock = ROAR_SOCKET_NONBLOCK; 
     122 
    121123 if ( s == NULL || self == NULL ) 
    122124  return -1; 
     
    127129 s->read     = roar_vio_pipe_read; 
    128130 s->write    = roar_vio_pipe_write; 
    129  s->nonblock = roar_vio_pipe_nonblock; 
    130131 s->sync     = roar_vio_pipe_sync; 
    131132 
     
    133134 
    134135 if ( flags & O_NONBLOCK ) { 
    135   roar_vio_pipe_nonblock(s, ROAR_SOCKET_NONBLOCK); 
     136  roar_vio_pipe_ctl(s, ROAR_VIO_CTL_NONBLOCK, &nonblock); 
    136137 } 
    137138 
     
    187188} 
    188189 
    189 int     roar_vio_pipe_nonblock(struct roar_vio_calls * vio, int state) { 
    190  struct roar_vio_pipe * self; 
    191  
    192  if ( vio == NULL ) 
    193   return -1; 
    194  
    195  if ( (self = (struct roar_vio_pipe *)vio->inst) == NULL ) 
    196   return -1; 
    197  
    198  switch (self->type) { 
    199   case ROAR_VIO_PIPE_TYPE_PIPE: 
    200     if ( roar_socket_nonblock(self->b.p[ROAR_VIO_PIPE_S(self,vio)*2], state) == -1 ) 
    201      return -1; 
    202     return roar_socket_nonblock(self->b.p[(ROAR_VIO_PIPE_SR(self,vio)*2)+1], state); 
    203    break; 
    204 #ifdef ROAR_HAVE_UNIX 
    205   case ROAR_VIO_PIPE_TYPE_SOCKET: 
    206     return roar_socket_nonblock(self->b.p[ROAR_VIO_PIPE_S(self,vio)], state); 
    207    break; 
    208 #endif 
    209  } 
    210  
    211  return -1; 
    212 } 
    213  
    214190int     roar_vio_pipe_sync    (struct roar_vio_calls * vio) { 
    215191 // we may add fdatasync() calls here depending on the type 
     
    276252       return 0; 
    277253      break; 
     254    } 
     255   break; 
     256  case ROAR_VIO_CTL_NONBLOCK: 
     257    switch (self->type) { 
     258     case ROAR_VIO_PIPE_TYPE_PIPE: 
     259       if ( roar_socket_nonblock(self->b.p[ROAR_VIO_PIPE_S(self,vio)*2], *(int*)data) == -1 ) 
     260        return -1; 
     261       return roar_socket_nonblock(self->b.p[(ROAR_VIO_PIPE_SR(self,vio)*2)+1], *(int*)data); 
     262      break; 
     263#ifdef ROAR_HAVE_UNIX 
     264     case ROAR_VIO_PIPE_TYPE_SOCKET: 
     265       return roar_socket_nonblock(self->b.p[ROAR_VIO_PIPE_S(self,vio)], *(int*)data); 
     266      break; 
     267#endif 
    278268    } 
    279269   break; 
  • libroar/vio_proto.c

    r5254 r5276  
    121121 calls->write    = roar_vio_proto_write; 
    122122// calls->lseek    = roar_vio_proto_lseek; // TODO: this is currently not supported 
    123  calls->nonblock = roar_vio_proto_nonblock; 
    124123 calls->sync     = roar_vio_proto_sync; 
    125124 calls->ctl      = roar_vio_proto_ctl; 
     
    232231// TODO: this is currently not implemented as this is hard to implement with buffers: 
    233232off_t   roar_vio_proto_lseek   (struct roar_vio_calls * vio, off_t offset, int whence); 
    234  
    235 int     roar_vio_proto_nonblock(struct roar_vio_calls * vio, int state) { 
    236  struct roar_vio_proto * self = vio->inst; 
    237  
    238  /* we can simply use the next layer's nonblock as all we do in addtion * 
    239   * to call there functions are our buffers which do not block normaly  */ 
    240  
    241  return roar_vio_nonblock(self->next, state); 
    242 } 
    243233 
    244234int     roar_vio_proto_sync    (struct roar_vio_calls * vio) { 
  • libroar/vio_rtp.c

    r5111 r5276  
    115115 calls->write              = roar_vio_rtp_write; 
    116116// calls->lseek              = roar_vio_rtp_lseek; 
    117  calls->nonblock           = roar_vio_rtp_nonblock; 
    118117 calls->sync               = roar_vio_rtp_sync; 
    119118 calls->ctl                = roar_vio_rtp_ctl; 
     
    316315off_t   roar_vio_rtp_lseek   (struct roar_vio_calls * vio, off_t offset, int whence); 
    317316 
    318 int     roar_vio_rtp_nonblock(struct roar_vio_calls * vio, int state) { 
    319  struct roar_rtp_inst * self = vio->inst; 
    320  
    321  ROAR_DBG("roar_vio_rtp_nonblock(vio=%p, state=%i) = ?", vio, state); 
    322  
    323  return roar_vio_nonblock(self->vio, state); 
    324 } 
    325  
    326317int     roar_vio_rtp_sync    (struct roar_vio_calls * vio) { 
    327318 struct roar_rtp_inst * self = vio->inst; 
  • libroar/vio_stack.c

    r4975 r5276  
    6565 calls->write    = roar_vio_stack_write; 
    6666 calls->lseek    = roar_vio_stack_lseek; 
    67  calls->nonblock = roar_vio_stack_nonblock; 
    6867 calls->sync     = roar_vio_stack_sync; 
    6968 
     
    184183} 
    185184 
    186 int     roar_vio_stack_nonblock(struct roar_vio_calls * vio, int state) { 
    187  if ( vio == NULL ) 
    188   return -1; 
    189  
    190  if ( vio->inst == NULL ) 
    191   return -1; 
    192  
    193  if ( ((struct roar_vio_stack*)(vio->inst))->cur == NULL ) 
    194   return -1; 
    195  
    196  return roar_vio_nonblock(((struct roar_vio_stack*)(vio->inst))->cur, state); 
    197 } 
    198  
    199185int     roar_vio_stack_sync    (struct roar_vio_calls * vio) { 
    200186 if ( vio == NULL ) 
  • libroar/vio_stdvios.c

    r4708 r5276  
    4343   .write    = roar_vio_basic_write, 
    4444   .lseek    = roar_vio_basic_lseek, 
    45    .nonblock = roar_vio_basic_nonblock, 
    4645   .sync     = roar_vio_basic_sync, 
    4746   .ctl      = roar_vio_basic_ctl, 
     
    5453   .write    = roar_vio_basic_write, 
    5554   .lseek    = roar_vio_basic_lseek, 
    56    .nonblock = roar_vio_basic_nonblock, 
    5755   .sync     = roar_vio_basic_sync, 
    5856   .ctl      = roar_vio_basic_ctl, 
     
    6563   .write    = roar_vio_basic_write, 
    6664   .lseek    = roar_vio_basic_lseek, 
    67    .nonblock = roar_vio_basic_nonblock, 
    6865   .sync     = roar_vio_basic_sync, 
    6966   .ctl      = roar_vio_basic_ctl, 
  • libroar/vio_stream.c

    r5238 r5276  
    4747 return roar_vio_lseek(roar_get_connection_vio2(vio->inst), offset, whence); 
    4848} 
    49 static int     _vio_stream_nonblock(struct roar_vio_calls * vio, int state) { 
    50  return roar_vio_nonblock(roar_get_connection_vio2(vio->inst), state); 
    51 } 
    5249static int     _vio_stream_sync    (struct roar_vio_calls * vio) { 
    5350 return roar_vio_sync(roar_get_connection_vio2(vio->inst)); 
     
    8178    roar_err_set(ROAR_ERROR_NOTSUP); 
    8279    return -1; 
     80   break; 
     81  case ROAR_VIO_CTL_NONBLOCK: 
     82    return roar_vio_ctl(roar_get_connection_vio2(vio->inst), ROAR_VIO_CTL_NONBLOCK, data); 
    8383   break; 
    8484 } 
     
    143143 calls->write      = _vio_stream_write; 
    144144 calls->lseek      = _vio_stream_lseek; 
    145  calls->nonblock   = _vio_stream_nonblock; 
    146145 calls->sync       = _vio_stream_sync; 
    147146 calls->ctl        = _vio_stream_ctl; 
  • libroar/vio_winsock.c

    r4708 r5276  
    4545} 
    4646 
    47 int     roar_vio_winsock_nonblock(struct roar_vio_calls * vio, int state) { 
    48  return -1; 
    49 } 
    5047int     roar_vio_winsock_sync    (struct roar_vio_calls * vio) { 
    5148 return 0; 
     
    123120 } 
    124121 
     122 roar_err_set(ROAR_ERROR_BADRQC); 
    125123 return -1; 
    126124} 
  • libroar/vio_zlib.c

    r5270 r5276  
    435435} 
    436436 
    437 static int     roar_vio_zlib_nonblock(struct roar_vio_calls * vio, int state) { 
    438  struct roar_vio_gzip * self = vio->inst; 
    439  return roar_vio_nonblock(self->next, state); 
    440 } 
    441  
    442437static int     roar_vio_zlib_sync    (struct roar_vio_calls * vio) { 
    443438 struct roar_vio_gzip * self = vio->inst; 
     
    483478    return -1; 
    484479   break; 
     480  case ROAR_VIO_CTL_NONBLOCK: 
     481    return roar_vio_ctl(self->next, cmd, data); 
     482   break; 
    485483  default: 
    486484    roar_err_set(ROAR_ERROR_BADRQC); 
     
    545543 calls->write      = roar_vio_zlib_write; 
    546544 calls->lseek      = roar_vio_zlib_lseek; 
    547  calls->nonblock   = roar_vio_zlib_nonblock; 
    548545 calls->sync       = roar_vio_zlib_sync; 
    549546 calls->ctl        = roar_vio_zlib_ctl; 
  • roard/container_framework.c

    r4957 r5276  
    198198 
    199199off_t   cont_fw_lseek   (struct roar_vio_calls * vio, off_t offset, int whence); 
    200 int     cont_fw_nonblock(struct roar_vio_calls * vio, int state); 
    201200 
    202201int     cont_fw_sync    (struct roar_vio_calls * vio) { 
     
    245244 vio->write    = cont_pvio_write; 
    246245 vio->lseek    = cont_pvio_lseek; 
    247  vio->nonblock = cont_pvio_nonblock; 
    248246 vio->sync     = cont_pvio_sync; 
    249247 vio->ctl      = cont_pvio_ctl; 
     
    264262off_t   cont_pvio_lseek   (struct roar_vio_calls * vio, off_t offset, int whence) { 
    265263 return roar_vio_lseek(&(((struct cont_fw_parent_inst*)(vio->inst))->stream.stream->vio), offset, whence); 
    266 } 
    267  
    268 int     cont_pvio_nonblock(struct roar_vio_calls * vio, int state) { 
    269  return roar_vio_nonblock(&(((struct cont_fw_parent_inst*)(vio->inst))->stream.stream->vio), state); 
    270264} 
    271265 
  • roard/driver.c

    r5274 r5276  
    317317#endif 
    318318 
    319 int  driver_dummy_nonblock(struct roar_vio_calls * vio, int state) { 
    320  if ( state == ROAR_SOCKET_BLOCK ) 
    321   return 0; 
    322  
    323  roar_err_set(ROAR_ERROR_NOTSUP); 
    324  return -1; 
     319int  driver_dummy_ctl(struct roar_vio_calls * vio, int cmd, void * data) { 
     320 switch (cmd) { 
     321  case ROAR_VIO_CTL_NONBLOCK: 
     322    if ( *(const int*)data == ROAR_SOCKET_BLOCK ) 
     323     return 0; 
     324 
     325    roar_err_set(ROAR_ERROR_NOTSUP); 
     326    return -1; 
     327   break; 
     328  default: 
     329    roar_err_set(ROAR_ERROR_BADRQC); 
     330    return -1; 
     331   break; 
     332 } 
    325333} 
    326334 
  • roard/driver_alsa.c

    r5012 r5276  
    231231 inst->sync     = driver_alsa_sync; 
    232232 inst->ctl      = driver_alsa_ctl; 
    233  inst->nonblock = driver_dummy_nonblock; 
    234233 
    235234 ROAR_DBG("driver_alsa_open_vio(inst=%p, device='%s', info=%p, fh=%i, sstream=%p) = 0", inst, device, info, fh, sstream); 
     
    333332 switch (cmd) { 
    334333  case ROAR_VIO_CTL_GET_DELAY: 
    335    if ( snd_pcm_delay(device->handle, &alsa_delay) < 0 ) 
     334    if ( snd_pcm_delay(device->handle, &alsa_delay) < 0 ) 
     335     return -1; 
     336    else { 
     337     *(uint_least32_t *)data = snd_pcm_frames_to_bytes(device->handle, alsa_delay); 
     338     ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_GET_DELAY(0x%.8x), data=%p): %i bytes.", vio, cmd, data, (int)(*(uint_least32_t*)data)); 
     339    } 
     340   break; 
     341 
     342  case ROAR_VIO_CTL_SET_SSTREAMID: 
     343    device->ssid = *(int *)data; 
     344    ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_SSTREAMID(0x%.8x), data=%p): ssid=%i", vio, cmd, data, device->ssid); 
     345   break; 
     346 
     347  case ROAR_VIO_CTL_SET_SSTREAM: 
     348    device->sstream = data; 
     349    ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_SSTREAM(0x%.8x), data=%p): sstream=%p", vio, cmd, data, device->sstream); 
     350   break; 
     351 
     352  case ROAR_VIO_CTL_GET_AUINFO: 
     353    ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_GET_AUINFO(0x%.8x), data=%p) = ?", vio, cmd, data); 
     354    memcpy(data, &(device->info), sizeof(struct roar_audio_info)); 
     355   break; 
     356 
     357  case ROAR_VIO_CTL_SET_AUINFO: 
     358    ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_AUINFO(0x%.8x), data=%p) = ?", vio, cmd, data); 
     359    memcpy(&(device->info), data, sizeof(struct roar_audio_info)); 
     360    return driver_alsa_reopen_device(device); 
     361   break; 
     362 
     363  case ROAR_VIO_CTL_NONBLOCK: 
     364    if ( *(int*)data == ROAR_SOCKET_BLOCK ) 
     365     return 0; 
     366    roar_err_set(ROAR_ERROR_NOTSUP); 
    336367    return -1; 
    337    else { 
    338     *(uint_least32_t *)data = snd_pcm_frames_to_bytes(device->handle, alsa_delay); 
    339     ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_GET_DELAY(0x%.8x), data=%p): %i bytes.", vio, cmd, data, (int)(*(uint_least32_t*)data)); 
    340    } 
    341    break; 
    342  
    343   case ROAR_VIO_CTL_SET_SSTREAMID: 
    344    device->ssid = *(int *)data; 
    345    ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_SSTREAMID(0x%.8x), data=%p): ssid=%i", vio, cmd, data, device->ssid); 
    346    break; 
    347  
    348   case ROAR_VIO_CTL_SET_SSTREAM: 
    349    device->sstream = data; 
    350    ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_SSTREAM(0x%.8x), data=%p): sstream=%p", vio, cmd, data, device->sstream); 
    351    break; 
    352  
    353   case ROAR_VIO_CTL_GET_AUINFO: 
    354    ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_GET_AUINFO(0x%.8x), data=%p) = ?", vio, cmd, data); 
    355    memcpy(data, &(device->info), sizeof(struct roar_audio_info)); 
    356    break; 
    357  
    358   case ROAR_VIO_CTL_SET_AUINFO: 
    359    ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_AUINFO(0x%.8x), data=%p) = ?", vio, cmd, data); 
    360    memcpy(&(device->info), data, sizeof(struct roar_audio_info)); 
    361    return driver_alsa_reopen_device(device); 
     368   break; 
    362369 
    363370  default: 
  • roard/driver_ao.c

    r5056 r5276  
    134134 inst->write    = driver_ao_write; 
    135135 inst->close    = driver_ao_close; 
    136  inst->nonblock = driver_dummy_nonblock; 
     136 inst->ctl      = driver_dummy_ctl; 
    137137 
    138138 return 0; 
  • roard/driver_artsc.c

    r5108 r5276  
    124124 inst->close    = driver_artsc_close; 
    125125 inst->ctl      = driver_artsc_ctl; 
    126  inst->nonblock = driver_artsc_nonblock; 
    127126 
    128127 ROAR_DBG("driver_artsc_open_vio(*) = 0"); 
     
    155154 
    156155 return driver_artsc_init_shutdown(SHUTDOWN); 
    157 } 
    158  
    159 int     driver_artsc_nonblock(struct roar_vio_calls * vio, int state) { 
    160  struct roar_artsc * self = vio->inst; 
    161  int ret; 
    162  
    163  switch (state) { 
    164   case ROAR_SOCKET_NONBLOCK: 
    165     ret = arts_stream_set(self->stream, ARTS_P_BLOCKING, 0); 
    166     if ( ret == 0 ) 
    167      return 0; 
    168    break; 
    169   case ROAR_SOCKET_BLOCK: 
    170     ret = arts_stream_set(self->stream, ARTS_P_BLOCKING, 1); 
    171     if ( ret == 1 ) 
    172      return 0; 
    173    break; 
    174  } 
    175  
    176  return -1; 
    177156} 
    178157 
     
    206185 
    207186    return 0; 
     187  case ROAR_VIO_CTL_NONBLOCK: 
     188    switch (*(int*)data) { 
     189     case ROAR_SOCKET_NONBLOCK: 
     190       ret = arts_stream_set(self->stream, ARTS_P_BLOCKING, 0); 
     191       if ( ret == 0 ) 
     192        return 0; 
     193       return -1; 
     194      break; 
     195     case ROAR_SOCKET_BLOCK: 
     196       ret = arts_stream_set(self->stream, ARTS_P_BLOCKING, 1); 
     197       if ( ret == 1 ) 
     198        return 0; 
     199       return -1; 
     200      break; 
     201    } 
     202   break; 
    208203  default: 
    209204    return -1; 
  • roard/driver_jack.c

    r5259 r5276  
    6565 inst->write    = driver_jack_write; 
    6666 inst->lseek    = NULL; // no seeking on this device 
    67  inst->nonblock = driver_jack_nonblock; 
    6867 inst->sync     = driver_jack_sync; 
    6968 inst->ctl      = driver_jack_ctl; 
     
    157156} 
    158157 
    159 int     driver_jack_nonblock(struct roar_vio_calls * vio, int state) { 
    160  struct driver_jack * self = vio->inst; 
    161  // control if read and write calls should block untill all data is read or written. 
    162  // state could be: 
    163  //  ROAR_SOCKET_BLOCK    - Block untill the data is read or written 
    164  //  ROAR_SOCKET_NONBLOCK - Return as soon as possible 
    165  return -1; 
    166 } 
    167  
    168158int     driver_jack_sync    (struct roar_vio_calls * vio) { 
    169159 struct driver_jack * self = vio->inst; 
     
    200190    return 0; 
    201191   break; 
    202    case ROAR_VIO_CTL_GET_AUINFO: 
    203    case ROAR_VIO_CTL_SET_AUINFO: 
     192  case ROAR_VIO_CTL_NONBLOCK: 
     193 // control if read and write calls should block untill all data is read or written. 
     194 // state is in *(int*)data and could be: 
     195 //  ROAR_SOCKET_BLOCK    - Block untill the data is read or written 
     196 //  ROAR_SOCKET_NONBLOCK - Return as soon as possible 
     197   break; 
     198  case ROAR_VIO_CTL_GET_AUINFO: 
     199  case ROAR_VIO_CTL_SET_AUINFO: 
    204200    // get or set audio info, data is a struct roar_audio_info*. 
    205201    return -1; 
    206202   break; 
    207    case ROAR_VIO_CTL_GET_DBLKSIZE: 
    208    case ROAR_VIO_CTL_SET_DBLKSIZE: 
     203  case ROAR_VIO_CTL_GET_DBLKSIZE: 
     204  case ROAR_VIO_CTL_SET_DBLKSIZE: 
    209205     // get or set block size used, data is uint_least32_t*, number of bytes. 
    210206    return -1; 
    211207   break; 
    212    case ROAR_VIO_CTL_GET_DBLOCKS: 
    213    case ROAR_VIO_CTL_SET_DBLOCKS: 
     208  case ROAR_VIO_CTL_GET_DBLOCKS: 
     209  case ROAR_VIO_CTL_SET_DBLOCKS: 
    214210     // get or set number of blocks used, data is uint_least32_t*. 
    215211    return -1; 
    216212   break; 
    217    case ROAR_VIO_CTL_SET_SSTREAM: 
     213  case ROAR_VIO_CTL_SET_SSTREAM: 
    218214    // set server stream object for this stream, data is struct roar_stream_server* 
    219215    return -1; 
    220216   break; 
    221    case ROAR_VIO_CTL_SET_SSTREAMID: 
     217  case ROAR_VIO_CTL_SET_SSTREAMID: 
    222218    // set stream ID for this stream, data is int* 
    223219    return -1; 
    224220   break; 
    225    case ROAR_VIO_CTL_SET_VOLUME: 
     221  case ROAR_VIO_CTL_SET_VOLUME: 
    226222    // set volume for this device, data is struct roar_mixer_settings* 
    227223    return -1; 
    228224   break; 
    229    case ROAR_VIO_CTL_GET_DELAY: 
     225  case ROAR_VIO_CTL_GET_DELAY: 
    230226    // get delay of this stream, data is uint_least32_t*, in bytes 
    231227    // there is more about delay. please ask. 
  • roard/driver_oss.c

    r5055 r5276  
    3838 vio->write    = driver_oss_write; 
    3939 vio->read     = driver_oss_read; 
    40  vio->nonblock = driver_oss_nonblock; 
    4140 vio->sync     = driver_oss_sync; 
    4241 vio->ctl      = driver_oss_ctl; 
     
    448447} 
    449448 
    450 int     driver_oss_nonblock(struct roar_vio_calls * vio, int state) { 
    451  ROAR_DBG("driver_oss_nonblock(vio=%p, state=%i) = ?", vio, state); 
    452  
    453  if ( roar_socket_nonblock(_get(vio,fh), state) == -1 ) { 
    454   ROAR_DBG("driver_oss_nonblock(vio=%p, state=%i) = -1", vio, state); 
    455   return -1; 
    456  } 
    457  
    458  if ( state == ROAR_SOCKET_NONBLOCK ) { 
    459   ROAR_DBG("driver_oss_nonblock(vio=%p, state=%i) = 0", vio, state); 
    460   return 0; 
    461  } 
    462  
    463  roar_vio_sync(vio); 
    464  
    465  ROAR_DBG("driver_oss_nonblock(vio=%p, state=%i) = 0", vio, state); 
    466  
    467  return 0; 
    468 } 
    469  
    470449int driver_oss_sync(struct roar_vio_calls * vio) { 
    471450#ifdef SNDCTL_DSP_SYNC 
     
    558537   break; 
    559538#endif 
     539  case ROAR_VIO_CTL_NONBLOCK: 
     540    if ( roar_socket_nonblock(_get(vio,fh), *(int*)data) == -1 ) { 
     541     return -1; 
     542    } 
     543 
     544    if ( *(int*)data == ROAR_SOCKET_NONBLOCK ) { 
     545     return 0; 
     546    } 
     547 
     548    roar_vio_sync(vio); 
     549   break; 
    560550  default: 
    561551   return -1; 
  • roard/driver_portaudio.c

    r5134 r5276  
    124124 inst->close = driver_portaudio_close; 
    125125 inst->write = driver_portaudio_write; 
    126  inst->nonblock = driver_dummy_nonblock; 
     126 inst->ctl   = driver_dummy_ctl; 
    127127 
    128128 Pa_Initialize(); 
  • roard/driver_pulsesimple.c

    r5056 r5276  
    127127 inst->sync     = driver_pulsesimple_sync; 
    128128 inst->ctl      = driver_pulsesimple_ctl; 
    129  inst->nonblock = driver_dummy_nonblock; 
    130129 
    131130 return 0; 
     
    167166 ROAR_DBG("driver_pulsesimple_ctl(vio=%p) = ?", vio); 
    168167 
     168 switch (cmd) { 
     169  case ROAR_VIO_CTL_NONBLOCK: 
     170    if ( *(int*)data == ROAR_SOCKET_BLOCK ) 
     171     return 0; 
     172    roar_err_set(ROAR_ERROR_NOTSUP); 
     173    return -1; 
     174   break; 
     175 } 
     176 
     177 roar_err_set(ROAR_ERROR_NOSYS); 
    169178 return -1; 
    170179} 
  • roard/driver_pwmled.c

    r4957 r5276  
    6262 inst->write    = driver_pwmled_write; 
    6363 inst->lseek    = NULL; 
    64  inst->nonblock = NULL; 
    6564 inst->sync     = NULL; 
    6665 inst->ctl      = driver_pwmled_ctl; 
  • roard/driver_rsound.c

    r5107 r5276  
    171171 inst->close    = driver_rsound_close; 
    172172 inst->write    = driver_rsound_write; 
    173  inst->nonblock = driver_dummy_nonblock; 
     173 inst->ctl      = driver_dummy_ctl; 
    174174 
    175175 return 0; 
  • roard/driver_shout.c

    r5012 r5276  
    202202 inst->write    = driver_shout_write; 
    203203 inst->close    = driver_shout_close; 
    204  inst->nonblock = driver_dummy_nonblock; 
     204 inst->ctl      = driver_dummy_ctl; 
    205205 
    206206 return 0; 
  • roard/driver_sndio.c

    r5105 r5276  
    265265    return sio_setvol(self->shandle, d) == 0 ? -1 : 0; 
    266266   break; 
     267  case ROAR_VIO_CTL_NONBLOCK: 
     268    if ( *(int*)data == ROAR_SOCKET_BLOCK ) 
     269     return 0; 
     270    roar_err_set(ROAR_ERROR_NOTSUP); 
     271    return -1; 
     272   break; 
    267273  default: 
    268274    return -1; 
  • roard/driver_sysclock.c

    r5012 r5276  
    4242 inst->inst     = self; 
    4343 inst->close    = driver_sysclock_close; 
    44  inst->nonblock = driver_dummy_nonblock; 
    4544 inst->write    = driver_sysclock_write; 
     45 inst->ctl      = driver_dummy_ctl; 
    4646 
    4747 self->bps      = roar_info2bitspersec(info)/8; 
  • roard/driver_wmm.c

    r5062 r5276  
    191191 inst->close    = driver_wmm_close_vio; 
    192192 inst->write    = driver_wmm_write; 
    193  inst->nonblock = driver_dummy_nonblock; 
     193 inst->ctl      = driver_dummy_ctl; 
    194194 
    195195 info->codec = ROAR_CODEC_PCM_S_LE; 
  • roard/include/driver.h

    r5245 r5276  
    159159#endif 
    160160 
    161 int  driver_dummy_nonblock(struct roar_vio_calls * vio, int state); 
     161int  driver_dummy_ctl(struct roar_vio_calls * vio, int cmd, void * data); 
    162162 
    163163#endif 
  • roard/include/driver_oss.h

    r4815 r5276  
    4646ssize_t driver_oss_write    (struct roar_vio_calls * vio, void *buf, size_t count); 
    4747ssize_t driver_oss_read     (struct roar_vio_calls * vio, void *buf, size_t count); 
    48 int     driver_oss_nonblock (struct roar_vio_calls * vio, int state); 
    4948int     driver_oss_close_vio(struct roar_vio_calls * vio); 
    5049int     driver_oss_reopen_device(struct driver_oss * self); 
  • roard/include/midi.h

    r5194 r5276  
    174174// dummys: 
    175175int     midi_vio_set_dummy(int stream); 
     176int     midi_vio_ctl(struct roar_vio_calls * vio, int cmd, void * data); 
    176177int     midi_vio_ok(struct roar_vio_calls * vio, ...); 
    177178 
  • roard/midi.c

    r5210 r5276  
    10581058 ss->vio.write    = NULL; 
    10591059 ss->vio.lseek    = NULL; 
    1060  ss->vio.nonblock = (int (*)(struct roar_vio_calls * vio, int state))midi_vio_ok; 
    10611060 ss->vio.sync     = (int (*)(struct roar_vio_calls * vio))midi_vio_ok; 
    1062  ss->vio.ctl      = NULL; 
     1061 ss->vio.ctl      = midi_vio_ctl; 
    10631062 ss->vio.close    = (int (*)(struct roar_vio_calls * vio))midi_vio_ok; 
    10641063 
     
    10661065} 
    10671066 
     1067int midi_vio_ctl(struct roar_vio_calls * vio, int cmd, void * data) { 
     1068 if ( cmd == ROAR_VIO_CTL_NONBLOCK ) 
     1069  return 0; 
     1070 return -1; 
     1071} 
     1072 
    10681073int     midi_vio_ok(struct roar_vio_calls * vio, ...) { 
    10691074 return 0; 
  • roard/sources.c

    r5246 r5276  
    418418} 
    419419 
     420static int  sources_radionoise_ctl(struct roar_vio_calls * vio, int cmd, void * data) { 
     421 if ( cmd == ROAR_VIO_CTL_NONBLOCK ) 
     422  return 0; 
     423 
     424 roar_err_set(ROAR_ERROR_BADRQC); 
     425 return -1; 
     426} 
     427 
    420428int sources_add_radionoise (int stream, const char * device, int fh, const char * driver) { 
    421429 struct roar_stream_server * ss; 
     
    437445 ss->vio.close    = sources_radionoise_return_zero; 
    438446 ss->vio.sync     = sources_radionoise_return_zero; 
    439  ss->vio.nonblock = (int (*)(struct roar_vio_calls * vio, int state))sources_radionoise_return_zero; 
     447 ss->vio.ctl      = sources_radionoise_ctl; 
    440448 
    441449 return streams_set_fh(stream, -2); 
Note: See TracChangeset for help on using the changeset viewer.