DMDLL_USBVendorClassTransfer_LL

해당하는 USB장치측으로 Vendor 또는 Class 요청명령어를 전송한다(디폴트 파이프전용) USB표준스팩에서는 8바이트 Setup Data Packet을 아래와 같이 정의하고 있다.

Setup Packet

DM SDK에서는 이중에서 RequestType의 비트 2부터 비트 4의 값만 ReservedBits 필드를 통해서 전달하는것을 허용한다.


Description

int DMDLL_USBVendorClassTransfer_LL( 
    IN DMHANDLE    MasterHandle,
    IN USHORT      Function,
    IN ULONG       TransferFlags,
    IN UCHAR       ReservedBits,
    IN UCHAR       Request,
    IN USHORT      Value,
    IN USHORT      Index,
    IN USHORT      Length,
    IN OUT UCHAR * pData,
    OUT USHORT *   pResult
)

Parameters

MasterHandle
    작업중이던 디바이스 핸들, DMDLL_OpenDeviceForInterfaceDeviceStack( PipeNumber = -1 )함수를 통해서 얻은 핸들(Master)이어야 한다
Function
    USB.H 에서 정의한 기능상수
    #define URB_FUNCTION_VENDOR_DEVICE                   0x0017
    #define URB_FUNCTION_VENDOR_INTERFACE                0x0018
    #define URB_FUNCTION_VENDOR_ENDPOINT                 0x0019
    #define URB_FUNCTION_CLASS_DEVICE                    0x001A
    #define URB_FUNCTION_CLASS_INTERFACE                 0x001B
    #define URB_FUNCTION_CLASS_ENDPOINT                  0x001C
    #define URB_FUNCTION_CLASS_OTHER                     0x001F
    #define URB_FUNCTION_VENDOR_OTHER                    0x0020
TransferFlags
    USB.H 에서 정의한 Flags
    #define USBD_TRANSFER_DIRECTION_OUT           0
    #define USBD_TRANSFER_DIRECTION_IN            1
    #define USBD_SHORT_TRANSFER_OK                2
ReservedBits
    USB 스팩에서 정의하는 RequestType값(1바이트)중에서 비트 2부터 비트 4까지의 값을 기술한다. 나머지 비트 0, 1, 그리고 비트 5부터 7까지는 모두 0의 값으로 사용해야 한다. 예를 들어, 비트 2값을 1로 사용하고 싶다면, ReservedBits 값은 0x04가 된다. 비트 2, 3, 4 모두를 1로 사용하고 싶다면, ReservedBits 값은 0x1C가 된다
Request
    USB 스팩에서 정의하는 Request값(1바이트)
Value
    USB 스팩에서 정의하는 Value값(2바이트)
Index
    USB 스팩에서 정의하는 Index값(2바이트)
Length
    USB 스팩에서 정의하는 Length값(2바이트)
pData
    Control Transfer의 Data Transaction에서 사용될, 읽기(데이타를 담을 버퍼), 쓰기(데이타를 담고 있는 버퍼) 용도로 사용된다(양방향)
pResult
    읽기용도로 사용되는 경우에 실제로 읽혀진 Data버퍼의 데이타수(바이트단위)

Return Values

return  int
    작업이 성공할 경우 DMSTAT_SUCCESS 리턴

Changelog


Examples

int nRet = 0;
UCHAR ReservedBits = 0;
UCHAR Request = 0;
USHORT Value = 0;
USHORT Index = 0;
USHORT Length = 0;
USHORT Result = 0;

nRet = DMDLL_USBVendorClassTransfer_LL(
            MasterHandle, 
            URB_FUNCTION_VENDOR_ENDPOINT,
            USBD_TRANSFER_DIRECTION_OUT,
            0,
            ReservedBits ,
            Request ,
            Value ,
            Index ,
            Length ,
            NULL,
            &Result);

results matching ""

    No results matching ""