Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }