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

📄 usbdlg.cpp

📁 FPGA与USB通信的测试代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	int i;	
	for(i=0;i<m_XLineStart.GetSize();i++)
	{   		
	    pDC->MoveTo (m_XLineStart[i],m_InnerUHScreen);
	    pDC->LineTo (m_XLineStart[i],m_InnerDHScreen);
	}
	
    for(i=0;i<m_YLineStart.GetSize();i++)
	{   	    
	    pDC->MoveTo (m_InnerLWScreen,m_YLineStart[i]);
	    pDC->LineTo (m_InnerRWScreen,m_YLineStart[i]);
    }
	
    pDC->SelectObject (pOldPen);
}

void CUSBDlg::XLPtoXVP (int x,float *X)
{
   *X=m_xStart+(x-m_InnerLWScreen)*m_XOriginScale; 
}

void CUSBDlg::YLPtoYVP (int y,float *Y)
{  	
	*Y=m_yStart+(m_InnerDHScreen-y)*m_YOriginScale;	
}

void CUSBDlg::XVPtoXLP(float x,int *X)
{
	float TempX;

	TempX=((x-m_xStart)/m_XOriginScale+(float)0.5)+m_InnerLWScreen;
	if(TempX > 3000) TempX = 3000;
	*X=(int)TempX;
}

void CUSBDlg::YVPtoYLP(float y,int *Y)
{
	float TempY;	

	TempY=m_InnerDHScreen-((y-m_yStart)/m_YOriginScale+(float)0.5);
	if(TempY > 3000) TempY = 3000;
	*Y = (int)TempY;
}

void CUSBDlg::GetBackLines(float xRectStart,float yRectStart,float xRectEnd,float yRectEnd)
{
		
	if(m_XLineStart.GetSize()>0)
	        m_XLineStart.RemoveAll();
	if(m_YLineStart.GetSize()>0)
	        m_YLineStart.RemoveAll();

	    float xL;
		float xd;
		float xLine;

        xL=xRectEnd-xRectStart;			
		if(xL<0) xL=-xL;
		if(xL==0) return;
        
		xd=xL/8;  
        
        m_xLineStart[0]=xRectStart;     
		m_XLineStart.Add(m_InnerLWScreen); 
		m_xn=0;		

		xLine=xd;

		while(xLine<xL)
		{
			m_xn=m_xn+1;
			
			m_xLineStart[m_xn]=m_xn*xd;	 
			m_XLineStart.Add((int)(xLine/m_XOriginScale)+m_InnerLWScreen); 
						
			xLine=xLine+xd;   
		}
		
        m_xn=m_xn+1;
		m_xLineStart[m_xn]=xRectEnd;
		m_XLineStart.Add((int)((xRectEnd-xRectStart)/m_XOriginScale)+m_InnerLWScreen-1);

		float yL;
		float yd;
		float yLine;

		yL=yRectEnd-yRectStart;
		if(yL<0) yL=-yL;
		if(yL==0) return;
		
		yd=yL/6;
				
        m_yLineStart[0]=yRectStart;
		m_yn=0;
		m_YLineStart.Add(m_InnerDHScreen-1); 
		        
		yLine=yd;
		while(yLine<yL)              
		{
			m_yn=m_yn+1;

			m_yLineStart[m_yn]=m_yn*yd;
			m_YLineStart.Add(m_InnerDHScreen-(int)(yLine/m_YOriginScale));

			yLine=yLine+yd;
		}

		m_yn=m_yn+1;
		m_yLineStart[m_yn]=yRectEnd;
		m_YLineStart.Add(m_InnerDHScreen-(int)((yRectEnd-yRectStart)/m_YOriginScale));
}

void CUSBDlg::DrawCurve (CDC *pDC)
{
	int x1,y1;
    
	CPen npen((int)PS_SOLID,(int)1,RGB(255,255,0));
    
    CPen* npOldPen=pDC->SelectObject (&npen);

    pDC->SetROP2(R2_COPYPEN); 
    
    XVPtoXLP(m_PointList[0].x,&x1);
    YVPtoYLP(m_PointList[0].y,&y1);

    pDC->MoveTo (x1,y1);
    for(int i=1;i<256;i++)
    {
       XVPtoXLP(m_PointList[i].x,&x1);
       YVPtoYLP(m_PointList[i].y,&y1);
 	   pDC->LineTo (x1,y1);
	}
    pDC->SelectObject (npOldPen);
}

void CUSBDlg::DrawUDLRrect (CDC *pDC)
{
	pDC->SetBkColor(12632256);  

	CBrush brush(pDC->GetBkColor ());
	pDC->FillRect(Urect,&brush);
	pDC->FillRect(Drect,&brush);
	pDC->FillRect(Lrect,&brush);
	pDC->FillRect(Rrect,&brush);

	pDC->DrawEdge(TotalRect,EDGE_SUNKEN,BF_RECT);
}

void CUSBDlg::DrawLab(CDC *pDC)
{	
    pDC->TextOut(m_InnerLWScreen-30,m_InnerUHScreen-27,"幅度值"); 
	pDC->TextOut(m_InnerLWScreen/2-15 + m_InnerRWScreen/2,m_InnerDHScreen+ 20, "点数值");

	char str[10];
    	
    for(int i=0;i<m_YLineStart.GetSize();i++)
	{   	    
		sprintf(str,"%5.1f",(MaxValue-MinValue)/6.0*i+MinValue);
		pDC->TextOut(m_InnerLWScreen-45,m_YLineStart[i]-10,str); 
    }
	
	for(i=0;i<m_XLineStart.GetSize();i++)
	{   	    
		sprintf(str,"%d",i*32);
		pDC->TextOut(m_XLineStart[i]-5,m_InnerDHScreen+5,str); 
    }

	pDC->TextOut(m_InnerLWScreen+150,m_InnerUHScreen-27,"波形显示"); 
}

////////////////////////////////////////////////////////////////////////////////

BOOL CUSBDlg::EzusbShortdataIn(HANDLE hDevice, BYTE *data, DWORD &lenBytes)
{
	BULK_TRANSFER_CONTROL bulkControl;
	bulkControl.pipeNum=0x02;
	BOOLEAN bResult= FALSE;
   
	unsigned short temp,TempMax,TempMin;

    bResult = DeviceIoControl (hDevice,
		IOCTL_EZUSB_BULK_READ, 
		&bulkControl,
		sizeof (BULK_TRANSFER_CONTROL),
		data,
		8192,
		&lenBytes,
		NULL);

	
	   for (int i=0;i<(unsigned int)(lenBytes/16);i++)
			{
				
                temp=data[8*i];//+(data[4*i+1])*16;
				//if(temp>4096) temp=2048; 
				m_PointList[count++].y = temp;
				if (count==255) count=0;
			}
			
			TempMax=TempMin=m_PointList[0].y;
            for (i=1;i<256;i++)
			{				
                if(m_PointList[i].y>TempMax)
					TempMax=m_PointList[i].y;
                else if(m_PointList[i].y<TempMin)
					TempMin=m_PointList[i].y;
			}
			
			MaxValue=500;//TempMax+100;
			MinValue=-100;//TempMin-100;

			CRect r;
	        r.SetRect(m_InnerLWScreen , m_InnerUHScreen, m_InnerRWScreen , m_InnerDHScreen);
	        InvalidateRect(r,TRUE); 


	return bResult;
}

void CUSBDlg::OnBeginWork() 
{
	if(m_hDevice==NULL)
	{
		MessageBox("设备没有打开,请确定设备已经打开,再重新打开本程序!");
		return;
	}
	threadController=1;
    AfxBeginThread(threadproc1,this,THREAD_PRIORITY_NORMAL);
    AfxBeginThread(threadproc1,this,THREAD_PRIORITY_NORMAL);
	GetDlgItem(IDC_BeginWork)->EnableWindow(0);
	GetDlgItem(IDC_Pause)->EnableWindow(1);
}

void CUSBDlg::OnPause() 
{
	threadController=0;
	GetDlgItem(IDC_BeginWork)->EnableWindow(1);
}

void CUSBDlg::OnClose() 
{
	if(threadController)
	{
		MessageBox("请先暂停,再退出!");
		return;
	}
	
	CDialog::OnClose();
}

void CUSBDlg::OnOK() 
{
	if(threadController)
	{
		MessageBox("请先暂停,再退出!");
		return;
	}	// TODO: Add extra validation here
	
	CDialog::OnOK();
}


void CUSBDlg::AddDataToList(CString str)
{
	//CString str1;
	//m_DataDisplay.GetWindowText(str1);
    //str1+=str;
    //m_DataDisplay.SetWindowText(str1);
	m_DataDisplay.SetWindowText(str);
}

void CUSBDlg::OnClearData() 
{
    m_DataDisplay.SetWindowText("");	
}

void CUSBDlg::OnAbout() 
{
	CAboutDlg dlg;
	dlg.DoModal();
	
}

void CUSBDlg::OnSaveButton() 
{
	// TODO: Add your control notification handler code here
    if(threadController)
	{
		MessageBox("请首先结束当前线程!", "错误", MB_ICONERROR | MB_OK);
		return;
	}

   	CFileDialog SaveDlg(FALSE,"uad","*.uad");
	if (SaveDlg.DoModal()==IDOK)
	{
		CFile SaveFile;
		if(!SaveFile.Open(SaveDlg.GetPathName(),CFile::modeCreate|CFile::modeWrite))
		{
			AfxMessageBox("打开文件失败!");
			return;
		}
		else
		{
			unsigned short* pBuf = new unsigned short[256];
			CString str;
			
			for(int i = 0; i < 256; i++)
			{
                pBuf[i] = m_PointList[i].y;
			    str.Format(_T("[%d]:0x%x"),i,pBuf[i]);
			//	m_UsbList.AddString(str);
			}

	        SaveFile.Write( pBuf, 512); 
			SaveFile.Close();
			delete pBuf;
		}
	}	
}

void CUSBDlg::OnReplayButton() 
{
	// TODO: Add your control notification handler code here
   if(threadController)
	{
		MessageBox("请首先结束当前线程!", "错误", MB_ICONERROR | MB_OK);
		return;
	}
	
	CFileDialog OpenDlg(TRUE,"uad","*.uad");
	if (OpenDlg.DoModal()==IDOK)
	{
		CFile OpenFile;
		if(!OpenFile.Open(OpenDlg.GetPathName(),CFile::modeRead))
		{
			AfxMessageBox("打开文件失败!");
			return;
		}
		else
		{			
			unsigned short* pBuf = new unsigned short[256];
			CString str;
			
			UINT nBytesRead = OpenFile.Read( pBuf, 512); 

			for(int i = 0; i < 256; i++)
            {
				m_PointList[i].y=pBuf[i];
                str.Format(_T("[%d]:0x%x"),i,pBuf[i]);
			//	m_UsbList.AddString(str);
			}
            
			unsigned short TempMax,TempMin;
			TempMax=TempMin=m_PointList[0].y;
            for (i=1;i<256;i++)
			{				
                if(m_PointList[i].y>TempMax)
					TempMax=m_PointList[i].y;
                else if(m_PointList[i].y<TempMin)
					TempMin=m_PointList[i].y;
			}
			
			MaxValue=TempMax+100;
			MinValue=TempMin-100;

			CRect r;
	        r.SetRect(m_InnerLWScreen , m_InnerUHScreen, m_InnerRWScreen , m_InnerDHScreen);
	        InvalidateRect(r,TRUE);  
			
			OpenFile.Close();
			delete pBuf;
		}
	}	
}

⌨️ 快捷键说明

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