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

📄 ezmain.cpp

📁 FX2 68013的控制面板源程序
💻 CPP
📖 第 1 页 / 共 4 页
字号:
						(unsigned long *)&nBytes,
						NULL);
				}/* if valid driver handle */
				
				CloseHandle (hDevice); // Close the handle
			}
			break;
			
		case IDC_ABORTPIPE:
			{
				char                   temp[64]  = "";
				ULONG pipenum;
				
				MAINTAIN_OUTPUT_BOX (hOutputBox, nItems);
				
				// Open the driver
				if (bOpenDriver (&hDevice, pcDriverName) != TRUE)
				{
					EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)"Failed to Open Driver");
					hDevice = NULL;
				}
				
#ifdef USING_MFC
				pipenum = pTh->pipeNum;
				wsprintf (temp, "Abort Pipe: Pipe=%x", pipenum);
				EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)temp);
#else
				pipenum = GetDlgItemInt (hDlg, IDC_RESETPIPENUM, NULL, FALSE);
#endif
				
				if (hDevice != NULL) 
				{
					bResult = DeviceIoControl (hDevice,
						IOCTL_Ezusb_ABORTPIPE,
						&pipenum,
						sizeof(ULONG),
						NULL,
						0,
						(unsigned long *)&nBytes,
						NULL);
				}/* if valid driver handle */
				
				CloseHandle (hDevice); // Close the handle
			}
			break;
			
		case IDC_SETINTERFACE:
			{
				char                   temp[64]  = "";
				SET_INTERFACE_IN input;
				
				MAINTAIN_OUTPUT_BOX (hOutputBox, nItems);
				
				// Open the driver
				if (bOpenDriver (&hDevice, pcDriverName) != TRUE)
				{
					EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)"Failed to Open Driver");
					hDevice = NULL;
				}
				
#ifdef USING_MFC
				input.interfaceNum = pTh->interfaceNum;
				input.alternateSetting = pTh->alternateSetting;
				wsprintf (temp, "Set Interface: Interface=%x: Alt Setting=%x", 
					input.interfaceNum, input.alternateSetting);
				EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)temp);
#else
				input.interfaceNum = GetDlgItemInt (hDlg, IDC_INTERFACENUM, NULL, FALSE);
				input.alternateSetting = GetDlgItemInt (hDlg, IDC_ALTERNATESETTING, NULL, FALSE);
#endif
				if (hDevice != NULL) 
				{
					bResult = DeviceIoControl (hDevice,
						IOCTL_Ezusb_SETINTERFACE,
						&input,
						sizeof(SET_INTERFACE_IN),
						NULL,
						0,
						(unsigned long *)&nBytes,
						NULL);
					
				}/* if valid driver handle */
				
				CloseHandle (hDevice); // Close the handle
			}
			break;
			
		case IDC_GET_LAST_ERROR:
			{
				ULONG urbStatus = 0;
				
				MAINTAIN_OUTPUT_BOX (hOutputBox, nItems);
				
				// Open the driver
				if (bOpenDriver (&hDevice, pcDriverName) != TRUE) 
				{
					EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)"Failed to Open Driver");
					hDevice = NULL;
				}
				
				if (hDevice != NULL) 
				{// Perform the IOCTL
					bResult = DeviceIoControl (hDevice,
						IOCTL_EZUSB_GET_LAST_ERROR,
						NULL,
						0,
						&urbStatus,
						sizeof(ULONG),
						(unsigned long *)&nBytes,
						NULL);
				}/* if valid driver handle */
				
				if (bResult==TRUE)
				{
					char                   temp2[64]  = "";
					GetURBErrString(urbStatus, temp2); // get the string if it is known
					char                   temp[64]  = "";
					wsprintf (temp, "Last URB Error = 0x%x%s", urbStatus, temp2);
					EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)temp);
				}
				else
					EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)"Get Last Error Failed");
				
				CloseHandle (hDevice); // Close the handle
			}
			break;
			
		case IDC_GET_CURRENT_FRAME:
			{
				char                   temp[64]  = "";
				ULONG frameNum = 0;
				
				MAINTAIN_OUTPUT_BOX (hOutputBox, nItems);
				
				// Open the driver
				if (bOpenDriver (&hDevice, pcDriverName) != TRUE) 
				{
					EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)"Failed to Open Driver");
					hDevice = NULL;
				}
				
				if (hDevice != NULL) 
				{
					bResult = DeviceIoControl (hDevice,
						IOCTL_EZUSB_GET_CURRENT_FRAME_NUMBER,
						NULL,
						0,
						&frameNum,
						sizeof(ULONG),
						(unsigned long *)&nBytes,
						NULL);
					
					if (bResult == TRUE) 
					{
						wsprintf (temp, "Current Frame Number: %lu",frameNum);
						EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)temp);
					} 
					else 
					{
						EzSendMessage (hOutputBox, LB_ADDSTRING, 0 , (LPARAM)"GetFrameNum failed");
					}/* else ioctl failed */
					
				}/* if valid driver handle */
				
				CloseHandle (hDevice); // Close the handle
			}
			break;

		case IDC_GETSTRINGDESCRIPTOR:
			// The string descriptor is obtained using two separate calls.  The
			// first call is done to determine the size of the entire string descriptor,
			// and the second call is done with that total size specified.  
			// For more information, please refer to the USB Specification, Chapter 9.
			// Get some memory, plus some guardband area
			char                   temp[64]  = "";
			GET_STRING_DESCRIPTOR_IN input;
			pvBuffer = malloc (sizeof (Usb_String_Descriptor) + 128);
			MAINTAIN_OUTPUT_BOX (hOutputBox, nItems);
			
			// Open the driver
			if (bOpenDriver (&hDevice, pcDriverName) != TRUE)
			{
				EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)"Failed to Open Driver");
				hDevice = NULL;
			}
#ifdef USING_MFC
				input.Index = (UCHAR) pTh->index;
				input.LanguageId = 27; // NOTE: frameworks ignores it anyway
				wsprintf (temp, "GetStringDescripter: Index=%d", input.Index);
				EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)temp);
#endif			
			// Get the first bytes of the descriptor to determine the size of
			// the entire descriptor.
			if (hDevice != NULL) 
			{// Perform the Get-Descriptor IOCTL
				bResult = DeviceIoControl (hDevice,
					IOCTL_Ezusb_GET_STRING_DESCRIPTOR,
					&input,
					sizeof (GET_STRING_DESCRIPTOR_IN),
					pvBuffer,
					sizeof (Usb_String_Descriptor),
					(unsigned long *)&nBytes,
					NULL);
			}/* if valid driver handle */
			
			if (bResult!=TRUE) 
			{// This will happen with no string defined 
				EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)"Get String Descriptor Failed");
				//ShowSystemError(hOutputBox);
				
				CloseHandle (hDevice);
				free (pvBuffer);
				break;
			}/* if */
			
			ulLength = GET_STRING_DESCRIPTOR_LENGTH(pvBuffer);
			assert (ulLength >= 0);
			
			// Now get the entire descriptor
			pvBuffer = realloc (pvBuffer, ulLength);
			
			if (pvBuffer) 
			{
				MAINTAIN_OUTPUT_BOX (hOutputBox, nItems);
				
				// Perform the Get-Descriptor IOCTL
				bResult = DeviceIoControl (hDevice,
					IOCTL_Ezusb_GET_STRING_DESCRIPTOR,
					&input,
					ulLength,
					pvBuffer,
					ulLength,
					(unsigned long *)&nBytes,
					NULL);
				
				if (bResult==TRUE) 
				{
					ParseStringDescriptor(pvBuffer, hOutputBox);
				} 
				else 
				{// Inform user that the Ioctl failed
					EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)"GetStringDescriptor Ioctl failed");
					ShowSystemError(hOutputBox);
				}
			} 
			else 
			{// Inform user that mem alloc failed
				EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)"Memory Allocation failed in GetStringDescriptor");
			}
			
			CloseHandle (hDevice); // Close the handle
			free (pvBuffer); // Free the memory
			break;

		} /*end switch wParam*/
		break;
			
    } /*end switch message*/

#ifdef USING_MFC
    return bResult;
#else
    return FALSE;
#endif

} /*end MainDlgProc*/

// Note: see usbdi.h in the DDK for the USBD_STATUS source definitions
typedef LONG USBD_STATUS;
#define USBD_STATUS(Status) ((ULONG)(Status) & 0x0FFFFFFFL)
#define USBD_STATE(Status) ((ULONG)(Status) & 0xF0000000L)

// HC status codes (Note: both error and stall bit are set)
#define USBD_STATUS_SUCCESS                  ((USBD_STATUS)0x00000000L)
#define USBD_STATUS_PENDING                  ((USBD_STATUS)0x40000000L)
#define USBD_STATUS_HALTED                   ((USBD_STATUS)0xC0000000L)
#define USBD_STATUS_ERROR                    ((USBD_STATUS)0x80000000L)

#define USBD_STATUS_CRC                      ((USBD_STATUS)0xC0000001L)
#define USBD_STATUS_BTSTUFF                  ((USBD_STATUS)0xC0000002L)
#define USBD_STATUS_DATA_TOGGLE_MISMATCH     ((USBD_STATUS)0xC0000003L)
#define USBD_STATUS_STALL_PID                ((USBD_STATUS)0xC0000004L)
#define USBD_STATUS_DEV_NOT_RESPONDING       ((USBD_STATUS)0xC0000005L)
#define USBD_STATUS_PID_CHECK_FAILURE        ((USBD_STATUS)0xC0000006L)
#define USBD_STATUS_UNEXPECTED_PID           ((USBD_STATUS)0xC0000007L)
#define USBD_STATUS_DATA_OVERRUN             ((USBD_STATUS)0xC0000008L)
#define USBD_STATUS_DATA_UNDERRUN            ((USBD_STATUS)0xC0000009L)
#define USBD_STATUS_RESERVED1                ((USBD_STATUS)0xC000000AL)
#define USBD_STATUS_RESERVED2                ((USBD_STATUS)0xC000000BL)
#define USBD_STATUS_BUFFER_OVERRUN           ((USBD_STATUS)0xC000000CL)
#define USBD_STATUS_BUFFER_UNDERRUN          ((USBD_STATUS)0xC000000DL)
#define USBD_STATUS_NOT_ACCESSED             ((USBD_STATUS)0xC000000FL)
#define USBD_STATUS_FIFO                     ((USBD_STATUS)0xC0000010L)

#define USBD_STATUS_ENDPOINT_HALTED          ((USBD_STATUS)0xC0000030L)
#define USBD_STATUS_NO_MEMORY                ((USBD_STATUS)0x80000100L)
#define USBD_STATUS_INVALID_URB_FUNCTION     ((USBD_STATUS)0x80000200L)
#define USBD_STATUS_INVALID_PARAMETER        ((USBD_STATUS)0x80000300L)
#define USBD_STATUS_ERROR_BUSY               ((USBD_STATUS)0x80000400L)
#define USBD_STATUS_REQUEST_FAILED           ((USBD_STATUS)0x80000500L)
#define USBD_STATUS_INVALID_PIPE_HANDLE      ((USBD_STATUS)0x80000600L)
#define USBD_STATUS_NO_BANDWIDTH             ((USBD_STATUS)0x80000700L)
#define USBD_STATUS_INTERNAL_HC_ERROR        ((USBD_STATUS)0x80000800L)
#define USBD_STATUS_ERROR_SHORT_TRANSFER     ((USBD_STATUS)0x80000900L)
#define USBD_STATUS_BAD_START_FRAME          ((USBD_STATUS)0xC0000A00L)
#define USBD_STATUS_ISOCH_REQUEST_FAILED     ((USBD_STATUS)0xC0000B00L)
#define USBD_STATUS_FRAME_CONTROL_OWNED      ((USBD_STATUS)0xC0000C00L)
#define USBD_STATUS_FRAME_CONTROL_NOT_OWNED  ((USBD_STATUS)0xC0000D00L)
#define USBD_STATUS_CANCELED                 ((USBD_STATUS)0x00010000L)
#define USBD_STATUS_CANCELING                ((USBD_STATUS)0x00020000L)


void
GetURBErrString(ULONG urbStatus, char* pStr)
{	
	char text[80];

	if(!USBD_STATUS(urbStatus))
	{
		wsprintf (pStr, " [state=SUCCESS status=USBD_STATUS_SUCCESS]", text);
		return;
	}

	switch(USBD_STATE(urbStatus))
	{
	case USBD_STATUS_SUCCESS:	wsprintf (text, " [state=SUCCESS " ); break;
	case USBD_STATUS_PENDING:	wsprintf (text, " [state=PENDING " ); break;
	case USBD_STATUS_HALTED:	wsprintf (text, " [state=STALLED " ); break;
	case USBD_STATUS_ERROR: 	wsprintf (text, " [state=ERROR   " ); break;
	default: break;
	}

	switch(urbStatus|0xC0000000L) // Note: error typedefs have both error and stall bit set 
	{
	case USBD_STATUS_CRC:				wsprintf (pStr, "%sstatus=USBD_STATUS_CRC]", text); break;
	case USBD_STATUS_BTSTUFF:			wsprintf (pStr, "%sstatus=USBD_STATUS_BTSTUFF]", text); break;
	case USBD_STATUS_DATA_TOGGLE_MISMATCH:	wsprintf (pStr, "%sstatus=USBD_STATUS_DATA_TOGGLE_MISMATCH]", text); break;
	case USBD_STATUS_STALL_PID:			wsprintf (pStr, "%sstatus=USBD_STATUS_STALL_PID]", text); break;
	case USBD_STATUS_DEV_NOT_RESPONDING:wsprintf (pStr, "%sstatus=USBD_STATUS_DEV_NOT_RESPONDING]", text); break;
	case USBD_STATUS_PID_CHECK_FAILURE:	wsprintf (pStr, "%sstatus=USBD_STATUS_PID_CHECK_FAILURE]", text); break;
	case USBD_STATUS_UNEXPECTED_PID:	wsprintf (pStr, "%sstatus=USBD_STATUS_UNEXPECTED_PID]", text); break;
	case USBD_STATUS_DATA_OVERRUN:		wsprintf (pStr, "%sstatus=USBD_STATUS_DATA_OVERRUN]", text); break;
	case USBD_STATUS_DATA_UNDERRUN:		wsprintf (pStr, "%sstatus=USBD_STATUS_DATA_UNDERRUN]", text); break;
	case USBD_STATUS_RESERVED1:			wsprintf (pStr, "%sstatus=USBD_STATUS_RESERVED1]", text); break;
	case USBD_STATUS_RESERVED2:			wsprintf (pStr, "%sstatus=USBD_STATUS_RESERVED2]", text); break;
	case USBD_STATUS_BUFFER_OVERRUN:	wsprintf (pStr, "%sstatus=USBD_STATUS_BUFFER_OVERRUN]", text); break;
	case USBD_STATUS_BUFFER_UNDERRUN:	wsprintf (pStr, "%sstatus=USBD_STATUS_BUFFER_UNDERRUN]", text); break;
	case USBD_STATUS_NOT_ACCESSED:		wsprintf (pStr, "%sstatus=USBD_STATUS_NOT_ACCESSED]", text); break;
	case USBD_STATUS_FIFO:				wsprintf (pStr, "%sstatus=USBD_STATUS_FIFO]", text); break;

	case USBD_STATUS_ENDPOINT_HALTED:	wsprintf (pStr, "%sstatus=USBD_STATUS_ENDPOINT_HALTED]", text); break;
	case USBD_STATUS_NO_MEMORY:			wsprintf (pStr, "%sstatus=USBD_STATUS_NO_MEMORY]", text); break;
	case USBD_STATUS_INVALID_URB_FUNCTION:	wsprintf (pStr, "%sstatus=USBD_STATUS_INVALID_URB_FUNCTION]", text); break;
	case USBD_STATUS_INVALID_PARAMETER:	wsprintf (pStr, "%sstatus=USBD_STATUS_INVALID_PARAMETER]", text); break;
	case USBD_STATUS_ERROR_BUSY:		wsprintf (pStr, "%sstatus=USBD_STATUS_ERROR_BUSY]", text); break;
	case USBD_STATUS_REQUEST_FAILED:	wsprintf (pStr, "%sstatus=USBD_STATUS_REQUEST_FAILED]", text); break;
	case USBD_STATUS_INVALID_PIPE_HANDLE:	wsprintf (pStr, "%sstatus=USBD_STATUS_INVALID_PIPE_HANDLE]", text); break;
	case USBD_STATUS_NO_BANDWIDTH:		wsprintf (pStr, "%sstatus=USBD_STATUS_NO_BANDWIDTH]", text); break;
	case USBD_STATUS_INTERNAL_HC_ERROR:	wsprintf (pStr, "%sstatus=USBD_STATUS_INTERNAL_HC_ERROR]", text); break;
	case USBD_STATUS_ERROR_SHORT_TRANSFER:	wsprintf (pStr, "%sstatus=USBD_STATUS_ERROR_SHORT_TRANSFER]", text); break;
	case USBD_STATUS_BAD_START_FRAME:	wsprintf (pStr, "%sstatus=USBD_STATUS_BAD_START_FRAME]", text); break;
	case USBD_STATUS_ISOCH_REQUEST_FAILED:	wsprintf (pStr, "%sstatus=USBD_STATUS_ISOCH_REQUEST_FAILED]", text); break;
	case USBD_STATUS_FRAME_CONTROL_OWNED:	wsprintf (pStr, "%sstatus=USBD_STATUS_FRAME_CONTROL_OWNED]", text); break;
	case USBD_STATUS_FRAME_CONTROL_NOT_OWNED:wsprintf (pStr, "%sstatus=USBD_STATUS_FRAME_CONTROL_NOT_OWNED]", text); break;
	case USBD_STATUS_CANCELED:			wsprintf (pStr, "%sstatus=USBD_STATUS_CANCELED]", text); break;
	case USBD_STATUS_CANCELING:			wsprintf (pStr, "%sstatus=USBD_STATUS_CANCELING]", text); break;

	default: wsprintf (pStr, "%sstatus=UNKNOWN]", text); break;
	}
}

#define BYTES_PER_LINE 0x10

void
DumpBuffer(PVOID pvBuffer, ULONG length, CString& hOutputBox)
{
    int                    nItems    = 0;
    char                   temp[64]  = "";
    char                   temp2[64]  = "";
	ULONG	i;
	ULONG   j;
	PUCHAR	ptr;

	if(length>MAX_FILE_SIZE)
	{
		EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)"Buffer Contents not printed due to large size ...");
	}
    MAINTAIN_OUTPUT_BOX (hOutputBox, nItems);

	ptr = (PUCHAR) pvBuffer;

	for (i = 0; i < ((length + BYTES_PER_LINE - 1) / BYTES_PER_LINE); i++)
	{
		wsprintf(temp,"%04X ",(i*BYTES_PER_LINE));
		for (j = 0; j < BYTES_PER_LINE; j++)
		{
			if (((i * BYTES_PER_LINE) + j) < length)
			{
				wsprintf(temp2,"%02X ",*ptr++);
				strcat(temp,temp2);
			}
		}
	    EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)temp);
	}
}

/**************************************************
 * bOpenDriver proc                               *
 *                                                *
 * Purpose:                                       *  
 *      Opens the device driver using symbolic    *
 *      name provided                             *
 *                                                *
 * Input:                                         *
 *      phDeviceHandle:                           *
 *          Pointer to Device Driver handle where *
 *          the file handle is placed.            *
 *      devname:                                  *
 *          Null terminated string containing the *
 *          device name                           *
 *                                                *
 * Return Value:                                  *
 *      Boolean that indicates if the driver was  *
 *      successfully opened or not.               *
 *                                                *
 **************************************************/

BOOLEAN
bOpenDriver (HANDLE * phDeviceHandle, PCHAR devname)
{
    char completeDeviceName[64] = "";
    char pcMsg[64] = "";

    strcat (completeDeviceName,
            "\\\\.\\"
            );

    strcat (completeDeviceName,
		    devname
		    );

    *phDeviceHandle = CreateFile(   completeDeviceName,
		                            GENERIC_WRITE,
		                            FILE_SHARE_WRITE,
		                            NULL,
		                            OPEN_EXISTING,
		                            0,
		                            NULL);

    if (*phDeviceHandle == INVALID_HANDLE_VALUE) {
        return (FALSE);
    } else {
        return (TRUE);
    } /*else*/


}//OpenDevice

⌨️ 快捷键说明

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