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;
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.
- 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ẽ.
-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.
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.