public string doCommand(ICommsSerial comPort, string cmd, bool multiLineResponce = false, int level = 0)
{
if (!comPort.IsOpen)
return "";
comPort.DiscardInBuffer();
lbl_status.Text = "Doing Command " + cmd;
log.Info("Doing Command " + cmd);
comPort.Write(cmd + "\r\n");
comPort.ReadTimeout = 1000;
// command echo
var cmdecho = Serial_ReadLine(comPort);
if (cmdecho.Contains(cmd))
{
var value = "";
if (multiLineResponce)
{
var deadline = DateTime.Now.AddMilliseconds(1000);
while (comPort.BytesToRead > 0 || DateTime.Now < deadline)
{
try
{
value = value + Serial_ReadLine(comPort);
}
catch
{
value = value + comPort.ReadExisting();
}
}
}
else
{
value = Serial_ReadLine(comPort);
if (value == "" && level == 0)
{
return doCommand(comPort, cmd, multiLineResponce, 1);
}
}
log.Info(value.Replace('\0', ' '));
return value;
}
comPort.DiscardInBuffer();
// try again
if (level == 0)
return doCommand(comPort, cmd, multiLineResponce, 1);
return "";
}