⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 devicedlg.cpp

📁 基于IEEE 1394总线的图像采集及处理系统软件技术研究
💻 CPP
字号:
// DeviceDlg.cpp : implementation file
//

#include "stdafx.h"
#include "test1394show.h"
#include "DeviceDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDeviceDlg dialog


CDeviceDlg::CDeviceDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDeviceDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDeviceDlg)
	m_nDeviceNum = 0;
	m_strDeviceNodeAddr = _T("");
	m_strDriverVersionInfo = _T("");
	m_strHCNodeAddr = _T("");
	m_nFrameNumber = 1;
	m_bOpen = FALSE;
	//}}AFX_DATA_INIT
}


void CDeviceDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDeviceDlg)
	DDX_Control(pDX, IDC_LIST_DEVICES, m_DeviceListBox);
	DDX_Text(pDX, IDC_EDIT_DEVICE_NUMBER, m_nDeviceNum);
	DDV_MinMaxInt(pDX, m_nDeviceNum, 0, 63);
	DDX_Text(pDX, IDC_STATIC_CURRENT_NODE, m_strDeviceNodeAddr);
	DDX_Text(pDX, IDC_STATIC_DRIVER_VERSION, m_strDriverVersionInfo);
	DDX_Text(pDX, IDC_STATIC_HOST_NODE, m_strHCNodeAddr);
	DDX_Text(pDX, IDC_EDIT_FRAME_NUMBER, m_nFrameNumber);
	DDV_MinMaxInt(pDX, m_nFrameNumber, 1, 1000);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDeviceDlg, CDialog)
	//{{AFX_MSG_MAP(CDeviceDlg)
	ON_BN_CLICKED(IDC_BUTTON_SCAN, OnButtonScan)
	ON_BN_CLICKED(IDC_BUTTON_OPEN_DEVICE, OnButtonOpenDevice)
	ON_BN_CLICKED(IDC_BUTTON_CLOSE_DEVICE, OnButtonCloseDevice)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDeviceDlg message handlers

void CDeviceDlg::OnButtonScan() 
{
	CTest1394 Test1394Dev;
	CString Buf;

	GET_1394_ADDRESS GetNodeAddr;
	DWORD Status;
	BOOL Found=FALSE;
    m_DeviceListBox.GetCount();//得到现有的设备数,2004/10/6 hyb
	for (int i=0;i < m_DeviceListBox.GetCount();i++)
	{
	   m_DeviceListBox.DeleteString( i );
	}

	
	PrintOut(NL"Scanning for attached IEEE 1394 devices:" NL);

	// destroy device list
	DestroyDeviceList(g_DevList);
	g_DevList=NULL;
	// create new device list
	//g_DevList包含使用g_Test1394DefaultIID唯一标示的驱动程序的所有设备
	g_DevList=CreateDeviceList(&g_Test1394DefaultIID);
	if ( g_DevList!=NULL ) 
	{
		for (int i=0;i<63;i++) 
		{
			Status=Test1394Dev.Open(i,g_DevList,&g_Test1394DefaultIID);//创建与一个设备的连接
			if (Status != STATUS_SUCCESS) 
			{
				break;
			}
			//当前设备
			GetNodeAddr.fulFlags = 0;
			Status=Test1394Dev.GetNodeAddress(&GetNodeAddr);//得到1394节点标示
			if (Status == STATUS_SUCCESS) 
			{
//				PrintOut("1394 device %d:  Node number %d  ",i,GetNodeAddr.NodeAddress.NA_Node_Number);				
				CString strTemp;
				strTemp.Format("%d号设备:%d : %d : => 0x%04X",
				i,GetNodeAddr.NodeAddress.NA_Bus_Number, GetNodeAddr.NodeAddress.NA_Node_Number,
				((GetNodeAddr.NodeAddress.NA_Bus_Number<<6) | GetNodeAddr.NodeAddress.NA_Node_Number));
			
				m_DeviceListBox.AddString(strTemp);
			}
/*			Status=Test1394Dev.GetDeviceInfoParams(&info);//得到1394设备配置信息
			if (Status == STATUS_SUCCESS)
			{
				SwapBytes(&info.ConfigRomHead.NodeID[0]);
				SwapBytes(&info.ConfigRomHead.NodeID[1]);
				PrintOut(
					"NodeVendorID: 0x%06X  ChipID 0x%02X %08X",
								((info.ConfigRomHead.NodeID[0]>>8)&0xffffff),
								(info.ConfigRomHead.NodeID[0]&0xff),
								info.ConfigRomHead.NodeID[1]);
				Found=TRUE;
			}
			PrintOut(NL);
*/			Test1394Dev.Close();
		} // for 
	}
	if (!Found) 
	{
		PrintOut("There are no IEEE 1394 devices attached to the driver."NL);
	}

	PrintOut(NL);
}

void CDeviceDlg::OnButtonOpenDevice() 
{
	/*
	typedef struct _VERSION_DATA 
	{
		ULONG           ulVersion;
		ULONG           ulSubVersion1;
		ULONG           ulSubVersion2;
		ULONG           ulSubVersion3;
	} VERSION_DATA, *PVERSION_DATA;
	*/
	VERSION_DATA DriverInfo;
	GET_1394_ADDRESS GetNodeAddr;
	
	if ( UpdateData(TRUE) ) 
	{
		// destroy device list
		DestroyDeviceList(g_DevList);
		g_DevList=NULL;
		// create new device list
		g_DevList=CreateDeviceList(&g_Test1394DefaultIID);
		if ( g_DevList==NULL ) 
		{
			DisplayMessageBox("CreateDeviceList failed. No devices with this interface available.");
			return;
		}

		CString strMsg;
		strMsg.Format("Trying to open device %d.",m_nDeviceNum);
		PrintOut( strMsg.GetBufferSetLength( strMsg.GetLength() ) );
		strMsg.ReleaseBuffer();
		PrintOut(NL);

		// try to open the device
		DWORD Status = g_CurrentDev.Open(m_nDeviceNum,g_DevList,&g_Test1394DefaultIID);
		if ( Status == STATUS_SUCCESS ) 
		{				
			// if success: update global var
			m_bOpen = TRUE;
			g_DeviceNumber = m_nDeviceNum;//当前设备号
			CString strMsg;
			strMsg = "Device successfully opened.";			
			PrintOut( strMsg.GetBufferSetLength( strMsg.GetLength() ) );
			strMsg.ReleaseBuffer();
			PrintOut(NL);		

			//驱动程序版本
			::ZeroMemory(&DriverInfo,sizeof(DriverInfo));
			if (g_CurrentDev.GetDriverInfo(&DriverInfo)) 
			{
				PrintOut("Cannot get driver version."NL);
			} 
			else
			{
				// set the version string
				m_strDriverVersionInfo.Format(
					"Test1394 version: %d.%d.%d.%d",DriverInfo.ulVersion,DriverInfo.ulSubVersion1,
												DriverInfo.ulSubVersion2,DriverInfo.ulSubVersion3);
			}

			// setup struct for getting current device address
			::ZeroMemory(&GetNodeAddr,sizeof(GetNodeAddr));
			GetNodeAddr.fulFlags = 0;
			if (g_CurrentDev.GetNodeAddress(&GetNodeAddr) != STATUS_SUCCESS) 
			{
				PrintOut(NL"GetNodeAddress(Device) failed"NL);
				PrintError(Status);
			} 
			else 
			{
				// set the current device node address string
				m_strDeviceNodeAddr.Format(
					"Bus nmb: %d Node nmb: %d => NodeAddress: 0x%04X"NL,
					GetNodeAddr.NodeAddress.NA_Bus_Number, GetNodeAddr.NodeAddress.NA_Node_Number,
					((GetNodeAddr.NodeAddress.NA_Bus_Number<<6) | GetNodeAddr.NodeAddress.NA_Node_Number));
			}

			// setup struct for getting local host controller node address
	 		::ZeroMemory(&GetNodeAddr,sizeof(GetNodeAddr));
			GetNodeAddr.fulFlags = USE_LOCAL_NODE;
			if (g_CurrentDev.GetNodeAddress(&GetNodeAddr) != STATUS_SUCCESS) 
			{
				PrintOut(NL"GetNodeAddress(Local Host) failed"NL);
				PrintError(Status);
			} 
			else 
			{
				// set the local host controller node address string
				m_strHCNodeAddr.Format(
					"Bus nmb: %d Node nmb: %d => NodeAddress: 0x%04X"NL,
					GetNodeAddr.NodeAddress.NA_Bus_Number, GetNodeAddr.NodeAddress.NA_Node_Number,
					((GetNodeAddr.NodeAddress.NA_Bus_Number<<6) | GetNodeAddr.NodeAddress.NA_Node_Number));
			}

			UpdateData(FALSE);
			PrintOut(NL);

		} 
		else 
		{
			m_bOpen = TRUE;
			CString strMsg;
			strMsg.Format("Failed to open device %d.",m_nDeviceNum);
			PrintOut( strMsg.GetBufferSetLength( strMsg.GetLength() ) );
			strMsg.ReleaseBuffer();
			PrintOut(NL);
//			PrintOut("Failed to open device %d"NL, m_nDeviceNum);
			PrintError(Status, E_FATAL);
		}
	}	
}

void CDeviceDlg::OnButtonCloseDevice() 
{
	// close driver 
	g_CurrentDev.Close();
	PrintOut("Device closed."NL);

	// destroy device list
	DestroyDeviceList(g_DevList);
	g_DevList=NULL;

	// update global var
	g_DeviceNumber = -1;

	// update display
	m_strDeviceNodeAddr = _T("");
	m_strHCNodeAddr = _T("");
	m_strDriverVersionInfo = ("Not connected to device driver");
	UpdateData(FALSE);
}


void CDeviceDlg::OnCancel() 
{
	// close driver 
	g_CurrentDev.Close();
	PrintOut("Device closed."NL);

	// destroy device list
	DestroyDeviceList(g_DevList);
	g_DevList=NULL;

	// update global var
	g_DeviceNumber = -1;

	// update display
	m_strDeviceNodeAddr = _T("");
	m_strHCNodeAddr = _T("");
	m_strDriverVersionInfo = _T("");
	CDialog::OnCancel();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -