/*******************************************************************************
* TapeStateGen.cc TMS System State Table Generation utility
* T.Barnaby, BEAM Ltd, 2007-03-14
*******************************************************************************
*/
#include <stdio.h>
#include <syslog.h>
#include <unistd.h>
#include <getopt.h>
#include <SigGen.h>
#include <Gen.h>
void usage(){
fprintf(stderr, "tmsStateGen: Version: %s\n", VERSION);
fprintf(stderr, "Usage: tmsstategen [options] <filename>\n");
fprintf(stderr, "Generates a Tms State Table for a particular BEAM type to a file.\n");
fprintf(stderr, " -t <type> - Specifies the signal type (beam1 etc)\n");
fprintf(stderr, " -T - List all signal types supported\n");
fprintf(stderr, " -p - Produce Phase Table ASCII dump file\n");
fprintf(stderr, " -fd <n> - Set pllInitialFrequencyDelay to n ms\n");
fprintf(stderr, " -phaseDelay <n> - Add this to all PhaseDelay parameters\n");
fprintf(stderr, " -phaseDelayAll <n> - Set all PhaseDelay parameters to this value\n");
fprintf(stderr, " -fref <n> - Set FREF to n Hz\n");
fprintf(stderr, " -name <n> - Set name n\n");
fprintf(stderr, " -info <n> - Prefix to standard info\n");
}
static struct option options[] = {
{ "?", 0, NULL, 0 },
{ "h", 0, NULL, 0 },
{ "help", 0, NULL, 0 },
{ "T", 0, NULL, 0 },
{ "t", 1, NULL, 0 },
{ "p", 0, NULL, 0 },
{ "fd", 1, NULL, 0 },
{ "phaseDelay", 1, NULL, 0 },
{ "phaseDelayAll", 1, NULL, 0 },
{ "fref", 1, NULL, 0 },
{ "name", 1, NULL, 0 },
{ "info", 1, NULL, 0 },
{ 0,0,0,0 }
};
int main(int argc, char** argv){
BError err;
Gen gen;
PNameValueList params;
BString s;
BIter i;
int c;
int optIndex = 0;
BString fileName = "";
BString cycleType = "";
int listTypes = 0;
double fref = 437000;
double sampleRate;
int pllInitialFrequencyDelay = 0;
BString name;
BList<BString> sl;
while((c = getopt_long_only(argc, argv, "", options, &optIndex)) == 0){
s = options[optIndex].name;
if(s == "help" || s == "h" || s == "?"){
usage();
return 1;
}
else if(s == "T"){
listTypes = 1;
}
else if(s == "t"){
cycleType = optarg;
}
else if(s == "p"){
params.setValue("phaseTableFile", "1");
}
else if(s == "fd"){
pllInitialFrequencyDelay = atoi(optarg);
}
else if(s == "phaseDelay"){
params.setValue("phaseDelay", atoi(optarg));
}
else if(s == "phaseDelayAll"){
params.setValue("phaseDelayAll", atoi(optarg));
}
else if(s == "fref"){
fref = atoi(optarg);
}
else if(s == "name"){
name = optarg;
}
else if(s == "info"){
params.setValue("info", optarg);
}
}
if(!listTypes && (optind == argc)){
usage();
return 1;
}
sampleRate = 125000000;
if(name == "")
name = cycleType;
params.setValue("sampleRate", sampleRate);
params.setValue("fref", fref);
params.setValue("fileName", argv[optind++]);
params.setValue("useMsbFref", 1);
params.setValue("pllInitialFrequencyDelay", pllInitialFrequencyDelay);
params.setValue("name", name);
#ifdef ZAP
printf("SampleRate: %f\n", sampleRate);
printf("FRef: %f\n", fref);
printf("PllInitialFrequencyDelay: %d\n", pllInitialFrequencyDelay);
#endif
if(listTypes){
sl = gen.getTypes();
for(sl.start(i); !sl.isEnd(i); sl.next(i)){
printf("%s\n", sl[i].retStr());
}
return 0;
}
if(cycleType == ""){
usage();
return 1;
}
printf("Generating TMS CycleParams for Cycle Type: %s\n", cycleType.retStr());
if(err = gen.init(params)){
fprintf(stderr, "Gen Init Error: %s\n", err.getString().retStr());
return 1;
}
if(err = gen.generate(cycleType)){
fprintf(stderr, "Gen Run Error: %s\n", err.getString().retStr());
return 1;
}
return 0;
}