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

📄 portseqrwdlg.cpp

📁 Windows下Hardware直接读写
💻 CPP
字号:
// PortSeqRwDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "HW_sigal.h"
#include "PortSeqRwDlg.h"
#include ".\portseqrwdlg.h"
#include ".\HwReadWrite.h"
#include <winioctl.h>

// CPortSeqRwDlg 对话框

IMPLEMENT_DYNAMIC(CPortSeqRwDlg, CDialog)
CPortSeqRwDlg::CPortSeqRwDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CPortSeqRwDlg::IDD, pParent)
	, m_nPort(_T(""))
	, m_sValue(_T(""))
	, m_sSize(_T(""))
{
}

CPortSeqRwDlg::~CPortSeqRwDlg()
{
}

void CPortSeqRwDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST_OPTS, m_lstOptions);
	DDX_Control(pDX, IDC_LIST_RESULT, m_lstResult);
	DDX_Control(pDX, IDC_COMBO_OPT, m_cmbOption);
	DDX_Text(pDX, IDC_EDIT_PORT, m_nPort);
	DDX_Text(pDX, IDC_EDIT_VALUE, m_sValue);
	DDX_Text(pDX, IDC_EDIT_PORT2, m_sSize);
}


BEGIN_MESSAGE_MAP(CPortSeqRwDlg, CDialog)
	ON_WM_SHOWWINDOW()
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_OPTS, OnLvnItemchangedListOpts)
	ON_BN_CLICKED(IDC_BUTTON_ADD, OnBnClickedButtonAdd)
	ON_BN_CLICKED(IDC_BUTTON_RUN, OnBnClickedButtonRun)
	ON_BN_CLICKED(IDC_BUTTON_DELETE, OnBnClickedButtonDelete)
END_MESSAGE_MAP()


// CPortSeqRwDlg 消息处理程序

BOOL CPortSeqRwDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// TODO:  在此添加额外的初始化
	
	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

void CPortSeqRwDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
	CDialog::OnShowWindow(bShow, nStatus);

	// TODO: 在此处添加消息处理程序代码
	//show the combox
	this->m_cmbOption.SetCurSel(0);

	//list initialize
	CRect rect;
	//show option list
	ListView_SetExtendedListViewStyleEx(this->m_lstOptions.GetSafeHwnd(), LVS_EX_FULLROWSELECT , LVS_EX_FULLROWSELECT);

	//Initialize the list box
	m_lstOptions.GetClientRect(&rect);
	int nInterval = rect.Width()/5;
	m_lstOptions.InsertColumn(0, _T("Operation"), LVCFMT_LEFT, nInterval*1.5);
	m_lstOptions.InsertColumn(1, _T("Port"), LVCFMT_LEFT, nInterval);
	m_lstOptions.InsertColumn(2, _T("Size"), LVCFMT_LEFT, nInterval);
	
	m_lstOptions.InsertColumn(3, _T("Value"), LVCFMT_LEFT, rect.Width()-2*nInterval-2); 

	//show result list
	ListView_SetExtendedListViewStyleEx(this->m_lstResult.GetSafeHwnd(), LVS_EX_FULLROWSELECT , LVS_EX_FULLROWSELECT);

	//Initialize the list box
	m_lstResult.GetClientRect(&rect);
	nInterval = rect.Width()/5;
	m_lstResult.InsertColumn(0, _T("Operation"), LVCFMT_LEFT, nInterval*2);
	m_lstResult.InsertColumn(1, _T("Port"), LVCFMT_LEFT, nInterval);
	m_lstResult.InsertColumn(2, _T("Result"), LVCFMT_LEFT, rect.Width()-2*nInterval-2); 
	
}

void CPortSeqRwDlg::OnLvnItemchangedListOpts(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;
}

void CPortSeqRwDlg::OnBnClickedButtonAdd()
{
	// TODO: 在此添加控件通知处理程序代码
	CString strOpt;
	int curSel;
	int i;
	//get port & value
	this->UpdateData(true);
	curSel = this->m_cmbOption.GetCurSel();
	m_cmbOption.GetLBText(curSel,strOpt);  

	i = this->m_lstOptions.GetItemCount();
	//add the item to list operations
	LV_ITEM lvi;
	TCHAR szItem[256];
	lvi.mask = LVIF_TEXT;

	// First item
		lvi.iItem = i; //add to latest
		lvi.iSubItem = 0;
		_stprintf(szItem, _T("%s"), strOpt);
		lvi.pszText = szItem;
		m_lstOptions.InsertItem(&lvi);

		// SubItem 1
		lvi.iSubItem = 1;
		_stprintf(szItem, _T("%s"), this->m_nPort);
		lvi.pszText = szItem;
		m_lstOptions.SetItem(&lvi);

		// SubItem 1
		lvi.iSubItem = 2;
		_stprintf(szItem, _T("%s"), this->m_sSize);
		lvi.pszText = szItem;
		m_lstOptions.SetItem(&lvi);


		// SubItem 2
		lvi.iSubItem = 3;
		if(curSel == 1)
		{
			_stprintf(szItem, _T("%s"), this->m_sValue);
		}
		else
		{
			_stprintf(szItem, _T("%s"), "");
		}
		m_lstOptions.SetItem(&lvi);


}

void CPortSeqRwDlg::OnBnClickedButtonRun()
{
	// TODO: 在此添加控件通知处理程序代码
	CString strOp;
	CString strPort;
	CString strValue;
	CString strResult;
	IOPORTRWP iorwList[100];
	//get the operation list
	LV_ITEM lvi;
	lvi.mask = LVIF_TEXT;
	CList <IOPORTRWP, IOPORTRWP&> listIO;
	TCHAR szItem[256];
	int cnt;

	unsigned long result;
	cnt = this->m_lstOptions.GetItemCount();
	m_lstResult.DeleteAllItems();
	for(int i=0; i<cnt; i++)
	{
		this->m_lstOptions.GetItemText(i, 0, szItem, 10);
	
		CString op = CString(szItem);
		if(op.Compare(CString("READ")) == 0)
		{
			//read
			this->m_lstOptions.GetItemText(i, 1, szItem, 10);
			strPort = CString(szItem);
			int nPort = _tcstoul(szItem, 0, 16);

			this->m_lstOptions.GetItemText(i, 2, szItem, 10);
			int size = _tcstoul(szItem, 0, 16);

			IOPORTRWP ior;
			//gpHwRw->GetPortVal(nPort, &result, size);
			ior.isRead = true;
			ior.portAddress = nPort;
			ior.portValue = 0;
			ior.rwSize = size;
			iorwList[i] = ior;
//			strResult.Format("%0x", result);
		}
		else
		{
			//write
			//read
			this->m_lstOptions.GetItemText(i, 1, szItem, 10);
			strPort = CString(szItem);
			int nPort = _tcstoul(szItem, 0, 16);

			this->m_lstOptions.GetItemText(i, 2, szItem, 10);
			int size = _tcstoul(szItem, 0, 16);

			this->m_lstOptions.GetItemText(i, 3, szItem, 10);
			int value = _tcstoul(szItem, 0, 16);

			//gpHwRw->SetPortVal(nPort, value, size);
			IOPORTRWP ior;
			ior.isRead = false;
			ior.portAddress = nPort;
			ior.portValue = value;
			ior.rwSize = size;

			iorwList[i] = ior;
			//strResult.Format("%s", "success");
		
		}
	}
		for(int index =0; index < cnt; index++)
		{
			unsigned long bytesReturned;
			DeviceIoControl ( gpHwRw->m_hDevice, 
                   (DWORD) IOCTL_PORT_READ_WRITE, 
                                        &iorwList[index], 
                                        sizeof(IOPORTRWP), 
                                        &iorwList[index].portValue,
                                        sizeof(ULONG),
                                        &bytesReturned,
                                        NULL 
                                        );
			
		}

//	pos = listIO.GetHeadPosition();
	for(int index =0; index < cnt; index++)
	{
		IOPORTRWP ior = iorwList[index];
		if(ior.isRead)
		{
			strOp = CString("READ");
			strResult.Format("%0x", ior.portValue);
		}
		else
		{
			strOp = CString("WRITE");
			strResult.Format("%s", "success");
		}
	//get the result, write to report
		//LV_ITEM lvi;
		lvi.iItem = index; //add to latest
		lvi.iSubItem = 0;
		_stprintf(szItem, _T("%s"), strOp);
		lvi.pszText = szItem;
		this->m_lstResult.InsertItem(&lvi);

		// SubItem 1
		strPort.Format("%0x", ior.portAddress);
		

		lvi.iSubItem = 1;
		_stprintf(szItem, _T("%s"), strPort);
		lvi.pszText = szItem;
		m_lstResult.SetItem(&lvi);

		// SubItem 2
		lvi.iSubItem = 2;
		_stprintf(szItem, _T("%s"), strResult);
		lvi.pszText = szItem;
		m_lstResult.SetItem(&lvi);
	}
}

void CPortSeqRwDlg::OnBnClickedButtonDelete()
{
	// TODO: 在此添加控件通知处理程序代码
	//int cnt = this->m_lstOptions.GetItemCount();
	int iPos = m_lstOptions.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
	m_lstOptions.DeleteItem(iPos);

	

}

⌨️ 快捷键说明

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