阅读:1495回复:9
急,急,如何控制计算机上的USB端口
老板让做一个计算机标准USB端口的测试程序,在WINDOWS2000下运行,我想问一下如何在VC里直接控制USB是不是需要额外的写驱动程序呢?请哪位指点。不剩感激
|
|
最新喜欢:jinghu... |
沙发#
发布于:2003-10-14 15:56
vc中控制usb端口? :(
|
|
板凳#
发布于:2003-10-14 17:41
是啊。我想写个WINDOWS程序能读写USB端口啊。只要能往USB端口上写数据就可以了啊。我想知道如何实现。请赐教
|
|
地板#
发布于:2003-10-14 19:35
能得到周立功的调试助手源码就可以办到!
―――――――――――――――― 共同努力 搞定驱动! ――――――――――――――― |
|
地下室#
发布于:2003-10-15 08:45
[code]
BOOL Open_Dev_D12() { SP_INTERFACE_DEVICE_DATA deviceInfoData; hardwareDeviceInfo = SetupDiGetClassDevs ( (LPGUID) &GUID_CLASS_D12_BULK, NULL, // Define no enumerator (global) NULL, // Define no (DIGCF_PRESENT | // Only Devices present DIGCF_INTERFACEDEVICE)); deviceInfoData.cbSize=sizeof(SP_INTERFACE_DEVICE_DATA); int NumberDevice = 4; for(int i = 0; i<NumberDevice; i++) { SetupDiEnumDeviceInterfaces(hardwareDeviceInfo, 0,(LPGUID) &GUID_CLASS_D12_BULK, i, &deviceInfoData); } ULONG predictedLength = 0; ULONG requiredLength = 0; SetupDiGetInterfaceDeviceDetail( hardwareDeviceInfo, &deviceInfoData, //0, NULL, // probing so no output buffer yet 0, // probing so output buffer length of zero &requiredLength, NULL); predictedLength = requiredLength; functionClassDeviceData = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc (predictedLength); functionClassDeviceData->cbSize = sizeof (SP_INTERFACE_DEVICE_DETAIL_DATA); if(!SetupDiGetInterfaceDeviceDetail ( hardwareDeviceInfo, &deviceInfoData, //0, functionClassDeviceData, predictedLength, &requiredLength, NULL)){ return FALSE; } hout = CreateFile(functionClassDeviceData->DevicePath, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (INVALID_HANDLE_VALUE == hout) { return FALSE; } return TRUE; } BOOL WriteD12USB2(BYTE* pData, int bytes) { char completeDeviceName[256] = \"\"; strcat (completeDeviceName, functionClassDeviceData->DevicePath ); strcat (completeDeviceName, \"\\\\PIPE03\" //bulk write ); free(functionClassDeviceData); hDevice= CreateFile(completeDeviceName, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); DWORD dwRead = 0; DWORD dwWrite = 0; DWORD dwTimeout = 20; OVERLAPPED ovInternal; memset(&ovInternal, 0, sizeof(OVERLAPPED)); ovInternal.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); LPOVERLAPPED lpOverlapped; lpOverlapped = &ovInternal; if(!WriteFile(hDevice, pData, bytes, &dwWrite, lpOverlapped)) { long lLastError = ::GetLastError(); if(lLastError != ERROR_IO_PENDING) { switch(::WaitForSingleObject(ovInternal.hEvent, dwTimeout)) { case WAIT_OBJECT_0: if(!::GetOverlappedResult(hDevice, lpOverlapped, &dwWrite, TRUE)) { } break; case WAIT_TIMEOUT: ::CancelIo(hDevice); default: break; } } SetupDiDestroyDeviceInfoList (hardwareDeviceInfo); CloseHandle(hDevice); CloseHandle(hout); return FALSE; } SetupDiDestroyDeviceInfoList (hardwareDeviceInfo); CloseHandle(hDevice); CloseHandle(hout); return TRUE; } bool ReadD12USB2(BYTE* pData, int bytes) { char completeDeviceName[256] = \"\"; strcat (completeDeviceName, functionClassDeviceData->DevicePath ); strcat (completeDeviceName, \"\\\\PIPE02\" //bulk read ); free(functionClassDeviceData); hDevice= CreateFile(completeDeviceName, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); DWORD dwRead = 0; DWORD dwTimeout = 20; OVERLAPPED ovInternal; memset(&ovInternal, 0, sizeof(OVERLAPPED)); ovInternal.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); LPOVERLAPPED lpOverlapped; lpOverlapped = &ovInternal; if(!ReadFile(hDevice, pData, bytes, &dwRead, lpOverlapped)) { long lLastError = ::GetLastError(); if(lLastError != ERROR_IO_PENDING) { switch(::WaitForSingleObject(ovInternal.hEvent, dwTimeout)) { case WAIT_OBJECT_0: if(!::GetOverlappedResult(hDevice, lpOverlapped, &dwRead, TRUE)) { } break; case WAIT_TIMEOUT: ::CancelIo(hDevice); break; default: break; } } SetupDiDestroyDeviceInfoList (hardwareDeviceInfo); CloseHandle(hDevice); CloseHandle(hout); return FALSE; } SetupDiDestroyDeviceInfoList (hardwareDeviceInfo); CloseHandle(hDevice); CloseHandle(hout); return TRUE; } [code] 放分吧 [编辑 - 10/15/03 by clementzhao] |
|
5楼#
发布于:2003-10-15 12:51
老大,没有什么D12啊我只想往我的计算机的USB端口上写个数据就可以了啊。没别的要求啊,我想调用操作系统自带的驱动怎么办。
|
|
6楼#
发布于:2003-10-16 08:46
老大,这只是个例子!关键是你得到设备guid,然后获取句柄就可以creatfile了。
|
|
7楼#
发布于:2003-10-16 09:33
我用SetupDiClassGuidsFromName(\"USB\",&guidHID,i,&i) i=sizeof(GUID)得到了GUID,但是让我困惑的是如果换一个工程就算用相同的代码,为什么得到的GUID是不一样的?得到GUID之后应该怎么做呢?怎么获取句柄?
|
|
8楼#
发布于:2003-10-16 10:00
请高手指教
|
|
9楼#
发布于:2003-10-21 09:38
是这样的我机器上没有挂任何USB设备,这样得情况下我能否得到USB得句柄呢,我又怎么能往USB端口写数据呢。
|
|