diff --git a/device/devicefinder.cpp b/device/devicefinder.cpp index e636cc0..53c27df 100644 --- a/device/devicefinder.cpp +++ b/device/devicefinder.cpp @@ -43,6 +43,10 @@ static std::vector supportedDevices = { NeoVIPLASMA::DEVICE_TYPE, #endif + #ifdef __RADEPSILON_H_ + RADEpsilon::DEVICE_TYPE, + #endif + #ifdef __RADGALAXY_H_ RADGalaxy::DEVICE_TYPE, #endif @@ -169,6 +173,10 @@ std::vector> DeviceFinder::FindAll() { findResults.push_back(NeoVIPLASMA::Find()); #endif + #ifdef __RADEPSILON_H_ + findResults.push_back(RADEpsilon::Find()); + #endif + #ifdef __RADGALAXY_H_ findResults.push_back(RADGalaxy::Find(pcapDevices)); #endif @@ -267,4 +275,4 @@ const std::vector& DeviceFinder::GetSupportedDevices() { supportedDevicesCached = true; } return supportedDevices; -} \ No newline at end of file +} diff --git a/include/icsneo/device/devicetype.h b/include/icsneo/device/devicetype.h index a46391b..dc083b9 100644 --- a/include/icsneo/device/devicetype.h +++ b/include/icsneo/device/devicetype.h @@ -44,6 +44,7 @@ public: RADGigastar = (0x00000013), RED2 = (0x00000014), EtherBADGE = (0x00000016), + RADEpsilon = (0x00000018), RED = (0x00000040), ECU = (0x00000080), IEVB = (0x00000100), @@ -124,6 +125,8 @@ public: return "neoVI RED 2"; case EtherBADGE: return "EtherBADGE"; + case RADEpsilon: + return "RAD-Epsilon"; case RED: return "neoVI RED"; case ECU: @@ -215,6 +218,7 @@ private: #define ICSNEO_DEVICETYPE_RADGIGASTAR ((devicetype_t)0x00000013) #define ICSNEO_DEVICETYPE_RED2 ((devicetype_t)0x00000014) #define ICSNEO_DEVICETYPE_ETHERBADGE ((devicetype_t)0x00000016) +#define ICSNEO_DEVICETYPE_RADEPSILON ((devicetype_t)0x00000018) #define ICSNEO_DEVICETYPE_RED ((devicetype_t)0x00000040) #define ICSNEO_DEVICETYPE_ECU ((devicetype_t)0x00000080) #define ICSNEO_DEVICETYPE_IEVB ((devicetype_t)0x00000100) diff --git a/include/icsneo/device/tree/radepsilon/radepsilon.h b/include/icsneo/device/tree/radepsilon/radepsilon.h new file mode 100644 index 0000000..9858bd9 --- /dev/null +++ b/include/icsneo/device/tree/radepsilon/radepsilon.h @@ -0,0 +1,59 @@ +#ifndef __RADEPSILON_H_ +#define __RADEPSILON_H_ + +#include "icsneo/device/device.h" +#include "icsneo/device/devicetype.h" +#include "icsneo/platform/cdcacm.h" + +namespace icsneo { + +class RADEpsilon : public Device { +public: + static constexpr DeviceType::Enum DEVICE_TYPE = DeviceType::RADEpsilon; + static constexpr const char* SERIAL_START = "RE"; + static constexpr const uint16_t PRODUCT_ID = 0x1109; + static std::vector> Find() { + std::vector> found; + + for(auto neodevice : CDCACM::FindByProduct(PRODUCT_ID)) + found.emplace_back(new RADEpsilon(neodevice)); + + return found; + } + + static const std::vector& GetSupportedNetworks() { + static std::vector supportedNetworks = { + Network::NetID::HSCAN, + Network::NetID::HSCAN2, + + Network::NetID::Ethernet, // Connected to port 6 on the switch + + Network::NetID::LIN + }; + return supportedNetworks; + } + +protected: + RADEpsilon(neodevice_t neodevice) : Device(neodevice) { + initialize(); + getWritableNeoDevice().type = DEVICE_TYPE; + productId = PRODUCT_ID; + } + + virtual void setupEncoder(Encoder& encoder) override { + Device::setupEncoder(encoder); + encoder.supportCANFD = true; + } + + virtual void setupSupportedRXNetworks(std::vector& rxNetworks) override { + for(auto& netid : GetSupportedNetworks()) + rxNetworks.emplace_back(netid); + } + + // The supported TX networks are the same as the supported RX networks for this device + virtual void setupSupportedTXNetworks(std::vector& txNetworks) override { setupSupportedRXNetworks(txNetworks); } +}; + +} + +#endif diff --git a/include/icsneo/platform/posix/devices.h b/include/icsneo/platform/posix/devices.h index 49b9cf0..d9931c0 100644 --- a/include/icsneo/platform/posix/devices.h +++ b/include/icsneo/platform/posix/devices.h @@ -10,6 +10,7 @@ #include "icsneo/device/tree/neovired2/neovired2.h" #include "icsneo/device/tree/plasion/neoviion.h" #include "icsneo/device/tree/plasion/neoviplasma.h" +#include "icsneo/device/tree/radepsilon/radepsilon.h" #include "icsneo/device/tree/radgalaxy/radgalaxy.h" #include "icsneo/device/tree/radgigalog/radgigalogeth.h" #include "icsneo/device/tree/radgigalog/radgigalogusb.h" diff --git a/include/icsneo/platform/windows/devices.h b/include/icsneo/platform/windows/devices.h index f9008dd..a56a678 100644 --- a/include/icsneo/platform/windows/devices.h +++ b/include/icsneo/platform/windows/devices.h @@ -10,6 +10,7 @@ #include "icsneo/device/tree/neovired2/neovired2.h" #include "icsneo/device/tree/plasion/neoviion.h" #include "icsneo/device/tree/plasion/neoviplasma.h" +#include "icsneo/device/tree/radepsilon/radepsilon.h" #include "icsneo/device/tree/radgalaxy/radgalaxy.h" #include "icsneo/device/tree/radgigalog/radgigalogeth.h" #include "icsneo/device/tree/radgigalog/radgigalogusb.h"