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

📄 dlgpgdevice.cpp

📁 1394测试程序
💻 CPP
字号:
// DlgPgDevice.cpp : implementation file
//

#include "stdafx.h"
#include "TestApp.h"
#include "DlgPgDevice.h"


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

/////////////////////////////////////////////////////////////////////////////
// CDlgPgDevice dialog


CDlgPgDevice::CDlgPgDevice(CWnd* pParent /*=NULL*/)
	: CDialogPage(CDlgPgDevice::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgPgDevice)
	m_StrDeviceNodeAddr = _T("");
	m_StrHCNodeAddr = _T("");
	m_StrDriverVersionInfo = ("Not connected to device driver");
	m_ValDeviceNumber = 0;
	//}}AFX_DATA_INIT

}


void CDlgPgDevice::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgPgDevice)
	DDX_Text(pDX, IDC_DEV_NODEADDR, m_StrDeviceNodeAddr);
	DDX_Text(pDX, IDC_HC_NODE_ADDR, m_StrHCNodeAddr);
	DDX_Text(pDX, IDC_VERSION_INFO, m_StrDriverVersionInfo);
	DDX_Text(pDX, IDC_DEVICE_NUMBER, m_ValDeviceNumber);
	DDV_MinMaxDWord(pDX, m_ValDeviceNumber, 0, 62);
	//}}AFX_DATA_MAP


}


BEGIN_MESSAGE_MAP(CDlgPgDevice, CDialog)
	//{{AFX_MSG_MAP(CDlgPgDevice)
	ON_BN_CLICKED(IDC_BUTTON_SCAN, OnButtonScan)
	ON_BN_CLICKED(IDC_BUTTON_OPEN, OnButtonOpen)
	ON_BN_CLICKED(IDC_BUTTON_CLOSE, OnButtonClose)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgPgDevice message handlers
//得到所有1394设备,及1394芯片信息
void CDlgPgDevice::OnButtonScan() 
{
	CTest1394 Test1394Dev;
	CString Buf;
	GET_1394_ADDRESS GetNodeAddr;
	DWORD Status;
	BOOL Found=FALSE;

	// UpdateData(TRUE);
	
	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) 
			{
				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));			
				PrintOut(strTemp.GetBufferSetLength(strTemp.GetLength()));
				PrintOut(NL);
				strTemp.ReleaseBuffer();
			}
			/*
			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);
}


//与一个指定的1394设备建立联系
void CDlgPgDevice::OnButtonOpen() 
{
	/*
	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_ValDeviceNumber);
		PrintOut( strMsg.GetBufferSetLength( strMsg.GetLength() ) );
		strMsg.ReleaseBuffer();
		PrintOut(NL);

		// try to open the device
		DWORD Status = g_CurrentDev.Open(m_ValDeviceNumber,g_DevList,&g_Test1394DefaultIID);
		if ( Status == STATUS_SUCCESS ) 
		{				
			// if success: update global var
			g_DeviceNumber = m_ValDeviceNumber;//当前设备号
			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 
		{
			CString strMsg;
			strMsg.Format("Failed to open device %d.",m_ValDeviceNumber);
			PrintOut( strMsg.GetBufferSetLength( strMsg.GetLength() ) );
			strMsg.ReleaseBuffer();
			PrintOut(NL);
//			PrintOut("Failed to open device %d"NL, m_ValDeviceNumber);
			PrintError(Status, E_FATAL);
		}
	}	
	
}


void CDlgPgDevice::OnButtonClose() 
{
	// 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);
		
}

⌨️ 快捷键说明

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