📄 devicedlg.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 + -