Printer Model: xvico pioneer highly modified, with LERDGE K board now, and Creality E-Fit extruder / all new motors, all new fans, etc.
MCU / Printerboard: LERDGE K Board, version 2 klippy.log
Fill out above information and in all cases attach yourklippy.logfile. Pasting yourprinter.cfgis not needed
Describe your issue: I’m trying to get OctoKlipperPi to work on the above described printer. I’m using a Raspberry Pi 3B+ to serve the board. Since there’s no config file listed, I’m dead in the water. I asked LERDGE.COM via Instagram to comment; they said KLIPPER WORKS ON THEIR BOARDS NOW???
AFAIK there is no progress. Marlin has “hacked” the firmware encryption and thus can run on the Lerdge boards.
So far no attempt has been made to port this to Klipper. Consequently there are two solutions:
Lerdge removes their encryption to allow free choice of firmware → From hardware PoV Klipper should work out of the box as far as I can tell
Some developer takes up the task to port the Marlin hack
I had a talk with the person posting on Instagram. They thought providing the STL files for their little iV printer constituted OPEN SOURCE. I told them it didn’t.
Yes, I think so. Only via pc, though. I’m going to follow their instructions to the letter, and see how it goes. I’ll post results on my YouTube site: Corlissmedia2.0
i had to look through klipper github history to find a close match for the firmware make “kconfig” file
not sure if it “needs” the 64kib bootloader offset.
the board needs the USB/wifi adapter thing in order for it to work though. "there is no Serial connection without it "
i’ve de-compiled the “encrypting software” too, doesn’t look like it really does anything.
using Microsoft.VisualBasic.Devices;
using Microsoft.Win32;
using System;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Markup;
namespace Lerdge_Encrypting_oftware
{
public class MainWindow : Window, IComponentConnector
{
public static string FirmwareFilePath;
internal Button OpenButton;
internal Button EncryptingButton;
internal TextBlock FileNameTextBloack;
internal ProgressBar PB;
internal TextBlock StatusTextBlock;
private bool _contentLoaded;
public MainWindow() => this.InitializeComponent();
private void OpenButton_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "Select the firmware that needs to be make";
openFileDialog.Filter = "bin files(*.bin)|*.bin";
openFileDialog.FilterIndex = 1;
openFileDialog.Multiselect = false;
openFileDialog.RestoreDirectory = true;
bool? nullable = openFileDialog.ShowDialog();
bool flag = true;
if (nullable.GetValueOrDefault() == flag & nullable.HasValue)
{
MainWindow.FirmwareFilePath = openFileDialog.FileName;
this.FileNameTextBloack.Text = MainWindow.FirmwareFilePath;
FileInfo fileInfo = new FileInfo(MainWindow.FirmwareFilePath);
if (fileInfo != null && fileInfo.Exists)
this.StatusTextBlock.Text = "waiting to start make";
else
this.StatusTextBlock.Text = "Select the firmware that needs to be make";
}
else
MainWindow.FirmwareFilePath = (string) null;
}
private void EncryptingButton_Click(object sender, RoutedEventArgs e)
{
try
{
FileInfo fileInfo = new FileInfo(MainWindow.FirmwareFilePath);
if (fileInfo != null && fileInfo.Exists)
{
new Task((Action) (() => this.Encrypting())).Start();
}
else
{
MainWindow.FirmwareFilePath = (string) null;
this.StatusTextBlock.Text = "Fail (file open failed)";
}
}
catch
{
int num = (int) MessageBox.Show("Please select the firmware to be make first.", "error", MessageBoxButton.OK, MessageBoxImage.Exclamation);
}
}
private void Encrypting()
{
FileStream fileStream;
try
{
fileStream = new FileStream(MainWindow.FirmwareFilePath, FileMode.Open);
}
catch
{
this.Dispatcher.Invoke((Action) (() => this.StatusTextBlock.Text = "Fail (file open failed)"));
return;
}
fileStream.Seek(0L, SeekOrigin.Begin);
byte[] buffer = new byte[fileStream.Length];
uint index = 0;
int p = 0;
this.Dispatcher.Invoke((Action) (() => this.StatusTextBlock.Text = "making..."));
fileStream.Read(buffer, 0, (int) fileStream.Length);
for (; (long) index < fileStream.Length; ++index)
{
buffer[(int) index] = ~buffer[(int) index];
buffer[(int) index] = (byte) ((int) buffer[(int) index] >> 5 | (int) buffer[(int) index] << 3);
buffer[(int) index] = (byte) ((uint) buffer[(int) index] + 85U);
buffer[(int) index] = ~buffer[(int) index];
buffer[(int) index] = (byte) ((int) buffer[(int) index] << 3 | (int) buffer[(int) index] >> 5);
int np = (int) ((long) (index * 100U) / fileStream.Length);
if (np > p + 1)
this.Dispatcher.Invoke((Action) (() =>
{
this.PB.Value = (double) np;
p = np;
}));
}
fileStream.Seek(0L, SeekOrigin.Begin);
fileStream.Write(buffer, 0, (int) fileStream.Length);
fileStream.Close();
FileInfo fileInfo = new FileInfo(MainWindow.FirmwareFilePath);
new Computer().FileSystem.RenameFile(MainWindow.FirmwareFilePath, "Klipper for Lerdge.bin");
this.Dispatcher.Invoke((Action) (() =>
{
this.PB.Value = 100.0;
this.StatusTextBlock.Text = "success (the original file has been overwritten)";
}));
MainWindow.FirmwareFilePath = (string) null;
}
[DebuggerNonUserCode]
[GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
public void InitializeComponent()
{
if (this._contentLoaded)
return;
this._contentLoaded = true;
Application.LoadComponent((object) this, new Uri("/Lerdge_Firmware_Tool;component/mainwindow.xaml", UriKind.Relative));
}
[DebuggerNonUserCode]
[GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
[EditorBrowsable(EditorBrowsableState.Never)]
void IComponentConnector.Connect(int connectionId, object target)
{
switch (connectionId)
{
case 1:
this.OpenButton = (Button) target;
this.OpenButton.Click += new RoutedEventHandler(this.OpenButton_Click);
break;
case 2:
this.EncryptingButton = (Button) target;
this.EncryptingButton.Click += new RoutedEventHandler(this.EncryptingButton_Click);
break;
case 3:
this.FileNameTextBloack = (TextBlock) target;
break;
case 4:
this.PB = (ProgressBar) target;
break;
case 5:
this.StatusTextBlock = (TextBlock) target;
break;
default:
this._contentLoaded = true;
break;
}
}
}
}
On the top of the site you can download the firmware and printer config.
I has tried it but I could not get it work. Can it be that the firmware must be in sync with the klipper software on the raspberry pi ?
It’s relative easy to swap between klipper firmware and stock firmware.
If you want to go back use the force method with de SDCard and you run the Lerdge firmware.