Upload
hoangxuyen
View
227
Download
3
Embed Size (px)
Citation preview
Urządzenia peryferyjne
USB - programowanie
Wykład 7
2
Skąd informacje:
MSDN
http://www.usb.org/developers/hidpage.ht
ml
USB Complete: Everything You Need to
Develop Custom USB Peripherals,
Second Edition
3
USB - drivers
4
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
5
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
6
Klasy USB Audio Device.
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)
7
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
Class Driver Evolution In Windows
If a class driver doesn’t meet your
needs, let us know why!
8
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
9
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
10
HID – Otwarcie urządzenia
11
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.
12
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;
}
13
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);
14
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;
}
15
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);
16
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).
…
17
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.
18
NXP Semiconductors - Philips - PDIUSBD12
19
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.
20
NXP Semiconductors - Philips -ISP1181B
21
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
22
FTDI - FT 245BM/BL
23
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)