00001
00043
00044
00045
00046
00047
00048
00049
00050 #include <sent/stddefs.h>
00051 #include <sent/adin.h>
00052
00053 #include <sys/types.h>
00054 #include <sys/stat.h>
00055 #include <fcntl.h>
00056 #include <errno.h>
00057 #include <sys/stropts.h>
00058
00059
00060 #include <sys/audioio.h>
00061 static int afd;
00062 static struct audio_info ainfo;
00063
00065 #define DEFAULT_DEVICE "/dev/audio"
00066
00075 boolean
00076 adin_mic_standby(int sfreq, void *arg)
00077 {
00078 char *defaultdev = DEFAULT_DEVICE;
00079 char *devname;
00080
00081
00082 if ((devname = getenv("AUDIODEV")) == NULL) {
00083 devname = defaultdev;
00084 }
00085
00086
00087 if ((afd = open(devname, O_RDONLY)) == -1) {
00088 perror("adin_mic_standby: open audio device");
00089 return(FALSE);
00090 }
00091
00092 #if 0
00093 {
00094
00095 struct audio_device adev;
00096 if (ioctl(afd, AUDIO_GETDEV, &adev)== -1) {
00097 perror("adin_mic_standby: AUDIO_GETDEV");
00098 return(FALSE);
00099 }
00100 j_printf("Hardware name: %s\n",adev.name);
00101 j_printf("Hardware version: %s\n", adev.version);
00102 j_printf("Properties: %s\n", adev.config);
00103 }
00104 #endif
00105
00106
00107 if (ioctl(afd, AUDIO_GETINFO, &ainfo) == -1) {
00108 perror("adin_mic_standby: AUDIO_GETINFO");
00109 return(FALSE);
00110 }
00111
00112 ainfo.record.pause = 1;
00113 if (ioctl(afd, AUDIO_SETINFO, &ainfo) == -1) {
00114 perror("adin_mic_standby: AUDIO_SETINFO");
00115 return(FALSE);
00116 }
00117
00118 if((ioctl(afd , I_FLUSH , FLUSHR)) == -1) {
00119 perror("adin_mic_standby: I_FLUSH");
00120 return(FALSE);
00121 }
00122
00123 ainfo.record.sample_rate = sfreq;
00124 ainfo.record.channels = 1;
00125 ainfo.record.precision = 16;
00126 ainfo.record.encoding = AUDIO_ENCODING_LINEAR;
00127
00128 ainfo.record.port = AUDIO_MICROPHONE;
00129
00130 ainfo.record.pause = 1;
00131
00132
00133 if (ioctl(afd, AUDIO_SETINFO, &ainfo) == -1) {
00134 perror("adin_mic_standby: AUDIO_SETINFO");
00135 return(FALSE);
00136 }
00137
00138 return(TRUE);
00139
00140 }
00141
00147 boolean
00148 adin_mic_start()
00149 {
00150 if (ioctl(afd, AUDIO_GETINFO, &ainfo) == -1) {
00151 perror("adin_mic_start: AUDIO_GETINFO");
00152 return(FALSE);
00153 }
00154 ainfo.record.pause = 0;
00155 if (ioctl(afd, AUDIO_SETINFO, &ainfo) == -1) {
00156 perror("adin_mic_start: AUDIO_SETINFO");
00157 return(FALSE);
00158 }
00159
00160 return(TRUE);
00161 }
00162
00168 boolean
00169 adin_mic_stop()
00170 {
00171 if (ioctl(afd, AUDIO_GETINFO, &ainfo) == -1) {
00172 perror("adin_mic_stop: AUDIO_GETINFO");
00173 return(FALSE);
00174 }
00175 ainfo.record.pause = 1;
00176 if (ioctl(afd, AUDIO_SETINFO, &ainfo) == -1) {
00177 perror("adin_mic_stop: AUDIO_SETINFO");
00178 return(FALSE);
00179 }
00180 return(TRUE);
00181 }
00182
00195 int
00196 adin_mic_read(SP16 *buf, int sampnum)
00197 {
00198 int cnt;
00199 cnt = read(afd, buf, sampnum * sizeof(SP16)) / sizeof(SP16);
00200 if (cnt < 0) {
00201 perror("adin_mic_read: failed to read sample\n");
00202 return(-2);
00203 }
00204 return(cnt);
00205 }