📄 usbapp.c
字号:
if (UsbOpenDriver (&hDevice, DeviceName) != TRUE) {
MessageBox(hdlg, "无效设备,请重试!","错误",MB_ICONERROR);
Testing=FALSE;
return;
}
bResult = DeviceIoControl (hDevice,
IOCTL_Ezusb_GET_DEVICE_DESCRIPTOR,
NULL,
0,
&output,
sizeof(USB_DEVICE_DESCRIPTOR),
&nBytes,
NULL);
if (bResult!=TRUE)
MessageBox(hdlg, "读取设备描述符失败!","错误",MB_ICONERROR);
else {
SetDlgItemText (hdlg, IDC_INFORMATION, "测试-设备描述符(Device Descrioptor):");
SendMessage (houtputlist, LB_RESETCONTENT, 0, 0);
SendMessage (htestlist, LB_RESETCONTENT, 0, 0);
sprintf(tempbuff[0],"[0]描述符长度(bLength): 0x%xH",output.bLength);
sprintf(tempbuff[1],"[1]描述符类型(bDescriptorType):0x0%xH",output.bDescriptorType);
sprintf(tempbuff[2],"[2]USB规范发布号(bcdUSB): 0x0%0xH",output.bcdUSB);
sprintf(tempbuff[3],"[4]类代码(bDeviceClass):0x0%xH",output.bDeviceClass);
sprintf(tempbuff[4],"[5]子类代码(bDeviceSubClass):0x0%xH",output.bDeviceSubClass);
sprintf(tempbuff[5],"[6]协议代码(bDeviceProtocol):0x0%xH",output.bDeviceProtocol);
sprintf(tempbuff[6],"[7]端点0最大包大小(bMaxPacketSize0):0x%xH",output.bMaxPacketSize0);
sprintf(tempbuff[7],"[8]销售商ID(idVendor):0x0%xH",output.idVendor);
sprintf(tempbuff[8],"[10]产品ID(idProduct):0x%xH",output.idProduct);
sprintf(tempbuff[9],"[12]设备发布号(bcdDevice):0x0%0xH",output.bcdDevice);
sprintf(tempbuff[10],"[14]制造商描述符(iManufacturer):0x0%xH",output.iManufacturer);
sprintf(tempbuff[11],"[15]产品描述符(iProduct):0x0%xH",output.iProduct);
sprintf(tempbuff[12],"[16]序列号描述符(iSerialNumber):0x0%xH",output.iSerialNumber);
sprintf(tempbuff[13],"[17]可能的配置号码(bNumConfigurations):0x0%xH",output.bNumConfigurations);
for(i=0;i<14;i++)
SendMessage (houtputlist, LB_ADDSTRING, 0, (LPARAM)tempbuff[i]);
}
CloseHandle(hDevice);
Testing=FALSE;
return;
}
}
void GetConfigurationDescriptorTest(HWND hdlg)
{
if (Testing ==TRUE) {
MessageBox(hdlg, "测试中,请先退出当前测试,再读取描述符!","警告",MB_ICONINFORMATION);
return;
}
Testing=TRUE;
{
HANDLE hDevice=NULL;
HWND houtputlist;
HWND htestlist;
BOOL bResult = FALSE;
ULONG nBytes;
char DeviceName[MAX_DEVICE_NAME] = "";
char tempbuff[18][256];
unsigned char output2[200];
int i;
USB_CONFIGURATION_DESCRIPTOR output;
houtputlist = GetDlgItem (hdlg, IDC_OUTPUT_LIST);
htestlist = GetDlgItem (hdlg, IDC_TEST_LIST);
GetDlgItemText (hdlg, IDC_DEVICE_NAME, DeviceName, MAX_DEVICE_NAME);
if (UsbOpenDriver (&hDevice, DeviceName) != TRUE) {
MessageBox(hdlg, "无效设备,请重试!","错误",MB_ICONERROR);
Testing=FALSE;
return;
}
bResult = DeviceIoControl (hDevice,
IOCTL_Ezusb_GET_CONFIGURATION_DESCRIPTOR,
NULL,
0,
&output,
sizeof(USB_CONFIGURATION_DESCRIPTOR),
&nBytes,
NULL);
if (bResult!=TRUE)
MessageBox(hdlg, "读取配置描述符失败!","错误",MB_ICONERROR);
else {
SetDlgItemText (hdlg, IDC_INFORMATION, "测试-配置描述符(ConfigurationDescrioptor):");
SendMessage (houtputlist, LB_RESETCONTENT, 0, 0);
SendMessage (htestlist, LB_RESETCONTENT, 0, 0);
sprintf(tempbuff[0],"[0]描述符长度(bLength): 0x0%xH",output.bLength);
sprintf(tempbuff[1],"[1]描述符类型(bDescriptorType):0x0%xH",output.bDescriptorType);
sprintf(tempbuff[2],"[2]该配置所有数据的大小(wTotalLength): 0x%0xH",output.wTotalLength);
sprintf(tempbuff[3],"[4]该配置支持的接口数(bNumInterfaces):0x0%xH",output.bNumInterfaces);
sprintf(tempbuff[4],"[5]SetGet请求标识(bConfigurationValue):0x0%xH",output.bConfigurationValue);
sprintf(tempbuff[5],"[6]该配置的字符串描述符(iConfiguration):0x0%xH",output.iConfiguration);
sprintf(tempbuff[6],"[7]供电和唤醒设置(bmAttributes):0x%xH",output.bmAttributes);
sprintf(tempbuff[7],"[8]需要的总线电流(MaxPower):0x0%xH",output.MaxPower*2);
sprintf(tempbuff[8],"**在测试框中显示了该配置所有字节的信息**");
for(i=0;i<9;i++)
SendMessage (houtputlist, LB_ADDSTRING, 0, (LPARAM)tempbuff[i]);
bResult = DeviceIoControl (hDevice,
IOCTL_Ezusb_GET_CONFIGURATION_DESCRIPTOR,
NULL,
0,
&output2,
output.wTotalLength,
&nBytes,
NULL);
if (bResult!=TRUE)
MessageBox(hdlg, "读取配置描述符失败!","错误",MB_ICONERROR);
else{
sprintf(tempbuff[0],"");
for (i=0;i<output.wTotalLength;i++) {
sprintf(tempbuff[1],"[%d]%xH ",i,output2[i]);
strcat(tempbuff[0],tempbuff[1]);
if(i%5==0 && i!=0) {
SendMessage (htestlist, LB_ADDSTRING, 0, (LPARAM)tempbuff[0]);
sprintf(tempbuff[0],"");
}
}
}
}
CloseHandle(hDevice);
Testing=FALSE;
return;
}
}
void GetInterfaceDescriptorTest(HWND hdlg)
{
if (Testing ==TRUE) {
MessageBox(hdlg, "测试中,请先退出当前测试,再读取描述符!","警告",MB_ICONINFORMATION);
return;
}
Testing=TRUE;
{
HANDLE hDevice=NULL;
HWND houtputlist;
HWND htestlist;
BOOL bResult = FALSE;
ULONG nBytes;
char DeviceName[MAX_DEVICE_NAME] = "";
char tempbuff[18][256];
unsigned char output2[200];
int i;
USB_CONFIGURATION_DESCRIPTOR output;
USB_INTERFACE_DESCRIPTOR *output0;
houtputlist = GetDlgItem (hdlg, IDC_OUTPUT_LIST);
htestlist = GetDlgItem (hdlg, IDC_TEST_LIST);
GetDlgItemText (hdlg, IDC_DEVICE_NAME, DeviceName, MAX_DEVICE_NAME);
if (UsbOpenDriver (&hDevice, DeviceName) != TRUE) {
MessageBox(hdlg, "无效设备,请重试!","错误",MB_ICONERROR);
Testing=FALSE;
return;
}
bResult = DeviceIoControl (hDevice,
IOCTL_Ezusb_GET_CONFIGURATION_DESCRIPTOR,
NULL,
0,
&output,
sizeof(USB_CONFIGURATION_DESCRIPTOR),
&nBytes,
NULL);
if (bResult!=TRUE)
MessageBox(hdlg, "读取接口描述符失败!","错误",MB_ICONERROR);
else {
bResult = DeviceIoControl (hDevice,
IOCTL_Ezusb_GET_CONFIGURATION_DESCRIPTOR,
NULL,
0,
&output2,
output.wTotalLength,
&nBytes,
NULL);
if (bResult!=TRUE)
MessageBox(hdlg, "读取接口描述符失败!","错误",MB_ICONERROR);
else {
SetDlgItemText (hdlg, IDC_INFORMATION, "测试-接口描述符(Interface Descrioptor):");
SendMessage (houtputlist, LB_RESETCONTENT, 0, 0);
SendMessage (htestlist, LB_RESETCONTENT, 0, 0);
output0=(USB_INTERFACE_DESCRIPTOR *)&output2[9];
sprintf(tempbuff[0],"[0]描述符长度(bLength): 0x0%xH",output0->bLength);
sprintf(tempbuff[1],"[1]描述符类型(bDescriptorType):0x0%xH",output0->bDescriptorType);
sprintf(tempbuff[2],"[2]接口号(bInterfaceNumber): 0x%0xH",output0->bInterfaceNumber);
sprintf(tempbuff[3],"[3]替换设置值(bAlternateSetting):0x0%xH",output0->bAlternateSetting);
sprintf(tempbuff[4],"[4]支持的端点数(bNumEndpoints):0x0%xH",output0->bNumEndpoints);
sprintf(tempbuff[5],"[5]类代码(bInterfaceClass):0x0%xH",output0->bInterfaceClass);
sprintf(tempbuff[6],"[6]子类代码(bInterfaceSubClass):0x%xH",output0->bInterfaceSubClass);
sprintf(tempbuff[7],"[7]协议代码(bInterfaceProtocol):0x0%xH",output0->bInterfaceProtocol);
sprintf(tempbuff[8],"[8]该接口的字符串描述符(iInterface):0x0%xH",output0->iInterface);
sprintf(tempbuff[9],"**在测试框中显示了该配置所有字节的信息**");
for(i=0;i<10;i++)
SendMessage (houtputlist, LB_ADDSTRING, 0, (LPARAM)tempbuff[i]);
sprintf(tempbuff[0],"");
for (i=0;i<output.wTotalLength;i++) {
sprintf(tempbuff[1],"[%d]%xH ",i,output2[i]);
strcat(tempbuff[0],tempbuff[1]);
if(i%5==0 && i!=0) {
SendMessage (htestlist, LB_ADDSTRING, 0, (LPARAM)tempbuff[0]);
sprintf(tempbuff[0],"");
}
}
}
}
CloseHandle(hDevice);
Testing=FALSE;
return;
}
}
void GetEndPointDescriptorTest(HWND hdlg)
{
if (Testing ==TRUE) {
MessageBox(hdlg, "测试中,请先退出当前测试,再读取描述符!","警告",MB_ICONINFORMATION);
return;
}
Testing=TRUE;
{
HANDLE hDevice=NULL;
HWND houtputlist;
HWND htestlist;
BOOL bResult = FALSE;
ULONG nBytes;
char DeviceName[MAX_DEVICE_NAME] = "";
char tempbuff[18][256];
unsigned char output2[200];
int i,j;
USB_CONFIGURATION_DESCRIPTOR output;
USB_ENDPOINT_DESCRIPTOR *output0;
houtputlist = GetDlgItem (hdlg, IDC_OUTPUT_LIST);
htestlist = GetDlgItem (hdlg, IDC_TEST_LIST);
GetDlgItemText (hdlg, IDC_DEVICE_NAME, DeviceName, MAX_DEVICE_NAME);
if (UsbOpenDriver (&hDevice, DeviceName) != TRUE) {
MessageBox(hdlg, "无效设备,请重试!","错误",MB_ICONERROR);
Testing=FALSE;
return;
}
bResult = DeviceIoControl (hDevice,
IOCTL_Ezusb_GET_CONFIGURATION_DESCRIPTOR,
NULL,
0,
&output,
sizeof(USB_CONFIGURATION_DESCRIPTOR),
&nBytes,
NULL);
if (bResult!=TRUE)
MessageBox(hdlg, "读取端点描述符失败!","错误",MB_ICONERROR);
else {
bResult = DeviceIoControl (hDevice,
IOCTL_Ezusb_GET_CONFIGURATION_DESCRIPTOR,
NULL,
0,
&output2,
output.wTotalLength,
&nBytes,
NULL);
if (bResult!=TRUE)
MessageBox(hdlg, "读取端点描述符失败!","错误",MB_ICONERROR);
else {
SetDlgItemText (hdlg, IDC_INFORMATION, "测试-端点描述符(Endpoint Descrioptor):");
SendMessage (houtputlist, LB_RESETCONTENT, 0, 0);
SendMessage (htestlist, LB_RESETCONTENT, 0, 0);
for (i=0;i<4;i++) {
output0=(USB_ENDPOINT_DESCRIPTOR *)&output2[18+i*7];
sprintf(tempbuff[0],"端点[%d]:",i+1);
sprintf(tempbuff[1],"[0]描述符长度(bLength): 0x0%xH",output0->bLength);
sprintf(tempbuff[2],"[1]描述符类型(bDescriptorType):0x0%xH",output0->bDescriptorType);
sprintf(tempbuff[3],"[2]端点号及方向(bEndpointAddress): 0x%0xH",output0->bEndpointAddress);
sprintf(tempbuff[4],"[3]传输类型(bmAttributes):0x0%xH",output0->bmAttributes);
sprintf(tempbuff[5],"[4]最大包的大小(wMaxPacketSize):0x0%xH",output0->wMaxPacketSize);
sprintf(tempbuff[6],"[5]查询间隔(bInterval):0x0%xH",output0->bInterval);
for(j=0;j<7;j++)
SendMessage (houtputlist, LB_ADDSTRING, 0, (LPARAM)tempbuff[j]);
}
sprintf(tempbuff[0],"**在测试框中显示了该配置所有字节的信息**");
SendMessage (houtputlist, LB_ADDSTRING, 0, (LPARAM)tempbuff[0]);
sprintf(tempbuff[0],"");
for (i=0;i<output.wTotalLength;i++) {
sprintf(tempbuff[1],"[%d]%xH ",i,output2[i]);
strcat(tempbuff[0],tempbuff[1]);
if(i%5==0 && i!=0) {
SendMessage (htestlist, LB_ADDSTRING, 0, (LPARAM)tempbuff[0]);
sprintf(tempbuff[0],"");
}
}
}
}
CloseHandle(hDevice);
Testing=FALSE;
return;
}
}
void GetStringDescriptorTest(HWND hdlg)
{
if (Testing ==TRUE) {
MessageBox(hdlg, "测试中,请先退出当前测试,再读取描述符!","警告",MB_ICONINFORMATION);
return;
}
Testing=TRUE;
{
HANDLE hDevice=NULL;
HWND houtputlist;
HWND htestlist;
BOOL bResult = FALSE;
ULONG nBytes;
char DeviceName[MAX_DEVICE_NAME] = "";
char tempbuff[18][256];
int i;
char output0[50];
GET_STRING_DESCRIPTOR_IN input;
USB_STRING_DESCRIPTOR output;
houtputlist = GetDlgItem (hdlg, IDC_OUTPUT_LIST);
htestlist = GetDlgItem (hdlg, IDC_TEST_LIST);
GetDlgItemText (hdlg, IDC_DEVICE_NAME, DeviceName, MAX_DEVICE_NAME);
if (UsbOpenDriver (&hDevice, DeviceName) != TRUE) {
MessageBox(hdlg, "无效设备,请重试!","错误",MB_ICONERROR);
Testing=FALSE;
return;
}
input.Index=0;
input.LanguageId=0;
bResult = DeviceIoControl (hDevice,
IOCTL_Ezusb_GET_STRING_DESCRIPTOR,
&input,
sizeof(GET_STRING_DESCRIPTOR_IN),
&output,
4,
&nBytes,
NULL);
if (bResult!=TRUE) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -