Отправка инструкций на USB-устройство - PullRequest
1 голос
/ 23 февраля 2012

В основном я пытаюсь управлять USB-устройством (платой управления линейным приводом), используя прилагаемую DLL (mpusbapi.dll) и файл заголовка (mpusbapi.h). Однако я не могу понять, какие параметры мне нужно передать в MPUSBWrite().

.

В частности, 2-й, 3-й и 4-й параметры MPUSBWrite(). Первый параметр - это дескриптор, возвращаемый MPUSBOpen(), а последний параметр - время ожидания в мс.

У меня есть догадка, это как-то связано со страницей 6 LAC advanced config .

Любая помощь приветствуется. Спасибо!

mpusbapi.h file

#ifndef _MPUSBAPI_H_
#define _MPUSBAPI_H_

#define MPUSB_FAIL                  0
#define MPUSB_SUCCESS               1

#define MP_WRITE                    0
#define MP_READ                     1

// MAX_NUM_MPUSB_DEV is an abstract limitation.
// It is very unlikely that a computer system will have more
// then 127 USB devices attached to it. (single or multiple USB hosts)
#define MAX_NUM_MPUSB_DEV           127

DWORD (*MPUSBGetDLLVersion)(void);

DWORD (*MPUSBGetDeviceCount)(PCHAR pVID_PID);

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

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

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

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

BOOL (*MPUSBClose)(HANDLE handle);

#endif

Файл LACTesting.cpp

#include <windows.h>     // This is a windows header file. The functions I mentioned above are declared here
#include "mpusbapi.h"    // This is the header file supplied. It declares the function prototypes that are defined in the DLL
#include <iostream>
#include "ioctls.h"

using namespace std;

int main(int argc, char* argv)
{
// Try to load the library
HMODULE mpbusDLL = NULL;
mpbusDLL = LoadLibrary(L"mpusbapi.dll");

if (mpbusDLL != NULL) {
    // If the library could be loaded, then load the functions using GetProcAddress()

    // Load the function 'MPUSBOpen' from the DLL
    MPUSBOpen = (HANDLE(*)(DWORD, PCHAR, PCHAR, DWORD, DWORD)) GetProcAddress(mpbusDLL, "_MPUSBOpen");
    MPUSBOpen=(HANDLE(*)(DWORD,PCHAR,PCHAR,DWORD,DWORD))GetProcAddress(mpbusDLL,"_MPUSBOpen");
    MPUSBGetDLLVersion=(DWORD(*)(void))GetProcAddress(mpbusDLL,"_MPUSBGetDLLVersion");
    MPUSBGetDeviceCount=(DWORD(*)(PCHAR))GetProcAddress(mpbusDLL,"_MPUSBGetDeviceCount");
    MPUSBWrite=(DWORD(*)(HANDLE,PVOID,DWORD,PDWORD,DWORD))GetProcAddress(mpbusDLL,"_MPUSBWrite");
    MPUSBRead=(DWORD(*)(HANDLE,PVOID,DWORD,PDWORD,DWORD))GetProcAddress(mpbusDLL,"_MPUSBRead");
    MPUSBReadInt=(DWORD(*)(HANDLE,PVOID,DWORD,PDWORD,DWORD))GetProcAddress(mpbusDLL,"_MPUSBReadInt");
    MPUSBClose=(BOOL(*)(HANDLE))GetProcAddress(mpbusDLL,"_MPUSBClose");
}
//If the DLL didn't load, let me know!
else cout<<"DLL didn't load"<<endl;

//Declarations
HANDLE LACHandle;
PCHAR pipeName=MCHPUSB_PIPE_NAME;// intializes pipeName to "\\MCHP_EP"
PCHAR VidPid="vid_04d8&pid_fc5f";

LACHandle=MPUSBOpen(0,VidPid,pipeName,1,0);//open device connection
                //Not sure if I pass in the correct arguements for MBUSBOpen. VidPid and pipeName are correct.

cout<<"Device ID "<<VidPid<<"is open with "<<MPUSBGetDeviceCount(VidPid)<<" device(s)."<<endl;
//sMPUSBWrite(LACHandle,,3,,1000); <- this is where I am having issues.
                                    //I can't figure out how to use MPUSBWrite
MPUSBClose(LACHandle);// closes device connection

}

1 Ответ

1 голос
/ 23 февраля 2012

Я думаю, вы должны взглянуть на

Типы данных Win32

затем поработайте над примерами системного программирования Windows, тогда вы четко поймете логику.

На ваш вопрос, как я вижу код, который я могу угадать

         // yourData which want to write
         PVOID pData
         // sizeof(yourData)  google "sizeof"
         DWORD dwLen
         /* I have no idea about this, but its output you can see it 
         after running function */               
         PDWORD pLength           

Надеюсь, это поможет

...