DMDLL_OpenDeviceForInterfaceDeviceStack
디바이스 스택 중 TargetIndex 번째의 장치를 대상으로 열기를 수행합니다. DMDLL_OpenDeviceForInterfaceDeviceStack()함수를 사용해서 USB장치핸들을 얻는 경우,다음 두가지의 경우로 사용법이 나뉜다.
Master Handle을 구하는 경우, DMDLL_OpenDeviceForInterfaceDeviceStack()함수의 PipeNumber 값을 -1 을 사용해야 한다. Master Handle은 Bulk Transfer, Interrupt Transfer, Isochronous Transfer에 사용될 수 없다. Master Handle은 Default Pipe와 관련된 전송요청과 Pipe Information을 구하는 용도로만 사용될 수 있다.
Bundle Pipe Handle을 구하는 경우, DMDLL_OpenDeviceForInterfaceDeviceStack()함수의 PipeNumber 값을 온전하게(0, 1, .. ) 사용해야 한다. Bundle Pipe Handle은 Bulk Transfer, Interrupt Transfer, Isochronous Transfer에만 사용될 수 있다.
개발자는 Master Handle 을 먼저 구한뒤, DMDLL_USBAcquirePipeInformations()함수를 통해서 필요한 파이프정보를 획득한다. 그 다음, 각각의 파이프정보에 대응되는 Bundle Pipe Handle을 다시 구하여 필요한 Bulk, Interrupt Isochronous Transfer 전송을 요청하게 된다.
사용이 끝난 모든 핸들은 DMDLL_CloseDevice()함수에 의해서 반납되어져야 한다.
Description
int DMDLL_OpenDeviceForInterfaceDeviceStack(
IN int TargetIndex,
IN DMBUS BusInterface,
IN int PipeNumber,
OUT DMHANDLE* pOpenedHandle )
Parameters
TargetIndex
검색된 디바이스스택중 사용할 인덱스값
BusInterface
사용하려는 대상의 버스 인터페이스
PipeNumber
사용하려는 대상의 장치가 가지고 있는 파이프 인덱스 (0, 1, ...)
-1 은 Master 핸들을 얻을때 사용한다
pOpenedHandle
열기 작업이 성공하면 리턴되는 핸들을 보관하는 버퍼의 포인터
Return Values
return int
작업이 성공할 경우 DMSTAT_SUCCESS 리턴
Changelog
Examples
int nRet = 0;
int TargetIndex = 0;
DMHANDLE DmHandle = NULL;
nRet = DMDLL_OpenDeviceForInterfaceDeviceStack(TargetIndex, DMBUS_USB, -1, &DmHandle );
switch(nRet)
{
case DMSTAT_SUCCESS:
{
printf(“드라이버를 성공적으로 열었습니다.”);
break;
}
case DMSTAT_ERROR:
{
printf(“알 수 없는 에러가 발생했습니다.”);
break;
}
case DMSTAT_INVALIDPARAMETER:
{
printf(“파라미터가 잘못 되었습니다.”);
break;
}
case DMSTAT_NORESOURCE:
{
printf(“메모리가 부족합니다.”);
break;
}
case DMSTAT_NODEVICE:
{
printf(“해당하는 USB 장치가 발견되지 않았습니다.”);
break;
}
case DMSTAT_NOSUPPORTWOW64:
{
printf(“DM-II SDK 에서는 WOW64 환경을 지원하지 않습니다.”);
break;
}
}