有没有人知道usb接口的协议,和如何通过vc软件开发设计读写usb设备
答案:2 悬赏:60
解决时间 2021-02-19 19:42
- 提问者网友:护她一生,唯爱
- 2021-02-19 09:33
有没有人知道usb接口的协议,和如何通过vc软件开发设计读写usb设备
最佳答案
- 二级知识专家网友:茫然不知崩溃
- 2021-02-19 11:00
USB是一种支持在USB主机和USB设备之间进行串行数据传输的通信协议。主机作为总线的主叫方,采用两种信令模式:全速模式12Mb/s和低速模式1.5Mb/s。USB使用四种数据传输方式:控制传输(control)、中断传输(interrupt)、批量传输(bulk)及等时传输(isochronous)。其中控制模式主要用于控制指令传输及USB规范的实现,等时传输主要用于音频及视频传输。USB通过两次总线列举(Enumeration and Renumertion)来实现设备识别以及驱动程序析加载。其具体过程为:USB设备连到主机后,主机依据USB规范在特定地址通过端口0(endpoint0)与外设通信,并将外设视为默认设备。外设与主机通信将其6设备标识(DID、PID、VID)发给主机进行第二次总线列举。主机根据设备标识,加载相应设备驱动程序,重新分配地址,并将控制权转交给外设固件(firmware),通过固件与设备驱动程序及主机应用程序的交互通信,来实现外设的功能。
全部回答
- 1楼网友:duile
- 2021-02-19 11:23
#include <stdio.h>
#include <windows.h>
#include <setupapi.h>
#include <devguid.h>
#include <regstr.h>
#pragma comment(lib, "setupapi.lib ")
int main( )
{
hdevinfo hdevinfo;
sp_devinfo_data deviceinfodata;
sp_device_interface_data deviceinterfacedata;
dword i;
guid aa;
guid *ab;
ab=&aa;
i=sizeof(guid);
dword datat;
char buf[255];
memset(buf,0,256);
lptstr buffer = buf;
dword buffersize = 0;
if(!setupdiclassguidsfromname( "net ",ab,i,&i))//通过设备类名得到设备类型的guid
{
printf( "false ");
return 1;
}
hdevinfo = setupdigetclassdevs(ab, 0, 0, 0);//digcf_present | digcf_allclasses );//通过设备类型guid得到这类设备信息的句柄
if (hdevinfo == invalid_handle_value)
{
// insert error handling here.
return 1;
}
// enumerate through all devices in set.
printf( "guid={%x-%x-%x-%x%x-%x%x%x%x%x%x}\n ",ab-> data1,ab-> data2,ab-> data3,ab-> data4[0],ab-> data4[1],ab-> data4[2],ab-> data4[3],ab-> data4[4],ab-> data4[5],ab-> data4[6],ab-> data4[7]);
deviceinfodata.cbsize = sizeof(sp_devinfo_data);
for (i = 0;setupdienumdeviceinfo(hdevinfo, i, &deviceinfodata); i++)//枚举这类设备中所有的设备
{
// for(int s=0;s <2;s++)//因为有些时候第一次调用setupdigetdeviceregistryproperty可能会失败,所以调用两次,
// {
// setupdigetdeviceregistryproperty(hdevinfo, &deviceinfodata, spdrp_devicedesc,
// &datat, (pbyte)buffer, buffersize, &buffersize);//得到设备属性
// }
// printf( "设备: [ %s size=%d ]\n ",buffer,buffersize);
// memset(buf,0,256);
for (int m = 0;
setupdienumdeviceinterfaces(hdevinfo,
&deviceinfodata,
ab,m,&deviceinterfacedata); m++)//枚举这类设备中所有的设备
{
printf( "guid={%x-%x-%x-%x%x-%x%x%x%x%x%x}\n ",deviceinterfacedata.interfaceclassguid.data1,deviceinterfacedata.interfaceclassguid.data2,deviceinterfacedata.interfaceclassguid.data3,deviceinterfacedata.interfaceclassguid.data4[0],
deviceinterfacedata.interfaceclassguid.data4[1],deviceinterfacedata.interfaceclassguid.data4[2],deviceinterfacedata.interfaceclassguid.data4[3],deviceinterfacedata.interfaceclassguid.data4[4],deviceinterfacedata.interfaceclassguid.data4[5],
deviceinterfacedata.interfaceclassguid.data4[6],ab-> data4[7]);
//printf( "设备: [ %s size=%d ]\n ",buffer,buffersize);
//memset(buf,0,256);
}
//printf( "do you want close this driver (yes)y or (no)n\n ");
// char ch[128];
//scanf( "%s ",ch);
// if(ch[0]== 'y ')
// {
// }
}
if ( getlasterror()!=no_error && getlasterror()!=error_no_more_items )
{
// insert error handling here.
return 1;
}
// cleanup
setupdidestroydeviceinfolist(hdevinfo);
return 0;
}
这段代码中的
就是移除指定的设备
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯