📄 displayview.cpp
字号:
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 + -