0

我正在尝试使用 mpusbapi.h 中定义的以下函数

HANDLE(*MPUSBOpen)(DWORD instance,     //Input
                   PCHAR pVID_PID,     //Input identifier
                   PCHAR pEP,          //Input pipe
                   DWORD dwDir,        //Input
                   DWORD dwReserved);  //Input <Future Use>

DWORD(*MPUSBWrite)(HANDLE handle,          //Input
                   PVOID pData,            //Input
                   DWORD dwLen,            //Input
                   PDWORD pLength,         //Output
                   DWORD dwMilliseconds);  //Input

当我在我的 test.cpp 中使用这些时,它看起来像;

HANDLE LACOutpipe;
pipeName="\\MCHP_EP";
PCHAR VidPid="vid_04d8&pid_fc5f";
BYTE bufData[3];
DWORD buflen=sizeof(bufData);
DWORD bufProcessed;

LACOutpipe=MPUSBOpen(0,        //only one device connected, dont need to check for multiple
                     VidPid,   //this is the device driver vid and pid
                     pipeName, //the pipe to write to?
                     MP_WRITE, //MP_WRITE is just 1
                     0);       //not supported yet?
cout<<LACOutpipe<<endl;

//now use LACOutpipe handle to write

cout<<MPUSBWRITE(LACOutpipe,   //the handle to write to
               bufData,        //BYTE array with data to be sent
               bufLen,         //length of bufData
               &bufProcessed,  //bytes processed
               10000)          //10 second timeout
               <<endl;

cout<<GetLastError()<<endl;

控制台输出为:

FFFFFFFF
0
6
Press any key to continue...

MPUSBWrite 返回 0 表示写函数失败。错误代码 6 对应于 ERROR_INVALID_HANDLE:句柄无效。

有谁知道为什么?我有一种预感,pipeName但不知道如何检查/解决这个问题。

4

1 回答 1

0

好的,想通了。

不正确的声明:

PCHAR VidPid= "vid_04d8&pid_fc5f";
DWORD pipeName="\\MCHP_EP1";

正确的声明

char VidPid[]="vid_04d8&pid_fc5f";
char pipename[]="\\MCHP_EP1";

请注意,对于 Firgelli LAC 板,只有端点 1 可用于 IN 和 OUT 管道。

我希望这可以解决那些花费与我一样多的时间来尝试解决他们的精益文档并且没有针对 Firgelli LAC 委员会的 Visual C++ 示例的任何人出现的一些挫败问题。

于 2012-02-24T07:13:32.177 回答