$OpenBSD: patch-src_rmd_opendev_c,v 1.2 2010/07/01 10:10:09 jakemsr Exp $

sndio

--- src/rmd_opendev.c.orig	Sat Dec 13 08:10:49 2008
+++ src/rmd_opendev.c	Wed Jun 30 21:21:27 2010
@@ -27,12 +27,14 @@
 #include "config.h"
 #include "rmd_opendev.h"
 
+#if 0
 #ifdef HAVE_LIBASOUND
     #include <alsa/asoundlib.h>
 #else
     #include <sys/ioctl.h>
     #include <sys/soundcard.h>
 #endif
+#endif
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -129,48 +131,48 @@ snd_pcm_t *OpenDev( const char *pcm_dev,
 
 #else
 
-int OpenDev( const char *pcm_dev,
+struct sio_hdl * OpenDev( const char *pcm_dev,
              unsigned int channels,
              unsigned int frequency){
-    int fd ;
-    fd=open(pcm_dev,O_RDONLY);
+    struct sio_hdl *hdl;
+    struct sio_par par;
 
-    if(fd!=-1){
+    hdl=sio_open(NULL,SIO_REC,0);
+
+    if(hdl!=NULL){
         unsigned int value;
 
-        if(ioctl(fd,SNDCTL_DSP_GETFMTS,&value)<0){
-            fprintf(stderr,"Couldn't get audio format list\n");
-            return -1;
+        sio_initpar(&par);
+        par.bits = 16;
+        par.sig = 1;
+        par.le = SIO_LE_NATIVE;
+        par.rchan = channels;
+        par.rate = frequency;
+
+        if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par)) {
+            fprintf(stderr,"Couldn't set audio format\n" );
+            return NULL;
         }
-        if(value & AFMT_S16_LE){
-            value=AFMT_S16_LE;
-        }
-        else if(value & AFMT_S16_BE){
-            value=AFMT_S16_BE;
-        }
-        else{
+
+        if (par.bits != 16 || par.sig != 1 || par.le != SIO_LE_NATIVE) {
             fprintf(stderr,"Soundcard doesn't support signed 16-bit-data\n");
-            return -1;
+            return NULL;
         }
-        if(ioctl(fd,SNDCTL_DSP_SETFMT,&value)<0){
-            fprintf(stderr,"Couldn't set audio format\n" );
-            return -1;
+	if (par.rate != frequency) {
+            fprintf(stderr,"Soundcard doesn't support %d sample rate\n", frequency);
+            return NULL;
+	}
+	if (par.rchan != channels) {
+            fprintf(stderr,"Soundcard doesn't support %d channels\n", channels);
+            return NULL;
+	}
+
+        if (!sio_start(hdl)) {
+            fprintf(stderr,"Couldn't start sndio\n");
+            return NULL;
         }
-        value = channels;
-        if(ioctl(fd,SNDCTL_DSP_CHANNELS,&value)<0){
-            fprintf(stderr,"Cannot set the number of channels\n" );
-            return -1;
-        }
-        value = frequency;
-        if(ioctl(fd,SNDCTL_DSP_SPEED,&value)<0){
-            fprintf(stderr,"Couldn't set audio frequency\n" );
-            return -1;
-        }
-        if(fcntl(fd,F_SETFL,fcntl(fd,F_GETFL) & ~O_NONBLOCK)<0){
-            fprintf(stderr,"Couldn't set audio blocking mode\n" );
-            return -1;
-        }
+
     }
-    return fd;
+    return hdl;
 }
 #endif
