/// <summary> /// Convert a serial mesage to business message. /// </summary> /// <param name="message">Serial message.</param> /// <returns>Business message.</returns> public MessageFromDto Convert(MessageDto message) { var result = new MessageFromDto {Header = message.Header}; if (message.Header == MessageHeader.StartOfFrame) { result.IsValid = ValidMessage(message.Content); if (result.IsValid && message.Content.Count > 3) { result.Type = (MessageType)message.Content[2]; result.Command = (MessageCommand)message.Content[3]; if (result.Type == MessageType.Request && message.Content.Count > 8) { result.ZIdentifier = message.Content[5]; result.RequestCommand = (RequestCommandClass) message.Content[7]; result.Content = message.Content.Skip(8).Take(message.Content[6] - 1).ToList(); } else if (message.Content.Count > 4) { result.Content = message.Content.Skip(4).Take(message.Content.Count - 5).ToList(); } } } else { result.IsValid = true; result.Type = MessageType.Response; result.Content = message.Content; } return result; }
/// <summary> /// Create message for serial port. /// </summary> /// <param name="message">Message.</param> /// <returns>Message frame.</returns> public MessageDto Convert(MessageToDto message) { var content = CreateFrame(message); var result = new MessageDto { Header = (MessageHeader)content[0], Content = content, IsComplete = true, Size = content.Count }; return result; }
/// <summary> /// Send a message. /// </summary> /// <param name="port">Port to use.</param> /// <param name="message">Message to send.</param> /// <returns>Send result.</returns> public bool Send(PortDto port, MessageDto message) { bool result; try { port.RawPort.Write(message.Content.ToArray(), 0, message.Content.Count); TraceHelper.TraceFrame(message.Content, true); result = true; } catch { result = false; } return result; }
/// <summary> /// Send an acknowledgment. /// </summary> /// <param name="messageProcess">Message processing to use.</param> private static void SendAcknowledgment(MessageProcessDto messageProcess) { Thread.Sleep(MessageConstants.WaitForRoundTimeTrip); var message = new MessageDto { Content = new List<byte> { messageProcess.MessageFrom.IsValid ? (byte) MessageHeader.Acknowledgment : (byte) MessageHeader.NotAcknowledgment } }; PortBusiness.Send(messageProcess.Controller.Port, message); }
/// <summary> /// Send a message. /// </summary> /// <param name="port">Port to use containing message.</param> /// <param name="message">Message to send.</param> /// <returns>Send result.</returns> internal static bool Send(PortDto port, MessageDto message) { bool result; using (var ctx = new PortDtoFactory()) { result = ctx.Send(port, message); } return result; }