/* * Copyright (c) 2021, Erich Styger * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef MAZE_H_ #define MAZE_H_ #include "platform.h" #if PL_CONFIG_APP_LINE_MAZE #include "Turn.h" void MAZE_ResetPresentCount(void); uint8_t MAZE_GetPresentCount(void); /*! * \brief Adds a new path while going forward through the maze * \param kind New path to be added */ void MAZE_AddPath(TURN_Kind kind); /*! * \brief Tries to simplify the path, basically cutting dead end paths. */ void MAZE_SimplifyPath(void); /*! * \brief Returns TRUE if the maze has been solved (finish has been found) * \return TRUE if finish has been found, so maze is solved */ bool MAZE_IsSolved(void); /*! * \brief Marks the maze as solved. */ void MAZE_SetSolved(void); /*! * This clears the solution, and MAZE_IsSolved() will return FALSE */ void MAZE_ClearSolution(void); /*! * \brief Used to get the solution turns, one after each other * \param solvedIdx Solution index, starting with zero. The callee will increment the index. * \return Solution turn */ TURN_Kind MAZE_GetSolvedTurn(uint8_t *solvedIdx); /*! * \brief Selects the new turn based. * \param prev Line previous the intersection * \param curr Line kind of the intersection. * \return The new turn. */ TURN_Kind MAZE_SelectTurn(REF_LineKind prev, REF_LineKind curr); /*! * \brief Function which returns the current strategy * \return Returns TRUE if using left-hand-on-the-wall, FALSE otherwise */ bool MAZE_IsLeftHandRule(void); /*! * \brief Performs a turn while going forward over a line. * \param finished TRUE if reached finished area * \pram deadEndGoBW TRUE if found dead end and going backward * \return Returns TRUE while turn is still in progress. */ uint8_t MAZE_EvaluteTurn(bool *finished, bool *deadEndGoBw); uint8_t MAZE_EvaluateTurnBw(void); #if PL_CONFIG_USE_SHELL #include "McuShell.h" /*! * \brief Module command line parser * \param cmd Pointer to command string to be parsed * \param handled Set to TRUE if command has handled by parser * \param io Shell standard I/O handler * \return Error code, ERR_OK if everything was ok */ uint8_t MAZE_ParseCommand(const unsigned char *cmd, bool *handled, const McuShell_StdIOType *io); #endif uint8_t MAZE_SetHandRule(bool isLeft); /*! * \brief Module initialization. */ void MAZE_Init(void); #endif /* PL_CONFIG_APP_LINE_MAZE */ #endif /* MAZE_H_ */