![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Flow control в BCD
anton1209 © (2006-07-18 11:47:00)в настройках ком порта есть параметр flow control у меня он выставлен Xon / Xoff, как указать это в структуре BCD?
procedure PortInit;
var
nb :DWORD;
ov :TOVERLAPPED;
begin
KolByte:=0;
CommHandle := CreateFile('COM1',
GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if CommHandle = INVALID_HANDLE_VALUE then
begin
ShowMessage('Error opening port ');
Exit;
end;
GetCommState(CommHandle,DCB);
DCB.BaudRate:=CBR_9600;
DCB.Parity:=ODDPARITY;
DCB.ByteSize:=7;
DCB.StopBits:=OneStopBit;
SetCommState(CommHandle, DCB);
WriteFile(CommHandle, '#DCL#@@@@@@', 11, nb, @Ovr);
CloseHandle(CommHandle);
end;
Ketmar (2006-07-19 16:58:00) [1]>medved_68 © (19.07.06 12:16) [9]
указатели тоже имеют типы.
medved_68 (2006-07-19 12:16:00) [2]
> Ketmar
Дело в том что практически в большинстве АРИ работающих с портом передаются указатели на DCB (оговариваются что DCB должен быть создан (выделена память под него) и в поле размера должен стоять размер DCB ). Так вот я выполнял все эти условия но компилятор ругался и на несоответствие типов и еще не помню на что.
> объявленые под разными именами одинаковыми не считаются.
Но ведь в АРИ функции передаются указатели на область памяти причем тут имена??? Поясни если не трудно.
Ketmar (2006-07-19 11:41:00) [3]>medved_68 © (19.07.06 09:17) [7]
"навороты" в проверке типов языка. две одинаковых по размерам (и даже по полям) записи, объявленые под разными именами одинаковыми не считаются.
medved_68 (2006-07-19 09:17:00) [4]
> 2tesseract
> ИМХО проще структурку переписать. Инфы больше.
А зачем корячиться если все необходимое сделано???? И по DCB.Flags в нете инфы полно.
> 2Ketmar
> ну и как в D7, например, сделать битовые поля?
Извратиться всегда можно. Другое дело когда я создал аналог Сишного DCB в виде рекорда и попробовал указатель на него передать в АРИ функцию работы с портом компилятор у меня начал ругаться и на несоответствие типов и еще на черт знает что. Хотя все было по инфе и размер DCB бил в копеечку и указатель смотрел куда надо. Так и остался в непонятках 8:((( Единственное что опосля пришло на ум что борландовский ТDCB класс обертка может здесь какие то навороты????
Ketmar (2006-07-18 21:55:00) [5]>tesseract © (18.07.06 21:36) [5]
ну и как в D7, например, сделать битовые поля?
tesseract (2006-07-18 21:36:00) [6]> Там есть такая штука как DCB.Flags. Практически повторяет
> [1].
ИМХО проще структурку переписать. Инфы больше.
medved_68 (2006-07-18 18:16:00) [7]
> в описании DCB в Delphi нет возможности контроля потока.
> Его надо подправить
Там есть такая штука как DCB.Flags. Практически повторяет [1].
> anton1209
Хлопаешь нужную маску и привет. 8:)))
tesseract (2006-07-18 14:37:00) [8]в описании DCB в Delphi нет возможности контроля потока. Его надо подправить.
anton1209 (2006-07-18 14:33:00) [9]если честно не понял
tesseract (2006-07-18 13:59:00) [10]Переписать DCB из msdn. Delphi структура от неё отличается.
выглядит так :
typedef struct _DCB { // dcb
DWORD DCBlength; // sizeof(DCB)
DWORD BaudRate; // current baud rate
DWORD fBinary: 1; // binary mode, no EOF check
DWORD fParity: 1; // enable parity checking
DWORD fOutxCtsFlow:1; // CTS output flow control
DWORD fOutxDsrFlow:1; // DSR output flow control
DWORD fDtrControl:2; // DTR flow control type
DWORD fDsrSensitivity:1; // DSR sensitivity
DWORD fTXContinueOnXoff:1; // XOFF continues Tx
DWORD fOutX: 1; // XON/XOFF out flow control
DWORD fInX: 1; // XON/XOFF in flow control
DWORD fErrorChar: 1; // enable error replacement
DWORD fNull: 1; // enable null stripping
DWORD fRtsControl:2; // RTS flow control
DWORD fAbortOnError:1; // abort reads/writes on error
DWORD fDummy2:17; // reserved
WORD wReserved; // not currently used
WORD XonLim; // transmit XON threshold
WORD XoffLim; // transmit XOFF threshold
BYTE ByteSize; // number of bits/byte, 4-8
BYTE Parity; // 0-4=no,odd,even,mark,space
BYTE StopBits; // 0,1,2 = 1, 1.5, 2
char XonChar; // Tx and Rx XON character
char XoffChar; // Tx and Rx XOFF character
char ErrorChar; // error replacement character
char EofChar; // end of input character
char EvtChar; // received event character
WORD wReserved1; // reserved; do not use
} DCB;