Cấu trỳc DCB (Device Control Bloc k Khối điều khiển thiết bị).

Một phần của tài liệu Hướng dẫn lập trình VC 6++ (Trang 79 - 84)

0. Xỏc định truy vấn đối tượng Một ứng dụng cú thể truy vấn thuộc tớnh đối tượng mà

3.6.1.4.Cấu trỳc DCB (Device Control Bloc k Khối điều khiển thiết bị).

Cấu trỳc DCB định nghĩa cỏc thiết lập điều khiển cho một thiết bị truyền thụng nối tiếp.

typedef struct _DCB {

DWORD DCBlength; &n bsp; // kớch thước của DCB

DWORD BaudRate; &nb sp; // tốc độ truyền hiện tại

DWORD fParity: 1; // cho phộp kiểm tra chẵn lẽ

DWORD fOutxCtsFlow:1; // điều khiển luồng ra CTS (Clear To Send)

DWORD fOutxDsrFlow:1; // điều khiển luồng ra DSR (Data Set Ready)

DWORD fDtrControl:2;

// kiểu điều khiển luồng DTR (Data TerminalReady)

DWORD fDsrSensitivity:1; // độ nhạy DSR

DWORD fTXContinueOnXoff:1; // XOFF tiếp tục Tx

DWORD fOutX: 1; // điều khiển luồng ra XON/XOFF

DWORD fInX: 1; &nbs p; // điều khiển luồng vào XON/XOFF

DWORD fErrorChar: 1; // cho phộp thay thế nếu lỗi

DWORD fNull: 1; // cho phộp cắt bớt phần NULL

DWORD fRtsControl:2; // điều khiển luồng RTS (Ready To Send)

DWORD fAbortOnError:1; // bỏ qua nếu lỗi

DWORD fDummy2:17; // dành riờng

WORD wReserved; &n bsp; // trạng thỏi khụng sử dụng

WORD XonLim; ; // ngưỡng truyền XON

WORD XoffLim; &nbs p; // ngưỡng truyền XOFF

BYTE ByteSize; &nb sp; // số lượng bit/byte, 4-8

BYTE Parity; ; // 0-4=no,odd,even,mark,space

BYTE StopBits; &nb sp; // 0,1,2 = 1, 1.5, 2

char XonChar; &nbs p; // kớ tự XON Tx và Rx

char XoffChar; &nb sp; // kớ tự XOFF Tx và Rx

char ErrorChar; &n bsp; // kớ tự thay thế nếu lỗi

char EofChar; &nbs p; // kớ tự kết thỳc

char EvtChar; &nbs p; // kớ tự trạng thỏi nhận

WORD wReserved1; // dành riờng, khụng sử dụng

} DCB; (adsbygoogle = window.adsbygoogle || []).push({});

Cỏc thành phần : - DCBlength

Xỏc định chiều dài (byte) của khối cấu trỳc DCB. -BaudRate

Xỏc định tốc độ baud mà ở đú thiết bị hoạt động. Thành phần này cú thể là giỏ trị hiện tại, hay là một trong cỏc giỏ trị sau:

CBR_110 //110 bits per second CBR_19200 CBR_300 CBR_38400 CBR_600 CBR_56000 CBR_1200 CBR_57600 CBR_2400 CBR_115200

CBR_128000 CBR_9600 CBR_256000 CBR_14400

- fBinary

Chỉ định chế độ nhị phõn. Cỏc hàm Window32 API khụng hỗ trợ chế độ khụng phải là nhị phõn, vỡ vậy giỏ trị này phải luụn là TRUE.

- fParity

Chỉ định xem cú cho phộp kiểm tra chẵn lẻ khụng. Nếu TRUE, thực hiện kiểm tra chẵn lẽ với bỏo cỏo lỗi nếu cú.

- fOutxCtsFlow

Xỏc định xem tớn hiệu CTS (clear-to-send) cú được giỏm sỏt cho điều khiển luồng ra hay khụng. Nếu TRUE và CTS tắt, đầu ra sẽ được dừng cho đến khi CTS được gửi lại một lần nữa.

- fOutxDsrFlow

Xỏc định xem tớn hiệu DSR (Data-Send-Ready) cú được giỏm sỏt cho điều khiển luồng ra hay khụng. Nếu TRUE và DSR tắt, đầu ra sẽ được dừng cho đến khi DSR được gửi lại một lần nữa.

- fDtrControl

Xỏc định điều khiển luồng DTR (data-terminal-ready). Thành phần này cú thể là một trong cỏc giỏ trị sau.

DTR_CONTROL_DISABLE :Vụ hiệu húa DTR. DTR_CONTROL_ENABLE :Cho phộp DTR

DTR_CONTROL_HANDSHAKE : Cho phộp DTR dạng ‘bắt tay’. nếu handshake

được phộp, Nếu ứng dụng tăng dũng bằng hàm EscapeCommFunction thỡ sẽ gõy ra lỗi. -fDsrSensitivity

Xỏc định xem trỡnh điều khiển truyền thụng sẵn sàng ở trạng thỏi đún nhận tớn hiệu

DSRl. Nếu gớ trị này TRUE thỡ trỡnh điều khiển sẽ bỏ qua tất cả cỏc byte dữ liệu nhận

được trừ khi đường vào DSR của modem đang ở trạng thỏi cao. -fTXContinueOnXoff

Xỏc định việc truyền cú dừng lại khi bộ đệm vào đầy và trỡnh điều khiển thiết bị đó truyền kớ tự XoffChar. Nếu mang giỏ trị TRUE, việc truyền tiếp tục sau khi bộ đệm vào đạt đến giỏ trị XoffLim xỏc định đầy và trỡnh điều khiển thiết bị đó truyền kớ tự

XoffChar để dừng việc nhận cỏc byte. Nếu mang giỏ trị FALSE, việc truyền khụng tiếp

tục cho đến khi bộ đệm vào trong phạm vi XonLim là rỗng và trỡnh điều khiển thiết bị đó truyền kớ tự XonChar để tiếp tục nhận.

- fOutX

Xỏc định xem điều khiển luồng XON/XOFF cú được sử dụng trong suốt quỏ trỡnh truyền. Nếu mang gớa trị TRUE, việc truyền dừng khi nhận được kớ tự XoffChar và bắt đầu lại khi nhận được kớ tự XonChar.

- fInX

Xỏc định xem điều khiển luồng XON/XOFF được sử dụng trong suốt quỏ trỡnh nhận. Nếu TRUE, kớ tự XoffChar được gửi khi bộ đệm vào ở trong khoảng XoffLim là đầy, và kớ tự XonChar được gửi khi bộ đệm vào XonLim là rỗng.

Xỏc định xem cỏc byte đó nhận cú lỗi chẵn lẽ được thay thế bằng cỏc kớ tự thuộc

ErrorChar. Nếu TRUE và fParity TRUE, việc thay thế xảy ra. (adsbygoogle = window.adsbygoogle || []).push({});

- fNull

Xỏc định xem cú bỏ qua byte rổng khụng. Nếu TRUE, thực hiện bỏ qua. - fRtsControl

Xỏc định điều khiển luồng RTS (request-to-send). Cú thể cú cỏc giỏ trị sau:

RTS_CONTROL_DISABLE :Vụ hiệu húa dũng RTS. RTS_CONTROL_ENABLE :Cho phộp dũng RTS.

RTS_CONTROL_HANDSHAKE :Cho phộp chế độ bắt tay RTS. Trỡnh điều khiển thiết

bị nõng dũng RTS khi bộ đệm (vào) "type-ahead" bộ hơn một nữa so với khi đầy và hạ dũng RTS khi bộ đệm lớn hơn ắ so với khi đầy. Nếu chế độ bẳt tay được cho phộp, thỡ sẽ gõy lỗi cho ứng dụng nếu thực hiện tăng dũng sử dụng hàm EscapeCommFunction.

RTS_CONTROL_TOGGLE :Xỏc định rằng dũng RTS sẽ ở trạng thỏi cao nếu byte sẵn

sàng để truyền. Sau khi tất cả cỏc byte trong bộ đệm được gửi, dũng RTS sẽ trở về trạng thỏi thấp.

- fAbortOnError

Xỏc định xem quỏ trỡnh đọc ghi cú bị dừng lại khi xảy ra lỗi hay khụng. Nếu TRUE, trỡnh điều khiển thiết bị sẽ bỏ qua tất cả cỏc thao tỏc đọc ghi cựng với một trạng thỏi lỗi. Trỡnh điều khiển thiết bị sẽ khụng thực hiện bất kỡ thao tỏc đọc ghi nào cho đến khi ứng dụng xỏc nhận lỗi bằng cỏch gọi hàm ClearCommError.

- fDummy2

Dành riờng, khụng sử dụng -wReserved

Khụng sử dụng, mang giỏ trị 0. -XonLim

Xỏc định số lượng tối thiểu cỏc byte trong bộ đệm vào trước khi kớch hoạt điều khiển luồng để ngăn chặn đầu gửi. Chỳ ý rằng đầu gửi cú thể truyền cỏc kớ tự sau khi tớn hiệu điều khiển luồng được kớch hoạt, vỡ vậy giỏ trị này phải luụn khỏc 0. Điều này xem hoặc điều khiển luồng XON/XOFF, RTS, hay DTR được xỏc định trong fInX, fRtsControl, hay fDtrControl.

-XoffLim

Xỏc định số lượng tối đa cỏc byte được phộp ở trong bộ đệm vào trước khi điều khiển luồng được kớch hoạt để cho phộp truyền bởi đầu gửi. Xem như hoặc điều khiển luồng vào XON/XOFF, RTS, hay DTR được xỏc định trong fInX, fRtsControl, hay

fDtrControl. Số lượng tối đa cỏc byte được cho phộp tớnh bằng cỏch trừ giỏ trị này với

kớch thước (byte) của bộ đệm vào. -ByteSize

Xỏc định số bit/byte ở đầu nhận và gửi. -Parity

Xỏc định mụ hỡnh chắn lẽ được dựng. Cú cỏc giỏ trị sau:

EVENPARITY :Ngang bằng MARKPARITY :Đỏnh dấu NOPARITY :Khụng cú

SPACEPARITY :Khoảng trắng -StopBits

Xỏc định số lượng cỏc bit dừng được sử dụng. Cú thể cú cỏc giỏ trị sau

ONESTOPBIT :1 bit dừng ONE5STOPBITS :1.5 bit dừng TWOSTOPBITS :2 bit dừng

-XonChar

Xỏc định kớ tự XON cho cả truyền và nhận.

-XoffChar

Xỏc định kớ tự XOFF cho cả truyền và nhận.

-ErrorChar

Xỏc định kớ tự thay thế trong trường hợp lỗi chẵ lẽ. (adsbygoogle = window.adsbygoogle || []).push({});

-EofChar Xỏc định kớ tự kết thỳc. -EvtChar Xỏc định kớ tự tớn hiệu. -wReserved1 Khụng dựng. Ghi chỳ :

Khi một khối cấu trỳc DCB được sử dụng để cấu hỡnh 8250, cỏc giỏ trị sau được chỉ định thiết lập thành phần ByteSize và StopBits:

• Số lượng databit phải là 5 đến 8 bit.

•Sử dụng 5 bit dữ liệu với 2 bit dừng là một sự kết hợp sai, cũng giống như 6, 7, hay 8 bit dữ liệu với 1.5 bit dừng.

3.6.1.5. Hàm GetCommState .

Hàm nhận về thiết lập hiện thời của thiết bị thụng tin hiện tại.

BOOL GetCommState(

HANDLE hFile, // trỏ đến thiết bị thụng tin

LPDCB lpDCB // khối điều khiển thiết bị

);

Cỏc tham số - hFile

[vào] Trỏ đến thiết bị thụng tin. Hàm CreateFile trả về con trỏ này. - lpDCB

[ra] Trỏ đến cấu trỳc DCB nhận về thụng tin thiết lập. Cỏc giỏ trị trả về

Giỏ trị trả về khỏc khụng nếu thành cụng. ngược lại trả về 0, dựng hàm GetLastError để biết chi tiết lỗi.

3.6.1.6. Hàm SetCommState.

Hàm SetCommState cấu hỡnh thiết bị thụng tin dựa trờn thụng tin cú trong khối DCB. Hàm thiết lập tất cả cỏc giỏ trị phần cứng và điều khiển nhưng khụng xúa dữ liệu trong

bộ đệm.

BOOL SetCommState(

HANDLE hFile, // trỏ đến thiết bị thụng tin LPDCB lpDCB // khối thụng tin điều khiển

);

Cỏc tham số

- hFile

Trỏ đến thiết bị thụng tin. Hàm CreateFile trả về con trỏ này. - lpDCB

Trỏ đến khối DCB chứa thụng tin cấu hỡnh thiết bị. Cỏc giỏ trị trả về

Hàm thành cụng nếu giỏ trị trả về khỏc 0.

Hàm thất bại nếu giỏ trị trả về bằng 0, dựng hàm GetLastError để lấy chi tiết lỗi. Ghi chỳ :

Hàm SetCommState sử dụng khối DCB để xỏc định cấu hỡnh mỡnh muốn. Hàm

GetCommState Trả về thiết lập hiện tại.

Để thiết lập một vài tham số của khối cấu trỳc DCB, bạn nờn hiệu chỉnh khối DCB đó được điền bằng cỏch gọi GetCommState. Điều này bảo đảm rằng cấu trỳc DCB cú cỏc giỏ trị phự hợp.

Hàm SetCommState thất bại nếu thành phần XonChar của cấu trỳc DCB bằng thành phần XoffChar. (adsbygoogle = window.adsbygoogle || []).push({});

Khi hàm SetCommState được sử dụng để cấu hỡnh 8250, ràng buộc được ỏp đặt cho thành phần ByteSize và StopBits của DCB:

Số lượng bit dữ liệu phải từ 5 đến 8.

Một phần của tài liệu Hướng dẫn lập trình VC 6++ (Trang 79 - 84)