Ejemplo n.º 1
0
void task(void){
	uart_test();
}
Ejemplo n.º 2
0
/**
 * Behandelt die Kommandozeilen-Argumente
 * \param argc	Anzahl der Argumente
 * \param *argv	Zeiger auf String-Array der Argumente
 */
void hand_cmd_args(int argc, char * argv[]) {
	/* Der Zielhost wird per default durch das Macro IP definiert und
	 * tcp_hostname mit einer Kopie des Strings initialisiert. */
	tcp_hostname = malloc(strlen(IP) + 1);
	if (NULL == tcp_hostname) {
		exit(1);
	}
	strcpy(tcp_hostname, IP);

	int ch;
	/* Die Kommandozeilenargumente komplett verarbeiten */
	while ((ch = getopt(argc, argv, "hsTu:Et:Mm:c:l:e:d:a:i:fk:o:F:")) != -1) {
		argc -= optind;
		argv += optind;
		switch (ch) {

		case 's': {
#ifdef BOT_2_SIM_AVAILABLE
			/* Servermodus [-s] wird verlangt */
			printf("ARGV[0]= %s\n", argv[0]);
			tcp_server_init();
			tcp_server_run(1000); // beendet per exit()
#else
			puts("Fehler, Binary wurde ohne BOT_2_SIM_AVAILABLE compiliert!");
			exit(1);
#endif // BOT_2_SIM_AVAILABLE
			break;
		}

		case 'T': {
#ifdef BOT_2_SIM_AVAILABLE
			/* Testclient starten */
			tcp_test_client_init();
			tcp_test_client_run(1000); // beendet per exit()
#else
			puts("Fehler, Binary wurde ohne BOT_2_SIM_AVAILABLE compiliert!");
			exit(1);
#endif // BOT_2_SIM_AVAILABLE
			break;
		}

		case 'u': {
#ifdef ARM_LINUX_BOARD
			long long int n = atoll(optarg);
			uart_test((uint32_t) n);
#endif
			break;
		}

		case 't': {
			/* Hostname, auf dem ct-Sim laeuft, wurde uebergeben. Der String wird in hostname gesichert. */
			const size_t len = strlen(optarg) + 1;
			if (len > 255) {
				puts("hostname ungueltig");
				exit(1);
			}
			tcp_hostname = realloc(tcp_hostname, len);
			if (tcp_hostname == NULL) {
				exit(1);
			}
			strcpy(tcp_hostname, optarg);
			break;
		}

		case 'a': {
			/* Bot-Adresse wurde uebergeben */
			int addr = atoi(optarg);
			if ((addr >= CMD_SIM_ADDR) && (addr != CMD_BROADCAST)) {
				puts("Unzulaessige Bot-Adresse!");
				exit(1);
			}
			set_bot_address(addr);
			break;
		}

		case 'i': {
			/* angegebenes BotFS Image verwenden */
#ifdef BOT_FS_AVAILABLE
			const size_t len = strlen(optarg) + 1;
			if (len > 1024) {
				puts("Image-Pfad ungueltig");
				exit(1);
			}
			botfs_volume_image_file = malloc(len);
			if (NULL == botfs_volume_image_file) {
				exit(1);
			}
			strcpy(botfs_volume_image_file, optarg);
			printf("Verwende \"%s\" als BotFS-Volume-Image\n", botfs_volume_image_file);
#else
			puts("Fehler, Binary wurde ohne BOT_FS_AVAILABLE compiliert!");
			exit(1);
#endif // BOT_FS_AVAILABLE
			break;
		}

		case 'M': {
			/* Dateiname fuer die Map wurde uebergeben. Der String wird in from gesichert. */
#ifndef MAP_AVAILABLE
			puts("ACHTUNG, das Programm wurde ohne MAP_AVAILABLE uebersetzt, die Option -M steht derzeit also NICHT zur Verfuegung.");
			puts("um dennoch Karten zu konvertieren, bitte im Quelltext in der Datei ct-Bot.h die Kommentarzeichen vor MAP_AVAILABLE entfernen");
			puts("und neu compilieren.");
			exit(1);
#endif
#ifdef MMC_VM_AVAILABLE
			puts("Executable wurde mit MMC_VM_AVAILABLE compiliert.");
			puts("Um Karten des echten Bots einlesen zu koennen, bitte den Code bitte ohne MMC_VM_AVAILABLE neu uebersetzen.");
			exit(1);
#endif
#ifdef MAP_AVAILABLE
			/* Karte in pgm konvertieren */
#ifndef BOT_FS_AVAILABLE
			if (argc != 1) {
				usage();
				exit(1);
			}
			const size_t len = strlen(argv[0]) + 1;
			if (len > 1024) {
				puts("Dateiname ungueltig");
				exit(1);
			}
			printf("Konvertiere Karte %s in PGM %s\n", argv[0], "map.pgm");
			map_read(argv[0]);
#else
			uint8_t buffer[BOTFS_BLOCK_SIZE];
			if (botfs_init(botfs_volume_image_file, buffer, False) != 0) {
				puts("BotFS konnte nicht initialisiert werden");
				exit(1);
			}
			if (map_init() != 0) {
				puts("Map-Subsystem konnte nicht initialisiert werde");
				exit(1);
			}
#endif // BOT_FS_AVAILABLE
			map_to_pgm("map.pgm");
			exit(0);
#endif // MAP_AVAILABLE
		}

		case 'm': {
#ifndef MAP_AVAILABLE
			puts("ACHTUNG, das Programm wurde ohne MAP_AVAILABLE uebersetzt, die Option -m steht derzeit also NICHT zur Verfuegung.");
			puts("um dennoch Karten zu konvertieren, bitte im Quelltext in der Datei ct-Bot.h die Kommentarzeichen vor MAP_AVAILABLE entfernen");
			puts("und neu compilieren.");
			exit(1);
#else
			/* Karte einlesen */
			const size_t len = strlen(optarg) + 1;
			if (len > 1024) {
				puts("Dateiname ungueltig");
				exit(1);
			}
			printf("Lese Karte von \"%s\" ein\n", optarg);
#ifdef BOT_FS_AVAILABLE
			uint8_t buffer[BOTFS_BLOCK_SIZE];
			if (botfs_init(botfs_volume_image_file, buffer, False) != 0) {
				puts("BotFS konnte nicht initialisiert werden");
				exit(1);
			}
#endif // BOT_FS_AVAILABLE
			map_read(optarg);
#endif // MAP_AVAILABLE
			break;
		}

		case 'f': {
			/* BotFS Tool */
#ifdef BOT_FS_AVAILABLE
			char * image = argv[0];
			botfs_management(image);
#else
			puts("Fehler, Binary wurde ohne BOT_FS_AVAILABLE compiliert!");
			exit(1);
#endif // BOT_FS_AVAILABLE
			break;
		}

		case 'k' : {
			/* BotFS file copy */
#ifdef BOT_FS_AVAILABLE
			char * image = optarg;
			char buffer[BOTFS_BLOCK_SIZE];
			if (botfs_init(image, buffer, False) != 0) {
				printf("Konnte BotFS mit Image \"%s\" nicht initialisieren\n", image);
				exit(1);
			}
			if (argc != 2) {
				usage();
				exit(1);
			}
			const char * source_file = argv[0];
			const char * dest_file = argv[1];
			if (botfs_copy_file(dest_file, source_file, buffer) == 0) {
				puts("Datei erfolgreich kopiert");
				exit(0);
			} else {
				puts("Fehler beim Kopieren");
				exit(1);
			}
#else
			puts("Fehler, Binary wurde ohne BOT_FS_AVAILABLE compiliert!");
			exit(1);
#endif // BOT_FS_AVAILABLE
		}

		case 'o' : {
			/* BotFS file extract */
#ifdef BOT_FS_AVAILABLE
			char * image = optarg;
			char buffer[BOTFS_BLOCK_SIZE];
			if (botfs_init(image, buffer, False) != 0) {
				printf("Konnte BotFS mit Image \"%s\" nicht initialisieren\n", image);
				exit(1);
			}
			if (argc != 2) {
				usage();
				exit(1);
			}
			const char * source_file = argv[0];
			const char * dest_file = argv[1];
			if (botfs_extract_file(dest_file, source_file, 0, 0, buffer) == 0) {
				puts("Datei erfolgreich kopiert");
				exit(0);
			} else {
				puts("Fehler beim Kopieren");
				exit(1);
			}
#else
			puts("Fehler, Binary wurde ohne BOT_FS_AVAILABLE compiliert!");
			exit(1);
#endif // BOT_FS_AVAILABLE
		}

		case 'F': {
			/* Fat16-Tool */
#ifdef BOT_FS_AVAILABLE
			botfs_read_fat16(optarg);
			exit(0);
#else
			puts("Fehler, Binary wurde ohne BOT_FS_AVAILABLE compiliert!");
			exit(1);
#endif // BOT_FS_AVAILABLE
		}

		case 'c': {
			/* Datei fuer den Bot (mini-fat) soll erzeugt werden. */
			const int len = strlen(optarg) + 1;
			if (len > 1024) {
				puts("Dateiname ungueltig");
				exit(1);
			}
			if (argc != 2) {
				usage();
				exit(1);
			}
			const size_t id_len = strlen(argv[0]);
			if (id_len >= MMC_FILENAME_MAX) {
				puts("ID zu lang");
				exit(1);
			}
			const int size = atoi(argv[1]);
			printf("Mini-Fat-Datei (%s) mit %d kByte und ID=%s fuer den Bot soll erstellt werden.\n",
				optarg, size, argv[0]);
			create_mini_fat_file(optarg, argv[0], size);
			exit(0);
		}

		case 'e': {
			/* Datei fuer den Sim (mini-fat) soll erzeugt werden. */
			if (argc != 2) {
				usage();
				exit(1);
			}

			const int size = atoi(argv[1]);
			uint32_t addr = atoi(optarg);
			printf("Mini-Fat-Datei mit ID=%s an Adresse 0x%x mit %d kByte auf der emulierten MMC soll erstellt werden.\n",
				argv[0], addr, size);
			create_emu_mini_fat_file(addr, argv[0], size);
			exit(0);
		}

		case 'd': {
			/* Datei fuer den Sim (mini-fat) soll geloescht werden. */
			if (argc != 0) {
				usage();
				exit(1);
			}

			printf("Mini-Fat-Datei mit ID %s auf der emulierten MMC soll geloescht werden.\n", optarg);
			delete_emu_mini_fat_file(optarg);
			exit(0);
		}

		case 'l': {
#ifdef BOT_FS_AVAILABLE
			/* Speedlog-Datei soll in txt konvertiert werden */
			const size_t len = strlen(optarg) + 1;
			if (len > 1024) {
				puts("Dateiname ungueltig");
				exit(1);
			}
			convert_slog_file(optarg);
			exit(0);
#else
			puts("Fehler, Binary wurde ohne BOT_FS_AVAILABLE compiliert!");
			exit(1);
#endif // BOT_FS_AVAILABLE
		}

		case 'E': {
			/* EEPROM-Init */
			printf("EEPROM soll mit den Daten einer eep-Datei initialisiert werden.\n");
			if (init_eeprom_man(1) != 0) {
				puts("Fehler bei EEPROM-Initialisierung!");
			} else {
				puts("done.");
			}
			exit(0);
		}

		case 'h':
		default:
			/* -h oder falscher Parameter, Usage anzeigen */
			usage();
			exit(0);
		}
	}
}