Sesame-Device/include/controller.h

47 lines
1.4 KiB
C
Raw Normal View History

2023-08-09 12:55:11 +02:00
#pragma once
#include "server.h"
#include "servo.h"
#include "message.h"
2023-08-09 13:13:38 +02:00
#include "storage.h"
2023-08-09 13:25:19 +02:00
#include "fresh.h"
2023-08-09 12:55:11 +02:00
#include <ESPAsyncWebServer.h>
class SesameController: public ServerConnectionCallbacks {
public:
2023-08-09 13:25:19 +02:00
SesameController(ServerConnection* server, ServoController* servo, AsyncWebServer* local, TimeCheck* timeCheck, uint8_t remoteDeviceCount);
2023-08-09 13:13:38 +02:00
void configure();
2023-08-09 12:55:11 +02:00
private:
ServerConnection* server;
ServoController* servo;
AsyncWebServer* local;
2023-08-09 13:25:19 +02:00
TimeCheck* timeCheck;
2023-08-09 13:13:38 +02:00
Storage storage;
2023-08-09 12:55:11 +02:00
// The buffer to hold a received message while it is read
uint8_t receivedMessageBuffer[AUTHENTICATED_MESSAGE_SIZE];
// The buffer to hold a response while it is sent
uint8_t responseBuffer[AUTHENTICATED_MESSAGE_SIZE+1];
SesameEvent* responseStatus;
AuthenticatedMessage* responseMessage;
uint16_t responseSize = 0;
void handleLocalMessage(AsyncWebServerRequest *request);
// Based on https://stackoverflow.com/a/23898449/266720
bool convertHexMessageToBinary(const char* str);
void handleServerMessage(uint8_t* payload, size_t length);
void sendServerError(SesameEvent event);
void processMessage(AuthenticatedMessage* message);
SesameEvent verifyAndProcessReceivedMessage(AuthenticatedMessage* message);
uint16_t prepareResponseBuffer(SesameEvent event, uint8_t deviceId = 0);
void sendPreparedLocalResponse(AsyncWebServerRequest *request);
void sendPreparedServerResponse();
};