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) ;
00135
00136 edt_dtime();
00137
00138 edt_start_buffers(edt_p, numbufs) ;
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 }