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