grimreaper
驱动牛犊
驱动牛犊
  • 注册日期2004-10-13
  • 最后登录2006-08-25
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1332回复:1

求助,HID设备应用程序ReadFile

楼主#
更多 发布于:2005-03-01 16:40
我使用的是AN2131芯片,将设备设为HID类,设备需要执行的功能

是每隔一段时间向主机发送5个字节的数据

在描述符里
db 07h ; Descriptor length
db 05h ; Descriptor type = ENDPOINT
db 82h ; IN-2
db 03h ; type - INTERRUPT
db 05d,0 ; maxPacketSize = 5
db 100d ; polling interval is 100 msec

db 07h ; Descriptor length
db 05h ; Descriptor type = ENDPOINT
db 02h ; OUT-2
db 03h ; type - INTERRUPT
db 02d,0 ; maxPacketSize = 2
db 100d ; polling interval is 100 msec
在应用程序运行后得到的结果却是
InputReportByteLength=6
OutputReportByteLength=3

在TD_Init()里
    IN07VAL = bmEP2;
    IN07IEN = bmEP2;
    OUT07VAL = bmEP2;
    OUT07IEN = bmEP2;
    for(i=0;i<5;i++)
IN2BUF = 0xff;    
    IN2BC = 5;

void ISR_Ep2in(void) interrupt 0
{
int i;

if(!arrayFlag)
{
   for(i=0;i<5;i++)
IN2BUF = array[5];

   arrayFlag = 1;
IN2BC = 5;
}

else
IN2BC =5;

EZUSB_IRQ_CLEAR();
USBIRQ = bmBIT1;
}

void ISR_Ep2out(void) interrupt 0
{
       if(EPIO[IN2BUF_ID].cntrl & bmEPBUSY)
{
   TOGCTL = 0x08 | IN2BUF_ID;
   WRITEDELAY();
   if(TOGCTL & 0X08)
       TOGCTL |= 0x20;
   else
TOGCTL |= 0x40;
}

OUT2BC=0;
}

可是程序运行时,到ReadFile函数就出问题
DisplayData(\"----readfile entered----\");

Result = ReadFile \\
(ReadHandle, \\
InputReport, \\
Capabilities.InputReportByteLength, \\
&BytesRead, \\
NULL);

DisplayData(\"----readfile completed----\");

在消息显示框里只能显示----readfile entered----的信息,我检查过ReadHandle和InputReport都没有问题,请问这是怎么回事啊

还有,我在另外的资料上看到  在使用WriteFile,ReadFile之前,必须先通过DeviceIOControl发送请求,我用的这个程序上没有。
junki
驱动牛犊
驱动牛犊
  • 注册日期2004-09-02
  • 最后登录2007-11-30
  • 粉丝0
  • 关注0
  • 积分124分
  • 威望13点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-31 11:08
用Err.LastDllError看一下是什么错误

WriteFile , ReadFile
是一个写,一个读

DeviceIOControl是直接进行读写操作

这些操作必须都是USB设备固件提供支持才行
游客

返回顶部