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

📄 usbapp.c

📁 | Target | | 芯片固件程序 | keil C51 uVision2 | Windows98 | Loader | USB2.0接口 | loader.sys设备驱动程序
💻 C
📖 第 1 页 / 共 3 页
字号:
	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 + -