public void Parse(CanMessage canMessage) { J1708Message j1708Message = (canMessage as J1708Message); foreach (CanMessageSegment segment in canMessage.CanMessageSegments) { if (J1708ParseMethodMap.ContainsKey(segment.Pid)) { J1708ParseMethodMap[segment.Pid].ParseMethod(segment, J1708ParseMethodMap[segment.Pid]); } else { CreateUnsupportedResponse(segment); } } }
/// <summary> /// Istantiates a J1708 can message from the raw message. The J1708 Can Message handles it's own /// raw value extraction, which is then passed onto the J1708Parser to get standard and metric values /// </summary> /// <param name="rawMessage"></param> /// <param name="e"></param> private void ProcessJ1708Data(string rawMessage, VMSCommDataEventArgs e) { try { var canMessage = new J1708Message(rawMessage, e.timeStamp); if (canMessage.IsValidMessage()) { canMessage.ExtractMessage(); _J1708Parser.Parse(canMessage); PublishNewDataEvent(canMessage); } else { } } catch (Exception ex) { //Todo - trim this down to only invoke CommDataErrorEvent on specific exceptions (ie, from CanMesssage or parser) RaiseVMSEvent?.Invoke(this, new VMSCommDataErrorEventArgs(e, MessageError.UnrecognizedMessage, ex)); ErrorLogger.GenerateErrorRecord(ex); } }