private bool BootloaderUpdateFirmware(FirmwareDetails firmwareDetails) { var flag = true; if ((CurrentBootloaderStep == BootloaderController.BootLoaderStep.ForceFirmwareUpdate || CurrentBootloaderStep == BootloaderController.BootLoaderStep.UpdateFirmware || MyPrinterInfo.FirmwareIsInvalid) && !string.IsNullOrEmpty(firmwareDetails.embedded_firmware)) { Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(firmwareDetails.embedded_firmware); if (manifestResourceStream == null) { WriteLog("Embedded Firmware Resource Not Found", Logger.TextType.Error); flag = true; } else { try { byte[] firmwareBytesFromStream = GetFirmwareBytesFromStream(manifestResourceStream, MyPrinterProfile.ProductConstants.m_uFirmwareMaxSizeBytes); Status = PrinterStatus.Bootloader_UpdatingFirmware; WriteFirmwareVersionToEEPROM(0U, 0U); m_oBootloaderConnection.UploadNewFirmware(firmwareBytesFromStream, firmwareDetails.firmware_crc); CheckEEPROMValuesAfterUpdate(); WriteFirmwareVersionToEEPROM(firmwareDetails.firmware_version, firmwareDetails.firmware_crc); ValidateCRCWithPrinter(firmwareDetails.firmware_crc); flag = false; } catch (Exception ex) { WriteLog(string.Format("Error updating firmware:{0}", ex.Message), Logger.TextType.Error); Status = PrinterStatus.Bootloader_FirmwareUpdateFailed; flag = true; } } } return(flag); }
private BootloaderController.FirmwareStatus BootloadCheckFirmware(FirmwareDetails firmwareDetails, uint firmwareVersionFromEEPROM, uint firmwareCRCFromEEPROM) { var flag1 = firmwareVersionFromEEPROM < 150994944U; try { ValidateCRCWithPrinter(firmwareCRCFromEEPROM); } catch (Exception ex) { WriteLog(ex.Message, Logger.TextType.Error); if (ex.Message == "Firmware failed redundancy check.") { flag1 = true; } else if (ex.Message == "Unsupported Bootloader Interface") { throw ex; } } var flag2 = SpoolerServer.CHECK_INCOMPATIBLE_FIRMWARE && (int)firmwareVersionFromEEPROM != (int)firmwareDetails.firmware_version; if (!(flag1 | flag2)) { return(BootloaderController.FirmwareStatus.Good); } Status = PrinterStatus.Bootloader_InvalidFirmware; return(BootloaderController.FirmwareStatus.Bad); }
private bool QuitBootloaderAndGotoApp() { var flag = true; foreach (KeyValuePair <char, FirmwareDetails> firmware in MyPrinterProfile.ProductConstants.FirmwareList) { FirmwareDetails firmwareDetails = firmware.Value; var key = firmware.Key; if (mCheckedFirmwareStatus.ContainsKey(key)) { switch (mCheckedFirmwareStatus[key]) { case BootloaderController.FirmwareStatus.Unknown: case BootloaderController.FirmwareStatus.Good: if (mInterfaceVersion == BootloaderController.BootloaderInterfaceVersion.V2) { SetBootloader(key); if (key != 'M') { flag = QuitSecondaryBootloader(); break; } break; } break; case BootloaderController.FirmwareStatus.GoodQuit: continue; default: flag = false; break; } if (flag) { mCheckedFirmwareStatus[key] = BootloaderController.FirmwareStatus.GoodQuit; } else { mCheckedFirmwareStatus[key] = BootloaderController.FirmwareStatus.Bad; return(false); } } } broadcast_shutdown = false; m_oBootloaderConnection.FlushIncomingBytes(); WriteLog("<< Q", Logger.TextType.Write); if (!m_oBootloaderConnection.JumpToApplication()) { return(false); } Status = PrinterStatus.Error_PrinterNotAlive; return(true); }
private void UpdateFirmwareStep() { var flag = false; foreach (KeyValuePair <char, FirmwareDetails> firmware in MyPrinterProfile.ProductConstants.FirmwareList) { FirmwareDetails firmwareDetails = firmware.Value; var key = firmware.Key; if (!mCheckedFirmwareStatus.ContainsKey(key) || mCheckedFirmwareStatus[key] != BootloaderController.FirmwareStatus.Good && mCheckedFirmwareStatus[key] != BootloaderController.FirmwareStatus.GoodQuit) { if (mInterfaceVersion == BootloaderController.BootloaderInterfaceVersion.V2) { SetBootloader(key); } try { var stopwatch = new Stopwatch(); stopwatch.Reset(); stopwatch.Start(); flag = BootloaderUpdateFirmware(firmwareDetails); stopwatch.Stop(); WriteLog("<< time: " + stopwatch.Elapsed, Logger.TextType.Write); } catch (Exception ex) { ErrorLogger.LogException("Exception in BootloaderConnection.DoBootLoop " + ex.Message, ex); flag = true; } if (!flag) { mCheckedFirmwareStatus[key] = BootloaderController.FirmwareStatus.Good; } if (flag) { break; } } } if (flag) { BroadcastServer.BroadcastMessage(new SpoolerMessage(MessageType.FirmwareUpdateFailed, MySerialNumber, "null").Serialize()); CurrentBootloaderStep = BootloaderController.BootLoaderStep.Waiting; Status = PrinterStatus.Bootloader_FirmwareUpdateFailed; } else { BroadcastServer.BroadcastMessage(new SpoolerMessage(MessageType.FirmwareUpdateComplete, MySerialNumber, "null").Serialize()); CurrentBootloaderStep = BootloaderController.BootLoaderStep.GotoApp; } }
private void CheckFirmwareStep() { foreach (KeyValuePair <char, FirmwareDetails> firmware in MyPrinterProfile.ProductConstants.FirmwareList) { var key = firmware.Key; FirmwareDetails firmwareDetails = firmware.Value; if (mInterfaceVersion == BootloaderController.BootloaderInterfaceVersion.V2) { SetBootloader(key); } var eepromMapping = new EEPROMMapping(m_oBootloaderConnection.ReadAllReadableEEPROM(), MyPrinterProfile.EEPROMConstants); var uint32_1 = eepromMapping.GetUInt32("FirmwareVersion"); var uint32_2 = eepromMapping.GetUInt32("FirmwareCRC"); BootloaderController.FirmwareStatus firmwareStatus = BootloadCheckFirmware(firmwareDetails, uint32_1, uint32_2); if (mCheckedFirmwareStatus.ContainsKey(key)) { mCheckedFirmwareStatus[key] = firmwareStatus; } else { mCheckedFirmwareStatus.Add(key, firmwareStatus); } } var bFirmwareIsInvalid = false; foreach (KeyValuePair <char, BootloaderController.FirmwareStatus> checkedFirmwareStatu in mCheckedFirmwareStatus) { if (BootloaderController.FirmwareStatus.Bad == checkedFirmwareStatu.Value) { bFirmwareIsInvalid = true; break; } } SetNextActionFromFirmwareStatus(bFirmwareIsInvalid); }
public void ShowFirmwareDetails(string args) { FirmwareDetails firmwareDetails = SomneoApiClient.GetFirmwareDetails(); if (firmwareDetails == null) { Console.WriteLine("Unable to retrieve the firmware details."); return; } StringBuilder consoleMessageBuilder = new StringBuilder(); consoleMessageBuilder.Append( $@"Firmware details: Name: {firmwareDetails.Name} Version: {firmwareDetails.Version} State: {firmwareDetails.State}"); if (!firmwareDetails.IsIdle) { consoleMessageBuilder.Append( $@" Update progress: {firmwareDetails.Progress} Status message: {firmwareDetails.StatusMessage}"); } if (firmwareDetails.CanUpgrade) { consoleMessageBuilder.Append( $@" Available upgrade: {firmwareDetails.Upgrade} Mandatory: {(firmwareDetails.Mandatory ? "Yes" : "No")}"); } Console.WriteLine(consoleMessageBuilder); }
private void BootLoaderStartup() { FirmwareDetails firmware = MyPrinterProfile.ProductConstants.FirmwareList['M']; if (mInterfaceVersion == BootloaderController.BootloaderInterfaceVersion.V2) { SetBootloader('M'); } MyPrinterInfo.hardware.machine_type = "The_Micro"; var eepromMapping = new EEPROMMapping(m_oBootloaderConnection.ReadAllReadableEEPROM(), MyPrinterProfile.EEPROMConstants); var flag = false; var str = ""; byte[] bytesFromLocation = eepromMapping.GetBytesFromLocation("SerialNumber", 16); for (var index = 0; index < 16; ++index) { if (bytesFromLocation[index] == byte.MaxValue) { flag = true; } str += ((char)bytesFromLocation[index]).ToString(); } if (flag) { BroadcastServer.BroadcastMessage(new SpoolerMessage(MessageType.UserDefined, MySerialNumber, "There was a major error in your printer. Please reset the printer. If the problem persist, contact M3D.").Serialize()); Status = PrinterStatus.Error_PrinterNotAlive; } else { MySerialNumber = new PrinterSerialNumber(str); foreach (IFirstRunUpdater updater in MyPrinterProfile.FirstRunConstants.updater_list) { updater.CheckForUpdate(str, eepromMapping.GetAllEEPROMData(), m_oBootloaderConnection, MyPrinterProfile); } logger.ResetWithSerialNumber(MySerialNumber.ToString()); LoadPersistantData(); PersistantDetails.hours_used = eepromMapping.GetFloat("HoursCounterSpooler"); HardwareDetails.firmware_version = eepromMapping.GetUInt32("FirmwareVersion"); PersistantData.RestartOptions restartOptions = PersistantDetails.PopRestartAction(); SavePersistantData(); CurrentBootloaderStep = BootloaderController.BootLoaderStep.CheckFirmware; if (restartOptions.RestartAction == PersistantData.RestartAction.SetExtruderCurrent) { SetExtruderCurrent((ushort)restartOptions.RestartActionParam); } else if (restartOptions.RestartAction == PersistantData.RestartAction.SetFan) { SetFanConstants((FanConstValues.FanType)restartOptions.RestartActionParam); } else if (restartOptions.RestartAction == PersistantData.RestartAction.ForceStayBootloader) { Status = PrinterStatus.Bootloader_Ready; CurrentBootloaderStep = BootloaderController.BootLoaderStep.Waiting; } else { if (restartOptions.RestartAction != PersistantData.RestartAction.ForceUpdateFirmware) { return; } CurrentBootloaderStep = BootloaderController.BootLoaderStep.ForceFirmwareUpdate; } } }