2
$\begingroup$

I need to send a complex password to my machine. The machine needs to decrypt it and run it. I have not found enough resources for such an operation.

More detailed description:

I am developing a new feature for my 3D printer which runs on Repetier. (It may be on a different firmware that I can do this job). I want to change my 3D printer so it can understand special encrypted G-codes alongside normal g-codes. Lets describe it with an example:

Normally, 3D printers can read and apply standard g-code files like:

G28
G0 X10 Y20 E30
.
.
.
etc.

But I am developing a g-code encryption method which encrypts any g-code and turns it into a text like:  

M999 !4#^
M999 ^s+.&&/..* ….
.
.
etc.

I want to change the firmware for my printer so it understands if the related g-code is encrypted by checking every line if it stars with M999 (or starts with some other pattern character which I will decide later).

To do is, I need to understand how Repetier works, especially how command debug works and how I can parse my encrypted code from my encrypted g-code file.

I could not understand how repetier.h / command.cpp works and how it parses the line and redirects to functional cases.

$\endgroup$
1
$\begingroup$

Looking through the source I found Commands.cpp that has a loop.

void Commands::commandLoop() {
    while(true) {
        ...
        Commands::executeGCode(code);
    }
}

If we find the executeGCode method, we see that it calls:

processMCode(com);

And finding the processMCode method, we have the switch case you can add your own logic to.

void Commands::processMCode(GCode *com) {
    switch( com->M ) {
        case 3: // Spindle/laser on
            ...

        case 999: // Your custom logic

After decoding your encrypted string, I think it would be best to call back into the first method mentioned, and let the process start from the top with the unencrypted command.

case 999:

    // Custom logic
    executeGCode(unencrypted);
    break;
$\endgroup$
1
  • $\begingroup$ Thanks for the answer, Sorry for waiting for reply, I tried your suggestion, but when I send the code to the Repetier host I get the Wrong checksum and Unknown command warnings as a return, I think that when we send the code to the machine, we do a check before we do the work we want, how can we disable it? $\endgroup$ Aug 1 '17 at 7:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.