USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct...

23
Urządzenia peryferyjne USB - programowanie Wykład 7

Transcript of USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct...

Page 1: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

Urządzenia peryferyjne

USB - programowanie

Wykład 7

Page 2: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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

Page 3: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

3

USB - drivers

Page 4: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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

Page 5: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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

Page 6: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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)

Page 7: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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!

Page 8: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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

Page 9: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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

Page 10: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

10

HID – Otwarcie urządzenia

Page 11: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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.

Page 12: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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;

}

Page 13: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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);

Page 14: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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;

}

Page 15: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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);

Page 16: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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).

Page 17: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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.

Page 18: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

18

NXP Semiconductors - Philips - PDIUSBD12

Page 19: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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.

Page 20: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

20

NXP Semiconductors - Philips -ISP1181B

Page 21: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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

Page 22: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

22

FTDI - FT 245BM/BL

Page 23: USB - programowanie - zsk.ict.pwr.wroc.pl · PDF filewymaga dostępu „w tle ... - Direct Drivers – sterowniki wraz z biblioteką DLL ich wykorzystania

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)