/*******************************************************************************
* TapeSigGen.cc TapeDigitiser signal generator utility
* T.Barnaby, BEAM Ltd, 2006-09-12
*******************************************************************************
*/
#include <stdio.h>
#include <syslog.h>
#include <unistd.h>
#include <SigGen.h>
#include <Tests.h>
void usage(){
fprintf(stderr, "tmssiggen: Version: %s\n", VERSION);
fprintf(stderr, " Usage: Generates a Tms System test signal on 8 channels of the signal generator card or\n");
fprintf(stderr, " to a file.\n");
fprintf(stderr, " -t <type> - Specifies the signal type (sine, beam1 etc)\n");
fprintf(stderr, " -T - List all test types supported\n");
fprintf(stderr, " -l <n> - Signal level (1.0 full)\n");
fprintf(stderr, " -s <freq> - Sample rate (Default 150000000)\n");
fprintf(stderr, " -f <freq> - FREF frequency (Default 437KHz)\n");
fprintf(stderr, " -p <period> - TMS period to output, defaults to complete TMS cycle\n");
fprintf(stderr, " File options\n");
fprintf(stderr, " -o <fileName> - Outputs data to an ASCII file rather than signal generator card\n");
fprintf(stderr, " -b <fileName> - Outputs data to a TMS TestData binary file rather than signal generator card\n");
fprintf(stderr, " -c <num> - Channel number to output, default is all\n");
fprintf(stderr, " -i 1 - Set integer output mode (14 bits)\n");
}
int main(int argc, char** argv){
BError err;
int a;
BString type = "";
int listTypes = 0;
Test* test = 0;
TestParams params;
BString s;
BList<Test*>& tests = testsInit();
BIter i;
params.setValue("sampleRate", "150000000");
params.setValue("amplitude", "1.0");
params.setValue("fref", "437000");
for(a = 1; a < argc; a++){
if(argv[a][0] == '-'){
switch(argv[a][1]){
case 't': type = argv[++a]; break;
case 'T': listTypes = 1; break;
case 's': params.setValue("sampleRate", argv[++a]); break;
case 'l': params.setValue("amplitude", argv[++a]); break;
case 'f': params.setValue("fref", argv[++a]); break;
case 'o': params.setValue("fileName", argv[++a]);
params.setValue("fileType", "txt");
break;
case 'b': params.setValue("fileName", argv[++a]);
params.setValue("fileType", "psd");
break;
case 'c': params.setValue("channel", argv[++a]); break;
case 'i': params.setValue("integer", argv[++a]); break;
case 'p': params.setValue("period", argv[++a]); break;
default: usage(); return 1;
}
}
else {
}
}
if(listTypes){
for(tests.start(i); !tests.isEnd(i); tests.next(i)){
printf("%s: %s\n", tests[i]->name().retStr(), tests[i]->info().retStr());
}
return 0;
}
if(type == ""){
usage();
return 1;
}
for(tests.start(i); !tests.isEnd(i); tests.next(i)){
if(type.toLower() == tests[i]->name().toLower()){
test = tests[i];
break;
}
}
if(test == 0){
fprintf(stderr, "Signal type: %s not implemented\n", type.retStr());
return 1;
}
printf("Generating signal: %s\n", test->info().retStr());
if(err = test->init(params)){
fprintf(stderr, "Test Init Error: %s\n", err.getString().retStr());
return 1;
}
if(err = test->run()){
fprintf(stderr, "Test Run Error: %s\n", err.getString().retStr());
return 1;
}
return 0;
}