You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
GhostTypes edited this page Mar 16, 2026
·
3 revisions
State Machines
FlashForge printers use different internal state models depending on the firmware generation. This document maps these states to a unified client model for consistent application behavior across all printer families.
Overview
Family
State Source
Format
Modern (5M / AD5X)
HTTP /detail endpoint
JSON status field
Legacy (A3 / A4)
TCP M27 / M119 commands
Text response
Unified Client Model
Applications should normalize printer status into these high-level states for consistent behavior:
Unified State
Description
Client Action
IDLE
Ready to accept jobs
Enable job submission
PRINTING
Actively printing
Show progress, enable pause
PAUSED
Job suspended, heaters active
Enable resume/cancel
ERROR
Machine halted due to fault
Display error, require intervention
BUSY
Internal processing
Wait, poll for state change
Modern Firmware States (5M / AD5X)
Source: HTTP POST /detail
Field:status (string)
State Mapping
Internal Status
/detail Value
Unified State
Notes
Ready
ready
IDLE
Printer idle and ready
Building
building, working, printing
PRINTING
Main printing state
Busy
busy
BUSY
Non-printing operation
Pause
pause, paused
PAUSED
Job suspended
Error
error
ERROR
Fault condition
Completed
completed
IDLE
Job finished successfully
Canceling
canceling, cancel
BUSY
Transient state during stop
Heating
heating
PRINTING
Pre-print heating phase
Pausing
pausing
PRINTING
Transition to paused
Calibration
calibrate_doing
BUSY
Calibration in progress
Important Quirks
"canceling" During Pause
The canceling state is sometimes used transiently during a PAUSE sequence, not just during cancellation.
Recommendation: Treat canceling as BUSY and continue polling.
State Query Implementation
Method: Poll /detail every 1-2 seconds
POST /detail HTTP/1.1Content-Type: application/json
{
"serialNumber": "SNADVA5MXXXXX",
"checkCode": "12345"
}