Re: Download Tool Kategorie: Verschiedenes (von Thomas, http://www.tho-bai.de - 4.03.2004 22:16) | ||
Als Antwort auf Re: Download Tool von Markus A. - 4.03.2004 11:47 | ||
| ||
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 #include #include #include #include #include #include #include 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 %sn",filen); return -1; } //1. Zeile mit CC2VMC auslesen while(ch != 'n') { read(fd, &ch, sizeof(char)); buf[i] = ch; i++; } buf[i] = ' '; printf("Format: %s", buf); i = 0; ch = 0; buf[i] = ' '; //Länge der konstanten Bytes auslesen while(ch != 'n') { read(fd, &ch, sizeof(char)); buf[i] = ch; i++; buf[i] = ' '; } length = atoi(buf); i = 0; ch = 0; buf[i] = ' '; //Länge der VMC-Worte auslesen while(ch != 'n') { read(fd, &ch, sizeof(char)); buf[i] = ch; i++; buf[i] = ' '; } 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: %in", length); printf("VMC-Worte: %in", length); //length = htons(length); write(sfd, &length, sizeof(long int)); read(sfd, &buf, sizeof(char)); buf[5]=' '; printf("echo: %sn", buf); write(sfd, &length2, sizeof(long int)); buf[0] = ' '; i = 0; ch = 1; //send program while(read(fd, &ch, sizeof(char)) > 0) { if(ch == 32) { ch = atoi(buf); printf("%dn", ch); write(sfd, &ch, sizeof(char)); ch = 0; i = 0; buf[i] = ' '; } else { buf[i] = ch; ch = 0; i++; buf[i] = ' '; } printf("loopn", 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 Meine Seite: http://www.tho-bai.de | ||
Antwort schreiben Antworten: Re: Download Tool (von Markus A. - 5.03.2004 13:37) Re: Download Tool (von Thomas - 6.03.2004 15:58) Re: Download Tool (von Markus A. - 6.03.2004 21:19) Re: Download Tool (von n4x - 7.03.2004 16:52) Re: Download Tool (von Markus A. - 7.03.2004 18:04) Re: Download Tool (von n4x - 7.03.2004 22:15) Re: Download Tool (von Markus A. - 8.03.2004 0:01) Re: Download Tool (von Thomas - 7.03.2004 12:24) Re: Download Tool (von Thomas - 7.03.2004 14:30) Re: Download Tool (von Markus A. - 7.03.2004 18:02) Re: Download Tool (von Thomas - 7.03.2004 22:23) Re: Download Tool (von Markus A. - 8.03.2004 0:03) Re: Download Tool (von Thomas - 8.03.2004 0:50) |