J
So unterhalte ich mich mit dem Mikrocontroller:
//Initialisieren
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ReturnedHandle = CreateFile(//As per Win32 help !
"COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,NULL
);
// GetCommTimeouts(ReturnedHandle,&timeoutold);
timeoutold.ReadIntervalTimeout=MAXDWORD;
timeoutold.ReadTotalTimeoutConstant=1000;
timeoutold.ReadTotalTimeoutMultiplier=1;
timeoutold.WriteTotalTimeoutConstant=1000;
timeoutold.WriteTotalTimeoutMultiplier=1;
char acdef[255];
strcpy(acdef,"baud=28800 parity=N data=8 stop=1 ");
if(BuildCommDCB(acdef,&lpdcb)==FALSE)
{Systemmeldung();}
if(SetCommState(ReturnedHandle,&lpdcb)==FALSE)
{Systemmeldung();}
if(SetCommTimeouts(ReturnedHandle,&timeoutold)==FALSE)
{Systemmeldung();}
else{};
/******* Senden ***********************************************************/
void senden( uchar* puffer, DWORD len,HANDLE hFile){
DWORD buff;
for (int i=1;i<(len-1);i++)
puffer[len-1]+=puffer[i];
if(WriteFile(hFile,puffer,len,
&buff,NULL)==FALSE)
{
Systemmeldung();
}
}
/******* lesen(): Zentrale Leseroutine: Angabe: wiviel Bytes und wohin
* Lesen von uint typ, len Bytes nach uchar. Letztes Byte ist fcs.
* fcs wird nur gelesen wenn len>0, FCS gilt nur fuer DATENblock */
int lesen( unsigned char typ ,unsigned char *dest, DWORD len,HANDLE hFile)
{
uchar rx_fcs=0;
DWORD fguff; //Anzahl geles.Bytes
if(ReadFile(hFile,dest, len,
&fguff,NULL)==FALSE)
{ Systemmeldung(); }
if (fguff!=len){Application->MessageBox("Fehler beim Empfangen", " Timeout", MB_OK|MB_ICONSTOP);
return -1 ;
}
if(typ!=dest[0]){Application->MessageBox(" Fehler beim Typ ", " Timeout ", MB_OK|MB_ICONSTOP);
return -2;}
if (len!=1){
for (int i=1;i<(len-1);i++)
rx_fcs+=dest[i];
if (rx_fcs!=dest[len-1]){
Application->MessageBox(" Fehler FCS ", " Timeout ", MB_OK|MB_ICONSTOP);
return -3 ; }
}
return 0; /* Ansonst: OK! */
}