Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Microsoft Windows Copyright (C) Microsoft Corporation, 1981 - 1999
Module Name:
devicelist.cpp
Abstract:
Author:
Rahul Thombre (RahulTh) 4/30/1998
Revision History:
4/30/1998 RahulTh
Created this module.
--*/
///////////////////////////////////////////////////////////////////////
// DeviceList.cpp: implementation of the CDeviceList class.
//
//////////////////////////////////////////////////////////////////////
#include "precomp.hxx"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CDeviceList::CDeviceList() { m_pDeviceInfo = NULL; m_lNumDevices = 0; InitializeCriticalSection(&m_criticalSection); }
CDeviceList::~CDeviceList() { if(m_pDeviceInfo) { delete [] m_pDeviceInfo; m_pDeviceInfo = NULL; m_lNumDevices = 0; } }
CDeviceList& CDeviceList::operator=(POBEX_DEVICE_LIST pDevList) { CError error (NULL, IDS_DEFAULT_ERROR_TITLE, ERROR_OUTOFMEMORY);
EnterCriticalSection(&m_criticalSection); if (m_pDeviceInfo) { delete [] m_pDeviceInfo; m_pDeviceInfo = NULL; m_lNumDevices = 0; } LeaveCriticalSection(&m_criticalSection);
if (!pDevList) return *this;
//if there is a device list
EnterCriticalSection(&m_criticalSection); m_lNumDevices = pDevList->DeviceCount; try { m_pDeviceInfo = new OBEX_DEVICE [m_lNumDevices]; memcpy ((LPVOID)m_pDeviceInfo, (LPVOID)pDevList->DeviceList, sizeof(OBEX_DEVICE) * m_lNumDevices); } catch (CMemoryException* e) { error.ShowMessage (IDS_DEVLIST_ERROR); m_pDeviceInfo = NULL; //the best we can do here is to pretend that there
m_lNumDevices = 0; //are no devices and move on
e->Delete(); } LeaveCriticalSection(&m_criticalSection);
return *this; }
ULONG CDeviceList::GetDeviceCount(void) { return m_lNumDevices; }
LONG CDeviceList::SelectDevice(CWnd * pWnd, TCHAR* lpszDevName) { ASSERT(pWnd);
int iSel; LONG lDeviceID; int numDevices;
lpszDevName[0] = '\0';
EnterCriticalSection(&m_criticalSection); numDevices = m_lNumDevices;
if (numDevices > 0) {
if (m_pDeviceInfo->DeviceType == TYPE_IRDA) {
lDeviceID = m_pDeviceInfo->DeviceSpecific.s.Irda.DeviceId; //store the id and name of the
} else {
lDeviceID = m_pDeviceInfo->DeviceSpecific.s.Ip.IpAddress; } lstrcpy(lpszDevName,m_pDeviceInfo->DeviceName); } LeaveCriticalSection(&m_criticalSection);
if (numDevices == 0) return errIRFTP_NODEVICE; //in the rare case that there are no devices in range, return -1
if (1 == numDevices) //there is only one device. No need to choose a device
return lDeviceID;
CMultDevices dlgChooseDevice(pWnd, this);
if (IDOK == dlgChooseDevice.DoModal()) return errIRFTP_MULTDEVICES; //OnOK will fill in the required data structures
else return errIRFTP_SELECTIONCANCELLED; //return -1 if cancel was chosen
}
ULONG CDeviceList::GetDeviceID(int iDevIndex) { if (iDevIndex < m_lNumDevices) //sanity checks
return m_pDeviceInfo[iDevIndex].DeviceSpecific.s.Irda.DeviceId; else return -1; }
///////////////////////////////////////////////////////////////////////////////////
//this function should only be called after a critical section has been
//obtained.
void CDeviceList::GetDeviceName(LONG iDevID, TCHAR* lpszDevName) { int len; int i; lpszDevName[0] = '\0'; //better be safe
//EnterCriticalSection(&m_criticalSection);
for(i = 0; i < m_lNumDevices; i++) { if(iDevID == (LONG)m_pDeviceInfo[i].DeviceSpecific.s.Irda.DeviceId) break; } if(i == m_lNumDevices) //the device was not found
lstrcpy (lpszDevName, TEXT("???")); else { wcscpy(lpszDevName, m_pDeviceInfo[i].DeviceName); } //LeaveCriticalSection(&m_criticalSection);
}
///////////////////////////////////////////////////////////////////////////////////
//this function should only be called after a critical section has been
//obtained.
BOOL CDeviceList::GetDeviceType( LONG iDevID, OBEX_DEVICE_TYPE *Type ) { int i; BOOL bResult;
*Type=TYPE_UNKNOWN;
EnterCriticalSection(&m_criticalSection); for(i = 0; i < m_lNumDevices; i++) { if (m_pDeviceInfo[i].DeviceType == TYPE_IRDA) {
if (iDevID == (LONG)m_pDeviceInfo[i].DeviceSpecific.s.Irda.DeviceId) {
*Type=m_pDeviceInfo[i].DeviceType; break; }
} else {
if (iDevID == (LONG)m_pDeviceInfo[i].DeviceSpecific.s.Ip.IpAddress) {
*Type=m_pDeviceInfo[i].DeviceType; break; }
} }
if (i == m_lNumDevices) { //
// the device was not found
//
bResult=FALSE;
} else {
bResult=TRUE; }
LeaveCriticalSection(&m_criticalSection); return bResult; }
|