Implement update camera command

This commit is contained in:
Lorow
2024-11-20 22:59:34 +01:00
parent aaa24812f5
commit 60e2e7cc36
3 changed files with 43 additions and 8 deletions

View File

@@ -44,15 +44,14 @@ struct MDNSPayload : public BasePayload
std::string hostname;
};
// todo implement
struct UpdateCameraConfigPayload : BasePayload
{
uint8_t vflip;
uint8_t href;
uint8_t framesize;
uint8_t quality;
uint8_t brightness;
// todo add more options here
std::optional<uint8_t> vflip;
std::optional<uint8_t> href;
std::optional<uint8_t> framesize;
std::optional<uint8_t> quality;
std::optional<uint8_t> brightness;
// TODO add more options here
};
#endif

View File

@@ -227,6 +227,26 @@ std::optional<UpdateCameraConfigPayload> updateCameraCommand::parsePayload(std::
UpdateCameraConfigPayload payload;
cJSON *parsedJson = cJSON_Parse(jsonPayload.c_str());
if (parsedJson == nullptr)
return std::nullopt;
cJSON *vflipObject = cJSON_GetObjectItem(parsedJson, "vflip");
cJSON *hrefObject = cJSON_GetObjectItem(parsedJson, "href");
cJSON *framesize = cJSON_GetObjectItem(parsedJson, "framesize");
cJSON *quality = cJSON_GetObjectItem(parsedJson, "quality");
cJSON *brightness = cJSON_GetObjectItem(parsedJson, "brightness");
if (vflipObject != nullptr)
payload.vflip = vflipObject->valueint;
if (hrefObject != nullptr)
payload.href = hrefObject->valueint;
if (framesize != nullptr)
payload.framesize = framesize->valueint;
if (quality != nullptr)
payload.quality = quality->valueint;
if (brightness != nullptr)
payload.brightness = brightness->valueint;
cJSON_Delete(parsedJson);
return payload;
}
@@ -234,7 +254,21 @@ std::optional<UpdateCameraConfigPayload> updateCameraCommand::parsePayload(std::
CommandResult updateCameraCommand::execute(std::string &jsonPayload)
{
auto payload = parsePayload(jsonPayload);
// todo implement updating
if (!payload.has_value())
{
return CommandResult::getErrorResult("Invalid payload");
}
auto updatedConfig = payload.value();
auto oldConfig = projectConfig.getCameraConfig();
this->projectConfig.setCameraConfig(
updatedConfig.vflip.has_value() ? updatedConfig.vflip.value() : oldConfig.vflip,
updatedConfig.framesize.has_value() ? updatedConfig.framesize.value() : oldConfig.framesize,
updatedConfig.href.has_value() ? updatedConfig.href.value() : oldConfig.href,
updatedConfig.quality.has_value() ? updatedConfig.quality.value() : oldConfig.quality,
updatedConfig.brightness.has_value() ? updatedConfig.brightness.value() : oldConfig.brightness,
true);
return CommandResult::getSuccessResult("Config updated");
}

View File

@@ -1,5 +1,7 @@
#include "ProjectConfig.hpp"
// TODO the current implementation is kinda wack, rethink it
ProjectConfig::ProjectConfig(const std::string &name,
const std::string &mdnsName)
: _name(std::move(name)),