RSS Git Download  Clone
Raw Blame History
/*******************************************************************************
 *	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, "  -fref <n>     - Set FREF to n Hz\n");
	fprintf(stderr, "  -name <n>     - Set name n\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 },
		{ "fref",		1, NULL, 0 },
		{ "name",		1, NULL, 0 },
		{ 0,0,0,0 }
};

int main(int argc, char** argv){
	BError			err;
	Gen*			gen = 0;
	NameValueList		params;
	BString			s;
	BList<Gen*>&		genList = genInit();
	BIter			i;
	int			c;
	int			optIndex = 0;
	BString			fileName = "";
	BString			typeName = "";
	int			listTypes = 0;
	double			fref = 437000;
	double			sampleRate;
	int			pllInitialFrequencyDelay = 0;
	BString			name;
	
	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"){
			typeName = optarg;
		}
		else if(s == "p"){
			params.setValue("phaseTableFile", "1");
		}
		else if(s == "fd"){
			pllInitialFrequencyDelay = atoi(optarg);
		}
		else if(s == "fref"){
			fref = atoi(optarg);
		}
		else if(s == "name"){
			name = optarg;
		}
	}
	
	if(!listTypes && (optind == argc)){
		usage();
		return 1;
	}

	sampleRate = 512 * fref;
//	sampleRate = 125000000;

	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);
	
	printf("SampleRate: %f\n", sampleRate);
	printf("FRef: %f\n", fref);
	printf("PllInitialFrequencyDelay: %d\n", pllInitialFrequencyDelay);
	
	if(listTypes){
		for(genList.start(i); !genList.isEnd(i); genList.next(i)){
			printf("%s: %s\n", genList[i]->name().retStr(), genList[i]->info().retStr());
		}
		return 0;
	}

	if(typeName == ""){
		usage();
		return 1;
	}
	
	for(genList.start(i); !genList.isEnd(i); genList.next(i)){
		if(typeName.toLower() == genList[i]->name().toLower()){
			gen = genList[i];
			break;
		}
	}
	
	if(gen == 0){
		fprintf(stderr, "Signal type: %s not implemented\n", typeName.retStr());
		return 1;
	}

	printf("Generating TMS State Table for signal: %s\n", gen->info().retStr());	
	if(err = gen->init(params)){
		fprintf(stderr, "Gen Init Error: %s\n", err.getString().retStr());
		return 1;
	}
	
	if(err = gen->run()){
		fprintf(stderr, "Gen Run Error: %s\n", err.getString().retStr());
		return 1;
	}

	return 0;
}