/** * @file menuRoute.h * @author Alexander Klein (alex@kleiax.de) * @brief Contains a classes to handles routes with the user input. * @version 0.1 * @date 2022-12-28 * * @copyright Copyright (c) 2022 * */ #ifndef MENU_ROUTE_H #define MENU_ROUTE_H #include #include #include #include #include "route.h" #include "menu.h" #include "menuControl.h" #include "menuIntInput.h" #include "menuRoutePoints.h" #define JSON_DOCUMENT_SIZE_ROUTE 4096 class MenuRoute; typedef void (MenuRoute::*DataFunction)(uint8_t); /** * @brief MenuActionWrapper to call DataFunctions * * This class should be used to call importRoute, * exportRoute and clearRoute over the Menu. */ class MenuActionRoute : public MenuActionWrapper { public: /** * @brief Construct a new Menu Action Route object * * @param menuRoute * @param dataFunction like exportRoute */ MenuActionRoute(MenuRoute *menuRoute, DataFunction dataFunction); /** * @brief Runs the given DataFunction */ void action() override; private: MenuRoute *menuRoute; DataFunction dataFunction; }; /** * @brief Handles routes * * With this menu the user can import, export and delete routes. */ class MenuRoute : public MenuControl { public: /** * @brief Construct a new Menu Route object * * @param route */ MenuRoute(Route *route); ~MenuRoute(); /** * @brief Prints the last informations * * On first call this function calls the init function. * On every call this functions call the printMenu function from * the mainMenu of this class. */ void printMenu() override; /** * @name User Inputs * @brief Inputs given by the parentMenu */ ///@{ void down() override; void up() override; void right() override; void left() override; void yes() override; void no() override; ///@} /** * @brief Import a Route. * * The functions tries to pull the given route id from the RoverApi. * * @param routeNumber id */ void importRoute(uint8_t routeNumber); /** * @brief Export a Route. * * The functions tries to push the current route to the RoverApi. * * @param routeNumber id */ void exportRoute(uint8_t routeNumber); /** * @brief Delete a Route * * The functions tries to delete the current route from the RoverApi. * * @param routeNumber */ void deleteRoute(uint8_t routeNumber); /** * @brief Delete the current Route. * * @param none this param is not be used. */ void clearRoute(uint8_t none); private: void init(); Route *route; Menu *mainMenu = nullptr; bool isInit = false; bool blockInput = false; static constexpr uint8_t maxRouteNumber = 100; static constexpr uint16_t httpValidExport = 201; static constexpr uint16_t httpValidImport = 202; static constexpr uint16_t httpValidDelete = 202; }; /** * @brief MenuRouteWrapper to call DataFunctions with numeric user input * */ class MenuRouteWrapper : public MenuIntInputWrapper { public: /** * @brief Construct a new Menu Route Wrapper object. * * @param menuRoute * @param dataFunction */ MenuRouteWrapper(MenuRoute *menuRoute, DataFunction dataFunction); /** * @brief Calls the given DataFunction. * * @param values The value to be given to the DataFunction. * @param length Number of values, should be 1. */ void action(int16_t *values, uint8_t length) override; private: MenuRoute *menuRoute; DataFunction dataFunction = nullptr; }; #endif // MENU_ROUTE_H