//Source for a wamixer test program capable to change all mixer registers // in real time... //Woody, April 1998 #include #include #include #include #include #include #define MIXER_PRIVATE3_RESET 0x53570000 #define MIXER_PRIVATE3_READ 0x53570001 #define MIXER_PRIVATE3_WRITE 0x53570002 int mixer_fd=-1; unsigned supported; int source; int mixer_regs[15]; main(int argc, char *argv[]) { unsigned int r, d; mixer_fd=open("/dev/mixer",O_RDWR); if(mixer_fd<0){ perror("wamixer: Mixer not found!"); exit(-1); } mixer_regs[0x0E] = MIXER_PRIVATE3_READ; source = &mixer_regs; source = ioctl(mixer_fd,SOUND_MIXER_PRIVATE3,&source); if (source < 0) printf("Mixer Private read returned error 0x%X!\n", source); if (argc == 1) { printf("0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014\n"); for (r=0; r<14; r++) printf("%04X ", mixer_regs[r]); printf("\n"); } else if (argc%2 == 1) { while (argc > 1) { r = atoi(argv[1]); sscanf(argv[2], "%i", &d); printf("Register %d <- %04X\n", r, d); mixer_regs[r-1] = d; argc -= 2; argv += 2; } mixer_regs[0x0E] = MIXER_PRIVATE3_WRITE; source = &mixer_regs; source = ioctl(mixer_fd,SOUND_MIXER_PRIVATE3,&source); if (source < 0) printf("Mixer Private write returned error 0x%X!\n", source); } else { printf("usage: wamixer - dump registers\n"); printf(" wamixer reg val [reg val ...] - program WA mixer register\n"); printf(" reg is decimal, value is hex (0x..) or decimal\n"); printf(" For example:-\n"); printf(" wamixer 9 0x982D 4 0x4C08 8 0x8C08\n"); exit(1); } close(mixer_fd); }