#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()
{
   unsigned char b[2];
   int i;
   int fd;
   int result;
   int value[256];
   char *text[2][25] =
   {
      {
      },
      {
      }
   };
   int ctl[2][25] =
   {
      {
      },
      {
      }
   };





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

   }

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





   result = ioctl(fd, SNDCTL_DSP_RESET);
   if(result < 0)
   {
      perror(text[0][i]);
      exit(1);
   }
   printf("SNDCTL_DSP_RESET\n");


   result = ioctl(fd, SNDCTL_DSP_SYNC);
   if(result < 0)
   {
      perror("SNDCTL_DSP_RESET");
      exit(1);
   }
   printf("SNDCTL_DSP_SYNC\n");


   value[0] = 22050;
   result = ioctl(fd, SNDCTL_DSP_SPEED, &value[0]);
   if(result < 0)
   {
      perror("SNDCTL_DSP_SPEED");
      exit(1);
   }
   printf("SNDCTL_DSP_SPEED: %d\n", value[0]);



   value[0] = 0;
   result = ioctl(fd, SNDCTL_DSP_STEREO, &value[0]);
   if(result < 0)
   {
      perror("SNDCTL_DSP_STEREO");
      exit(1);
   }
   printf("SNDCTL_DSP_STEREO: %d\n", value[0]);



   result = ioctl(fd, SNDCTL_DSP_GETBLKSIZE, &value[0]);
   if(result < 0)
   {
      perror("SNDCTL_DSP_GETBLKSIZE");
      exit(1);
   }
   printf("SNDCTL_DSP_GETBLKSIZE: %x\n", value[0]);

   
   
   result = ioctl(fd, SOUND_PCM_READ_CHANNELS, &value[0]);
   if(result < 0)
   {
      perror("SOUND_PCM_READ_CHANNELS");
      exit(1);
   }
   printf("SOUND_PCM_READ_CHANNELS: %x\n", value[0]);

   
   
   result = ioctl(fd, SOUND_PCM_READ_RATE, &value[0]);
   if(result < 0)
   {
      perror("SOUND_PCM_READ_RATE");
      exit(1);
   }
   printf("SOUND_PCM_READ_RATE: %d\n", value[0]);

   
   
   result = ioctl(fd, SOUND_PCM_READ_BITS, &value[0]);
   if(result < 0)
   {
      perror("SOUND_PCM_READ_BITS");
      exit(1);
   }
   printf("SOUND_PCM_READ_BITS: %x\n", value[0]);

   
   
/*   
   result = ioctl(fd, SNDCTL_DSP_SETDUPLEX);
   if(result < 0)
   {
      perror("SNDCTL_DSP_SETDUPLEX");
      exit(1);

   }
   
   printf("SNDCTL_DSP_SETDUPLEX\n");

*/
   
   result = ioctl(fd, SNDCTL_DSP_GETFMTS, &value[0]);
   if(result < 0)
   {
      perror(text[0][i]);
      exit(1);

   }
   
   printf("SNDCTL_DSP_GETFMTS: %x\n", value[0]);



   value[0] = AFMT_U8;
   //value[0] = AFMT_S16_LE;
   //value[0] = AFMT_MPEG;
   
   result = ioctl(fd, SNDCTL_DSP_SETFMT, &value[0]);
   if(result < 0)
   {
      perror(text[0][i]);
      exit(1);

   }
   
   printf("SNDCTL_DSP_SETFMT: AFMT_U8\n");


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

   }
   
   printf("SNDCTL_DSP_GETCAPS: %x\n", value[0]);


   b[0] = 0x00;
   b[1] = 0xff;
   for(i=0; i<0x1000; i++)
      write(fd, &b[0], 2);

/*
   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() */
