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