Urządzenia peryferyjne USB - programowanie Wykład 7
Skąd informacje: MSDN http://www.usb.org/developers/hidpage.ht ml USB Complete: Everything You Need to Develop Custom USB Peripherals, Second Edition 2
USB - drivers 3
USB sterownik HKEY_LOCAL_MACHINE\System\CurrentContr olset\services\class \winnt\inf pliki INI [Version] Signature="$CHICAGO$" Class=HID ;The GUID for HIDs ClassGUID={745al7aO-74d3- lldob6fe- OOaOc90f57da} provider=%provider% LayoutFile=layout.inf, layout1.inf [Classlnstall] Addreg=Class.AddReg 4
USB sterownik [Class.AddReg] HKR,,Installer,,mmci.dll [Manufacturer] %MfgName%=Lakeview [Lakeview],Uses Lakeview Research's Vendor ID (0925),Uses the Product ID 1234 %USB\VID_0925&PID_1234.DeviceDesc%=Sample HID, USB\VID 0925&PID 1234 [DestinationDirs] USBHID.CopyList = 11 ; LDID SYS 5
Audio Device. Klasy USB Chip/Smart Card Interface Devices. ISO/IEC 7816 specification. Communications Device. Telephones, modems, and other telecommunications devices Content Security Device Firmware Upgrade Human Interface Device (HID) IrDA Bridge Device. Mass Storage (usbstor.sys) Printer Imaging (usbscan.sys) 6
Class Driver Evolution In Windows Class Windows 98 Windows 2000 Windows ME Windows XP Audio HID RNDIS * * * Printing Scanning Storage - Content Protection - - Fax - Smart Cards - * - * Video - - - * Bluetooth - - - * Class driver exists in box at RTM * Class driver delivered post RTM If a class driver doesn t meet your needs, let us know why! 7
Common Installation Issues Devices must have unique VID/PID/REV for every model Microsoft working with USB Core Team to provide guidance to silicon manufacturers reselling their core to third-party OEMs Who sets the VID/PID Must device pass USB-IF and WHQL re-qualification? Microsoft recommendation white paper targeted for CY04H2 Never Copy INF manually into INF folder (use SetupCopyOEMINF) Composite devices must reference [Composite.Dev.NT] section in USB.inf file, using include/needs RAM based firmware devices must use unique VID/PID/REV for initial firmware download mode and different VID/PID/REV for operational mode 8
Common Hardware Issues VID/PID: Different models of devices must NOT reuse VID/PID/REV even if they load the same driver HCT failure! Serial Numbers: Lack of unique USB Serial Number (mandated in some class specs) HCT failure! Remote Wake: Remote wake bit set, even though device can never generate remote wake signaling HCT failure! String Address (0xEE): Devices must respond to address 0xEE and validate all parameters in USB requests! BIOS Wake Settings: Incorrect S<->D mappings for a USB host controller can prevent USB devices from waking up the system. Ensure that EHCI and companion controllers have similar S<->D mappings 9
HID Otwarcie urządzenia 10
HID - DirectInput utworzenie obiektu DirectInput HRESULT hr; //kod bledu hr=directinput8create(getmodulehandle(null), DIRECTINPUT_VERSION, IID_IDirectInput8, (VOID**)&g_pDI, NULL); zliczajanie urządzeń podłączonych: hr=g_pdi->enumdevices(di8devclass_gamectrl, EnumJoysticksCallback, NULL, DIEDFL_ATTACHEDONLY); Podczas wyliczania urządzeń dla każdego z nich wywoływana jest funkcja EnumJoysticksCallback, która tworzy interfejs urządzenia wywołując metodę CreateDevice. 11
HID BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE* pdidinstance, VOID* pcontext) { HRESULT hr; CString k; hr=g_pdi->createdevice(pdidinstance- >guidinstance, &g_pjoystick, NULL); if( FAILED(hr) ) return DIENUM_CONTINUE; // pobieramy nazwe urzadzenia klasa->m_joyname = pdidinstance- >tszproductname; return DIENUM_STOP; } 12
HID - DirectInput ustawiamy format danych ( z pliku nagł.) hr=g_pjoystick->setdataformat(&c_dfdijoystick2); ustawienie sposobu zachowania się obiektu urządzenia hr=g_pjoystick->setcooperativelevel( this->m_hwnd, DISCL_EXCLUSIVE DISCL_FOREGROUND); Flaga DISCL_EXCLUSIVE oznacza, że żadna aplikacja nie może korzystać z naszego urządzenia, natomiast flaga DISCL_FOREGROUND oznacza, że aplikacja nie wymaga dostępu w tle Dalej odczytujemy informację o joystick u (ilość osi). Informacje te zapisujemy do struktury g_didevcaps: g_didevcaps.dwsize=sizeof(didevcaps); hr=g_pjoystick->getcapabilities(&g_didevcaps); enumeracja osi urządzenia hr=g_pjoystick->enumobjects(enumaxescallback, (VOID*)this->m_hWnd, DIDFT_AXIS); 13
HID - DirectInput BOOL CALLBACK EnumAxesCallback( const DIDEVICEOBJECTINSTANCE* pdidoi, VOID* pcontext ) { HWND hdlg = (HWND)pContext; DIPROPRANGE diprg; diprg.diph.dwsize = sizeof(diproprange); diprg.diph.dwheadersize = sizeof(dipropheader); diprg.diph.dwhow = DIPH_BYID; diprg.diph.dwobj = pdidoi->dwtype; //okreslenie enumerowanej osi diprg.lmin = -1000; diprg.lmax = +1000; //ustawienie zakresu osi if( FAILED( g_pjoystick->setproperty( DIPROP_RANGE, &diprg.diph ) ) ) return DIENUM_STOP; return DIENUM_CONTINUE; } 14
HID - DirectInput DIJOYSTATE2 js; //stan joystick a (DInput) //ustawienie urzadzenia w stan odczytywania aktualnych parametrow hr = g_pjoystick->poll(); if( FAILED(hr) ) { hr = g_pjoystick->acquire(); while( hr == DIERR_INPUTLOST ) hr = g_pjoystick->acquire(); return; } //pobranie stanu urzadzenia hr = g_pjoystick->getdevicestate( sizeof(dijoystate2), &js); 15
Układy USB - dedykowane klawiatury (producent: Alcor Micro,układ: AU9440); myszy (producent: Alcor Micro, układ: AU9610); huby (producent: Cypress Semiconductor, układ: CY7C65013); kamery internetowe (producent: Vista Imaging, układ:vicam III); czytniki kart inteligentnych (producent: Winbond, układ: W81E381); czytniki pamięci flash (producent: Prolific Technology Inc., układ: PL-2515); pamięci CF, SD, MMC, MicroDrive MS (producent: Winbond, układ: W86L586); kontrolery monitorów OSD (producent: Alcor Micro,układ: AU9814); przekaźniki sygnałów masowych (np modemy) (producent: K-Micro,układ: KL5KUSB200). 16
NXP Semiconductors - Philips - PDIUSBD12 cenowo zoptymalizowany kontroler urządzeń zewnętrznych ogólnego użytku. wykorzystywany do urządzeń opartych o mikrokontrolery komunikując się z nimi poprzez wysokiej prędkości ogólnego użytku port równoległy ograniczony pod kątem zdolności programowania oraz ustawień co powoduje zminimalizowanie czasu poświęconego na przygotowanie układu do pracy urządzeniem Zaprojektowany do działania z klasami USB: - imaging class; - mass storage devices; - communication devices; - printing devices; - HID devices. Przykładowe zastosowania układu: - interfejs USB aparatów cyfrowych; - zewnętrzne stacje ZIP; - drukarki; - skanery. 17
NXP Semiconductors - Philips - PDIUSBD12 18
NXP Semiconductors - Philips -ISP1181B wysokiej klasy kontroler USB urządzeń zewnętrznych w wbudowaną pamięcią FIFO, przekaźnikiem, regulatorem napięcia 3.3V oraz SIE. układ do współpracy z układami opartymi o mikrokontrolery oraz mikroprocesory operacyjne komunikacja z mikrokontrolerami odbywa się poprzez wysokiej prędkości konfigurowalny interfejs równoległy bogatsza wersja, i następca powszechnie stosowanego układu PDIUSBD12. Przykładowe zastosowania układu - drukarki; - skanery; - aparaty cyfrowe; - zewnętrzne stacje ZIP; - modemy; - interfejs dla urządzeń PDA. 19
NXP Semiconductors - Philips -ISP1181B 20
FTDI - FT 245BM/BL producent układu udostępnia biblioteki wraz ze sterownikami. w zależności od zastosowania układu, sterowniki występują w dwóch wersjach: - VCP wirtualnego portu COM; - Direct Drivers sterowniki wraz z biblioteką DLL ich wykorzystania konwersja danych USB do postaci portu równoległego Przykładowe zastosowania układu: - interfejs dla MCU / PLD / FPGA ; - czytniki kart flash; - interfejs dla odtwarzaczy MP3; - interfejs przekazu audio oraz niskiej jakości video; - interfejs dla urządzeń PDA; - interfejs modemów; - interfejs modemów wireless; - interfejs dla urządzeń S.T.B.; - przemysłowy sterownik urządzeń; - konwerter USB port równoległy 21
FTDI - FT 245BM/BL 22
FTDI - FT 245BM/BL - DirectDrivers FT_STATUS FT_Open (int idevice, FT_HANDLE *fthandle); FT_STATUS FT_OpenEx (PVOID pvarg1, DWORD dwflags, FT_HANDLE *fthandle) FT_STATUS FT_Close (FT_HANDLE fthandle); FT_STATUS FT_GetDeviceInfo (FT_HANDLE fthandle, FT_DEVICE *pfttype, LPDWORD lpdwid, PCHAR pcserialnumber, PCHAR pcdescription, PVOID pvdummy); FT_STATUS FT_SetBitMode (FT_HANDLE fthandle, UCHAR ucmask, UCHAR ucmode) FT_STATUS FT_Write (FT_HANDLE fthandle, LPVOID lpbuffer, DWORD dwbytestowrite, LPDWORD lpdwbyteswritten) FT_STATUS FT_GetDriverVersion (FT_HANDLE fthandle, LPDWORD lpdwdriverversion) FT_STATUS FT_GetLibraryVersion (LPDWORD lpdwdllversion) FT_STATUS FT_ResetDevice (FT_HANDLE fthandle) FT_STATUS FT_GetBitMode (FT_HANDLE fthandle, PUCHAR pucmode) 23