Device: Add RAD-Gemini

This commit is contained in:
Nicholas Zamora
2025-11-03 09:37:50 -05:00
committed by Kyle Schwarz
parent 3f3300d677
commit 563c444def
13 changed files with 183 additions and 1 deletions
+1
View File
@@ -129,6 +129,7 @@ enum class ChipID : uint8_t {
RADCOMET3_ZCHIP = 125,
Connect_LINUX = 126,
RADGigastar2_ZYNQ = 131,
RADGemini_MCHIP = 135,
Invalid = 255
};
+2 -1
View File
@@ -137,7 +137,8 @@ public:
Connect = 51,
RADComet3 = 54,
RADMoonT1S = 56,
RADGigastar2 = 57
RADGigastar2 = 57,
RADGemini = 60,
};
virtual ProductID getProductID() const = 0;
+4
View File
@@ -58,6 +58,7 @@ public:
RADGigastar2 = (0x00000029),
FIRE3_T1S_LIN = (0x0000002A),
FIRE3_T1S_SENT = (0x0000002B),
RADGemini = (0x0000002C),
RED = (0x00000040),
ECU = (0x00000080),
IEVB = (0x00000100),
@@ -148,6 +149,8 @@ public:
return "RAD-EpsilonXL";
case RADMoon3:
return "RAD-Moon 3";
case RADGemini:
return "RAD-Gemini";
case RADComet:
return "RAD-Comet";
case RED:
@@ -271,6 +274,7 @@ private:
#define ICSNEO_DEVICETYPE_RADGIGASTAR2 ((devicetype_t)0x00000029)
#define ICSNEO_DEVICETYPE_FIRE3_T1S_LIN ((devicetype_t)0x0000002A)
#define ICSNEO_DEVICETYPE_FIRE3_T1S_SENT ((devicetype_t)0x0000002B)
#define ICSNEO_DEVICETYPE_RADGEMINI ((devicetype_t)0x0000002C)
#define ICSNEO_DEVICETYPE_RED ((devicetype_t)0x00000040)
#define ICSNEO_DEVICETYPE_ECU ((devicetype_t)0x00000080)
#define ICSNEO_DEVICETYPE_IEVB ((devicetype_t)0x00000100)
@@ -0,0 +1,70 @@
#ifndef __RADGEMINI_H_
#define __RADGEMINI_H_
#ifdef __cplusplus
#include "icsneo/device/device.h"
#include "icsneo/device/devicetype.h"
#include "icsneo/device/tree/radgemini/radgeminisettings.h"
namespace icsneo {
class RADGemini : public Device {
public:
// Serial numbers start with GE
// USB PID is 0x110E, standard driver is CDCACM
ICSNEO_FINDABLE_DEVICE(RADGemini, DeviceType::RADGemini, "GE");
static const std::vector<Network>& GetSupportedNetworks() {
static std::vector<Network> supportedNetworks = {
Network::NetID::MDIO_01,
};
return supportedNetworks;
}
bool getEthPhyRegControlSupported() const override { return true; }
bool isOnlineSupported() const override { return false; }
bool supportsTC10() const override { return true; }
ProductID getProductID() const override { return ProductID::RADGemini; }
BootloaderPipeline getBootloader() override {
return BootloaderPipeline()
.add<EnterBootloaderPhase>()
.add<FlashPhase>(ChipID::RADGemini_MCHIP, BootloaderCommunication::RED)
.add<ReconnectPhase>()
.add<WaitPhase>(std::chrono::milliseconds(3000));
}
protected:
RADGemini(neodevice_t neodevice, const driver_factory_t& makeDriver) : Device(neodevice) {
initialize<RADGeminiSettings>(makeDriver);
}
void setupPacketizer(Packetizer& packetizer) override {
Device::setupPacketizer(packetizer);
packetizer.align16bit = true;
}
void setupEncoder(Encoder& encoder) override {
Device::setupEncoder(encoder);
encoder.supportEthPhy = true;
}
void setupSupportedRXNetworks(std::vector<Network>& 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
void setupSupportedTXNetworks(std::vector<Network>& txNetworks) override { setupSupportedRXNetworks(txNetworks); }
};
}
#endif // __cplusplus
#endif // __RADGEMINI_H_
@@ -0,0 +1,51 @@
#ifndef LIBICSNEO_RADGEMINISETTINGS_H
#define LIBICSNEO_RADGEMINISETTINGS_H
#include <stdint.h>
#include "icsneo/device/idevicesettings.h"
#ifdef __cplusplus
namespace icsneo {
#endif // __cplusplus
#pragma pack(push, 2)
typedef struct {
uint16_t perf_en; // 2
ETHERNET_SETTINGS2 ethernet1; // 16
ETHERNET_SETTINGS2 ethernet2; // 16
ETHERNET_SETTINGS2 autoEthernet1; // 16
ETHERNET_SETTINGS2 autoEthernet2; // 16
uint16_t network_enabled_on_boot; // 2
uint16_t network_enables; // 2
uint16_t network_enables_2; // 2
uint16_t network_enables_3; // 2
uint16_t network_enables_4; // 2
uint64_t network_enables_5; // 8
struct
{
uint16_t enableLatencyTest : 1;
uint16_t reserved : 15;
} flags; // 2
} radgemini_settings_t;
#pragma pack(pop)
#ifdef __cplusplus
#include <iostream>
class RADGeminiSettings : public IDeviceSettings {
public:
RADGeminiSettings(std::shared_ptr<Communication> com) : IDeviceSettings(com, sizeof(radgemini_settings_t)) {}
};
}
#endif // __cplusplus
#endif // LIBICSNEO_RADGEMINISETTINGS_H