Skip to content

Commit 7671ad2

Browse files
committed
specific protocol changes to take into account production request
1. every command with no value now respond --> <command>:OK\r\n no spaces after : 2. every command that respond a value now respond --> <command>:<value>\r\n no ok after the value 3. to end each command response an additional line has been added --> EndOfTest\r\n
1 parent bf4d425 commit 7671ad2

File tree

3 files changed

+51
-11
lines changed

3 files changed

+51
-11
lines changed

extras/functions_generator_firmware/SKr3_waves/chAT.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ namespace SudoMaker::chAT {
100100
std::vector<uint8_t> inhibit_read(size_t raw_data_len);
101101
void continue_read() noexcept;
102102

103+
void dontSendOk();
103104
void write_data(const void *buf, size_t len);
104105
void write_cstr(const char *buf, ssize_t len = -1);
105106
void write_str(std::string str);

extras/functions_generator_firmware/SKr3_waves/chAt_cmds.h

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "pin_def.h"
77
#include "led_gauge.h"
88
#include "led_array.h"
9+
#include <string>
910

1011

1112
using namespace std;
@@ -27,6 +28,7 @@ void CAtWrapper::add_cmds() {
2728
auto &production_code = parser.args[0];
2829
if(production_code == _PRODUCTION_CODE_MODE) {
2930
app_status = APP_DIAGNOSTIC;
31+
srv.write_response_prompt();
3032
return chAT::CommandStatus::OK;
3133
}
3234
return chAT::CommandStatus::ERROR;
@@ -72,8 +74,12 @@ void CAtWrapper::add_cmds() {
7274
v = 0;
7375
}
7476
v = map(v, 0,ADC_RES, 0, 10);
75-
Serial.print(v);
76-
srv.write_line_end();
77+
string val = to_string(v);
78+
srv.write_response_prompt();
79+
srv.write_str(val);
80+
//Serial.print(v);
81+
srv.write_line_end();
82+
srv.dontSendOk();
7783
return chAT::CommandStatus::OK;
7884
}
7985

@@ -98,22 +104,27 @@ void CAtWrapper::add_cmds() {
98104
auto &st = parser.args[0];
99105
if(st == "ON") {
100106
app_status = APP_DIAGNOSTIC_LED_ON;
107+
srv.write_response_prompt();
101108
return chAT::CommandStatus::OK;
102109
}
103110
else if(st == "ON_F1") {
104111
app_status = APP_DIAGNOSTIC_LED_ON_F1;
112+
srv.write_response_prompt();
105113
return chAT::CommandStatus::OK;
106114
}
107115
else if(st == "ON_F2") {
108116
app_status = APP_DIAGNOSTIC_LED_ON_F2;
117+
srv.write_response_prompt();
109118
return chAT::CommandStatus::OK;
110119
}
111120
else if(st == "ON_R") {
112121
app_status = APP_DIAGNOSTIC_LED_ON_R;
122+
srv.write_response_prompt();
113123
return chAT::CommandStatus::OK;
114124
}
115125
else if(st == "OFF") {
116126
app_status = APP_DIAGNOSTIC;
127+
srv.write_response_prompt();
117128
return chAT::CommandStatus::OK;
118129
}
119130
return chAT::CommandStatus::ERROR;
@@ -148,7 +159,7 @@ void CAtWrapper::add_cmds() {
148159
}
149160
}
150161
f1 = (float)atof(f.c_str());
151-
162+
srv.write_response_prompt();
152163
return chAT::CommandStatus::OK;
153164
}
154165

@@ -180,7 +191,7 @@ void CAtWrapper::add_cmds() {
180191
}
181192
}
182193
f2 = (float)atof(f.c_str());
183-
194+
srv.write_response_prompt();
184195
return chAT::CommandStatus::OK;
185196
}
186197

@@ -219,7 +230,7 @@ void CAtWrapper::add_cmds() {
219230
a1 = 0.0;
220231
}
221232

222-
233+
srv.write_response_prompt();
223234
return chAT::CommandStatus::OK;
224235
}
225236

@@ -256,7 +267,7 @@ void CAtWrapper::add_cmds() {
256267
a2 = 0.0;
257268
}
258269

259-
270+
srv.write_response_prompt();
260271
return chAT::CommandStatus::OK;
261272
}
262273

extras/functions_generator_firmware/SKr3_waves/server.cpp

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ namespace SudoMaker::chAT {
111111
bool nonblocking = false;
112112
bool parser_debug = false;
113113

114+
bool inibit_ok = false;
115+
116+
void dontSendOk() { inibit_ok = true; }
117+
114118
ATParser parser;
115119

116120
void do_parse() {
@@ -151,15 +155,17 @@ namespace SudoMaker::chAT {
151155
}
152156

153157
void write_raw(data_holder d) {
154-
while (buf_write_len + d.size > buf_write_len_limit) {
158+
159+
while (buf_write_len + d.size > buf_write_len_limit) {
155160
if (buf_write.empty()) {
156161
return;
157162
} else {
163+
158164
buf_write_len -= buf_write.front().size;
159165
buf_write.pop_front();
160166
}
161167
}
162-
168+
163169
auto &nd = buf_write.emplace_back(std::move(d));
164170
nd.resolve_holder();
165171
buf_write_len += nd.size;
@@ -187,7 +193,13 @@ namespace SudoMaker::chAT {
187193
}
188194

189195
void write_data(const void *buf, size_t len) {
190-
write_raw({(uint8_t *) buf, len, 0});
196+
data_holder d;
197+
d.data = (uint8_t *)buf;
198+
d.size = len;
199+
d.position = 0;
200+
201+
202+
write_raw(d);
191203
}
192204

193205
void write_cstr(const char *buf, ssize_t len = -1) {
@@ -197,6 +209,8 @@ namespace SudoMaker::chAT {
197209
void write_str(std::string str) {
198210
data_holder dh;
199211
dh.position = 0;
212+
213+
dh.size = str.size(); // FIX ERROR
200214
dh.holder = std::move(str);
201215

202216
write_raw(dh);
@@ -216,13 +230,23 @@ namespace SudoMaker::chAT {
216230
}
217231

218232
void write_ok() {
233+
219234
static const char str[] = "OK\r\n";
220-
write_cstr(str, sizeof(str) - 1);
235+
if(!inibit_ok) {
236+
write_cstr(str, sizeof(str) - 1);
237+
}
238+
else {
239+
//write_line_end();
240+
}
241+
write_cstr("EndOfTest", sizeof("EndOfTest") - 1);
242+
write_line_end();
243+
inibit_ok = false;
221244
}
222245

223246
void write_response_prompt() {
224247
write_str(parser.command);
225-
static const char str[] = ": ";
248+
// REMOVED SPACE AFTER : at the end of command
249+
static const char str[] = ":";
226250
write_cstr(str, sizeof(str) - 1);
227251
}
228252

@@ -364,6 +388,10 @@ namespace SudoMaker::chAT {
364388
pimpl->continue_read();
365389
}
366390

391+
void Server::dontSendOk() {
392+
pimpl->dontSendOk();
393+
}
394+
367395
void Server::write_data(const void *buf, size_t len) {
368396
return pimpl->write_data(buf, len);
369397
}

0 commit comments

Comments
 (0)