mirror of
https://github.com/EyeTrackVR/OpenIris.git
synced 2025-11-04 15:39:42 +08:00
simplify query implementation
This commit is contained in:
parent
635c6b04de
commit
c8335d221d
@ -1,84 +1,81 @@
|
||||
#include "CommandManager.hpp"
|
||||
|
||||
CommandManager::CommandManager(ProjectConfig *deviceConfig) : deviceConfig(deviceConfig) {}
|
||||
CommandManager::CommandManager(ProjectConfig* deviceConfig)
|
||||
: deviceConfig(deviceConfig) {}
|
||||
|
||||
|
||||
const CommandType CommandManager::getCommandType(JsonVariant &command){
|
||||
if (!command.containsKey("command"))
|
||||
return CommandType::None;
|
||||
|
||||
if (auto search = commandMap.find(command["command"]); search != commandMap.end())
|
||||
return search->second;
|
||||
|
||||
const CommandType CommandManager::getCommandType(JsonVariant& command) {
|
||||
if (!command.containsKey("command"))
|
||||
return CommandType::None;
|
||||
|
||||
if (auto search = commandMap.find(command["command"]);
|
||||
search != commandMap.end())
|
||||
return search->second;
|
||||
|
||||
return CommandType::None;
|
||||
}
|
||||
|
||||
bool CommandManager::hasDataField(JsonVariant &command) {
|
||||
return command.containsKey("data");
|
||||
bool CommandManager::hasDataField(JsonVariant& command) {
|
||||
return command.containsKey("data");
|
||||
}
|
||||
|
||||
void CommandManager::handleCommands(CommandsPayload commandsPayload){
|
||||
if (!commandsPayload.data.containsKey("commands")){
|
||||
log_e("Json data sent not supported, lacks commands field");
|
||||
return;
|
||||
}
|
||||
void CommandManager::handleCommands(CommandsPayload commandsPayload) {
|
||||
if (!commandsPayload.data.containsKey("commands")) {
|
||||
log_e("Json data sent not supported, lacks commands field");
|
||||
return;
|
||||
}
|
||||
|
||||
for(JsonVariant commandData : commandsPayload.data["commands"].as<JsonArray>()) {
|
||||
this->handleCommand(commandData);
|
||||
}
|
||||
for (JsonVariant commandData :
|
||||
commandsPayload.data["commands"].as<JsonArray>()) {
|
||||
this->handleCommand(commandData);
|
||||
}
|
||||
|
||||
this->deviceConfig->save();
|
||||
}
|
||||
this->deviceConfig->save();
|
||||
}
|
||||
|
||||
void CommandManager::handleCommand(JsonVariant command) {
|
||||
auto command_type = this->getCommandType(command);
|
||||
auto command_type = this->getCommandType(command);
|
||||
|
||||
switch(command_type)
|
||||
{
|
||||
case CommandType::SET_WIFI: {
|
||||
if (!this->hasDataField(command))
|
||||
// malformed command, lacked data field
|
||||
break;
|
||||
switch (command_type) {
|
||||
case CommandType::SET_WIFI: {
|
||||
if (!this->hasDataField(command))
|
||||
// malformed command, lacked data field
|
||||
break;
|
||||
|
||||
if(!command["data"].containsKey("ssid") || !command["data"].containsKey("password"))
|
||||
break;
|
||||
if (!command["data"].containsKey("ssid") ||
|
||||
!command["data"].containsKey("password"))
|
||||
break;
|
||||
|
||||
std::string customNetworkName = "main";
|
||||
if (command["data"].containsKey("network_name"))
|
||||
customNetworkName = command["data"]["network_name"].as<std::string>();
|
||||
std::string customNetworkName = "main";
|
||||
if (command["data"].containsKey("network_name"))
|
||||
customNetworkName = command["data"]["network_name"].as<std::string>();
|
||||
|
||||
this->deviceConfig->setWifiConfig(
|
||||
customNetworkName,
|
||||
command["data"]["ssid"],
|
||||
command["data"]["password"],
|
||||
0, // channel, should this be zero?
|
||||
0, // power, should this be zero?
|
||||
false,
|
||||
false
|
||||
);
|
||||
|
||||
break;
|
||||
}
|
||||
case CommandType::SET_MDNS: {
|
||||
if (!this->hasDataField(command))
|
||||
break;
|
||||
this->deviceConfig->setWifiConfig(customNetworkName,
|
||||
command["data"]["ssid"],
|
||||
command["data"]["password"],
|
||||
0, // channel, should this be zero?
|
||||
0, // power, should this be zero?
|
||||
false, false);
|
||||
|
||||
if(!command["data"].containsKey("hostname") || !strlen(command["data"]["hostname"]))
|
||||
break;
|
||||
|
||||
this->deviceConfig->setMDNSConfig(
|
||||
command["data"]["hostname"],
|
||||
"openiristracker",
|
||||
false
|
||||
);
|
||||
|
||||
break;
|
||||
}
|
||||
case CommandType::PING: {
|
||||
Serial.println("PONG \n\r");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
break;
|
||||
}
|
||||
case CommandType::SET_MDNS: {
|
||||
if (!this->hasDataField(command))
|
||||
break;
|
||||
|
||||
if (!command["data"].containsKey("hostname") ||
|
||||
!strlen(command["data"]["hostname"]))
|
||||
break;
|
||||
|
||||
this->deviceConfig->setMDNSConfig(command["data"]["hostname"],
|
||||
"openiristracker", false);
|
||||
|
||||
break;
|
||||
}
|
||||
case CommandType::PING: {
|
||||
Serial.println("PONG \n\r");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -6,35 +6,33 @@
|
||||
#include "data/config/project_config.hpp"
|
||||
|
||||
enum CommandType {
|
||||
None,
|
||||
PING,
|
||||
SET_WIFI,
|
||||
SET_MDNS,
|
||||
None,
|
||||
PING,
|
||||
SET_WIFI,
|
||||
SET_MDNS,
|
||||
};
|
||||
|
||||
|
||||
struct CommandsPayload {
|
||||
JsonDocument data;
|
||||
struct CommandsPayload {
|
||||
JsonDocument data;
|
||||
};
|
||||
|
||||
class CommandManager{
|
||||
|
||||
private:
|
||||
const std::unordered_map<std::string, CommandType> commandMap = {
|
||||
{"ping", CommandType::PING},
|
||||
{"set_wifi", CommandType::SET_WIFI},
|
||||
{"set_mdns", CommandType::SET_MDNS},
|
||||
};
|
||||
class CommandManager {
|
||||
private:
|
||||
const std::unordered_map<std::string, CommandType> commandMap = {
|
||||
{"ping", CommandType::PING},
|
||||
{"set_wifi", CommandType::SET_WIFI},
|
||||
{"set_mdns", CommandType::SET_MDNS},
|
||||
};
|
||||
|
||||
ProjectConfig* deviceConfig;
|
||||
ProjectConfig* deviceConfig;
|
||||
|
||||
bool hasDataField(JsonVariant &command);
|
||||
void handleCommand(JsonVariant command);
|
||||
const CommandType getCommandType(JsonVariant &command);
|
||||
bool hasDataField(JsonVariant& command);
|
||||
void handleCommand(JsonVariant command);
|
||||
const CommandType getCommandType(JsonVariant& command);
|
||||
|
||||
public:
|
||||
CommandManager(ProjectConfig *deviceConfig);
|
||||
void handleCommands(CommandsPayload commandsPayload);
|
||||
public:
|
||||
CommandManager(ProjectConfig* deviceConfig);
|
||||
void handleCommands(CommandsPayload commandsPayload);
|
||||
};
|
||||
|
||||
#endif
|
||||
@ -1,8 +0,0 @@
|
||||
#include "QueryManager.hpp"
|
||||
|
||||
std::string QueryManager::formatMessage(QueryPayload* messagePayload) {
|
||||
return Helpers::format_string(
|
||||
"{\"action\": \"%s\", \"status\": %d, \"additional_info\": \"%s\"}",
|
||||
queryActionMap.at(messagePayload->action).c_str(), messagePayload->status,
|
||||
messagePayload->additionalInfo.c_str());
|
||||
}
|
||||
@ -1,46 +0,0 @@
|
||||
#pragma once
|
||||
#ifndef QUERY_MANAGER_HPP
|
||||
#define QUERY_MANAGER_HPP
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include "data/utilities/helpers.hpp"
|
||||
|
||||
enum QueryAction {
|
||||
READY_TO_RECEIVE,
|
||||
PARSE_COMMANDS,
|
||||
CONNECT_TO_WIFI,
|
||||
};
|
||||
|
||||
enum QueryStatus {
|
||||
NONE,
|
||||
SUCCESS,
|
||||
ERROR,
|
||||
};
|
||||
|
||||
struct QueryPayload {
|
||||
QueryAction action;
|
||||
QueryStatus status;
|
||||
std::string additionalInfo;
|
||||
|
||||
QueryPayload(QueryAction action,
|
||||
QueryStatus status,
|
||||
std::string additionalInfo) {
|
||||
this->action = action;
|
||||
this->status = status;
|
||||
this->additionalInfo = additionalInfo;
|
||||
}
|
||||
};
|
||||
|
||||
class QueryManager {
|
||||
private:
|
||||
const std::unordered_map<QueryAction, std::string> queryActionMap = {
|
||||
{QueryAction::READY_TO_RECEIVE, "ready_to_receive"},
|
||||
{QueryAction::PARSE_COMMANDS, "parse_commands"},
|
||||
{QueryAction::CONNECT_TO_WIFI, "connect_to_wifi"},
|
||||
};
|
||||
|
||||
public:
|
||||
std::string formatMessage(QueryPayload* messagePayload);
|
||||
};
|
||||
|
||||
#endif
|
||||
@ -59,13 +59,19 @@ void SerialManager::init() {
|
||||
Serial.flush();
|
||||
}
|
||||
|
||||
QueryPayload* setupFinishedMessage =
|
||||
new QueryPayload(QueryAction::READY_TO_RECEIVE, QueryStatus::NONE, "");
|
||||
this->snedQuery(setupFinishedMessage);
|
||||
this->sendQuery(QueryAction::READY_TO_RECEIVE, QueryStatus::NONE, "");
|
||||
}
|
||||
|
||||
void SerialManager::snedQuery(QueryPayload* messagePayload) {
|
||||
Serial.println(this->queryManager->formatMessage(messagePayload).c_str());
|
||||
void SerialManager::(QueryAction action,
|
||||
QueryStatus status,
|
||||
std::string additional_info) {
|
||||
JsonDocument doc;
|
||||
doc["action"] = queryActionMap.at(action);
|
||||
doc["status"] = status;
|
||||
doc["additional_info"] = additional_info;
|
||||
|
||||
doc.shrinkToFit(); // optional
|
||||
serializeJson(doc, Serial);
|
||||
}
|
||||
|
||||
void SerialManager::run() {
|
||||
|
||||
@ -13,11 +13,28 @@
|
||||
const char* const ETVR_HEADER = "\xff\xa0";
|
||||
const char* const ETVR_HEADER_FRAME = "\xff\xa1";
|
||||
|
||||
enum QueryAction {
|
||||
READY_TO_RECEIVE,
|
||||
PARSE_COMMANDS,
|
||||
CONNECT_TO_WIFI,
|
||||
};
|
||||
|
||||
enum QueryStatus {
|
||||
NONE,
|
||||
SUCCESS,
|
||||
ERROR,
|
||||
};
|
||||
|
||||
const std::unordered_map<QueryAction, std::string> queryActionMap = {
|
||||
{QueryAction::READY_TO_RECEIVE, "ready_to_receive"},
|
||||
{QueryAction::PARSE_COMMANDS, "parse_commands"},
|
||||
{QueryAction::CONNECT_TO_WIFI, "connect_to_wifi"},
|
||||
};
|
||||
|
||||
class SerialManager {
|
||||
private:
|
||||
esp_err_t err = ESP_OK;
|
||||
CommandManager* commandManager;
|
||||
QueryManager* queryManager;
|
||||
|
||||
#ifdef ETVR_EYE_TRACKER_USB_API
|
||||
int64_t last_frame = 0;
|
||||
@ -28,7 +45,9 @@ class SerialManager {
|
||||
|
||||
public:
|
||||
SerialManager(CommandManager* commandManager);
|
||||
void snedQuery(QueryPayload* messagePayload);
|
||||
void sendQuery(QueryAction action,
|
||||
QueryStatus status,
|
||||
std::string additional_info);
|
||||
void init();
|
||||
void run();
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user