我正在为I2C总线上有许多可单独寻址的设备的产品创建内部诊断应用程序。你会如何模拟这个设备?
总的想法是,我查询总线上的每个设备,并获得'原始数据'的字节数组。字节数组的长度取决于单个设备。
我创建了一个名为'FormattedData'的抽象类,名为'RawData'。
public abstract class FormattedData {
protected byte[] _rawData;
public FormattedData(int rawDataLength) {
_rawData = new byte[rawDataLength];
}
public byte[] RawData {
get { return _rawData; }
set {
if (value.Length != _rawData.Length) {
throw new ArgumentOutOfRangeException("RawData",
"The Raw Data byte array for a " + this.GetType().Name +
" must be " + _rawData.Length.ToString() + "-bytes long." +
Environment.NewLine +
"Length of supplied array: [" + value.Length.ToString() + "]");
}
_rawData = value;
}
}
}
I2C总线上的每个设备都通过从FormattedData继承来获得它自己的模型。
然后,我可以根据需要通过操作来自RawData字节数组的数据来暴露设备的一堆属性。就我的目的而言,数据全部是只读的。例如:
public class MyTestDevice : FormattedData {
public MyTestDevice()
: base(256) {
}
public string VendorName {
get { return (ASCIIEncoding.ASCII.GetString(_rawData, 20, 16)); }
set { ;}
}
public bool LossOfSignal {
get { return ((_rawData[110] & 0x02) == 0x02); }
set { ;}
}
}
所以,到我的问题。
我正在为基于SFF-8472规范的SFP收发器创建一个模型。长话短说,单个物理SFP设备有2原始数据表(AO和A2)。每个数据表必须独立查询,并且可以返回最多256个字节。
问题是来自A2表的一些属性取决于来自A0表的值(根据A0表中设置的标志,来自A2表的一些模拟值的缩放比例不同)。
使用多于一个'原始数据'字节数组来模拟这种设备的最佳方式是什么?以及在哪里可能来自一个数组的值可能取决于另一个数组的值?
如果可能,我想为所有设备维护某种标准接口。
有一些优势,能够?治疗每个设备都相同 - 例如: var cast =(FormattedData)MyTestDevice; cast.RawData = .... 更具体地说,我想要一个List - 当其中一个设备偏离标准的'FormattedData'模式时,我该如何做到这一点? –
user158485