Drivers: Decouple from devices

This allows us to better implement alternative drivers
for devices, such as for device sharing servers or
talking to CoreMini processors within the same device.
This commit is contained in:
Paul Hollinsky
2022-03-27 14:30:31 -04:00
parent 0ff12300f3
commit 781fc2c034
66 changed files with 780 additions and 1566 deletions
+2 -4
View File
@@ -1,14 +1,12 @@
#ifndef __PCAP_H_
#define __PCAP_H_
#if defined _WIN32
#ifdef _WIN32
#include "icsneo/platform/windows/pcap.h"
#elif defined (__unix__) || (defined (__APPLE__) && defined (__MACH__))
#elif defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
#include "icsneo/platform/posix/pcap.h"
#else
#warning "This platform is not supported by the PCAP driver"
#endif
#define LIBICSNEO_HAVE_PCAP 1
#endif
+1 -1
View File
@@ -27,7 +27,7 @@ public:
*/
CDCACM(const device_eventhandler_t& err, neodevice_t& forDevice) : Driver(err), device(forDevice) {}
~CDCACM();
static std::vector<neodevice_t> FindByProduct(int product);
static void Find(std::vector<FoundDevice>& found);
bool open() override;
bool isOpen() override;
+7 -13
View File
@@ -5,31 +5,25 @@
#include "icsneo/device/tree/neoobd2pro/neoobd2pro.h"
#include "icsneo/device/tree/neoobd2sim/neoobd2sim.h"
#include "icsneo/device/tree/neovifire/neovifire.h"
#include "icsneo/device/tree/neovifire2/neovifire2eth.h"
#include "icsneo/device/tree/neovifire2/neovifire2usb.h"
#include "icsneo/device/tree/neovifire2/neovifire2.h"
#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/radgigastar/radgigastareth.h"
#include "icsneo/device/tree/radgigastar/radgigastarusb.h"
#include "icsneo/device/tree/radmars/radmarseth.h"
#include "icsneo/device/tree/radmars/radmarsusb.h"
#include "icsneo/device/tree/radgigastar/radgigastar.h"
#include "icsneo/device/tree/radmars/radmars.h"
#include "icsneo/device/tree/radmoon2/radmoon2.h"
#include "icsneo/device/tree/radmoonduo/radmoonduo.h"
#include "icsneo/device/tree/radpluto/radplutousb.h"
#include "icsneo/device/tree/radstar2/radstar2eth.h"
#include "icsneo/device/tree/radstar2/radstar2usb.h"
#include "icsneo/device/tree/radpluto/radpluto.h"
#include "icsneo/device/tree/radstar2/radstar2.h"
#include "icsneo/device/tree/radsupermoon/radsupermoon.h"
#include "icsneo/device/tree/valuecan3/valuecan3.h"
#include "icsneo/device/tree/valuecan4/valuecan4-1.h"
#include "icsneo/device/tree/valuecan4/valuecan4-2.h"
#include "icsneo/device/tree/valuecan4/valuecan4-2eleth.h"
#include "icsneo/device/tree/valuecan4/valuecan4-2elusb.h"
#include "icsneo/device/tree/valuecan4/valuecan4-2el.h"
#include "icsneo/device/tree/valuecan4/valuecan4-4.h"
#include "icsneo/device/tree/valuecan4/valuecan4industrialeth.h"
#include "icsneo/device/tree/valuecan4/valuecan4industrialusb.h"
#include "icsneo/device/tree/valuecan4/valuecan4industrial.h"
#include "icsneo/device/tree/vividcan/vividcan.h"
#endif
+5 -3
View File
@@ -16,7 +16,7 @@ namespace icsneo {
class FTDI : public Driver {
public:
static std::vector<neodevice_t> FindByProduct(int product);
static void Find(std::vector<FoundDevice>& found);
FTDI(const device_eventhandler_t& err, neodevice_t& forDevice);
~FTDI() { if(isOpen()) close(); }
@@ -34,7 +34,9 @@ private:
context = nullptr;
}
std::pair<int, std::vector<std::string>> findDevices(int pid);
// A PID of 0 disables filtering by PID
std::pair<int, std::vector< std::pair<std::string, uint16_t> > > findDevices(int pid = 0);
int openDevice(int pid, const char* serial);
bool closeDevice();
bool isOpen() const { return deviceOpen; }
@@ -52,7 +54,7 @@ private:
};
FTDIContext ftdi;
static std::vector<std::tuple<int, std::string>> handles;
static std::vector<std::string> handles;
static bool ErrorIsDisconnection(int errorCode);
void readTask();
+9 -13
View File
@@ -4,6 +4,7 @@
#ifdef __cplusplus
#include "icsneo/device/neodevice.h"
#include "icsneo/device/founddevice.h"
#include "icsneo/communication/driver.h"
#include "icsneo/communication/ethernetpacketizer.h"
#include "icsneo/api/eventmanager.h"
@@ -14,33 +15,28 @@ namespace icsneo {
class PCAP : public Driver {
public:
class PCAPFoundDevice {
public:
neodevice_t device;
std::vector<std::vector<uint8_t>> discoveryPackets;
};
static std::vector<PCAPFoundDevice> FindAll();
static void Find(std::vector<FoundDevice>& foundDevices);
static std::string GetEthDevSerialFromMacAddress(uint8_t product, uint16_t macSerial);
static bool IsHandleValid(neodevice_handle_t handle);
PCAP(device_eventhandler_t err, neodevice_t& forDevice);
bool open();
bool isOpen();
bool close();
bool open() override;
bool isOpen() override;
bool close() override;
bool isEthernet() const override { return true; }
private:
char errbuf[PCAP_ERRBUF_SIZE] = { 0 };
neodevice_t& device;
uint8_t deviceMAC[6];
bool openable = true;
EthernetPacketizer ethPacketizer;
void readTask();
void writeTask();
void readTask() override;
void writeTask() override;
class NetworkInterface {
public:
uint8_t uuid;
uint8_t macAddress[8];
uint8_t macAddress[6];
std::string nameFromPCAP;
std::string descriptionFromPCAP;
std::string fullName;
+1 -1
View File
@@ -10,7 +10,7 @@ namespace icsneo {
class CDCACM : public VCP {
public:
CDCACM(const device_eventhandler_t& err, neodevice_t& forDevice) : VCP(err, forDevice) {}
static std::vector<neodevice_t> FindByProduct(int product) { return VCP::FindByProduct(product, { L"usbser" }); }
static void Find(std::vector<FoundDevice>& found) { return VCP::Find(found, { L"usbser" }); }
};
}
+7 -13
View File
@@ -5,31 +5,25 @@
#include "icsneo/device/tree/neoobd2pro/neoobd2pro.h"
#include "icsneo/device/tree/neoobd2sim/neoobd2sim.h"
#include "icsneo/device/tree/neovifire/neovifire.h"
#include "icsneo/device/tree/neovifire2/neovifire2eth.h"
#include "icsneo/device/tree/neovifire2/neovifire2usb.h"
#include "icsneo/device/tree/neovifire2/neovifire2.h"
#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/radgigastar/radgigastareth.h"
#include "icsneo/device/tree/radgigastar/radgigastarusb.h"
#include "icsneo/device/tree/radmars/radmarseth.h"
#include "icsneo/device/tree/radmars/radmarsusb.h"
#include "icsneo/device/tree/radgigastar/radgigastar.h"
#include "icsneo/device/tree/radmars/radmars.h"
#include "icsneo/device/tree/radmoon2/radmoon2.h"
#include "icsneo/device/tree/radmoonduo/radmoonduo.h"
#include "icsneo/device/tree/radpluto/radplutousb.h"
#include "icsneo/device/tree/radstar2/radstar2eth.h"
#include "icsneo/device/tree/radstar2/radstar2usb.h"
#include "icsneo/device/tree/radpluto/radpluto.h"
#include "icsneo/device/tree/radstar2/radstar2.h"
#include "icsneo/device/tree/radsupermoon/radsupermoon.h"
#include "icsneo/device/tree/valuecan3/valuecan3.h"
#include "icsneo/device/tree/valuecan4/valuecan4-1.h"
#include "icsneo/device/tree/valuecan4/valuecan4-2.h"
#include "icsneo/device/tree/valuecan4/valuecan4-2eleth.h"
#include "icsneo/device/tree/valuecan4/valuecan4-2elusb.h"
#include "icsneo/device/tree/valuecan4/valuecan4-2el.h"
#include "icsneo/device/tree/valuecan4/valuecan4-4.h"
#include "icsneo/device/tree/valuecan4/valuecan4industrialeth.h"
#include "icsneo/device/tree/valuecan4/valuecan4industrialusb.h"
#include "icsneo/device/tree/valuecan4/valuecan4industrial.h"
#include "icsneo/device/tree/vividcan/vividcan.h"
#endif
+1 -1
View File
@@ -10,7 +10,7 @@ namespace icsneo {
class FTDI : public VCP {
public:
FTDI(const device_eventhandler_t& err, neodevice_t& forDevice) : VCP(err, forDevice) {}
static std::vector<neodevice_t> FindByProduct(int product) { return VCP::FindByProduct(product, { L"serenum" /*, L"ftdibus" */ }); }
static void Find(std::vector<FoundDevice>& found) { return VCP::Find(found, { L"serenum" /*, L"ftdibus" */ }); }
};
}
+7 -11
View File
@@ -6,6 +6,7 @@
#include "icsneo/platform/windows/internal/pcapdll.h"
#include "icsneo/device/neodevice.h"
#include "icsneo/communication/driver.h"
#include "icsneo/device/founddevice.h"
#include "icsneo/api/eventmanager.h"
#include "icsneo/communication/ethernetpacketizer.h"
#include <string>
@@ -14,20 +15,15 @@ namespace icsneo {
class PCAP : public Driver {
public:
class PCAPFoundDevice {
public:
neodevice_t device;
std::vector<std::vector<uint8_t>> discoveryPackets;
};
static std::vector<PCAPFoundDevice> FindAll();
static void Find(std::vector<FoundDevice>& foundDevices);
static std::string GetEthDevSerialFromMacAddress(uint8_t product, uint16_t macSerial);
static bool IsHandleValid(neodevice_handle_t handle);
PCAP(const device_eventhandler_t& err, neodevice_t& forDevice);
bool open();
bool isOpen();
bool close();
bool open() override;
bool isOpen() override;
bool close() override;
bool isEthernet() const override { return true; }
private:
const PCAPDLL& pcap;
char errbuf[PCAP_ERRBUF_SIZE] = { 0 };
@@ -48,7 +44,7 @@ private:
class NetworkInterface {
public:
uint8_t uuid;
uint8_t macAddress[8];
uint8_t macAddress[6];
std::string nameFromWinPCAP;
std::string nameFromWin32API;
std::string descriptionFromWinPCAP;
+1 -1
View File
@@ -17,7 +17,7 @@ namespace icsneo {
// Virtual COM Port Communication
class VCP : public Driver {
public:
static std::vector<neodevice_t> FindByProduct(int product, std::vector<std::wstring> driverName);
static void Find(std::vector<FoundDevice>& found, std::vector<std::wstring> driverName);
static bool IsHandleValid(neodevice_handle_t handle);
typedef void(*fn_boolCallback)(bool success);