xref: /freebsd/contrib/netbsd-tests/dev/audio/h_pad.c (revision d370fd1cd8fc69e87dc63f4f4a82e5a8b4956c93)
1*cdebaff8SEnji Cooper /*	$NetBSD: h_pad.c,v 1.2 2016/10/15 07:08:06 nat Exp $	*/
257718be8SEnji Cooper 
357718be8SEnji Cooper /*
457718be8SEnji Cooper  * Copyright (c) 2010 Antti Kantee.  All Rights Reserved.
557718be8SEnji Cooper  *
657718be8SEnji Cooper  * Redistribution and use in source and binary forms, with or without
757718be8SEnji Cooper  * modification, are permitted provided that the following conditions
857718be8SEnji Cooper  * are met:
957718be8SEnji Cooper  * 1. Redistributions of source code must retain the above copyright
1057718be8SEnji Cooper  *    notice, this list of conditions and the following disclaimer.
1157718be8SEnji Cooper  * 2. Redistributions in binary form must reproduce the above copyright
1257718be8SEnji Cooper  *    notice, this list of conditions and the following disclaimer in the
1357718be8SEnji Cooper  *    documentation and/or other materials provided with the distribution.
1457718be8SEnji Cooper  *
1557718be8SEnji Cooper  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
1657718be8SEnji Cooper  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
1757718be8SEnji Cooper  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1857718be8SEnji Cooper  * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1957718be8SEnji Cooper  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2057718be8SEnji Cooper  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
2157718be8SEnji Cooper  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2257718be8SEnji Cooper  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2357718be8SEnji Cooper  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2457718be8SEnji Cooper  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2557718be8SEnji Cooper  * SUCH DAMAGE.
2657718be8SEnji Cooper  */
2757718be8SEnji Cooper 
2857718be8SEnji Cooper #include <sys/types.h>
2957718be8SEnji Cooper 
3057718be8SEnji Cooper #include <rump/rump.h>
3157718be8SEnji Cooper #include <rump/rump_syscalls.h>
3257718be8SEnji Cooper 
3357718be8SEnji Cooper #include <err.h>
3457718be8SEnji Cooper #include <fcntl.h>
3557718be8SEnji Cooper #include <stdio.h>
3657718be8SEnji Cooper #include <stdlib.h>
3757718be8SEnji Cooper #include <string.h>
3857718be8SEnji Cooper #include <unistd.h>
3957718be8SEnji Cooper 
4057718be8SEnji Cooper #include "h_pad_musa.c"
4157718be8SEnji Cooper 
4257718be8SEnji Cooper /*
4357718be8SEnji Cooper  * Stuff some audio into /dev/audio, read it from /dev/pad.  Use in
4457718be8SEnji Cooper  * conjunction with t_pad, which tests that we got sensible output
4557718be8SEnji Cooper  * by comparing against a previous audibly good result.
4657718be8SEnji Cooper  */
4757718be8SEnji Cooper 
4857718be8SEnji Cooper #define BUFSIZE 1024
4957718be8SEnji Cooper 
5057718be8SEnji Cooper int
main(int argc,char * argv[])5157718be8SEnji Cooper main(int argc, char *argv[])
5257718be8SEnji Cooper {
5357718be8SEnji Cooper 	char buf[BUFSIZE];
5457718be8SEnji Cooper 	char zeros[BUFSIZE];
5557718be8SEnji Cooper 	int padfd, audiofd;
5657718be8SEnji Cooper 	ssize_t n;
5757718be8SEnji Cooper 
5857718be8SEnji Cooper 	rump_init();
5957718be8SEnji Cooper 	padfd = rump_sys_open("/dev/pad0", O_RDONLY);
6057718be8SEnji Cooper 	if (padfd == -1)
6157718be8SEnji Cooper 		err(1, "open pad");
6257718be8SEnji Cooper 
63*cdebaff8SEnji Cooper 	audiofd = rump_sys_open("/dev/audio0", O_RDWR);
64*cdebaff8SEnji Cooper 	if (audiofd == -1)
65*cdebaff8SEnji Cooper 		err(1, "open audio");
66*cdebaff8SEnji Cooper 
6757718be8SEnji Cooper 	if ((n = rump_sys_write(audiofd, musa, sizeof(musa))) != sizeof(musa))
6857718be8SEnji Cooper 		err(1, "write");
6957718be8SEnji Cooper 
7057718be8SEnji Cooper 	memset(zeros, 0, sizeof(zeros));
7157718be8SEnji Cooper 	while ((n = rump_sys_read(padfd, buf, sizeof(buf))) > 0) {
7257718be8SEnji Cooper 		if (memcmp(buf, zeros, sizeof(buf)) == 0)
7357718be8SEnji Cooper 			break;
7457718be8SEnji Cooper 		write(STDOUT_FILENO, buf, n);
7557718be8SEnji Cooper 	}
7657718be8SEnji Cooper }
77