#include <stdio.h>
#include <fcntl.h>

#include <unistd.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>

#include <linux/soundcard.h>

#include "mixer.h"





int main()
{
   int i;
   int fd;
   int result;
   int value[256];
   char *text[2][25] =
   {
      {
         "SOUND_MIXER_READ_VOLUME",
         "SOUND_MIXER_READ_BASS",
         "SOUND_MIXER_READ_TREBLE",
         "SOUND_MIXER_READ_SYNTH",
         "SOUND_MIXER_READ_PCM",
         "SOUND_MIXER_READ_SPEAKER",
         "SOUND_MIXER_READ_LINE",
         "SOUND_MIXER_READ_MIC",
         "SOUND_MIXER_READ_CD",
         "SOUND_MIXER_READ_IMIX",
         "SOUND_MIXER_READ_ALTPCM",
         "SOUND_MIXER_READ_RECLEV",
         "SOUND_MIXER_READ_IGAIN",
         "SOUND_MIXER_READ_OGAIN",
         "SOUND_MIXER_READ_LINE1",
         "SOUND_MIXER_READ_LINE2",
         "SOUND_MIXER_READ_LINE3",
         "SOUND_MIXER_READ_MUTE",
         "SOUND_MIXER_READ_ENHANCE",
         "SOUND_MIXER_READ_LOUD",
         "SOUND_MIXER_READ_RECSRC",
         "SOUND_MIXER_READ_DEVMASK",
         "SOUND_MIXER_READ_RECMASK",
         "SOUND_MIXER_READ_STEREODEVS",
         "SOUND_MIXER_READ_CAPS",
      },
      {
         "SOUND_MIXER_WRITE_VOLUME",
         "SOUND_MIXER_WRITE_BASS", 
         "SOUND_MIXER_WRITE_TREBLE",
         "SOUND_MIXER_WRITE_SYNTH",
         "SOUND_MIXER_WRITE_PCM",  
         "SOUND_MIXER_WRITE_SPEAKER",
         "SOUND_MIXER_WRITE_LINE", 
         "SOUND_MIXER_WRITE_MIC",  
         "SOUND_MIXER_WRITE_CD",   
         "SOUND_MIXER_WRITE_IMIX", 
         "SOUND_MIXER_WRITE_ALTPCM",
         "SOUND_MIXER_WRITE_RECLEV",
         "SOUND_MIXER_WRITE_IGAIN",
         "SOUND_MIXER_WRITE_OGAIN",
         "SOUND_MIXER_WRITE_LINE1",
         "SOUND_MIXER_WRITE_LINE2",
         "SOUND_MIXER_WRITE_LINE3",
         "SOUND_MIXER_WRITE_MUTE", 
         "SOUND_MIXER_WRITE_ENHANCE",
         "SOUND_MIXER_WRITE_LOUD", 
         "SOUND_MIXER_WRITE_RECSRC",
      }
   };
   int ctl[2][25] =
   {
      {
         SOUND_MIXER_READ_VOLUME,   
         SOUND_MIXER_READ_BASS,     
         SOUND_MIXER_READ_TREBLE,   
         SOUND_MIXER_READ_SYNTH,    
         SOUND_MIXER_READ_PCM,      
         SOUND_MIXER_READ_SPEAKER,  
         SOUND_MIXER_READ_LINE,     
         SOUND_MIXER_READ_MIC,      
         SOUND_MIXER_READ_CD,       
         SOUND_MIXER_READ_IMIX,     
         SOUND_MIXER_READ_ALTPCM,   
         SOUND_MIXER_READ_RECLEV,   
         SOUND_MIXER_READ_IGAIN,    
         SOUND_MIXER_READ_OGAIN,    
         SOUND_MIXER_READ_LINE1,    
         SOUND_MIXER_READ_LINE2,    
         SOUND_MIXER_READ_LINE3,    
         SOUND_MIXER_READ_MUTE,     
         SOUND_MIXER_READ_ENHANCE,  
         SOUND_MIXER_READ_LOUD,     
         SOUND_MIXER_READ_RECSRC,   
         SOUND_MIXER_READ_DEVMASK,  
         SOUND_MIXER_READ_RECMASK,  
         SOUND_MIXER_READ_STEREODEVS,
         SOUND_MIXER_READ_CAPS
      },
      {
         SOUND_MIXER_WRITE_VOLUME,
         SOUND_MIXER_WRITE_BASS,
         SOUND_MIXER_WRITE_TREBLE,
         SOUND_MIXER_WRITE_SYNTH,
         SOUND_MIXER_WRITE_PCM,
         SOUND_MIXER_WRITE_SPEAKER,
         SOUND_MIXER_WRITE_LINE,
         SOUND_MIXER_WRITE_MIC,
         SOUND_MIXER_WRITE_CD,
         SOUND_MIXER_WRITE_IMIX,
         SOUND_MIXER_WRITE_ALTPCM,
         SOUND_MIXER_WRITE_RECLEV,
         SOUND_MIXER_WRITE_IGAIN,
         SOUND_MIXER_WRITE_OGAIN,
         SOUND_MIXER_WRITE_LINE1,
         SOUND_MIXER_WRITE_LINE2,
         SOUND_MIXER_WRITE_LINE3,
         SOUND_MIXER_WRITE_MUTE,
         SOUND_MIXER_WRITE_ENHANCE,
         SOUND_MIXER_WRITE_LOUD,
         SOUND_MIXER_WRITE_RECSRC,
      }
   };





   fd = open("/dev/mixer", O_RDWR);
   if(fd == -1)
   {
      perror("");
      exit(1);

   } /* if(fd == -1) */

   printf("Filedescriptor of '/dev/mixer': %d\n", fd);





   for(i=0; i<25; i++)
   {
      result = ioctl(fd, ctl[0][i], &value[i]);
      if(result < 0)
      {
         perror(text[0][i]);
         exit(1);

      } /* if(fd == -1) */

      printf("%-27s: %x\n", text[0][i], value[i]);
   }



   close(fd);

   return(0);

} /* int main() */
