void task(void){ uart_test(); }
/** * 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); } } }