diff options
Diffstat (limited to 'tutorials/sndkit/sblive/writegpr.c')
-rw-r--r-- | tutorials/sndkit/sblive/writegpr.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tutorials/sndkit/sblive/writegpr.c b/tutorials/sndkit/sblive/writegpr.c new file mode 100644 index 0000000..c70e191 --- /dev/null +++ b/tutorials/sndkit/sblive/writegpr.c @@ -0,0 +1,48 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <fcntl.h> +#include <string.h> +#include <sys/ioctl.h> +#define oss_native_ulong unsigned long +#define sound_os_info unsigned long +#define ac97_devc unsigned long +typedef int oss_mutex; +#include <soundcard.h> +#include <sblive.h> + +int +main (int argc, char *argv[]) +{ + int ossfd, reg, value; + char *dspname = "/dev/dsp"; + sblive_reg rg; + + if (argc < 3) + { + fprintf (stderr, "Usage: %s GPR hexvalue\n", argv[0]); + exit (-1); + } + + if (sscanf (argv[1], "%d", ®) != 1) + exit (-1); + + if (sscanf (argv[2], "%x", &value) != 1) + exit (-1); + + if ((ossfd = open (dspname, O_WRONLY, 0)) == -1) + { + perror (dspname); + exit (-1); + } + + rg.reg = GPR0 + reg; + rg.chn = 0; + rg.value = value; + + if (ioctl (ossfd, SBLIVE_WRITEREG, &rg) == -1) + perror (dspname); + + + exit (0); +} |