질문하신 해당 제조사 자료를 받아보니,
아래와 같더군요.
함수를 노출시킨 것이 아니라, Class를 노출 시켜놓았습니다.
제가 답변드리기에는 내공이 많이 딸립니다.
검색을 해보니 이럴 경우 작업이 많이 필요하더군요.
내공 높으신 분이 답변이 가능한 듯 합니다.
Stupid님 말씀처럼 해당 제품에는 USB를 사용하기 위해서 ftdichip사 제품을 사용한 것으로 보이며,
이 chip과 인터페이스 하기위해서는 Virtual Com Port(VCP) 또는 Direct Interface 방법을 사용할 수 있습니다.
VCP를 사용할 경우에는 일반 시리얼 포트처럼 사용하시면 되지만, 통신 속도가 제한되어 있고
Direct Interface를 사용하기 위해서 보셔야 할 문서가 많습니다.
더 도움을 드리지 못해 죄송합니다. 나이많은 헌 초보자(?)라서요^^
#ifndef _CANPRO_H_
#define _CANPRO_H_
#include<windows.h>
#include<stdio.h>
#include<mmsystem.h>
#include "ftd2xx.h"
#define DEVICE_DESCRIPTION "CANPro Analyzer"
#define FRAME_SIZE 12800
#define START_CHAR ':'
#define ERROR_CHAR '?'
#define END_CHAR 0x0d
typedef enum
{
CAN20A = 0,
CAN20B = 1,
CAN20AB = 2
}ENUM_CAN_MODE;
typedef enum
{
CAN_DATA_FRAME = 0,
CAN_REMOTE_FRAME = 1
}ENUM_CAN_DATA_TYPE;
typedef enum
{
RECEIVE_OK = 0,
CAN_ERROR = 1,
USB_ERROR = 2
}ENUM_RECV;
typedef enum
{
TX_WARNING = 0,
RX_WARNING = 1,
TX_ERROR_PASSIVE = 2,
RX_ERROR_PASSIVE = 3,
BUSOFF_ERROR = 4
}ENUM_ERROR;
typedef enum
{
READ_RECV_ENV = 0,
STOP_RECV_ENV = 1,
START_RECV_ENV = 2
}ENUM_RECV_ENV;
typedef struct
{
BYTE MessageMode; // 0 : CAN2.0A / 1 : CAN2.0B / 2 : CAN2.0A + CAN2.0B
BOOL BusOFFtoReset; // 1 : CAN Bus-Off발생 시 자동으로 CAN Reset 함
BOOL BusOFFtoError; // 1 : CAN Bus-Off발생 시 에러 정보를 알림
BOOL PassiveError; // 1 : CAN 송,수신 Erorr-Passive발생 시 정보를 알림
BOOL WarningError; // 1 : CAN 송,수신 Warning발생 시 정보를 알림
WORD BitTime; // Bit Time
DWORD ID; // 수신 ID
DWORD Mask; // 수신 Mask
}STRUCT_CAN_ENV;
typedef struct
{
BOOL MessageMode; // 0 : CAN2.0A, 1 : CAN2.0B
BOOL MessageType; // 0 : Data Frame, 1 : Remote Frame
int DataSize; // 데이터 사이즈 : 0 ~ 8
DWORD ID; // ID
BYTE Data[8]; // Data
}STRUCT_CAN_DATA;
// CANPro Library Class
class __declspec(dllexport) CCANPro
{
public:
CCANPro();
BOOL InitPort(char *DeviceSerial); // 인자로 받은 시리얼 넘버로 연결
void ClosePort(); // 연결 종료
void SetMessage(HWND *pParent, UINT nMessage); // 데이터받을때 통지할 유저메시지 설정, pParent가 NULL이면 메시지 보내지 않음
void SetBuffer(STRUCT_CAN_DATA *stRecvData); // 데이터받을때 데이터를 넣어둘 구조체버퍼
void PurgePort(); // USB 버퍼 초기화
// 2013. 8. 27
void SetTimeout(int nMsec); // 응답 대기 시간 설정 ( 1 ~ 1000 msec )
// 2012. 6. 28
// Message방식이 아닌 Callback방식으로 CAN데이터수시 할 때 사용
void SetCallbackFunction( void (*pFunction)( BYTE nReceiveType, BYTE nErrorType ) );
BOOL GetDeviceNum(int *nNum); // 현재 연결돼있는 CANPro장비 갯수파악
BOOL GetDeviceSerial(char **Buff); // 현재 연결돼있는 CANPro장비 시리얼번호 얻기(시리얼번호는 8byte)
BOOL SendData(char* szData); // CANPro에 가공없이 보냄
BOOL ReadData(char* szData, int nTimeout); // CANPro에 가공없이 읽어옴, Timeout만큼 기다린다.
BOOL WriteEnv(STRUCT_CAN_ENV *stData); // 환경설정을 쓰는 함수
BOOL ReadEnv(STRUCT_CAN_ENV *stData); // 환경설정을 읽는 함수
BOOL WriteData(STRUCT_CAN_DATA *stData); // 데이터를 쓰는 함수
BOOL RecvEnv(int nCommand, BOOL *bStatus); // 수신설정 함수(수신중인가, 수신시작, 수신정지)
BOOL Reset(); // CANPro Reset
BOOL GetVersion(int *nMajor, int *nMinor); // CANPro Firmware 버전 정보 얻기
protected:
HMODULE m_hModule;
FT_HANDLE m_hUSB;
BOOL m_bLoadDriver;
char m_szSerial[10];
HANDLE m_hThread;
char m_szThreadRxBuff[FRAME_SIZE];
int m_nThreadRxBuffLen;
char m_szThreadTxBuff[FRAME_SIZE];
int m_nThreadTxBuffLen;
HANDLE m_hShutdownEvent;
HANDLE m_hReadEvent;
HANDLE m_hWriteEvent;
HANDLE m_hEventArray[3];
BOOL m_bRecvResponse;
STRUCT_CAN_DATA *m_stRecvData;
HWND* m_pParent;
UINT m_Message;
int m_nTimeout;
// CANPro 데이터수신 또는 에러발생시 호출될 콜백함수형식
// bError - 0 : 정상데이터, 1 : 에러
// nErrorType - ENUM_ERROR에 나열되어있는 에러중 한개
void (*m_pCallback)( BYTE nReceiveType, BYTE nErrorType );
void SendApplication( BYTE nReceiveType, BYTE nErrorType );
void UnloadDriver();
void LoadDriver();
BOOL MakeThread();
BOOL DestroyThread();
static UINT USBThread(LPVOID pParam);
void RecvData();
int MakeCheckSum(char* szData);
};