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

📄 ezmrview.cpp

📁 EZ _USB Control PANEL 源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
					  case IDC_GET_PIPE_INFO: 
						((CEzMrFrame*)GetParentFrame())->UpdatePipes();
						break;
					  case IDC_TRAN_BULK_DATA: // set length field as returned
					    break;
					  default:
						break;
					}
                    ((CEzMrFrame*)(pTh->pParentFrame))->OpDone(pTh);
					delete (CThreadInfo*)pTh; // finished quickly - main task will clean up
					break;
				case WAIT_TIMEOUT: 
					TRACE("TPM:CEzMrView::bMainDlgProcThread(): Thread WAIT_TIMEOUT\n");
					pTh->m_hOpPended = 1; // delayed operation - thread will clean up
					m_pTh[m_nOpsPending-1] = pTh; // save pointer in case we have to exit
					break;
				case WAIT_ABANDONED: // This shouldn't happen
					TRACE("TPM:CEzMrView::bMainDlgProcThread(): Thread WAIT_ABANDONED\n"); 
					break;
				default: TRACE("TPM:CEzMrView::bMainDlgProcThread(): Thread STAT?\n"); 
					break;
			}
			TRACE("TPM:CEzMrView::bMainDlgProcThread(): Thread is done?\n");
		}
		else
		{
			TRACE("Max Operations Pending Limit reached (Op not started).\n");
			if(!theApp.m_nQuietMode)
			{
				theApp.report_error("Max Operations Pending Limit reached (Op not started).\n Unplug USB device (before pressing OK) to reset driver.\n");
			}
		}
	}
	return(bResult);
}

void CEzMrView::SendOp(int OpNum)
{ 	//TPMDo: Add ToolBar manually
	CRichEditCtrl& aRECtrl = GetRichEditCtrl();
	CRichEditCtrl* hOutputBox = &aRECtrl;
	CToolBar* pTBar = ((CEzMrFrame*)GetParentFrame())->m_pwndTbar[OpNum];
	char* pcDriverName = GetDrv();
	HWND hDlg = pTBar->m_hWnd;
	CString strMain;
	int SaveThreaded = theApp.m_bThreaded;
	switch(OpNum)
	{
	case OP_GET_DEVDES: 
		bMainDlgProcThread(pcDriverName, hOutputBox, hDlg, WM_COMMAND, IDC_GETDEVICEDESCRIPTOR, NULL);
		break;
	case OP_GET_CONDES: 
		bMainDlgProcThread(pcDriverName, hOutputBox, hDlg, WM_COMMAND, IDC_GETCONFIGDESCRIPTOR, NULL);
		break;
	case OP_GET_PIPINF: 
		bMainDlgProcThread(pcDriverName, hOutputBox, hDlg, WM_COMMAND, IDC_GET_PIPE_INFO, NULL);
		break;
	case OP_VEND_REQST: 
		bMainDlgProcThread(pcDriverName, hOutputBox, hDlg, WM_COMMAND, IDC_VEND_REQUEST, NULL);
		break;
	case OP_RW_BLK_BYT: 
		bMainDlgProcThread(pcDriverName, hOutputBox, hDlg, WM_COMMAND, IDC_TRAN_BULK_DATA, NULL);
		break;
	case OP_ANCHOR_DLD: 
		int bResult;
		theApp.m_bThreaded = 0;
		bResult = bMainDlgProcThread(pcDriverName, hOutputBox, hDlg, WM_COMMAND, IDC_ANCHOR_DOWNLOAD, NULL);
		theApp.m_bThreaded = SaveThreaded;
		break;
	case OP_RESET_PIPE:
		if(((CEzMrFrame*)GetParentFrame())->m_CBoxResPipe.GetCount())
		{
				bMainDlgProcThread(pcDriverName, hOutputBox, hDlg, WM_COMMAND, IDC_RESETPIPE, NULL);
		}
		else
			theApp.report_error("No available pipes: You may need to \"Get Pipe Info\".\n");
		break;
	case OP_ABORT_PIPE:
		if(((CEzMrFrame*)GetParentFrame())->m_CBoxResPipe.GetCount())
		{
				bMainDlgProcThread(pcDriverName, hOutputBox, hDlg, WM_COMMAND, IDC_ABORTPIPE, NULL);
		}
		else
			theApp.report_error("No available pipes: You may need to \"Get Pipe Info\".\n");
		break;
	case OP_ISO_TRANSF:
		if(((CEzMrFrame*)GetParentFrame())->m_CBoxIsoPipe.GetCount())
		{
			bMainDlgProcThread(pcDriverName, hOutputBox, hDlg, WM_COMMAND, IDC_ISO_TRANSFER, NULL);
		}
		else
			theApp.report_error("No available pipes: You may need to \"Get Pipe Info\".\n");
		break;
	case OP_SET_INTERF:
		bMainDlgProcThread(pcDriverName, hOutputBox, hDlg, WM_COMMAND, IDC_SETINTERFACE, NULL);
		break;
	case OP_8051__HOLD:
		bMainDlgProcThread(pcDriverName, hOutputBox, hDlg, WM_COMMAND, IDC_RESET_HLD, NULL);
		break;
	case OP_8051___RUN:
		bMainDlgProcThread(pcDriverName, hOutputBox, hDlg, WM_COMMAND, IDC_RESET_RLS, NULL);
		break;
	case OP_GETURBSTAT:
		bMainDlgProcThread(pcDriverName, hOutputBox, hDlg, WM_COMMAND, OP_GETURBSTAT, NULL);
		break;
	case OP_GET_STRING:
		bMainDlgProcThread(pcDriverName, hOutputBox, hDlg, WM_COMMAND, OP_GET_STRING, NULL);
		break;
	default: 
		break;
	}
}

void CEzMrView::OnOpsClear()
{
	CRichEditCtrl& aRECtrl = GetRichEditCtrl();
	CRichEditCtrl* hOutputBox = &aRECtrl;
	hOutputBox->SetSel(0, GetRichEditCtrl().GetTextLength());
	hOutputBox->ReplaceSel("");
}

void CEzMrView::OnStatTextButton()
{ 	//TPMDo: Add m_wndTBarVen manually
}

void CEzMrView::OnOpsSend()
{ 	//TPMDo: Add ToolBar manually
	int OpNum = ((CEzMrFrame*)GetParentFrame())->m_CBoxOps.GetCurSel();
	if( (theApp.m_nTarg == 2) &&
		( (OpNum == OP_ANCHOR_DLD) ||
		  (OpNum == OP_8051__HOLD) ||
		  (OpNum == OP_8051___RUN) ) ) // Prevent certain ops with Sx2
	{
	    AfxMessageBox("This option is unavailable with SX2", MB_OK | MB_ICONEXCLAMATION);
		return;
	}
	if(OpNum == OP_ANCHOR_DLD)
		OnIDC_DOWN_LOAD();
	else
		SendOp(OpNum);
}

void CEzMrView::On_8051_HOLD()
{ 	//TPMDo: Add m_wndTBarVen manually
	SendOp(OP_8051__HOLD);
}

void CEzMrView::On_8051_RUN()
{ 	//TPMDo: Add m_wndTBarVen manually
	SendOp(OP_8051___RUN);
}

void CEzMrView::On_LOAD_MON()
{
	CString strSaveDld = m_strDldFile;
	m_strDldFile = theApp.m_strMonFileName;
	LoadFile(m_strDldFile);
	m_strDldFile = strSaveDld;
}

void CEzMrView::LoadLoopTest()
{
	CString strSaveDld = m_strDldFile;
	m_strDldFile = theApp.m_strLoopTestFileName;
	LoadFile(m_strDldFile);
	m_strDldFile = strSaveDld;
}

int CEzMrView::LoadEEPROM()
{
	if(theApp.m_nTarg)
	{ // if Fx2
		TRACE("loading Fx2 loader\n");
		Ezusb_DownloadIntelHex(Vend_Ax_Fx2);
	}
	else
	{ // if Ezusb
		TRACE("loading Ezusb loader\n");
		Ezusb_DownloadIntelHex(Vend_Ax);
	}

	// Set up an A2 command to load the eeprom
	CToolBar* pwndTBarVen = &(((CEzMrFrame*)GetParentFrame())->m_wndTBarVen);
	CEdit* p_EBoxReq = (CEdit*)(pwndTBarVen->GetDlgItem(IDC_BREQUEST));
	p_EBoxReq->SetWindowText("0xA2");
	CEdit* p_EBoxVal = (CEdit*)(pwndTBarVen->GetDlgItem(IDC_WVALUE));
	p_EBoxVal->SetWindowText("0x0");
	CEdit* p_EBoxLen = (CEdit*)(pwndTBarVen->GetDlgItem(IDC_WLENGTH));
	p_EBoxLen->SetWindowText("7");
	CComboBox* p_CBoxVenDir = (CComboBox*)(pwndTBarVen->GetDlgItem(IDC_DIRECTION));
	p_CBoxVenDir->SetCurSel(1);
	CComboBox* p_CBoxVenData = (CComboBox*)(pwndTBarVen->GetDlgItem(IDC_VENDOR_DATA));
	p_CBoxVenData->SetWindowText(IDS_USB_EE_EZLINK);
	((CEzMrFrame*)GetParentFrame())->OnEditVenData(); //slurp up data into buff
	SendOp(OP_VEND_REQST);

	SleepEx(500, 0);
	// read back eeprom
	//unsigned char* pVenbuf = (unsigned char *)((CEzMrFrame*)GetParentFrame())->VenBuf;
	char* pVenbuf = (char *)((CEzMrFrame*)GetParentFrame())->VenBuf;
	char strText[80];
	p_EBoxLen->SetWindowText("7");
	p_CBoxVenDir->SetCurSel(0);
	SendOp(OP_VEND_REQST);
	sprintf(strText, "%02X %02X %02X %02X %02X %02X %02X", 
		(pVenbuf[0] & 0xFF), pVenbuf[1], pVenbuf[2], pVenbuf[3], pVenbuf[4], pVenbuf[5], pVenbuf[6]);
	if(strcmp(strText, IDS_USB_EE_EZLINK))
		return(1);
	else
		return(0);
}

void CEzMrView::OnUpdateIDC_EZ_LOOP(CCmdUI* pCmdUI)
{
/*
	CFileStatus status;
	if( CFile::GetStatus( theApp.m_strPathUSBRoot + "\\Bin\\bulkloop.exe", status ))
		pCmdUI->Enable(TRUE);
	else
		pCmdUI->Enable(FALSE);
*/
}

void CEzMrView::OnIDC_EZ_LOOP()
{
/*
	TRACE("TPM:CEzMrView::OnIDC_EZ_LOOP()\n");
	CFileStatus status;
	if( CFile::GetStatus( theApp.m_strPathUSBRoot + "\\Bin\\bulkloop.exe", status ) )
	{ // if program exists
		WinExec(theApp.m_strPathUSBRoot + "\\Bin\\bulkloop.exe", SW_SHOWNOACTIVATE);
	}
	else
	{
		theApp.report_error("Error running Bulkloop; bulkloop.exe not available.\n");
		return;
	}
*/
///*	
	CToolBar* pwndTBarUna = &(((CEzMrFrame*)GetParentFrame())->m_wndTBarUna);
	if(m_nLooping)
	{
		m_nLooping = 0;
//		theApp.m_nQuietMode = 0;
		KillTimer(timerID); // Kill the timer
	}
	else
	{
		if(((CEzMrFrame*)GetParentFrame())->m_CBoxBlkPipe.GetCount())
		{
			m_nGotPipeInfo = 0;
			m_nLooping = 1;
//			theApp.m_nQuietMode = 1;
			m_nLoopTimerID = 0x1000 + theApp.m_nTimerId++; // get a new timer ID
			//if (!(timerID = SetTimer( m_nLoopTimerID, 1000, 0))) // 1000 ms
			if (!(timerID = SetTimer( m_nLoopTimerID, 2000, 0))) // 2000 ms
				theApp.report_error("Couldn't get timer -- Loopback Test will not work\n");
		}
		else
		{
			theApp.report_error(
			  "No Pipe Selected -- Please load firmware, then \"Get Pipes\", then try again\n");
		}
	}
//*/
}

void CEzMrView::OnTimer(UINT nIDEvent) 
{
	if(nIDEvent == (UINT)m_nLoopTimerID)
	{
		TRACE("TPM:CEzMrApp::Looping()\n");

		if(!m_nGotPipeInfo)
		{
			m_nGotPipeInfo = 1;
			SendOp(OP_GET_PIPINF);
		}

		CToolBar* pwndTBarBlk = &(((CEzMrFrame*)GetParentFrame())->m_wndTBarBlk);
		CRichEditCtrl& aRECtrl = GetRichEditCtrl();
		CRichEditCtrl* hOutputBox = &aRECtrl;

		((CEzMrFrame*)GetParentFrame())->m_EBoxBlkLen.SetWindowText("64");
		CComboBox* pCBoxBlkPipe;
		pCBoxBlkPipe = (CComboBox*)(pwndTBarBlk->GetDlgItem(IDC_BLK_PIPE));
		((CEzMrFrame*)GetParentFrame())->OnEditchangeData(); //slurp up data into buff

		int epSel;
		int epPipeIn = -1;
		int epPipeOut = -1;
		int curSel = pCBoxBlkPipe->GetCurSel();

		PUSBD_INTERFACE_INFORMATION pInterface;
		PUSBD_PIPE_INFORMATION pPipe;
		pInterface = (PUSBD_INTERFACE_INFORMATION) theApp.m_uInterfaceInfo;
		pPipe = pInterface->Pipes;

		epSel = pPipe[curSel].EndpointAddress & 0x0F;

		for(int i=0; i < (int) pInterface->NumberOfPipes; i++)
		{ // get pipe IN/OUT pair for selected endpoint
			if(epSel == (pPipe[i].EndpointAddress & 0x0F))
			{
				if(pPipe[i].EndpointAddress >> 7)
					epPipeIn = i;
				else
					epPipeOut = i;
			}
		}

		pCBoxBlkPipe->SetCurSel(epPipeOut);
		bMainDlgProcThread(GetDrv(), hOutputBox, pwndTBarBlk->m_hWnd, WM_COMMAND, IDC_TRAN_BULK_DATA, NULL);
		pCBoxBlkPipe->SetCurSel(epPipeIn);
		bMainDlgProcThread(GetDrv(), hOutputBox, pwndTBarBlk->m_hWnd, WM_COMMAND, IDC_TRAN_BULK_DATA, NULL);
		MessageBeep(MB_ICONEXCLAMATION);
	}

	CRichEditView::OnTimer(nIDEvent);
}

void CEzMrView::LoopOut() 
{
	CToolBar* pwndTBarBlk = &(((CEzMrFrame*)GetParentFrame())->m_wndTBarBlk);
	CComboBox* pCBoxBlkPipe = (CComboBox*)(pwndTBarBlk->GetDlgItem(IDC_BLK_PIPE));
	pCBoxBlkPipe->SetCurSel(1);
	SendOp(OP_RW_BLK_BYT);
}

void CEzMrView::LoopIn() 
{
	CToolBar* pwndTBarBlk = &(((CEzMrFrame*)GetParentFrame())->m_wndTBarBlk);
	CComboBox* pCBoxBlkPipe = (CComboBox*)(pwndTBarBlk->GetDlgItem(IDC_BLK_PIPE));
	pCBoxBlkPipe->SetCurSel(0);
	SendOp(OP_RW_BLK_BYT);
}

char* CEzMrView::GetBlkBuf() 
{
	return( ((CEzMrFrame*)GetParentFrame())->BlkBuf );
}

void CEzMrView::UpdDrv()
{
}

void CEzMrView::OnIDC_EPROM_LD()
{
	CFileStatus status;

	TRACE("TPM:CEzMrView::OnIDC_EPROM_LD()\n");
	CFileDialog dlgLoad(
		TRUE, 0, 0,
		OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		"AllFiles (*.*)|*.*||");
	dlgLoad.m_ofn.lpstrTitle = "EEPROM Download";
	dlgLoad.m_ofn.lpstrInitialDir = theApp.m_strPathUSBRoot + "\\Examples\\";
	if(dlgLoad.DoModal() != IDOK)
		return;

	if(theApp.m_nTarg)
	{ // if Fx2
		TRACE("loading Fx2 loader\n");
		Ezusb_DownloadIntelHex(Vend_Ax_Fx2);
	}
	else
	{ // if Ezusb
		TRACE("loading Ezusb loader\n");
		Ezusb_DownloadIntelHex(Vend_Ax);
	}

	unsigned char* pVenbuf = (unsigned char *)((CEzMrFrame*)GetParentFrame())->VenBuf;

	FILE *fp = fopen(dlgLoad.m_ofn.lpstrFile,"rb");

    if(!fp)
    {
        theApp.report_error("Error opening EEPROM file.\n");
		return;
    }

	m_dldOffset = 0;
	while(m_DldLen = fread(pVenbuf, sizeof(unsigned char), MAX_EP0_XFER_SIZE, fp))
	{ // Set up A2 commands to load the eeprom
		CToolBar* pwndTBarVen = &(((CEzMrFrame*)GetParentFrame())->m_wndTBarVen);
		CEdit* p_EBoxReq = (CEdit*)(pwndTBarVen->GetDlgItem(IDC_BREQUEST));
		p_EBoxReq->SetWindowText("0xA2");
		CEdit* p_EBoxVal = (CEdit*)(pwndTBarVen->GetDlgItem(IDC_WVALUE));
		//p_EBoxVal->SetWindowText("0x0");
		char ValTxt[8];
		sprintf(ValTxt, "0x%4x", m_dldOffset);
		p_EBoxVal->SetWindowText(ValTxt); // Value field holds dldOffset for Vend_Ax
		CEdit* p_EBoxLen = (CEdit*)(pwndTBarVen->GetDlgItem(IDC_WLENGTH));
		char LenTxt[8];

⌨️ 快捷键说明

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