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

📄 displayview.cpp

📁 USB HID 设备数据采集程序 HID外设使用的MC68HC908JB8ADW单片机
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	isZoom=!isZoom;
	m_DisplayWnd.isZoom=isZoom;
}

void DisplayView::OnUpdateZoom(CCmdUI* pCmdUI) 
{
	
    pCmdUI->SetCheck(isZoom);	
}

void DisplayView::OnRectanglesel() 
{
	isZoom=false;
	isRectangleSel=!isRectangleSel; 
	m_DisplayWnd.isRectangleSel=isRectangleSel;
	
}

void DisplayView::OnUpdateRectanglesel(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(isRectangleSel);
	
}

BOOL DisplayView::Search_HidDev()
{
    GUID hidGuid;

    HidD_GetHidGuid(&hidGuid);

    HDEVINFO hDevInfo = SetupDiGetClassDevs(&hidGuid,
                                            NULL,
                                            NULL,
                                            (DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)); 
    if(!hDevInfo)
    {
     //  MessageBox("获取HID设备信息失败!");
        return 0;
    }

    SP_DEVICE_INTERFACE_DATA devInfoData;
    devInfoData.cbSize = sizeof (SP_DEVICE_INTERFACE_DATA);
    int deviceNo = 0;

    SetLastError(NO_ERROR);

    while(GetLastError() != ERROR_NO_MORE_ITEMS)
    {
        if(SetupDiEnumInterfaceDevice (hDevInfo,
                                       0, 
                                       &hidGuid,
                                       deviceNo,
                                       &devInfoData))
        {
            ULONG  requiredLength = 0;
            SetupDiGetInterfaceDeviceDetail(hDevInfo,
                                            &devInfoData,
                                            NULL, 
                                            0,
                                            &requiredLength,
                                            NULL);

            PSP_INTERFACE_DEVICE_DETAIL_DATA devDetail = (SP_INTERFACE_DEVICE_DETAIL_DATA*) malloc (requiredLength);
            devDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);

            if(! SetupDiGetInterfaceDeviceDetail(hDevInfo,
                                                 &devInfoData,
                                                 devDetail,
                                                 requiredLength,
                                                 NULL,
                                                 NULL)) 
            {
               // MessageBox("获取HID设备细节信息失败!");
                free(devDetail);
                return 0;
            }

            HANDLE hidHandle = CreateFile(devDetail->DevicePath,
                                          GENERIC_READ | GENERIC_WRITE,
                                          FILE_SHARE_READ | FILE_SHARE_WRITE,
                                          NULL, 
                                          OPEN_EXISTING,         
                                          FILE_FLAG_OVERLAPPED, 
                                          NULL);
            free(devDetail);

            if(hidHandle==INVALID_HANDLE_VALUE)
            {
             //   MessageBox("获取HID设备句柄失败!");
                return false;
            }

            _HIDD_ATTRIBUTES hidAttributes;
            if(!HidD_GetAttributes(hidHandle, &hidAttributes))
            {
              //  MessageBox("获取HID设备属性失败!");
                CloseHandle(hidHandle);
                return 0;
            }

            if(USB_VID == hidAttributes.VendorID &&
               USB_PID  == hidAttributes.ProductID /*&&
               USBRS232_VERSION == hidAttributes.VersionNumber*/)

            {
             

                m_HidHandle = hidHandle;

            m_MaxDataLen = MAX_DATA_LEN;
                
                g_KeepGoing = true;
                if(_beginthread(RecvThreadFunction, 0, this) < 0)
                {
                   MessageBox("启动数据接收线程失败!");
				    break;
                }
               break;
            }
            else
            {
                CloseHandle(hidHandle);
                ++deviceNo;
            }
        }
    }

    if(m_HidHandle == INVALID_HANDLE_VALUE)
	g_KeepGoing=false;
      

    SetupDiDestroyDeviceInfoList(hDevInfo);
	return g_KeepGoing;
}
#define PT_W (( DisplayView *)pParam) 
void __cdecl RecvThreadFunction(void * pParam)
{
   // WORD ch1,ch2,ch3;
    DWORD nReadBytes=0;
    CString msg;
    //COMSTAT ComStat;
	DWORD dwError=0;
    HANDLE hIOWaiter = CreateEvent(NULL, TRUE, FALSE, NULL);

    if(hIOWaiter == NULL)
        goto exit2;

    OVERLAPPED ol;
    ol.Offset = 0;
    ol.OffsetHigh = 0;
    ol.hEvent = hIOWaiter;
	//int a,b;
    for(;;)
    {
     
        ResetEvent(hIOWaiter);
        if(!ReadFile(m_HidHandle, recvDataBuf, 8, &nReadBytes, &ol))
        {
	
			dwError = GetLastError();
            if(dwError != ERROR_IO_PENDING && dwError != ERROR_DEVICE_NOT_CONNECTED && g_KeepGoing)
            {
                msg.Format("读操作错误: %d", dwError);
                AfxMessageBox(msg);
                goto exit1;
            }

            while(WaitForSingleObject(hIOWaiter, 100) == WAIT_TIMEOUT)
            {
                if(!g_KeepGoing)
                {
					if(m_HidHandle != INVALID_HANDLE_VALUE) 
                    {
                        CancelIo(m_HidHandle);
                    }
                    goto exit1;
                }
            }

            if(!GetOverlappedResult(m_HidHandle, &ol, &nReadBytes, false))
			{ 
				dwError = GetLastError();
				if(dwError != ERROR_DEVICE_NOT_CONNECTED && g_KeepGoing)
				{
					msg.Format("GetOverlappedResult错误: %d", dwError); 
                    AfxMessageBox(msg); 
				}
                continue;
            }
        }

        if(nReadBytes <8)      
        {
            if(g_KeepGoing)
            {
                msg.Format("Only read %d bytes", nReadBytes); 
                AfxMessageBox(msg);
            }
            continue;
        }
      //wsprintf(txt,"0x%02x\r\n",pInputReport[1]);
      // AfxGetMainWnd()->SendMessage(IDM_RECV_DATA, 0, (LPARAM)(txt));
	if(capture_flag)
	{
		
    //AfxGetMainWnd()->PostMessage(WM_MY_USB,NULL,NULL);  
    
   // ch1=ch2=ch3=0;
   // ch1 = recvDataBuf[2]*256+recvDataBuf[3];
//	ch2 = recvDataBuf[4]*256+recvDataBuf[5];
  //  ch3=recvDataBuf[5]*256+recvDataBuf[6];
	PT_W->SendMessage(WM_MY_USB,NULL,NULL);//m_DisplayWnd.AddOneData(ch1,ch2,ch3);
	}
	
}

exit1:
    CloseHandle(hIOWaiter);

exit2:
    _endthread();
}
void DisplayView::OnMyUSBEvent(WPARAM wParam, LPARAM lParam)
{  
	static unsigned int ch1_sum, ch2_sum, ch3_sum, count;
    CString mes;
	WORD ch1, ch2, ch3;
    ch1 = ch2 = ch3 = 0;
    ch1 = recvDataBuf[2] * 256 + recvDataBuf[3];
	ch2 = recvDataBuf[4] * 256 + recvDataBuf[5];
    ch3 = recvDataBuf[6] * 256 + recvDataBuf[7];
    ch1_sum += ch1;
	ch2_sum += ch2;
	ch3_sum += ch3;
	count ++;

	if(count>9){
    m_VoltageRed   = (float)(((ch1_sum / 10) * 4.0) / 1024.0);
    m_VoltageBlue  = (float)(((ch2_sum / 10) * 4.0) / 1024.0);
  //m_VoltageGreen = (float)(((ch3_sum / 10) * 4.0) / 1024.0);
  //mes.Format("%0.4fKP",(10.0*(m_VoltageRed-2.0-0.25))/(1.996-0.25));//m_VoltageRed);
    mes.Format("%0.4fV",m_VoltageBlue);
	m_vltgctrlRed.SetWindowText(mes);

    mes.Format("%0.4fV",m_VoltageRed);
	m_vltgctrlBlue.SetWindowText(mes);

  // mes.Format("%0.4fV",m_VoltageGreen);
  // m_vltgctrlGreen.SetWindowText(mes);

	ch1_sum = 0;
	ch2_sum = 0;
	ch3_sum = 0;
	count=0;
  
	}
	
	m_DisplayWnd.AddOneData(ch1,ch2,ch3);

    //m_usb_data.Format ("%02x %02x %02x %02x %02x %02x %02x %02x ",recvDataBuf[0],recvDataBuf[1],
   //recvDataBuf[2],recvDataBuf[3],recvDataBuf[4],recvDataBuf[5],recvDataBuf[6],recvDataBuf[7]);
 // m_usb_data_ctrl.SetWindowText (m_usb_data);

}





void DisplayView::OnChangeVltgRed() 
{
 //	m_VoltageRed = recvDataBuf[2] * 256 + recvDataBuf[3];
}

void DisplayView::OnChangeVltgBlue() 
{
   // m_VoltageBlue = recvDataBuf[4] * 256 + recvDataBuf[5];
	
}

void DisplayView::OnJk1() 
{
	if(m_HidHandle==INVALID_HANDLE_VALUE)return;

	BYTE *reportBuf=new BYTE[3];
reportBuf[0]=0x03;

	if(m_jk1){m_jk1=false;
	reportBuf[1]=0x01;
    }
	else{m_jk1=true;
	reportBuf[1]=0x02;
	}
	reportBuf[2]=0;

	 long result;
result=HidD_SetFeature(m_HidHandle,reportBuf,m_MaxDataLen+2);
 //  MessageBox("数据发送失败!");
delete reportBuf;
	
}

void DisplayView::OnUpdateJk1(CCmdUI* pCmdUI) 
{
pCmdUI->SetCheck(m_jk1);
	
}

void DisplayView::OnJk2() 
{
	if(m_HidHandle==INVALID_HANDLE_VALUE)return;

	BYTE *reportBuf=new BYTE[3];
reportBuf[0]=0x03;

	if(m_jk2){m_jk2=false;
	reportBuf[1]=0x03;
    }
	else{m_jk2=true;
	reportBuf[1]=0x04;
	}
	reportBuf[2]=0;

	 long result;
result=HidD_SetFeature(m_HidHandle,reportBuf,m_MaxDataLen+2);
 //  MessageBox("数据发送失败!");
delete reportBuf;	
}

void DisplayView::OnUpdateJk2(CCmdUI* pCmdUI) 
{
pCmdUI->SetCheck(m_jk2);
	
}

void DisplayView::OnJk3() 
{
	if(m_HidHandle==INVALID_HANDLE_VALUE)return;

	BYTE *reportBuf=new BYTE[3];
reportBuf[0]=0x03;

	if(m_jk3){m_jk3=false;
	reportBuf[1]=0x05;
    }
	else{m_jk3=true;
	reportBuf[1]=0x06;
	}
	reportBuf[2]=0;

	 long result;
result=HidD_SetFeature(m_HidHandle,reportBuf,m_MaxDataLen+2);
 //  MessageBox("数据发送失败!");
delete reportBuf;		
}

void DisplayView::OnUpdateJk3(CCmdUI* pCmdUI) 
{
pCmdUI->SetCheck(m_jk3);
	
}

void DisplayView::OnJk4() 
{
	if(m_HidHandle==INVALID_HANDLE_VALUE)return;

	BYTE *reportBuf=new BYTE[3];
reportBuf[0]=0x03;

	if(m_jk4){m_jk4=false;
	reportBuf[1]=0x07;
    }
	else{m_jk4=true;
	reportBuf[1]=0x08;
	}
	reportBuf[2]=0;

	 long result;
result=HidD_SetFeature(m_HidHandle,reportBuf,m_MaxDataLen+2);
 //  MessageBox("数据发送失败!");
delete reportBuf;	
	
}

void DisplayView::OnUpdateJk4(CCmdUI* pCmdUI) 
{
pCmdUI->SetCheck(m_jk4);
	
}

void DisplayView::OnJk5() 
{
	if(m_HidHandle==INVALID_HANDLE_VALUE)return;

	BYTE *reportBuf=new BYTE[3];
reportBuf[0]=0x03;

	if(m_jk5){m_jk5=false;
	reportBuf[1]=0x09;
    }
	else{m_jk5=true;
	reportBuf[1]=0x0a;
	}
	reportBuf[2]=0;

	 long result;
result=HidD_SetFeature(m_HidHandle,reportBuf,m_MaxDataLen+2);
 //  MessageBox("数据发送失败!");
delete reportBuf;	
	
}

void DisplayView::OnUpdateJk5(CCmdUI* pCmdUI) 
{
pCmdUI->SetCheck(m_jk5);
	
}

void DisplayView::OnJk6() 
{
	if(m_HidHandle==INVALID_HANDLE_VALUE)return;

	BYTE *reportBuf=new BYTE[3];
reportBuf[0]=0x03;

	if(m_jk6){m_jk6=false;
	reportBuf[1]=0x0b;
    }
	else{m_jk6=true;
	reportBuf[1]=0x0c;
	}
	reportBuf[2]=0;

	 long result;
result=HidD_SetFeature(m_HidHandle,reportBuf,m_MaxDataLen+2);
 //  MessageBox("数据发送失败!");
delete reportBuf;	
	
}

void DisplayView::OnUpdateJk6(CCmdUI* pCmdUI) 
{
pCmdUI->SetCheck(m_jk6);
	
}

void DisplayView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	UpdateData(1);

	CSliderCtrl	*pSlider = (CSliderCtrl *)pScrollBar;
    int pwm; 
	
	//WORD tch0;
    CString mes;
	if(pSlider == &m_motor_ctrl) 
	{
	pwm=pSlider->GetPos ();
    mes.Format("%d%",100-pwm);
	m_vltgctrlGreen.SetWindowText(mes);

    //tch0=pwm*375/100;
   if(m_HidHandle==INVALID_HANDLE_VALUE)return;
	BYTE reportBuf[3];
     reportBuf[0]=0x03;
     reportBuf[1]=BYTE(pwm);
     reportBuf[2]=0;
     
	 long result;
     result=HidD_SetFeature(m_HidHandle,reportBuf,m_MaxDataLen+2);
 //  MessageBox("数据发送失败!");
  //   delete reportBuf;	
	}
	CFormView::OnHScroll(nSBCode, nPos, pScrollBar);
}

⌨️ 快捷键说明

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