143 lines
3.8 KiB
C++
143 lines
3.8 KiB
C++
/**
|
|
* @file WebServer.h
|
|
* @brief Web server and REST API for remote control
|
|
*
|
|
* Provides web-based control interface with:
|
|
* - Responsive Bootstrap-based UI
|
|
* - RESTful API for control and configuration
|
|
* - LittleFS-based file serving
|
|
* - Real-time status updates
|
|
*
|
|
* @author Locomotive Test Bench Project
|
|
* @date 2025
|
|
*/
|
|
|
|
#ifndef WEB_SERVER_H
|
|
#define WEB_SERVER_H
|
|
|
|
#include <Arduino.h>
|
|
#include <ESPAsyncWebServer.h>
|
|
#include <AsyncTCP.h>
|
|
#include <ArduinoJson.h>
|
|
#include <DNSServer.h>
|
|
#include "Config.h"
|
|
#include "MotorController.h"
|
|
#include "DCCGenerator.h"
|
|
#include "LEDIndicator.h"
|
|
|
|
/**
|
|
* @class WebServerManager
|
|
* @brief Manages web server and API endpoints
|
|
*
|
|
* Serves web interface from LittleFS and provides REST API
|
|
* for controlling the locomotive test bench remotely.
|
|
*
|
|
* API Endpoints:
|
|
* - GET /api/status - Get current system status
|
|
* - POST /api/mode - Set control mode (analog/dcc)
|
|
* - POST /api/speed - Set speed and direction
|
|
* - POST /api/dcc/address - Set DCC address
|
|
* - POST /api/dcc/function - Control DCC functions
|
|
* - POST /api/wifi - Configure WiFi settings
|
|
*/
|
|
class WebServerManager {
|
|
public:
|
|
/**
|
|
* @brief Constructor
|
|
* @param cfg Pointer to Config object
|
|
* @param motor Pointer to MotorController
|
|
* @param dcc Pointer to DCCGenerator
|
|
* @param led Pointer to LEDIndicator
|
|
*/
|
|
WebServerManager(Config* cfg, MotorController* motor, DCCGenerator* dcc, LEDIndicator* led);
|
|
|
|
/**
|
|
* @brief Initialize web server
|
|
*
|
|
* Mounts LittleFS, sets up routes, and starts AsyncWebServer.
|
|
*/
|
|
void begin();
|
|
|
|
/**
|
|
* @brief Update web server (currently unused)
|
|
*
|
|
* AsyncWebServer handles requests asynchronously.
|
|
*/
|
|
void update();
|
|
|
|
private:
|
|
Config* config; ///< Configuration manager
|
|
MotorController* motorController; ///< Motor controller instance
|
|
DCCGenerator* dccGenerator; ///< DCC generator instance
|
|
LEDIndicator* ledIndicator; ///< LED indicator instance
|
|
AsyncWebServer server; ///< Async web server (port 80)
|
|
DNSServer dnsServer; ///< DNS server for captive portal
|
|
|
|
/**
|
|
* @brief Set up all HTTP routes and handlers
|
|
*/
|
|
void setupRoutes();
|
|
|
|
/**
|
|
* @brief Handle root page request
|
|
* @param request HTTP request object
|
|
*/
|
|
void handleRoot(AsyncWebServerRequest *request);
|
|
|
|
/**
|
|
* @brief Handle status request
|
|
* @param request HTTP request object
|
|
*/
|
|
void handleGetStatus(AsyncWebServerRequest *request);
|
|
|
|
/**
|
|
* @brief Handle mode change request
|
|
* @param request HTTP request object
|
|
*/
|
|
void handleSetMode(AsyncWebServerRequest *request);
|
|
|
|
/**
|
|
* @brief Handle speed setting request
|
|
* @param request HTTP request object
|
|
*/
|
|
void handleSetSpeed(AsyncWebServerRequest *request);
|
|
|
|
/**
|
|
* @brief Handle DCC function request
|
|
* @param request HTTP request object
|
|
*/
|
|
void handleSetFunction(AsyncWebServerRequest *request);
|
|
|
|
/**
|
|
* @brief Handle config retrieval request
|
|
* @param request HTTP request object
|
|
*/
|
|
void handleGetConfig(AsyncWebServerRequest *request);
|
|
|
|
/**
|
|
* @brief Handle WiFi configuration request
|
|
* @param request HTTP request object
|
|
*/
|
|
void handleSetWiFi(AsyncWebServerRequest *request);
|
|
|
|
/**
|
|
* @brief Handle restart request
|
|
* @param request HTTP request object
|
|
*/
|
|
void handleRestart(AsyncWebServerRequest *request);
|
|
|
|
/**
|
|
* @brief Get system status as JSON
|
|
* @return JSON string with status information
|
|
*/
|
|
String getStatusJSON();
|
|
|
|
/**
|
|
* @brief Get configuration as JSON
|
|
* @return JSON string with configuration
|
|
*/
|
|
String getConfigJSON();
|
|
};
|
|
|
|
#endif
|