1d5ac70f0Sopenharmony_ci#include <stdio.h> 2d5ac70f0Sopenharmony_ci#include <stdlib.h> 3d5ac70f0Sopenharmony_ci#include <string.h> 4d5ac70f0Sopenharmony_ci#include <sched.h> 5d5ac70f0Sopenharmony_ci#include <errno.h> 6d5ac70f0Sopenharmony_ci#include <getopt.h> 7d5ac70f0Sopenharmony_ci#include "../include/mixer_ordinary.h" 8d5ac70f0Sopenharmony_ci#include <sys/time.h> 9d5ac70f0Sopenharmony_ci#include <math.h> 10d5ac70f0Sopenharmony_ci 11d5ac70f0Sopenharmony_cistatic void help(void) 12d5ac70f0Sopenharmony_ci{ 13d5ac70f0Sopenharmony_ci printf( 14d5ac70f0Sopenharmony_ci"Usage: omixer [OPTION]...\n\n" 15d5ac70f0Sopenharmony_ci"-h,--help help\n" 16d5ac70f0Sopenharmony_ci"-P,--pname playback PCM device\n" 17d5ac70f0Sopenharmony_ci"-C,--cname capture PCM device\n" 18d5ac70f0Sopenharmony_ci); 19d5ac70f0Sopenharmony_ci} 20d5ac70f0Sopenharmony_ci 21d5ac70f0Sopenharmony_ciint main(int argc, char *argv[]) 22d5ac70f0Sopenharmony_ci{ 23d5ac70f0Sopenharmony_ci struct option long_option[] = 24d5ac70f0Sopenharmony_ci { 25d5ac70f0Sopenharmony_ci {"help", 0, NULL, 'h'}, 26d5ac70f0Sopenharmony_ci {"pname", 1, NULL, 'P'}, 27d5ac70f0Sopenharmony_ci {"cname", 1, NULL, 'C'}, 28d5ac70f0Sopenharmony_ci {NULL, 0, NULL, 0}, 29d5ac70f0Sopenharmony_ci }; 30d5ac70f0Sopenharmony_ci int err, morehelp, result = EXIT_SUCCESS; 31d5ac70f0Sopenharmony_ci char *pname = "default", *cname = "default"; 32d5ac70f0Sopenharmony_ci snd_pcm_t *phandle = NULL, *chandle = NULL; 33d5ac70f0Sopenharmony_ci sndo_mixer_t *handle; 34d5ac70f0Sopenharmony_ci 35d5ac70f0Sopenharmony_ci morehelp = 0; 36d5ac70f0Sopenharmony_ci while (1) { 37d5ac70f0Sopenharmony_ci int c; 38d5ac70f0Sopenharmony_ci if ((c = getopt_long(argc, argv, "hP:C:", long_option, NULL)) < 0) 39d5ac70f0Sopenharmony_ci break; 40d5ac70f0Sopenharmony_ci switch (c) { 41d5ac70f0Sopenharmony_ci case 'h': 42d5ac70f0Sopenharmony_ci morehelp++; 43d5ac70f0Sopenharmony_ci break; 44d5ac70f0Sopenharmony_ci case 'P': 45d5ac70f0Sopenharmony_ci pname = strdup(optarg); 46d5ac70f0Sopenharmony_ci break; 47d5ac70f0Sopenharmony_ci case 'C': 48d5ac70f0Sopenharmony_ci cname = strdup(optarg); 49d5ac70f0Sopenharmony_ci break; 50d5ac70f0Sopenharmony_ci } 51d5ac70f0Sopenharmony_ci } 52d5ac70f0Sopenharmony_ci 53d5ac70f0Sopenharmony_ci if (morehelp) { 54d5ac70f0Sopenharmony_ci help(); 55d5ac70f0Sopenharmony_ci return 0; 56d5ac70f0Sopenharmony_ci } 57d5ac70f0Sopenharmony_ci 58d5ac70f0Sopenharmony_ci if (strcmp(pname, "-")) { 59d5ac70f0Sopenharmony_ci err = snd_pcm_open(&phandle, pname, SND_PCM_STREAM_PLAYBACK, 0); 60d5ac70f0Sopenharmony_ci if (err < 0) { 61d5ac70f0Sopenharmony_ci fprintf(stderr, "Playback PCM open error: %s\n", snd_strerror(err)); 62d5ac70f0Sopenharmony_ci result = EXIT_FAILURE; 63d5ac70f0Sopenharmony_ci goto __end; 64d5ac70f0Sopenharmony_ci } 65d5ac70f0Sopenharmony_ci } 66d5ac70f0Sopenharmony_ci 67d5ac70f0Sopenharmony_ci if (strcmp(cname, "-")) { 68d5ac70f0Sopenharmony_ci err = snd_pcm_open(&chandle, cname, SND_PCM_STREAM_CAPTURE, 0); 69d5ac70f0Sopenharmony_ci if (err < 0) { 70d5ac70f0Sopenharmony_ci if (phandle) 71d5ac70f0Sopenharmony_ci snd_pcm_close(phandle); 72d5ac70f0Sopenharmony_ci fprintf(stderr, "Capture PCM open error: %s\n", snd_strerror(err)); 73d5ac70f0Sopenharmony_ci result = EXIT_FAILURE; 74d5ac70f0Sopenharmony_ci goto __end; 75d5ac70f0Sopenharmony_ci } 76d5ac70f0Sopenharmony_ci } 77d5ac70f0Sopenharmony_ci 78d5ac70f0Sopenharmony_ci err = sndo_mixer_open_pcm(&handle, phandle, chandle, NULL); 79d5ac70f0Sopenharmony_ci if (err < 0) { 80d5ac70f0Sopenharmony_ci fprintf(stderr, "mixer open error: %s\n", snd_strerror(err)); 81d5ac70f0Sopenharmony_ci result = EXIT_FAILURE; 82d5ac70f0Sopenharmony_ci } else { 83d5ac70f0Sopenharmony_ci sndo_mixer_close(handle); 84d5ac70f0Sopenharmony_ci } 85d5ac70f0Sopenharmony_ci __end: 86d5ac70f0Sopenharmony_ci if (chandle) 87d5ac70f0Sopenharmony_ci snd_pcm_close(chandle); 88d5ac70f0Sopenharmony_ci if (phandle) 89d5ac70f0Sopenharmony_ci snd_pcm_close(phandle); 90d5ac70f0Sopenharmony_ci snd_config_update_free_global(); /* to keep valgrind happy */ 91d5ac70f0Sopenharmony_ci return result; 92d5ac70f0Sopenharmony_ci} 93