simple_getdata.c

Go to the documentation of this file.
00001 
00017 #include "edtinc.h"
00018 #include <stdlib.h>
00019 
00020 void
00021 usage()
00022 {
00023     printf("usage: simple_getdata\n") ;
00024     printf("    -u <unit>     - specifies EDT board unit number\n") ;
00025     printf("    -c <channel>  - specifies EDT board channel number\n") ;
00026     printf("    -v                - verbose\n") ;
00027     printf("    -o outfile    - specifies output filename\n") ;
00028     printf("    -s <bufsize>  - ring buffer size (in bytes)\n") ;
00029     printf("    -N <numbufs>  - number of ring buffers\n") ;
00030 }
00031 
00032 int
00033 main(int argc, char **argv)
00034 {
00035     EdtDev *edt_p ;
00036     FILE   *outfile = NULL ;
00037     char   *outfile_name = NULL ;
00038     int     unit = 0, i;
00039     int     verbose = 0 ;
00040     u_char *buf ;
00041         int bufsize = 1024*1024;
00042         int loops = 100;
00043         int numbufs = 4;
00044         int channel = 0;
00045         int pause = 0;
00046         double speed;
00047 
00048 
00049     while (argc > 1 && argv[1][0] == '-')
00050     {
00051         switch (argv[1][1])
00052         {
00053         case 'u':
00054             ++argv;
00055             --argc;
00056             unit = atoi(argv[1]);
00057             break ;
00058 
00059         case 'c':
00060             ++argv;
00061             --argc;
00062             channel = atoi(argv[1]);
00063             break ;
00064 
00065         case 'v':
00066             verbose = 1 ;
00067             break ;
00068 
00069         case 'o':
00070             ++argv ;
00071             --argc ;
00072             outfile_name = argv[1] ;
00073 
00074             if ((outfile = fopen(outfile_name, "wb")) == NULL)
00075             {
00076                 perror(outfile_name) ;
00077                 exit(1) ;
00078             }
00079 
00080             break ;
00081 
00082                         case 's':
00083             ++argv ;
00084             --argc ;
00085             bufsize = strtol(argv[1],0,0);
00086                         break;  
00087 
00088                         case 'l':
00089             ++argv ;
00090             --argc ;
00091             loops = strtol(argv[1],0,0);
00092                         break;  
00093 
00094         case 'p':
00095                 pause = TRUE;
00096                 break;
00097 
00098         case 'N':
00099             ++argv ;
00100             --argc ;
00101             numbufs = strtol(argv[1],0,0);
00102         break;  
00103 
00104         default:
00105             usage() ;
00106             exit(1) ;
00107         }
00108         --argc ;
00109         ++argv ;
00110     }
00111 
00112     if (argc > 1) { usage(); exit(1); }
00113 
00114     if ((edt_p = edt_open_channel(EDT_INTERFACE, unit, channel)) == NULL)
00115     {
00116         edt_perror("edt_open") ;
00117         exit(1) ;
00118     }
00119 
00120     if (edt_configure_ring_buffers(edt_p, bufsize, numbufs, EDT_READ, NULL) == -1)
00121     {
00122         fprintf(stderr,"Unable to configure ring-buffers\n");
00123 
00124         exit(1) ;
00125     }
00126 
00127     if (pause)
00128     {
00129         printf("Paused ->>");
00130         fflush(stdout);
00131         getchar();
00132     }
00133 
00134     edt_flush_fifo(edt_p) ;         /* Flush the input fifo */
00135 
00136     edt_dtime();
00137 
00138      edt_start_buffers(edt_p, numbufs) ; /* start the transfers in free running mode */
00139 
00140     for (i = 0; (i < loops || loops == 0); i++)
00141     {
00142         buf = edt_wait_for_buffers(edt_p, 1) ;
00143 
00144         if (i < loops - numbufs)
00145                 edt_start_buffers(edt_p, 1);
00146 
00147         if (outfile) fwrite(buf, 1, bufsize, outfile) ;
00148 
00149         if (verbose)
00150             printf("buffers completed:  application %d  driver %d\n",
00151                                     i+1, edt_done_count(edt_p)) ;
00152         else
00153         {
00154             putchar('.') ;
00155             fflush(stdout) ;
00156         }
00157     }
00158 
00159     speed = ((double) loops * (double) bufsize)/(edt_dtime() * 1000000.0);
00160 
00161     printf("buffers completed:  %f Mbyte/s application %d  driver %d\n",
00162                                 speed, i, edt_done_count(edt_p)) ;
00163 
00164     edt_disable_ring_buffers(edt_p);
00165 
00166     edt_close(edt_p) ;
00167 
00168     exit(0) ;
00169 }

Generated on Mon May 12 16:38:59 2008 by  doxygen 1.5.1