diff --git a/bindings/python/icsneopy/device/chipid.cpp b/bindings/python/icsneopy/device/chipid.cpp index 7df896c..fa86210 100644 --- a/bindings/python/icsneopy/device/chipid.cpp +++ b/bindings/python/icsneopy/device/chipid.cpp @@ -103,7 +103,7 @@ void init_chipid(pybind11::module_& m) { .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("SFPModule_88q2112_MCHIP", ChipID::SFPModule_88q2112_MCHIP) .value("RADEpsilonT_MCHIP", ChipID::RADEpsilonT_MCHIP) .value("RADEpsilonExpress_MCHIP", ChipID::RADEpsilonExpress_MCHIP) .value("RADProxima_MCHIP", ChipID::RADProxima_MCHIP) @@ -126,10 +126,14 @@ void init_chipid(pybind11::module_& m) { .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("SFPModule_88q2221_MCHIP", ChipID::SFPModule_88q2221_MCHIP) .value("RADGALAXY2_SYSMON_CHIP", ChipID::RADGALAXY2_SYSMON_CHIP) + .value("SFPModule_88q3244_MCHIP", ChipID::SFPModule_88q3244_MCHIP) .value("RADCOMET3_ZCHIP", ChipID::RADCOMET3_ZCHIP) .value("Connect_LINUX", ChipID::Connect_LINUX) + .value("SFPModule_lan8670_MCHIP", ChipID::SFPModule_lan8670_MCHIP) .value("RADGigastar2_ZYNQ", ChipID::RADGigastar2_ZYNQ) + .value("SFPModule_ent11100_MCHIP", ChipID::SFPModule_ent11100_MCHIP) .value("RADGemini_MCHIP", ChipID::RADGemini_MCHIP) .value("Invalid", ChipID::Invalid) .finalize(); diff --git a/communication/decoder.cpp b/communication/decoder.cpp index 4ed6b79..4b85f67 100644 --- a/communication/decoder.cpp +++ b/communication/decoder.cpp @@ -326,11 +326,15 @@ bool Decoder::decode(std::shared_ptr& result, const std::shared_ptrdata); return true; + case ExtendedCommand::SoftwareUpdate: { + result = std::make_shared(ExtendedCommand::SoftwareUpdate, ExtendedResponse::OperationPending, packet->data); + return true; + } case ExtendedCommand::GenericReturn: { if(packet->data.size() < sizeof(ExtendedResponseMessage::PackedGenericResponse)) break; const auto& packedResp = *reinterpret_cast(packet->data.data()); - result = std::make_shared(packedResp.command, packedResp.returnCode); + result = std::make_shared(packedResp.command, packedResp.returnCode, packet->data); return true; } case ExtendedCommand::LiveData: diff --git a/include/icsneo/communication/command.h b/include/icsneo/communication/command.h index df8ad09..1e7fb16 100644 --- a/include/icsneo/communication/command.h +++ b/include/icsneo/communication/command.h @@ -55,6 +55,7 @@ enum class ExtendedCommand : uint16_t { GetSupportedFeatures = 0x0018, GetGPTPStatus = 0x0019, GetComponentVersions = 0x001A, + SoftwareUpdate = 0x001B, Reboot = 0x001C, SetRootFSEntryFlags = 0x0027, TransmitCoreminiMessage = 0x0028, diff --git a/include/icsneo/communication/message/extendedresponsemessage.h b/include/icsneo/communication/message/extendedresponsemessage.h index 58c9620..c5cfdb6 100644 --- a/include/icsneo/communication/message/extendedresponsemessage.h +++ b/include/icsneo/communication/message/extendedresponsemessage.h @@ -10,8 +10,8 @@ namespace icsneo { class ExtendedResponseMessage : public Message { public: - ExtendedResponseMessage(ExtendedCommand cmd, ExtendedResponse resp = ExtendedResponse::OK) - : Message(Message::Type::ExtendedResponse), command(cmd), response(resp) {} + ExtendedResponseMessage(ExtendedCommand cmd, ExtendedResponse resp = ExtendedResponse::OK, const std::vector& buf = {}) + : Message(Message::Type::ExtendedResponse), command(cmd), response(resp), data(buf) {} const ExtendedCommand command; const ExtendedResponse response; diff --git a/include/icsneo/device/chipid.h b/include/icsneo/device/chipid.h index bdabd70..3cc481c 100644 --- a/include/icsneo/device/chipid.h +++ b/include/icsneo/device/chipid.h @@ -102,7 +102,7 @@ enum class ChipID : uint8_t { neoOBD2Dev_MCHIP = 94, neoOBD2Dev_SCHIP = 95, neoOBD2SIMDoIP_MCHIP = 96, - SFPModule_MCHIP = 97, + SFPModule_88q2112_MCHIP = 97, RADEpsilonT_MCHIP = 98, RADEpsilonExpress_MCHIP = 99, RADProxima_MCHIP = 100, @@ -125,12 +125,16 @@ enum class ChipID : uint8_t { RADGigastar_FFG_ZYNQ = 117, VEM_02_FR_FCHIP = 118, Connect_ZCHIP = 121, + SFPModule_88q2221_MCHIP = 122, RADGALAXY2_SYSMON_CHIP = 123, + SFPModule_88q3244_MCHIP = 124, RADCOMET3_ZCHIP = 125, Connect_LINUX = 126, + SFPModule_lan8670_MCHIP = 127, VEM_04_T1S_LIN_ZCHIP = 129, RADMOONT1S_ZCHIP = 130, RADGigastar2_ZYNQ = 131, + SFPModule_ent11100_MCHIP = 132, RADGemini_MCHIP = 135, Invalid = 255 }; diff --git a/include/icsneo/device/device.h b/include/icsneo/device/device.h index ee1c704..eea797f 100644 --- a/include/icsneo/device/device.h +++ b/include/icsneo/device/device.h @@ -130,14 +130,18 @@ public: EtherBADGE = 38, RADEpsilon = 39, RADA2B = 40, - SFPModule = 41, + SFPModule_88q2112 = 41, RADGalaxy2 = 47, RADMoon3 = 49, RADComet = 50, Connect = 51, + SFPModule_88q2221m = 52, + SFPModule_88q4364 = 53, RADComet3 = 54, + SFPModule_lan8670 = 55, RADMoonT1S = 56, RADGigastar2 = 57, + SFPModule_ent11100 = 58, RADGemini = 60, }; diff --git a/include/icsneo/device/tree/radgigastar/radgigastar.h b/include/icsneo/device/tree/radgigastar/radgigastar.h index c1b3a44..047f01d 100644 --- a/include/icsneo/device/tree/radgigastar/radgigastar.h +++ b/include/icsneo/device/tree/radgigastar/radgigastar.h @@ -35,6 +35,11 @@ public: {ChipID::RADGigastar_USBZ_ZYNQ, true, "USB ZCHIP", "RADGigastar_USBz_SW_bin", 2, FirmwareType::Zip}, {ChipID::RADGigastar_USBZ_Z7010_ZYNQ, false, "USB ZCHIP", "RADGigastar_USBz_Z7010_SW_bin", 2, FirmwareType::Zip}, {ChipID::RADGigastar_USBZ_Z7007S_ZYNQ, false, "USB ZCHIP", "RADGigastar_USBz_Z7007s_SW_bin", 2, FirmwareType::Zip}, + {ChipID::SFPModule_88q2112_MCHIP, true, "SFP-MV2112", "sfp_mv2112_a2_mchip_ief", 3, FirmwareType::IEF}, + {ChipID::SFPModule_88q2221_MCHIP, true, "SFP-MV2221M", "sfp_mv2221m_b2_mchip_ief", 3, FirmwareType::IEF}, + {ChipID::SFPModule_lan8670_MCHIP, true, "SFP-MC8670", "sfp_module_lan8670_ief", 3, FirmwareType::IEF}, + {ChipID::SFPModule_88q3244_MCHIP, true, "SFP-MV3244", "sfp_module_88q3244_ief", 3, FirmwareType::IEF}, + {ChipID::SFPModule_ent11100_MCHIP, true, "SFP-EN11100", "sfp_module_ent11100_ief", 3, FirmwareType::IEF} }; return chips; } @@ -80,8 +85,9 @@ public: } BootloaderPipeline pipeline; - for(const auto& version : chipVersions) { - pipeline.add(version.id, BootloaderCommunication::RADMultiChip); + for(size_t i = 0; i < chipVersions.size(); i++) { + const auto& version = chipVersions[i]; + pipeline.add(version.id, BootloaderCommunication::RADMultiChip, i == 0); } pipeline.add(mainChipID); pipeline.add(std::chrono::milliseconds(3000)); diff --git a/include/icsneo/device/tree/radgigastar2/radgigastar2.h b/include/icsneo/device/tree/radgigastar2/radgigastar2.h index 5131182..c3e9023 100644 --- a/include/icsneo/device/tree/radgigastar2/radgigastar2.h +++ b/include/icsneo/device/tree/radgigastar2/radgigastar2.h @@ -129,6 +129,11 @@ public: {ChipID::RADGigastar_USBZ_ZYNQ, true, "USB ZCHIP", "RADGigastar_USBz_SW_bin", 2, FirmwareType::Zip}, {ChipID::RADGigastar_USBZ_Z7010_ZYNQ, false, "USB ZCHIP", "RADGigastar_USBz_Z7010_SW_bin", 2, FirmwareType::Zip}, {ChipID::RADGigastar_USBZ_Z7007S_ZYNQ, false, "USB ZCHIP", "RADGigastar_USBz_Z7007s_SW_bin", 2, FirmwareType::Zip}, + {ChipID::SFPModule_88q2112_MCHIP, true, "SFP-MV2112", "sfp_mv2112_a2_mchip_ief", 3, FirmwareType::IEF}, + {ChipID::SFPModule_88q2221_MCHIP, true, "SFP-MV2221M", "sfp_mv2221m_b2_mchip_ief", 3, FirmwareType::IEF}, + {ChipID::SFPModule_lan8670_MCHIP, true, "SFP-MC8670", "sfp_module_lan8670_ief", 3, FirmwareType::IEF}, + {ChipID::SFPModule_88q3244_MCHIP, true, "SFP-MV3244", "sfp_module_88q3244_ief", 3, FirmwareType::IEF}, + {ChipID::SFPModule_ent11100_MCHIP, true, "SFP-EN11100", "sfp_module_ent11100_ief", 3, FirmwareType::IEF} }; static std::vector t1sChips = { @@ -136,6 +141,11 @@ public: {ChipID::RADGigastar_USBZ_ZYNQ, true, "USB ZCHIP", "RADGigastar_USBz_SW_bin", 2, FirmwareType::Zip}, {ChipID::RADGigastar_USBZ_Z7010_ZYNQ, false, "USB ZCHIP", "RADGigastar_USBz_Z7010_SW_bin", 2, FirmwareType::Zip}, {ChipID::RADGigastar_USBZ_Z7007S_ZYNQ, false, "USB ZCHIP", "RADGigastar_USBz_Z7007s_SW_bin", 2, FirmwareType::Zip}, + {ChipID::SFPModule_88q2112_MCHIP, true, "SFP-MV2112", "sfp_mv2112_a2_mchip_ief", 3, FirmwareType::IEF}, + {ChipID::SFPModule_88q2221_MCHIP, true, "SFP-MV2221M", "sfp_mv2221m_b2_mchip_ief", 3, FirmwareType::IEF}, + {ChipID::SFPModule_lan8670_MCHIP, true, "SFP-MC8670", "sfp_module_lan8670_ief", 3, FirmwareType::IEF}, + {ChipID::SFPModule_88q3244_MCHIP, true, "SFP-MV3244", "sfp_module_88q3244_ief", 3, FirmwareType::IEF}, + {ChipID::SFPModule_ent11100_MCHIP, true, "SFP-EN11100", "sfp_module_ent11100_ief", 3, FirmwareType::IEF} }; if(variantToFlash == FirmwareVariant::T1Sx8_CANx4_LINx6) { @@ -159,8 +169,9 @@ public: } BootloaderPipeline pipeline; - for(const auto& version : chipVersions) { - pipeline.add(version.id, BootloaderCommunication::RADMultiChip); + for(size_t i = 0; i < chipVersions.size(); i++) { + const auto& version = chipVersions[i]; + pipeline.add(version.id, BootloaderCommunication::RADMultiChip, i == 0); } pipeline.add(mainChipID); pipeline.add(std::chrono::milliseconds(3000));