protected override void CommandReceived(string data)
{
var cmd = data[0];
data = data.Substring(1).TrimStart(',');
string[] parts = data.Split(',');
switch (cmd)
{
case '#':
log.Info("ACK " + data);
break;
case 'X':
log.Info("Init " + data);
break;
case 'I':
// Input
if (parts.Length >= 2)
{
byte chn = byte.Parse(parts[0]);
byte val = byte.Parse(parts[1]);
log.Info("Input chn={0} val={1}", chn, val);
switch (chn)
{
case 1:
this.DigitalInputs[0].Trigger((val & 1) == 1);
break;
case 2:
this.DigitalInputs[1].Trigger((val & 1) == 1);
break;
case 3:
this.DigitalInputs[2].Trigger((val & 1) == 1);
break;
}
}
break;
case 'M':
// Motor Controller
if (parts.Length >= 2)
{
byte chn = byte.Parse(parts[0]);
int? pos;
if (parts[1] != "X")
{
if (parts[1].StartsWith("S"))
{
pos = int.Parse(parts[1].Substring(1));
log.Info("MotorController chn={0} Starting at {1}", chn, pos);
}
else if (parts[1].StartsWith("E"))
{
pos = int.Parse(parts[1].Substring(1));
log.Info("MotorController chn={0} Ends at {1}", chn, pos);
if (chn == 1)
this.Motor.Trigger(pos, pos == null);
}
else
{
pos = int.Parse(parts[1]);
log.Info("MotorController chn={0} val={1}", chn, pos);
}
}
else
{
// Motor failed
pos = null;
log.Info("MotorController chn={0} failed", chn);
if (chn == 1)
this.Motor.Trigger(pos, pos == null);
}
}
break;
default:
log.Info("Unknown data: " + data);
break;
}
}