diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt index 441825f..0691eab 100644 --- a/bindings/python/CMakeLists.txt +++ b/bindings/python/CMakeLists.txt @@ -39,6 +39,8 @@ pybind11_add_module(icsneopy icsneopy/communication/message/filter/messagefilter.cpp icsneopy/flexray/flexray.cpp icsneopy/disk/diskdriver.cpp + icsneopy/device/chipid.cpp + icsneopy/device/versionreport.cpp icsneopy/device/device.cpp icsneopy/device/extensions/deviceextension.cpp icsneopy/device/idevicesettings.cpp diff --git a/bindings/python/icsneopy/device/chipid.cpp b/bindings/python/icsneopy/device/chipid.cpp new file mode 100644 index 0000000..dfa8b28 --- /dev/null +++ b/bindings/python/icsneopy/device/chipid.cpp @@ -0,0 +1,135 @@ +#include +#include +#include + +#include "icsneo/device/chipid.h" + +namespace icsneo { + +void init_chipid(pybind11::module_& m) { + pybind11::enum_(m, "ChipID") + .value("neoVIFIRE_MCHIP", ChipID::neoVIFIRE_MCHIP) + .value("neoVIFIRE_LCHIP", ChipID::neoVIFIRE_LCHIP) + .value("neoVIFIRE_UCHIP", ChipID::neoVIFIRE_UCHIP) + .value("neoVIFIRE_JCHIP", ChipID::neoVIFIRE_JCHIP) + .value("ValueCAN3_MCHIP", ChipID::ValueCAN3_MCHIP) + .value("neoVIECU_MPIC", ChipID::neoVIECU_MPIC) + .value("neoVIIEVB_MPIC", ChipID::neoVIIEVB_MPIC) + .value("neoVIPENDANT_MPIC", ChipID::neoVIPENDANT_MPIC) + .value("neoVIFIRE_VNET_MCHIP", ChipID::neoVIFIRE_VNET_MCHIP) + .value("neoVIFIRE_VNET_LCHIP", ChipID::neoVIFIRE_VNET_LCHIP) + .value("neoVIPLASMA_Core", ChipID::neoVIPLASMA_Core) + .value("neoVIPLASMA_HID", ChipID::neoVIPLASMA_HID) + .value("neoVIANALOG_MPIC", ChipID::neoVIANALOG_MPIC) + .value("neoVIPLASMA_ANALOG_Core", ChipID::neoVIPLASMA_ANALOG_Core) + .value("neoVIPLASMA_FlexRay_Core", ChipID::neoVIPLASMA_FlexRay_Core) + .value("neoVIPLASMA_Core_1_12", ChipID::neoVIPLASMA_Core_1_12) + .value("neoVIFIRE_Slave_VNET_MCHIP", ChipID::neoVIFIRE_Slave_VNET_MCHIP) + .value("neoVIFIRE_Slave_VNET_LCHIP", ChipID::neoVIFIRE_Slave_VNET_LCHIP) + .value("neoVIION_Core", ChipID::neoVIION_Core) + .value("neoVIION_HID", ChipID::neoVIION_HID) + .value("neoVIION_Core_Loader", ChipID::neoVIION_Core_Loader) + .value("neoVIION_HID_Loader", ChipID::neoVIION_HID_Loader) + .value("neoVIION_FPGA_BIT", ChipID::neoVIION_FPGA_BIT) + .value("neoVIFIRE_VNET_EP_MCHIP", ChipID::neoVIFIRE_VNET_EP_MCHIP) + .value("neoVIFIRE_VNET_EP_LCHIP", ChipID::neoVIFIRE_VNET_EP_LCHIP) + .value("neoVIAnalogOut_MCHIP", ChipID::neoVIAnalogOut_MCHIP) + .value("neoVIMOST25_MCHIP", ChipID::neoVIMOST25_MCHIP) + .value("neoVIMOST50_MCHIP", ChipID::neoVIMOST50_MCHIP) + .value("neoVIMOST150_MCHIP", ChipID::neoVIMOST150_MCHIP) + .value("ValueCAN4_4_MCHIP", ChipID::ValueCAN4_4_MCHIP) + .value("ValueCAN4_4_SCHIP", ChipID::ValueCAN4_4_SCHIP) + .value("cmProbe_ZYNQ", ChipID::cmProbe_ZYNQ) + .value("EEVB_STM32", ChipID::EEVB_STM32) + .value("neoVIFIRE_Slave_VNET_EP_MCHIP", ChipID::neoVIFIRE_Slave_VNET_EP_MCHIP) + .value("neoVIFIRE_Slave_VNET_EP_LCHIP", ChipID::neoVIFIRE_Slave_VNET_EP_LCHIP) + .value("RADStar_MCHIP", ChipID::RADStar_MCHIP) + .value("ValueCANrf_MCHIP", ChipID::ValueCANrf_MCHIP) + .value("neoVIFIRE2_MCHIP", ChipID::neoVIFIRE2_MCHIP) + .value("neoVIFIRE2_CCHIP", ChipID::neoVIFIRE2_CCHIP) + .value("neoVIFIRE2_Core", ChipID::neoVIFIRE2_Core) + .value("neoVIFIRE2_BLECHIP", ChipID::neoVIFIRE2_BLECHIP) + .value("neoVIFIRE2_ZYNQ", ChipID::neoVIFIRE2_ZYNQ) + .value("neoVIFIRE2_SECURITYCHIP", ChipID::neoVIFIRE2_SECURITYCHIP) + .value("RADGalaxy_ZYNQ", ChipID::RADGalaxy_ZYNQ) + .value("neoVIFIRE2_VNET_MCHIP", ChipID::neoVIFIRE2_VNET_MCHIP) + .value("neoVIFIRE2_Slave_VNET_A_MCHIP", ChipID::neoVIFIRE2_Slave_VNET_A_MCHIP) + .value("neoVIFIRE2_Slave_VNET_A_CCHIP", ChipID::neoVIFIRE2_Slave_VNET_A_CCHIP) + .value("neoVIFIRE2_VNET_CCHIP", ChipID::neoVIFIRE2_VNET_CCHIP) + .value("neoVIFIRE2_VNET_Core", ChipID::neoVIFIRE2_VNET_Core) + .value("RADStar2_ZYNQ", ChipID::RADStar2_ZYNQ) + .value("VividCAN_MCHIP", ChipID::VividCAN_MCHIP) + .value("neoOBD2SIM_MCHIP", ChipID::neoOBD2SIM_MCHIP) + .value("neoVIFIRE2_VNETZ_MCHIP", ChipID::neoVIFIRE2_VNETZ_MCHIP) + .value("neoVIFIRE2_VNETZ_ZYNQ", ChipID::neoVIFIRE2_VNETZ_ZYNQ) + .value("neoVIFIRE2_Slave_VNETZ_A_MCHIP", ChipID::neoVIFIRE2_Slave_VNETZ_A_MCHIP) + .value("neoVIFIRE2_Slave_VNETZ_A_ZYNQ", ChipID::neoVIFIRE2_Slave_VNETZ_A_ZYNQ) + .value("VividCAN_EXT_FLASH", ChipID::VividCAN_EXT_FLASH) + .value("VividCAN_NRF52", ChipID::VividCAN_NRF52) + .value("cmProbe_ZYNQ_Unused", ChipID::cmProbe_ZYNQ_Unused) + .value("neoOBD2PRO_MCHIP", ChipID::neoOBD2PRO_MCHIP) + .value("ValueCAN4_1_MCHIP", ChipID::ValueCAN4_1_MCHIP) + .value("ValueCAN4_2_MCHIP", ChipID::ValueCAN4_2_MCHIP) + .value("ValueCAN4_4_2EL_Core", ChipID::ValueCAN4_4_2EL_Core) + .value("neoOBD2PRO_SCHIP", ChipID::neoOBD2PRO_SCHIP) + .value("ValueCAN4_2EL_MCHIP", ChipID::ValueCAN4_2EL_MCHIP) + .value("neoECUAVBTSN_MCHIP", ChipID::neoECUAVBTSN_MCHIP) + .value("neoOBD2PRO_Core", ChipID::neoOBD2PRO_Core) + .value("RADSupermoon_ZYNQ", ChipID::RADSupermoon_ZYNQ) + .value("RADMoon2_ZYNQ", ChipID::RADMoon2_ZYNQ) + .value("VividCANPRO_MCHIP", ChipID::VividCANPRO_MCHIP) + .value("VividCANPRO_EXT_FLASH", ChipID::VividCANPRO_EXT_FLASH) + .value("RADPluto_MCHIP", ChipID::RADPluto_MCHIP) + .value("RADMars_ZYNQ", ChipID::RADMars_ZYNQ) + .value("neoECU12_MCHIP", ChipID::neoECU12_MCHIP) + .value("RADIOCANHUB_MCHIP", ChipID::RADIOCANHUB_MCHIP) + .value("FlexRay_VNETZ_ZCHIP", ChipID::FlexRay_VNETZ_ZCHIP) + .value("neoOBD2_LCBADGE_MCHIP", ChipID::neoOBD2_LCBADGE_MCHIP) + .value("neoOBD2_LCBADGE_SCHIP", ChipID::neoOBD2_LCBADGE_SCHIP) + .value("RADMoonDuo_MCHIP", ChipID::RADMoonDuo_MCHIP) + .value("neoVIFIRE3_ZCHIP", ChipID::neoVIFIRE3_ZCHIP) + .value("FlexRay_VNETZ_FCHIP", ChipID::FlexRay_VNETZ_FCHIP) + .value("RADJupiter_MCHIP", ChipID::RADJupiter_MCHIP) + .value("ValueCAN4Industrial_MCHIP", ChipID::ValueCAN4Industrial_MCHIP) + .value("EtherBADGE_MCHIP", ChipID::EtherBADGE_MCHIP) + .value("RADMars_3_ZYNQ", ChipID::RADMars_3_ZYNQ) + .value("RADGigastar_USBZ_ZYNQ", ChipID::RADGigastar_USBZ_ZYNQ) + .value("RADGigastar_ZYNQ", ChipID::RADGigastar_ZYNQ) + .value("RAD4G_MCHIP", ChipID::RAD4G_MCHIP) + .value("neoVIFIRE3_SCHIP", ChipID::neoVIFIRE3_SCHIP) + .value("RADEpsilon_MCHIP", ChipID::RADEpsilon_MCHIP) + .value("RADA2B_ZCHIP", ChipID::RADA2B_ZCHIP) + .value("neoOBD2Dev_MCHIP", ChipID::neoOBD2Dev_MCHIP) + .value("neoOBD2Dev_SCHIP", ChipID::neoOBD2Dev_SCHIP) + .value("neoOBD2SIMDoIP_MCHIP", ChipID::neoOBD2SIMDoIP_MCHIP) + .value("SFPModule_MCHIP", ChipID::SFPModule_MCHIP) + .value("RADEpsilonT_MCHIP", ChipID::RADEpsilonT_MCHIP) + .value("RADEpsilonExpress_MCHIP", ChipID::RADEpsilonExpress_MCHIP) + .value("RADProxima_MCHIP", ChipID::RADProxima_MCHIP) + .value("NewDevice57_ZCHIP", ChipID::NewDevice57_ZCHIP) + .value("RAD_GALAXY_2_ZMPCHIP_ID", ChipID::RAD_GALAXY_2_ZMPCHIP_ID) + .value("NewDevice59_MCHIP", ChipID::NewDevice59_MCHIP) + .value("RADMoon2_Z7010_ZYNQ", ChipID::RADMoon2_Z7010_ZYNQ) + .value("neoVIFIRE2_CORE_SG4", ChipID::neoVIFIRE2_CORE_SG4) + .value("RADBMS_MCHIP", ChipID::RADBMS_MCHIP) + .value("RADMoon2_ZL_MCHIP", ChipID::RADMoon2_ZL_MCHIP) + .value("RADGigastar_USBZ_Z7010_ZYNQ", ChipID::RADGigastar_USBZ_Z7010_ZYNQ) + .value("neoVIFIRE3_LINUX", ChipID::neoVIFIRE3_LINUX) + .value("RADGigastar_USBZ_Z7007S_ZYNQ", ChipID::RADGigastar_USBZ_Z7007S_ZYNQ) + .value("VEM_01_8DW_ZCHIP", ChipID::VEM_01_8DW_ZCHIP) + .value("RADGalaxy_FFG_Zynq", ChipID::RADGalaxy_FFG_Zynq) + .value("RADMoon3_MCHIP", ChipID::RADMoon3_MCHIP) + .value("RADComet_ZYNQ", ChipID::RADComet_ZYNQ) + .value("VEM_02_FR_ZCHIP", ChipID::VEM_02_FR_ZCHIP) + .value("RADA2B_REVB_ZCHIP", ChipID::RADA2B_REVB_ZCHIP) + .value("RADGigastar_FFG_ZYNQ", ChipID::RADGigastar_FFG_ZYNQ) + .value("VEM_02_FR_FCHIP", ChipID::VEM_02_FR_FCHIP) + .value("Connect_ZCHIP", ChipID::Connect_ZCHIP) + .value("RADGALAXY2_SYSMON_CHIP", ChipID::RADGALAXY2_SYSMON_CHIP) + .value("RADCOMET3_ZCHIP", ChipID::RADCOMET3_ZCHIP) + .value("Connect_LINUX", ChipID::Connect_LINUX) + .value("RADGigastar2_ZYNQ", ChipID::RADGigastar2_ZYNQ) + .value("Invalid", ChipID::Invalid); +} + +} // namespace icsneo diff --git a/bindings/python/icsneopy/device/device.cpp b/bindings/python/icsneopy/device/device.cpp index 3cbe905..7b7f803 100644 --- a/bindings/python/icsneopy/device/device.cpp +++ b/bindings/python/icsneopy/device/device.cpp @@ -56,6 +56,7 @@ void init_device(pybind11::module_& m) { .def("upload_coremini", [](Device& device, std::string& path, Disk::MemoryType memType) { std::ifstream ifs(path, std::ios::binary); return device.uploadCoremini(ifs, memType); }, pybind11::call_guard()) .def("write_macsec_config", &Device::writeMACsecConfig, pybind11::call_guard()) .def("send_eth_phy_msg", &Device::sendEthPhyMsg, pybind11::arg("message"), pybind11::arg("timeout") = std::chrono::milliseconds(50), pybind11::call_guard()) + .def("get_chip_versions", &Device::getChipVersions, pybind11::arg("refreshComponents") = true, pybind11::call_guard()) .def_readonly("settings", &Device::settings); } diff --git a/bindings/python/icsneopy/device/versionreport.cpp b/bindings/python/icsneopy/device/versionreport.cpp new file mode 100644 index 0000000..e8a5d84 --- /dev/null +++ b/bindings/python/icsneopy/device/versionreport.cpp @@ -0,0 +1,19 @@ +#include +#include +#include + +#include "icsneo/device/versionreport.h" + +namespace icsneo { + +void init_versionreport(pybind11::module_& m) { + pybind11::class_(m, "VersionReport") + .def_readonly("id", &VersionReport::id) + .def_readonly("name", &VersionReport::name) + .def_readonly("major", &VersionReport::major) + .def_readonly("minor", &VersionReport::minor) + .def_readonly("maintenance", &VersionReport::maintenance) + .def_readonly("build", &VersionReport::build); +} + +} // namespace icsneo diff --git a/bindings/python/icsneopy/icsneocpp.cpp b/bindings/python/icsneopy/icsneocpp.cpp index fe074f9..e99ea98 100644 --- a/bindings/python/icsneopy/icsneocpp.cpp +++ b/bindings/python/icsneopy/icsneocpp.cpp @@ -26,6 +26,8 @@ void init_macsecmessage(pybind11::module_&); void init_scriptstatusmessage(pybind11::module_&); void init_diskdriver(pybind11::module_&); void init_deviceextension(pybind11::module_&); +void init_chipid(pybind11::module_&); +void init_versionreport(pybind11::module_&); void init_device(pybind11::module_&); void init_messagefilter(pybind11::module_&); void init_messagecallback(pybind11::module_&); @@ -63,6 +65,8 @@ PYBIND11_MODULE(icsneopy, m) { init_diskdriver(m); init_flexray(m); init_ethphymessage(m); + init_chipid(m); + init_versionreport(m); init_device(m); init_deviceextension(m); init_idevicesettings(m); diff --git a/docs/icsneopy/examples.rst b/docs/icsneopy/examples.rst index f27ef55..7f6dc07 100644 --- a/docs/icsneopy/examples.rst +++ b/docs/icsneopy/examples.rst @@ -66,3 +66,11 @@ Complete Ethernet Example .. literalinclude:: ../../examples/python/ethernet/ethernet_complete_example.py :language: python + +Device Firmware/Chip Versions +============================= + +:download:`Download example <../../examples/python/device/chip_versions.py>` + +.. literalinclude:: ../../examples/python/device/chip_versions.py + :language: python diff --git a/examples/python/device/chip_versions.py b/examples/python/device/chip_versions.py new file mode 100644 index 0000000..fc2dadf --- /dev/null +++ b/examples/python/device/chip_versions.py @@ -0,0 +1,30 @@ +import icsneopy + +def chip_versions(): + devices = icsneopy.find_all_devices() + + if len(devices) == 0: + print("no devices found") + return False + + device = devices[0] + print(f"selected {device}") + + if not device.open(): + print("unable to open device") + return False + + chip_versions = device.get_chip_versions() + if not chip_versions: + print("no chip versions") + return False + + print("chip versions:") + for i in chip_versions: + version = f"{i.major}.{i.minor}.{i.maintenance}.{i.build}" + print(f" id: {i.id}, name: {i.name}, version: {version}") + + return True + +if __name__ == "__main__": + chip_versions()