home *** CD-ROM | disk | FTP | other *** search
/ ftp.4front-tech.com / ftp.4front-tech.com.tar / ftp.4front-tech.com / ossfree / snd-util-3.8.tar.gz / snd-util-3.8.tar / sndkit / pss_test / ioctl.c next >
C/C++ Source or Header  |  1995-03-03  |  2KB  |  131 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <fcntl.h>
  5. #include <sys/soundcard.h>
  6.  
  7. #define DSPDEV "/dev/dsp0"
  8.  
  9. int fd;
  10.  
  11. unsigned short
  12. read_dspdata(unsigned short addr)    /* Reads a word form data memory */
  13. {
  14.     copr_debug_buf rec;
  15.  
  16.     rec.parm1 = addr;
  17.  
  18.     if (ioctl(fd, SNDCTL_COPR_RDATA, &rec)==-1)
  19.     {
  20.         perror("Read DSP data from " DSPDEV);
  21.         exit(-1);
  22.     }
  23.  
  24.     return rec.parm1;
  25. }
  26.  
  27. void
  28. write_dspdata(unsigned short addr, unsigned short data)
  29. {
  30.     copr_debug_buf rec;
  31.  
  32.     rec.parm1 = addr;
  33.     rec.parm2 = data;
  34.  
  35.     if (ioctl(fd, SNDCTL_COPR_WDATA, &rec)==-1)
  36.     {
  37.         perror("Read DSP data from " DSPDEV);
  38.         exit(-1);
  39.     }
  40. }
  41.  
  42. unsigned int
  43. read_dspcode(unsigned short addr)    /* Reads a word form program memory */
  44. {
  45.     copr_debug_buf rec;
  46.  
  47.     rec.parm1 = addr;
  48.  
  49.     if (ioctl(fd, SNDCTL_COPR_RCODE, &rec)==-1)
  50.     {
  51.         perror("Read DSP code from " DSPDEV);
  52.         exit(-1);
  53.     }
  54.  
  55.     return rec.parm1;
  56. }
  57.  
  58. void
  59. reload(void)
  60. {
  61.     int f, i;
  62.  
  63.     copr_buffer buf;
  64.  
  65.     if ((f=open("/E/analog/spasm/cwmon.ld", O_RDONLY, 0))==-1)
  66.     {
  67.         perror("/E/analog/spasm/cwmon.ld");
  68.         exit(-1);
  69.     }
  70.  
  71.     if ((buf.len = read(f, buf.data, sizeof(buf.data)))==-1)
  72.     {
  73.         perror("/E/analog/spasm/cwmon.ld");
  74.         exit(-1);
  75.     }
  76.  
  77.     if (buf.len == sizeof(buf.data))
  78.     {
  79.         fprintf(stderr, "Error: Code too long\n");
  80.         exit(-1);
  81.     }
  82.  
  83.     close(f);
  84.  
  85.     buf.flags = CPF_FIRST|CPF_LAST;
  86.     if (ioctl(fd, SNDCTL_COPR_LOAD, &buf)==-1)
  87.     {
  88.         perror("Code load " DSPDEV);
  89.         exit(-1);
  90.     }
  91. }
  92.  
  93. int
  94. main(int argc, char *argv[])
  95. {
  96.     int i, blk;
  97.  
  98.     if ((fd=open(DSPDEV, O_RDWR, 0))==-1)
  99.     {
  100.         perror(DSPDEV);
  101.         exit(-1);
  102.     }
  103.  
  104. #if 1
  105.     reload();
  106. #else
  107.     if (ioctl(fd, SNDCTL_COPR_RESET, 0)==-1)
  108.     {
  109.         perror("Reset " DSPDEV);
  110.         exit(-1);
  111.     }
  112. #endif
  113.  
  114.     for (i=0x3000;i<0x31f1;i++)
  115.     {
  116.         int tmp;
  117.  
  118.         if ((i % 8)==0) printf("\n%4x: ", i);
  119.  
  120.         tmp = read_dspdata(i);
  121.         if (tmp == i)
  122.            printf("------ ");
  123.         else
  124.            printf("%06x ", read_dspdata(i));
  125.     }
  126.     printf("\n");
  127.  
  128.     close(fd);
  129.     exit(-1);
  130. }
  131.