Phần 4:Vi ết ứng dụng giao tiếp chuẩn USB trên host I)Giới thiệu chung về lập trình ứng dụng trên host: II)Các quy trình để nhận biết một thiết bị us b:

Một phần của tài liệu Thiết kế và thi công mạch hẹn giờ đa năng có thể cấu hình qua cổng USB (Trang 48 - 51)

SV:Trần Quốc Gia Phú - 47 - SV:Trần Hạ Long } } }

Phn 4: Viết ng dng giao tiếp chun USB trên host

SV:Trần Quốc Gia Phú - 48 - SV:Trần Hạ Long

Phn 4: Viết ng dng giao tiếp chun USB trên host

I)Giới thiệu chung về lập trình ứng dụng trên host :

Ta có thể tóm tắt qua sơđồ sau:

Hình 9: sơđồ giao tiếp từ chương trình ứng dên driver.

II)Các quy trình để nhận biết một thiết bị usb :

Lấy GUID cho lớp HID : trước khi một ứng dụng truyền nhận dữ liệu với một HID thì trước tiên ứng dụng phải lấy được GUID (Global unique Identifier tạm dịch là ID toàn cục ) . Ta có thể lấy được GUID nhờ vào một hàm API là HidD_GetHidGuid .

Khai báo của hàm là :

Void HidD_GetHidGuid (OUT LPGUID HidGuid)

Mã khi sử dụng là :

Phn 4: Viết ng dng giao tiếp chun USB trên host

SV:Trần Quốc Gia Phú - 49 - SV:Trần Hạ Long

Lấy chuỗi cấu trúc và thông tin của các HID : GUID cho phép ứng dụng lấy các thông tin về các HID của hệ thống thông qua các hàm Windows Device Manager Functions . Hàm SetupDiGetClassDevs trả vềđịa chỉ của chuỗi cấu trúc chứa các thông tin về các HID Khai báo của hàm là : HDEVINFO SetupDiGetClassDevs ( IN LPGUID ClassGUID , OPTIONAL IN PCTSTR Enumerator , OPTIONAL IN HWND hwndParent , OPTIONAL IN DWORD flags)

Mã khi sử dụng là :

hDecInfo = SetupDiGetClassDevs (&HidGuid , NULL , NULL,DIGCF_PRESENT | DIGCF_INTERFACEDEVICE )

Phân biệt các giao thức HID khác nhau : sau khi đã có được địa chỉ về chuỗi chứa các

thông tin về HID, ta cần phải xác định HID nào cần tìm. Hàm

SetupDiEnumDeviceInterfaces sẽ thực hiện điều đó. Khi sử dụng hàm này ta cần phải

đưa nó vào một vòng lặp , mỗi vòng lặp nó sẽ chỉ ra một giao thức nhất định, các vòng lặp sẽđược phân biệt với nhau bởi chỉ số index. Vòng lặp sẽ kết thúc khi hàm trả về giá trị 0 chỉ ra rằng không còn giao thứ nào nữa .

Khai báo của hàm là :

Boolean SetupDiEnumDeviceInterfaces ( IN HDEVINFO DeviceInfoSet ,

IN PSP_ DEVIINFO_DATA DeviceInfoData , OPTIONAL LPGUID InterfaceClassGUID , IN WORD index ,

UT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData )

Mã khi sử dụng là :

devInfoData.cbsize = sizeof (devInfoData) ;

Result = SetupDiEnumDeviceInterfaces (hDevInfo , 0 , &HidGuid , index ,&devInfoData)

Lấy địa chỉ của thiết bị : ở hàm trước ,ta chỉ mới xác định được giao thức nhưng ta vẫn chưa xác định được thiết bị cần tìm. Muốn xác định được thiết bị, ta cần nhiều thông tin hơn và hàm SetupDiGetDeviceInterfaceDetail sẽ thực hiện điều đó .

Phn 4: Viết ng dng giao tiếp chun USB trên host SV:Trần Quốc Gia Phú - 50 - SV:Trần Hạ Long BOOLEAN SetupDiGetDeviceInterfaceDetail( IN HDEVINFO DevicelnfoSet, IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, OUT PSP_DEVICE_INTERFACE_DETAIL__DATA DevicelnterfaceDetailDataSize,

OUT PDWORD RequiredSize,

OPTIONAL OUT PSP_DEVINFO_DATA )

Mã khi sử dụng là :

Result = SetupDiGetDeviceInterfaceDetail ( hDevInfo ,kDevInfoData ,NULL, 0,&length,NULL )

Lấy handle của thiết bị : việc còn lại là lấy handle của thiết bị để thiết lập kết nối và truyền nhận dữ liệu . Ta sẽ dùng hàm CreatFile để thiết lập kết nối , một khi công việc kết nối thành công thì hàm sẽ trả về handle ,và các hàm khác sẽ dùnng trong việc truyền nhận dữ liệu . Khai báo của hàm là : HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile ); Mã khi sử dụng là : DeviceHandle=CreateFile(detailData->DevicePath,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,(LPSECURITY _ATTRIBUTES)NULL,OPEN_EXISTING, 0, NULL);

Đọc ID của nhà sản xuất và thiết bị : khi đã nhận được thiết bị ta chưa thể xác định

được đó là thiết bị ta mong muốn và một cách để kiểm tra điều đó là xác nhận ID của nhà sản xuất và thiết bị . Hàm HidD_GetAtributes sẽ làm việc đó

Khai báo của hàm là :

Boolean = HidD_GetAttributes(IN HANDLE HidDeviceObject,OUT PHIDD_ATTRIBUTES Attributes );

Một phần của tài liệu Thiết kế và thi công mạch hẹn giờ đa năng có thể cấu hình qua cổng USB (Trang 48 - 51)