#include #include #include #include #include #include "icsneo/device/idevicesettings.h" #include namespace icsneo { struct DeviceSettingsNamespace { using EthLinkMode = AELinkMode; }; void init_idevicesettings(pybind11::module_& m) { pybind11::classh settings(m, "Settings"); pybind11::enum_(settings, "EthernetLinkMode") .value("Auto", DeviceSettingsNamespace::EthLinkMode::AE_LINK_AUTO) .value("Slave", DeviceSettingsNamespace::EthLinkMode::AE_LINK_SLAVE) .value("Master", DeviceSettingsNamespace::EthLinkMode::AE_LINK_MASTER); pybind11::enum_(settings, "PhyLinkMode") .value("ETH_LINK_MODE_AUTO_NEGOTIATION", ETH_LINK_MODE_AUTO_NEGOTIATION) .value("ETH_LINK_MODE_10MBPS_HALFDUPLEX", ETH_LINK_MODE_10MBPS_HALFDUPLEX) .value("ETH_LINK_MODE_10MBPS_FULLDUPLEX", ETH_LINK_MODE_10MBPS_FULLDUPLEX) .value("ETH_LINK_MODE_100MBPS_HALFDUPLEX", ETH_LINK_MODE_100MBPS_HALFDUPLEX) .value("ETH_LINK_MODE_100MBPS_FULLDUPLEX", ETH_LINK_MODE_100MBPS_FULLDUPLEX) .value("ETH_LINK_MODE_1GBPS_HALFDUPLEX", ETH_LINK_MODE_1GBPS_HALFDUPLEX) .value("ETH_LINK_MODE_1GBPS_FULLDUPLEX", ETH_LINK_MODE_1GBPS_FULLDUPLEX) .value("ETH_LINK_MODE_2_5GBPS_FULLDUPLEX", ETH_LINK_MODE_2_5GBPS_FULLDUPLEX) .value("ETH_LINK_MODE_5GBPS_FULLDUPLEX", ETH_LINK_MODE_5GBPS_FULLDUPLEX) .value("ETH_LINK_MODE_10GBPS_FULLDUPLEX", ETH_LINK_MODE_10GBPS_FULLDUPLEX); pybind11::enum_(settings, "LINMode") .value("Sleep", LINMode::SLEEP_MODE) .value("Slow", LINMode::SLOW_MODE) .value("Normal", LINMode::NORMAL_MODE) .value("Fast", LINMode::FAST_MODE); pybind11::classh(m, "IDeviceSettings") .def("apply", &IDeviceSettings::apply, pybind11::arg("temporary") = 0, pybind11::call_guard()) .def("apply_defaults", &IDeviceSettings::applyDefaults, pybind11::arg("temporary") = 0, pybind11::call_guard()) .def("refresh", &IDeviceSettings::refresh, pybind11::call_guard()) // Baudrate methods .def("get_baudrate", &IDeviceSettings::getBaudrateFor, pybind11::call_guard()) .def("set_baudrate", &IDeviceSettings::setBaudrateFor, pybind11::call_guard()) .def("get_fd_baudrate", &IDeviceSettings::getFDBaudrateFor, pybind11::call_guard()) .def("set_fd_baudrate", &IDeviceSettings::setFDBaudrateFor, pybind11::call_guard()) // Termination methods .def("is_termination_supported", &IDeviceSettings::isTerminationSupportedFor, pybind11::call_guard()) .def("can_termination_be_enabled", &IDeviceSettings::canTerminationBeEnabledFor, pybind11::call_guard()) .def("is_termination_enabled", &IDeviceSettings::isTerminationEnabledFor, pybind11::call_guard()) .def("set_termination", &IDeviceSettings::setTerminationFor, pybind11::call_guard()) .def("get_termination_groups", &IDeviceSettings::getTerminationGroups, pybind11::call_guard()) // LIN methods .def("is_commander_resistor_enabled", &IDeviceSettings::isCommanderResistorEnabledFor, pybind11::call_guard()) .def("set_commander_resistor", &IDeviceSettings::setCommanderResistorFor, pybind11::call_guard()) .def("get_lin_mode", &IDeviceSettings::getLINModeFor, pybind11::call_guard()) .def("set_lin_mode", &IDeviceSettings::setLINModeFor, pybind11::call_guard()) .def("get_lin_commander_response_time", &IDeviceSettings::getLINCommanderResponseTimeFor, pybind11::call_guard()) .def("set_lin_commander_response_time", &IDeviceSettings::setLINCommanderResponseTimeFor, pybind11::call_guard()) // Ethernet PHY methods (index-based for switch devices) .def("get_phy_enable", &IDeviceSettings::getPhyEnable, pybind11::call_guard()) .def("get_phy_mode", &IDeviceSettings::getPhyMode, pybind11::call_guard()) .def("get_phy_speed", &IDeviceSettings::getPhySpeed, pybind11::call_guard()) .def("set_phy_enable", &IDeviceSettings::setPhyEnable, pybind11::call_guard()) .def("set_phy_mode", &IDeviceSettings::setPhyMode, pybind11::call_guard()) .def("set_phy_speed", &IDeviceSettings::setPhySpeed, pybind11::call_guard()) // Ethernet PHY methods (network-based for multi-interface devices) .def("get_phy_enable_for", &IDeviceSettings::getPhyEnableFor, pybind11::call_guard()) .def("get_phy_role_for", &IDeviceSettings::getPhyRoleFor, pybind11::call_guard()) .def("get_phy_link_mode_for", &IDeviceSettings::getPhyLinkModeFor, pybind11::call_guard()) .def("set_phy_enable_for", &IDeviceSettings::setPhyEnableFor, pybind11::call_guard()) .def("set_phy_role_for", &IDeviceSettings::setPhyRoleFor, pybind11::call_guard()) .def("set_phy_link_mode_for", &IDeviceSettings::setPhyLinkModeFor, pybind11::call_guard()) .def("get_supported_phy_link_modes_for", &IDeviceSettings::getSupportedPhyLinkModesFor, pybind11::call_guard()) // 10BASE-T1S methods .def("is_t1s_plca_enabled", &IDeviceSettings::isT1SPLCAEnabledFor, pybind11::call_guard()) .def("set_t1s_plca", &IDeviceSettings::setT1SPLCAFor, pybind11::call_guard()) .def("get_t1s_local_id", &IDeviceSettings::getT1SLocalIDFor, pybind11::call_guard()) .def("set_t1s_local_id", &IDeviceSettings::setT1SLocalIDFor, pybind11::call_guard()) .def("get_t1s_max_nodes", &IDeviceSettings::getT1SMaxNodesFor, pybind11::call_guard()) .def("set_t1s_max_nodes", &IDeviceSettings::setT1SMaxNodesFor, pybind11::call_guard()) .def("get_t1s_tx_opp_timer", &IDeviceSettings::getT1STxOppTimerFor, pybind11::call_guard()) .def("set_t1s_tx_opp_timer", &IDeviceSettings::setT1STxOppTimerFor, pybind11::call_guard()) .def("get_t1s_max_burst", &IDeviceSettings::getT1SMaxBurstFor, pybind11::call_guard()) .def("set_t1s_max_burst", &IDeviceSettings::setT1SMaxBurstFor, pybind11::call_guard()) .def("get_t1s_burst_timer", &IDeviceSettings::getT1SBurstTimerFor, pybind11::call_guard()) .def("set_t1s_burst_timer", &IDeviceSettings::setT1SBurstTimerFor, pybind11::call_guard()) // Status properties .def_readonly("disabled", &IDeviceSettings::disabled) .def_readonly("readonly", &IDeviceSettings::readonly); } } // namespace icsneo