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

Re: Download Tool Kategorie: Verschiedenes (von Markus A. - 6.03.2004 21:19)
Als Antwort auf Re: Download Tool von Thomas - 6.03.2004 15:58
Ich nutze:
OSOPT V3.0
> So, hab den C-Quellcode jetz soweit umgeschrieben, das er funktionieren sollte. Ich bekomme
> auch auf jedes übertragene Byte ein korrektes Echo, aber nach der �bertragung der konstanten
> Bytes schaltet die C-Control wieder auf HOSTMODE und somit werden die VMC-Codeworte
> nicht übertragen.
> Woran kann das liegen? Ich übertrage erst die 64 als 64,0,0,0 und bekomme 64,0,0,0 als Echos.
> AnschlieÃ?end das gleiche mit der 32 und dann die restlichen Worte mit je 2 Byte 1,0...
>

Grüss Dich Thomas,
eine Sache ging mir erst sehr spät auf, nachdem ich
selbst eine Weile rumprobiert hatte:
Die Konstantbytes sind Bytes und müssen als
Bytes übertragen werden und die VCM-Code-Worte eben
als Integer-Werte (=2 Bytes).
Hier meine Version eines Linux Downloadtools, es
funktioniert, aber es ist zugegebenermassen sehr
"quick and dirty" programmiert:

Melde Dich mal, ob es bei Dir auch geht    Markus


 #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 definit */

 // Seriellen Port initialisieren
 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_RESET = 255;
 char CMD_INFO = 0;
 char CMD_DATE = 1;
 char CMD_VERSION = 2;
 char CMD_LOAD = 4;
 char CMD_ERASE_VMC = 6;



 int fd, i = 0;
 long int length, length2;
 char ch;
 char buf [255];

FILE *f;

char Zeichen;
char Text[10000000];
char Word[80];
long Codes[1000000];
int DateiLaenge;
int Pos;
int WordLength;
long ix, iz;
int  jj;

long m, n, m1, n1, q;
long a, b, c, j;
long pause;
char fehler;

pause  = 5000;


int GetWord()
{  char C;


     WordLength = 0;
     Word[0] = '';

     while (1)
     {
     /* printf("%d   %d n", DateiLaenge, Pos); */
        /* if reach the end of the file, leave, reporting failure */
        if (Pos == DateiLaenge) return 0;
        C = Text[Pos];
        /* if hit the end of the word, leave, otherwise record the
           current character in the array Word */

        if (C == ' ' || C == 'n' || C == 13)
{
Pos++;
if (WordLength != 0) break;
}
        else
{
           Word[WordLength] = C;
  WordLength++;
           Pos++;
  Word[WordLength] = '';
        }
     }

     return 1;
  }


 // Info der Unit auslesen und anzeigen

 printf("nLinux DownloadTool Version 0.1nn");

 for (i=0; i<=255; i++) buf[i] = 0;
 write(sfd, &CMD_INFO, 1);
 usleep(100000);
 read(sfd, buf, 255);
 printf("%s  ", buf);

 for (i=0; i<=255; i++) buf[i] = 0;
 write(sfd, &CMD_VERSION, 1);
 usleep(100000);
 read(sfd, buf, 255);
 printf("Version: %s  ", buf);

 for (i=0; i<=255; i++) buf[i] = 0;
 write(sfd, &CMD_DATE, 1);
 usleep(100000);
 read(sfd, buf, 255);
 printf("vom: %sn", buf);






// VMC Datei auslesen und in der Varialbe Text speichern
f = fopen(filen, "r");
DateiLaenge=0;
while (!feof(f))
{
Zeichen = fgetc(f);
Text[DateiLaenge] = Zeichen;
DateiLaenge++;
}
Text[DateiLaenge+1] = '';
fclose(f);


// Aus der Variable Text die einzelnen Code-Werte bestimmen
Pos = 0;
j = 0;
i = 0;
while (GetWord() != 0)
{
if (j == 1) sscanf(Word, "%ld", &m);
if (j == 2) sscanf(Word, "%ld", &n);
if (j > 2) {sscanf(Word, "%ld", &a); Codes[j-3] = a;  };
j++;
};
printf("%s  : ", filen);
printf("KonstantenBytes : %ld; CMD-Code-Worte  %ldn", m, n);





 //VMC löschen
 write(sfd, &CMD_ERASE_VMC, 1);
 //2500ms warten
 usleep(2500000);
 read(sfd, buf, 1);
 // printf("%dn", buf[0]);



 //Laden des VMC-Codes einleiten
 write(sfd, &CMD_LOAD, 1);
 usleep(500000);

 // Anzahl der KonstantenBytes m übergeben
 m1 = m;
 n1 = n;
 for (i=1; i<=4; i++)
 {
 jj = m1 % 256;
 write(sfd, &jj, 1);
 usleep(pause);
 read(sfd, buf, 1);
 a = buf[0];
 if (a<0) a = 256+a;
 // printf("%d ", a);
 m1 = m1/256;
 };
 // printf("n");

 // Anzahl der VCM-Code-Worte n übergeben
 for (i=1; i<=4; i++)
 {
 jj = n1 % 256;
 write(sfd, &jj, 1);
 usleep(pause);
 read(sfd, buf, 1);
 a = buf[0];
 if (a<0) a = 256+a;
 // printf("%d ", a);
 n1 = n1/256;
 };
 // printf("n");


 printf("Ã?bertragung beginnt ...n");
 fehler = 0;

 for (i=0; i<= (m+n-1); i++)
 {
 jj = Codes[i] % 256;
 write(sfd, &jj, 1);
 usleep(pause);
 read(sfd, buf, 1);
 a = buf[0];
 if (a<0) a = 256+a;
 if (a != jj) fehler = 1;
 // printf("%d : %d ", i, a);
 // if (i<m) printf(" < ConstByten");


 if (i>m-1)
 {
 jj = Codes[i] / 256;
 write(sfd, &jj, 1);
 usleep(25000);
 read(sfd, buf, 1);
 b = buf[0];
 if (b<0) b = 256+b;
 if (b != jj) fehler = 1;
 c = a + 256*b;
 // printf("%d : %d < VCM-Coden", b, c);
 }

 }

if (fehler == 1) printf("nÃ?bertragung war fehlerhaft!nn");
if (fehler == 0) printf("nÃ?bertragung war erfolgreich!nn");


// Reset der Unit
write(sfd, &CMD_RESET, 1);

return 0;



 }

 // Bei Aufruf des DownloadTools aus eienr Shell muss die Datei
 // mit angegeben werden, z. B. ./dltool beeper.c2p.vmc

 int main(int arc, char *argv[])
 {
 int comport = open_port("/dev/ttyS0");
 sendprog(argv[1], comport);
 }



    Antwort schreiben


Antworten:

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)