/// <summary> /// Send sync Bridge Command /// </summary> /// <param name="channel">Channel to send command (Intel ME = 6)</param> /// <param name="slaveId">Channel Slave Id</param> /// /// <param name="trackRequest">Trace Message</param> /// <param name="messageData">Message payload</param> public virtual SendNodeMangerMessage SendNodeManagerRequest(byte channel, byte slaveId, bool trackRequest, NodeManagerRequest requestMessage, Type responseMessage) { byte rqSeq = NodeManagerRqSeq(); byte[] nodeManagerMessage = requestMessage.GetNodeManagerBytes(slaveId, rqSeq, trackRequest); SendMessageResponse msgResponse = (SendMessageResponse)this.IpmiSendReceive( new SendMessageRequest(channel, trackRequest, nodeManagerMessage), typeof(SendMessageResponse)); SendNodeMangerMessage response = new SendNodeMangerMessage(msgResponse.CompletionCode); if (response.CompletionCode == 0x00) { // Create the response based on the provided type. ConstructorInfo constructorInfo = responseMessage.GetConstructor(Type.EmptyTypes); NodeManagerResponse nodeManagerResponse = (NodeManagerResponse)constructorInfo.Invoke(new Object[0]); // set the message data. response.MessageData = msgResponse.MessageData; try { nodeManagerResponse.InitializeNodeManager(msgResponse.MessageData, msgResponse.MessageData.Length, rqSeq); response.Response = nodeManagerResponse; } catch (Exception ex) { IpmiSharedFunc.WriteTrace(string.Format("Send Message error converting payload. Exception occured converting packet: {0}", ex)); // set an exception code for invalid data in ipmi data field, as the packet could nodeManagerResponse.CompletionCode = 0xD6; // IpmiCmdFailedIllegalParameter } } return(response); }
/// <summary> /// Send sync Bridge Command /// </summary> /// <param name="channel">Channel to send command (Intel ME = 6)</param> /// <param name="slaveId">Channel Slave Id</param> /// <param name="messageData">Message payload</param> public static SendNodeMangerMessage SendNodeManagerRequest(byte deviceId, byte channel, byte slaveId, NodeManagerRequest requestMessage) { if (clients.ContainsKey(deviceId)) { return(clients[deviceId].SendNodeManagerRequest <NodeManagerResponse>(channel, slaveId, requestMessage)); } else { return(new SendNodeMangerMessage((byte)CompletionCode.InvalidDevice)); } }
/// <summary> /// Send sync Bridge Command /// </summary> /// <param name="channel">Channel to send command (Intel ME = 6)</param> /// <param name="slaveId">Channel Slave Id</param> /// <param name="messageData">Message payload</param> public virtual SendNodeMangerMessage SendNodeManagerRequest <T>(byte channel, byte slaveId, NodeManagerRequest requestMessage) where T : NodeManagerResponse { return(SendNodeManagerRequest(channel, slaveId, true, requestMessage, typeof(T))); }