Big changes

This commit is contained in:
Duc
2025-03-13 12:04:22 -07:00
parent c689fcb7f9
commit ffa9905494
748 changed files with 199255 additions and 3743 deletions

View File

@@ -0,0 +1,227 @@
// UNCLASSIFIED
/*-------------------------------------------------------------------------
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
COMPANY.
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
GOVERNMENT.
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
-------------------------------------------------------------------------*/
using System;
namespace FpgaMeasurementInstrumentsLib
{
/// <summary>
/// An abstract base class for FPGACmdMessages that go between the client and server
/// </summary>
internal abstract class FPGACmdMessage : ICloneable
{
#region PublicClassMembers
public enum Page
{
PAGE0,
PAGE1,
PAGE2,
PAGE3
}
#endregion
#region PrivateClassMembers
private readonly string m_description;
protected FPGACmdMessageHeader m_header;
protected static void SwapWord(ref byte[] input)
{
//Word Size
int WORD_SIZE = 4;
for (int i = 0; i < input.Length; i = i + WORD_SIZE)
{
//Temp array for swap
byte[] temp = new byte[WORD_SIZE];
//Copy a word into temp
Buffer.BlockCopy(input, i, temp, 0, WORD_SIZE);
//Swap bytes
Array.Reverse(temp);
//Replace word
Buffer.BlockCopy(temp, 0, input, i, WORD_SIZE);
}
}
#endregion
#region PrivateFuctions
/// <summary>
/// A command message constructor for all children to invoke
/// </summary>
/// <param name="commandType">The command message id</param>
/// <param name="page">The page of the command message</param>
/// <param name="description">The description of the command message</param>
protected FPGACmdMessage(FPGACmdMsgIds commandType, Page page, string description)
{
try
{
m_description = description;
m_header = new FPGACmdMessageHeader(commandType, page);
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Copy Constructor
/// </summary>
/// <param name="FPGACmdMessage">The FPGACmdMessage to copy from</param>
protected FPGACmdMessage(FPGACmdMessage FPGACmdMessage)
{
try
{
m_header = new FPGACmdMessageHeader(FPGACmdMessage.m_header);
m_description = FPGACmdMessage.m_description;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// A clone function for the children to implement
/// </summary>
/// <returns>a clone of the child object</returns>
protected abstract object CloneSelf();
/// <summary>
/// A function to encode outgoing data
/// </summary>
/// <param name="pData">a pointer to the encoded data</param>
protected abstract void FormatData(IntPtr pData);
/// <summary>
///
/// </summary>
/// <returns></returns>
protected abstract int GetPayloadSize();
/// <summary>
/// a function to decode incoming data
/// </summary>
/// <param name="pData">A pointer to data to populate this object with</param>
protected abstract void ParseData(IntPtr pData);
#endregion
#region PublicFuctions
/// <summary>
/// Get a copy of the FPGACmdMessage object
/// </summary>
/// <returns>A clone of this object</returns>
public object Clone()
{
// tell the child to clone itself
return this.CloneSelf();
}
/// <summary>
/// Encode the FPGACmdMessage into a byte array for sending
/// </summary>
/// <param name="pData">The buffer to put the FPGACmdMessage items</param>
public void Format(IntPtr pData)
{
try
{
m_header.Format(pData);
IntPtr pPayload = IntPtr.Add(pData, (int)GetHeaderLength());
// ask child class to format its data
FormatData(pPayload);
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Getter for the description
/// </summary>
/// <returns>The description</returns>
public string GetDescription()
{
return m_description;
}
/// <summary>
/// getter for the message id
/// </summary>
/// <returns>The id</returns>
public FPGACmdMsgIds GetMessageId()
{
return m_header.GetMessageId();
}
/// <summary>
/// getter for the header length
/// </summary>
/// <returns>The number of bytes in the header</returns>
public uint GetHeaderLength()
{
return m_header.GetHeaderLength();
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public uint GetEntireMsgLength()
{
return m_header.GetHeaderLength() + (uint)GetPayloadSize();
}
/// <summary>
/// Takes an array of bytes and populates the FPGACmdMessage object
/// </summary>
/// <param name="pData">The FPGACmdMessage in byte form</param>
public void Parse(IntPtr pData)
{
try
{
m_header.Parse(pData);
IntPtr pPayLoad = IntPtr.Add(pData, (int)GetHeaderLength());
ParseData(pPayLoad);
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Convert this FPGACmdMessage into string form
/// </summary>
/// <returns>The FPGACmdMessage in string form</returns>
public override string ToString()
{
string desc = "Description: " + GetDescription() + "\n" + m_header.ToString();
return desc;
}
#endregion
}
}

View File

@@ -0,0 +1,154 @@
// UNCLASSIFIED
/*-------------------------------------------------------------------------
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
COMPANY.
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
GOVERNMENT.
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
-------------------------------------------------------------------------*/
using System;
using System.Runtime.InteropServices;
namespace FpgaMeasurementInstrumentsLib
{
/// <summary>
/// The header for all command messages
/// </summary>
internal class FPGACmdMessageHeader
{
#region PrivateClassMembers
private const int m_HEADER_SIZE = 1;
private byte m_headerCmd;
#endregion
#region PublicFunctions
/// <summary>
/// Copy constructor
/// </summary>
/// <param name="header">The header to copy</param>
public FPGACmdMessageHeader(FPGACmdMessageHeader header)
{
try
{
m_headerCmd = header.m_headerCmd;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Constructor for when receiving data.
/// Use this constructor and then parse to populate it
/// </summary>
public FPGACmdMessageHeader()
{
try
{
m_headerCmd = 0;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Constructor for sending
/// </summary>
/// <param name="commandType">the type of the message</param>
/// <param name="page">The page to read or write to</param>
public FPGACmdMessageHeader(FPGACmdMsgIds commandType, FPGACmdMessage.Page page)
{
try
{
m_headerCmd = (byte)((byte)commandType | (byte)page);
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Encode the header into a byte array for sending
/// </summary>
/// <param name="pData">The buffer to put the message items</param>
public void Format(IntPtr pData)
{
try
{
Marshal.StructureToPtr(m_headerCmd, pData, true);
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// getter for the number of bytes in the header
/// </summary>
/// <returns>The header length in bytes</returns>
public uint GetHeaderLength()
{
try
{
return m_HEADER_SIZE;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// getter for the message id
/// </summary>
/// <returns>The message id</returns>
public FPGACmdMsgIds GetMessageId()
{
byte temp = (byte)(m_headerCmd >> 4);
return (FPGACmdMsgIds)temp;
}
/// <summary>
/// Takes an array of bytes and populates the header object
/// </summary>
/// <param name="pData">The header in byte form</param>
public void Parse(IntPtr pData)
{
try
{
m_headerCmd = System.Runtime.InteropServices.Marshal.ReadByte(pData, 0);
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Creates a string version of the header members
/// </summary>
/// <returns>A string containning the header data</returns>
public override string ToString()
{
string msg = "Header Data:\r\n";
msg += "Command: " + m_headerCmd.ToString("X") + "\r\n";
return msg;
}
#endregion
}
}

View File

@@ -0,0 +1,42 @@
// UNCLASSIFIED
/*-------------------------------------------------------------------------
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
COMPANY.
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
GOVERNMENT.
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
-------------------------------------------------------------------------*/
namespace FpgaMeasurementInstrumentsLib
{
#region PublicClassMembers
/// <summary>
/// The command message IDs for messages that go between the host pc and the fpga
/// </summary>
internal enum FPGACmdMsgIds
{
TYPE_TWO_READ_CMD_ID = 0x40,
TYPE_TWO_WRITE_CMD_ID = 0xC0,
TYPE_THREE_READ_CMD_ID = 0x58,
TYPE_THREE_WRITE_CMD_ID = 0xD8
};
/// <summary>
/// The command message IDs for messages that go between the host pc and the fpga
/// </summary>
internal enum FPGARspMsgIds
{
TYPE_TWO_READ_RSP_ID = 0xC0,
TYPE_TWO_WRITE_RSP_ID = 0xAA,
TYPE_THREE_WRITE_RSP_ID = 0x0
};
#endregion
}

View File

@@ -0,0 +1,177 @@
// UNCLASSIFIED
/*-------------------------------------------------------------------------
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
COMPANY.
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
GOVERNMENT.
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
-------------------------------------------------------------------------*/
using System;
using System.Runtime.InteropServices;
using Raytheon.Common;
namespace FpgaMeasurementInstrumentsLib
{
/// <summary>
/// A message to read a register of the FPGA
/// </summary>
internal class FPGAReadRegisterCmdBlockIncrMessage : FPGACmdMessage
{
#region PrivateClassMembers
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct Data
{
public uint m_address;
};
private Data m_dataStruct;
//Dummy Array used to identify how much data will be sent back
private byte[] m_data;
private bool m_byteSwap;
#endregion
#region PrivateFunctions
/// <summary>
/// Create a copy of this object
/// </summary>
/// <returns>A copy of this object</returns>
protected override object CloneSelf()
{
FPGAReadRegisterCmdBlockIncrMessage msg = new FPGAReadRegisterCmdBlockIncrMessage(this);
return msg;
}
/// <summary>
/// Encode the message into a byte array for sending.
/// </summary>
/// <param name="pData">The buffer to put the message items</param>
protected override void FormatData(IntPtr pData)
{
try
{
// perform byte swapping and copy data into the buffer
Data dataTemp = m_dataStruct;
//Swap address bytes
dataTemp.m_address = Util.Swap(dataTemp.m_address);
//Create a pointer to message we want to send
Marshal.StructureToPtr(dataTemp, pData, true);
//Increment pointer to account for the m_dataStruct struct
pData = IntPtr.Add(pData, Marshal.SizeOf(typeof(Data)));
//Copy array into pointer
Marshal.Copy(m_data, 0, pData, m_data.Length);
}
catch (Exception)
{
throw;
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
protected override int GetPayloadSize()
{
return Marshal.SizeOf(m_dataStruct) + m_data.Length;
}
/// <summary>
/// Takes an array of bytes and populates the message object
/// </summary>
/// <param name="pData">The message in byte form</param>
protected override void ParseData(IntPtr pData)
{
try
{
// copy data into our structure
m_dataStruct = (Data)(Marshal.PtrToStructure(pData, typeof(Data)));
//Increment point address to end of structure
pData = IntPtr.Add(pData, Marshal.SizeOf(typeof(Data)));
//Copy data from pointer to array
Marshal.Copy(pData, m_data, 0, m_data.Length);
//swap address
m_dataStruct.m_address = Util.Swap(m_dataStruct.m_address);
}
catch (Exception)
{
throw;
}
}
#endregion
#region PublicFunctions
/// <summary>
/// Copy constructor
/// </summary>
/// <param name="rhs">The object to copy</param>
public FPGAReadRegisterCmdBlockIncrMessage(FPGAReadRegisterCmdBlockIncrMessage rhs)
: base(rhs)
{
try
{
m_dataStruct = rhs.m_dataStruct;
m_byteSwap = rhs.m_byteSwap;
m_data = rhs.m_data;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// The constructor for sending
/// </summary>
/// <param name="page">The page to read from</param>
/// <param name="address">The address to read</param>
public FPGAReadRegisterCmdBlockIncrMessage(Page page, uint address, uint numWords, bool swapDataBytes)
: base(FPGACmdMsgIds.TYPE_THREE_READ_CMD_ID, page, "Read Register Command")
{
try
{
m_dataStruct.m_address = address;
m_byteSwap = swapDataBytes;
//Create an empty array the size of numWords
m_data = new byte[numWords * sizeof(uint)];
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Convert this object into string form
/// </summary>
/// <returns>A string representing this message</returns>
public override String ToString()
{
string msg = base.ToString();
msg += " address: " + m_dataStruct.m_address.ToString() + "\r\n\r\n";
return msg;
}
#endregion
}
}

View File

@@ -0,0 +1,149 @@
// UNCLASSIFIED
/*-------------------------------------------------------------------------
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
COMPANY.
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
GOVERNMENT.
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
-------------------------------------------------------------------------*/
using Raytheon.Common;
using System;
using System.Runtime.InteropServices;
namespace FpgaMeasurementInstrumentsLib
{
/// <summary>
/// A message to read a register of the FPGA
/// </summary>
internal class FPGAReadRegisterCmdMessage : FPGACmdMessage
{
#region PrivateClassMembers
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct Data
{
public uint m_address;
public uint m_spare;
};
private Data m_dataStruct;
#endregion
#region PrivateFunctions
/// <summary>
/// Create a copy of this object
/// </summary>
/// <returns>A copy of this object</returns>
protected override object CloneSelf()
{
FPGAReadRegisterCmdMessage msg = new FPGAReadRegisterCmdMessage(this);
return msg;
}
/// <summary>
/// Encode the message into a byte array for sending.
/// </summary>
/// <param name="pData">The buffer to put the message items</param>
protected override void FormatData(IntPtr pData)
{
try
{
// perform byte swapping and copy data into the buffer
Data dataTemp = m_dataStruct;
dataTemp.m_address = Util.Swap(dataTemp.m_address);
Marshal.StructureToPtr(dataTemp, pData, true);
}
catch (Exception)
{
throw;
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
protected override int GetPayloadSize()
{
return Marshal.SizeOf(m_dataStruct);
}
/// <summary>
/// Takes an array of bytes and populates the message object
/// </summary>
/// <param name="pData">The message in byte form</param>
protected override void ParseData(IntPtr pData)
{
try
{
// copy data into our structure and byte swap
m_dataStruct = (Data)(Marshal.PtrToStructure(pData, typeof(Data)));
m_dataStruct.m_address = Util.Swap(m_dataStruct.m_address);
}
catch (Exception)
{
throw;
}
}
#endregion
#region PublicFunctions
/// <summary>
/// Copy constructor
/// </summary>
/// <param name="rhs">The object to copy</param>
public FPGAReadRegisterCmdMessage(FPGAReadRegisterCmdMessage rhs)
: base(rhs)
{
try
{
m_dataStruct = rhs.m_dataStruct;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// The constructor for sending
/// </summary>
/// <param name="page">The page to read from</param>
/// <param name="address">The address to read</param>
public FPGAReadRegisterCmdMessage(Page page, uint address)
: base(FPGACmdMsgIds.TYPE_TWO_READ_CMD_ID, page, "Read Register Command")
{
try
{
m_dataStruct.m_address = address;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Convert this object into string form
/// </summary>
/// <returns>A string representing this message</returns>
public override String ToString()
{
string msg = base.ToString();
msg += " address: " + m_dataStruct.m_address.ToString("X8") + "\r\n\r\n";
return msg;
}
#endregion
}
}

View File

@@ -0,0 +1,188 @@
// UNCLASSIFIED
/*-------------------------------------------------------------------------
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
COMPANY.
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
GOVERNMENT.
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
-------------------------------------------------------------------------*/
using System;
using System.Runtime.InteropServices;
using Raytheon.Common;
namespace FpgaMeasurementInstrumentsLib
{
/// <summary>
/// The response message for the FPGAReadRegisterCmdMessage
/// </summary>
internal class FPGAReadRegisterBlockIncrRspMessage : FPGARspMessage
{
#region PrivateClassMembers
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct Data
{
public uint m_address;
public uint m_data;
};
//array for all received data (address/data)
private Data[] m_dataArray;
//Array(ref) for received data (data only)
private uint[] m_refArray;
#endregion
#region PrivateFunctions
/// <summary>
/// Create a copy of this object
/// </summary>
/// <returns>A copy of this object</returns>
protected override object CloneSelf()
{
FPGAReadRegisterBlockIncrRspMessage msg = new FPGAReadRegisterBlockIncrRspMessage(this);
return msg;
}
/// <summary>
/// Encode the message into a byte array for sending.
/// </summary>
/// <param name="pData">The buffer to put the message items</param>
protected override void FormatData(IntPtr pData)
{
//From base class. Data does not need to be formatted (will not be sent out)
}
/// <summary>
///
/// </summary>
/// <returns></returns>
protected override int GetPayloadSize()
{
//Size of Data (address and data) * number of elements
return Marshal.SizeOf(typeof(Data)) * m_dataArray.Length;
}
/// <summary>
/// Takes an array of bytes and populates the message object
/// </summary>
/// <param name="pData">The message in byte form</param>
protected override void ParseData(IntPtr pData)
{
try
{
for (int i = 0; i < m_dataArray.Length; i++)
{
//Copy data into the structure
m_dataArray[i] = (Data)(Marshal.PtrToStructure(pData, typeof(Data)));
//Increment pointer
pData = IntPtr.Add(pData, Marshal.SizeOf(typeof(Data)));
//Swap Address
m_dataArray[i].m_address = Util.Swap(m_dataArray[i].m_address);
//Swap Data
m_dataArray[i].m_data = Util.Swap(m_dataArray[i].m_data);
//Move data into referenced array
m_refArray[i] = m_dataArray[i].m_data;
}
}
catch (Exception)
{
throw;
}
}
#endregion
#region PublicFunctions
/// <summary>
/// Copy constructor
/// </summary>
/// <param name="rhs">The object to copy</param>
public FPGAReadRegisterBlockIncrRspMessage(FPGAReadRegisterBlockIncrRspMessage rhs)
: base(rhs)
{
try
{
m_dataArray = rhs.m_dataArray;
m_refArray = rhs.m_refArray;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// The constructor
/// </summary>
/// <param name="address">The address that was read from from</param>
/// <param name="data">The data that was read</param>
public FPGAReadRegisterBlockIncrRspMessage(uint address, ref uint[] data)
: base(FPGARspMsgIds.TYPE_TWO_READ_RSP_ID, "Read Register Response Message")
{
try
{
m_dataArray = new Data[data.Length];
m_refArray = data;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// getter for the address
/// </summary>
/// <returns>TThe address</returns>
public override uint GetAddress()
{
//Array of data. This function would need to change
return 0;
}
/// <summary>
/// getter for the data
/// </summary>
/// <returns>The data</returns>
public override uint GetData()
{
//Array of data. This function would need to change
return 0;
}
/// <summary>
/// Convert this object into string form
/// </summary>
/// <returns>The string form of this object</returns>
public override string ToString()
{
string msg = base.ToString();
for (int i = 0; i < m_dataArray.Length; i++)
{
msg += " address: " + m_dataArray[i].m_address.ToString("X8") + "\r\n";
msg += " data: " + m_dataArray[i].m_data.ToString("X8") + "\r\n\r\n";
}
return msg;
}
#endregion
}
}

View File

@@ -0,0 +1,174 @@
// UNCLASSIFIED
/*-------------------------------------------------------------------------
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
COMPANY.
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
GOVERNMENT.
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
-------------------------------------------------------------------------*/
using System;
using System.Runtime.InteropServices;
using Raytheon.Common;
namespace FpgaMeasurementInstrumentsLib
{
/// <summary>
/// The response message for the FPGAReadRegisterCmdMessage
/// </summary>
internal class FPGAReadRegisterRspMessage : FPGARspMessage
{
#region PrivateClassMembers
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct Data
{
public uint m_address;
public uint m_data;
};
private Data m_dataStruct;
#endregion
#region PrivateFunctions
/// <summary>
/// Create a copy of this object
/// </summary>
/// <returns>A copy of this object</returns>
protected override object CloneSelf()
{
FPGAReadRegisterRspMessage msg = new FPGAReadRegisterRspMessage(this);
return msg;
}
/// <summary>
/// Encode the message into a byte array for sending.
/// </summary>
/// <param name="pData">The buffer to put the message items</param>
protected override void FormatData(IntPtr pData)
{
try
{
// perform byte swapping and copy data into the buffer
Data dataTemp = m_dataStruct;
dataTemp.m_address = Util.Swap(dataTemp.m_address);
dataTemp.m_data = Util.Swap(dataTemp.m_data);
Marshal.StructureToPtr(dataTemp, pData, true);
}
catch (Exception)
{
throw;
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
protected override int GetPayloadSize()
{
return Marshal.SizeOf(typeof(Data));
}
/// <summary>
/// Takes an array of bytes and populates the message object
/// </summary>
/// <param name="pData">The message in byte form</param>
protected override void ParseData(IntPtr pData)
{
try
{
// copy data into our structure and byte swap
m_dataStruct = (Data)(Marshal.PtrToStructure(pData, typeof(Data)));
m_dataStruct.m_address = Util.Swap(m_dataStruct.m_address);
m_dataStruct.m_data = Util.Swap(m_dataStruct.m_data);
}
catch (Exception)
{
throw;
}
}
#endregion
#region PublicFunctions
/// <summary>
/// Copy constructor
/// </summary>
/// <param name="rhs">The object to copy</param>
public FPGAReadRegisterRspMessage(FPGAReadRegisterRspMessage rhs)
: base(rhs)
{
try
{
m_dataStruct = rhs.m_dataStruct;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// The constructor
/// </summary>
/// <param name="address">The address that was read from from</param>
/// <param name="data">The data that was read</param>
public FPGAReadRegisterRspMessage(uint address, uint data)
: base(FPGARspMsgIds.TYPE_TWO_READ_RSP_ID, "Read Register Response Message")
{
try
{
m_dataStruct.m_address = address;
m_dataStruct.m_data = data;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// getter for the address
/// </summary>
/// <returns>TThe address</returns>
public override uint GetAddress()
{
return m_dataStruct.m_address;
}
/// <summary>
/// getter for the data
/// </summary>
/// <returns>The data</returns>
public override uint GetData()
{
return m_dataStruct.m_data;
}
/// <summary>
/// Convert this object into string form
/// </summary>
/// <returns>The string form of this object</returns>
public override string ToString()
{
string msg = base.ToString();
msg += " address: " + m_dataStruct.m_address.ToString("X8") + "\r\n";
msg += " data: " + m_dataStruct.m_data.ToString("X8") + "\r\n\r\n";
return msg;
}
#endregion
}
}

View File

@@ -0,0 +1,197 @@
// UNCLASSIFIED
/*-------------------------------------------------------------------------
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
COMPANY.
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
GOVERNMENT.
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
-------------------------------------------------------------------------*/
using System;
namespace FpgaMeasurementInstrumentsLib
{
/// <summary>
/// An abstract base class for FPGARspMessages that go between the client and server
/// </summary>
internal abstract class FPGARspMessage : ICloneable
{
#region PrivateClassMembers
protected FPGARspMessageHeader m_header;
private readonly string m_description;
#endregion
#region PrivateFunctions
/// <summary>
/// The constructor that the children will call
/// </summary>
/// <param name="commandType">The message id</param>
/// <param name="description">The message description</param>
protected FPGARspMessage(FPGARspMsgIds commandType, string description)
{
try
{
m_description = description;
m_header = new FPGARspMessageHeader(commandType);
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Copy Constructor
/// </summary>
/// <param name="FPGARspMessage">The FPGARspMessage to copy from</param>
protected FPGARspMessage(FPGARspMessage FPGARspMessage)
{
try
{
m_header = new FPGARspMessageHeader(FPGARspMessage.m_header);
m_description = FPGARspMessage.m_description;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// A function to create a copy of the object for all children to implement
/// </summary>
/// <returns></returns>
protected abstract object CloneSelf();
/// <summary>
/// A function to encode data for sending
/// </summary>
/// <param name="pData">A pointer to the spot to put the encoded data</param>
protected abstract void FormatData(IntPtr pData);
/// <summary>
/// Get the size of the payload
/// </summary>
/// <returns>The size of the message payload</returns>
protected abstract int GetPayloadSize();
/// <summary>
/// A function to decode data that was received
/// </summary>
/// <param name="pData">A pointer to the data to decode</param>
protected abstract void ParseData(IntPtr pData);
#endregion
#region PublicFunctions
/// <summary>
/// Get a copy of the FPGARspMessage object
/// </summary>
/// <returns></returns>
public object Clone()
{
// tell the child to clone itself
return this.CloneSelf();
}
/// <summary>
/// Encode the FPGARspMessage into a byte array for sending
/// </summary>
/// <param name="pData">The buffer to put the FPGARspMessage items</param>
public void Format(IntPtr pData)
{
try
{
m_header.Format(pData);
IntPtr pPayload = IntPtr.Add(pData, (int)GetHeaderLength());
// ask child class to format its data
FormatData(pPayload);
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// A getter function for the children to implement
/// </summary>
/// <returns>The address that was read</returns>
public abstract uint GetAddress();
/// <summary>
/// A getter function for the children to implement
/// </summary>
/// <returns>The data that was read</returns>
public abstract uint GetData();
/// <summary>
/// Getter for this message description
/// </summary>
/// <returns>The description</returns>
public string GetDescription()
{
return m_description;
}
/// <summary>
/// Getter for the number of bytes in the entire message
/// </summary>
/// <returns>The number of bytes in the FPGARspMessage, including header</returns>
public uint GetEntireMsgLength()
{
return GetHeaderLength() + (uint)GetPayloadSize();
}
/// <summary>
/// getter for the number of bytes in the header
/// </summary>
/// <returns>The number of bytes in the head</returns>
public uint GetHeaderLength()
{
return m_header.GetHeaderLength();
}
/// <summary>
/// Takes an array of bytes and populates the FPGARspMessage object
/// </summary>
/// <param name="pData">The FPGARspMessage in byte form</param>
public void Parse(IntPtr pData)
{
try
{
m_header.Parse(pData);
IntPtr pPayLoad = IntPtr.Add(pData, (int)GetHeaderLength());
ParseData(pPayLoad);
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Convert this FPGARspMessage into string form
/// </summary>
/// <returns>The FPGARspMessage in string form</returns>
public override string ToString()
{
return "Description: " + GetDescription() + "\n" + m_header.ToString();
}
#endregion
}
}

View File

@@ -0,0 +1,154 @@
// UNCLASSIFIED
/*-------------------------------------------------------------------------
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
COMPANY.
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
GOVERNMENT.
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
-------------------------------------------------------------------------*/
using System;
namespace FpgaMeasurementInstrumentsLib
{
/// <summary>
/// The header for the response messages
/// </summary>
internal class FPGARspMessageHeader
{
#region PrivateClassMembers
private const int m_HEADER_SIZE = 0;
private const uint m_ENTIRE_MSG_SIZE = 8;
#endregion
#region PublicFunctions
/// <summary>
/// Copy constructor
/// </summary>
/// <param name="header">The header to copy</param>
public FPGARspMessageHeader(FPGARspMessageHeader header)
{
try
{
// m_data = header.m_data;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Constructor for when receiving data.
/// Use this constructor and then parse to populate it
/// </summary>
public FPGARspMessageHeader()
{
try
{
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Constructor for sending
/// </summary>
/// <param name="commandType">the type of the message</param>
public FPGARspMessageHeader(FPGARspMsgIds commandType)
{
try
{
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Encode the header into a byte array for sending
/// </summary>
/// <param name="pData">The buffer to put the message items</param>
public void Format(IntPtr pData)
{
try
{
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Getter for the entire message length in bytes
/// </summary>
/// <returns>The number of bytes in the message, including header</returns>
public uint GetEntireMsgLength()
{
try
{
return m_ENTIRE_MSG_SIZE;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// getter for the header length in bytes
/// </summary>
/// <returns>The header length in bytes</returns>
public uint GetHeaderLength()
{
try
{
return m_HEADER_SIZE;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Takes an array of bytes and populates the header object
/// </summary>
/// <param name="pData">The header in byte form</param>
public void Parse(IntPtr pData)
{
try
{
// copy data into our structure and byte swap
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Creates a string version of the header members
/// </summary>
/// <returns>A string containning the header data</returns>
public override string ToString()
{
string msg = "Header Data:\r\n\r\n";
return msg;
}
#endregion
}
}

View File

@@ -0,0 +1,202 @@
// UNCLASSIFIED
/*-------------------------------------------------------------------------
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
COMPANY.
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
GOVERNMENT.
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
-------------------------------------------------------------------------*/
using Raytheon.Common;
using System;
using System.Runtime.InteropServices;
namespace FpgaMeasurementInstrumentsLib
{
/// <summary>
///
/// </summary>
internal class FPGAWriteRegisterCmdBlockIncrMessage : FPGACmdMessage
{
#region PrivateClassMembers
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct Data
{
public uint m_address;
};
private byte[] m_data;
private Data m_dataStruct;
private bool m_byteSwap;
#endregion
#region PrivateFunctions
/// <summary>
/// Create a copy of this object
/// </summary>
/// <returns>A copy of this object</returns>
protected override object CloneSelf()
{
FPGAWriteRegisterCmdBlockIncrMessage msg = new FPGAWriteRegisterCmdBlockIncrMessage(this);
return msg;
}
/// <summary>
/// Encode the message into a byte array for sending.
/// </summary>
/// <param name="pData">The buffer to put the message items</param>
protected override void FormatData(IntPtr pData)
{
try
{
//Temporary storage for message data
Data dataTemp = m_dataStruct;
//address swap
dataTemp.m_address = Util.Swap(dataTemp.m_address);
//Do we need to swap bytes
if (m_byteSwap == true)
{
SwapWord(ref m_data);
}
//Pointer to message
Marshal.StructureToPtr(dataTemp, pData, true);
pData = IntPtr.Add(pData, Marshal.SizeOf(typeof(Data)));
Marshal.Copy(m_data, 0, pData, m_data.Length);
}
catch (Exception)
{
throw;
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
protected override int GetPayloadSize()
{
return Marshal.SizeOf(m_dataStruct) + m_data.Length;
}
/// <summary>
/// Takes an array of bytes and populates the message object
/// </summary>
/// <param name="pData">The message in byte form</param>
protected override void ParseData(IntPtr pData)
{
try
{
//copy data into our structure
m_dataStruct = (Data)(Marshal.PtrToStructure(pData, typeof(Data)));
pData = IntPtr.Add(pData, Marshal.SizeOf(typeof(Data)));
Marshal.Copy(pData, m_data, 0, m_data.Length);
m_dataStruct.m_address = Util.Swap(m_dataStruct.m_address);
//Swap data if required
if (m_byteSwap)
{
SwapWord(ref m_data);
}
}
catch (Exception)
{
throw;
}
}
#endregion
#region PublicFunctions
/// <summary>
/// Copy constructor
/// </summary>
/// <param name="rhs">The object to copy</param>
public FPGAWriteRegisterCmdBlockIncrMessage(FPGAWriteRegisterCmdBlockIncrMessage rhs)
: base(rhs)
{
try
{
m_dataStruct = rhs.m_dataStruct;
m_byteSwap = rhs.m_byteSwap;
m_data = rhs.m_data;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// The constructor for sending
/// </summary>
public FPGAWriteRegisterCmdBlockIncrMessage(Page page, uint address, byte[] data, bool swapDataBytes)
: base(FPGACmdMsgIds.TYPE_THREE_WRITE_CMD_ID, page, "Write Register Command Increment Block")
{
try
{
m_dataStruct.m_address = address;
m_data = data;
m_byteSwap = swapDataBytes;
}
catch (Exception)
{
throw;
}
}
/// <summary>
///
/// </summary>
/// <param name="page"></param>
/// <param name="address"></param>
/// <param name="data"></param>
/// <param name="swapDataBytes"></param>
public FPGAWriteRegisterCmdBlockIncrMessage(Page page, uint address, uint[] data, bool swapDataBytes)
: base(FPGACmdMsgIds.TYPE_THREE_WRITE_CMD_ID, page, "Write Register Command Increment Block")
{
try
{
m_dataStruct.m_address = address;
m_byteSwap = swapDataBytes;
//Convert to Byte Array
m_data = new byte[data.Length * sizeof(uint)];
Buffer.BlockCopy(data, 0, m_data, 0, m_data.Length);
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Convert this object into string form
/// </summary>
/// <returns></returns>
public override string ToString()
{
string msg = base.ToString();
msg += " address: " + m_dataStruct.m_address.ToString("X8") + "\r\n\r\n";
return msg;
}
#endregion
}
}

View File

@@ -0,0 +1,202 @@
// UNCLASSIFIED
/*-------------------------------------------------------------------------
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
COMPANY.
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
GOVERNMENT.
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
-------------------------------------------------------------------------*/
using Raytheon.Common;
using System;
using System.Runtime.InteropServices;
namespace FpgaMeasurementInstrumentsLib
{
/// <summary>
///
/// </summary>
internal class FPGAWriteRegisterCmdBlockMessage : FPGACmdMessage
{
#region PrivateClassMembers
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct Data
{
public uint m_address;
};
private byte[] m_data;
private Data m_dataStruct;
private bool m_byteSwap;
#endregion
#region PrivateFunctions
/// <summary>
/// Create a copy of this object
/// </summary>
/// <returns>A copy of this object</returns>
protected override object CloneSelf()
{
FPGAWriteRegisterCmdBlockMessage msg = new FPGAWriteRegisterCmdBlockMessage(this);
return msg;
}
/// <summary>
/// Encode the message into a byte array for sending.
/// </summary>
/// <param name="pData">The buffer to put the message items</param>
protected override void FormatData(IntPtr pData)
{
try
{
//Temporary storage for message data
Data dataTemp = m_dataStruct;
//address swap
dataTemp.m_address = Util.Swap(dataTemp.m_address);
//Do we need to swap bytes
if (m_byteSwap)
{
//Swap
SwapWord(ref m_data);
}
//Pointer to message
Marshal.StructureToPtr(dataTemp, pData, true);
pData = IntPtr.Add(pData, Marshal.SizeOf(typeof(Data)));
Marshal.Copy(m_data, 0, pData, m_data.Length);
}
catch (Exception)
{
throw;
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
protected override int GetPayloadSize()
{
return Marshal.SizeOf(m_dataStruct) + m_data.Length;
}
/// <summary>
/// Takes an array of bytes and populates the message object
/// </summary>
/// <param name="pData">The message in byte form</param>
protected override void ParseData(IntPtr pData)
{
try
{
//copy data into our structure
m_dataStruct = (Data)(Marshal.PtrToStructure(pData, typeof(Data)));
pData = IntPtr.Add(pData, Marshal.SizeOf(typeof(Data)));
Marshal.Copy(pData, m_data, 0, m_data.Length);
m_dataStruct.m_address = Util.Swap(m_dataStruct.m_address);
//Swap data if required
if (m_byteSwap)
{
SwapWord(ref m_data);
}
}
catch (Exception)
{
throw;
}
}
#endregion
#region PublicFunctions
/// <summary>
/// Copy constructor
/// </summary>
/// <param name="rhs">The object to copy</param>
public FPGAWriteRegisterCmdBlockMessage(FPGAWriteRegisterCmdBlockMessage rhs)
: base(rhs)
{
try
{
m_dataStruct = rhs.m_dataStruct;
m_byteSwap = rhs.m_byteSwap;
m_data = rhs.m_data;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// The constructor for sending
/// </summary>
public FPGAWriteRegisterCmdBlockMessage(Page page, uint address, byte[] data, bool swapDataBytes)
: base(FPGACmdMsgIds.TYPE_TWO_WRITE_CMD_ID, page, "Write Register Command Block")
{
try
{
m_dataStruct.m_address = address;
m_byteSwap = swapDataBytes;
m_data = data;
}
catch (Exception)
{
throw;
}
}
/// <summary>
///
/// </summary>
/// <param name="page"></param>
/// <param name="address"></param>
/// <param name="data"></param>
/// <param name="swapDataBytes"></param>
public FPGAWriteRegisterCmdBlockMessage(Page page, uint address, uint[] data, bool swapDataBytes)
: base(FPGACmdMsgIds.TYPE_TWO_WRITE_CMD_ID, page, "Write Register Command Block")
{
try
{
m_dataStruct.m_address = address;
m_byteSwap = swapDataBytes;
m_data = new byte[data.Length * sizeof(uint)];
Buffer.BlockCopy(data, 0, m_data, 0, m_data.Length);
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Convert this object into string form
/// </summary>
/// <returns></returns>
public override string ToString()
{
string msg = base.ToString();
msg += " address: " + m_dataStruct.m_address.ToString("X8") + "\r\n\r\n";
return msg;
}
#endregion
}
}

View File

@@ -0,0 +1,153 @@
// UNCLASSIFIED
/*-------------------------------------------------------------------------
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
COMPANY.
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
GOVERNMENT.
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
-------------------------------------------------------------------------*/
using Raytheon.Common;
using System;
using System.Runtime.InteropServices;
namespace FpgaMeasurementInstrumentsLib
{
/// <summary>
/// The message that targets the VRSUI to make a connection
/// </summary>
internal class FPGAWriteRegisterCmdMessage : FPGACmdMessage
{
#region PrivateClassMembers
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct Data
{
public uint m_address;
public uint m_data;
};
private Data m_dataStruct;
#endregion
#region PrivateFunctions
/// <summary>
/// Create a copy of this object
/// </summary>
/// <returns>A copy of this object</returns>
protected override object CloneSelf()
{
FPGAWriteRegisterCmdMessage msg = new FPGAWriteRegisterCmdMessage(this);
return msg;
}
/// <summary>
/// Encode the message into a byte array for sending.
/// </summary>
/// <param name="pData">The buffer to put the message items</param>
protected override void FormatData(IntPtr pData)
{
try
{
// perform byte swapping and copy data into the buffer
Data dataTemp = m_dataStruct;
dataTemp.m_address = Util.Swap(dataTemp.m_address);
dataTemp.m_data = Util.Swap(dataTemp.m_data);
Marshal.StructureToPtr(dataTemp, pData, true);
}
catch (Exception)
{
throw;
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
protected override int GetPayloadSize()
{
return Marshal.SizeOf(m_dataStruct);
}
/// <summary>
/// Takes an array of bytes and populates the message object
/// </summary>
/// <param name="pData">The message in byte form</param>
protected override void ParseData(IntPtr pData)
{
try
{
// copy data into our structure and byte swap
m_dataStruct = (Data)(Marshal.PtrToStructure(pData, typeof(Data)));
m_dataStruct.m_address = Util.Swap(m_dataStruct.m_address);
m_dataStruct.m_data = Util.Swap(m_dataStruct.m_data);
}
catch (Exception)
{
throw;
}
}
#endregion
#region PublicFunctions
/// <summary>
/// Copy constructor
/// </summary>
/// <param name="rhs">The object to copy</param>
public FPGAWriteRegisterCmdMessage(FPGAWriteRegisterCmdMessage rhs)
: base(rhs)
{
try
{
m_dataStruct = rhs.m_dataStruct;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// The constructor for sending
/// </summary>
public FPGAWriteRegisterCmdMessage(Page page, uint address, uint data)
: base(FPGACmdMsgIds.TYPE_TWO_WRITE_CMD_ID, page, "Write Register Command")
{
try
{
m_dataStruct.m_address = address;
m_dataStruct.m_data = data;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Convert this object into string form
/// </summary>
/// <returns></returns>
public override string ToString()
{
string msg = base.ToString();
msg += " address: " + m_dataStruct.m_address.ToString("X8") + "\r\n";
msg += " data: " + m_dataStruct.m_data.ToString("X8") + "\r\n\r\n";
return msg;
}
#endregion
}
}

View File

@@ -0,0 +1,174 @@
// UNCLASSIFIED
/*-------------------------------------------------------------------------
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
COMPANY.
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
GOVERNMENT.
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
-------------------------------------------------------------------------*/
using System;
using System.Runtime.InteropServices;
using Raytheon.Common;
namespace FpgaMeasurementInstrumentsLib
{
/// <summary>
/// The response message from the VRSUI upon receiving a VrsConnectCmdMessage
/// </summary>
internal class FPGAWriteRegisterRspMessage : FPGARspMessage
{
#region PrivateClassMembers
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct Data
{
public uint m_address;
public uint m_data;
};
private Data m_dataStruct;
#endregion
#region PrivateFunctions
/// <summary>
/// Create a copy of this object
/// </summary>
/// <returns>A copy of this object</returns>
protected override object CloneSelf()
{
FPGAWriteRegisterRspMessage msg = new FPGAWriteRegisterRspMessage(this);
return msg;
}
/// <summary>
/// Encode the message into a byte array for sending.
/// </summary>
/// <param name="pData">The buffer to put the message items</param>
protected override void FormatData(IntPtr pData)
{
try
{
// perform byte swapping and copy data into the buffer
Data dataTemp = m_dataStruct;
dataTemp.m_address = Util.Swap(dataTemp.m_address);
dataTemp.m_data = Util.Swap(dataTemp.m_data);
Marshal.StructureToPtr(dataTemp, pData, true);
}
catch (Exception)
{
throw;
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
protected override int GetPayloadSize()
{
return Marshal.SizeOf(typeof(Data));
}
/// <summary>
/// Takes an array of bytes and populates the message object
/// </summary>
/// <param name="pData">The message in byte form</param>
protected override void ParseData(IntPtr pData)
{
try
{
// copy data into our structure and byte swap
m_dataStruct = (Data)(Marshal.PtrToStructure(pData, typeof(Data)));
m_dataStruct.m_address = Util.Swap(m_dataStruct.m_address);
m_dataStruct.m_data = Util.Swap(m_dataStruct.m_data);
}
catch (Exception)
{
throw;
}
}
#endregion
#region PublicFunctions
/// <summary>
/// Copy constructor
/// </summary>
/// <param name="rhs">The object to copy</param>
public FPGAWriteRegisterRspMessage(FPGAWriteRegisterRspMessage rhs)
: base(rhs)
{
try
{
m_dataStruct = rhs.m_dataStruct;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// The constructor for sending
/// </summary>
/// <param name="address">The address to write to</param>
/// <param name="data">The data to write</param>
public FPGAWriteRegisterRspMessage(uint address, uint data)
: base(FPGARspMsgIds.TYPE_TWO_WRITE_RSP_ID, "Write Register Response Message")
{
try
{
m_dataStruct.m_address = address;
m_dataStruct.m_data = data;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// getter for the address
/// </summary>
/// <returns>The address</returns>
public override uint GetAddress()
{
return m_dataStruct.m_address;
}
/// <summary>
/// getter for the data
/// </summary>
/// <returns>The data</returns>
public override uint GetData()
{
return m_dataStruct.m_data;
}
/// <summary>
/// Convert this object into string form
/// </summary>
/// <returns>The string form of this object</returns>
public override string ToString()
{
string msg = base.ToString();
msg += " address: " + m_dataStruct.m_address.ToString("X8") + "\r\n";
msg += " data: " + m_dataStruct.m_data.ToString("X8") + "\r\n\r\n";
return msg;
}
#endregion
}
}