openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

240 lines
7.9 KiB

// Loader4.cpp
// (c) 2005 National Control Systems, Inc.
// Portions (c) 2004 Drew Technologies, Inc.
// Dynamic J2534 v04.04 dll loader for VB
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to:
// the Free Software Foundation, Inc.
// 51 Franklin Street, Fifth Floor
// Boston, MA 02110-1301, USA
// National Control Systems, Inc.
// 10737 Hamburg Rd
// Hamburg, MI 48139
// 810-231-2901
// Drew Technologies, Inc.
// 7012 E.M -36, Suite 3B
// Whitmore Lake, MI 48189
// 810-231-3171
#define STRICT
#include "stdafx.h"
#include <windows.h>
#include "Loader4.h"
PTOPEN LocalOpen;
PTCLOSE LocalClose;
PTCONNECT LocalConnect;
PTDISCONNECT LocalDisconnect;
PTREADMSGS LocalReadMsgs;
PTWRITEMSGS LocalWriteMsgs;
PTSTARTPERIODICMSG LocalStartPeriodicMsg;
PTSTOPPERIODICMSG LocalStopPeriodicMsg;
PTSTARTMSGFILTER LocalStartMsgFilter;
PTSTOPMSGFILTER LocalStopMsgFilter;
PTSETPROGRAMMINGVOLTAGE LocalSetProgrammingVoltage;
PTREADVERSION LocalReadVersion;
PTGETLASTERROR LocalGetLastError;
PTIOCTL LocalIoctl;
HINSTANCE hDLL = NULL;
//BOOL bIsCorrectVersion = FALSE;
BOOL WINAPI DllMain(HINSTANCE hInstA, DWORD dwReason, LPVOID lpvReserved)
{
switch (dwReason) {
case DLL_PROCESS_ATTACH:
// The DLL is being mapped into the process's address space
case DLL_THREAD_ATTACH:
// A thread is being created
break;
case DLL_THREAD_DETACH:
// A thread is exiting cleanly
break;
case DLL_PROCESS_DETACH:
// The DLL is being unmapped from the process's address space
break;
}
return TRUE;
}
long WINAPI LoadJ2534Dll(char *sLib)
{
long lFuncList = 0;
if (hDLL != NULL) UnloadJ2534Dll();
hDLL = LoadLibraryA (sLib);
if (hDLL == NULL) return ERR_NO_DLL;
LocalOpen = (PTOPEN)(GetProcAddress(hDLL, "PassThruOpen"));
if (LocalOpen == NULL) lFuncList = lFuncList | ERR_NO_PTOPEN;
LocalClose = (PTCLOSE)(GetProcAddress(hDLL, "PassThruClose"));
if (LocalClose == NULL) lFuncList = lFuncList | ERR_NO_PTCLOSE;
LocalConnect = (PTCONNECT)(GetProcAddress(hDLL,"PassThruConnect"));
if (LocalConnect == NULL) lFuncList = lFuncList | ERR_NO_PTCONNECT;
LocalDisconnect = (PTDISCONNECT)(GetProcAddress(hDLL,"PassThruDisconnect"));
if (LocalDisconnect == NULL) lFuncList = lFuncList | ERR_NO_PTDISCONNECT;
LocalReadMsgs = (PTREADMSGS)(GetProcAddress(hDLL,"PassThruReadMsgs"));
if (LocalReadMsgs == NULL) lFuncList = lFuncList | ERR_NO_PTREADMSGS;
LocalWriteMsgs = (PTWRITEMSGS)(GetProcAddress(hDLL,"PassThruWriteMsgs"));
if (LocalWriteMsgs == NULL) lFuncList = lFuncList | ERR_NO_PTWRITEMSGS;
LocalStartPeriodicMsg = (PTSTARTPERIODICMSG)(GetProcAddress(hDLL,"PassThruStartPeriodicMsg"));
if (LocalStartPeriodicMsg == NULL) lFuncList = lFuncList | ERR_NO_PTSTARTPERIODICMSG;
LocalStopPeriodicMsg = (PTSTOPPERIODICMSG)(GetProcAddress(hDLL,"PassThruStopPeriodicMsg"));
if (LocalStopPeriodicMsg == NULL) lFuncList = lFuncList | ERR_NO_PTSTOPPERIODICMSG;
LocalStartMsgFilter = (PTSTARTMSGFILTER)(GetProcAddress(hDLL,"PassThruStartMsgFilter"));
if (LocalStartPeriodicMsg == NULL) lFuncList = lFuncList | ERR_NO_PTSTARTMSGFILTER;
LocalStopMsgFilter = (PTSTOPMSGFILTER)(GetProcAddress(hDLL,"PassThruStopMsgFilter"));
if (LocalStopMsgFilter == NULL) lFuncList = lFuncList | ERR_NO_PTSTOPMSGFILTER;
LocalSetProgrammingVoltage = (PTSETPROGRAMMINGVOLTAGE)(GetProcAddress(hDLL,"PassThruSetProgrammingVoltage"));
if (LocalSetProgrammingVoltage == NULL) lFuncList = lFuncList | ERR_NO_PTSETPROGRAMMINGVOLTAGE;
LocalReadVersion = (PTREADVERSION)(GetProcAddress(hDLL,"PassThruReadVersion"));
if (LocalReadVersion == NULL) lFuncList = lFuncList | ERR_NO_PTREADVERSION;
LocalGetLastError = (PTGETLASTERROR)(GetProcAddress(hDLL,"PassThruGetLastError"));
if (LocalGetLastError == NULL) lFuncList = lFuncList | ERR_NO_PTGETLASTERROR;
LocalIoctl = (PTIOCTL)(GetProcAddress(hDLL,"PassThruIoctl"));
if (LocalIoctl == NULL) lFuncList = lFuncList | ERR_NO_PTIOCTL;
if (lFuncList == ERR_NO_FUNCTIONS) return ERR_WRONG_DLL_VER;
return lFuncList;
}
long WINAPI UnloadJ2534Dll()
{
if (FreeLibrary(hDLL))
{
hDLL = NULL;
LocalOpen = NULL;
LocalClose = NULL;
LocalConnect = NULL;
LocalDisconnect = NULL;
LocalReadMsgs = NULL;
LocalWriteMsgs = NULL;
LocalStartPeriodicMsg = NULL;
LocalStopPeriodicMsg = NULL;
LocalStartMsgFilter = NULL;
LocalStopMsgFilter = NULL;
LocalSetProgrammingVoltage = NULL;
LocalReadVersion = NULL;
LocalGetLastError = NULL;
LocalIoctl = NULL;
return 0;
}
return ERR_NO_DLL;
}
long WINAPI PassThruOpen(void *pName, unsigned long *pDeviceID)
{
if (LocalOpen == NULL) return ERR_FUNC_MISSING;
return LocalOpen(pName, pDeviceID);
}
long WINAPI PassThruClose(unsigned long DeviceID)
{
if (LocalOpen == NULL) return ERR_FUNC_MISSING;
return LocalClose(DeviceID);
}
long WINAPI PassThruConnect(unsigned long DeviceID, unsigned long ProtocolID, unsigned long Flags, unsigned long Baudrate, unsigned long *pChannelID)
{
if (LocalConnect == NULL) return ERR_FUNC_MISSING;
return LocalConnect(DeviceID, ProtocolID, Flags, Baudrate, pChannelID);
}
long WINAPI PassThruDisconnect(unsigned long ChannelID)
{
if (LocalDisconnect == NULL) return ERR_FUNC_MISSING;
return LocalDisconnect(ChannelID);
}
long WINAPI PassThruReadMsgs(unsigned long ChannelID, PASSTHRU_MSG *pMsg, unsigned long *pNumMsgs, unsigned long Timeout)
{
if (LocalReadMsgs == NULL) return ERR_FUNC_MISSING;
return LocalReadMsgs(ChannelID, pMsg, pNumMsgs, Timeout);
}
long WINAPI PassThruWriteMsgs(unsigned long ChannelID, PASSTHRU_MSG *pMsg, unsigned long *pNumMsgs, unsigned long Timeout)
{
if (LocalWriteMsgs == NULL) return ERR_FUNC_MISSING;
return LocalWriteMsgs(ChannelID, pMsg, pNumMsgs, Timeout);
}
long WINAPI PassThruStartPeriodicMsg(unsigned long ChannelID, PASSTHRU_MSG *pMsg, unsigned long *pMsgID, unsigned long TimeInterval)
{
if (LocalStartPeriodicMsg == NULL) return ERR_FUNC_MISSING;
return LocalStartPeriodicMsg(ChannelID, pMsg, pMsgID, TimeInterval);
}
long WINAPI PassThruStopPeriodicMsg(unsigned long ChannelID, unsigned long MsgID)
{
if (LocalStopPeriodicMsg == NULL) return ERR_FUNC_MISSING;
return LocalStopPeriodicMsg(ChannelID, MsgID);
}
long WINAPI PassThruStartMsgFilter(unsigned long ChannelID, unsigned long FilterType,
PASSTHRU_MSG *pMaskMsg, PASSTHRU_MSG *pPatternMsg, PASSTHRU_MSG *pFlowControlMsg, unsigned long *pFilterID)
{
if (LocalStartMsgFilter == NULL) return ERR_FUNC_MISSING;
return LocalStartMsgFilter(ChannelID, FilterType, pMaskMsg, pPatternMsg, pFlowControlMsg, pFilterID);
}
long WINAPI PassThruStopMsgFilter(unsigned long ChannelID, unsigned long FilterID)
{
if (LocalStopMsgFilter == NULL) return ERR_FUNC_MISSING;
return LocalStopMsgFilter(ChannelID, FilterID);
}
long WINAPI PassThruSetProgrammingVoltage(unsigned long DeviceID, unsigned long PinNumber, unsigned long Voltage)
{
if (LocalSetProgrammingVoltage == NULL) return ERR_FUNC_MISSING;
return LocalSetProgrammingVoltage(DeviceID, PinNumber, Voltage);
}
long WINAPI PassThruReadVersion(unsigned long DeviceID, char *pFirmwareVersion, char *pDllVersion, char *pApiVersion)
{
if (LocalReadVersion == NULL) return ERR_FUNC_MISSING;
return LocalReadVersion(DeviceID, pFirmwareVersion, pDllVersion, pApiVersion);
}
long WINAPI PassThruGetLastError(char *pErrorDescription)
{
if (LocalGetLastError == NULL) return ERR_FUNC_MISSING;
return LocalGetLastError(pErrorDescription);
}
long WINAPI PassThruIoctl(unsigned long ChannelID, unsigned long IoctlID, void *pInput, void *pOutput)
{
if (LocalIoctl == NULL) return ERR_FUNC_MISSING;
return LocalIoctl(ChannelID, IoctlID, pInput, pOutput);
}