/******************************************************************************* * TapeSigGen.cc TapeDigitiser signal generator utility * T.Barnaby, BEAM Ltd, 2006-09-12 ******************************************************************************* */ #include #include #include #include #include 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 - Specifies the signal type (sine, beam1 etc)\n"); fprintf(stderr, " -T - List all test types supported\n"); fprintf(stderr, " -l - Signal level (1.0 full)\n"); fprintf(stderr, " -s - Sample rate (Default 150000000)\n"); fprintf(stderr, " -f - FREF frequency (Default 437KHz)\n"); fprintf(stderr, " -p - TMS period to output, defaults to complete TMS cycle\n"); fprintf(stderr, " File options\n"); fprintf(stderr, " -o - Outputs data to an ASCII file rather than signal generator card\n"); fprintf(stderr, " -b - Outputs data to a TMS TestData binary file rather than signal generator card\n"); fprintf(stderr, " -c - 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& tests = testsInit(); BIter i; params.setValue("sampleRate", "150000000"); params.setValue("amplitude", "1.0"); params.setValue("fref", "437000"); params.setValue("cycleStartPhase", "45"); 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; }