mirror of
https://github.com/intrepidcs/libicsneo.git
synced 2026-09-30 21:02:08 +02:00
Message: EthPhyMessage: Add Status
This commit is contained in:
committed by
Kyle Schwarz
parent
0a67c9cf5d
commit
4c0781190e
@@ -39,6 +39,7 @@ std::shared_ptr<EthPhyMessage> HardwareEthernetPhyRegisterPacket::DecodeToMessag
|
|||||||
phyMessage->WriteEnable = (pEntry->WriteEnable != 0u);
|
phyMessage->WriteEnable = (pEntry->WriteEnable != 0u);
|
||||||
phyMessage->Clause45Enable = (pEntry->Clause45Enable != 0u);
|
phyMessage->Clause45Enable = (pEntry->Clause45Enable != 0u);
|
||||||
phyMessage->BusIndex = static_cast<uint8_t>(pEntry->BusIndex);
|
phyMessage->BusIndex = static_cast<uint8_t>(pEntry->BusIndex);
|
||||||
|
phyMessage->Status = static_cast<uint8_t>(pEntry->status);
|
||||||
phyMessage->Version = static_cast<uint8_t>(pEntry->version);
|
phyMessage->Version = static_cast<uint8_t>(pEntry->version);
|
||||||
if(phyMessage->Clause45Enable)
|
if(phyMessage->Clause45Enable)
|
||||||
phyMessage->Clause45 = pEntry->clause45;
|
phyMessage->Clause45 = pEntry->clause45;
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include "icsneo/communication/packet.h"
|
#include "icsneo/communication/packet.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
namespace icsneo {
|
namespace icsneo {
|
||||||
|
|
||||||
@@ -22,6 +23,9 @@ struct PhyMessage {
|
|||||||
bool Clause45Enable = false;
|
bool Clause45Enable = false;
|
||||||
uint8_t BusIndex = 0;
|
uint8_t BusIndex = 0;
|
||||||
uint8_t Version = PhyPacketVersion;
|
uint8_t Version = PhyPacketVersion;
|
||||||
|
// Unset on locally constructed messages; every decoded response sets the raw wire status.
|
||||||
|
// Ignored when sending. A value does not establish firmware error coverage.
|
||||||
|
std::optional<uint8_t> Status;
|
||||||
union {
|
union {
|
||||||
Clause22Message Clause22{};
|
Clause22Message Clause22{};
|
||||||
Clause45Message Clause45;
|
Clause45Message Clause45;
|
||||||
|
|||||||
@@ -17,13 +17,21 @@ std::vector<uint8_t> encode(const EthPhyMessage& msg) {
|
|||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TEST(EthPhyRegister, KnownWireBytes) {
|
TEST(EthPhyRegister, KnownWireBytesAndStatus) {
|
||||||
for(bool clause45 : {false, true}) {
|
for(bool clause45 : {false, true}) {
|
||||||
auto msg = request(clause45, true);
|
auto msg = request(clause45, true);
|
||||||
|
EXPECT_FALSE(msg.messages[0]->Status.has_value());
|
||||||
auto bytes = encode(msg);
|
auto bytes = encode(msg);
|
||||||
EXPECT_EQ(bytes, (std::vector<uint8_t>{1, 0, 1, 8, static_cast<uint8_t>(clause45 ? 7 : 3), 0x1f,
|
EXPECT_EQ(bytes, (std::vector<uint8_t>{1, 0, 1, 8, static_cast<uint8_t>(clause45 ? 7 : 3), 0x1f,
|
||||||
31, static_cast<uint8_t>(clause45 ? 31 : 255), static_cast<uint8_t>(clause45 ? 255 : 31),
|
31, static_cast<uint8_t>(clause45 ? 31 : 255), static_cast<uint8_t>(clause45 ? 255 : 31),
|
||||||
static_cast<uint8_t>(clause45 ? 255 : 0), 0x34, 0x12}));
|
static_cast<uint8_t>(clause45 ? 255 : 0), 0x34, 0x12}));
|
||||||
|
for(uint8_t status = 0; status < 8; ++status) {
|
||||||
|
bytes[4] = static_cast<uint8_t>((clause45 ? 7 : 3) | (status << 3));
|
||||||
|
auto decoded = HardwareEthernetPhyRegisterPacket::DecodeToMessage(bytes, ignore);
|
||||||
|
ASSERT_NE(decoded, nullptr);
|
||||||
|
EXPECT_EQ(decoded->messages[0]->Status, status);
|
||||||
|
EXPECT_EQ(encode(*decoded)[4], clause45 ? 7 : 3); // never retransmit response status
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TEST(EthPhyRegister, InvalidRequestsLeaveOutputUntouched) {
|
TEST(EthPhyRegister, InvalidRequestsLeaveOutputUntouched) {
|
||||||
|
|||||||
Reference in New Issue
Block a user