snowrain
驱动牛犊
驱动牛犊
  • 注册日期2003-07-18
  • 最后登录2005-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1495回复:9

急,急,如何控制计算机上的USB端口

楼主#
更多 发布于:2003-10-14 13:58
老板让做一个计算机标准USB端口的测试程序,在WINDOWS2000下运行,我想问一下如何在VC里直接控制USB是不是需要额外的写驱动程序呢?请哪位指点。不剩感激

最新喜欢:

jinghuirenjinghu...
escape
驱动老牛
驱动老牛
  • 注册日期2002-02-01
  • 最后登录2004-08-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-14 15:56
vc中控制usb端口? :(
snowrain
驱动牛犊
驱动牛犊
  • 注册日期2003-07-18
  • 最后登录2005-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-14 17:41
是啊。我想写个WINDOWS程序能读写USB端口啊。只要能往USB端口上写数据就可以了啊。我想知道如何实现。请赐教
guoxh9
驱动太牛
驱动太牛
  • 注册日期2003-10-13
  • 最后登录2011-10-14
  • 粉丝0
  • 关注0
  • 积分-9分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-10-14 19:35
能得到周立功的调试助手源码就可以办到!
――――――――――――――――
共同努力
搞定驱动!
―――――――――――――――
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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]
snowrain
驱动牛犊
驱动牛犊
  • 注册日期2003-07-18
  • 最后登录2005-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-10-15 12:51
老大,没有什么D12啊我只想往我的计算机的USB端口上写个数据就可以了啊。没别的要求啊,我想调用操作系统自带的驱动怎么办。
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-10-16 08:46
老大,这只是个例子!关键是你得到设备guid,然后获取句柄就可以creatfile了。
snowrain
驱动牛犊
驱动牛犊
  • 注册日期2003-07-18
  • 最后登录2005-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-10-16 09:33
我用SetupDiClassGuidsFromName(\"USB\",&guidHID,i,&i) i=sizeof(GUID)得到了GUID,但是让我困惑的是如果换一个工程就算用相同的代码,为什么得到的GUID是不一样的?得到GUID之后应该怎么做呢?怎么获取句柄?
snowrain
驱动牛犊
驱动牛犊
  • 注册日期2003-07-18
  • 最后登录2005-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-10-16 10:00
请高手指教
snowrain
驱动牛犊
驱动牛犊
  • 注册日期2003-07-18
  • 最后登录2005-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-10-21 09:38
是这样的我机器上没有挂任何USB设备,这样得情况下我能否得到USB得句柄呢,我又怎么能往USB端口写数据呢。
游客

返回顶部