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

📄 displaywindow.cpp

📁 最新的USB示波器源码?可直接编译生成可执行程序,需要硬件支持
💻 CPP
📖 第 1 页 / 共 5 页
字号:
  pDC->LineTo(XOFFSIZE+(DISWIDTH-DISLENGHT)/2+DISLENGHT,y+YOFFSIZE+5);
  pDC->SelectObject (&Pen);
  pDC->MoveTo(XOFFSIZE+(DISWIDTH-DISLENGHT)/2+DISLENGHT,y+YOFFSIZE);
  pDC->LineTo(XOFFSIZE+(DISWIDTH-DISLENGHT)/2+DISLENGHT,y+YOFFSIZE+10);
  pDC->SelectObject (GetStockObject(NULL_BRUSH));
  
 
  //float p2=DISLENGHT/DISWIDTH;
  
  //int rl=p1*DISLENGHT;
  CRect rect;
  int offset_min=(int)(float)time_base.memory_offset*p2+XOFFSIZE+(DISWIDTH-DISLENGHT)/2;

  rect.left=offset_min;
  rect.top=y+YOFFSIZE ;
  rect.right=offset_min+rl;
  rect.bottom=y+YOFFSIZE+10;
  pDC->Rectangle (&rect);

  pDC->SelectObject (&Pen2);
  
  int sit=(int)(float)(time_base.trigger_offset)*p2+XOFFSIZE+(DISWIDTH-DISLENGHT)/2;

  pDC->MoveTo(sit-5,y+YOFFSIZE);
  pDC->LineTo(sit+5,y+YOFFSIZE);
  pDC->LineTo(sit,y+YOFFSIZE+5);
  pDC->LineTo(sit-5,y+YOFFSIZE);
  pDC->SelectObject(oldPen);



}

BOOL DisplayWindow::SetCha_ON_OFF(BOOL isOn)
{  if(isOn)
         cha_on=true;
   else
	     cha_on=false;
   ReDrawSCreen();
  return true;
}

BOOL DisplayWindow::SetChb_ON_OFF(BOOL isOn)
{
 if(isOn)
         chb_on=true;
   else
	     chb_on=false;
   ReDrawSCreen();
   return true;
}

void DisplayWindow::OpenScaleLine(BYTE mode)
{

   scaleline_mode=mode;
 
    switch(scaleline_mode)
	{
	case 0:
	LeftScaleSit=0;
	RightScaleSit=0;
    UpScaleSit=0;
	DownScaleSit=0;
		break;
	case 1:  // ||
	LeftScaleSit=DISWIDTH/3;
	RightScaleSit=2*DISWIDTH/3;
   	break;
	case 2:// =
   	UpScaleSit=DISHEIGHT/3;
	DownScaleSit=2*DISHEIGHT/3;
		break;
	case 3: // |
	LeftScaleSit=DISWIDTH/3;
   	break;
	case 4: // -
	UpScaleSit=DISHEIGHT/3;
	break;
	}

   
  
   ReDrawSCreen();
}

void DisplayWindow::SetTime_Div(int i)
{
  m_time_div=i;
   ReDrawSCreen();
}

void DisplayWindow::DrawRectForText(CDC *pDC, int x, int y, CString title, CString str1, CString str2)
{
	 m_OldFont=pDC->SelectObject(m_font);
     pDC->SetBkMode (TRANSPARENT);
	 CRect rect,rt;
	 rect.left =x;
	 rect.right=rect.left +TEXT_WND_W;
	 rect.top =y;
	 rect.bottom =rect.top+TEXT_WND_H;
     
	 pDC->FillSolidRect(rect, RGB(121,106,173));
     rt.left =rect.left+1;
	 rt.right =rect.right -1;
	 rt.top =rect.top+2;
	 rt.bottom =rt.top+15;

	 pDC->FillSolidRect(rt, RGB(255,255,255));
    
   	 pDC->SetTextColor(RGB(0,0,0));
    
	
	 CRect t_rect;
	 t_rect.left=rect.left +1;
	 t_rect.right =rect.right -1;
	 t_rect.top =rect.top +2;
	 t_rect.bottom =t_rect.top+15;
	 pDC->DrawText (title,&t_rect,DT_CENTER);
	 
	 pDC->SetBkColor(RGB(121,106,173));
	 pDC->SetTextColor(RGB(255,255,255));
	 


	 t_rect.top =t_rect.bottom +1;
	 t_rect.bottom =t_rect.top+15;
	 pDC->DrawText (str1,&t_rect,DT_RIGHT);

	
     t_rect.top =t_rect.bottom +1;
	 t_rect.bottom =t_rect.top+15;
	 pDC->DrawText (str2,&t_rect,DT_RIGHT);
	
   

}

void DisplayWindow::SetChaVlot_Div(int v)
{
 m_cha_vlot_div=v;
  
   ReDrawSCreen();
}

void DisplayWindow::SetChbVlot_Div(int v)
{  m_chb_vlot_div=v;
  
   ReDrawSCreen();

}

void DisplayWindow::SetTriggerLevel(WORD v)
{
    trig_level=(DISHEIGHT*v)/1024;
	ReDrawSCreen();
}

void DisplayWindow::DrawLineGraph(WPARAM wParam, LPARAM lParam)
{  
    ReDrawSCreen();   
 //DrawLine();
}
BOOL DisplayWindow::UsbOpenDriver(HANDLE *phDeviceHandle, PCHAR devicename)
{
 char completeDeviceName[64] = "";   
   strcat (completeDeviceName,"\\\\.\\");   
   strcat (completeDeviceName,devicename);   

   *phDeviceHandle = CreateFile(completeDeviceName,
      GENERIC_WRITE,
      FILE_SHARE_WRITE,
      NULL,
      OPEN_EXISTING,
      0,
      NULL);

   if (*phDeviceHandle == INVALID_HANDLE_VALUE) 
      return (FALSE);
   else 
      return (TRUE);
}

#define PT_W (( DisplayWindow *)pParam) 

//采集数据线程.

UINT GetADdata_ThreadProc(void * pParam)
{
	
   HANDLE  hInDevice = NULL;
   char    DeviceName[50] = "Ezusb-0";  
  // BYTE ord[8];
  if (PT_W->UsbOpenDriver (&hInDevice, DeviceName) != TRUE) 
   { ::AfxMessageBox( "无效设备,请重试!");
	 return 0;
   }

   PT_W->comEventStart.Lock();
	
	while(PT_W->Kill_Theard)
	{ 
		while(PT_W->Caiyang)
		{
       
		if(!PT_W->GetADdata(hInDevice))return 0;
	//	     fps++;
	//	if((fps%2)==0)
		 ::PostMessage (PT_W->m_hWnd,WM_MY_DRAWGRAPH,0,0);
		// Sleep(100);
         if(trigger.mode ==2)
		 PT_W->comEventStart.Lock();
	//	else
	//	{
//

	//	}
        // Sleep(100);
	   //PT_W->ReDrawSCreen();
	     // ord[0]='R';
		//  PT_W->SendCommandToUSB(ord,VR_USRCMD); 
 		}
		
		PT_W->comEventStart.Lock();
	}
	CloseHandle (hInDevice);
	return 1;
}

BOOL DisplayWindow::SendCommandToUSB(BYTE * cmd_buffer,BYTE order)
{
	VENDOR_OR_CLASS_REQUEST_CONTROL	myRequest;
    HANDLE  hInDevice = NULL;
    ULONG bufferSize = 8;
 
	BOOL bResult=false;
    char  DeviceName[20] = "Ezusb-0";  
    
	 unsigned char sum;
   sum=0;
   for(int i=0;i<7;i++)
	   sum+=*(cmd_buffer+i);
	   sum=~sum+1;
       *(cmd_buffer+i)=sum;
	
	
	if (UsbOpenDriver (&hInDevice, DeviceName) != TRUE) 
	{
       MessageBox( "无效设备,请重试!","错误",MB_ICONERROR);
	    return false;
	}
  else
  {  DWORD dwReturned;
     myRequest.request = order;
	 myRequest.value = 8;
	 myRequest.index = 0xBEEF;
	 myRequest.direction = 0;
	 myRequest.requestType=2; // vendor specific request type (2)
	 myRequest.recepient=0; // recepient is device (0)
     bResult = DeviceIoControl(hInDevice,
    			IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,
				&myRequest,
				sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),
				cmd_buffer,8,
				(unsigned long *)&dwReturned,
				NULL);
	if (bResult!=TRUE) 
 		MessageBox("命令失败!","错误",MB_ICONERROR);
		CloseHandle (hInDevice);
	
	 }
  return bResult;
}

void DisplayWindow::RecordWave(BOOL flag)
{
  isRecord=flag;
}

void DisplayWindow::Recall()
{
	if(pagedata_start){acquire.counter=0;
	   pg=pagedata_start;
	   memcpy(cha_addata,pg->cha_data,SAMPLE_DEPTH);
	   ReDrawSCreen();   
	   }
}

void DisplayWindow::Play_Back()
{
    if((pg!=NULL)&&(pg!=pagedata_start))
	{	pg=pg->up;
          memcpy(cha_addata,pg->cha_data,SAMPLE_DEPTH);
		  ReDrawSCreen();   
	}
}

void DisplayWindow::Play_Next()
{
    if((pg!=NULL)&&(pg->next!=NULL))
	{	pg=pg->next;
        memcpy(cha_addata,pg->cha_data,SAMPLE_DEPTH);
		ReDrawSCreen();   
	}  
}

CString DisplayWindow::GetFreqString(int RightScaleSit, int LeftScaleSit)
{	CString mes;
    int t;
	float freq,tm;
	if(time_base.time_d>1)
	  { 
			t= t_div[time_base.time_d]/50; //ns级运算
		if(t>0)
		{	if(RightScaleSit!=LeftScaleSit)
            t=fabs(RightScaleSit-LeftScaleSit)*t;
            freq=(float)1000000000.0/(float)t;
	    	if(freq>1000000)
			{  freq/=1000000.0;
				 mes.Format ("T=%dns freq=%0.2fMhz",t,freq);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
			}
			else
			{if(freq>1000)
				{  freq/=1000.0;
			        tm=(float)t/1000.0;
					 mes.Format ("T=%0.2fus freq=%0.2fKhz",tm,freq);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
				}
				else
				{
					tm=(float)t/1000000.0;
						mes.Format ("T=%0.2fms freq=%0.2fhz",tm,freq);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
				}
			}
		}
		else  //ps级运算 
		{
          t= t_div[time_base.time_d]*1000/50;
		   if(RightScaleSit!=LeftScaleSit)
             t=fabs(RightScaleSit-LeftScaleSit)*t;
		       freq=(float)1000000/(float)t;
			   if(freq>1000){
					 freq/=1000.0;
				     //  tm=(float)t/1000.0
				         mes.Format ("T=%dps freq=%0.2fGhz",t,freq);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
			   }
			   else
			   {
                  tm=(float)t/1000.0;
				     mes.Format ("T=%0.2fns freq=%0.2fMhz",tm,freq);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
			   }

		}

	  }
	else
	 {  
		if(time_base.time_d==0)
			t=10000/50;
		else
         	if(time_base.time_d==1)
	          t=5000/50;

       if(RightScaleSit!=LeftScaleSit)
             t=fabs(RightScaleSit-LeftScaleSit)*t;
	  freq=1000.0/(float)t;
	  tm=(float)t/1000.0;

      mes.Format("T=%0.2fs freq=%0.2fhz",tm,freq);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
			
		}
   return mes;

}


void DisplayWindow::GetFreq(int chx, int *left_sit, int *right_sit)
{
   
    int x1,x2,x3,x4,x5,x6,x7,x8;
    int xi=time_base.memory_offset ;
	x1=x2=x3=x4=x5=x6=x7=x8=0;
	BYTE level,min,max;
	min=255;max=0;
    
	if(chx==0)
	{

		for(; xi<(DISWIDTH+time_base.memory_offset);xi++)
		{  
  
		   	if(cha_addata[xi]<min)
				min=cha_addata[xi];
			if(cha_addata[xi]>max)
				max=cha_addata[xi];
		

		}

level=min+(max-min)/2;
trigger.level=level;
 xi=time_base.memory_offset ;
	for(; xi<(DISWIDTH+time_base.memory_offset);xi++)
	{  
	 if(x1==0)
		{ //if(cha_addata[xi]>(trigger.level-TRIG_OFFSET))
		    if(cha_addata[xi]>(level-TRIG_OFFSET))
			{ x1=xi;
			  continue;
			}
		}
		if(x1>0 && x2==0)
		{
		  // if(cha_addata[xi]>(trigger.level+TRIG_OFFSET))
			if(cha_addata[xi]>(level+TRIG_OFFSET))
		  {  x2=xi;
			  continue;
		   }
			  
		}
///////////////////////////////////////////////////////////////
		if(x2>0 && x3==0)
		{
		  // if(cha_addata[xi]<(trigger.level+TRIG_OFFSET))
			if(cha_addata[xi]<(level+TRIG_OFFSET))
		  { x3=xi;
		     continue;
			}
		}
	if(x3>0 && x4==0)
		{
		  // if(cha_addata[xi]<(trigger.level-TRIG_OFFSET))
		if(cha_addata[xi]<(level-TRIG_OFFSET))
		  { x4=xi;
		     continue;
			}
		}
  ///////////////////////////////////////////////////////////
		if(x4>0 && x5==0)
		{
		  // if(cha_addata[xi]>(trigger.level-TRIG_OFFSET))
			if(cha_addata[xi]>(level-TRIG_OFFSET))
		  { x5=xi;
		     continue;
			}
		}

	if(x5>0 && x6==0)
		{
		 // if(cha_addata[xi]>(trigger.level+TRIG_OFFSET))
		 if(cha_addata[xi]>(level+TRIG_OFFSET))
		  { x6=xi;

		     continue;
			}
		}
///////////////////////////////////////////////
	if(x6>0 && x7==0)
		{
		  // if(cha_addata[xi]<(trigger.level+TRIG_OFFSET))
		if(cha_addata[xi]<(level+TRIG_OFFSET))
		  { x7=xi;
		     continue;
			}
		}
	if(x7>0 && x8==0)
		{
		  // if(cha_addata[xi]<(trigger.level-TRIG_OFFSET))
		if(cha_addata[xi]<(level-TRIG_OFFSET))
		  { x8=xi;
		     break;
			}
		}

	}
	} else
	{
   
	for(; xi<(DISWIDTH+time_base.memory_offset);xi++)
	{ if(x1==0)
		{ //if(cha_addata[xi]>(trigger.level-TRIG_OFFSET))
		  if(cha_addata[xi]>(level-TRIG_OFFSET))
			{ x1=xi;
			  continue;
			}
		}
		if(x1>0 && x2==0)
		{
		  // if(cha_addata[xi]>(trigger.level+TRIG_OFFSET))
			if(cha_addata[xi]>(level+TRIG_OFFSET))
		  {  x2=xi;
			  continue;
		   }
			  
		}
///////////////////////////////////////////////////////////////
		if(x2>0 && x3==0)
		{
		   //if(cha_addata[xi]<(trigger.level+TRIG_OFFSET))
			if(cha_addata[xi]<(level+TRIG_OFFSET))
		  { x3=xi;
		     continue;
			}
		}
	if(x3>0 && x4==0)
		{
		 //  if(cha_addata[xi]<(trigger.level-TRIG_OFFSET))
		if(cha_addata[xi]<(level-TRIG_OFFSET))
		  { x4=xi;
		     continue;
			}
		}
  ///////////////////////////////////////////////////////////
		if(x4>0 && x5==0)
		{
		   //if(cha_addata[xi]>(trigger.level-TRIG_OFFSET))
           if(cha_addata[xi]>(level-TRIG_OFFSET))
		  { x5=xi;
		     continue;
			}
		}

	if(x5>0 && x6==0)
		{
		   //if(cha_addata[xi]>(trigger.level+TRIG_OFFSET))
		if(cha_addata[xi]>(level+TRIG_OFFSET))
		  { x6=xi;
		     continue;
			}
		}
///////////////////////////////////////////////
	if(x6>0 && x7==0)

⌨️ 快捷键说明

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