public override DeviceCommandResponseStatus isExpectedResponse(BaseDeviceCommand response) { var rcmd = response.getCommand(); var rcmd_fistLetter = rcmd.Substring(0, 1); var cmd_firstLetter = _command.Substring(0, 1); return((new[] { "E", "R" }.Any(l => l == rcmd_fistLetter)) && (new[] { "Q", "S" }.Any(l => l == cmd_firstLetter)) ? DeviceCommandResponseStatus.Valid : DeviceCommandResponseStatus.Invalid); }
public override DeviceCommandResponseStatus isExpectedResponse(BaseDeviceCommand response) { var error = ""; var result = base.isExpectedResponse(response); if (DeviceCommandResponseStatus.Valid == result) { var rcmd = response.getCommand(); const string zz = @"^[E|Q|R|S]{1}(?<COMMANDPREFIX>[A-Z]{2}(?:[*|U]|\s|[0-9]{1}(?:$|\s)|[A-Z0-9]{2}|[SP.],))"; var matchCmd = Regex.Match(_command, zz); var matchRCmd = Regex.Match(rcmd, zz); if (matchCmd.Success && matchRCmd.Success && matchCmd.Groups["COMMANDPREFIX"].Success && matchRCmd.Groups["COMMANDPREFIX"].Success) { var cmdPrefix = matchCmd.Groups["COMMANDPREFIX"].Value; var rCmdPrefix = matchRCmd.Groups["COMMANDPREFIX"].Value; result = (cmdPrefix == rCmdPrefix || (cmdPrefix.Contains("*") && cmdPrefix == rCmdPrefix.Replace("*", " "))) ? DeviceCommandResponseStatus.Valid : DeviceCommandResponseStatus.Invalid; } else { var cmdPrefix = _command.Substring(1, 2); var rCmdPrefix = rcmd.Substring(1, 2); result = (DeviceCommandResponseStatus.Valid == result && (cmdPrefix == rCmdPrefix)) ? DeviceCommandResponseStatus.Valid : DeviceCommandResponseStatus.Invalid; if (DeviceCommandResponseStatus.Valid != result) { error += " + '" + rCmdPrefix + "' IS NOT AN EXPECTED RESPONSE FOR '" + cmdPrefix + "'"; } else if (DeviceCommandResponseStatus.Valid == result) { result = ((response.MessageId == null || response.MessageId == MessageId) && response.IdNum == IdNum) ? DeviceCommandResponseStatus.Valid : DeviceCommandResponseStatus.Invalid; if (DeviceCommandResponseStatus.Valid != result) { error += " + INVALID ID/MESSAGE ID=" + MessageId + "/" + response.MessageId + " - " + IdNum + "/" + response.IdNum; } } } if (!String.IsNullOrEmpty(error)) { STrace.Debug(typeof(VirlocDeviceCommand).FullName, IdNum ?? 0, "GTE LEVEL :" + error); } } return(result); }
public static BaseDeviceCommand createFrom(string command, INode node, DateTime?ExpiresOn) { BaseDeviceCommand cmd = null; switch (node.NodeType) { case NodeTypes.Trax: cmd = new GTEDeviceCommand(command, node, ExpiresOn); break; case NodeTypes.Virloc: cmd = new VirlocDeviceCommand(command, node, ExpiresOn); break; } if (cmd == null) { return(null); } return(cmd); }
public override DeviceCommandResponseStatus isExpectedResponse(BaseDeviceCommand response) { var error = ""; var result = base.isExpectedResponse(response); STrace.Error("GARMIN RESPONSE", IdNum ?? response.IdNum ?? 0, string.Format("MessageId: {0}, response.MessageId: {1}", MessageId, response.MessageId)); if (DeviceCommandResponseStatus.Valid == result) { var rcmd = response.getCommand(); const string zz = @"^[E|Q|R|S]{1}(?<COMMANDPREFIX>[A-Z]{2}(?:[*|U]|\s|[0-9]{1}(?:$|\s)|[A-Z0-9]{2}|[SP.],))"; var matchCmd = Regex.Match(_command, zz); var matchRCmd = Regex.Match(rcmd, zz); if (matchCmd.Success && matchRCmd.Success && matchCmd.Groups["COMMANDPREFIX"].Success && matchRCmd.Groups["COMMANDPREFIX"].Success) { var cmdPrefix = matchCmd.Groups["COMMANDPREFIX"].Value; var rCmdPrefix = matchRCmd.Groups["COMMANDPREFIX"].Value; result = (cmdPrefix == rCmdPrefix || (cmdPrefix.Contains("*") && cmdPrefix == rCmdPrefix.Replace("*", " ")) ? DeviceCommandResponseStatus.Valid: DeviceCommandResponseStatus.Invalid); if (DeviceCommandResponseStatus.Valid != result) { if (validGAPCombinations.ContainsKey(cmdPrefix)) { result = validGAPCombinations[cmdPrefix] == rCmdPrefix ? DeviceCommandResponseStatus.Valid : DeviceCommandResponseStatus.Invalid; } } } else { var cmdPrefix = _command.Substring(1, 2); var rCmdPrefix = rcmd.Substring(1, 2); result = (result == DeviceCommandResponseStatus.Valid && (cmdPrefix == rCmdPrefix)) ? DeviceCommandResponseStatus.Valid : DeviceCommandResponseStatus.Invalid; if (result != DeviceCommandResponseStatus.Valid) { error += " + '" + rCmdPrefix + "' IS NOT AN EXPECTED RESPONSE FOR '" + cmdPrefix + "'"; } if (result == DeviceCommandResponseStatus.Valid) { result = ((response.MessageId == null || response.MessageId == MessageId) && response.IdNum == IdNum) ? DeviceCommandResponseStatus.Valid : DeviceCommandResponseStatus.Invalid; if (result != DeviceCommandResponseStatus.Valid) { error += " + INVALID ID/MESSAGE ID=" + MessageId + "/" + response.MessageId + " - " + IdNum + "/" + response.IdNum; error += Environment.NewLine + String.Format("=>{0}{1}=>{2}", getCommand(), "/", response.getCommand()); } } } if (!String.IsNullOrEmpty(error)) { STrace.Debug(typeof(GTEDeviceCommand).FullName, IdNum ?? response.IdNum ?? 0, "GTE LEVEL :" + error); } error = ""; if (DeviceCommandResponseStatus.Valid == result) { var gCommand = ">" + _command + ";ID=" + String.Format("{0:0000}", IdNum) + (MessageId != null ? ";#" + String.Format("{0:X4}", MessageId.Value) : "") + "<"; var gDC = GarminCommand.createFrom(gCommand); if (gDC.Success) // Success Parsing Garmin Command // its a Garmin Command { var grDC = GarminCommand.createFrom(response.ToString(true)); if (grDC.Success) { result = gDC.IsValidResponse(grDC); if (result == DeviceCommandResponseStatus.Invalid && !grDC.isAcknowledge) { error += " + '" + response + "' WAS NOT AN EXPECTING RESPONSE"; } } if (!String.IsNullOrEmpty(error)) { STrace.Debug(typeof(GTEDeviceCommand).FullName, IdNum ?? response.IdNum ?? 0, "GARMIN LEVEL:" + error); } else { // STrace.Debug(typeof(GTEDeviceCommand).FullName, IdNum ?? response.IdNum ?? 0, "GARMIN LEVEL: + EXPECTED RESPONSE"); //result = DeviceCommandResponseStatus.Valid; } } else { // STrace.Debug(typeof(GTEDeviceCommand).FullName, IdNum ?? response.IdNum ?? 0, "GTE LEVEL : + EXPECTED RESPONSE"); } } } // STrace.Debug(typeof (GTEDeviceCommand).FullName, IdNum??response.IdNum??0, String.Format("- GET GARMIN RESPONSE {0} -", result)); return(result); }
public abstract DeviceCommandResponseStatus isExpectedResponse(BaseDeviceCommand response);