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 ! > Habe dein Programm leider noch nicht ausprobiert. Der Compiler bringt gleich nen ganzen Wust > an Fehlern und ich hatte noch keine Lust das auszubessern. Hab mein Programm jetzt > einfach so geändert, dass die Konstantenbytes als 1 Byte übertragen werden. Somit hört die > Übertragung auch richtig auf. Das übertragene Programm funktioniert jedoch leider nicht. > Die CC2 zeigt "QUIT VMC" und "Q -1" an. Weißt du woran das liegen könnte. Ich mache die > Übertragung prinzipiell genau wie du, nur dass ich unsigned Variablen benutzte. > Hier mein jetziger Quellcode. Wär nett wenn du ihn dir mal kurz anschaust und guckst wo mein > Fehler liegt. > > Kannst ihn dir auch unter http://www.tho-bai.de/info/programme/cc2dl.cpp angucken, da > haste dann wenigstens die ganzen Einrückungen... > > #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); > } > void getecho(int fd, int data) > { > unsigned char buf[2]; > unsigned char cbuf = 0; > int ibuf; > read(fd, &cbuf, 1); > buf[0] = cbuf; > buf[1] = '\0'; > ibuf = (int) cbuf; > printf("echo: %i\n", ibuf); > if(data!=ibuf) { > printf("Falsches echo!!!\n"); > exit(1); > } > } > int getdata(int fd, unsigned char* &buf) > { > int unsigned ch = 0; > int i = 0; > buf[0] = '\0'; > > while(read(fd, &ch, sizeof(char)) > 0) > { > if((ch == '\n') && (buf==(unsigned char*) "")) { > printf("zeilenumburch\n"); > buf[0] = '\0'; > i = 0; > ch = 0; > } else if((ch == 32) || (ch == '\n') && (i != 0)) { > printf("getdata: %s\n", buf); > return 1; > } else { > buf[i] = ch; > ch = 0; > i++; > buf[i] = '\0'; > printf("."); > } > } > printf("file end\n\n"); > return -1; > } > void sendbytewise(int fd, unsigned char value, int bytes) > { > if(bytes>0) > { > int i = (int) value; > printf("send %i\n", i); > write(fd, &value, 1); > usleep(5000); > getecho(fd, i); > bytes--; > value = (value/256)%256; > sendbytewise(fd, value, bytes); > } > } > int sendprog(char *filen, int sfd) > { > char CMD_ID = 0x01; > char CMD_LOAD = 0x04; > char CMD_ERASE_VMC = 0x06; > char CMD_RESET = 255; > > //write(sfd, &CMD_RESET, 1); > int fd, i = 0; > long int length, length2; > unsigned int ch; > unsigned int chint; > unsigned char ibuf; > unsigned char *buf; > buf = (unsigned 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 > getdata(fd, buf); > printf("Format: %s\n", buf); > > //Laenge der konstanten Bytes auslesen > getdata(fd, buf); > length = atoi((const char*) buf); > > //Laenge der VMC-Worte auslesen > getdata(fd, buf); > length2 = atoi((const char*) buf); > > //VMC loeschen > printf("erase vmc\n"); > write(sfd, &CMD_ERASE_VMC, 1); > //echo auslesen > getecho(sfd, 6); > //2500ms warten > usleep(2500000); > //Laden des VMC-Codes einleiten > write(sfd, &CMD_LOAD, 1); > //500ms warten > usleep(500000); > > printf("konstante bytes: %i\n", length); > printf("VMC-Worte: %i\n", length2); > char constants = length%256; > char vmc = length2%256; > sendbytewise(sfd, constants, 4); > sendbytewise(sfd, vmc, 4); > i=0; > while((i<length)) > { > getdata(fd, buf); > ch = atoi((const char*) buf); > ibuf = ch%256; > printf("%imodulo256 = %i\n", ch, ibuf); > sendbytewise(sfd, ibuf, 1); > i++; > } > printf("________end of constants____________\n"); > while((getdata(fd, buf)==1)) > { > ch = atoi((const char*) buf); > ibuf = ch%256; > printf("%imodulo256 = %i\n", ch, ibuf); > sendbytewise(sfd, ibuf, 2); > i++; > } > write(sfd, &CMD_RESET, 1); > > return 1; > } > > int main(int argc, char* argv[]) > { > if(argc!=2) { > printf("Ungültige Parameteranzahl - cc2dl file\n"); > exit(1); > } > > //Stream zu /dev/ttyS0 oeffnen > int comport = open_port("/dev/ttyS0"); > sendprog(argv[1], comport); > } > > Gruß > > Thomas