Table 1
Current RepRap Firmware.
| Name | Hardware | Comments |
|---|---|---|
| RepRap Firmware (original) | ARM | |
| LinuxCNC | PC | Uses the parallel port, or GPIO pins on a Raspberry Pi or BeagleBone |
| RepRap Firmware (fork by dc42) | ARM | Based on RepRap Firmware |
| Marlin | AVR | Adaptation of Grbl for 3-D printers |
| Repetier | AVR, ARM | Based on Marlin |
| Teacup | AVR, ARM | Runs on AVRs with low memory, such as Arduino Uno |
| aprinter | AVR, ARM | |
| Smoothie | ARM |

Figure 1
Schematic of the workflow of creating a 3-D printed object using Franklin.

Figure 2
Franklin web interface.
Table 2
Supported functions.
| Command | Function |
|---|---|
| upload | Flash new firmware to an Arduino. (server only) |
| find_printer | Search for a machine by UUID or port. (server only) |
| set_autodetect, get_autodetect | Whether the server tries to detect a machine on newly discovered ports. (server only) |
| disable | Deactivate the machine. (server only) |
| detect, detect_all | Detect a machine, or all printers. (server only) |
| add_port, remove_port | Notify server of port discovery. (server only, called from kernel signals) |
| get_ports | Get list of available ports. (server only) |
| set_default_printer, get_default_printer | Which machine is used by new connections. (server only) |
| set_printer, get_printer | Which machine is used by this connection. (server only) |
| set_monitor, get_monitor | Whether this connection should be informed of changes in settings. (server only) |
| reset | Reset the Arduino. |
| die | Close the Python and C driver. |
| flush | Wait for queue to be empty. |
| probe | Map an area using a probe signal or manual feedback. |
| goto | Move motors to a position. |
| gotocb | Move motors to a position and wait for it to arrive. |
| sleep | Change sleep state of the motors. |
| settemp | Change the set point of a temperature control. |
| waittemp | Signal an alarm when a temperature enters a specified range. |
| readtemp | Request current temperature. |
| readpin | Request current value of a GPIO pin. |
| load, save, list_profiles, remove_profile, set_default_profile | Profile management. |
| abort | Disable heaters, sleep motors, reset GPIO pins and stop any running G-code. |
| pause | Pause or resume the currently running G-code. |
| queued | Request length of the queue. |
| home | Recalibrate the machine with limit switches. |
| park | Home if required, then go to park position. |
| wait_for_temp | Wait until an alarm from waittemp is triggered. |
| clear_alarm | Clear the waittemp alarms. |
| export_settings | Retrieve all settings for storing in a text file. |
| import_settings | Change settings from a text file. |
| gcode_run | Run (parsed) G-code. |
| request_confirmation | Wait for the user to press a button or abort. |
| confirm | Signal confirmation. |
| queue_add | Parse G-code and add it to the queue. |
| queue_remove | Remove an entry from the queue. |
| gcode_parse | Parse G-code and return the result. |
| gcode_bbox | Find the bounding box of parsed G-code. |
| queue_print | Send one or more queue entries to the machine. |
| queue_probe | Probe the combined bounding box of one or more entries, then send them to the machine. |
| get_globals, set_globals | Manage global settings |
| get_axis_pos | Get current position of an axis. |
| set_axis_pos | Set current position of an axis, without moving the motors. |
| get_space, get_axis, get_motor, set_space, set_axis, set_motor | Manage space settings. |
| get_temp, set_temp | Manage temp settings. |
| get_gpio, set_gpio | Manage GPIO settings. |
| send_printer | Request current state of a machine. |
Table 3
Commands for the Franklin C Driver.
| Command | Function | Response |
|---|---|---|
| RESET | Reset the machine. | |
| GET_UUID | Get universally unique identifier for the machine. | UUID |
| GOTO | Add segment to move queue. | MOVECB |
| RUN_FILE | Run a parsed G-Code file from disk. | UPDATE_TEMP, UPDATE_PIN, CONFIRM, FILE_DONE |
| PROBE | Like goto, and monitor probe pin to abort move and notify Python Driver about position. | MOVECB, LIMIT |
| SLEEP | Enable or disable the motors. | |
| SETTEMP | Set a temperature target. | |
| WAITTEMP | Set an alarm. | TEMPCB |
| READTEMP | Read current temperature. | TEMP |
| SETPOS | Set current axis position. | |
| GETPOS | Get current axis position. | POS |
| READ_GLOBALS | Get global settings. | DATA |
| WRITE_GLOBALS | Set global settings. | |
| READ_SPACE_INFO, READ_SPACE_AXIS, READ_SPACE_MOTOR | Get space settings. | DATA |
| WRITE_SPACE_INFO, WRITE_SPACE_AXIS, WRITE_SPACE_MOTOR | Set space settings. | |
| READ_TEMP | Get temp settings. | DATA |
| WRITE_TEMP | Set temp settings. | |
| READ_GPIO | Get GPIO settings. | DATA |
| WRITE_GPIO | Set GPIO settings. | |
| QUEUED | Request queue length and optionally abort move. | QUEUE |
| READPIN | Get GPIO pin state. | PIN |
| HOME | Move away from limit switches until it no longer hits them. | HOMED |
| RECONNECT | Machine has reconnected at this port. | |
| RESUME | Resume running a file that was previously paused. | |
| GETTIME | Get time estimates about the current job. | TIME |
| (asynchronous) | Notify that the state of an input GPIO has changed. | PINCHANGE |
| (asynchronous) | A limit switch was triggered during a move. | LIMIT |
| (asynchronous) | The machine was disabled due to a timeout. | TIMEOUT |
| (asynchronous) | The connection to the machine was lost. | DISCONNECT |
Table 4
Supported Commands, Function and Response.
| Command | Function | Response |
|---|---|---|
| BEGIN | Handshake; send version and receive capabilities. | READY |
| PING | Handshake. | PONG |
| RESET | Reset the Arduino. | |
| SETUP | Set up globals. | |
| CONTROL | Manage GPIO pin states. | |
| MSETUP | Set up motor settings. | |
| ASETUP | Set up ADC (temp) settings. | |
| HOME | Move away from limit switches. | HOMED |
| START_MOVE | Begin sending movement buffers. | |
| START_PROBE | Begin sending movement buffers for probing. | |
| MOVE | Send movement buffer for one motor. | |
| START | Begin moving. | |
| STOP | Stop moving and discard buffer. | STOPPED |
| ABORT | Stop moving, disable all motors, reset all heaters and GPIO. | STOPPED |
| DISCARD | Discard a part of the queued buffers without stopping the current move. | |
| GETPIN | Read current state of a GPIO pin. | PIN |
| (asynchronous) | Buffer has been completed. | DONE |
| (asynchronous) | Buffer has been completed and no next buffer is available. | UNDERRUN |
| (asynchronous) | ADC has been measured. | ADC |
| (asynchronous) | Limit switch has been triggered. | LIMIT |
| (asynchronous) | Machine has been deactivated due to timeout. | TIMEOUT |
| (asynchronous) | The value of an input pin has changed. | PINCHANGE |

Figure 3
Schematic representation of how the move comprising a segment is prepared in Franklin.
