Skip to content

Commit c31212f

Browse files
committed
Start work on fixing serial subcommands
1 parent 611343b commit c31212f

2 files changed

Lines changed: 94 additions & 96 deletions

File tree

src/serial/command_handlers/estop.cpp

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,21 @@
44
#include "Convert.h"
55
#include "EStopManager.h"
66

7-
void _handleEStopEnabledCommand(std::string_view arg, bool isAutomated)
7+
void _handleEStopEnabledGetCommand(std::string_view arg, bool isAutomated)
88
{
99
bool enabled;
10-
if (arg.empty()) {
11-
if (!OpenShock::Config::GetEStopEnabled(enabled)) {
12-
SERPR_ERROR("Failed to get EStop enabled from config");
13-
return;
14-
}
15-
16-
// Get EStop enabled
17-
SERPR_RESPONSE("EStopEnabled|%s", enabled ? "true" : "false");
10+
if (!OpenShock::Config::GetEStopEnabled(enabled)) {
11+
SERPR_ERROR("Failed to get EStop enabled from config");
1812
return;
1913
}
2014

15+
// Get EStop enabled
16+
SERPR_RESPONSE("EStopEnabled|%s", enabled ? "true" : "false");
17+
}
18+
19+
void _handleEStopEnabledSetCommand(std::string_view arg, bool isAutomated)
20+
{
21+
bool enabled;
2122
if (!OpenShock::Convert::ToBool(arg, enabled)) {
2223
SERPR_ERROR("Invalid argument (must be a boolean)");
2324
return;
@@ -36,20 +37,21 @@ void _handleEStopEnabledCommand(std::string_view arg, bool isAutomated)
3637
SERPR_SUCCESS("Saved config");
3738
}
3839

39-
void _handleEStopPinCommand(std::string_view arg, bool isAutomated)
40+
void _handleEStopPinGetCommand(std::string_view arg, bool isAutomated)
4041
{
4142
gpio_num_t estopPin;
42-
if (arg.empty()) {
43-
if (!OpenShock::Config::GetEStopGpioPin(estopPin)) {
44-
SERPR_ERROR("Failed to get EStop pin from config");
45-
return;
46-
}
47-
48-
// Get EStop pin
49-
SERPR_RESPONSE("EStopPin|%hhi", static_cast<int8_t>(estopPin));
43+
if (!OpenShock::Config::GetEStopGpioPin(estopPin)) {
44+
SERPR_ERROR("Failed to get EStop pin from config");
5045
return;
5146
}
5247

48+
// Get EStop pin
49+
SERPR_RESPONSE("EStopPin|%hhi", static_cast<int8_t>(estopPin));
50+
}
51+
52+
void _handleEStopPinSetCommand(std::string_view arg, bool isAutomated)
53+
{
54+
gpio_num_t estopPin;
5355
if (!OpenShock::Convert::ToGpioNum(arg, estopPin)) {
5456
SERPR_ERROR("Invalid argument (number invalid or out of range)");
5557
return;
@@ -72,12 +74,12 @@ OpenShock::Serial::CommandGroup OpenShock::Serial::CommandHandlers::EStopHandler
7274
{
7375
auto group = OpenShock::Serial::CommandGroup("estop"sv);
7476

75-
auto& getEnabledCommand = group.addCommand("enabled"sv, "Get the E-Stop enabled state."sv, _handleEStopEnabledCommand);
76-
auto& setEnabledCommand = group.addCommand("enabled"sv, "Set the E-Stop enabled state."sv, _handleEStopEnabledCommand);
77+
auto& getEnabledCommand = group.addCommand("enabled"sv, "Get the E-Stop enabled state."sv, _handleEStopEnabledGetCommand);
78+
auto& setEnabledCommand = group.addCommand("enabled"sv, "Set the E-Stop enabled state."sv, _handleEStopEnabledSetCommand);
7779
setEnabledCommand.addArgument("enabled"sv, "must be a boolean"sv, "true"sv);
7880

79-
auto& getPinCommand = group.addCommand("pin"sv, "Get the GPIO pin used for the E-Stop."sv, _handleEStopPinCommand);
80-
auto& setPinCommand = group.addCommand("pin"sv, "Set the GPIO pin used for the E-Stop."sv, _handleEStopPinCommand);
81+
auto& getPinCommand = group.addCommand("pin"sv, "Get the GPIO pin used for the E-Stop."sv, _handleEStopPinGetCommand);
82+
auto& setPinCommand = group.addCommand("pin"sv, "Set the GPIO pin used for the E-Stop."sv, _handleEStopPinSetCommand);
8183
setPinCommand.addArgument("pin"sv, "must be a number"sv, "4"sv);
8284

8385
return group;

src/serial/command_handlers/lcgoverride.cpp

Lines changed: 70 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -7,98 +7,94 @@
77

88
const char* TAG = "Serial::CommandHandlers::LcgOverride";
99

10-
void _handleLcgOverrideCommand(std::string_view arg, bool isAutomated) {
11-
if (arg.empty()) {
12-
std::string lcgOverride;
13-
if (!OpenShock::Config::GetBackendLCGOverride(lcgOverride)) {
14-
SERPR_ERROR("Failed to get LCG override from config");
15-
return;
16-
}
17-
18-
// Get LCG override
19-
SERPR_RESPONSE("LcgOverride|%s", lcgOverride.c_str());
10+
void _handleLcgOverrideCommand(std::string_view arg, bool isAutomated)
11+
{
12+
std::string lcgOverride;
13+
if (!OpenShock::Config::GetBackendLCGOverride(lcgOverride)) {
14+
SERPR_ERROR("Failed to get LCG override from config");
2015
return;
2116
}
2217

23-
if (OpenShock::StringStartsWith(arg, "clear"sv)) {
24-
if (arg.size() != 5) {
25-
SERPR_ERROR("Invalid command (clear command should not have any arguments)");
26-
return;
27-
}
28-
29-
bool result = OpenShock::Config::SetBackendLCGOverride(std::string());
30-
if (result) {
31-
SERPR_SUCCESS("Cleared LCG override");
32-
} else {
33-
SERPR_ERROR("Failed to clear LCG override");
34-
}
18+
// Get LCG override
19+
SERPR_RESPONSE("LcgOverride|%s", lcgOverride.c_str());
20+
}
21+
22+
void _handleLcgOverrideClearCommand(std::string_view arg, bool isAutomated)
23+
{
24+
if (arg.size() != 5) {
25+
SERPR_ERROR("Invalid command (clear command should not have any arguments)");
3526
return;
3627
}
3728

38-
if (OpenShock::StringStartsWith(arg, "set "sv)) {
39-
if (arg.size() <= 4) {
40-
SERPR_ERROR("Invalid command (set command should have an argument)");
41-
return;
42-
}
43-
44-
std::string_view domain = arg.substr(4);
45-
46-
if (domain.size() + 40 >= OPENSHOCK_URI_BUFFER_SIZE) {
47-
SERPR_ERROR("Domain name too long, please try increasing the \"OPENSHOCK_URI_BUFFER_SIZE\" constant in source code");
48-
return;
49-
}
50-
51-
char uri[OPENSHOCK_URI_BUFFER_SIZE];
52-
sprintf(uri, "https://%.*s/1", static_cast<int>(domain.size()), domain.data());
53-
54-
auto resp = OpenShock::HTTP::GetJSON<OpenShock::Serialization::JsonAPI::LcgInstanceDetailsResponse>(
55-
uri,
56-
{
57-
{"Accept", "application/json"}
58-
},
59-
OpenShock::Serialization::JsonAPI::ParseLcgInstanceDetailsJsonResponse,
60-
{200}
61-
);
62-
63-
if (resp.result != OpenShock::HTTP::RequestResult::Success) {
64-
SERPR_ERROR("Tried to connect to \"%.*s\", but failed with status [%d], refusing to save domain to config", domain.size(), domain.data(), resp.code);
65-
return;
66-
}
67-
68-
OS_LOGI(
69-
TAG,
70-
"Successfully connected to \"%.*s\", name: %s, version: %s, current time: %s, country code: %s, FQDN: %s",
71-
domain.size(),
72-
domain.data(),
73-
resp.data.name.c_str(),
74-
resp.data.version.c_str(),
75-
resp.data.currentTime.c_str(),
76-
resp.data.countryCode.c_str(),
77-
resp.data.fqdn.c_str()
78-
);
79-
80-
bool result = OpenShock::Config::SetBackendLCGOverride(domain);
81-
82-
if (result) {
83-
SERPR_SUCCESS("Saved config");
84-
} else {
85-
SERPR_ERROR("Failed to save config");
86-
}
29+
bool result = OpenShock::Config::SetBackendLCGOverride(std::string());
30+
if (result) {
31+
SERPR_SUCCESS("Cleared LCG override");
32+
} else {
33+
SERPR_ERROR("Failed to clear LCG override");
34+
}
35+
}
36+
37+
void _handleLcgOverrideSetCommand(std::string_view arg, bool isAutomated)
38+
{
39+
if (arg.size() <= 4) {
40+
SERPR_ERROR("Invalid command (set command should have an argument)");
8741
return;
8842
}
8943

90-
SERPR_ERROR("Invalid subcommand");
44+
std::string_view domain = arg.substr(4);
45+
46+
if (domain.size() + 40 >= OPENSHOCK_URI_BUFFER_SIZE) {
47+
SERPR_ERROR("Domain name too long, please try increasing the \"OPENSHOCK_URI_BUFFER_SIZE\" constant in source code");
48+
return;
49+
}
50+
51+
char uri[OPENSHOCK_URI_BUFFER_SIZE];
52+
sprintf(uri, "https://%.*s/1", static_cast<int>(domain.size()), domain.data());
53+
54+
auto resp = OpenShock::HTTP::GetJSON<OpenShock::Serialization::JsonAPI::LcgInstanceDetailsResponse>(
55+
uri,
56+
{
57+
{"Accept", "application/json"}
58+
},
59+
OpenShock::Serialization::JsonAPI::ParseLcgInstanceDetailsJsonResponse,
60+
{200}
61+
);
62+
63+
if (resp.result != OpenShock::HTTP::RequestResult::Success) {
64+
SERPR_ERROR("Tried to connect to \"%.*s\", but failed with status [%d], refusing to save domain to config", domain.size(), domain.data(), resp.code);
65+
return;
66+
}
67+
68+
OS_LOGI(
69+
TAG,
70+
"Successfully connected to \"%.*s\", name: %s, version: %s, current time: %s, country code: %s, FQDN: %s",
71+
domain.size(),
72+
domain.data(),
73+
resp.data.name.c_str(),
74+
resp.data.version.c_str(),
75+
resp.data.currentTime.c_str(),
76+
resp.data.countryCode.c_str(),
77+
resp.data.fqdn.c_str()
78+
);
79+
80+
bool result = OpenShock::Config::SetBackendLCGOverride(domain);
81+
82+
if (result) {
83+
SERPR_SUCCESS("Saved config");
84+
} else {
85+
SERPR_ERROR("Failed to save config");
86+
}
9187
}
9288

9389
OpenShock::Serial::CommandGroup OpenShock::Serial::CommandHandlers::LcgOverrideHandler() {
9490
auto group = OpenShock::Serial::CommandGroup("lcgoverride"sv);
9591

9692
auto& getCommand = group.addCommand("Get the domain overridden for LCG endpoint (if any)."sv, _handleLcgOverrideCommand);
9793

98-
auto& setCommand = group.addCommand("set"sv, "Set a domain to override the LCG endpoint."sv, _handleLcgOverrideCommand);
94+
auto& setCommand = group.addCommand("set"sv, "Set a domain to override the LCG endpoint."sv, _handleLcgOverrideSetCommand);
9995
setCommand.addArgument("domain"sv, "must be a string"sv, "eu1-gateway.shocklink.net"sv);
10096

101-
auto& clearCommand = group.addCommand("clear"sv, "Clear the overridden LCG endpoint."sv, _handleLcgOverrideCommand);
97+
auto& clearCommand = group.addCommand("clear"sv, "Clear the overridden LCG endpoint."sv, _handleLcgOverrideClearCommand);
10298

10399
return group;
104100
}

0 commit comments

Comments
 (0)