Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Download Tool Kategorie: Verschiedenes (von Thomas, http://www.tho-bai.de - 7.03.2004 12:24)
Als Antwort auf Re: Download Tool von Markus A. - 6.03.2004 21:19
Ich nutze:
C-Control II Unit, CC2-Application-Board
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   /* Standard input/output definitions */
#include
#include
#include  /* String function definitions */
#include  /* UNIX standard function definitions */
#include   /* File control definitions */
#include   /* Error number definitions */
#include /* 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] = '';
ibuf = (int) cbuf;
printf("echo: %in", 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] = '';

while(read(fd, &ch, sizeof(char)) > 0)
{
  if((ch == 'n') && (buf==(unsigned char*) "")) {
printf("zeilenumburchn");
buf[0] = '';
i = 0;
ch = 0;
} else if((ch == 32) || (ch == 'n') && (i != 0)) {
printf("getdata: %sn", buf);
return 1;
} else {
buf[i] = ch;
ch = 0;
i++;
buf[i] = '';
printf(".");
}
}
printf("file endnn");
return -1;
}
void sendbytewise(int fd, unsigned char value, int bytes)
{
if(bytes>0)
{
int i = (int) value;
printf("send %in", 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 %sn",filen);
return -1;
}
//1. Zeile mit CC2VMC auslesen
getdata(fd, buf);
printf("Format: %sn", 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 vmcn");
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: %in", length);
printf("VMC-Worte: %in", length2);
char constants = length%256;
char vmc = length2%256;
sendbytewise(sfd, constants, 4);
sendbytewise(sfd, vmc, 4);
i=0;
while((i {
getdata(fd, buf);
ch = atoi((const char*) buf);
ibuf = ch%256;
printf("%imodulo256 = %in", 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 = %in", 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 filen");
exit(1);
}

//Stream zu /dev/ttyS0 oeffnen
int comport = open_port("/dev/ttyS0");
sendprog(argv[1], comport);
}

GruÃ?

Thomas

Meine Seite: http://www.tho-bai.de


    Antwort schreiben


Antworten:

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)