Skip to content
Snippets Groups Projects

reworking

Merged David Gauchard requested to merge reworking into master
13 files
+ 349
274
Compare changes
  • Side-by-side
  • Inline
Files
13
+ 63
68
@@ -61,16 +61,19 @@ void Cli::copyNextToTemp()
_temp.clear();
}
bool Cli::kw(const __FlashStringHelper* keyWord, const char* input)
bool Cli::kw(const __FlashStringHelper* keyWord, const char* input, bool name2cli)
{
// return true if input matches keyWord
auto len = strlen_P((PGM_P)keyWord);
return len && strncasecmp_P((PGM_P)keyWord, input, len) == 0;
bool ret = (len && (strncasecmp_P((PGM_P)keyWord, input, len) == 0));
if (ret && name2cli)
syringe_filled.set_name_syringe("cli");
return ret;
}
bool Cli::kw(const __FlashStringHelper* keyWord)
bool Cli::kw(const __FlashStringHelper* keyWord, bool name2cli)
{
return kw(keyWord, _currentInput.c_str() + _currentWordIndex);
return kw(keyWord, _currentInput.c_str() + _currentWordIndex, name2cli);
}
void Cli::syntax(const __FlashStringHelper* cmd)
@@ -134,19 +137,24 @@ void Cli::syntax(const char* cmd)
if (!cmd || kw(F("FS-CAT"), cmd))
Serial.printf("%sFS-CAT - print a file\n", _msgHeader);
if (!cmd || kw(F("FS-SAVE"), cmd))
Serial.printf("%sFS-SAVE - save the files\n", _msgHeader);
Serial.printf("%sFS-SAVE - save configuration files\n", _msgHeader);
if (!cmd || kw(F("FS-LOAD"), cmd))
Serial.printf("%sFS-LOAD - load the files\n", _msgHeader);
Serial.printf("%sFS-LOAD - load configuration files\n", _msgHeader);
if (!cmd || kw(F("FS-RM"), cmd))
Serial.printf("%sFS-RM <file name> - remove file\n", _msgHeader);
if (!cmd || kw(F("ENABLE-EMERGENCY"), cmd))
Serial.printf("%sENABLE-EMERGENCY [0 | 1] - enable emergency sensor\n", _msgHeader);
if (!cmd || kw(F("JSON"), cmd))
Serial.printf("%sJSON - show json structures\n", _msgHeader);
}
void Cli::answer(bool ok, const String& error_message) const
bool Cli::answer(bool ok, const String& error_message) const
{
Serial.printf("%s%s", _msgHeader, ok ? "OK" : "ERROR");
if (!ok && error_message.length())
Serial.printf(" (%s)", error_message.c_str());
Serial.printf("\n");
return ok;
}
void Cli::check_emergency()
@@ -188,8 +196,6 @@ void Cli::loop(Stream& input)
else if (kw(F("RAT"))) //*******************RATE*******************//
{
syringe_filled.set_name_syringe("cli");
copyNextToTemp();
if (_temp.equalsIgnoreCase(F("C")))
{
@@ -226,7 +232,6 @@ void Cli::loop(Stream& input)
}
else if (kw(F("VOL"))) //*******************EXCHANGE_VOLUME*******************//
{
syringe_filled.set_name_syringe("cli");
float value = -1;
copyNextToTemp();
while (_temp.length())
@@ -235,10 +240,8 @@ void Cli::loop(Stream& input)
{
value = syringe_filled.distance_mm_to_volume_mL(
syringe_filled.step_to_mm(syringe_filled.where_step()))
+ (syringe_filled.get_push() ? stof(_temp.c_str())
: -stof(_temp.c_str()));
+ ((syringe_filled.get_push() ? 1 : -1) * atof(_temp.c_str()));
syringe_filled.set_exchange_volume_mL(value);
syringe_filled.save_json();
}
else if (_temp.equalsIgnoreCase(F("ul")))
;
@@ -254,8 +257,9 @@ void Cli::loop(Stream& input)
else if (_temp.equalsIgnoreCase(F("l")))
syringe_filled.set_exchange_volume_mL(syringe_filled.get_exchange_volume_mL()
* 1000000);
syringe_filled.save_json();
answer(syringe_filled.check_configuration(), F("invalid volume or volume unit"));
if (answer(syringe_filled.check_configuration(),
F("invalid volume or volume unit")))
syringe_filled.save_json();
copyNextToTemp();
}
@@ -264,8 +268,6 @@ void Cli::loop(Stream& input)
}
else if (kw(F("RVOL"))) //*******************RELATIVE_EXCHANGE_VOLUME*******************//
{
syringe_filled.set_name_syringe("cli");
syringe_filled.reset_position();
copyNextToTemp();
while (_temp.length())
@@ -273,9 +275,9 @@ void Cli::loop(Stream& input)
if (isdigit(_temp[0]) || _temp[0] == '-')
{
syringe_filled.set_exchange_volume_mL(atof(_temp.c_str()));
syringe_filled.save_json();
}
answer(syringe_filled.check_configuration(), F("invalid exchange volume"));
if (answer(syringe_filled.check_configuration(), F("invalid exchange volume")))
syringe_filled.save_json();
copyNextToTemp();
}
@@ -285,60 +287,52 @@ void Cli::loop(Stream& input)
else if (kw(F("MM"))) //*******************Distance*******************//
{
syringe_filled.set_name_syringe("cli");
copyNextToTemp();
if (_temp.length())
{
if (isdigit(_temp[0]) || _temp[0] == '-')
{
syringe_filled.set_exchange_volume_mL(
syringe_filled.distance_mm_to_volume_mL(atof(_temp.c_str())));
answer(syringe_filled.check_configuration(), F("invalid length"));
copyNextToTemp();
}
if (answer(syringe_filled.check_configuration(), F("invalid length")))
syringe_filled.save_json();
}
syringe_filled.save_json();
Serial.printf(
"%sRMM: %g ml (%g mm) (target)\n", _msgHeader,
"%sMM: %g ml (%g mm) (target)\n", _msgHeader,
syringe_filled.get_exchange_volume_mL(),
syringe_filled.volume_mL_to_distance_mm(syringe_filled.get_exchange_volume_mL()));
}
else if (kw(F("RMM"))) //*******************RELATIVE_DISTANCE*******************//
{
syringe_filled.set_name_syringe("cli");
float value2 = -1;
float absolute_mm = -1;
copyNextToTemp();
if (_temp.length())
{
if (isdigit(_temp[0]) || _temp[0] == '-')
value2 = (syringe_filled.step_to_mm(syringe_filled.where_step()))
+ (syringe_filled.get_push() ? stof(_temp.c_str())
: -stof(_temp.c_str()));
answer(syringe_filled.check_configuration(), F("invalid exchange length"));
copyNextToTemp();
absolute_mm = syringe_filled.step_to_mm(syringe_filled.where_step())
+ ((syringe_filled.get_push() ? 1 : -1) * atof(_temp.c_str()));
if (answer(syringe_filled.check_configuration(), F("invalid exchange length")))
syringe_filled.save_json();
}
syringe_filled.save_json();
Serial.printf("%sMM: %g ml (%g mm) (target)\n", _msgHeader,
syringe_filled.distance_mm_to_volume_mL(value2), value2);
Serial.printf("%sRMM: %g ml (%g mm) (target)\n", _msgHeader,
syringe_filled.distance_mm_to_volume_mL(absolute_mm), absolute_mm);
}
else if (kw(F("DIA"))) //*******************INTERNAL_DIAMETER*******************//*
{
syringe_filled.set_name_syringe("cli");
copyNextToTemp();
if (_temp.length())
{
syringe.set_internal_diameter_mm("cli", atof(_temp.c_str()));
syringe.save_json();
answer(syringe_filled.check_configuration(), F("invalid diameter"));
if (answer(syringe_filled.check_configuration(), F("invalid diameter")))
syringe.save_json();
}
Serial.printf("%sDIA: %g mm\n", _msgHeader, syringe.get_internal_diameter_mm("cli"));
}
else if (kw(F("RVM")))
{
//syringe_filled.set_name_syringe("cli");
copyNextToTemp();
if (_temp == F("M4"))
{
@@ -357,8 +351,6 @@ void Cli::loop(Stream& input)
}
else if (kw(F("ACC"))) //*******************ACCELERATION*******************//
{
syringe_filled.set_name_syringe("cli");
copyNextToTemp();
if (_temp.length())
syringe_filled.set_retain_acceleration_mm_per_sec_per_sec(atof(_temp.c_str()));
@@ -367,8 +359,6 @@ void Cli::loop(Stream& input)
}
else if (kw(F("DIR"))) //*******************DIRECTION*******************//
{
syringe_filled.set_name_syringe("cli");
copyNextToTemp();
if (_temp.length())
{
@@ -389,30 +379,22 @@ void Cli::loop(Stream& input)
}
else if (kw(F("FIL"))) //*******************MOUVEMENT*******************//
{
syringe_filled.set_name_syringe("cli");
check_emergency();
syringe_filled.start_exchange();
answer(true);
}
else if (kw(F("STP")))
{
syringe_filled.set_name_syringe("cli");
syringe_filled.stop();
syringe_filled.stay_here();
answer(true);
}
else if (kw(F("SET0")))
{
syringe_filled.set_name_syringe("cli");
syringe_filled.reset_position();
answer(true);
}
else if (kw(F("DIS"))) //*******************DISTANCE_PARCOURU*******************//
{
syringe_filled.set_name_syringe("cli");
Serial.printf("%sDIS: I %g W %g UL\n", _msgHeader,
syringe_filled.get_push() ? syringe_filled.distance_mm_to_volume_mL(
syringe_filled.step_to_mm(syringe_filled.where_step()))
@@ -424,23 +406,17 @@ void Cli::loop(Stream& input)
}
else if (kw(F("ZERO"))) //*******************ZERO*******************//
{
syringe_filled.set_name_syringe("cli");
check_emergency();
syringe_filled.go_to_limit_switch();
syringe_filled.advance();
answer(true);
}
else if (kw(F("NLCK"))) //*******************RUN_FROM_EMERGENCY*******************//
{
syringe_filled.set_name_syringe("cli");
syringe_filled.run_from_emergency();
answer(true);
}
else if (kw(F("CLKW"))) //*******************CLOCKWISE_EQUALS_PUSH*******************//
{
syringe_filled.set_name_syringe("cli");
copyNextToTemp();
if (_temp.length() == 1)
{
@@ -458,17 +434,22 @@ void Cli::loop(Stream& input)
}
else if (kw(F("CONF"))) //*******************SHOW_CONFIGURATION*******************//
{
syringe_filled.set_name_syringe("cli");
syringe_filled.show_configuration();
answer(true);
}
else if (kw(F("FS-LS"))) //*******************SHOW_ALL_THE_FILES*******************//
else if (kw(F("JSON"))) //*******************SHOW_CONFIGURATION*******************//
{
syringe.show_json();
syringe_filled.show_json();
answer(true);
}
else if (kw(F("FS-LS"),
false)) //*******************SHOW_ALL_THE_FILES*******************//
{
ls(&Serial);
answer(true);
}
else if (kw(F("FS-CAT"))) //*******************PRINT_A_FILE*******************//
else if (kw(F("FS-CAT"), false)) //*******************PRINT_A_FILE*******************//
{
copyNextToTemp();
if (_temp.length() > 0)
@@ -479,21 +460,35 @@ void Cli::loop(Stream& input)
else
answer(false);
}
else if (kw(F("FS-SAVE"))) //*******************SAVE_THE_JSON_FILES*******************//
else if (kw(F("FS-SAVE"),
false)) //*******************SAVE_THE_JSON_FILES*******************//
{
syringe.save_json();
syringe_filled.save_json();
answer(true);
}
else if (kw(F("FS-LOAD"))) //*******************LOAD_THE_JSON_FILES*******************//
else if (kw(F("FS-LOAD"),
false)) //*******************LOAD_THE_JSON_FILES*******************//
{
syringe.load_json();
syringe_filled.load_json();
answer(true);
}
else if (kw(F("ENABLE-EMERGENCY")))
else if (kw(F("FS-RM"), false))
{
//******************* remove file *******************//
copyNextToTemp();
if (_temp.length() > 0)
{
rm(_temp.c_str(), &Serial);
answer(true);
}
else
answer(false, F("file name needed"));
}
else if (kw(F("ENABLE-EMERGENCY"), false))
{
//*******************Disable Emergency Sensor*******************//
copyNextToTemp();
Loading