Giáo trình Môn Hệ Nhúng - Chương 5: Phần mềm điều khiển trên PC - Phạm Văn Thuận
Các thiết bị không thuộc class nào
Người viết firmware tự định nghĩa các endpoints,
định dạng report
=> Sử dụng thư viện WinUSB của Microsoft
83 trang |
Chia sẻ: huongthu9 | Lượt xem: 513 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Giáo trình Môn Hệ Nhúng - Chương 5: Phần mềm điều khiển trên PC - Phạm Văn Thuận, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Hệ nhúng
263
Nội dung chương 5
Chương 5: Phần mềm điều khiển trên PC
5.1. Mô hình hệ thống đo lường và điều khiển số
5.2. Lập trình giao tiếp cổng COM
5.3. Lập trình giao tiếp cổng USB
Hệ nhúng
5.1. Mô hình hệ thống đo lường và điều khiển số
(DCS)
264
Hệ nhúng
Mô hình hệ thống DCS
265
Hệ nhúng
Các Module trong phần mềm điều khiển
Module cơ sở dữ liệu
Module giao diện: giao tiếp với người dùng
Module giao tiếp với mạch phần cứng
Hệ nhúng
Module giao tiếp với mạch phần cứng
Tùy thuộc vào từng ứng dụng, các giao tiếp có
thể rất đa dạng
• Giao tiếp qua mạng: TCP/IP, GSM, GPRS, 3G
• Giao tiếp qua cổng COM
• Giao tiếp qua chuẩn USB
•
Hệ nhúng
5.2. Lập trình giao tiếp cổng COM
Tổng quan chuẩn RS232
Lập trình giao tiếp cổng COM
• Lập trình sử dụng điều khiển SerialPort
• Lập trình sử dụng hàm API của Windows
268
Hệ nhúng
269
Chuẩn RS232
Mức điện áp đường truyền
Chuẩn đầu nối trên máy tính PC
Khuôn dạng khung truyền
Tốc độ truyền
Kịch bản truyền
Hệ nhúng
270
Chuẩn RS232
Mức điện áp đường truyền (Chuẩn RS-232C)
Hệ nhúng
271
Chuẩn RS232
Chuẩn đấu nối trên PC
UART UART
UART (Universal Asynchronous receiver/transmitter)
Hệ nhúng
272
Chuẩn RS232
Chuẩn đầu nối trên PC
• Chân 1 (DCD-Data Carrier Detect):
phát hiện tín hiệu mang dữ liệu
• Chân 2 (RxD-Receive Data): nhận
dữ liệu
• Chân 3 (TxD-Transmit Data): truyền
dữ liệu
• Chân 4 (DTR-Data Terminal Ready):
đầu cuối dữ liệu sẵn sàng
• Chân 5 (Signal Ground): đất của tín
hiệu
• Chân 6 (DSR-Data Set Ready): dữ
liệu sẵn sàng
• Chân 7 (RTS-Request To Send): yêu
cầu gửi
• Chân 8 (CTS-Clear To Send): Xóa
để gửi
• Chân 9 (RI-Ring Indicate): báo
chuông
Hệ nhúng
273
Chuẩn RS-232:
Hệ nhúng
274
Chuẩn RS-232
Hệ nhúng
275
Chuẩn RS232
Khuôn dạng khung truyền
• PC truyền nhận dữ liệu qua cổng nối tiếp RS-232 thực
hiện theo kiểu không đồng bộ (Asynchronous)
• Khung truyền gồm 4 thành phần
1 Start bit (Mức logic 0): bắt đầu một gói tin, đồng bộ xung
nhịp clock giữa DTE và DCE
Data (5,6,7,8 bit): dữ liệu cần truyền
1 parity bit (chẵn (even), lẻ (odd), mark, space): bit cho phép
kiểm tra lỗi
Stop bit (1 hoặc 2 bit): kết thúc một gói tin
Hệ nhúng
276
Chuẩn RS232
Tốc độ truyền
• Tính bằng đơn vị bit/giây: bps (bit per second)
• Thuật ngữ khác: baud
Đơn vị đo dùng cho modem
Số lần thay đổi tín hiệu trong một giây
Đối với modem, mỗi lần thay đổi tín hiệu, có thể truyền
được nhiều bit : tốc độ baud <= tốc độ bit
• Tốc độ tối đa = Tần số xung nhịp clock / hằng số
• VD: trong máy PC, tần số 1.8432MHz, hằng số =16 -> tốc
độ tối đa: 115,200 bps
• Bên trong UART hỗ trợ các thanh ghi cho phép xác định
các tốc độ làm việc khác, vd: 1200, 2400, 4800, 9600,
19200, 38400 bps
Hệ nhúng
277
Chuẩn RS232
Kịch bản truyền
• Không có bắt tay (none-handshaking): máy thu có khả
năng đọc các ký tự thu trước khi máy phát truyền ký tự
tiếp theo
Kết nối không cần bắt tay giữa hai thiết bị
(cùng mức điện áp)
Hệ nhúng
278
Chuẩn RS232
Kịch bản truyền
Ghép nối không bắt tay giữa hai thiết bị
(Khác nhau về mức điện áp)
Hệ nhúng
279
Chuẩn RS232
Kịch bản truyền
• Có bắt tay (handshaking):
Máy thu nhận các ký tự và lưu vào một vùng nhớ
gọi là bộ đệm thu (receive buffer)
Nếu ký tự tại bộ đệm thu không được đọc kịp
trước khi ký tự khác được truyền tới -> có thể xảy
ra hiện tượng các ký tự hiện tại bị ghi đè bởi các
ký tự mới
Cần tín hiệu điều khiển, buộc máy phát
ngừng phát cho đến khi máy thu đọc
xong các ký tự đang nằm trong bộ đệm
thu
Hệ nhúng
280
Chuẩn RS232
Kịch bản truyền
• Có bắt tay (handshaking)
Bắt tay bằng phần cứng
Sử dụng các tín hiệu bắt tay RTS, CTS, DTR, DSR
Bắt tay bằng phần mềm
Sử dụng các gói tin đặc biệt truyền các ký tự Xon,
Xoff.
Bắt tay kết hợp cả phần cứng và phần mềm
Hệ nhúng
281
Chuẩn RS232
Kịch bản truyền
• Bắt tay bằng phần cứng
Sơ đồ đấu nối tín hiệu bắt tay bằng phần
cứng
Hệ nhúng
282
Chuẩn RS232
Kịch bản truyền
• Bắt tay phần cứng
Các đường tín hiệu bắt tay được sử dụng khi DTE truyền dữ liệu
Hệ nhúng
283
Chuẩn RS232
Kịch bản truyền
• Bắt tay bằng phần cứng
Các đường tín hiệu bắt tay được sử dụng khi DTE nhận dữ liệu
Hệ nhúng
284
Chuẩn RS232
Bắt tay bằng phần mềm
• Sử dụng hai ký tự ASCII: X-ON (Ctrl-S) và X-OFF (Ctrl-Q)
Hệ nhúng
285
Lập trình giao tiếp cổng COM
Trên window
Dùng điều khiển MSCOM (Visual Studio 6)
Dùng điều khiển SerialPort (.NET)
Dùng API thao tác với file
Trên linux
• Dùng các hàm API thao tác với file thiết bị
Hệ nhúng
286
Các bước lập trình
Kiểm tra sự tồn tại và trạng thái các cổng COM
trên máy
Lập trình thiết lập các thông số kết nối
Lập trình đóng, mở cổng COM
Lập trình thực hiện gửi, nhận dữ liệu qua cổng
COM
• Gửi dữ liệu qua cổng COM
• Bắt dữ liệu nhận được từ cổng COM khi có sự
kiện comEvReceive
Hệ nhúng
287
Lập trình ghép nối cổng COM sử dụng SerialPort
Sử dụng ngôn ngữ C#.NET và điều khiển
SerialPort
Hệ nhúng
288
Kiểm tra sự tồn tại của cổng COM
Sử dụng hàm GetPortNames lấy về danh sách
tất cả các cổng COM trên máy tính
String[] ComList=System.IO.Ports.SerialPort.GetPortNames();
Để kiểm tra trạng thái các cổng, tiến hành mở lần
lượt các cổng
• Nếu mở cổng có lỗi thì chứng tỏ cổng đó đã được
mở
• Nếu mở cổng thành công thì cổng đó vẫn chưa
được mở nên có thể sử dụng được
Hệ nhúng
289
Thiết lập các thông số kết nối
Các thuộc tính chính cần thiết lập
• Baudrate: tốc độ
• Databits: số bit data
• Parity: bit kiểm tra chẵn lẻ
• PortName: số hiệu cổng COM
• ReceiveBytesThreshold: ngưỡng nhận
Có thể thiết lập theo hai cách
-Sử dụng giao diện đồ họa
-Lập trình
Hệ nhúng
290
Thiết lập các thông số kết nối
Sử dụng giao diện đồ họa: cửa sổ hiển thị thuộc
tính của đối tượng SerialPort
Hệ nhúng
291
Lập trình đóng mở cổng COM
Để đóng mở cổng COM cần sử dụng hai
phương thức
• Phương thức Open: mở cổng COM
• Phương thức Close: đóng cổng COM
Sử dụng thuộc tính IsOpen để kiểm tra trạng
thái của cổng COM
IsOpen=True -> cổng đang được sử dụng
IsOpen=False -> có đang rỗi
Hệ nhúng
292
Lập trình đóng mở cổng COM
if (!serialPort1.IsOpen)
{
serialPort1.Open();
}
else
{
MessageBox.Show("Cổng COM bận”);
}
Hệ nhúng
293
Lập trình gửi nhận dữ liệu qua cổng COM
Gửi dữ liệu qua cổng COM
• Sử dụng phương thức Write của đối tượng
SerialPort
VD: SerialPort1.Write(“Test send method”)
Hệ nhúng
294
Lập trình gửi nhận dữ liệu qua cổng COM
Nhận dữ liệu qua cổng COM
• Tạo hàm bắt sự kiện khi có dữ liệu được nhận về qua
cổng COM
serialPort1.DataReceived += new
SerialDataReceivedEventHandler(OnReceive);
OnReceive: hàm thực thi việc nhận dữ liệu và xử lý
• Đọc dữ liệu sử dụng các phương thức
Read
ReadExisting
ReadLine
Hệ nhúng
295
Demo
Hệ nhúng
Lập trình ghép nối cổng COM sử dụng hàm API
Đặc điểm: Không bị phụ thuộc vào các điều
khiển ngoài, coi COM giống như một file quá
trình giao tiếp với cổng COM là quá trình đọc ghi
file
Có thể tự phát triển các điều khiển giao tiếp cổng
COM
296
Hệ nhúng
Phương pháp dùng API
Các bước thực hiện
• Bước 1. Mở file thiết bị
Handle m_hComm = CreateFile(lpszCOM,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
• Bước 2. Thiết lập các thông số cấu hình cổng
COM, sử dụng hai hàm:
GetCommState(m_hComm,&dcb)
SetCommState(m_hComm,&dcb)
Hệ nhúng
Phương pháp dùng API (tiếp)
• Bước 3. Tạo thread để nhận dữ liệu từ COM
CreateThread(NULL, 0, ThreadReceiveData, NULL, 0, &dwThreadId);
• Bước 4. Gửi và nhận dữ liệu
Sử dụng 2 hàm: ReadFile và WriteFile
Tại sao phải tạo thread riêng để nhận dữ liệu?
Hệ nhúng
299
Demo
Hệ nhúng
5.3. Lập trình giao tiếp USB
Tổng quan về chuẩn USB
Lập trình giao tiếp chuẩn USB
• Lập trình giao tiếp các thiết bị theo HID class
• Lập trình giao tiếp các thiết bị tùy biến
• Lập trình giao tiếp Joystick sử dụng hàm API của
Windows
300
Hệ nhúng
301
Sự phát triển của chuẩn USB
Năm 1995: USB 1.0
• Tốc độ Low-Speed: 1.5 Mbps
• Tốc độ tối đa (Full-Speed): 12 Mbps
Năm 1998: USB 1.1 (Sửa lỗi của USB 1.0)
• Tốc độ tối đa (Full-Speed): 12 Mbps
Năm 2001: USB 2.0
• Tốc độ tối đa (High-Speed): 480 Mbps
Năm 2006: Đánh dấu sự ra đời của chuẩn USB On-The-
Go (USB OTG)
Năm 2008: USB 3.0
• Tốc độ tối đa (Super-Speed): 4.8 Gbps
Hệ nhúng
302
Đặc tính của chuẩn USB
Tín hiệu
Chuẩn đầu nối
Khuôn dạng khung truyền
Tốc độ truyền
Kịch bản truyền
Hệ nhúng
303
Chuẩn USB
Tín hiệu
• Truyền kiểu nối tiếp
• Tín hiệu trên hai đường D+ và D- là tín hiệu vi sai
Hệ nhúng
304
Mức điện áp
Cổng USB trên máy tính cung cấp điện áp ra
+5V, dòng tối đa là 500mA
-> Những thiết bị sử dụng ít điện năng có thể sử
dụng nguồn cấp ngay từ cổng USB
-> Những thiết bị sử dụng nhiều điện năng bắt buộc
phải sử dụng nguồn ngoài
Tín hiệu trên hai đường D+ và D- là tín hiệu vi
sai
Hệ nhúng
305
Chuẩn đấu nối USB
Non-Standard
Connector
•Mini A/B (Plug and
Receptacle)
•Micro A/B(Plug and
Receptacle)
Standard Connector
•USB A/B (Plug and
Receptacle)
Hệ nhúng
306
Sơ đồ kết nối bus USB
Hệ nhúng
307
Các thành phần của bus USB
• Host: máy tính PC/ máy tính nhúng chứa USB
host controller & root hub có chức năng điều
khiển bus
• Devices: các thiết bị ngoại vi hoặc hub kết nối vào
đường bus USB. Mỗi thiết bị cần có mạch điện tử
và phần mềm điều khiển giao tiếp với Host
• Connectors: đầu đấu nối
• Cable: kết nối giữa thiết bị và hub
Hệ nhúng
308
Sơ đồ kết nối bus USB
Sơ đồ kết nối bus USB theo kiểu hình sao
• Trung tâm của mỗi “sao” là một hub
• Các thiết bị được cắm vào hub
• Mỗi hub thường cho 2, 4 hoặc 7 thiết bị có thể
cắm vào đồng thời
Sơ đồ kết nối chỉ là kết nối vật lý
• Các giao tiếp trong bus chỉ cần quan tâm đến kết
nối logic
• Tại một thời điểm, chỉ một thiết bị có thể giao tiếp
với host controller
Hệ nhúng
309
Vai trò của các thành phần
Vai trò của USB host:
• Trao đổi dữ liệu với các thiết bị ngoại vi
• Điều khiển USB bus:
Quản lý được các thiết bị kết nối vào đường bus
và khả năng của mỗi thiết bị đó: sử dụng cơ chế
điểm danh (Enumeration)
Phân xử, quản lý luồng dữ liệu trên bus, đảm bảo
các thiết bị đều có cơ hội trao đổi dữ liệu
• Kiểm tra lỗi: thêm các mã kiểm tra lỗi vào gói tin
cho phép phát hiện lỗi và yêu cầu truyền lại gói tin
• Cung cấp nguồn điện cho tất cả các thiết bị
Hệ nhúng
310
Vai trò của các thành phần
Vai trò của thiết bị ngoại vi
• Trao đổi dữ liệu với host
• Phát hiện các gói tin hay yêu cầu (request) được
gửi tới thiết bị để xử lý phù hợp
• Kiểm tra lỗi: tương tự như Host, các thiết bị ngoại
vi cũng phải chèn thêm các bit kiểm tra lỗi vào gói
tin gửi đi
• Quản lý nguồn điện: các thiết bị có thể sử dụng
nguồn điện ngoài hay nguồn từ bus. Nếu sử dụng
nguồn từ bus, phải chuyển sang chế độ tiết kiệm
điện năng.
Hệ nhúng
Transfer
311
Hệ nhúng
312
Enpoint & pipes
Mỗi quá trình truyền nhận dữ liệu bao gồm một
hay nhiều giao dịch (transactions), mỗi giao dịch
gồm một hay nhiều packets
-> Để hiểu được các giao dịch, các packet và nội
dung của chúng -> cần tìm hiểu hai khái niệm
Enpoint và Pipes
Hệ nhúng
313
Enpoint
Endpoint của thiết bị:
• Chỉ có thiết bị mới có Enpoint, Host không có
Enpoint
• Enpoint là bộ đệm (gửi, nhận)
• Các Enpoint được đánh địa chỉ và xác định
hướng
In Enpoint: bộ đệm gửi
Out Enpoint: bộ đệm nhận
• Tất cả các thiết bị đều phải có Enpoint 0, đây là
enpoint mặc định để gửi các thông tin điều khiển
Hệ nhúng
314
Pipes
Pipes: kết nối Enpoint của thiết bị tới Host
• Phải thiết lập pipe trước khi muốn trao đổi dữ liệu
• Host thiết lập pipe trong quá trình điểm danh
(Enumeration)
• Các Pipe sẽ được hủy khi thiết bị ngắt kết nối
khỏi bus
• Tất cả các thiết bị đều có một đường ống điều
khiển (control pipe) mặc định sử dụng Enpoint 0
Hệ nhúng
315
Kịch bản hoạt động của chuẩn USB
Quá trình điểm danh: Host phát hiện các thiết bị
kết nối vào bus hoặc ngắt kết nối khỏi bus và các
thông tin về thiết bị đó
Quá trình trao đổi dữ liệu: trao đổi dữ liệu giữa
Host và các thiết bị kết nối vào đường bus USB
Hệ nhúng
316
Quá trình trao đổi dữ liệu
Các thiết bị USB có thể trao đổi dữ liệu với Host
theo 4 kiểu hoàn toàn khác nhau, cụ thể:
• Truyền điều khiển (control transfer)
• Truyền ngắt (interrupt transfer)
• Truyền theo khối (bulk transfer)
• Truyền đẳng thời (isochronous transfer)
Hệ nhúng
317
Các kiểu truyền
Truyền điều khiển: để điều khiển phần cứng,
các yêu cầu điều khiển được truyền. Chúng làm
việc với mức ưu tiên cao và với khả năng kiểm
soát lỗi tự động. Tốc độ truyền lớn vì có đến 64
byte trong một yêu cầu (request) có thể được
truyền.
Truyền ngắt: các thiết bị, cung cấp một lượng
dữ liệu nhỏ, tuần hoàn chẳng hạn như chuột,
bàn phím đều sử dụng kiểu truyền này. Hệ thống
sẽ hỏi theo chu kỳ, chẳng hạn 10ms một lần xem
có các dữ liệu mới gửi đến.
Hệ nhúng
318
Các kiểu truyền
Truyền theo khối: khi có lượng dữ liệu lớn cần
truyền và cần kiểm soát lỗi truyền nhưng lại
không có yêu cầu thúc ép về thời gian truyền thì
dữ liệu thường được truyền theo khối. VD: máy
in, máy quét
Truyền đẳng thời: khi có khối lượng dữ liệu lớn
với tốc độ dữ liệu đã được quy định, ví dụ như
card âm thanh. Theo cách truyền này một giá trị
tốc độ xác định được duy trì. Việc hiệu chỉnh lỗi
không được thực hiện vì những lỗi truyền lẻ tẻ
cũng không gây ảnh hưởng đáng kể.
Hệ nhúng
319
Device Classes
Các thiết bị ngoại vi cùng chức năng (chuột, máy in, ổ
nhớ flash) có đặc tính truyền nhận dữ liệu chung ->
Hệ điều hành có thể cung cấp driver chung cho các
nhóm, các nhà sản xuất thiết bị không cần viết driver
riêng.
Các nhóm thiết bị đã được định nghĩa
• Audio
• Communication devices
• Human interface (HID)
• IrDA Bridge
• Mass Storage
• Cameras and scanners
• Video
Hệ nhúng
320
Giới thiệu HID class
HID-Human Interface Device
Một số thiết bị phổ biến theo HID class
• Bàn phím
• Chuột
• Joystick (tay chơi game)
• Điều khiển từ xa
• Máy đọc mã vạch
•
Hệ nhúng
321
Giới thiệu HID class
Mỗi giao tiếp HID (HID interface) được phép có
tối đa:
• 1 interrupt IN endpoint (Bắt buộc)
• 1 interrupt OUT endpoint (Optional)
Tốc độ truyền (interrupt)
• Low speed: 800 bytes/sec
• Full speed: 64 kbytes/sec
• High speed: 24 MBs/sec
Hệ nhúng
322
Giới thiệu HID class
Các yêu cầu về phần cứng để cho một thiết bị theo
chuẩn HID:
• Endpoints
Chỉ sử dụng kiểu truyền Control và Interrupt
Bắt buộc có 1 interrupt IN endpoint
• Reports
Phải có ít nhất một Input Report được định nghĩa trong HID Report
Descriptor
• Control transfers
HID hỗ trợ 6 kiểu gói tin yêu cầu: Set_Report, Get_Report,
Set_Idle, Get_Idle, Set_Protocol, Get_Protocol
Hệ nhúng
323
HID Transfer Type
Hệ nhúng
324
Giới thiệu HID class
Các yêu cầu về firmware để cho một thiết bị theo
chuẩn HID:
• Phải có Interface Descriptor theo HID
• HID Descriptor
• IN Endpoint Descriptor
• Report Descriptor (Có thể là một trong ba loại:
Input, Output, Feature)
Hệ nhúng
Lập trình giao tiếp HID class
USB device phải thuộc lớp HID
Tốc độ hỗ trợ: Không hỗ trợ high speed
Kiểu truyền: Không hỗ trợ bulk transfer và
isochronous transfer
325
Hệ nhúng
Các hàm được sử dụng
326
Hệ nhúng
Lập trình giao tiếp HID class
Các bước thực hiện
• Bước 1. Lấy về GUID của thiết bị (global unique
identifier):
HidD_GetHidGuid(&HidGuid);
• Bước 2. Lấy về thông tin của tất cả các thiết bị
DevInfo = SetupDiGetClassDevs(&HidGuid, NULL, NULL,
(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE));
• Bước 3. Duyệt từng thiết bị
SetupDiEnumDeviceInterfaces(DevInfo, 0, &HidGuid, Index,
&DevData);
Hệ nhúng
Phương pháp sử dụng HID (tiếp)
• Bước 4. Xác định các HID interface
• Bước 5. Lấy về device pathname
• Bước 6. Gọi hàm CreateFile để mở kết nối với
thiết bị dựa vào device pathname ở bước trên
• Bước 7. Quá trình gửi nhận dữ liệu là quá trình
đọc ghi file
Chú ý: Kích thước mỗi lần đọc ghi phải phù hợp
với kích thước truyền/nhận dưới firmware của thiết
bị
• Bước 8. Đóng kết nối khi không dùng nữa
Hệ nhúng
329
Demo
Hệ nhúng
Demo HID class
330
Hệ nhúng
Lập trình giao tiếp thiết bị tùy biến
Các thiết bị không thuộc class nào
Người viết firmware tự định nghĩa các endpoints,
định dạng report
=> Sử dụng thư viện WinUSB của Microsoft
331
Hệ nhúng
Thư viện WinUSB
Thư viện WinUSB hỗ trợ xây dựng các ứng dụng
theo chuẩn bất kỳ, không theo các class sẵn có
WinUSB gồm hai thành phần
• WinUsb.sys: kernel-mode driver
• WinUsb.dll: user-mode dll
Người lập trình cần thay đổi file .inf lưu các
thông tin hỗ trợ quá trình cài đặt driver
332
Hệ nhúng
333
Lập trình sử dụng thư viện WinUSB
Bước 1: Tạo Device file sử dụng GUID của thiết bị
Bước 2: Cấu hình cho thiết bị
• Lấy về thông tin interface
• Lấy về thông tin các Enpoint
• Tạo ra các pipe
Bước 3: Giao tiếp với các Endpoint sử dụng các hàm:
• WinUsb_ControlTransfer
• WinUsb_WritePipe
• WinUsb_ReadPipe
Hệ nhúng
334
Demo
Hệ nhúng
Demo WinUSB
335
Hệ nhúng
336
Lập trình ghép nối Joystick
Cách tra cứu và sử dụng hàm API
• Tra cứu hàm API: sử dụng bộ phần mềm API-
Guide
• Sử dụng hàm API: khai báo thư viện, các hàm,
các cấu trúc cho các tham số của hàm (nếu cần
thiết)
Hệ nhúng
337
Phần mềm API-Guide
Hệ nhúng
338
Ghép nối với USB Joystick
Hệ nhúng
339
Cấu trúc JOYINFO
Windows định nghĩa cấu trúc JOYINFO để lưu
các thông tin về tình trạng các nút bấm trên
Joystick
Nút trái, phải
Nút lên, xuống
Các nút chức
năng: 1, 2, 3, 4,
L1, L2, R1, R2,
Select, Start
Hệ nhúng
340
Cấu trúc JOYINFO
wXpos
• wXpos=0 -> nút sang trái được bấm
• wXpos=65535 -> nút sang phải được bấm
wYpos
• wYpos=0 -> nút lên được bấm
• wYpos=65535 -> nút xuống được bấm
wButtons: mỗi bit biểu diễn trạng thái của một
nút chức năng
• VD: Button 1 -> bit 0, Button 2 -> bit 1
Hệ nhúng
341
Chương trình kiểm tra Joystick
(Mã nguồn: Test_JoyStick_VB)
Hệ nhúng
342
Ví dụ sử dụng USB Joystick
Trò chơi xếp hình (Tetris)
• Xếp hình 2D
Sử dụng C#.NET
• Xếp hình 3D
Sử dụng C#.NET
Hệ nhúng
343
Các bước lập trình
Tìm đoạn mã xử lý sự kiện cần thay thế (VD: khi
người dùng sử dụng bàn phím)
Khai báo sử dụng hàm API: joyGetPos
Gọi hàm API joyGetPos và thay thế cho đoạn mã
xử lý sự kiện cũ, giữ nguyên các đoạn mã liên
quan đến trò chơi.
Hệ nhúng
344
Xếp hình 2D-C#.NET
Hệ nhúng
345
Xếp hình 3D – C#.NET
Các file đính kèm theo tài liệu này:
- giao_trinh_mon_he_nhung_chuong_5_phan_mem_dieu_khien_tren_pc.pdf