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