2012-02-23 2 views
1

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

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

У меня есть подозрение, что это связано со страницей 6 из LAC advance config.

Любая помощь ВОЗМОЖНО высоко ценится. Благодаря!

файл mpusbapi.h

#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

Я думаю, вы должны смотреть на

Win32 Data Types

, тогда работайте над образцами системного программирования 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   

Надеется, что это помогает

+0

Aight круто. Я взгляну. – moesef

+0

поэтому данные, которые я хочу отправить. В соответствии с [LAC Advanced Config] (http://www.firgelli.com/Uploads/LAC_Advanced_Configuration.pdf) стр. 6, он состоит из 3 байтов. Как я понимаю, pData - это буфер, который я отправляю. Как объявить этот буфер? – moesef

+0

Buffer [0] = Buffer управления [1] = Data Low Buffer [2] = Data High, поскольку я вижу, что это массив, что означает, что вы можете использовать указатель для доступа к нему. Вы должны проверить C указатели и массивы http://pw1.netcom.com/~tjensen/ptr/ch2x.htm – Sscheme