- Code: Select all
//set irda service status
HRESULT OBEXIOCTL(DWORD dwIOCTL)
{
HANDLE hService;
BOOL fRet;
hService = CreateFile(TEXT("OBX0:"),GENERIC_READ|GENERIC_WRITE,0,
NULL,OPEN_EXISTING,0,NULL);
if (INVALID_HANDLE_VALUE == hService)
{
CloseHandle(hService);
return FALSE;
}
fRet = DeviceIoControl(hService,dwIOCTL,0,0,0,0,NULL,0);
CloseHandle(hService);
return (0 == fRet)?E_FAIL:S_OK;
}
//query irda service status
DWORD OBEXQuery()
{
HANDLE hService;
BOOL fRet;
DWORD dwStatus;
hService = CreateFile(TEXT("OBX0:"),GENERIC_READ|GENERIC_WRITE,0,
NULL,OPEN_EXISTING,0,NULL);
if (INVALID_HANDLE_VALUE == hService)
{
CloseHandle(hService);
return FALSE;
}
fRet = DeviceIoControl(hService,IOCTL_SERVICE_STATUS,0,0,&dwStatus,sizeof(DWORD),0, 0);
CloseHandle(hService);
if(0 == fRet)
return 0xFFFFFFFF;
else
return dwStatus;
}
bool GetIRDAState()
{
switch(OBEXQuery())
{
case SERVICE_STATE_SHUTTING_DOWN:
case SERVICE_STATE_UNLOADING:
case SERVICE_STATE_UNINITIALIZED:
case SERVICE_STATE_OFF:
return 0;
break;
case SERVICE_STATE_STARTING_UP:
case SERVICE_STATE_ON:
return 1;
break;
default:
break;
};
return 0;
}
A short sample on how to set the states:
- Code: Select all
HRESULT hr = S_OK;
switch(OBEXQuery())
{
// If the IRDA is off, turn it back on.
case SERVICE_STATE_SHUTTING_DOWN:
case SERVICE_STATE_UNLOADING:
case SERVICE_STATE_UNINITIALIZED:
case SERVICE_STATE_OFF:
hr = OBEXIOCTL(IOCTL_SERVICE_START);
break;
// If the IRDA is on, turn it off.
case SERVICE_STATE_STARTING_UP:
case SERVICE_STATE_ON:
hr = OBEXIOCTL(IOCTL_SERVICE_STOP);
break;
default:
break;
};
if(FAILED(hr))
MessageBox( hwnd, TEXT("Setting device IOCTL failed. Please retry later."), TEXT("Error"), MB_OK | MB_ICONEXCLAMATION);

