关于usb通讯方面的问题。请AKing大哥及相关高手来看看,万分感激!!!
最今我接到了开发pc和pocket pc通过usb口通讯的任务。这两个星期我参考了很多方面的资料,特别是AKing大哥写的一些文章。但我始终没有打通这个关口,我贴出我的代码请AKing大哥看看,现在很急,多谢。
pc的os是windows2000professional
pocket pc是hp ipaq 2210,os 是pocket pc2003。
我装了activesync3.7。我查看过了,这个activesync目录下有pocket pc的驱动程序。pc也能识别。
下面是我在pc上调用usb的代码。
下面的代码我能打开hidn类型的usb,但是就是不能打开pocket pc的usb。
//classGuid = {25dbce51-6c8f-4a72-8a6d-b54c2b4fc835}
DEFINE_GUID(GUID_CLASS_PALM,
0x25dbce51, 0x6c8f, 0x4a72, 0x8a, 0x6d, 0xb5, 0x4c, 0x2b,
0x4f, 0xc8, 0x35);
GUID HidGuid = GUID_CLASS_PALM;
HANDLE Get_DeviceHandle( GUID* pGuid)
{
HDEVINFO info = SetupDiGetClassDevs(pGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
if(info==INVALID_HANDLE_VALUE)
{
printf("No HDEVINFO available for this GUID\n");
return NULL;
}
SP_INTERFACE_DEVICE_DATA ifdata;
ifdata.cbSize = sizeof(ifdata);
//0000是我在注册表中找到的序号
if(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, 0000, &ifdata))
{
printf("No SP_INTERFACE_DEVICE_DATA available for this GUID instance %d \n", instance+1);
SetupDiDestroyDeviceInfoList(info);
return NULL;
}
// Get size of symbolic link name
DWORD ReqLen;
SetupDiGetDeviceInterfaceDetail(info, &ifdata, NULL, 0, &ReqLen, NULL);
PSP_INTERFACE_DEVICE_DETAIL_DATA ifDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)(new char[ReqLen]);
if( ifDetail==NULL)
{
SetupDiDestroyDeviceInfoList(info);
return NULL;
}
// Get symbolic link name
ifDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
if( !SetupDiGetDeviceInterfaceDetail(info, &ifdata, ifDetail, ReqLen, NULL, NULL))
{
SetupDiDestroyDeviceInfoList(info);
delete ifDetail;
return NULL;
}
printf("Symbolic link is %s\n",ifDetail->DevicePath);
/*\\?\\usb#vid_03f0&pid_1016#5&1bc41f6c&0&1#{25DBCE51-6C8F-4A72-8A6D-B54C2B4FC835}这是ifDetail->DevicePath的内容*/
// Open file
//前面都很正常但就是下面始终得出一个无效的句柄,我也就无法开展下一步的工作.
HANDLE pDevice = CreateFile(
ifDetail->DevicePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if( pDevice==INVALID_HANDLE_VALUE) pDevice = NULL;
SetupDiDestroyDeviceInfoList(info);
return pDevice;
}
再次感谢关注这个问题的人们。