view loadtools/bpmain.c @ 893:85091e14be9c

fc-buzplay: PWT refactoring, first step
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 03 Apr 2022 08:00:50 +0000
parents 464a531122ab
children
line wrap: on
line source

/*
 * This module contains the main() function for fc-buzplay
 */

#include <sys/types.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "srecreader.h"

char *target_ttydev;

char default_buzplayer_image[] = "/opt/freecalypso/target-bin/buzplayer.srec";

extern struct srecreader iramimage;
extern void (*default_exit)();

extern struct baudrate *find_baudrate_by_name();

static struct baudrate *reattach;

main(argc, argv)
	char **argv;
{
	extern char *optarg;
	extern int optind;
	int c;
	char command[512];

	while ((c = getopt(argc, argv, "a:b:c:C:h:H:i:P:r:t:")) != EOF)
		switch (c) {
		case 'a':
			iramimage.filename = optarg;
			continue;
		case 'b':
			set_romload_baudrate(optarg);
			continue;
		case 'c':
			set_compalstage_short(optarg);
			continue;
		case 'C':
			set_compalstage_fullpath(optarg);
			continue;
		case 'h':
			read_hwparam_file_shortname(optarg);
			continue;
		case 'H':
			read_hwparam_file_fullpath(optarg);
			continue;
		case 'i':
			set_beacon_interval(optarg);
			continue;
		case 'P':
			if (find_bootctrl_entry(optarg) < 0)
				exit(1);	/* error msg already printed */
			continue;
		case 'r':
			reattach = find_baudrate_by_name(optarg);
			if (!reattach)
				exit(1);	/* error msg already printed */
			continue;
		case 't':
			set_romload_timeout(optarg);
			continue;
		case '?':
		default:
usage:			fprintf(stderr,
				"usage: fc-buzplay [options] ttyport\n");
			exit(1);
		}
	if (argc - optind != 1)
		goto usage;
	target_ttydev = argv[optind];
	if (!iramimage.filename)
		iramimage.filename = default_buzplayer_image;

	open_serial_port(target_ttydev);
	if (reattach)
		set_serial_baudrate(reattach);
	else {
		pwon_if_needed();
		perform_compal_stage();
		perform_romload();
		putchar('\n');
		if (tpinterf_pass_output(1) < 0)
			exit(1);
		putchar('\n');
	}
	for (;;) {
		if (isatty(0)) {
			fputs("buzplay> ", stdout);
			fflush(stdout);
		}
		if (!fgets(command, sizeof command, stdin))
			default_exit(0);
		buzplay_dispatch_cmd(command);
	}
}