Николай Коровин (17.03.2006 02:17, просмотров: 1) ответил Николай Коровин на Ксю, ночь на дворе, откуда ты тут? :) Смеяться будешь, пока копировал, заметил влепленную с недосыпа опечатку :) Ожило :)
Шагнем дальше: можно ли эту заразу заставить работать на скоростях выше 115200, если порт это явно умеет? volatile BOOL Data_Cmd, Len_Cmd;
UINT CntrCommandLost;
HANDLE hCom;
int InitCom(char* Com, int ComBaud)
{
DCB dcb;
COMMTIMEOUTS TO;
BOOL fSuccess;
Data_Cmd = FALSE;
Len_Cmd = FALSE;
CntrCommandLost = 1;
hCom = CreateFile((const char *)Com, GENERIC_READ | GENERIC_WRITE,
0, // comm devices must be opened w/exclusive-access
NULL, // no security attrs
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
if (hCom == INVALID_HANDLE_VALUE)
{
return 0;
}
GetCommState(hCom,&dcb);
dcb.BaudRate = ComBaud;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fOutxCtsFlow=0;
dcb.fOutxDsrFlow=0;
dcb.fDsrSensitivity=0;
dcb.fDtrControl=DTR_CONTROL_DISABLE;
dcb.fOutX=0;
dcb.fInX=0;
dcb.fRtsControl=RTS_CONTROL_DISABLE;
dcb.fAbortOnError=0;
fSuccess = SetCommState( hCom, &dcb);
if(!fSuccess) return 0; // fail
PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);
GetCommTimeouts( hCom,&TO);
TO.ReadIntervalTimeout=MAXDWORD;
TO.ReadTotalTimeoutMultiplier=0;
TO.ReadTotalTimeoutConstant=0;
SetCommTimeouts( hCom,&TO);
return 1;
}
далее
if (InitCom ("COM1", 115200))
{
* * *
retry: WriteFile (hCom,&B,1,&M,NULL);
if (!M) goto retry;
}