DMDLL_USBVendorClassTransfer_LL
해당하는 USB장치측으로 Vendor 또는 Class 요청명령어를 전송한다(디폴트 파이프전용) USB표준스팩에서는 8바이트 Setup Data 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);