Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Also mit dem Tcl-Skript bin ich leider immer noch nicht weiter gekommen, auch nicht mit > puts -nonewline [binary format i1 $data]. Habe auch schon fcopy für die Programmbytes > ausprobiert und nur die Längen einzeln geschickt. Hat bis jetzt alles noch nicht > funktioniert. > Dafür habe ich einen C-Quellcode eines Downloadprogs für die CC1 gefunden und für die CC2 > umgeschrieben. Dabei gibt es jedoch noch Probleme, da die Werte im VMC-Code teilweise zu > groß für char sind. Das Programm tut asonsten genau dasselbe, wie das TCL-Skript. Es > erscheint erst "ERAS VMC" und anschließend "LOAD VMC" im Display. Wobei "LOAD VMC" > nach beenden des Programms immer noch im Display steht. > > Eine weitere Möglichkeit unser Problem zu lösen, wäre, wenn wir gucken könnten, was genau > das Download-Tool von Andre oder Conrad überträgt. D.h. wir bräuchten einen Sniffer für > den Comport. Ich habe leider aber noch keinen brauchbaren gefunden. Vielleicht kennst du > ja einen (für Linux oder Windows, egal). > > Hier erstmal der C-Quellcode: > > #include <stdio.h> /* Standard input/output definitions */ > #include <stdlib.h> > #include <netinet/in.h> > #include <string.h> /* String function definitions */ > #include <unistd.h> /* UNIX standard function definitions */ > #include <fcntl.h> /* File control definitions */ > #include <errno.h> /* Error number definitions */ > #include <termios.h> /* POSIX terminal control definitions */ > int open_port(char *device) > { > int fd; > struct termios *current; > struct termios options; > fd = open(device, O_RDWR | O_NOCTTY); > if (fd == -1) > return -1; > bzero(&options, sizeof(options)); > > tcgetattr(fd, &options); > options.c_cflag = B19200 | CRTSCTS | CS8 | CLOCAL | CREAD; > options.c_iflag = IGNPAR; > options.c_oflag = 0; > options.c_lflag = 0; > tcflush(fd, TCIFLUSH); > tcsetattr(fd, TCSANOW, &options); > return (fd); > } > int sendprog(char *filen, int sfd) > { > char CMD_ID = 0x01; > char CMD_LOAD = 0x04; > char CMD_ERASE_VMC = 0x06; > int fd, i = 0; > long int length, length2; > char ch; > char *buf; > buf = (char *) malloc(255); > > fd = open(filen, O_RDONLY); //open file > if (fd == -1) > { > fprintf(stderr, "Unable to open %s\n",filen); > return -1; > } > //1. Zeile mit CC2VMC auslesen > while(ch != '\n') > { > read(fd, &ch, sizeof(char)); > buf[i] = ch; > i++; > } > buf[i] = '\0'; > printf("Format: %s", buf); > > i = 0; > ch = 0; > buf[i] = '\0'; > //Länge der konstanten Bytes auslesen > while(ch != '\n') > { > read(fd, &ch, sizeof(char)); > buf[i] = ch; > i++; > buf[i] = '\0'; > } > length = atoi(buf); > i = 0; > ch = 0; > buf[i] = '\0'; > //Länge der VMC-Worte auslesen > while(ch != '\n') > { > read(fd, &ch, sizeof(char)); > buf[i] = ch; > i++; > buf[i] = '\0'; > } > length2 = atoi(buf); > > > //VMC löschen > write(sfd, &CMD_ERASE_VMC, 1); > //2500ms warten > usleep(2500000); > //Laden des VMC-Codes einleiten > write(sfd, &CMD_LOAD, 1); > usleep(500000); > > printf("konstante bytes: %i\n", length); > printf("VMC-Worte: %i\n", length); > //length = htons(length); > write(sfd, &length, sizeof(long int)); > read(sfd, &buf, sizeof(char)); > buf[5]='\0'; > printf("echo: %s\n", buf); > write(sfd, &length2, sizeof(long int)); > buf[0] = '\0'; > i = 0; > ch = 1; > > //send program > while(read(fd, &ch, sizeof(char)) > 0) > { > if(ch == 32) > { > ch = atoi(buf); > printf("%d\n", ch); > write(sfd, &ch, sizeof(char)); > ch = 0; > > i = 0; > buf[i] = '\0'; > } else { > buf[i] = ch; > ch = 0; > i++; > buf[i] = '\0'; > } > printf("loop\n", ch); > } > return 0; > } > > int main() > { > //Stream zu /dev/ttyS0 öffnen > int comport = open_port("/dev/ttyS0"); > sendprog("melody.c2p.vmc", comport); > } > > Hoffe wir kommen bald weiter > > Gruß > > Thomas