您当前的位置:五五电子网电子知识单片机-工控设备源码-程序访问USB端口的程序 正文
访问USB端口的程序

访问USB端口的程序

点击数:7397 次   录入时间:03-04 11:39:06   整理:http://www.55dianzi.com   源码-程序

// filename是管道名称,如pipe01等

int CUSBImpObject::open_file( char *filename)

{

int suCCessOpened = 0,i;

int NumOpened;

HANDLE h;

NumOpened=OpenAllUsbDevICes((LPGUID) &GUID_CLASS_I82930_BULK);

if(NumOpened<=0)

return 0;

for(i=0;i<NumOpened;i++){

strcat (outnamebuf,

"\\"

);

strcat (outnamebuf,

filename

);

h= CreateFile(outnamebuf,

GENERIC_WRITE | GENERIC_READ,

FILE_SHARE_WRITE | FILE_SHARE_READ,

NULL,

OPEN_EXISTING,

0,

NULL);

if (h == INVALID_HANDLE_VALUE) {

handUsbArray=NULL;

} else {

handUsbArray=h;

successOpened++;

}

}

return successOpened;

}

int CUSBImpObject::OpenAllUsbDevices(LPGUID pGuid) //打开所有的GUID为

pGuid的USB器件

{ //输出名存在outnamebuf中

ULONG NumberDevices;

HANDLE hOut = INVALID_HANDLE_VALUE; //HANDLE Phout[8];

HDEVINFO hardwareDeviceInfo;

SP_INTERFACE_DEVICE_DATA deviceInfoData;

ULONG i,flag=1,j;

ULONG NumDevicesOpened=0;

BOOLEAN done;

PUSB_DEVICE_DESCRIPTOR usbDeviceInst;

PUSB_DEVICE_DESCRIPTOR *UsbDevices = &usbDeviceInst;

char DeviceName[256]=""; //器件名

*UsbDevices = NULL;

UsbDevicesOpened = 0; //打开器件数置零

hardwareDeviceInfo = SetupDiGetClassDevs (

pGuid,

NULL, // Define no enumerator (global)

NULL, // Define no

(DIGCF_PRESENT | // Only Devices present

DIGCF_INTERFACEDEVICE)); // Function class devices.

NumberDevices = 4;

done = FALSE;

deviceInfoData.cbSize = sizeof (SP_INTERFACE_DEVICE_DATA);

i=0 ;

while (!done) {

NumberDevices *= 2;

if (*UsbDevices) {

*UsbDevices =

(struct _USB_DEVICE_DESCRIPTOR *)realLOC (*UsbDevices, (NumberDevices *

sizeof (USB_DEVICE_DESCRIPTOR)));

} else {

*UsbDevices = (struct _USB_DEVICE_DESCRIPTOR *)calloc (NumberDevices,

sizeof (USB_DEVICE_DESCRIPTOR));

}

if (NULL == *UsbDevices) {

SetupDiDestroyDeviceInfoList (hardwareDeviceInfo);

return 0 ;

}

usbDeviceInst = *UsbDevices + i;

for (; i < NumberDevices; i++) {

if (SetupDiEnumDeviceInterfaces (hardwareDeviceInfo,

0,

pGuid,

i,

&deviceInfoData))

{

hOut = OpenOneDevice (hardwareDeviceInfo, &deviceInfoData, DeviceName);

if ( hOut != INVALID_HANDLE_VALUE )

{

handUsbArray[UsbDevicesOpened]=hOut;

if(!outnamebuf[UsbDevicesOpened])

{

return 0;

}

for(j=0;j<256;j++)

{

*(outnamebuf[UsbDevicesOpened]+j)=*(DeviceName+j);

*(DeviceName+j)=0;

}

UsbDevicesOpened++;

}

}

else

{

if(ERROR_NO_MORE_ITEMS == GetLastError())

{

done = TRUE;

break;

}

}

} //end for

} //end while

SetupDiDestroyDeviceInfoList (hardwareDeviceInfo);

free ( *UsbDevices );

return UsbDevicesOpened ;

}

//--------------------------------------------------------------------

//

//

//

//--------------------------------------------------------------------

HANDLE CUSBImpObject::OpenOneDevice (

IN HDEVINFO HardwareDeviceInfo,

IN PSP_INTERFACE_DEVICE_DATA DeviceInfoData,

IN char *devName

)

{

PSP_INTERFACE_DEVICE_DETAIL_DATA functionClassDevicEDAta = NULL;

ULONG preDICtedLength = 0;

ULONG requiredLength = 0;

HANDLE hOut = INVALID_HANDLE_VALUE;

SetupDiGetInterfaceDeviceDetail (

HardwareDeviceInfo,

DeviceInfoData,

NULL, // probing so no output buffer yet

0, // probing so output buffer length of zero

&requiredLength,

NULL); // not interested in the specific dev-node

predictedLength = requiredLength;

functionClassDeviceData =(struct _SP_DEVICE_INTERFACE_DETAIL_DATA_A *)

malloc (predictedLength);

functionClassDeviceData->cbSize = sizeof

(SP_INTERFACE_DEVICE_DETAIL_DATA);

if (! SetupDiGetInterfaceDeviceDetail (

HardwareDeviceInfo,

DeviceInfoData,

functionClassDeviceData,

predictedLength,

&requiredLength,

NULL)) {

free( functionClassDeviceData );

return INVALID_HANDLE_VALUE;

}

strcpy( devName,functionClassDeviceData->DevicePath) ;

hOut = CreateFile (

functionClassDeviceData->DevicePath,

GENERIC_READ | GENERIC_WRITE,

FILE_SHARE_READ | FILE_SHARE_WRITE,

NULL, // no SECURITY_ATTRIBUTES structure

OPEN_EXISTING, // No special create flags

0, // No special attributes

NULL); // No template file

if (INVALID_HANDLE_VALUE == hOut) {

}

free( functionClassDeviceData );

return hOut;

}




本文关键字:程序  源码-程序单片机-工控设备 - 源码-程序

《访问USB端口的程序》相关文章>>>