USB上位机调用writefile出现1784错误
程序是圈圈书里的,百度下好些人问这个问题,也有的自己解决了,但是没找到解决办法BOOL CMyUsbHidTestAppDlg::OnDebug()
{
BOOL Result;
UINT LastError;
UINT i;
CString Str;
//如果设备没有找到,则返回失败
if(MyDevFound==FALSE)
{
AddToInfOut("设备未找到");
return FALSE;
}
//如果句柄无效,则说明打开设备失败
if(hWriteHandle==INVALID_HANDLE_VALUE)
{
AddToInfOut("无效的写报告句柄,可能是打开设备时失败");
return FALSE;
}
//如果数据仍在发送中,则返回失败
if(DataInSending==TRUE)
{
AddToInfOut("数据正在发送中,暂时不能发送");
return FALSE;
}
//设置要发送报告的数据
WriteReportBuffer=0x09; //报告ID为0
WriteReportBuffer=1; //将LED状态放到缓冲区中
WriteReportBuffer=1; // 非0即为debug模式
//显示发送数据的信息
AddToInfOut("发送输出报告2字节");
/*
Str="";
for(i=0;i<9;i++)
{
Str+=itos(WriteReportBuffer,16).Right(2)+" ";
}
AddToInfOut(Str,FALSE);
*/
//设置正在发送标志
DataInSending=TRUE;
//调用WriteFile函数发送数据
Result=WriteFile(hWriteHandle, WriteReportBuffer, 3, NULL, &WriteOverlapped);
//如果函数返回失败,则可能是真的失败,也可能是IO挂起了
if(Result==FALSE)
{
//获取最后错误代码
LastError=GetLastError();
//看是否是真的IO挂起
if((LastError==ERROR_IO_PENDING)||(LastError==ERROR_SUCCESS))
{
return TRUE;
}
//否则,是函数调用时发生错误,显示错误代码
else
{
DataInSending=FALSE;
AddToInfOut("发送失败,错误代码:"+itos(LastError));
//如果最后错误为1,说明该设备不支持该函数。
if(LastError==1)
{
AddToInfOut("该设备不支持WriteFile函数。", FALSE);
}
return FALSE;
}
}
//否则,函数返回成功
else
{
DataInSending=FALSE;
return TRUE;
}
} bbs2009 发表于 2012-8-17 18:32 static/image/common/back.gif
何必一定要用 OO 的 例程?
C:\Keil\ARM422\ARM\Utilities\HID_Client下 有HID 现成的例程。
非 HID 建 ...
现在还没安装keil for arm,
而且设备就是个HID设备,可以用哪个库么? bbs2009 发表于 2012-8-18 10:38 static/image/common/back.gif
安装keil for arm 吧。
C:\Keil\ARM\Utilities\HID_Client下 有HIDPC端的例程。
C:\Keil\ARM\Board ...
嗯,好的,谢谢了 0x05, 0x01, // USAGE_PAGE (Generic) 2
0x09, 0x00, // USAGE 自定义 4
0xa1, 0x01, // COLLECTION (Application) 6
0x85, REPORTID_DEBUG, // REPORT_ID () 8 0x09
0x09, 0x01, // USAGE 1 10
0x15, 0x00, // LOGICAL_MINIMUM 12
0x25, 0xff, // LOGICAL_MAXIMUM 14
0x75, 0x08, // REPORT_SIZE 16
0x95, 0x10, // REPORT_COUNT 18 16个字节,作为调试用
0x81, 0x02, // INPUT 20
0x09, 0x02, // USAGE 2 22
0x15, 0x00, // LOGICAL_MINIMUM 24
0x25, 0xff, // LOGICAL_MAXIMUM 26
0x75, 0x08, // REPORT_SIZE 28
0x95, 0x02, // REPORT_COUNT 30 2个输出字节
0x91, 0x02, // OUTPUT 32
0xc0 // END_COLLECTION 33 0x00ff
在报告描述符的最好我写了这么一段,想作为调试用,
但我把
0x09, 0x01, // USAGE 1
0x09, 0x02, // USAGE 2
这两段去掉后程序编译正常,但是下载到板子上不能正常运行
我怀疑问题可能出在这里,OO的示例中就没这两句 一般是下位机的报告描述符的接收字节和上位机writefile()里的长度不一致导致~!~~ 正在搞USB,writefile老是返回0,GetLastError也算0.不知道是什么原因
页:
[1]