diff --git a/bindings/python/icsneopy/communication/message/ethernetstatusmessage.cpp b/bindings/python/icsneopy/communication/message/ethernetstatusmessage.cpp index cedc3ac..ee2ebca 100644 --- a/bindings/python/icsneopy/communication/message/ethernetstatusmessage.cpp +++ b/bindings/python/icsneopy/communication/message/ethernetstatusmessage.cpp @@ -22,7 +22,8 @@ void init_ethernetstatusmessage(pybind11::module_& m) { .value("LinkModeAuto", EthernetStatusMessage::LinkMode::LinkModeAuto) .value("LinkModeMaster", EthernetStatusMessage::LinkMode::LinkModeMaster) .value("LinkModeSlave", EthernetStatusMessage::LinkMode::LinkModeSlave) - .value("LinkModeInvalid", EthernetStatusMessage::LinkMode::LinkModeInvalid); + .value("LinkModeInvalid", EthernetStatusMessage::LinkMode::LinkModeInvalid) + .value("LinkModeNone", EthernetStatusMessage::LinkMode::LinkModeNone); ethernetStatusMessage .def_readonly("network", &EthernetStatusMessage::network) diff --git a/communication/message/ethernetstatusmessage.cpp b/communication/message/ethernetstatusmessage.cpp index bddeddd..31eb99a 100644 --- a/communication/message/ethernetstatusmessage.cpp +++ b/communication/message/ethernetstatusmessage.cpp @@ -13,7 +13,14 @@ enum LinkSpeed { ethSpeed10000, }; -enum LinkMode { +enum TLinkMode { + T_LINK_NONE, + T_LINK_MASTER, + T_LINK_SLAVE, + T_LINK_AUTO, +}; + +enum AELinkMode { AE_LINK_AUTO, AE_LINK_MASTER, AE_LINK_SLAVE, @@ -46,11 +53,25 @@ std::shared_ptr EthernetStatusMessage::DecodeToMessage(const std::vecto default: return nullptr; } LinkMode mode; - switch(packet->mode) { - case AE_LINK_INVALID: mode = EthernetStatusMessage::LinkMode::LinkModeInvalid; break; - case AE_LINK_AUTO: mode = EthernetStatusMessage::LinkMode::LinkModeAuto; break; - case AE_LINK_MASTER: mode = EthernetStatusMessage::LinkMode::LinkModeMaster; break; - case AE_LINK_SLAVE: mode = EthernetStatusMessage::LinkMode::LinkModeSlave; break; + switch(Network(packet->network).getType()) { + case Network::Type::Ethernet: + switch(packet->mode) { + case T_LINK_NONE: mode = EthernetStatusMessage::LinkMode::LinkModeNone; break; + case T_LINK_MASTER: mode = EthernetStatusMessage::LinkMode::LinkModeMaster; break; + case T_LINK_SLAVE: mode = EthernetStatusMessage::LinkMode::LinkModeSlave; break; + case T_LINK_AUTO: mode = EthernetStatusMessage::LinkMode::LinkModeAuto; break; + default: return nullptr; + } + break; + case Network::Type::AutomotiveEthernet: + switch(packet->mode) { + case AE_LINK_AUTO: mode = EthernetStatusMessage::LinkMode::LinkModeAuto; break; + case AE_LINK_MASTER: mode = EthernetStatusMessage::LinkMode::LinkModeMaster; break; + case AE_LINK_SLAVE: mode = EthernetStatusMessage::LinkMode::LinkModeSlave; break; + case AE_LINK_INVALID: mode = EthernetStatusMessage::LinkMode::LinkModeInvalid; break; + default: return nullptr; + } + break; default: return nullptr; } return std::make_shared(packet->network, packet->state, speed, packet->duplex, mode); diff --git a/include/icsneo/communication/message/ethernetstatusmessage.h b/include/icsneo/communication/message/ethernetstatusmessage.h index adacbbc..7b83305 100644 --- a/include/icsneo/communication/message/ethernetstatusmessage.h +++ b/include/icsneo/communication/message/ethernetstatusmessage.h @@ -25,6 +25,7 @@ public: LinkModeMaster, LinkModeSlave, LinkModeInvalid, + LinkModeNone, }; EthernetStatusMessage(Network net, bool state, LinkSpeed speed, bool duplex, LinkMode mode) : Message(Type::EthernetStatus), network(net), state(state), speed(speed), duplex(duplex), mode(mode) {}