mixer.c (144999) | mixer.c (153953) |
---|---|
1/* 2 * This is an example of a mixer program for Linux 3 * 4 * updated 1/1/93 to add stereo, level query, broken 5 * devmask kludge - cmetz@thor.tjhsst.edu 6 * 7 * (C) Craig Metz and Hannu Savolainen 1993. 8 * 9 * You may do anything you wish with this program. 10 * 11 * ditto for my modifications (John-Mark Gurney, 1997) 12 */ 13 14#include <sys/cdefs.h> | 1/* 2 * This is an example of a mixer program for Linux 3 * 4 * updated 1/1/93 to add stereo, level query, broken 5 * devmask kludge - cmetz@thor.tjhsst.edu 6 * 7 * (C) Craig Metz and Hannu Savolainen 1993. 8 * 9 * You may do anything you wish with this program. 10 * 11 * ditto for my modifications (John-Mark Gurney, 1997) 12 */ 13 14#include <sys/cdefs.h> |
15__FBSDID("$FreeBSD: head/usr.sbin/mixer/mixer.c 144999 2005-04-13 07:11:54Z mdodd $"); | 15__FBSDID("$FreeBSD: head/usr.sbin/mixer/mixer.c 153953 2006-01-01 20:19:49Z ariff $"); |
16 17#include <err.h> 18#include <fcntl.h> 19#include <stdio.h> 20#include <string.h> 21#include <stdlib.h> 22#include <unistd.h> 23#include <sys/soundcard.h> 24 25const char *names[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES; 26 27void usage(int devmask, int recmask); 28int res_name(const char *name, int mask); | 16 17#include <err.h> 18#include <fcntl.h> 19#include <stdio.h> 20#include <string.h> 21#include <stdlib.h> 22#include <unistd.h> 23#include <sys/soundcard.h> 24 25const char *names[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES; 26 27void usage(int devmask, int recmask); 28int res_name(const char *name, int mask); |
29void print_recsrc(int recsrc); | 29void print_recsrc(int recsrc, int shortflag); |
30 31void 32usage(int devmask, int recmask) 33{ 34 int i, n; 35 36 printf("usage: mixer [-f device] [-s | -S] [dev [+|-][voll[:[+|-]volr]] ...\n" 37 " mixer [-f device] [-s | -S] recsrc ...\n" --- 26 unchanged lines hidden (view full) --- 64 for (foo = 0; foo < SOUND_MIXER_NRDEVICES; foo++) 65 if ((1 << foo) & mask && !strcmp(names[foo], name)) 66 break; 67 68 return foo == SOUND_MIXER_NRDEVICES ? -1 : foo; 69} 70 71void | 30 31void 32usage(int devmask, int recmask) 33{ 34 int i, n; 35 36 printf("usage: mixer [-f device] [-s | -S] [dev [+|-][voll[:[+|-]volr]] ...\n" 37 " mixer [-f device] [-s | -S] recsrc ...\n" --- 26 unchanged lines hidden (view full) --- 64 for (foo = 0; foo < SOUND_MIXER_NRDEVICES; foo++) 65 if ((1 << foo) & mask && !strcmp(names[foo], name)) 66 break; 67 68 return foo == SOUND_MIXER_NRDEVICES ? -1 : foo; 69} 70 71void |
72print_recsrc(int recsrc) | 72print_recsrc(int recsrc, int shortflag) |
73{ 74 int i, n = 0; | 73{ 74 int i, n = 0; |
75 fprintf(stderr, "Recording source: "); | |
76 | 75 |
76 if (!shortflag) 77 printf("Recording source: "); 78 |
|
77 for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) 78 if ((1 << i) & recsrc) { | 79 for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) 80 if ((1 << i) & recsrc) { |
79 if (n) 80 fprintf(stderr, ", "); 81 fprintf(stderr, "%s", names[i]); | 81 if (shortflag) { 82 if (n) 83 printf(" +rec "); 84 else 85 printf("=rec "); 86 } else if (n) 87 printf(", "); 88 printf("%s", names[i]); |
82 n = 1; 83 } | 89 n = 1; 90 } |
84 fprintf(stderr, "\n"); | 91 if (!shortflag) 92 printf("\n"); |
85} 86 87int 88main(int argc, char *argv[]) 89{ 90 int foo, bar, baz, dev; 91 int devmask = 0, recmask = 0, recsrc = 0, orecsrc; 92 int dusage = 0, drecsrc = 0, shortflag = 0, Shortflag = 0; 93 int l = 0, r = 0, t = 0; 94 char lstr[5], rstr[5]; 95 int n = 0, lrel = 0, rrel = 0; 96 int ch; 97 98 char *name; 99 | 93} 94 95int 96main(int argc, char *argv[]) 97{ 98 int foo, bar, baz, dev; 99 int devmask = 0, recmask = 0, recsrc = 0, orecsrc; 100 int dusage = 0, drecsrc = 0, shortflag = 0, Shortflag = 0; 101 int l = 0, r = 0, t = 0; 102 char lstr[5], rstr[5]; 103 int n = 0, lrel = 0, rrel = 0; 104 int ch; 105 106 char *name; 107 |
100 name = strdup("/dev/mixer"); | 108 name = "/dev/mixer"; |
101 102 if (!strcmp(argv[0], "mixer2")) | 109 110 if (!strcmp(argv[0], "mixer2")) |
103 name = strdup("/dev/mixer1"); | 111 name = "/dev/mixer1"; |
104 else if (!strcmp(argv[0], "mixer3")) | 112 else if (!strcmp(argv[0], "mixer3")) |
105 name = strdup("/dev/mixer2"); | 113 name = "/dev/mixer2"; |
106 107 while ((ch = getopt(argc, argv, "f:sS")) != -1) 108 switch (ch) { 109 case 'f': | 114 115 while ((ch = getopt(argc, argv, "f:sS")) != -1) 116 switch (ch) { 117 case 'f': |
110 name = strdup(optarg); | 118 name = optarg; |
111 break; 112 case 's': 113 shortflag = 1; 114 break; 115 case 'S': 116 Shortflag = 1; 117 break; 118 default: 119 dusage = 1; 120 } 121 argc -= (optind - 1); 122 argv += (optind - 1); 123 124 if ((baz = open(name, O_RDWR)) < 0) 125 err(1, "%s", name); | 119 break; 120 case 's': 121 shortflag = 1; 122 break; 123 case 'S': 124 Shortflag = 1; 125 break; 126 default: 127 dusage = 1; 128 } 129 argc -= (optind - 1); 130 argv += (optind - 1); 131 132 if ((baz = open(name, O_RDWR)) < 0) 133 err(1, "%s", name); |
126 free(name); | |
127 if (ioctl(baz, SOUND_MIXER_READ_DEVMASK, &devmask) == -1) 128 err(1, "SOUND_MIXER_READ_DEVMASK"); 129 if (ioctl(baz, SOUND_MIXER_READ_RECMASK, &recmask) == -1) 130 err(1, "SOUND_MIXER_READ_RECMASK"); 131 if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1) 132 err(1, "SOUND_MIXER_READ_RECSRC"); 133 orecsrc = recsrc; 134 --- 12 unchanged lines hidden (view full) --- 147 printf("%s %d:%d ", names[foo], bar & 0x7f, 148 (bar >> 8) & 0x7f); 149 else 150 printf("Mixer %-8s is currently set to %3d:%d\n", 151 names[foo], bar & 0x7f, (bar >> 8) & 0x7f); 152 } 153 if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1) 154 err(1, "SOUND_MIXER_READ_RECSRC"); | 134 if (ioctl(baz, SOUND_MIXER_READ_DEVMASK, &devmask) == -1) 135 err(1, "SOUND_MIXER_READ_DEVMASK"); 136 if (ioctl(baz, SOUND_MIXER_READ_RECMASK, &recmask) == -1) 137 err(1, "SOUND_MIXER_READ_RECMASK"); 138 if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1) 139 err(1, "SOUND_MIXER_READ_RECSRC"); 140 orecsrc = recsrc; 141 --- 12 unchanged lines hidden (view full) --- 154 printf("%s %d:%d ", names[foo], bar & 0x7f, 155 (bar >> 8) & 0x7f); 156 else 157 printf("Mixer %-8s is currently set to %3d:%d\n", 158 names[foo], bar & 0x7f, (bar >> 8) & 0x7f); 159 } 160 if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1) 161 err(1, "SOUND_MIXER_READ_RECSRC"); |
155 print_recsrc(recsrc); | 162 print_recsrc(recsrc, shortflag || Shortflag); |
156 return(0); 157 } 158 159 argc--; argv++; 160 161 while ((argc > 0) && (dusage == 0)) { 162 if (!strcmp("recsrc", *argv)) { 163 drecsrc = 1; --- 119 unchanged lines hidden (view full) --- 283 284 if (orecsrc != recsrc) 285 if (ioctl(baz, SOUND_MIXER_WRITE_RECSRC, &recsrc) == -1) 286 err(1, "SOUND_MIXER_WRITE_RECSRC"); 287 288 if (drecsrc) { 289 if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1) 290 err(1, "SOUND_MIXER_READ_RECSRC"); | 163 return(0); 164 } 165 166 argc--; argv++; 167 168 while ((argc > 0) && (dusage == 0)) { 169 if (!strcmp("recsrc", *argv)) { 170 drecsrc = 1; --- 119 unchanged lines hidden (view full) --- 290 291 if (orecsrc != recsrc) 292 if (ioctl(baz, SOUND_MIXER_WRITE_RECSRC, &recsrc) == -1) 293 err(1, "SOUND_MIXER_WRITE_RECSRC"); 294 295 if (drecsrc) { 296 if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1) 297 err(1, "SOUND_MIXER_READ_RECSRC"); |
291 print_recsrc(recsrc); | 298 print_recsrc(recsrc, shortflag || Shortflag); |
292 } 293 294 close(baz); 295 296 exit(0); 297} | 299 } 300 301 close(baz); 302 303 exit(0); 304} |