📄 ez811_dk.c
字号:
FLOAT delaystart;
char tempbuff[256];
BOOLEAN bUpdateDevAuto = TRUE;
HWND hDevInfo = NULL;
WPARAM MywParam = 0;
UINT iLbSel = 0;
UINT RetVal = 0;
int ScanVal;
UINT inEP;
UINT inAddr;
WORD maxSize;
WORD reqSize;
char str[5][256];
LPARAM tempParam;
// Get a handle to the output box
hDataBox = GetDlgItem (hDlg, IDC_DATA_BOX);
hStatusBox = GetDlgItem (hDlg, IDC_STATUS_BOX);
hInfoBox = GetDlgItem (hDlg, IDC_INFO_BOX);
hDevInfo = GetDlgItem (hDlg, IDC_INFO_BOX);
switch(message)
{
case WM_LBUTTONDOWN:
break;
case WM_INITDIALOG:
SetDlgItemInt (hDlg,IDC_USB_ADDRESS,2,FALSE);
SetDlgItemInt (hDlg,IDC_ENDPOINT_ADDR,1,FALSE);
SetDlgItemInt (hDlg,IDC_DATA_SIZE,8,FALSE);
SetDlgItemText (hDlg, IDC_FILE_OUT, "C:\\CYPRESS\\USB\\Util\\Test\\512_Count.hex");
SetDlgItemText (hDlg, IDC_SAVE_OUT_FILE, "C:\\CYPRESS\\USB\\Util\\Test\\EZ811_Out.txt");
CheckDlgButton(hDlg,IDC_IN,BST_CHECKED);
CheckDlgButton(hDlg,IDC_INT_XFER,BST_CHECKED);
CheckDlgButton(hDlg,IDC_REPEAT,BST_UNCHECKED);
EzSendMessage(hStatusBox, LB_ADDSTRING, 0, (LPARAM)" ");
EzSendMessage(hStatusBox, LB_ADDSTRING, 0, (LPARAM)" ");
EzSendMessage(hStatusBox, LB_ADDSTRING, 0, (LPARAM)ABOUT_BOX_STR_0);
EzSendMessage(hStatusBox, LB_ADDSTRING, 0, (LPARAM)ABOUT_BOX_STR_1);
sprintf(tempbuff," Built %s %s", build_time, build_date);
EzSendMessage(hStatusBox, LB_ADDSTRING, 0, (LPARAM)tempbuff);
////////////////////////////////////////////////////////////////////////////////
// get handles to the device
////////////////////////////////////////////////////////////////////////////////
if (bOpenDriver (&hDevice, pcDriverName) != TRUE)
{
MessageBox(hDlg, "Please plug in development board,\nload firmware, and restart.",
"EZ-811 Development Board Not Found",MB_ICONSTOP);
exit(1);
}
CloseHandle (hDevice);
Get_EZUSB_Device_Info(hDevice, hDlg);
if (pInterface->NumberOfPipes != 5)
{ // wrong firmware loaded
MessageBox(hDlg, "Please load firmware and restart.",
"EZ-811 ezhost Firmware not loaded",MB_ICONSTOP);
exit(1);
}
CheckDlgButton(hDlg,IDC_UPDATE_DEVS_AUTO, BST_CHECKED); // Update Dev is ON by default
_beginthread(RefreshThread,0,hDlg);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_INFO_BOX:
tempParam = lParam;
if(HIWORD(wParam) != 0x01)
break;
iLbSel = SendMessage(hDevInfo, LB_GETCURSEL, 0, 0);
if(iLbSel != -1)
{
RetVal = SendMessage(hDevInfo, LB_GETTEXT, iLbSel, (LPARAM)temp1);
ScanVal = sscanf(temp1, "%s %s %d %s %d %s %s %d",
&str[0], &str[1], &inAddr, &str[2], &inEP, &str[3], &str[4], &maxSize);
if((ScanVal == 8)&&(inAddr <= MAX_ADDR)&&(inEP <= MAX_EP))
{
SetDlgItemInt (hDlg,IDC_USB_ADDRESS,inAddr,FALSE);
SetDlgItemInt (hDlg,IDC_ENDPOINT_ADDR,inEP,FALSE);
reqSize = GetDlgItemInt (hDlg, IDC_DATA_SIZE, NULL, FALSE);
//if(maxSize < reqSize)
SetDlgItemInt (hDlg,IDC_DATA_SIZE,maxSize,FALSE);
if(!strcmp(str[3], "IN"))
{
CheckDlgButton(hDlg,IDC_IN,BST_CHECKED);
CheckDlgButton(hDlg,IDC_OUT,BST_UNCHECKED);
}
else
{
CheckDlgButton(hDlg,IDC_IN,BST_UNCHECKED);
CheckDlgButton(hDlg,IDC_OUT,BST_CHECKED);
}
if(!strcmp(str[4], "INT"))
{
CheckDlgButton(hDlg,IDC_INT_XFER,BST_CHECKED);
CheckDlgButton(hDlg,IDC_BULK_XFER,BST_UNCHECKED);
}
else
{
CheckDlgButton(hDlg,IDC_INT_XFER,BST_UNCHECKED);
CheckDlgButton(hDlg,IDC_BULK_XFER,BST_CHECKED);
}
}
}
break;
//----------------------------------------------------------------------------
// Built Information
//----------------------------------------------------------------------------
case IDC_ABOUT:
EzSendMessage(hStatusBox, LB_RESETCONTENT, 0, 0);
EzSendMessage(hStatusBox, LB_ADDSTRING, 0, (LPARAM)" ");
EzSendMessage(hStatusBox, LB_ADDSTRING, 0, (LPARAM)" ");
EzSendMessage(hStatusBox, LB_ADDSTRING, 0, (LPARAM)ABOUT_BOX_STR_0);
EzSendMessage(hStatusBox, LB_ADDSTRING, 0, (LPARAM)ABOUT_BOX_STR_1);
sprintf(tempbuff," Built %s %s", build_time, build_date);
EzSendMessage(hStatusBox, LB_ADDSTRING, 0, (LPARAM)tempbuff);
break;
//----------------------------------------------------------------------------
// Exit windows
//----------------------------------------------------------------------------
case IDCANCEL:
case IDC_QUIT:
if(IsDlgButtonChecked(hDlg,IDC_REPEAT)==BST_CHECKED)
{
MessageBox(hDlg, "Stop repeat transfer before quitting","Error",MB_ICONSTOP);
break;
}
if(nOpsPending)
{
MessageBox(hDlg, "Operations are pending: Please disconnect the EZ-USB development board before pressing OK.","Error",MB_ICONSTOP);
}
bRefreshThread = FALSE;
delaystart = (FLOAT)GetTickCount();
while(GetTickCount()-delaystart < 5);
AbortRefresh(hDlg, hDevice);
delaystart = (FLOAT)GetTickCount();
while(GetTickCount()-delaystart < 500);
EndDialog(hDlg,0);
break;
//----------------------------------------------------------------------------
// Clear "USB Data Transfer" & "Descriptor" Windows
//----------------------------------------------------------------------------
case IDC_CLEAR:
EzSendMessage (hDataBox, LB_RESETCONTENT, 0, 0);
EzSendMessage (hStatusBox, LB_RESETCONTENT, 0, 0);
break;
//----------------------------------------------------------------------------
// Additional buttons
//----------------------------------------------------------------------------
case IDC_UPDATE_DEVS_AUTO:
pTh = (CThreadInfo *)malloc(sizeof(CThreadInfo));
pTh->VenReq.request = SL_TOGGLE_DS_REFRESH;
pTh->length = 1;
_beginthread(Vend_CmdXfer,0,pTh);
break;
case IDC_RESET_EZ811:
pTh = (CThreadInfo *)malloc(sizeof(CThreadInfo));
pTh->VenReq.request = SL_RESET;
pTh->length = 1;
CheckDlgButton(hDlg,IDC_UPDATE_DEVS_AUTO, BST_CHECKED);
CheckDlgButton(hDlg,IDC_REPEAT,BST_UNCHECKED);
_beginthread(Vend_CmdXfer,0,pTh);
break;
case IDC_SHOW_REGS:
pTh = (CThreadInfo *)malloc(sizeof(CThreadInfo));
EzSendMessage(hStatusBox, LB_RESETCONTENT, 0, 0);
sprintf(tempbuff,"Show Regs:");
EzSendMessage(hStatusBox, LB_ADDSTRING, 0, (LPARAM)tempbuff);
pTh->VenReq.request = SL_SHOW_REGS;
pTh->VenReq.direction = 0x01;
pTh->strpcDriverName = pcDriverName;
pTh->hOutputBox = hDataBox;
pTh->hStatusBox = hStatusBox;
pTh->hDlg = hDlg;
pTh->length = 0x10;
_beginthread(Vend_CmdXfer,0,pTh);
break;
case IDC_SAVE_OUTPUT:
GetDlgItemText (hDlg, IDC_SAVE_OUT_FILE, strFileOut, 256);
OnOutputSave(hDlg, hDataBox, strFileOut);
break;
case IDC_FILE_XFER:
GetDlgItemText (hDlg, IDC_FILE_OUT, strFileOut, 256);
OnFileTrans(hDlg, strFileOut);
//break; // "fall through" this case to do a transfer
case IDC_REPEAT:
//break; // "fall through" this case to do a transfer
case IDC_SNGL_XFER:
if(!GetUsbAddress(hDlg)) break; // Get USB Address
if(!GetEndpointNum(hDlg)) break; // Get endpoint number
if(!GetDataSize(hDlg)) break; // Get data length
if(ezADDR==1 && HUB) // if requested address is a HUB
{
EzSendMessage (hStatusBox, LB_RESETCONTENT, 0, 0);
EzSendMessage (hStatusBox, LB_ADDSTRING, 0, (LPARAM)"USB address is a HUB device");
break;
}
if(IsDlgButtonChecked(hDlg,IDC_BULK_XFER)==BST_CHECKED)
ezTYPE = BULK;
else if(IsDlgButtonChecked(hDlg,IDC_ISO_XFER)==BST_CHECKED)
ezTYPE = ISOCHRONOUS;
else if(IsDlgButtonChecked(hDlg,IDC_INT_XFER)==BST_CHECKED)
ezTYPE = INTERRUPT; // For interrupt trasnfer
if(IsDlgButtonChecked(hDlg,IDC_REPEAT)==BST_CHECKED)
ezREPEAT = 1;
pTh = (CThreadInfo *)malloc(sizeof(CThreadInfo));
pTh->VenReq.request = SL_DATA_XFER_START;
pTh->VenReq.value = ezADDR;
pTh->VenReq.index = ezENP;
pTh->VenReq.direction = IS_IN_EP(ezENP);
pTh->strpcDriverName = pcDriverName;
pTh->hOutputBox = hDataBox;
pTh->hDlg = hDlg;
pTh->length = ezLEN;
if(LOWORD(wParam) == IDC_FILE_XFER)
pTh->fileXfer = 1;
else
pTh->fileXfer = 0;
if(LOWORD(wParam) != IDC_REPEAT)
CheckDlgButton(hDlg,IDC_REPEAT,BST_UNCHECKED);
_beginthread(Vend_CmdXfer,0,pTh);
break;
case IDC_REFRESH:
EzSendMessage (hInfoBox, LB_RESETCONTENT, 0, 0);
pTh = (CThreadInfo *)malloc(sizeof(CThreadInfo));
pTh->VenReq.request = SL_REFRESH;
pTh->VenReq.direction = 0x01;
pTh->strpcDriverName = pcDriverName;
pTh->hInfoBox = hInfoBox;
pTh->hDlg = hDlg;
pTh->length = VEN_BUFF_SIZE;
_beginthread(Vend_CmdXfer,0,pTh);
break;
//----------------------------------------------------------------------------
// USB Data Transfer Control
//----------------------------------------------------------------------------
case IDC_INT_XFER:
break;
case IDC_BULK_XFER:
break;
case IDC_ISO_XFER:
break;
//----------------------------------------------------------------------------
// Get Descriptors
//----------------------------------------------------------------------------
case IDC_DEV_DESCP:
case IDC_CFG_DESCP:
case IDC_CLASS_DESCP:
case IDC_STR_DESCP:
CheckDlgButton(hDlg,IDC_REPEAT,BST_UNCHECKED);
if(!GetUsbAddress(hDlg)) break; // Get USB Address
pTh = (CThreadInfo *)malloc(sizeof(CThreadInfo));
if(LOWORD(wParam) == IDC_DEV_DESCP)
{
EzSendMessage(hStatusBox, LB_RESETCONTENT, 0, 0);
sprintf(tempbuff,"Get Device Descriptor:");
EzSendMessage(hStatusBox, LB_ADDSTRING, 0, (LPARAM)tempbuff);
pTh->VenReq.request = SL_DEVICE_DESCP;
}
if(LOWORD(wParam) == IDC_CFG_DESCP)
{
EzSendMessage(hStatusBox, LB_RESETCONTENT, 0, 0);
sprintf(tempbuff,"Get Config Descriptor:");
EzSendMessage(hStatusBox, LB_ADDSTRING, 0, (LPARAM)tempbuff);
pTh->VenReq.request = SL_CONFIG_DESCP;
}
if(LOWORD(wParam) == IDC_CLASS_DESCP)
{
EzSendMessage(hStatusBox, LB_RESETCONTENT, 0, 0);
sprintf(tempbuff,"Get Class Descriptor:");
EzSendMessage(hStatusBox, LB_ADDSTRING, 0, (LPARAM)tempbuff);
pTh->VenReq.request = SL_CLASS_DESCP;
}
if(LOWORD(wParam) == IDC_STR_DESCP)
{
EzSendMessage(hStatusBox, LB_RESETCONTENT, 0, 0);
sprintf(tempbuff,"Get String Descriptor:");
EzSendMessage(hStatusBox, LB_ADDSTRING, 0, (LPARAM)tempbuff);
pTh->VenReq.request = SL_STRING_DESCP;
}
pTh->VenReq.value = ezADDR;
pTh->VenReq.direction = 0x01;
pTh->strpcDriverName = pcDriverName;
pTh->hOutputBox = hDataBox;
pTh->hStatusBox = hStatusBox;
pTh->hDlg = hDlg;
pTh->length = VEN_BUFF_SIZE;
_beginthread(Vend_CmdXfer,0,pTh);
break;
} /*end switch wParam*/
break;
} /*end switch message*/
return FALSE;
} /*end MainDlgProc*/
//**********************************************************************************
// Check USB address entry
//**********************************************************************************
BOOL GetUsbAddress(HWND hDlg)
{
HWND hStatusBox = NULL;
hStatusBox = GetDlgItem (hDlg, IDC_STATUS_BOX);
ezADDR = GetDlgItemInt (hDlg, IDC_USB_ADDRESS, NULL, FALSE);
if( ezADDR>=1 && ezADDR<=5)
return TRUE;
else
{
EzSendMessage (hStatusBox, LB_RESETCONTENT, 0, 0);
EzSendMessage (hStatusBox, LB_ADDSTRING, 0, (LPARAM)"USB address must be from 1~5");
return FALSE;
}
}
//**********************************************************************************
// Check Endpoint Number entry
//**********************************************************************************
BOOL GetEndpointNum(HWND hDlg)
{
ezENP = GetDlgItemInt (hDlg, IDC_ENDPOINT_ADDR, NULL, FALSE);
if(IsDlgButtonChecked(hDlg,IDC_IN)==BST_CHECKED)
ezENP |= 0x80;
else if(IsDlgButtonChecked(hDlg,IDC_OUT)==BST_CHECKED)
ezENP &= ~0x80;
return TRUE;
}
//**********************************************************************************
// Check data size entry
//**********************************************************************************
///*
BOOL GetDataSize(HWND hDlg)
{
ezLEN = GetDlgItemInt (hDlg, IDC_DATA_SIZE, NULL, FALSE);
if(ezLEN==0)
{
MessageBox(hDlg, "Data size must be non-zero","Error",MB_ICONSTOP);
return FALSE;
}
else if(ezLEN>MAX_EP0_PAYLOAD)
{
MessageBox(hDlg, "Data Transfers are limited to 64 bytes","Error",MB_ICONSTOP);
ezLEN = MAX_EP0_PAYLOAD;
SetDlgItemInt (hDlg,IDC_DATA_SIZE,ezLEN,FALSE);
return TRUE;
}
else
return TRUE;
}
//*/
//**********************************************************************************
// bOpenDriver proc
//**********************************************************************************
BOOLEAN bOpenDriver (HANDLE * phDeviceHandle, PCHAR devname)
{
char completeDeviceName[64] = "";
char pcMsg[64] = "";
strcat (completeDeviceName,
"\\\\.\\"
);
strcat (completeDeviceName,
devname
);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -