1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Giới thiệu các hàm API và hàm visual c++ quan trọng sử dụng trong việc lập trình truyền thông nối tiếp

17 502 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 130,5 KB

Nội dung

HANDLE CreateFile LPCTSTR lpFileName, //tên file DWORD dwDesiredAccess, //phương thức truy cập DWORD dwShareMode, //chế độ chia sẻ LPSECURITY_ATTRIBUTES lpSecurityAttributes, //thuộc

Trang 1

GIỚI HIỆU CÁC HÀM API VÀ HÀM VISUAL C++ QUAN TRỌNG SỬ DỤNG TRONG VIỆC LẬP TRÌNH TRUYỀN THÔNG NỐI TIẾP

1 Hàm CreateFile():

Chức năng: Tạo mở hay cắt bớt tập tin, cổng COM, thiết bị, dịch vụ, hay bàn điều khiển Một handle được trả về để truy cập đối tượng

HANDLE CreateFile(

LPCTSTR lpFileName, //tên file

DWORD dwDesiredAccess, //phương thức truy cập

DWORD dwShareMode, //chế độ chia sẻ

LPSECURITY_ATTRIBUTES lpSecurityAttributes, //thuộc tính bảo mật DWORD dwCreationDispostion, //sự kiện xảy ra khi tạo file

DWORD dwFlagsAndAttributes, //cờ thuộc tính file

HANDLE hTemplateFile

);

Các tham số

lpFileName

[vào] Chuỗi khác rỗng chứa tên của đối tượng, như file, cổng COM, thiết bị đĩa, hoặc bàn điều khiển, để tạo hay mở

Khi lpFileName chỉ đến một cổng cần mở, bạn phải thêm dấu ‘:’ dằng sau

tên Thí dụ chỉ định COM1: để mở cổng COM1 Khi sử dụng IrCOMM, chỉ định COM3:

dwDesiredAccess

[vào] Phương thức truy cập đối tượng Một ứng dụng có thể thực hiện truy cập chỉ đọc (read-only), chỉ ghi (write-only), đọc/ghi, hay truy vấn thiết bị Bảng

sau mô tả các giá trị có thể của dwDesiredAccess

hiện truy vấn thuộc tính đối tượng mà không truy cập vào thiết bị

GENERIC_READ Chỉ định phương thức cho phép đọc lên đối tượng Dữ

liệu có thể được đọc và con trỏ file có thể di chuyển trên đối tượng Kết hợp với GENERIC_WRITE để truy cập dạng đọc/ghi

Trang 2

GENERIC_WRITE Chỉ định phương thức cho phép ghi lên đối tượng Dữ

liệu có thể được ghi và con trỏ file có thể di chuyển trên đối tượng Kết hợp với GENERIC_READ để truy cập dạng đọc/ghi

dwShareMode

[vào] Chế độ chia sẻ cho đối tượng Nếu dwShareMode = 0, đối tượng

không thể chia sẻ Các thao tác bên trong đối tượng sẻ không thành công cho đến khi handle được đóng

Tham số này có thể có nhiều giá trị khác nhau Bảng sau sẻ cho thấy các giá

trị thích hợp của dwShareMode.

FILE_SHARE_READ Thao tác con trên đối tượng chỉ có thể thành

công chỉ khi thực hiện đọc file

FILE_SHARE_WRITE Thao tác con trên đối tượng chỉ có thể thành

công chỉ khi ghi file

lpSecurityAttributes

[vào] Luôn = NULL

dwCreationDispostion

[vào] Sự kiện xảy ra khi file đang tồn tại, và không tồn tại Bảng sau mô tả

các gía trị khả dụng cho dwCreationDispostion

CREATE_NEW Tạo mới file Hàm không thành công nếu file đang

tồn tại

CREATE_ALWAYS Tạo mới file Nếu file đã tồn tại thì sẽ ghi đè

OPEN_EXISTING Mở file Hàm không thành công nếu file không tồn

tại

Phải sử dụng cờ này khi mở thiết bị bằng hàm createfile() bao gồm cả console

OPEN_ALWAYS Mở file nếu nó tồn tại Nếu không, tạo file như

trường hợp cờ dwCreationDisposition được đặt là

Trang 3

TRUNCATE_EXISTIN

G

Mở file Mở một lần, file bị cắt bớt nên kích thước của nó là 0 bytes Phải chỉ định truy cập

GENERIC_WRITE đối với loại cờ này Hàm thất bại nếu file không tồn tại

dwFlagsAndAttributes

[in] Thuộc tính và cờ cho file

Mọi sự kết hợp các thuộc tính có thể có của file đều được chấp nhận đối với

tham số dwFlagsAndAttributes Tất cả các thuộc tính khác đều chứa thuộc tính

FILE_ATTRIBUTE_NORMAL bảng sau mô tả các thuộc tính có thể của

dwFlagsAndAttributes

FILE_ATTRIBUTE_ARCHIVE Xác định file có thể lưu trữ Ứng dụng

dùng thuộc tính này để đánh dấu file trong trường hợp sao lưu hay loại bỏ

FILE_ATTRIBUTE_HIDDEN Xác định file bị ẩn Nó không có trong

danh sách của một thư mục thông thường

FILE_ATTRIBUTE_NORMAL Xác định rằng file không có tập thuộc

tính nào khác Thuộc tính này chỉ đúng nếu sử dụng một mình

FILE_ATTRIBUTE_READONLY Xác định rằng file là chỉ đọc

FILE_ATTRIBUTE_SYSTEM Xác định file là một phần hay được dành

riêng cho hệ điều hành (OS)

FILE_ATTRIBUTE_TEMPORAR

Y

Không được hỗ trợ

Mọi sự kết hợp các cờ cho phép đều được chấp nhận đối với tham số

dwFlagsAndAttributes Bảng sau cho thấy các giá trị cờ cho phép đối với dwFlagsAndAttributes

Trang 4

H

Chỉ định hệ thống ngay lập tức cache và ghi dữ liệu lên đĩa Hệ thống vẫn đệm quá trình ghi, nhưng không thể chậm trễ trong việc đẩy nó đi

FILE_FLAG_OVERLAPPED Cờ này không được hỗ trợ; mặc dù vậy

các phép đa xử lý đọc/ghi cùng lúc lên thiết bị thì được phép

FILE_FLAG_RANDOM_ACCE

SS Chỉ định file truy cập ngẫu nhiên Hệ thống dựa vào điều này để tối ưu việc lưu

đệm file

hTemplateFile

[vào] Được bỏ qua;

Giá trị trả về

Một handle trỏ đến file vừa mở Nếu file tồn tại trước khi gọi hàm và cờ

dwCreationDisposition là CREATE_ALWAYS hay OPEN_ALWAYS, Một lời

gọi hàm GetLastError trả về ERROR_ALREADY_EXISTS, ngay cả khi hàm mở

file thành công Nếu file tồn tại trước khi gọi hàm, GetLastError trả về 0.

INVALID_HANDLE_VALUE chỉ ra rằng có lỗi Để lấy thông tin chi tiết về lỗi,

gọi hàm GetLastError

Chú ý

Sử dụng hàm CloseHandle để đóng một kênh truy cập đối tượng trả về từ hàm CreateFile

Xác định giá trị 0 cho dwDesiredAccess cho phép ứng dụng dò tìm thuộc

tính đối tượng mà thậm chí không truy cập vào thiết bị Kiểu truy cập này rất có ích, Thí dụ nếu ứng dụng muốn biết kích thước của ổ đĩa và định dạng mà ổ đĩa đó

hỗ trợ mà không có đĩa trong ổ đĩa

Danh sách sau cho thấy các thao tác của hàm CreateFile trên các loại file,

tài nguyên thông tin, thiết bị, và bàn điều khiển:

Khi tạo mới hay cắt bớt một file đang tồn tại, hàm CreateFile thực hiện các

hành động sau:

Kết hợp các thuộc tính và cờ xác định bởi dwFlagsAndAttributes với

thuộc tính FILE_ATTRIBUTE_ARCHIVE

Trang 5

 Đặt chiều dài file về 0

CreateFile không thể xử dụng để truy cập file trong MODULES của

bộ nhớ ROM Các Module này được lưu trữ dưới nhiều định dạng khác nhau mà ứng dụng không thể truy cập được File ROM duy nhất có thể truy cập dùng hàm

CreateFile là những file trong đoạn FILES

Khi mở một file đang tồn tại, hàm CreateFile bỏ qua các thuộc tính được

xác định bởi dwFlagsAndAttributes và xác định chiều dài file dược vào giá trị

dwCreationDisposition

Sử dụng cờ FILE_FLAG_RANDOM_ACCESS đối với file lưu trên RAM, đặt file trong vùng lưu trữ đối tượng, sẽ không cho phép nén file Nếu đề cao sự thực thi, thì đây có thể không phải là giải pháp đúng Thao tác đọc ghi trên file nén

là chậm hơn so với file không nén

Hàm CreateFile có thê tạo một handle chỉ đến cổng COM Bằng cách đặt

tham số dwCreationDisposition là OPEN_EXISTING, phương thức truy cập chỉ

đọc, chỉ ghi, hay đọc/ghi đều có thể được phép

2 Hàm SetupComm()

Xác lập các thông số truyền thông cho thiết bị

BOOL SetupComm(

HANDLE hFile,

DWORD dwInQueue,

DWORD dwOutQueue

);

Các tham số

hFile

[vào] Handle trỏ đến các thiết bị truyền thông Hàm CreateFile trả về handle này

dwInQueue

[vào] Xác định kích thước bộ đệm vào của thiết bị, tính bằng byte

dwOutQueue

[vào] Xác định kích thước bộ đệm ra của thiết bị, tính bằng byte

Trang 6

Các giá trị trả về

Khác không nếu thành công ngược lại nếu thất bại Dùng hàm

GetlastError để lấy chi tiết mã lỗi.

Ghi chú

Sau khi tiến trình CreateFile thực hiện trả về một handle đến tài nguyên

thông tin thì có thể gọi hàm SetupComm để xác lập các thông số cho thiết bị Nếu

không xác lập các thông số này thì thiết bị sẽ sử dụng tham số mặc định khi xảy ra việc gọi hàm để mở một tài nguyên thông tin khác

Tham số dwInQueue và dwOutQueue xác định kích thước (byte) yêu cầu

cho bộ đệm bên trong của thiết bị được dùng bởi trình điều khiển thiết bị Thí dụ giáo thức YMODEM các gói có kích thước lớn hơn 1024 byte một ít Kích thước

bộ đệm yêu cầu cho tài nguyên YMODEM có thể là 1200 byte

Thiết bị nhận dữ liệu theo kích thước buffer, nhưng lại tự do sử dụng bất cứ

mô hình đệm nào

3 Hàm PurgeComm

Hàm có thể xóa tất cả các kí tự trong bộ đệm vào và bộ đệm ra của tài nguyên thông tin Nó cũng dừng việc đọc ghi trên tài nguyên

BOOL PurgeComm(

HANDLE hFile,

DWORD dwFlags

);

Các tham số

hFile

[vào] Handle trỏ đến tài nguyên thông tin

dwFlags

[in] Xác định hành động thực hiện Theo mô tả ở bảng sau:

PURGE_TXABORT Hủy bỏ tất cả quá trình ghi hiện thời ngay cả khi quá

trình ghi chưa hoàn tất

PURGE_RXABORT Hủy bỏ tất cả quá trình đọc hiện thời ngay cả khi quá

trình đọc chưa hoàn tất

Trang 7

PURGE_TXCLEAR Xóa bộ đệm ra, nếu thiết bị có bộ đệm ra.

PURGE_RXCLEAR Xóa bộ đệm vào nếu thiết bị có bộ đệm vào

Giá trị trả về

Khác không nếu thành công Bằng không nếu thất bại Chi tiết lỗi trả về bởi

hàm GetLastError.

Ghi chú

Nếu một tiểu trình sử dụng PurgeComm để chùi bộ đệm ra, các kí tự đã bị

xóa thì không truyền được Để chùi sạch bộ đệm ra mà vẫn đảm bảo dữ liệu đã

được truyền thì gọi hàm FlushFileBuffers (một phương thức để đồng bộ hóa) Chú ý rằng, đôi khi, hàm FlushFileBuffers đựoc đưa ra để điều khiển luồng

nhưng không ghi time-outs, và nó sẽ không trả về cho đến khi quá trình ghi kết thúc

4 Cấu trúc DCB (Device Control Block - 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; // kích thước của DCB

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

DWORD fBinary: 1; // chế độ nhị phân, không kiểm tra EOF

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 Terminal Ready) 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; // đ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; // trạng thái không sử dụng

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

WORD XoffLim; // ngưỡng truyền XOFF

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

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

BYTE StopBits; // 0,1,2 = 1, 1.5, 2

char XonChar; // kí tự XON Tx và Rx

char XoffChar; // kí tự XOFF Tx và Rx

char ErrorChar; // kí tự thay thế nếu lỗi

Trang 8

char EofChar; // kí tự kết thúc

char EvtChar; // 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_4800

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

Trang 9

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_HANDSHAK

E 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

fErrorChar

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 em 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:

Trang 10

RTS_CONTROL_DISABLE Vô hiệu hóa dòng RTS.

RTS_CONTROL_HANDSHAK

E

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 RTSsẽ ở 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

Trang 11

Parity

Xác định mô hình chắn lẽ được dùng Có các giá trị sau:

Giá trị Ý nghĩa

EVENPARITY Ngang bằng

MARKPARITY Đánh dấu

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

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

Ngày đăng: 03/01/2016, 19:12

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w