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

📄 ez811_dk.c

📁 This is cypress sl811 driver. I think it is very useful. Thankyou.
💻 C
📖 第 1 页 / 共 3 页
字号:
	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 + -