刚接解PC机的USB驱动,散分的问题。大散分!!!

plamlover 2008-02-26 04:17:52
我现在有一块板子,里面自己已经写了USB的固件程序了,可是PC机端的驱动不会开发,想学一学,希望大家给点意见。
我知道固件程序的设备描述表,配置描述表,接口描述表,终端描述表等的定义,我板子上使用的是HID类,目的是想通过USB传递字符(功能非常简单)。
不知道我有上面的资源,我现在PC上的环境是VC6.0+WIN2KDDK+Compuware DriverStudio3.0,怎么在PC机上开发这个驱动?


我的MSN:He_S_Q@hotmail.com
谁想帮我写出来的话,我提供资源!

好久没有到这来了,系统居然不让我发太多的分,搞什么东东,想大散分都不可以!!!
...全文
195 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
plamlover 2008-03-06
  • 打赏
  • 举报
回复
继续听听大家的意见~~~~~
看起来USB驱动似乎不是太困难~~~
yujianhuabcde 2008-02-28
  • 打赏
  • 举报
回复
先下一个USB驱动程序,再就是楼上说的用ReadFile和WriteFile读写,不过你首先要让PC识别到你的USB设备,再设置通信方式与及端点,可以用bushound5.0完美版来调试.
用户 昵称 2008-02-27
  • 打赏
  • 举报
回复
这俺也不清楚,俺手头的程序都是前人留下的,一般用ReadFile和WriteFile就能读写,这需要下位USB机的配合。
plamlover 2008-02-27
  • 打赏
  • 举报
回复
我已经下载了一个例子(USBPort),要改哪些东西才可以读到单片机上的字符呢~~~~
用户 昵称 2008-02-27
  • 打赏
  • 举报
回复
http://www.alanmacek.com/usb/

用户 昵称 2008-02-27
  • 打赏
  • 举报
回复
http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1311

有一些,这些资料网上是不可能没有的。
plamlover 2008-02-26
  • 打赏
  • 举报
回复
忘记说邮箱了:
5305120@sina.com
plamlover 2008-02-26
  • 打赏
  • 举报
回复
自己再顶一下,
我没有找到哟,环境我都配好了,要是给我发一个例子工程来就非常高兴了,下载地址也行哟。定散分。有注释更好
cnzdgs 2008-02-26
  • 打赏
  • 举报
回复
帖子发出后可以再加分,点“帖子加分”按钮。
用户 昵称 2008-02-26
  • 打赏
  • 举报
回复
自己从网上找类似的例子吧。

HANDLE connectToIthUSBHIDDevice (DWORD deviceIndex)
{
GUID hidGUID;
HDEVINFO hardwareDeviceInfoSet;
SP_DEVICE_INTERFACE_DATA deviceInterfaceData;
PSP_INTERFACE_DEVICE_DETAIL_DATA deviceDetail;
ULONG requiredSize;
HANDLE deviceHandle = INVALID_HANDLE_VALUE;
DWORD result;

//Get the HID GUID value - used as mask to get list of devices
HidD_GetHidGuid (&hidGUID);

//Get a list of devices matching the criteria (hid interface, present)
hardwareDeviceInfoSet = SetupDiGetClassDevs (&hidGUID,
NULL, // Define no enumerator (global)
NULL, // Define no
(DIGCF_PRESENT | // Only Devices present
DIGCF_DEVICEINTERFACE)); // Function class devices.

deviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);

//Go through the list and get the interface data
result = SetupDiEnumDeviceInterfaces (hardwareDeviceInfoSet,
NULL, //infoData,
&hidGUID, //interfaceClassGuid,
deviceIndex,
&deviceInterfaceData);

/* Failed to get a device - possibly the index is larger than the number of devices */
if (result == FALSE)
{
SetupDiDestroyDeviceInfoList (hardwareDeviceInfoSet);
return INVALID_HANDLE_VALUE;
}

//Get the details with null values to get the required size of the buffer
SetupDiGetDeviceInterfaceDetail (hardwareDeviceInfoSet,
&deviceInterfaceData,
NULL, //interfaceDetail,
0, //interfaceDetailSize,
&requiredSize,
0); //infoData))

//Allocate the buffer
deviceDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(requiredSize);
deviceDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);

//Fill the buffer with the device details
if (!SetupDiGetDeviceInterfaceDetail (hardwareDeviceInfoSet,
&deviceInterfaceData,
deviceDetail,
requiredSize,
&requiredSize,
NULL))
{
SetupDiDestroyDeviceInfoList (hardwareDeviceInfoSet);
free (deviceDetail);
return INVALID_HANDLE_VALUE;
}

//Open file on the device
deviceHandle = CreateFile (deviceDetail->DevicePath,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, // no SECURITY_ATTRIBUTES structure
OPEN_EXISTING, // No special create flags
0,
NULL); // No template file

SetupDiDestroyDeviceInfoList (hardwareDeviceInfoSet);
free (deviceDetail);
return deviceHandle;
}

HANDLE connectToUSBHIDDevice (DWORD *vendorID, DWORD *productID, DWORD *versionNumber)
{
HANDLE deviceHandle = INVALID_HANDLE_VALUE;
DWORD index = 0;
HIDD_ATTRIBUTES deviceAttributes;
BOOL matched = FALSE;

while (!matched && (deviceHandle = connectToIthUSBHIDDevice (index)) != INVALID_HANDLE_VALUE)
{
if (!HidD_GetAttributes (deviceHandle, &deviceAttributes))
return INVALID_HANDLE_VALUE;

if ((vendorID == 0 || deviceAttributes.VendorID == *vendorID) &&
(productID == 0 || deviceAttributes.ProductID == *productID) &&
(versionNumber == 0 || deviceAttributes.VersionNumber == *versionNumber))
return deviceHandle; /* matched */

CloseHandle (deviceHandle); /* not a match - close and try again */

index++;
}

return INVALID_HANDLE_VALUE;
}
用户 昵称 2008-02-26
  • 打赏
  • 举报
回复
先装DDK,如果不装DDK的话将DDK的文件拷贝过来也可以编写

需要的文件

hid.lib

hidpi.h

hidsdi.h

HIDUSAGE.H

等等。

然后就用ddk提供的函数来进行操作

HidD_GetHidGuid(...)

这些函数声明网上已经有好多了,你可以自己找。

21,616

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧