Windows: Fix build issues with EthPhyRegPacket

v0.3.0-dev
Paul Hollinsky 2022-02-14 19:20:50 -05:00
parent 6d92b7a03a
commit 0ded5508c1
4 changed files with 40 additions and 60 deletions

View File

@ -5,6 +5,7 @@
#include "icsneo/communication/packet/iso9141packet.h"
#include "icsneo/communication/packet/canpacket.h"
#include "icsneo/communication/packet/ethphyregpacket.h"
#include "icsneo/communication/message/ethphymessage.h"
using namespace icsneo;

View File

@ -36,25 +36,9 @@ std::shared_ptr<EthPhyMessage> HardwareEthernetPhyRegisterPacket::DecodeToMessag
phyMessage->Clause45Enable = (pEntry->Clause45Enable != 0u);
phyMessage->version = static_cast<uint8_t>(pEntry->version);
if(phyMessage->Clause45Enable)
{
phyMessage->clause45 =
{
.port = pEntry->clause45.port,
.device = pEntry->clause45.device,
.regAddr = pEntry->clause45.regAddr,
.regVal = pEntry->clause45.regVal
};
}
phyMessage->clause45 = pEntry->clause45;
else
{
phyMessage->clause22 =
{
.phyAddr = pEntry->clause22.phyAddr,
.page = pEntry->clause22.page,
.regAddr = pEntry->clause22.regAddr,
.regVal = pEntry->clause22.regVal
};
}
phyMessage->clause22 = pEntry->clause22;
msg->messages.push_back(phyMessage);
}
}

View File

@ -12,35 +12,26 @@
namespace icsneo {
struct Clause22Message
{
uint8_t phyAddr;
uint8_t page;
uint16_t regAddr;
uint16_t regVal;
};
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4201) // nameless struct/union
#endif
struct Clause45Message
{
uint8_t port;
uint8_t device;
uint16_t regAddr;
uint16_t regVal;
};
struct PhyMessage
{
struct PhyMessage {
bool Enabled;
bool WriteEnable;
bool Clause45Enable;
uint8_t version;
union
{
union {
Clause22Message clause22;
Clause45Message clause45;
};
};
#ifdef _MSC_VER
#pragma warning(pop)
#endif
//Internal message which provides an interface with device ethernet PHY registers,
//with Clause22 and Clause45 message support
class EthPhyMessage : public Message {

View File

@ -3,7 +3,6 @@
#ifdef __cplusplus
#include "icsneo/communication/message/ethphymessage.h"
#include "icsneo/api/eventmanager.h"
#include <cstdint>
#include <memory>
@ -14,35 +13,35 @@ namespace icsneo
class Packetizer;
class EthPhyMessage;
typedef struct
{
#pragma pack(push, 1)
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4201) // nameless struct/union
#endif
struct PhyRegisterHeader_t {
uint16_t numEntries;
uint8_t version;
uint8_t entryBytes;
} PhyRegisterHeader_t;
};
typedef struct
{
struct Clause22Message {
uint8_t phyAddr; //5 bits
uint8_t page; //8 bits
uint16_t regAddr; //5 bits
uint16_t regVal;
} Clause22Message_t; //6 bytes
}; //6 bytes
typedef struct
{
struct Clause45Message {
uint8_t port; //5 bits
uint8_t device; //5 bits
uint16_t regAddr;
uint16_t regVal;
} Clause45Message_t; //6 bytes
}; //6 bytes
typedef struct
{
union
{
struct
{
struct PhyRegisterPacket_t {
union {
struct {
uint16_t Enabled : 1;
uint16_t WriteEnable : 1;
uint16_t Clause45Enable : 1;
@ -52,20 +51,25 @@ typedef struct
uint16_t flags;
};
union
{
Clause22Message_t clause22;
Clause45Message_t clause45;
union {
Clause22Message clause22;
Clause45Message clause45;
};
} PhyRegisterPacket_t;
};
#ifdef _MSC_VER
#pragma warning(pop)
#endif
#pragma pack(pop)
static constexpr size_t MaxPhyEntries = 128u;
static constexpr size_t MaxBytesPhyEntries = MaxPhyEntries * sizeof(PhyRegisterHeader_t);
static constexpr uint8_t PhyPacketVersion = 1u;
static constexpr uint8_t FiveBits = 0x1Fu;
struct HardwareEthernetPhyRegisterPacket
{
class EthPhyMessage;
struct HardwareEthernetPhyRegisterPacket {
static std::shared_ptr<EthPhyMessage> DecodeToMessage(const std::vector<uint8_t>& bytestream, const device_eventhandler_t& report);
static bool EncodeFromMessage(const EthPhyMessage& message, std::vector<uint8_t>& bytestream, const device_eventhandler_t& report);
};