app/sim_backend.h

IBoardBackend with no hardware (off-Pi development / tests).

Engine moves run through a GameController in dry-run so the real path-planning

  • G-code pipeline is still exercised (it just isn’t sent to a device). Human moves arrive via submitHumanMove() instead of hall-effect sensors.

namespace kirin
class SimBackend : public kirin::IBoardBackend
#include <sim_backend.h>

Public Functions

explicit SimBackend(IEngine &engine)
virtual bool prepareNewGame(bool engineWhite, ResetMode mode) override
bool prepareNewGameFromSnapshot(bool engineWhite, const BoardIdentity &snapshot) override
virtual bool resetToStart() override
virtual bool executeEngineMove(int engineMove) override
virtual bool undoMove(int engineMove, int capturedSlot) override
bool executeSetup(const SetupPlan &plan, const BoardIdentity &target) override
virtual HumanMoveResult waitForHumanMove(std::atomic<bool> &cancel) override
inline virtual bool verifyBoardState() override
virtual void syncWithEngine() override
virtual void updateTracker(int engineMove) override
virtual void submitHumanMove(const std::string &uci) override
inline virtual bool isSimulation() const override
inline virtual void setPlanObserver(const PlanObserver &observer) override
inline virtual void setGcodeObserver(const Gantry::GcodeObserver &observer) override

Private Members

IEngine &engine_
GameController controller_
std::mutex inboxMutex_
std::condition_variable inboxCv_
std::deque<std::string> inbox_