diff --git a/CMakeLists.txt b/CMakeLists.txt index 72b017a..d7f18f0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -269,6 +269,7 @@ if(LIBICSNEO_BUILD_ICSNEOLEGACY) api/icsneolegacy/icsneolegacy.cpp api/icsneolegacy/icsneolegacyextra.cpp api/icsneoc/icsneoc.cpp + platform/windows/icsneolegacy.def ) target_include_directories(icsneolegacy PUBLIC diff --git a/api/icsneoc/icsneoc.cpp b/api/icsneoc/icsneoc.cpp index 046a41d..0d0e4d7 100644 --- a/api/icsneoc/icsneoc.cpp +++ b/api/icsneoc/icsneoc.cpp @@ -84,6 +84,9 @@ bool icsneo_serialNumToString(uint32_t num, char* str, size_t* count) { } uint32_t icsneo_serialStringToNum(const char* str) { + if(!str) + return 0; + return Device::SerialStringToNum(str); } diff --git a/api/icsneolegacy/dllhelper/icsneo40DLLAPI.cpp b/api/icsneolegacy/dllhelper/icsneo40DLLAPI.cpp index e7cf697..dafea23 100644 --- a/api/icsneolegacy/dllhelper/icsneo40DLLAPI.cpp +++ b/api/icsneolegacy/dllhelper/icsneo40DLLAPI.cpp @@ -5,6 +5,7 @@ //Basic Functions FINDNEODEVICES icsneoFindNeoDevices; OPENNEODEVICE icsneoOpenNeoDevice; +OPENDEVICE icsneoOpenDevice; CLOSEPORT icsneoClosePort; FREEOBJECT icsneoFreeObject; ////OPENPORTEX icsneoOpenPortEx; @@ -137,6 +138,7 @@ bool LoadDLLAPI(HINSTANCE &hAPIDLL) icsneoFindNeoDevices = (FINDNEODEVICES) GetProcAddress(hAPIDLL, "icsneoFindNeoDevices"); icsneoOpenNeoDevice = (OPENNEODEVICE) GetProcAddress(hAPIDLL, "icsneoOpenNeoDevice"); + icsneoOpenDevice = (OPENDEVICE) GetProcAddress(hAPIDLL, "icsneoOpenDevice"); icsneoClosePort = (CLOSEPORT) GetProcAddress(hAPIDLL, "icsneoClosePort"); icsneoFreeObject = (FREEOBJECT) GetProcAddress(hAPIDLL, "icsneoFreeObject"); //// icsneoOpenPortEx = (OPENPORTEX) GetProcAddress(hAPIDLL, "icsneoOpenPortEx"); @@ -204,7 +206,7 @@ bool LoadDLLAPI(HINSTANCE &hAPIDLL) icsneoEnableDOIPLine = (ENABLEDOIPACTIVATIONLINE)GetProcAddress(hAPIDLL, "icsneoEnableDOIPLine"); - if(!icsneoFindNeoDevices || !icsneoOpenNeoDevice || !icsneoClosePort || !icsneoFreeObject || + if(!icsneoFindNeoDevices || !icsneoOpenNeoDevice || !icsneoOpenDevice || !icsneoClosePort || !icsneoFreeObject || !icsneoTxMessages || !icsneoGetMessages || !icsneoWaitForRxMessagesWithTimeOut || !icsneoGetTimeStampForMsg || !icsneoEnableNetworkRXQueue || !icsneoGetISO15765Status || !icsneoTxMessagesEx || !icsneoSetISO15765RxParameters || !icsneoGetConfiguration || !icsneoSendConfiguration || diff --git a/api/icsneolegacy/dllhelper/icsneo40DLLAPI.h b/api/icsneolegacy/dllhelper/icsneo40DLLAPI.h index aa2b80c..4bed6e0 100644 --- a/api/icsneolegacy/dllhelper/icsneo40DLLAPI.h +++ b/api/icsneolegacy/dllhelper/icsneo40DLLAPI.h @@ -11,6 +11,7 @@ void UnloadDLLAPI(HINSTANCE &hAPIDLL); //Basic Functions typedef int (__stdcall *FINDNEODEVICES)(unsigned long DeviceTypes, NeoDevice *pNeoDevice, int *pNumDevices); typedef int (__stdcall *OPENNEODEVICE)(NeoDevice *pNeoDevice, void * hObject, unsigned char *bNetworkIDs, int bConfigRead, int bSyncToPC); +typedef int (__stdcall *OPENDEVICE)(NeoDeviceEx* pNeoDeviceEx, void** hObject, unsigned char* bNetworkIDs, int bConfigRead, int iOptions, OptionsOpenNeoEx* stOptionsOpenNeoEx, unsigned long reserved); typedef int (__stdcall *CLOSEPORT)(void * hObject, int *pNumberOfErrors); typedef void (__stdcall *FREEOBJECT)(void * hObject); typedef int (__stdcall *OPENPORTEX)(void * lPortNumber, int lPortType, int lDriverType, int lIPAddressMSB, int lIPAddressLSBOrBaudRate, @@ -115,6 +116,7 @@ typedef int (__stdcall *SCRIPTWRITEISO15765TXMESSAGE)(void * hObject, unsigned //Basic Functions extern FINDNEODEVICES icsneoFindNeoDevices; extern OPENNEODEVICE icsneoOpenNeoDevice; +extern OPENDEVICE icsneoOpenDevice; extern CLOSEPORT icsneoClosePort; extern FREEOBJECT icsneoFreeObject; extern SERIALNUMBERTOSTRING icsneoSerialNumberToString; diff --git a/api/icsneolegacy/icsneolegacy.cpp b/api/icsneolegacy/icsneolegacy.cpp index 9097060..3a16fc7 100644 --- a/api/icsneolegacy/icsneolegacy.cpp +++ b/api/icsneolegacy/icsneolegacy.cpp @@ -6,6 +6,7 @@ #define ICSNEOC_MAKEDLL #include "icsneo/icsneolegacy.h" +#include "icsneo/J2534.h" #undef ICSNEOC_MAKEDLL #include "icsneo/icsneoc.h" @@ -26,8 +27,13 @@ using namespace icsneo; typedef uint64_t legacymaphandle_t; static std::map neodevices; -static NeoDevice OldNeoDeviceFromNew(const neodevice_t* newnd) { - NeoDevice oldnd = { 0 }; +static std::map mp_netIDToVnetOffSet = {{NETID_HSCAN, 1}, {NETID_MSCAN, 2}, {NETID_HSCAN2, 18}, {NETID_HSCAN3, 19}, {NETID_HSCAN4, 32}, {NETID_HSCAN5, 33}, {NETID_HSCAN6, 47}, {NETID_HSCAN7, 48}}; +static std::map mp_HWnetIDToCMnetID = {{NETID_HSCAN, 0}, {NETID_MSCAN, 1}, {NETID_HSCAN2, 5}, {NETID_HSCAN3, 8}, {NETID_HSCAN4, 14}, {NETID_HSCAN5, 15}, {NETID_HSCAN6, 32}, {NETID_HSCAN7, 33}}; +static unsigned long vnet_table[] = {0, PLASMA_SLAVE1_OFFSET, PLASMA_SLAVE2_OFFSET}; + +static NeoDevice OldNeoDeviceFromNew(const neodevice_t *newnd) +{ + NeoDevice oldnd = {0}; oldnd.DeviceType = newnd->type; oldnd.SerialNumber = icsneo_serialStringToNum(newnd->serial); oldnd.NumberOfClients = 0; @@ -37,128 +43,241 @@ static NeoDevice OldNeoDeviceFromNew(const neodevice_t* newnd) { return oldnd; } -static void NeoMessageToSpyMessage(const neodevice_t* device, const neomessage_t& newmsg, icsSpyMessage& oldmsg) { +static void NeoMessageToSpyMessage(const neodevice_t *device, const neomessage_t &newmsg, icsSpyMessage &oldmsg) +{ memset(&oldmsg, 0, sizeof(icsSpyMessage)); oldmsg.NumberBytesData = (uint8_t)std::min(newmsg.length, (size_t)255); oldmsg.NumberBytesHeader = 4; oldmsg.ExtraDataPtr = (void*)newmsg.data; - oldmsg.ExtraDataPtrEnabled = newmsg.length > 8 ? 1 :0; + oldmsg.ExtraDataPtrEnabled = newmsg.length > 8 ? 1 : 0; memcpy(oldmsg.Data, newmsg.data, std::min(newmsg.length, (size_t)8)); - oldmsg.ArbIDOrHeader = *(uint32_t*)newmsg.header; + oldmsg.ArbIDOrHeader = *(uint32_t *)newmsg.header; oldmsg.NetworkID = (uint8_t)newmsg.netid; // Note: NetID remapping from the original API is not supported oldmsg.DescriptionID = newmsg.description; oldmsg.StatusBitField = newmsg.status.statusBitfield[0]; oldmsg.StatusBitField2 = newmsg.status.statusBitfield[1]; oldmsg.StatusBitField3 = newmsg.status.statusBitfield[2]; oldmsg.StatusBitField4 = newmsg.status.statusBitfield[3]; - switch(Network::Type(newmsg.type)) { - case Network::Type::CAN: - case Network::Type::SWCAN: - case Network::Type::LSFTCAN: - oldmsg.Protocol = newmsg.status.canfdFDF ? SPY_PROTOCOL_CANFD : SPY_PROTOCOL_CAN; - break; - case Network::Type::Ethernet: - oldmsg.Protocol = SPY_PROTOCOL_ETHERNET; - break; + switch (Network::Type(newmsg.type)) + { + case Network::Type::CAN: + case Network::Type::SWCAN: + case Network::Type::LSFTCAN: + oldmsg.Protocol = newmsg.status.canfdFDF ? SPY_PROTOCOL_CANFD : SPY_PROTOCOL_CAN; + break; + case Network::Type::Ethernet: + oldmsg.Protocol = SPY_PROTOCOL_ETHERNET; + break; } - + // Timestamp - epoch = 1/1/2007 - 25ns per tick most of the time uint64_t t = newmsg.timestamp; uint16_t res = 0; - if (icsneo_getTimestampResolution(device, &res)) { + if (icsneo_getTimestampResolution(device, &res)) + { t /= res; oldmsg.TimeHardware2 = (unsigned long)(t >> 32); oldmsg.TimeHardware = (unsigned long)(t & 0xFFFFFFFF); - switch (res) { - case 25: - oldmsg.TimeStampHardwareID = HARDWARE_TIMESTAMP_ID_NEORED_25NS; - break; - case 10: - oldmsg.TimeStampHardwareID = HARDWARE_TIMESTAMP_ID_NEORED_10NS; - break; - default: - oldmsg.TimeStampHardwareID = HARDWARE_TIMESTAMP_ID_NONE; + switch (res) + { + case 25: + oldmsg.TimeStampHardwareID = HARDWARE_TIMESTAMP_ID_NEORED_25NS; + break; + case 10: + oldmsg.TimeStampHardwareID = HARDWARE_TIMESTAMP_ID_NEORED_10NS; + break; + default: + oldmsg.TimeStampHardwareID = HARDWARE_TIMESTAMP_ID_NONE; } } } -//Basic Functions -int icsneoFindDevices(NeoDeviceEx* devs, int* devCount, unsigned int* devTypes, unsigned int devTypeCount, POptionsFindNeoEx*, unsigned int*) { - constexpr size_t MAX_DEVICES = 255; - if(devCount == nullptr) - return 0; - - unsigned int devTypesDefault[] = { std::numeric_limits::max() }; - if(devTypes == nullptr || devTypeCount == 0) { - devTypes = devTypesDefault; - devTypeCount = 1; - } - - size_t count = MAX_DEVICES; - if(devs == nullptr) { // Size query - icsneo_findAllDevices(nullptr, &count); - *devCount = (int)count; - return 1; - } - - size_t bufferSize = (size_t)*devCount; - if(*devCount < 0 || bufferSize > MAX_DEVICES) - return 0; - - neodevice_t devices[MAX_DEVICES]; - icsneo_findAllDevices(devices, &count); - if(bufferSize < count) - count = bufferSize; - *devCount = (int)count; - - for(size_t i = 0; i < count; i++) { - devs[i] = { OldNeoDeviceFromNew(&devices[i]) }; // Write out into user memory - neodevices[uint64_t(devices[i].handle) << 32 | icsneo_serialStringToNum(devices[i].serial)] = devices[i]; // Fill the look up table - } - - return 1; +static inline bool Within(size_t value, size_t min, size_t max) +{ + return ((min <= value) && (value < max)); } -int icsneoFindNeoDevices(unsigned long DeviceTypes, NeoDevice* pNeoDevice, int* pNumDevices) { +static inline bool IdIsSlaveARange1(size_t fullNetid) +{ + return Within(fullNetid, PLASMA_SLAVE1_OFFSET, PLASMA_SLAVE1_OFFSET + PLASMA_SLAVE_NUM); +} + +static inline bool IdIsSlaveARange2(size_t fullNetid) +{ + return Within(fullNetid, PLASMA_SLAVE1_OFFSET_RANGE2, PLASMA_SLAVE2_OFFSET_RANGE2); +} + +static inline bool IdIsSlaveBRange1(size_t fullNetid) +{ + return Within(fullNetid, PLASMA_SLAVE2_OFFSET, PLASMA_SLAVE2_OFFSET + PLASMA_SLAVE_NUM); +} + +static inline bool IdIsSlaveBRange2(unsigned int fullNetid) +{ + return Within(fullNetid, PLASMA_SLAVE2_OFFSET_RANGE2, PLASMA_SLAVE3_OFFSET_RANGE2); +} + +static inline unsigned int GetVnetNetid(size_t simpleNetId, EPlasmaIonVnetChannel_t vnetSlot) +{ + if (vnetSlot == 0 || vnetSlot > 3) + return simpleNetId; + + return mp_netIDToVnetOffSet[simpleNetId] + vnet_table[vnetSlot]; +} + +/** + * So if you are passing in the offset from PLASMA_SLAVE1_OFFSET or + * the offset from PLASMA_SLAVE1_OFFSET2, return the vnet agnostic + * netid so caller can commonize handlers without caring about WHICH slave. + */ +static inline unsigned int OffsetToSimpleNetworkId(size_t offset) +{ + for (const auto& it : mp_netIDToVnetOffSet) + { + if (it.second == offset) + return it.first; + } + return NETID_DEVICE; +} + +static inline unsigned int GetVnetAgnosticNetid(size_t fullNetid) +{ + if (IdIsSlaveARange1(fullNetid)) + { + unsigned int off = fullNetid - PLASMA_SLAVE1_OFFSET; + return OffsetToSimpleNetworkId(off); + } + else if (IdIsSlaveARange2(fullNetid)) + { + return fullNetid - PLASMA_SLAVE1_OFFSET_RANGE2; + } + else if (IdIsSlaveBRange1(fullNetid)) + { + unsigned int off = fullNetid - PLASMA_SLAVE2_OFFSET; + return OffsetToSimpleNetworkId(off); + } + else if (IdIsSlaveBRange2(fullNetid)) + { + return fullNetid - PLASMA_SLAVE2_OFFSET_RANGE2; + } + return fullNetid; +} + +//Basic Functions +int LegacyDLLExport icsneoFindDevices(NeoDeviceEx *devs, int *devCount, unsigned int *devTypes, unsigned int devTypeCount, POptionsFindNeoEx *POptionsFindNeoEx, unsigned int *zero) +{ + if (!devs) + return 0; + + constexpr size_t MAX_DEVICES = 255; + NeoDevice Nd[MAX_DEVICES]; + int NumDevices = MAX_DEVICES; + + int Count = 0; + + if (!icsneoFindNeoDevices(0, Nd, &NumDevices)) + return 0; + + for (auto i = 0; i < NumDevices; i++) + { + if (devTypes && devTypeCount) + { + for (auto j = 0; j < devTypeCount; j++) + { + if (Nd[i].DeviceType == devTypes[j]) + { + devs[Count++].neoDevice = Nd[i]; + break; + } + } + } + else + { + devs[Count++].neoDevice = Nd[i]; + } + } + + if (devCount) + *devCount = Count; + + return NumDevices > 0; +} + +int LegacyDLLExport icsneoFindNeoDevices(unsigned long DeviceTypes, NeoDevice *pNeoDevice, int *pNumDevices) +{ constexpr size_t MAX_DEVICES = 255; size_t count = MAX_DEVICES; - if(pNumDevices == nullptr) + if (pNumDevices == nullptr) return 0; - if(pNeoDevice == nullptr) { + if (pNeoDevice == nullptr) + { icsneo_findAllDevices(nullptr, &count); *pNumDevices = (int)count; return 1; } size_t bufferSize = (size_t)*pNumDevices; - if(*pNumDevices < 0 || bufferSize > MAX_DEVICES) + if (*pNumDevices < 0 || bufferSize > MAX_DEVICES) return 0; neodevice_t devices[MAX_DEVICES]; icsneo_findAllDevices(devices, &count); - if(bufferSize < count) + if (bufferSize < count) count = bufferSize; *pNumDevices = (int)count; - for(size_t i = 0; i < count; i++) { - pNeoDevice[i] = OldNeoDeviceFromNew(&devices[i]); // Write out into user memory + for (size_t i = 0; i < count; i++) + { + pNeoDevice[i] = OldNeoDeviceFromNew(&devices[i]); // Write out into user memory neodevices[uint64_t(devices[i].handle) << 32 | icsneo_serialStringToNum(devices[i].serial)] = devices[i]; // Fill the look up table } - + return 1; } -int icsneoOpenNeoDevice(NeoDevice* pNeoDevice, void** hObject, unsigned char* bNetworkIDs, int bConfigRead, int bSyncToPC) { - if(pNeoDevice == nullptr || hObject == nullptr) +int LegacyDLLExport icsneoOpenNeoDevice(NeoDevice *pNeoDevice, void **hObject, unsigned char *bNetworkIDs, int bConfigRead, int bSyncToPC) +{ + if (pNeoDevice == nullptr || hObject == nullptr) + return false; + + neodevice_t *device; + try + { + device = &neodevices.at(uint64_t(pNeoDevice->Handle) << 32 | pNeoDevice->SerialNumber); + } + catch (const std::out_of_range&) + { + return false; + } + + *hObject = device; + if (!icsneo_openDevice(device)) + return false; + + return icsneo_setPollingMessageLimit(device, 20000) && icsneo_enableMessagePolling(device) && icsneo_goOnline(device); +} + +int LegacyDLLExport icsneoOpenDevice( + NeoDeviceEx* pNeoDeviceEx, + void** hObject, + unsigned char* bNetworkIDs, + int bConfigRead, + int iOptions, + OptionsOpenNeoEx* stOptionsOpenNeoEx, + unsigned long reserved) +{ + if (pNeoDeviceEx == nullptr || hObject == nullptr) return false; neodevice_t* device; - try { - device = &neodevices.at(uint64_t(pNeoDevice->Handle) << 32 | pNeoDevice->SerialNumber); - } catch(std::out_of_range& e) { - (void)e; // Unused + try + { + device = &neodevices.at(uint64_t(pNeoDeviceEx->neoDevice.Handle) << 32 | pNeoDeviceEx->neoDevice.SerialNumber); + } + catch (const std::out_of_range&) + { return false; } @@ -169,84 +288,98 @@ int icsneoOpenNeoDevice(NeoDevice* pNeoDevice, void** hObject, unsigned char* bN return icsneo_setPollingMessageLimit(device, 20000) && icsneo_enableMessagePolling(device) && icsneo_goOnline(device); } -int icsneoClosePort(void* hObject, int* pNumberOfErrors) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoClosePort(void *hObject, int *pNumberOfErrors) +{ + if (!icsneoValidateHObject(hObject)) return false; - neodevice_t* device = (neodevice_t*)hObject; + neodevice_t *device = (neodevice_t *)hObject; return icsneo_closeDevice(device); } // Memory is now managed automatically, this function is unneeded -void icsneoFreeObject(void* hObject) { (void)hObject; return; } +void LegacyDLLExport icsneoFreeObject(void *hObject) +{ + (void)hObject; + return; +} -int icsneoSerialNumberToString(unsigned long serial, char* data, unsigned long data_size) { +int LegacyDLLExport icsneoSerialNumberToString(unsigned long serial, char *data, unsigned long data_size) +{ size_t length = (size_t)data_size; return icsneo_serialNumToString((uint32_t)serial, data, &length); } //Message Functions -int icsneoGetMessages(void* hObject, icsSpyMessage* pMsg, int* pNumberOfMessages, int* pNumberOfErrors) { +int LegacyDLLExport icsneoGetMessages(void *hObject, icsSpyMessage *pMsg, int *pNumberOfMessages, int *pNumberOfErrors) +{ static neomessage_t messages[20000]; - if(!icsneoValidateHObject(hObject)) + if (!icsneoValidateHObject(hObject)) return false; - neodevice_t* device = (neodevice_t*)hObject; + neodevice_t *device = (neodevice_t *)hObject; size_t messageCount = 20000; - if(!icsneo_getMessages(device, messages, &messageCount, 0)) + if (!icsneo_getMessages(device, messages, &messageCount, 0)) return false; - + *pNumberOfMessages = (int)messageCount; *pNumberOfErrors = 0; - for(size_t i = 0; i < messageCount; i++) + for (size_t i = 0; i < messageCount; i++) NeoMessageToSpyMessage(device, messages[i], pMsg[i]); return true; } -int icsneoTxMessages(void* hObject, icsSpyMessage* pMsg, int lNetworkID, int lNumMessages) { +int LegacyDLLExport icsneoTxMessages(void *hObject, icsSpyMessage *pMsg, int lNetworkID, int lNumMessages) +{ return icsneoTxMessagesEx(hObject, pMsg, lNetworkID, lNumMessages, nullptr, 0); } -int icsneoTxMessagesEx(void* hObject, icsSpyMessage* pMsg, unsigned int lNetworkID, unsigned int lNumMessages, unsigned int* NumTxed, unsigned int zero2) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoTxMessagesEx(void *hObject, icsSpyMessage *pMsg, unsigned int lNetworkID, unsigned int lNumMessages, unsigned int *NumTxed, unsigned int zero2) +{ + if (!icsneoValidateHObject(hObject)) return false; - neodevice_t* device = (neodevice_t*)hObject; + neodevice_t *device = (neodevice_t *)hObject; neomessage_t newmsg; unsigned int temp = 0; - if(NumTxed == nullptr) + if (NumTxed == nullptr) NumTxed = &temp; *NumTxed = 0; - for(unsigned int i = 0; i < lNumMessages; i++) { - const icsSpyMessage& oldmsg = pMsg[i]; + for (unsigned int i = 0; i < lNumMessages; i++) + { + const icsSpyMessage &oldmsg = pMsg[i]; newmsg = {}; newmsg.netid = (uint16_t)lNetworkID; newmsg.description = oldmsg.DescriptionID; memcpy(newmsg.header, &oldmsg.ArbIDOrHeader, sizeof(newmsg.header)); - newmsg.length = oldmsg.NumberBytesData | (oldmsg.NodeID << 8); - if (oldmsg.ExtraDataPtr != nullptr) - newmsg.data = reinterpret_cast(oldmsg.ExtraDataPtr); + if (oldmsg.Protocol != SPY_PROTOCOL_ETHERNET) + newmsg.length = oldmsg.NumberBytesData; + else + newmsg.length = ((oldmsg.NumberBytesHeader & 255) << 8) | (oldmsg.NumberBytesData & 255); + if (oldmsg.ExtraDataPtr != nullptr && oldmsg.ExtraDataPtrEnabled == 1) + newmsg.data = reinterpret_cast(oldmsg.ExtraDataPtr); else newmsg.data = oldmsg.Data; newmsg.status.statusBitfield[0] = oldmsg.StatusBitField; newmsg.status.statusBitfield[1] = oldmsg.StatusBitField2; newmsg.status.statusBitfield[2] = oldmsg.StatusBitField3; newmsg.status.statusBitfield[3] = oldmsg.StatusBitField4; - if(oldmsg.Protocol == SPY_PROTOCOL_CANFD) + if (oldmsg.Protocol == SPY_PROTOCOL_CANFD) newmsg.status.canfdFDF = true; - if(icsneo_transmit(device, &newmsg)) + if (icsneo_transmit(device, &newmsg)) (*NumTxed)++; } return lNumMessages == *NumTxed; } -int icsneoEnableNetworkRXQueue(void* hObject, int iEnable) { +int LegacyDLLExport icsneoEnableNetworkRXQueue(void *hObject, int iEnable) +{ // TODO Implement return false; } -int icsneoGetTimeStampForMsg(void* hObject, icsSpyMessage* pMsg, double* pTimeStamp) { +int LegacyDLLExport icsneoGetTimeStampForMsg(void* hObject, icsSpyMessage* pMsg, double* pTimeStamp) { if(!icsneoValidateHObject(hObject)) return false; neodevice_t* device = (neodevice_t*)hObject; @@ -269,150 +402,169 @@ int icsneoGetTimeStampForMsg(void* hObject, icsSpyMessage* pMsg, double* pTimeSt return true; } -void icsneoGetISO15765Status(void* hObject, int lNetwork, int lClearTxStatus, int lClearRxStatus, int*lTxStatus, int*lRxStatus) { +void LegacyDLLExport icsneoGetISO15765Status(void *hObject, int lNetwork, int lClearTxStatus, int lClearRxStatus, int *lTxStatus, int *lRxStatus) +{ // TODO Implement return; } -void icsneoSetISO15765RxParameters(void* hObject, int lNetwork, int lEnable, spyFilterLong* pFF_CFMsgFilter, icsSpyMessage* pTxMsg, - int lCFTimeOutMs, int lFlowCBlockSize, int lUsesExtendedAddressing, int lUseHardwareIfPresent) { +void LegacyDLLExport icsneoSetISO15765RxParameters(void *hObject, int lNetwork, int lEnable, spyFilterLong *pFF_CFMsgFilter, icsSpyMessage *pTxMsg, + int lCFTimeOutMs, int lFlowCBlockSize, int lUsesExtendedAddressing, int lUseHardwareIfPresent) +{ // TODO Implement return; } //Device Functions -int icsneoGetConfiguration(void* hObject, unsigned char* pData, int* lNumBytes) { +int LegacyDLLExport icsneoGetConfiguration(void *hObject, unsigned char *pData, int *lNumBytes) +{ // 2G devices are not supported in the new API return false; } -int icsneoSendConfiguration(void* hObject, unsigned char* pData, int lNumBytes) { +int LegacyDLLExport icsneoSendConfiguration(void *hObject, unsigned char *pData, int lNumBytes) +{ // 2G devices are not supported in the new API return false; } -int icsneoGetFireSettings(void* hObject, SFireSettings* pSettings, int iNumBytes) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoGetFireSettings(void *hObject, SFireSettings *pSettings, int iNumBytes) +{ + if (!icsneoValidateHObject(hObject)) return false; neodevice_t* device = (neodevice_t*)hObject; return !!(icsneo_settingsReadStructure(device, pSettings, iNumBytes) + 1); } -int icsneoSetFireSettings(void* hObject, SFireSettings* pSettings, int iNumBytes, int bSaveToEEPROM) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoSetFireSettings(void *hObject, SFireSettings *pSettings, int iNumBytes, int bSaveToEEPROM) +{ + if (!icsneoValidateHObject(hObject)) return false; - neodevice_t* device = (neodevice_t*)hObject; - if(bSaveToEEPROM) + neodevice_t *device = (neodevice_t *)hObject; + if (bSaveToEEPROM) return icsneo_settingsApplyStructure(device, pSettings, iNumBytes); return icsneo_settingsApplyStructureTemporary(device, pSettings, iNumBytes); } -int icsneoGetVCAN3Settings(void* hObject, SVCAN3Settings* pSettings, int iNumBytes) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoGetVCAN3Settings(void *hObject, SVCAN3Settings *pSettings, int iNumBytes) +{ + if (!icsneoValidateHObject(hObject)) return false; neodevice_t* device = (neodevice_t*)hObject; return !!(icsneo_settingsReadStructure(device, pSettings, iNumBytes) + 1); } -int icsneoSetVCAN3Settings(void* hObject, SVCAN3Settings* pSettings, int iNumBytes, int bSaveToEEPROM) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoSetVCAN3Settings(void *hObject, SVCAN3Settings *pSettings, int iNumBytes, int bSaveToEEPROM) +{ + if (!icsneoValidateHObject(hObject)) return false; - neodevice_t* device = (neodevice_t*)hObject; - if(bSaveToEEPROM) + neodevice_t *device = (neodevice_t *)hObject; + if (bSaveToEEPROM) return icsneo_settingsApplyStructure(device, pSettings, iNumBytes); return icsneo_settingsApplyStructureTemporary(device, pSettings, iNumBytes); } -int icsneoGetFire2Settings(void* hObject, SFire2Settings* pSettings, int iNumBytes) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoGetFire2Settings(void *hObject, SFire2Settings *pSettings, int iNumBytes) +{ + if (!icsneoValidateHObject(hObject)) return false; neodevice_t* device = (neodevice_t*)hObject; return !!(icsneo_settingsReadStructure(device, pSettings, iNumBytes) + 1); } -int icsneoSetFire2Settings(void* hObject, SFire2Settings* pSettings, int iNumBytes, int bSaveToEEPROM) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoSetFire2Settings(void *hObject, SFire2Settings *pSettings, int iNumBytes, int bSaveToEEPROM) +{ + if (!icsneoValidateHObject(hObject)) return false; - neodevice_t* device = (neodevice_t*)hObject; - if(bSaveToEEPROM) + neodevice_t *device = (neodevice_t *)hObject; + if (bSaveToEEPROM) return icsneo_settingsApplyStructure(device, pSettings, iNumBytes); return icsneo_settingsApplyStructureTemporary(device, pSettings, iNumBytes); } -int icsneoGetVCANRFSettings(void* hObject, SVCANRFSettings* pSettings, int iNumBytes) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoGetVCANRFSettings(void *hObject, SVCANRFSettings *pSettings, int iNumBytes) +{ + if (!icsneoValidateHObject(hObject)) return false; neodevice_t* device = (neodevice_t*)hObject; return !!(icsneo_settingsReadStructure(device, pSettings, iNumBytes) + 1); } -int icsneoSetVCANRFSettings(void* hObject, SVCANRFSettings* pSettings, int iNumBytes, int bSaveToEEPROM) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoSetVCANRFSettings(void *hObject, SVCANRFSettings *pSettings, int iNumBytes, int bSaveToEEPROM) +{ + if (!icsneoValidateHObject(hObject)) return false; - neodevice_t* device = (neodevice_t*)hObject; - if(bSaveToEEPROM) + neodevice_t *device = (neodevice_t *)hObject; + if (bSaveToEEPROM) return icsneo_settingsApplyStructure(device, pSettings, iNumBytes); return icsneo_settingsApplyStructureTemporary(device, pSettings, iNumBytes); } -int icsneoGetVCAN412Settings(void* hObject, SVCAN412Settings* pSettings, int iNumBytes) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoGetVCAN412Settings(void *hObject, SVCAN412Settings *pSettings, int iNumBytes) +{ + if (!icsneoValidateHObject(hObject)) return false; neodevice_t* device = (neodevice_t*)hObject; return !!(icsneo_settingsReadStructure(device, pSettings, iNumBytes) + 1); } -int icsneoSetVCAN412Settings(void* hObject, SVCAN412Settings* pSettings, int iNumBytes, int bSaveToEEPROM) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoSetVCAN412Settings(void *hObject, SVCAN412Settings *pSettings, int iNumBytes, int bSaveToEEPROM) +{ + if (!icsneoValidateHObject(hObject)) return false; - neodevice_t* device = (neodevice_t*)hObject; - if(bSaveToEEPROM) + neodevice_t *device = (neodevice_t *)hObject; + if (bSaveToEEPROM) return icsneo_settingsApplyStructure(device, pSettings, iNumBytes); return icsneo_settingsApplyStructureTemporary(device, pSettings, iNumBytes); } -int icsneoGetRADGalaxySettings(void* hObject, SRADGalaxySettings* pSettings, int iNumBytes) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoGetRADGalaxySettings(void *hObject, SRADGalaxySettings *pSettings, int iNumBytes) +{ + if (!icsneoValidateHObject(hObject)) return false; neodevice_t* device = (neodevice_t*)hObject; return !!(icsneo_settingsReadStructure(device, pSettings, iNumBytes) + 1); } -int icsneoSetRADGalaxySettings(void* hObject, SRADGalaxySettings* pSettings, int iNumBytes, int bSaveToEEPROM) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoSetRADGalaxySettings(void *hObject, SRADGalaxySettings *pSettings, int iNumBytes, int bSaveToEEPROM) +{ + if (!icsneoValidateHObject(hObject)) return false; - neodevice_t* device = (neodevice_t*)hObject; - if(bSaveToEEPROM) + neodevice_t *device = (neodevice_t *)hObject; + if (bSaveToEEPROM) return icsneo_settingsApplyStructure(device, pSettings, iNumBytes); return icsneo_settingsApplyStructureTemporary(device, pSettings, iNumBytes); } -int icsneoGetRADStar2Settings(void* hObject, SRADStar2Settings* pSettings, int iNumBytes) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoGetRADStar2Settings(void *hObject, SRADStar2Settings *pSettings, int iNumBytes) +{ + if (!icsneoValidateHObject(hObject)) return false; neodevice_t* device = (neodevice_t*)hObject; return !!(icsneo_settingsReadStructure(device, pSettings, iNumBytes) + 1); } -int icsneoSetRADStar2Settings(void* hObject, SRADStar2Settings* pSettings, int iNumBytes, int bSaveToEEPROM) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoSetRADStar2Settings(void *hObject, SRADStar2Settings *pSettings, int iNumBytes, int bSaveToEEPROM) +{ + if (!icsneoValidateHObject(hObject)) return false; - neodevice_t* device = (neodevice_t*)hObject; - if(bSaveToEEPROM) + neodevice_t *device = (neodevice_t *)hObject; + if (bSaveToEEPROM) return icsneo_settingsApplyStructure(device, pSettings, iNumBytes); return icsneo_settingsApplyStructureTemporary(device, pSettings, iNumBytes); } -int icsneoSetBitRate(void* hObject, int BitRate, int NetworkID) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoSetBitRate(void *hObject, int BitRate, int NetworkID) +{ + if (!icsneoValidateHObject(hObject)) return false; - neodevice_t* device = (neodevice_t*)hObject; - if(!icsneo_setBaudrate(device, (uint16_t)NetworkID, BitRate)) + neodevice_t *device = (neodevice_t *)hObject; + if (!icsneo_setBaudrate(device, (uint16_t)NetworkID, BitRate)) return false; return icsneo_settingsApply(device); } -int icsneoSetFDBitRate(void* hObject, int BitRate, int NetworkID) { +int LegacyDLLExport icsneoSetFDBitRate(void* hObject, int BitRate, int NetworkID) { if(!icsneoValidateHObject(hObject)) return false; neodevice_t* device = (neodevice_t*)hObject; @@ -421,169 +573,630 @@ int icsneoSetFDBitRate(void* hObject, int BitRate, int NetworkID) { return icsneo_settingsApply(device); } -int icsneoGetDeviceParameters(void* hObject, char* pParameter, char* pValues, short ValuesLength) { +int LegacyDLLExport icsneoGetDeviceParameters(void* hObject, char* pParameter, char* pValues, short ValuesLength) { // TODO Implement return false; } -int icsneoSetDeviceParameters(void* hObject, char* pParmValue, int* pErrorIndex, int bSaveToEEPROM) { +int LegacyDLLExport icsneoSetDeviceParameters(void *hObject, char *pParmValue, int *pErrorIndex, int bSaveToEEPROM) +{ // TODO Implement return false; } //Error Functions -int icsneoGetLastAPIError(void* hObject, unsigned long* pErrorNumber) { +int LegacyDLLExport icsneoGetLastAPIError(void *hObject, unsigned long *pErrorNumber) +{ // TODO Implement return false; } -int icsneoGetErrorMessages(void* hObject, int* pErrorMsgs, int* pNumberOfErrors) { +int LegacyDLLExport icsneoGetErrorMessages(void *hObject, int *pErrorMsgs, int *pNumberOfErrors) +{ // TODO Implement return false; } -int icsneoGetErrorInfo(int lErrorNumber, TCHAR* szErrorDescriptionShort, TCHAR* szErrorDescriptionLong, int* lMaxLengthShort, int* lMaxLengthLong, int* lErrorSeverity, int* lRestartNeeded) { +int LegacyDLLExport icsneoGetErrorInfo(int lErrorNumber, TCHAR *szErrorDescriptionShort, TCHAR *szErrorDescriptionLong, int *lMaxLengthShort, int *lMaxLengthLong, int *lErrorSeverity, int *lRestartNeeded) +{ // TODO Implement return false; } //ISO15765-2 Functions -int icsneoISO15765_EnableNetworks(void* hObject, unsigned long ulNetworks) { +int LegacyDLLExport icsneoISO15765_EnableNetworks(void *hObject, unsigned long ulNetworks) +{ // TODO Implement return false; } -int icsneoISO15765_DisableNetworks(void* hObject) { +int LegacyDLLExport icsneoISO15765_DisableNetworks(void *hObject) +{ // TODO Implement return false; } -int icsneoISO15765_TransmitMessage(void* hObject, unsigned long ulNetworkID, stCM_ISO157652_TxMessage* pMsg, unsigned long ulBlockingTimeout) { +int LegacyDLLExport icsneoISO15765_TransmitMessage(void *hObject, unsigned long ulNetworkID, stCM_ISO157652_TxMessage *pMsg, unsigned long ulBlockingTimeout) +{ // TODO Implement return false; } -int icsneoISO15765_ReceiveMessage(void* hObject, int ulNetworkID, stCM_ISO157652_RxMessage* pMsg) { +int LegacyDLLExport icsneoISO15765_ReceiveMessage(void *hObject, int ulNetworkID, stCM_ISO157652_RxMessage *pMsg) +{ // TODO Implement return false; } //General Utility Functions -int icsneoValidateHObject(void* hObject) { - for(auto it = neodevices.begin(); it != neodevices.end(); it++) { - if(&it->second == hObject) { - neodevice_t* device = (neodevice_t*)hObject; - if(icsneo_isValidNeoDevice(device)) +int LegacyDLLExport icsneoValidateHObject(void *hObject) +{ + for (auto it = neodevices.begin(); it != neodevices.end(); it++) + { + if (&it->second == hObject) + { + neodevice_t *device = (neodevice_t *)hObject; + if (icsneo_isValidNeoDevice(device)) return true; } } - + return false; } -int icsneoGetDLLVersion(void) { +int LegacyDLLExport icsneoGetDLLVersion(void) +{ return 804; } -int icsneoGetSerialNumber(void* hObject, unsigned int*iSerialNumber) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoGetSerialNumber(void *hObject, unsigned int *iSerialNumber) +{ + if (!icsneoValidateHObject(hObject)) return false; - neodevice_t* device = (neodevice_t*)hObject; + neodevice_t *device = (neodevice_t *)hObject; *iSerialNumber = icsneo_serialStringToNum(device->serial); return true; } -int icsneoEnableDOIPLine(void* hObject, bool enable) { +int LegacyDLLExport icsneoEnableDOIPLine(void* hObject, bool enable) +{ if(!icsneoValidateHObject(hObject)) return false; neodevice_t* device = (neodevice_t*)hObject; return icsneo_setDigitalIO(device, ICSNEO_IO_ETH_ACTIVATION, 1, enable); } -int icsneoStartSockServer(void* hObject, int iPort) { +int LegacyDLLExport icsneoStartSockServer(void* hObject, int iPort) +{ // TODO Implement return false; } -int icsneoStopSockServer(void* hObject) { +int LegacyDLLExport icsneoStopSockServer(void *hObject) +{ // TODO Implement return false; } //CoreMini Script functions -int icsneoScriptStart(void* hObject, int iLocation) { +int LegacyDLLExport icsneoScriptStart(void *hObject, int iLocation) +{ // TODO Implement return false; } -int icsneoScriptStop(void* hObject) { +int LegacyDLLExport icsneoScriptStop(void *hObject) +{ // TODO Implement return false; } -int icsneoScriptLoad(void* hObject, const unsigned char* bin, unsigned long len_bytes, int iLocation) { +int LegacyDLLExport icsneoScriptLoad(void *hObject, const unsigned char *bin, unsigned long len_bytes, int iLocation) +{ // TODO Implement return false; } -int icsneoScriptClear(void* hObject, int iLocation) { +int LegacyDLLExport icsneoScriptClear(void *hObject, int iLocation) +{ // TODO Implement return false; } -int icsneoScriptStartFBlock(void* hObject,unsigned int fb_index) { +int LegacyDLLExport icsneoScriptStartFBlock(void *hObject, unsigned int fb_index) +{ // TODO Implement return false; } -int icsneoScriptGetFBlockStatus(void* hObject, unsigned int fb_index, int* piRunStatus) { +int LegacyDLLExport icsneoScriptGetFBlockStatus(void *hObject, unsigned int fb_index, int *piRunStatus) +{ // TODO Implement return false; } -int icsneoScriptStopFBlock(void* hObject,unsigned int fb_index) { +int LegacyDLLExport icsneoScriptStopFBlock(void *hObject, unsigned int fb_index) +{ // TODO Implement return false; } -int icsneoScriptGetScriptStatus(void* hObject, int* piStatus) { +int LegacyDLLExport icsneoScriptGetScriptStatus(void *hObject, int *piStatus) +{ // TODO Implement return false; } -int icsneoScriptReadAppSignal(void* hObject, unsigned int iIndex, double*dValue) { +int LegacyDLLExport icsneoScriptReadAppSignal(void *hObject, unsigned int iIndex, double *dValue) +{ // TODO Implement return false; } -int icsneoScriptWriteAppSignal(void* hObject, unsigned int iIndex, double dValue) { +int LegacyDLLExport icsneoScriptWriteAppSignal(void *hObject, unsigned int iIndex, double dValue) +{ // TODO Implement return false; } //Deprecated (but still suppored in the DLL) -int icsneoOpenPortEx(void* lPortNumber, int lPortType, int lDriverType, int lIPAddressMSB, int lIPAddressLSBOrBaudRate, int bConfigRead, unsigned char* bNetworkID, int* hObject) { +int LegacyDLLExport icsneoOpenPortEx(void *lPortNumber, int lPortType, int lDriverType, int lIPAddressMSB, int lIPAddressLSBOrBaudRate, int bConfigRead, unsigned char *bNetworkID, int *hObject) +{ // TODO Implement return false; } -int icsneoOpenPort(int lPortNumber, int lPortType, int lDriverType, unsigned char* bNetworkID, unsigned char* bSCPIDs, int* hObject) { +int LegacyDLLExport icsneoOpenPort(int lPortNumber, int lPortType, int lDriverType, unsigned char *bNetworkID, unsigned char *bSCPIDs, int *hObject) +{ // TODO Implement return false; } -int icsneoEnableNetworkCom(void* hObject, int Enable) { - if(!icsneoValidateHObject(hObject)) +int LegacyDLLExport icsneoEnableNetworkCom(void *hObject, int Enable) +{ + if (!icsneoValidateHObject(hObject)) return false; - neodevice_t* device = (neodevice_t*)hObject; + neodevice_t *device = (neodevice_t *)hObject; - if(Enable) + if (Enable) return icsneo_goOnline(device); else return icsneo_goOffline(device); } -int icsneoFindAllCOMDevices(int lDriverType, int lGetSerialNumbers, int lStopAtFirst, int lUSBCommOnly, int* p_lDeviceTypes, int* p_lComPorts, int* p_lSerialNumbers, int*lNumDevices) { +int LegacyDLLExport icsneoFindAllCOMDevices(int lDriverType, int lGetSerialNumbers, int lStopAtFirst, int lUSBCommOnly, int *p_lDeviceTypes, int *p_lComPorts, int *p_lSerialNumbers, int *lNumDevices) +{ // TODO Implement return false; } + +int LegacyDLLExport icsneoOpenNeoDeviceByChannels(NeoDevice *pNeoDevice, void **hObject, unsigned char *uChannels, int iSize, int bConfigRead, int iOptions) +{ + // TODO Implement + return false; +} + +int LegacyDLLExport icsneoGetVCAN4Settings(void *hObject, SVCAN4Settings *pSettings, int iNumBytes) +{ + if (!icsneoValidateHObject(hObject)) + return false; + neodevice_t *device = (neodevice_t *)hObject; + return !!icsneo_settingsReadStructure(device, pSettings, iNumBytes); +} + +int LegacyDLLExport icsneoSetVCAN4Settings(void *hObject, SVCAN4Settings *pSettings, int iNumBytes, int bSaveToEEPROM) +{ + if (!icsneoValidateHObject(hObject)) + return false; + neodevice_t *device = (neodevice_t *)hObject; + if (bSaveToEEPROM) + return icsneo_settingsApplyStructure(device, pSettings, iNumBytes); + return icsneo_settingsApplyStructureTemporary(device, pSettings, iNumBytes); +} + +int LegacyDLLExport icsneoGetDeviceSettingsType(void *hObject, EPlasmaIonVnetChannel_t vnetSlot, EDeviceSettingsType *pDeviceSettingsType) +{ + if (!icsneoValidateHObject(hObject)) + return false; + + neodevice_t *device = (neodevice_t *)hObject; + + unsigned long ulDeviceType = device->type; + + if (pDeviceSettingsType == nullptr) + return 0; + + if ((PlasmaIonVnetChannelMain != vnetSlot) && (ulDeviceType != NEODEVICE_PLASMA) && (ulDeviceType != NEODEVICE_ION)) + return 0; + + switch (ulDeviceType) + { + case NEODEVICE_PLASMA: + case NEODEVICE_ION: + *pDeviceSettingsType = DeviceFire2SettingsType; //defaults to FIRE2 vnets with libicsneo - no firevnets! + break; + case NEODEVICE_VCAN3: + *pDeviceSettingsType = DeviceVCAN3SettingsType; + break; + case NEODEVICE_FIRE: + *pDeviceSettingsType = DeviceFireSettingsType; + break; + case NEODEVICE_FIRE2: + *pDeviceSettingsType = DeviceFire2SettingsType; + break; + case NEODEVICE_RADGALAXY: + *pDeviceSettingsType = DeviceRADGalaxySettingsType; + break; + case NEODEVICE_RADSTAR2: + *pDeviceSettingsType = DeviceRADStar2SettingsType; + break; + case NEODEVICE_VCAN44: + case NEODEVICE_VCAN42_EL: + *pDeviceSettingsType = DeviceVCAN4SettingsType; + break; + case NEODEVICE_VCAN41: + case NEODEVICE_VCAN42: + *pDeviceSettingsType = DeviceVCAN412SettingsType; + break; + case NEODEVICE_VIVIDCAN: + *pDeviceSettingsType = DeviceVividCANSettingsType; + break; + case NEODEVICE_ECU_AVB: + *pDeviceSettingsType = DeviceECU_AVBSettingsType; + break; + case NEODEVICE_RADSUPERMOON: + *pDeviceSettingsType = DeviceRADSuperMoonSettingsType; + break; + case NEODEVICE_RADMOON2: + *pDeviceSettingsType = DeviceRADMoon2SettingsType; + break; + case NEODEVICE_RADGIGALOG: + *pDeviceSettingsType = DeviceRADGigalogSettingsType; + break; + default: + return 0; + } + + return 1; +} + +int LegacyDLLExport icsneoSetDeviceSettings(void *hObject, SDeviceSettings *pSettings, int iNumBytes, int bSaveToEEPROM, EPlasmaIonVnetChannel_t vnetSlot) +{ + if (!icsneoValidateHObject(hObject)) + return false; + + neodevice_t *device = (neodevice_t *)hObject; + + if (bSaveToEEPROM) + return icsneo_settingsApplyStructure(device, pSettings, iNumBytes); + + return icsneo_settingsApplyStructureTemporary(device, pSettings, iNumBytes); +} + +int LegacyDLLExport icsneoGetDeviceSettings(void *hObject, SDeviceSettings *pSettings, int iNumBytes, EPlasmaIonVnetChannel_t vnetSlot) +{ + if (!icsneoValidateHObject(hObject)) + return false; + + neodevice_t *device = (neodevice_t *)hObject; + + return !!icsneo_settingsReadStructure(device, pSettings, iNumBytes); +} + +int LegacyDLLExport icsneoSetBitRateEx(void *hObject, unsigned long BitRate, int NetworkID, int iOptions) +{ + if (!icsneoValidateHObject(hObject)) + return false; + neodevice_t *device = (neodevice_t *)hObject; + if (!icsneo_setBaudrate(device, (uint16_t)NetworkID, BitRate)) + return false; + + bool bSaveToEEPROM = iOptions & 0x1; + + if (bSaveToEEPROM) + return icsneo_settingsApply(device); + else + return icsneo_settingsApplyTemporary(device); +} + +int LegacyDLLExport icsneoEnableNetworkComEx(void *hObject, int iEnable, int iNetId) +{ + return icsneoEnableNetworkCom(hObject, iEnable); +} + +int LegacyDLLExport icsneoForceFirmwareUpdate(void *hObject) +{ + return false; +} + +int LegacyDLLExport icsneoGetHWFirmwareInfo(void *hObject, stAPIFirmwareInfo *pInfo) +{ + return false; +} + +int LegacyDLLExport icsneoSetUSBLatency(NeoDevice *pNeoDevice, unsigned long LatencyVal) +{ + return false; +} + +/** + * @fn unsigned int _stdcall icsneoGetCANControllerClockFrequency(int hObject, + * int lNetworkID) + * + * @brief Gets the CAN Controller clock frequency of a specified CAN + * network. For most cases this is 20Mhz (40 MIPS/2). The clock frequency + * is dependent on the network and product. This function is necessary when + * computing the time quanta parameters of a CAN network, specifically the + * Bit Rate Prescaler (BRP). As a general rule if you are using + * icsneoSetCANParameters then you should also be calling this function. + * + * @param hObject Handle to Hardware, see OpenNeoDevice. + * @param lNetworkID The CAN network to retrieve Clock period from. + * + * @return Clock Period of specified CAN Controller, or 0 if input + * parameters are invalid. + */ +unsigned int LegacyDLLExport icsneoGetCANControllerClockFrequency(void* hObject, int lNetworkID) +{ + return false; +} + +/** +* @fn int _stdcall icsneoSetCANParameters(int hObject, +* unsigned int baudRatePrescaler, unsigned int propagationTqs, +* unsigned int phase1Tqs, unsigned int phase2Tqs, +* unsigned int syncJumpWidthTqs, unsigned int optionBits, int lNetworkID) +* +* @brief Sets the timing parameters of a specific CAN network. +* +* @param hObject Handle to Hardware, see OpenNeoDevice. +* @param baudRatePrescaler The baud rate prescaler[1-63]. Zero is +* invalid. +* @param propagationTqs The propagation delay in time quantas. +* @param phase1Tqs The phase 1 segment in time quantas. +* @param phase2Tqs The phase 2 segment in time quantas. +* @param syncJumpWidthTqs The synchronisation jump width in time +* quantas. +* @param optionBits Reserved, set to zero. +* @param lNetworkID The CAN network to retrieve Clock period +* from. +* +* @return 1 iff successful, 0 otherwise. +*/ +int LegacyDLLExport icsneoSetCANParameters(void* hObject, + unsigned int baudRatePrescaler, + unsigned int propagationTqs, + unsigned int phase1Tqs, + unsigned int phase2Tqs, + unsigned int syncJumpWidthTqs, + unsigned int optionBits, + int lNetworkID) +{ + return false; +} + +int LegacyDLLExport icsneoSetCANParametersPhilipsSJA1000(void* hObject, + unsigned int btr0, + unsigned int btr1, + unsigned int optionBits, + int lNetworkID) +{ + return false; +} + +int LegacyDLLExport icsneoEnableBitSmash(void *hObject, + int netId, + unsigned int numWaitBits, + unsigned int numSmashBits, + unsigned int numFrames, + unsigned int timeout_ms, + unsigned int optionBits, + unsigned int numArbIds, + unsigned int arbIds[MAX_BIT_SMASH_ARBIDS]) +{ + return false; +} + +int LegacyDLLExport icsneoDisableBitSmash(void *hObject, unsigned int reservedZero) +{ + return false; +} + +int LegacyDLLExport icsneoSendHWTimeRequest(void *hObject) +{ + return false; +} + +int LegacyDLLExport icsneoReceiveHWTimeResponse(void *hObject, double *TimeHardware, unsigned long TimeOut) +{ + return false; +} + +int LegacyDLLExport icsneoGetDLLFirmwareInfo(void *hObject, stAPIFirmwareInfo *pInfo) +{ + return false; +} + +int LegacyDLLExport icsneoGetDLLFirmwareInfoEx(void *hObject, stAPIFirmwareInfo *pInfo, EPlasmaIonVnetChannel_t vnetSlot) +{ + return false; +} + +int LegacyDLLExport icsneoJ2534Cmd(void *hObject, unsigned char *CmdBuf, short Len, void *pVoid) +{ + unsigned long *pTmp = nullptr; + int iRetVal = 0, iNumBytes = 0, NetworkID; + + if (!icsneoValidateHObject(hObject)) + return false; + + neodevice_t *device = (neodevice_t *)hObject; + + switch (*CmdBuf) + { + case J2534NVCMD_SetNetworkBaudRate: + + pTmp = (uint64_t *)&CmdBuf[1]; + NetworkID = (uint16_t)*pTmp; + pTmp = (uint64_t *)&CmdBuf[5]; + + if (!icsneo_setBaudrate(device, NetworkID, *pTmp) && !icsneo_settingsApply(device)) + iRetVal = 0; + break; + + case J2534NVCMD_GetNetworkBaudRate: + + pTmp = (uint64_t *)&CmdBuf[1]; + NetworkID = (uint16_t)*pTmp; + pTmp = (uint64_t *)&CmdBuf[5]; + + //Ignoring 2G hardwares here - CmdBuf[9] + *pTmp = icsneo_getBaudrate(device, NetworkID); + break; + + case J2534NVCMD_SetCANFDRate: + + pTmp = (uint64_t *)&CmdBuf[1]; + NetworkID = (uint16_t)*pTmp; + pTmp = (uint64_t *)&CmdBuf[5]; + + //Ignoring 2G hardwares here - CmdBuf[9] + if (!icsneo_setFDBaudrate(device, NetworkID, *pTmp) && !icsneo_settingsApply(device)) + iRetVal = 0; + break; + + case J2534NVCMD_GetCANFDRate: + + pTmp = (uint64_t *)&CmdBuf[1]; + NetworkID = (uint16_t)*pTmp; + pTmp = (uint64_t *)&CmdBuf[5]; + + //Ignoring 2G hardwares here - CmdBuf[9] + *pTmp = icsneo_getFDBaudrate(device, NetworkID); + break; + + case J2534NVCMD_GetCANFDTermination: + + pTmp = (uint64_t *)&CmdBuf[1]; + NetworkID = (uint16_t)*pTmp; + pTmp = (uint64_t *)&CmdBuf[5]; + + switch (device->type) + { + case NEODEVICE_FIRE2: + case NEODEVICE_PLASMA: //FIRE2 VNETS + case NEODEVICE_ION: //FIRE2 VNETS + SFire2Settings Cs; + iNumBytes = sizeof(Cs); + if (!!icsneoGetFire2Settings(hObject, &Cs, iNumBytes)) + (Cs.termination_enables & (1ull << mp_HWnetIDToCMnetID[GetVnetAgnosticNetid(NetworkID)])) ? *pTmp = 3 /*Termination ON*/ : *pTmp = 0 /*Termination OFF*/; + else + iRetVal = 0; + break; + } + break; + + case J2534NVCMD_SetCANFDTermination: + + pTmp = (uint64_t *)&CmdBuf[1]; + NetworkID = (uint16_t)*pTmp; + pTmp = (uint64_t *)&CmdBuf[5]; + + switch (device->type) + { + case NEODEVICE_FIRE2: + case NEODEVICE_PLASMA: + case NEODEVICE_ION: + SFire2Settings Cs; + iNumBytes = sizeof(Cs); + if (icsneoGetFire2Settings(hObject, &Cs, iNumBytes)) + { + unsigned long long CoremininetID = mp_HWnetIDToCMnetID[GetVnetAgnosticNetid(NetworkID)]; + + if (*pTmp == 3) /*Termination ON*/ + Cs.termination_enables |= (1ull << CoremininetID); + else /*Termination OFF*/ + Cs.termination_enables &= ~(1ull << CoremininetID); + + iRetVal = icsneoSetFire2Settings(hObject, &Cs, iNumBytes, 1 /* ConfigurationOptionDoNotSaveToEEPROM */); + } + break; + } + break; + + default: + break; + } + return iRetVal; +} + +int LegacyDLLExport icsneoSendRawCmds(void *hObject, icsneoVICommand *pCmdMsgs, int lNumOfCmds) +{ + return false; +} + +int LegacyDLLExport icsneoEnableBusVoltageMonitor(void *hObject, unsigned int enable, unsigned int reserved) +{ + return false; +} + +int LegacyDLLExport icsneoISO15765_TransmitMessageEx(void *hObject, + unsigned long ulNetworkID, + ISO15765_2015_TxMessage *pMsg, + unsigned long ulBlockingTimeout) +{ + return false; +} + +int LegacyDLLExport icsneoGetBusVoltage(void *hObject, unsigned long *pVBusVoltage, unsigned int reserved) +{ + return false; +} + +int LegacyDLLExport icsneoOpenRemoteNeoDevice(const char *pIPAddress, + NeoDevice *pNeoDevice, + void **hObject, + unsigned char *bNetworkIDs, + int iOptions) +{ + return false; +} + +int LegacyDLLExport icsneoFindRemoteNeoDevices(const char *pIPAddress, NeoDevice *pNeoDevice, int *pNumDevices) +{ + return false; +} + +int LegacyDLLExport icsneoFirmwareUpdateRequired(void *hObject) +{ + return false; +} + +void LegacyDLLExport icsneoGetDLLVersionEx(unsigned long *dwMSVersion, unsigned long *dwLSVersion) +{ + return; +} + +int LegacyDLLExport icsneoGetNetidforSlaveVNETs(size_t *NetworkIndex, EPlasmaIonVnetChannel_t vnetSlot) +{ + return GetVnetNetid(*NetworkIndex, vnetSlot); +} + +int LegacyDLLExport icsneoGetVnetSimpleNetid(size_t *FullNetID) +{ + return GetVnetAgnosticNetid(*FullNetID); +} + +int LegacyDLLExport icsneoSerialNumberFromString(unsigned long *serial, char *data) +{ + if (serial == nullptr) + return false; + + *serial = icsneo_serialStringToNum(data); + return false; +} + +int LegacyDLLExport icsneoGetMiniportAdapterInfo(void *hObject, NETWORK_ADAPTER_INFO *aInfo) +{ + return false; +} diff --git a/api/icsneolegacy/icsneolegacyextra.cpp b/api/icsneolegacy/icsneolegacyextra.cpp index ffff4d2..0c33b29 100644 --- a/api/icsneolegacy/icsneolegacyextra.cpp +++ b/api/icsneolegacy/icsneolegacyextra.cpp @@ -14,11 +14,11 @@ using namespace icsneo; extern "C" { -extern int DLLExport icsneoValidateHObject(void* hObject); -extern int DLLExport icsneoWaitForRxMessagesWithTimeOut(void* hObject, unsigned int iTimeOut); +extern int LegacyDLLExport icsneoValidateHObject(void* hObject); +extern int LegacyDLLExport icsneoWaitForRxMessagesWithTimeOut(void* hObject, unsigned int iTimeOut); } -int icsneoWaitForRxMessagesWithTimeOut(void* hObject, unsigned int iTimeOut) { +int LegacyDLLExport icsneoWaitForRxMessagesWithTimeOut(void* hObject, unsigned int iTimeOut) { if(!icsneoValidateHObject(hObject)) return false; neodevice_t* device = (neodevice_t*)hObject; diff --git a/include/icsneo/J2534.h b/include/icsneo/J2534.h new file mode 100644 index 0000000..e225dfe --- /dev/null +++ b/include/icsneo/J2534.h @@ -0,0 +1,33 @@ +#ifndef _J2534_H +#define _J2534_H + +//J2534 Commands +#define J1534_NUM_PERIOD_TX_MSGS 128 +#define J1534_NUM_PERIOD_RX_MSGS 128 +#define J2534NVCMD_SetISJ2534 0 +#define J2534NVCMD_SetISO5Baud 1 +#define J2534NVCMD_SetISOFastInit 2 +#define J2534NVCMD_SetISOCheckSum 3 +#define J2534NVCMD_SetISO9141Parms 4 +#define J2534NVCMD_GetISO9141Parms 5 +#define J2534NVCMD_ISO9141APIChkSum 6 +#define J2534NVCMD_SetNetworkBaudRate 7 +#define J2534NVCMD_GetNetworkBaudRate 8 +#define J2534NVCMD_EnableTransmitEvent 9 +#define J2534NVCMD_SetTransmitEvent 10 +#define J2534NVCMD_BlueEnableStopFilters 11 +#define J2534NVCMD_Blue15765HWSupport 12 +#define J2534NVCMD_GetTXBufferInfo 13 +#define J2534NVCMD_GetEncryptionKey 14 +#define J2534NVCMD_SetMiscIOForVBATT 15 +#define J2534NVCMD_EnableISO_KW_Network 16 +#define J2534NVCMD_SetJ1708CheckSum 17 +#define J2534NVCMD_GetTimestamp 18 +#define J2534NVCMD_GetCANFDRate 19 +#define J2534NVCMD_SetCANFDRate 20 +#define J2534NVCMD_GetCANFDTermination 21 +#define J2534NVCMD_SetCANFDTermination 22 +#define J2534NVCMD_GetCANFDFormat 23 +#define J2534NVCMD_SetCANFDFormat 24 + +#endif diff --git a/include/icsneo/communication/command.h b/include/icsneo/communication/command.h index 62599b2..e053062 100644 --- a/include/icsneo/communication/command.h +++ b/include/icsneo/communication/command.h @@ -18,6 +18,9 @@ enum class Command : uint8_t { GetSecondaryVersions = 0xA9, // Previously known as RED_CMD_PERIPHERALS_APP_VERSION_REQ, versions other than the main chip RequestStatusUpdate = 0xBC, ReadSettings = 0xC7, // Previously known as 3G_READ_SETTINGS_EX + SetVBattMonitor = 0xDB, // Previously known as RED_CMD_CM_VBATT_MONITOR + RequestBitSmash = 0xDC, // Previously known as RED_CMD_CM_BITSMASH + GetVBattReq = 0xDF, // Previously known as RED_CMD_VBATT_REQUEST MiscControl = 0xE7, FlexRayControl = 0xF3 }; diff --git a/include/icsneo/icsnVC40.h b/include/icsneo/icsnVC40.h index 49de417..97416d6 100644 --- a/include/icsneo/icsnVC40.h +++ b/include/icsneo/icsnVC40.h @@ -1965,6 +1965,7 @@ typedef enum _EDeviceSettingsType DeviceECU_AVBSettingsType, DeviceRADSuperMoonSettingsType, DeviceRADMoon2SettingsType, + DeviceRADGigalogSettingsType, // // add new settings type here // ... @@ -2421,6 +2422,17 @@ typedef union { icsFire2DeviceStatus fire2Status; icsVcan4DeviceStatus vcan4Status; } icsDeviceStatus; + +typedef struct +{ + int8_t szName[128]; //Adaptor name - ASCII Null terminated + int8_t szDeviceName[64]; //Device name - ASCII Null terminated + uint32_t Status; //Adaptor Status, 0 for disabled, 1 for enabled + uint8_t bMAC_Address[6]; // The Media Access Control (MAC) Address of the Network interface in the PC that is to be connected to the vehicle. + uint8_t bIPV6_Address[16]; //The Ipv6 address assigned to the Network interface. No compressed or short form notation// If not available, all bytes are set to zero to imply the absence of an address. + uint8_t bIPV4_Address[4]; // The Ipv4 address assigned to the Network interface. If not available, all bytes are set to zero. +} NETWORK_ADAPTER_INFO; + #ifndef INTREPID_NO_CHECK_STRUCT_SIZE #if defined(__cplusplus) && (__cplusplus > 199711L) diff --git a/include/icsneo/icsneolegacy.h b/include/icsneo/icsneolegacy.h index 7503059..3988382 100644 --- a/include/icsneo/icsneolegacy.h +++ b/include/icsneo/icsneolegacy.h @@ -8,93 +8,159 @@ typedef uint8_t byte; // Typedef helper for the following include #include "icsneo/icsnVC40.h" // Definitions for structs +// From coremini.h +#define MAX_BIT_SMASH_ARBIDS (4) +#define BIT_SMASH_OPTION_EXTENDED (1) +#define BIT_SMASH_OPTION_REMOTE (2) +#define BIT_SMASH_OPTION_BUSTEST (4) +#define BIT_SMASH_OPTION_WHITELIST (8) + #ifdef __cplusplus extern "C" { #endif //Basic Functions -extern int DLLExport icsneoFindDevices(NeoDeviceEx* pNeoDeviceEx, int* pNumDevices, unsigned int* DeviceTypes, unsigned int numDeviceTypes,POptionsFindNeoEx* pOptionsNeoEx, unsigned int* reserved); -extern int DLLExport icsneoFindNeoDevices(unsigned long DeviceTypes, NeoDevice* pNeoDevice, int* pNumDevices); -extern int DLLExport icsneoOpenNeoDevice(NeoDevice* pNeoDevice, void** hObject, unsigned char* bNetworkIDs, int bConfigRead, int bSyncToPC); -extern int DLLExport icsneoClosePort(void* hObject, int* pNumberOfErrors); -extern void DLLExport icsneoFreeObject(void* hObject); -extern int DLLExport icsneoSerialNumberToString(unsigned long serial, char* data, unsigned long data_size); +extern int LegacyDLLExport icsneoFindDevices(NeoDeviceEx* pNeoDeviceEx, int* pNumDevices, unsigned int* DeviceTypes, unsigned int numDeviceTypes,POptionsFindNeoEx* pOptionsNeoEx, unsigned int* reserved); +extern int LegacyDLLExport icsneoFindNeoDevices(unsigned long DeviceTypes, NeoDevice* pNeoDevice, int* pNumDevices); +extern int LegacyDLLExport icsneoOpenNeoDevice(NeoDevice* pNeoDevice, void** hObject, unsigned char* bNetworkIDs, int bConfigRead, int bSyncToPC); +extern int LegacyDLLExport icsneoOpenDevice(NeoDeviceEx* pNeoDeviceEx, void** hObject, unsigned char* bNetworkIDs, int bConfigRead, int iOptions, OptionsOpenNeoEx* stOptionsOpenNeoEx, unsigned long reserved); +extern int LegacyDLLExport icsneoClosePort(void* hObject, int* pNumberOfErrors); +extern void LegacyDLLExport icsneoFreeObject(void* hObject); +extern int LegacyDLLExport icsneoOpenDevice(NeoDeviceEx* pNeoDeviceEx, void** hObject, unsigned char* bNetworkIDs, int bConfigRead, int iOptions, OptionsOpenNeoEx* stOptionsOpenNeoEx, unsigned long reserved); //Message Functions -extern int DLLExport icsneoGetMessages(void* hObject, icsSpyMessage* pMsg, int* pNumberOfMessages, int* pNumberOfErrors); -extern int DLLExport icsneoTxMessages(void* hObject, icsSpyMessage* pMsg, int lNetworkID, int lNumMessages); -extern int DLLExport icsneoTxMessagesEx(void* hObject,icsSpyMessage* pMsg, unsigned int lNetworkID, unsigned int lNumMessages, unsigned int* NumTxed, unsigned int zero2); -extern int DLLExport icsneoWaitForRxMessagesWithTimeOut(void* hObject, unsigned int iTimeOut); -extern int DLLExport icsneoEnableNetworkRXQueue(void* hObject, int iEnable); -extern int DLLExport icsneoGetTimeStampForMsg(void* hObject, icsSpyMessage* pMsg, double* pTimeStamp); -extern void DLLExport icsneoGetISO15765Status(void* hObject, int lNetwork, int lClearTxStatus, int lClearRxStatus, int*lTxStatus, int*lRxStatus); -extern void DLLExport icsneoSetISO15765RxParameters(void* hObject, int lNetwork, int lEnable, spyFilterLong* pFF_CFMsgFilter, icsSpyMessage* pTxMsg, +extern int LegacyDLLExport icsneoGetMessages(void* hObject, icsSpyMessage* pMsg, int* pNumberOfMessages, int* pNumberOfErrors); +extern int LegacyDLLExport icsneoTxMessages(void* hObject, icsSpyMessage* pMsg, int lNetworkID, int lNumMessages); +extern int LegacyDLLExport icsneoTxMessagesEx(void* hObject,icsSpyMessage* pMsg, unsigned int lNetworkID, unsigned int lNumMessages, unsigned int* NumTxed, unsigned int zero2); +extern int LegacyDLLExport icsneoWaitForRxMessagesWithTimeOut(void* hObject, unsigned int iTimeOut); +extern int LegacyDLLExport icsneoEnableNetworkRXQueue(void* hObject, int iEnable); +extern int LegacyDLLExport icsneoGetTimeStampForMsg(void* hObject, icsSpyMessage* pMsg, double* pTimeStamp); +extern void LegacyDLLExport icsneoGetISO15765Status(void* hObject, int lNetwork, int lClearTxStatus, int lClearRxStatus, int*lTxStatus, int*lRxStatus); +extern void LegacyDLLExport icsneoSetISO15765RxParameters(void* hObject, int lNetwork, int lEnable, spyFilterLong* pFF_CFMsgFilter, icsSpyMessage* pTxMsg, int lCFTimeOutMs, int lFlowCBlockSize, int lUsesExtendedAddressing, int lUseHardwareIfPresent); //Device Functions -extern int DLLExport icsneoGetConfiguration(void* hObject, unsigned char* pData, int* lNumBytes); -extern int DLLExport icsneoSendConfiguration(void* hObject, unsigned char* pData, int lNumBytes); -extern int DLLExport icsneoGetFireSettings(void* hObject, SFireSettings* pSettings, int iNumBytes); -extern int DLLExport icsneoSetFireSettings(void* hObject, SFireSettings* pSettings, int iNumBytes, int bSaveToEEPROM); +extern int LegacyDLLExport icsneoGetConfiguration(void* hObject, unsigned char* pData, int* lNumBytes); +extern int LegacyDLLExport icsneoSendConfiguration(void* hObject, unsigned char* pData, int lNumBytes); +extern int LegacyDLLExport icsneoGetFireSettings(void* hObject, SFireSettings* pSettings, int iNumBytes); +extern int LegacyDLLExport icsneoSetFireSettings(void* hObject, SFireSettings* pSettings, int iNumBytes, int bSaveToEEPROM); -extern int DLLExport icsneoGetVCAN3Settings(void* hObject, SVCAN3Settings* pSettings, int iNumBytes); -extern int DLLExport icsneoSetVCAN3Settings(void* hObject, SVCAN3Settings* pSettings, int iNumBytes, int bSaveToEEPROM); +extern int LegacyDLLExport icsneoGetVCAN3Settings(void* hObject, SVCAN3Settings* pSettings, int iNumBytes); +extern int LegacyDLLExport icsneoSetVCAN3Settings(void* hObject, SVCAN3Settings* pSettings, int iNumBytes, int bSaveToEEPROM); -extern int DLLExport icsneoGetFire2Settings(void* hObject, SFire2Settings* pSettings, int iNumBytes); -extern int DLLExport icsneoSetFire2Settings(void* hObject, SFire2Settings* pSettings, int iNumBytes, int bSaveToEEPROM); +extern int LegacyDLLExport icsneoGetFire2Settings(void* hObject, SFire2Settings* pSettings, int iNumBytes); +extern int LegacyDLLExport icsneoSetFire2Settings(void* hObject, SFire2Settings* pSettings, int iNumBytes, int bSaveToEEPROM); -extern int DLLExport icsneoGetVCANRFSettings(void* hObject, SVCANRFSettings* pSettings, int iNumBytes); -extern int DLLExport icsneoSetVCANRFSettings(void* hObject, SVCANRFSettings* pSettings, int iNumBytes, int bSaveToEEPROM); +extern int LegacyDLLExport icsneoGetVCANRFSettings(void* hObject, SVCANRFSettings* pSettings, int iNumBytes); +extern int LegacyDLLExport icsneoSetVCANRFSettings(void* hObject, SVCANRFSettings* pSettings, int iNumBytes, int bSaveToEEPROM); -extern int DLLExport icsneoGetVCAN412Settings(void* hObject, SVCAN412Settings* pSettings, int iNumBytes); -extern int DLLExport icsneoSetVCAN412Settings(void* hObject, SVCAN412Settings* pSettings, int iNumBytes, int bSaveToEEPROM); +extern int LegacyDLLExport icsneoGetVCAN412Settings(void* hObject, SVCAN412Settings* pSettings, int iNumBytes); +extern int LegacyDLLExport icsneoSetVCAN412Settings(void* hObject, SVCAN412Settings* pSettings, int iNumBytes, int bSaveToEEPROM); -extern int DLLExport icsneoGetRADGalaxySettings(void* hObject, SRADGalaxySettings* pSettings, int iNumBytes); -extern int DLLExport icsneoSetRADGalaxySettings(void* hObject, SRADGalaxySettings* pSettings, int iNumBytes, int bSaveToEEPROM); +extern int LegacyDLLExport icsneoGetRADGalaxySettings(void* hObject, SRADGalaxySettings* pSettings, int iNumBytes); +extern int LegacyDLLExport icsneoSetRADGalaxySettings(void* hObject, SRADGalaxySettings* pSettings, int iNumBytes, int bSaveToEEPROM); -extern int DLLExport icsneoGetRADStar2Settings(void* hObject, SRADStar2Settings* pSettings, int iNumBytes); -extern int DLLExport icsneoSetRADStar2Settings(void* hObject, SRADStar2Settings* pSettings, int iNumBytes, int bSaveToEEPROM); +extern int LegacyDLLExport icsneoGetRADStar2Settings(void* hObject, SRADStar2Settings* pSettings, int iNumBytes); +extern int LegacyDLLExport icsneoSetRADStar2Settings(void* hObject, SRADStar2Settings* pSettings, int iNumBytes, int bSaveToEEPROM); -extern int DLLExport icsneoSetBitRate(void* hObject, int BitRate, int NetworkID); -extern int DLLExport icsneoSetFDBitRate(void* hObject, int BitRate, int NetworkID); -extern int DLLExport icsneoGetDeviceParameters(void* hObject, char* pParameter, char* pValues, short ValuesLength); -extern int DLLExport icsneoSetDeviceParameters(void* hObject, char* pParmValue, int* pErrorIndex, int bSaveToEEPROM); +extern int LegacyDLLExport icsneoSetBitRate(void* hObject, int BitRate, int NetworkID); +extern int LegacyDLLExport icsneoSetBitRateEx(void* hObject, unsigned long BitRate, int NetworkID, int iOptions); +extern int LegacyDLLExport icsneoSetFDBitRate(void* hObject, int BitRate, int NetworkID); + +extern int LegacyDLLExport icsneoGetDeviceParameters(void* hObject, char* pParameter, char* pValues, short ValuesLength); +extern int LegacyDLLExport icsneoSetDeviceParameters(void* hObject, char* pParmValue, int* pErrorIndex, int bSaveToEEPROM); + +extern int LegacyDLLExport icsneoGetVCAN4Settings(void* hObject, SVCAN4Settings* pSettings, int iNumBytes); +extern int LegacyDLLExport icsneoSetVCAN4Settings(void* hObject, SVCAN4Settings* pSettings, int iNumBytes, int bSaveToEEPROM); + +extern int LegacyDLLExport icsneoGetDeviceSettingsType(void* hObject, EPlasmaIonVnetChannel_t vnetSlot, EDeviceSettingsType* pDeviceSettingsType); +extern int LegacyDLLExport icsneoSetDeviceSettings(void* hObject, SDeviceSettings* pSettings, int iNumBytes, int bSaveToEEPROM, EPlasmaIonVnetChannel_t vnetSlot); +extern int LegacyDLLExport icsneoGetDeviceSettings(void* hObject, SDeviceSettings* pSettings, int iNumBytes, EPlasmaIonVnetChannel_t vnetSlot); + +extern int LegacyDLLExport icsneoSetUSBLatency(NeoDevice* pNeoDevice, unsigned long LatencyVal); + +extern unsigned int LegacyDLLExport icsneoGetCANControllerClockFrequency(void* hObject, int lNetworkID); +extern int LegacyDLLExport icsneoSetCANParameters(void* hObject,unsigned int baudRatePrescaler,unsigned int propagationTqs,unsigned int phase1Tqs,unsigned int phase2Tqs,unsigned int syncJumpWidthTqs,unsigned int optionBits,int lNetworkID); +extern int LegacyDLLExport icsneoSetCANParametersPhilipsSJA1000(void* hObject,unsigned int btr0,unsigned int btr1,unsigned int optionBits,int lNetworkID); + +//Remote Device Functions +extern int LegacyDLLExport icsneoOpenRemoteNeoDevice(const char* pIPAddress,NeoDevice* pNeoDevice,void** hObject,unsigned char* bNetworkIDs,int iOptions); +extern int LegacyDLLExport icsneoFindRemoteNeoDevices(const char* pIPAddress, NeoDevice* pNeoDevice, int* pNumDevices); //Error Functions -extern int DLLExport icsneoGetLastAPIError(void* hObject, unsigned long* pErrorNumber); -extern int DLLExport icsneoGetErrorMessages(void* hObject, int* pErrorMsgs, int* pNumberOfErrors); -extern int DLLExport icsneoGetErrorInfo(int lErrorNumber, TCHAR*szErrorDescriptionShort, TCHAR*szErrorDescriptionLong, int* lMaxLengthShort, int* lMaxLengthLong,int* lErrorSeverity,int* lRestartNeeded); +extern int LegacyDLLExport icsneoGetLastAPIError(void* hObject, unsigned long* pErrorNumber); +extern int LegacyDLLExport icsneoGetErrorMessages(void* hObject, int* pErrorMsgs, int* pNumberOfErrors); +extern int LegacyDLLExport icsneoGetErrorInfo(int lErrorNumber, TCHAR*szErrorDescriptionShort, TCHAR*szErrorDescriptionLong, int* lMaxLengthShort, int* lMaxLengthLong,int* lErrorSeverity,int* lRestartNeeded); //ISO15765-2 Functions -extern int DLLExport icsneoISO15765_EnableNetworks(void* hObject, unsigned long ulNetworks); -extern int DLLExport icsneoISO15765_DisableNetworks(void* hObject); -extern int DLLExport icsneoISO15765_TransmitMessage(void* hObject, unsigned long ulNetworkID, stCM_ISO157652_TxMessage* pMsg, unsigned long ulBlockingTimeout); -extern int DLLExport icsneoISO15765_ReceiveMessage(void* hObject,int ulNetworkID, stCM_ISO157652_RxMessage* pMsg); +extern int LegacyDLLExport icsneoISO15765_EnableNetworks(void* hObject, unsigned long ulNetworks); +extern int LegacyDLLExport icsneoISO15765_DisableNetworks(void* hObject); +extern int LegacyDLLExport icsneoISO15765_TransmitMessage(void* hObject, unsigned long ulNetworkID, stCM_ISO157652_TxMessage* pMsg, unsigned long ulBlockingTimeout); +extern int LegacyDLLExport icsneoISO15765_TransmitMessageEx(void* hObject,unsigned long ulNetworkID,ISO15765_2015_TxMessage* pMsg,unsigned long ulBlockingTimeout); +extern int LegacyDLLExport icsneoISO15765_ReceiveMessage(void* hObject, int ulNetworkID, stCM_ISO157652_RxMessage* pMsg); //General Utility Functions -extern int DLLExport icsneoValidateHObject(void* hObject); -extern int DLLExport icsneoGetDLLVersion(void); -extern int DLLExport icsneoGetSerialNumber(void* hObject, unsigned int*iSerialNumber); -extern int DLLExport icsneoStartSockServer(void* hObject, int iPort); -extern int DLLExport icsneoStopSockServer(void* hObject); +extern int LegacyDLLExport icsneoValidateHObject(void* hObject); + +extern int LegacyDLLExport icsneoGetDLLVersion(void); +extern void LegacyDLLExport icsneoGetDLLVersionEx(unsigned long* dwMSVersion, unsigned long* dwLSVersion); + +extern int LegacyDLLExport icsneoGetSerialNumber(void* hObject, unsigned int*iSerialNumber); +extern int LegacyDLLExport icsneoSerialNumberFromString(unsigned long* serial, char* data); +extern int LegacyDLLExport icsneoSerialNumberToString(unsigned long serial, char* data, unsigned long data_size); + +extern int LegacyDLLExport icsneoStartSockServer(void* hObject, int iPort); +extern int LegacyDLLExport icsneoStopSockServer(void* hObject); //CoreMini Script functions -extern int DLLExport icsneoScriptStart(void* hObject, int iLocation); -extern int DLLExport icsneoScriptStop(void* hObject); -extern int DLLExport icsneoScriptLoad(void* hObject, const unsigned char* bin, unsigned long len_bytes, int iLocation); -extern int DLLExport icsneoScriptClear(void* hObject, int iLocation); -extern int DLLExport icsneoScriptStartFBlock(void* hObject,unsigned int fb_index); -extern int DLLExport icsneoScriptGetFBlockStatus(void* hObject, unsigned int fb_index, int* piRunStatus); -extern int DLLExport icsneoScriptStopFBlock(void* hObject,unsigned int fb_index); -extern int DLLExport icsneoScriptGetScriptStatus(void* hObject, int* piStatus); -extern int DLLExport icsneoScriptReadAppSignal(void* hObject, unsigned int iIndex, double*dValue); -extern int DLLExport icsneoScriptWriteAppSignal(void* hObject, unsigned int iIndex, double dValue); +extern int LegacyDLLExport icsneoScriptStart(void* hObject, int iLocation); +extern int LegacyDLLExport icsneoScriptStop(void* hObject); +extern int LegacyDLLExport icsneoScriptLoad(void* hObject, const unsigned char* bin, unsigned long len_bytes, int iLocation); +extern int LegacyDLLExport icsneoScriptClear(void* hObject, int iLocation); +extern int LegacyDLLExport icsneoScriptStartFBlock(void* hObject,unsigned int fb_index); +extern int LegacyDLLExport icsneoScriptGetFBlockStatus(void* hObject, unsigned int fb_index, int* piRunStatus); +extern int LegacyDLLExport icsneoScriptStopFBlock(void* hObject,unsigned int fb_index); +extern int LegacyDLLExport icsneoScriptGetScriptStatus(void* hObject, int* piStatus); +extern int LegacyDLLExport icsneoScriptReadAppSignal(void* hObject, unsigned int iIndex, double*dValue); +extern int LegacyDLLExport icsneoScriptWriteAppSignal(void* hObject, unsigned int iIndex, double dValue); //Deprecated (but still suppored in the DLL) -extern int DLLExport icsneoOpenPortEx(void* lPortNumber, int lPortType, int lDriverType, int lIPAddressMSB, int lIPAddressLSBOrBaudRate, int bConfigRead, unsigned char* bNetworkID, int* hObject); -extern int DLLExport icsneoOpenPort(int lPortNumber, int lPortType, int lDriverType, unsigned char* bNetworkID, unsigned char* bSCPIDs, int* hObject); -extern int DLLExport icsneoEnableNetworkCom(void* hObject, int Enable); -extern int DLLExport icsneoFindAllCOMDevices(int lDriverType, int lGetSerialNumbers, int lStopAtFirst, int lUSBCommOnly, int* p_lDeviceTypes, int* p_lComPorts, int* p_lSerialNumbers, int*lNumDevices); +extern int LegacyDLLExport icsneoOpenPortEx(void* lPortNumber, int lPortType, int lDriverType, int lIPAddressMSB, int lIPAddressLSBOrBaudRate, int bConfigRead, unsigned char* bNetworkID, int* hObject); +extern int LegacyDLLExport icsneoOpenPort(int lPortNumber, int lPortType, int lDriverType, unsigned char* bNetworkID, unsigned char* bSCPIDs, int* hObject); +extern int LegacyDLLExport icsneoFindAllCOMDevices(int lDriverType, int lGetSerialNumbers, int lStopAtFirst, int lUSBCommOnly, int* p_lDeviceTypes, int* p_lComPorts, int* p_lSerialNumbers, int*lNumDevices); +extern int LegacyDLLExport icsneoOpenNeoDeviceByChannels(NeoDevice* pNeoDevice,void** hObject,unsigned char* uChannels,int iSize,int bConfigRead,int iOptions); +extern int LegacyDLLExport icsneoLockChannels(void* hObject, unsigned char* uChannels, int iSize); +extern int LegacyDLLExport icsneoUnlockChannels(void* hObject, unsigned char* uChannels, int iSize); +extern int LegacyDLLExport icsneoGetChannelLockStatus(void* hObject, unsigned char* uChannels, int iSize); + +//Enable Network Com Functions +extern int LegacyDLLExport icsneoEnableNetworkComEx(void* hObject, int iEnable, int iNetId); +extern int LegacyDLLExport icsneoEnableNetworkCom(void* hObject, int Enable); + +//Firmware Info/Update calls +extern int LegacyDLLExport icsneoForceFirmwareUpdate(void* hObject); +extern int LegacyDLLExport icsneoGetHWFirmwareInfo(void* hObject, stAPIFirmwareInfo* pInfo); +extern int LegacyDLLExport icsneoGetDLLFirmwareInfo(void* hObject, stAPIFirmwareInfo* pInfo); +extern int LegacyDLLExport icsneoGetDLLFirmwareInfoEx(void* hObject, stAPIFirmwareInfo* pInfo, EPlasmaIonVnetChannel_t vnetSlot); +extern int LegacyDLLExport icsneoFirmwareUpdateRequired(void* hObject); + +//J2534 API functions +extern int LegacyDLLExport icsneoJ2534Cmd(void* hObject, unsigned char* CmdBuf, short Len, void* pVoid); +extern int LegacyDLLExport icsneoSendRawCmds(void* hObject, icsneoVICommand* pCmdMsgs, int lNumOfCmds); +extern int LegacyDLLExport icsneoEnableBusVoltageMonitor(void* hObject, unsigned int enable, unsigned int reserved); +extern int LegacyDLLExport icsneoGetBusVoltage(void* hObject, unsigned long* pVBusVoltage, unsigned int reserved); +extern int LegacyDLLExport icsneoGetNetidforSlaveVNETs(size_t* NetworkIndex, EPlasmaIonVnetChannel_t vnetSlot); +extern int LegacyDLLExport icsneoGetVnetSimpleNetid(size_t* FullNetID); +extern int LegacyDLLExport icsneoEnableDOIPLine(void* hObject, bool bActivate); +extern int LegacyDLLExport icsneoGetMiniportAdapterInfo(void* hObject, NETWORK_ADAPTER_INFO* aInfo); + +// Hardware Time API functions +extern int LegacyDLLExport icsneoSendHWTimeRequest(void* hObject); +extern int LegacyDLLExport icsneoReceiveHWTimeResponse(void* hObject, double* TimeHardware, unsigned long TimeOut); + +//Bitsmash functions +extern int LegacyDLLExport icsneoEnableBitSmash(void* hObject,int netId,unsigned int numWaitBits,unsigned int numSmashBits,unsigned int numFrames,unsigned int timeout_ms,unsigned int optionBits,unsigned int numArbIds,unsigned int arbIds[MAX_BIT_SMASH_ARBIDS]); +extern int LegacyDLLExport icsneoDisableBitSmash(void* hObject, unsigned int reservedZero); #ifdef __cplusplus } // extern "C" diff --git a/include/icsneo/platform/posix/dynamiclib.h b/include/icsneo/platform/posix/dynamiclib.h index 8b4fc4d..6673b17 100644 --- a/include/icsneo/platform/posix/dynamiclib.h +++ b/include/icsneo/platform/posix/dynamiclib.h @@ -9,8 +9,8 @@ #include "icsneo/platform/posix/linux/dynamiclib.h" #endif -// Nothing special is needed to export -#define DLLExport +#define DLLExport __attribute__((visibility("default"))) +#define LegacyDLLExport DLLExport // #ifndef ICSNEO_NO_AUTO_DESTRUCT // #define ICSNEO_DESTRUCTOR __attribute__((destructor)); diff --git a/include/icsneo/platform/windows/dynamiclib.h b/include/icsneo/platform/windows/dynamiclib.h index d40b1f3..12db241 100644 --- a/include/icsneo/platform/windows/dynamiclib.h +++ b/include/icsneo/platform/windows/dynamiclib.h @@ -8,6 +8,7 @@ #else #define DLLExport __declspec(dllimport) #endif +#define LegacyDLLExport _stdcall DLLExport // MSVC does not have the ability to specify a destructor #define ICSNEO_DESTRUCTOR diff --git a/platform/windows/icsneolegacy.def b/platform/windows/icsneolegacy.def new file mode 100644 index 0000000..a3f9fb7 --- /dev/null +++ b/platform/windows/icsneolegacy.def @@ -0,0 +1,211 @@ + +LIBRARY icsneolegacy + +EXPORTS + icsneoOpenPort @21 + icsneoClosePort @22 + icsneoGetMessages @23 + icsneoTxMessages @24 + icsneoFreeObject @25 + icsneoGetErrorMessages @26 + icsneoStartSockServer @29 + icsneoSendConfiguration @30 + icsneoGetSerialNumber @32 + icsneoFindAllUSBDevices @33 + icsneoOpenPortEx @34 + icsneoStopSockServer @35 + icsneoGetErrorInfo @36 + icsneoGetDLLVersion @37 + icsneoGetConfiguration @38 + icsneoFindAllCOMDevices @39 + icsneoGetISO15765Status @40 + icsneoSetISO15765RxParameters @41 + icsneoSetPerformanceParameters @42 + icsneoEnableNetworkCom @ 43 + icsneoGetPerformanceParameters @ 44 + icsneoSetupISO15765HwSupport @ 45 + icsneoWaitForRxMessagesWithTimeOut @ 46 + icsneoGetErrorInfoW @47 + icsneoGetOpenPorts @ 48 + icsneoGetPerformanceTimer @ 49 + icsneoFindFirstFreeDevice @ 50 + icsneoJ2534Cmd @ 51 + + icsneoScriptStartFBlock @ 52 + icsneoScriptStopFBlock @ 53 + icsneoScriptGetFBlockStatus @ 54 + icsneoScriptReadTxMessage @ 55 + icsneoScriptWriteTxMessage @ 56 + icsneoScriptStart @ 57 + icsneoScriptStop @ 58 + + icsneoFindNeoDevices @ 62 + icsneoOpenNeoDevice @ 63 + icsneoOpenNeoDeviceBySerialNumber @ 64 + + icsneoForceFirmwareUpdate @ 65 + icsneoGetHWFirmwareInfo @ 66 + icsneoGetDLLFirmwareInfo @ 67 + + icsneoSetupISO15765HwSupportEx @ 68 + + icsneoSetBitRate @ 69 + + icsneoReadSDCard @ 72 + icsneoGetTimeStampForMsg @ 73 + + icsneoWriteSDCard @ 76 + + icsneoScriptLoad @ 77 + icsneoScriptClear @ 78 + icsneoGetLastAPIError @ 79 + icsneoValidateHObject @ 80 + + icsneoScriptReadAppSignal @ 81 + icsneoScriptWriteAppSignal @ 82 + + icsneoScriptReadISO15765_2_TxMessage @ 84 + icsneoScriptWriteISO15765_2_TxMessage @ 85 + icsneoScriptReadRxMessage @ 86 + icsneoScriptWriteRxMessage @ 87 + + icsneoScriptGetScriptStatus @ 91 + + icsneoEnableNetworkRXQueue @ 94 + icsneoGetFireSettings @ 95 + icsneoSetFireSettings @ 96 + + icsneoGetVCAN3Settings @ 97 + icsneoSetVCAN3Settings @ 98 + + icsneoGetDeviceParameters @99 + icsneoSetDeviceParameters @100 + + icsneoSetReflashCallback @101 + + icsneoSetReflashDisplayCallbacks @102 + icsneoClearReflashDisplayCallbacks @103 + + icsneoGetStoredFirmwareInfo @104 + icsneoDownloadISO15765_2_TXScript @ 105 + icsneoTransmitISO15765_2_Message @106 + icsneoClearISO15765_2_TxScript @ 107 + + icsneoGetDLLVersionEx @108 + + icsneoEnable_ISO15765_2_By_Network @ 111 + icsneoDisable_ISO15765_2 @ 112 + icsneoSetISO15765_2_FlowCtlID @ 113 + icsneoClearISO15765_2_FlowCtlID @ 114 + icsneoClearAllISO15765_2_FlowCtlIDs @ 115 + + icsneoSetContext @ 116 + icsneoFindNeoDevicesEx @ 117 + icsneoOpenNeoDeviceEx @ 118 + + icsneoFindRemoteNeoDevices @ 120 + icsneoOpenRemoteNeoDevice @ 121 + icsneoISO15765_EnableNetworks @122 + icsneoISO15765_DisableNetworks @123 + icsneoISO15765_TransmitMessage @124 + + icsneoGetCANControllerClockFrequency @129 + icsneoSetCANParameters @130 + icsneoSetCANParametersPhilipsSJA1000 @131 + + icsneoSendTextApi @132 + icsneoGetTextApi @133 + icsneoScriptReadISO15765_2_RxMessage @ 134 + icsneoScriptWriteISO15765_2_RxMessage @ 135 + + icsneoScriptLoadReadBin @ 136 + icsneoEnableCoreMiniUsbFilter @ 137 + icsneoConfigureNetworkMsgQueue @ 138 + icsneoEnableBusVoltageMonitor @ 139 + icsneoGetBusVoltage @ 140 + icsneoEnableBitSmash @141 + icsneoDisableBitSmash @142 + icsneoReceiveHWTimeResponse @143 + icsneoSendHWTimeRequest @144 + icsneoSetUSBLatency @145 + icsneoLoadDefaultSettings @146 + icsneoGetAllChipVersions @149 + icsneoSetBitRateEx @ 150 + icsneoScriptGetScriptStatusEx @ 151 + icsneoOpenNeoDeviceByChannels @ 152 + icsneoGetChannelLockStatus @ 153 + icsneoRequestEnterSleepMode @ 154 + icsneoEnableNetworkComEx @ 155 + icsneoLockChannels @ 156 + icsneoUnlockChannels @ 157 + + icsneoGetFireVnetSettings @ 160 + icsneoSetFireVnetSettings @ 161 + + icsneoGetFire2Settings @ 162 + icsneoSetFire2Settings @ 163 + icsneoSetFDBitRate @ 164 + + icsneoTxMessagesEx @165 + + icsneoGetVCANRFSettings @ 167 + icsneoSetVCANRFSettings @ 168 + + icsneoFirmwareUpdateRequired @ 169 + + icsneoGetRADGalaxySettings @170 + icsneoSetRADGalaxySettings @171 + + icsneoGetNetidforSlaveVNETs @172 + icsneoGetVnetSimpleNetid @173 + icsneoISO15765_ReceiveMessage @174 + icsneoGetDLLFirmwareInfoEx @175 + icsneoBase36enc @176 + icsneoGetRADStar2Settings @177 + icsneoSetRADStar2Settings @178 + + icsneoGetBackupPowerEnabled @179 + icsneoSetBackupPowerEnabled @180 + icsneoGetBackupPowerReady @181 + icsneoSerialNumberFromString @182 + icsneoSerialNumberToString @183 + icsneoISO15765_TransmitMessageEx @184 + + icsneoGetActiveVNETChannel @ 189 + icsneoSetActiveVNETChannel @ 190 + + icsneoGetDeviceSettings @191 + icsneoSetDeviceSettings @192 + icsneoGetDeviceSettingsType @193 + + icsneoGetVCAN412Settings @ 194 + icsneoSetVCAN412Settings @ 195 + + icsneoGetVividCANSettings @ 196 + icsneoSetVividCANSettings @ 197 + icsneoFindNeoDevicesNewStyle @ 198 + + icsneoGetDeviceStatus @ 202 + + icsneoFindDevices @ 203 + icsneoOpenDevice @ 204 + + icsneoEnableDOIPLine @ 205 + icsneoGetMiniportAdapterInfo @ 206 + + icsneoGetVCAN4Settings @ 207 + icsneoSetVCAN4Settings @ 208 + + icsneoReadWritePHYSettings @ 214 + + icsneoRequestDiskDetails @ 217 + icsneoRequestDiskFormat @ 218 + icsneoRequestDiskFormatProgress @ 219 + icsneoRequestDiskFormatCancel @ 220 + + icsneoGetRADGigastarSettings @ 221 + icsneoSetRADGigastarSettings @ 222 + icsneoGetRADA2BSettings @ 223 + icsneoSetRADA2BSettings @ 224 + + icsneoScriptClearRxMessage @225 \ No newline at end of file