Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по структуре DCB при работе с СОМ портом [D7]


Андрей Пл ©   (2006-08-19 09:42:00) 

Прошу подсказать следующее:
в хелпе я нашел описание структуры DCB:
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;


реально описано:

 _DCB = packed record
   DCBlength: DWORD;
   BaudRate: DWORD;
   Flags: Longint;
   wReserved: Word;
   XonLim: Word;
   XoffLim: Word;
   ByteSize: Byte;
   Parity: Byte;
   StopBits: Byte;
   XonChar: CHAR;
   XoffChar: CHAR;
   ErrorChar: CHAR;
   EofChar: CHAR;
   EvtChar: CHAR;
   wReserved1: Word;
 end;


значит битовые поля
  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

размещены в одном поле
Flags: Longint
Вопрос:  Как мне установить одноиз битовых полей - допустим поле fRtsControlв значение RTS_CONTROL_TOGGLE


Андрей Пл   (2006-08-22 15:33:00) [1]

спасибо получилось!


medved_68   (2006-08-20 15:07:00) [2]

Андрей Пл   На чем работаешь??? Если Delphi то см. класс TDCB, поле TDCB.Flags. Битовые маски хлопаются обычным OR

> Вопрос:  Как мне установить одно из битовых полей - допустим
> поле fRtsControl в значение RTS_CONTROL_TOGGLE


var
 DR:TDCB;
begin
//Открываем порт
GetCommState(HCom,DR);
DR.Flags:=DR.Flags or $3000
//Это и будет RTS_CONTROL_TOGGLE
//Если нужны другие значения то хлопаем $0000 - $2000
//По умолчанию RTS_CONTROL_HANDSHAKE
SetCommState(HCom,DR);
И все!!! 8:)))


Наверх

Титульная страница Поиск, карта сайта Написать письмо