Skip to content

Commit

Permalink
add message for fetching config (width/height)
Browse files Browse the repository at this point in the history
  • Loading branch information
Knifa committed Dec 1, 2024
1 parent 466ab38 commit 1abb17c
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 1 deletion.
9 changes: 9 additions & 0 deletions src/control_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,14 @@ int main(int argc, char *argv[]) {
argparse::ArgumentParser get_temperature_command("get-temperature");
get_temperature_command.add_description("Get the color temperature");

argparse::ArgumentParser get_configuration_command("get-configuration");
get_configuration_command.add_description("Get the configuration");

program.add_subparser(get_brightness_command);
program.add_subparser(set_brightness_command);
program.add_subparser(get_temperature_command);
program.add_subparser(set_temperature_command);
program.add_subparser(get_configuration_command);

try {
program.parse_args(argc, argv);
Expand Down Expand Up @@ -96,6 +100,11 @@ int main(int argc, char *argv[]) {
const auto res_msg = send_and_recv(sock, lmz::GetTemperatureRequest{});

std::cout << std::to_string(res_msg.args.temperature) << std::endl;
} else if (program.is_subcommand_used(get_configuration_command)) {
const auto res_msg = send_and_recv(sock, lmz::GetConfigurationRequest{});

std::cout << std::to_string(res_msg.args.width) << " " << std::to_string(res_msg.args.height)
<< std::endl;
} else {
std::cerr << program;
return 1;
Expand Down
17 changes: 16 additions & 1 deletion src/messages.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,15 @@ enum class MessageId : std::uint8_t {
GetTemperatureRequest,
GetTemperatureReply,
SetTemperatureRequest,

GetConfigurationRequest,
GetConfigurationReply,
};

namespace {

constexpr MessageId message_id_min = MessageId::NullReply;
constexpr MessageId message_id_max = MessageId::SetTemperatureRequest;
constexpr MessageId message_id_max = MessageId::GetConfigurationReply;

#pragma pack(push, 1)

Expand All @@ -33,6 +36,11 @@ namespace {
uint8_t brightness;
};

struct ConfigurationArgs {
uint16_t width;
uint16_t height;
};

struct TemperatureArgs {
uint16_t temperature;
};
Expand Down Expand Up @@ -65,6 +73,9 @@ using GetTemperatureRequest = Message<MessageId::GetTemperatureRequest>;
using GetTemperatureReply = Message<MessageId::GetTemperatureReply, TemperatureArgs>;
using SetTemperatureRequest = Message<MessageId::SetTemperatureRequest, TemperatureArgs>;

using GetConfigurationRequest = Message<MessageId::GetConfigurationRequest>;
using GetConfigurationReply = Message<MessageId::GetConfigurationReply, ConfigurationArgs>;

namespace {
template <IsMessage MessageT> struct MessageRequestReply {
static_assert(false, "No reply type defined for this message");
Expand All @@ -85,6 +96,10 @@ namespace {
template <> struct MessageRequestReply<SetTemperatureRequest> {
using ReplyType = NullReply;
};

template <> struct MessageRequestReply<GetConfigurationRequest> {
using ReplyType = GetConfigurationReply;
};
} // namespace

template <IsMessage RequestT>
Expand Down
10 changes: 10 additions & 0 deletions src/server_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,13 @@ template <> lmz::NullReply process_request(const lmz::SetTemperatureRequest &req
return lmz::NullReply{};
}

template <> lmz::GetConfigurationReply process_request(const lmz::GetConfigurationRequest &) {
return lmz::GetConfigurationReply{
.args = {.width = static_cast<uint16_t>(frame_task::matrix_width),
.height = static_cast<uint16_t>(frame_task::matrix_height)},
};
}

template <lmz::IsMessage RequestT> void process_message(const std::span<const std::byte> &data) {
const auto req_msg = lmz::get_message_from_data<RequestT>(data);
const auto reply = process_request<RequestT>(req_msg);
Expand Down Expand Up @@ -203,6 +210,9 @@ static void loop() {
case lmz::MessageId::SetTemperatureRequest: {
process_message<lmz::SetTemperatureRequest>(data);
} break;
case lmz::MessageId::GetConfigurationRequest: {
process_message<lmz::GetConfigurationRequest>(data);
} break;
default: {
PLOG_ERROR << "Received control message with invalid type";
} break;
Expand Down

0 comments on commit 1abb17c

Please sign in to comment.