Skip to content

Commit 5333d02

Browse files
authored
fix: Serial now outputs CRLF rather than just LF for better compatibility (#353)
* fix: Serial now uses CRLF rather than just LF for better compatibility * Add changeset * Serial CRLF: Fix according to reviews
1 parent e23d456 commit 5333d02

4 files changed

Lines changed: 41 additions & 27 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'firmware': patch
3+
---
4+
5+
fix: Serial now uses CRLF rather than just LF for better compatibility

include/serial/command_handlers/common.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
#include <Arduino.h>
88

9-
#define SERPR_SYS(format, ...) ::Serial.printf("$SYS$|" format "\n", ##__VA_ARGS__)
9+
#define SERPR_SYS(format, ...) ::Serial.printf("$SYS$|" format "\r\n", ##__VA_ARGS__)
1010
#define SERPR_RESPONSE(format, ...) SERPR_SYS("Response|" format, ##__VA_ARGS__)
1111
#define SERPR_SUCCESS(format, ...) SERPR_SYS("Success|" format, ##__VA_ARGS__)
1212
#define SERPR_ERROR(format, ...) SERPR_SYS("Error|" format, ##__VA_ARGS__)

src/serial/SerialInputHandler.cpp

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ void _printCompleteHelp()
8989
}
9090
}
9191

92-
std::size_t paddedLength = longestCommand + 1 + longestArgument + 1; // +1 for space, +1 for newline
92+
std::size_t paddedLength = longestCommand + 1 + longestArgument + 2; // +1 for space, +2 for newline
9393

9494
std::string buffer;
9595
buffer.reserve((paddedLength * commandCount) + descriptionSize); // Approximate size
@@ -117,6 +117,7 @@ void _printCompleteHelp()
117117

118118
buffer.append(command.description());
119119

120+
buffer.push_back('\r');
120121
buffer.push_back('\n');
121122
}
122123
}
@@ -129,7 +130,7 @@ void _printCommandHelp(Serial::CommandGroup& group)
129130
{
130131
std::size_t size = 0;
131132
for (const auto& command : group.commands()) {
132-
size++; // +1 for newline
133+
size += 2; // +2 for newline
133134
size += group.name().size();
134135
size++; // +1 for space
135136

@@ -141,29 +142,29 @@ void _printCommandHelp(Serial::CommandGroup& group)
141142
size += arg.name.size() + 3; // +1 for space, +2 for <>
142143
}
143144

144-
size++; // +1 for newline
145+
size += 2; // +2 for newline
145146

146147
if (command.description().size() > 0) {
147-
size = command.description().size() + 3; // +2 for indent, +1 for newline
148+
size = command.description().size() + 4; // +2 for indent, +2 for newline
148149
}
149150

150151
if (command.arguments().size() > 0) {
151-
size += 13; // +13 for " Arguments:\n"
152+
size += 14; // +14 for " Arguments:\r\n"
152153
for (const auto& arg : command.arguments()) {
153154
size += arg.name.size() + 7; // +4 for indent, +2 for <>, +1 for space
154155
size += arg.constraint.size();
155156
if (arg.constraintExtensions.size() > 0) {
156-
size += 2; // +1 for ':', +1 for newline
157+
size += 3; // +1 for ':', +2 for newline
157158
for (const auto& ext : arg.constraintExtensions) {
158-
size += ext.size() + 7; // +1 for newline, +6 for indent
159+
size += ext.size() + 8; // +2 for newline, +6 for indent
159160
}
160161
} else {
161-
size++; // +1 for newline
162+
size += 2; // +2 for newline
162163
}
163164
}
164165
}
165166

166-
size += 15; // +15 for " Example: \n"
167+
size += 16; // +16 for " Example: \r\n"
167168
size += group.name().size() + 1; // +1 for space
168169

169170
if (command.name().size() > 0) {
@@ -174,15 +175,16 @@ void _printCommandHelp(Serial::CommandGroup& group)
174175
size += arg.exampleValue.size() + 1; // +1 for space
175176
}
176177

177-
size++; // +1 for newline
178+
size += 2; // +2 for newline
178179
}
179180

180-
size++; // +1 for newline
181+
size += 2; // +2 for newline
181182

182183
std::string buffer;
183184
buffer.reserve(size); // TODO: Should be exact size, is 20 bytes off, figure out why
184185

185186
for (const auto& command : group.commands()) {
187+
buffer.push_back('\r');
186188
buffer.push_back('\n');
187189
buffer.append(group.name());
188190
buffer.push_back(' ');
@@ -199,16 +201,18 @@ void _printCommandHelp(Serial::CommandGroup& group)
199201
buffer.push_back(' ');
200202
}
201203

204+
buffer.push_back('\r');
202205
buffer.push_back('\n');
203206

204207
if (command.description().size() > 0) {
205208
buffer.append(2, ' ');
206209
buffer.append(command.description());
210+
buffer.push_back('\r');
207211
buffer.push_back('\n');
208212
}
209213

210214
if (command.arguments().size() > 0) {
211-
buffer.append(" Arguments:\n"sv);
215+
buffer.append(" Arguments:\r\n"sv);
212216
for (const auto& arg : command.arguments()) {
213217
buffer.append(4, ' ');
214218
buffer.push_back('<');
@@ -217,19 +221,22 @@ void _printCommandHelp(Serial::CommandGroup& group)
217221
buffer.push_back(' ');
218222
buffer.append(arg.constraint);
219223
if (arg.constraintExtensions.size() > 0) {
224+
buffer.push_back('\r');
220225
buffer.push_back('\n');
221226
for (const auto& ext : arg.constraintExtensions) {
222227
buffer.append(6, ' ');
223228
buffer.append(ext);
229+
buffer.push_back('\r');
224230
buffer.push_back('\n');
225231
}
226232
} else {
233+
buffer.push_back('\r');
227234
buffer.push_back('\n');
228235
}
229236
}
230237
}
231238

232-
buffer.append(" Example:\n "sv);
239+
buffer.append(" Example:\r\n "sv);
233240
buffer.append(group.name());
234241
buffer.push_back(' ');
235242

@@ -243,8 +250,10 @@ void _printCommandHelp(Serial::CommandGroup& group)
243250
buffer.push_back(' ');
244251
}
245252

253+
buffer.push_back('\r');
246254
buffer.push_back('\n');
247255
}
256+
buffer.push_back('\r');
248257
buffer.push_back('\n');
249258

250259
::Serial.print(buffer.data());
@@ -616,22 +625,22 @@ void SerialInputHandler::SetSerialEchoEnabled(bool enabled)
616625

617626
void SerialInputHandler::PrintWelcomeHeader()
618627
{
619-
::Serial.print(R"(
620-
============== OPENSHOCK ==============
621-
Contribute @ github.com/OpenShock
622-
Discuss @ discord.gg/OpenShock
623-
Type 'help' for available commands
624-
=======================================
625-
)");
628+
::Serial.println("\
629+
============== OPENSHOCK ==============\r\n\
630+
Contribute @ github.com/OpenShock\r\n\
631+
Discuss @ discord.gg/OpenShock\r\n\
632+
Type 'help' for available commands\r\n\
633+
=======================================\r\n\
634+
");
626635
}
627636

628637
void SerialInputHandler::PrintVersionInfo()
629638
{
630639
::Serial.print("\
631-
Version: " OPENSHOCK_FW_VERSION "\n\
632-
Build: " OPENSHOCK_FW_MODE "\n\
633-
Commit: " OPENSHOCK_FW_GIT_COMMIT "\n\
634-
Board: " OPENSHOCK_FW_BOARD "\n\
635-
Chip: " OPENSHOCK_FW_CHIP "\n\
640+
Version: " OPENSHOCK_FW_VERSION "\r\n\
641+
Build: " OPENSHOCK_FW_MODE "\r\n\
642+
Commit: " OPENSHOCK_FW_GIT_COMMIT "\r\n\
643+
Board: " OPENSHOCK_FW_BOARD "\r\n\
644+
Chip: " OPENSHOCK_FW_CHIP "\r\n\
636645
");
637646
}

src/serial/command_handlers/version.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
void _handleVersionCommand(std::string_view arg, bool isAutomated) {
88
(void)arg;
99

10-
::Serial.print("\n");
10+
::Serial.println();
1111
OpenShock::SerialInputHandler::PrintVersionInfo();
1212
}
1313

0 commit comments

Comments
 (0)