public DataMask(PublicApis.CanDataMask dataMask) { StartIdx = ((Int32)dataMask.BytePos * 8 + (7 - (Int32)dataMask.BitPos) - ((Int32)dataMask.BitLen - 1)) / 8; if ((StartIdx < 0) || (dataMask.BitLen > 64) || (dataMask.BitPos >= 8)) { throw new Exception("DataMask設定エラー。"); } int maskListCount = (int)Math.Ceiling((float)(dataMask.BitPos + dataMask.BitLen) / 8); LShift = (Int32)(dataMask.BitPos); Byte lastMsk = (Byte)((0xFF << LShift) & 0xFF); Byte fstMsk = (Byte)(0xFF >> ((128 - (int)dataMask.BitPos - (int)dataMask.BitLen) % 8)); for (int idx = 0; idx < maskListCount; idx++) { Byte msk = 0xFF; if (idx == 0) { msk &= fstMsk; } if (idx == (maskListCount - 1)) { msk &= lastMsk; } MaskList.Add(msk); } RefVar = dataMask.RefVar; }
public DataMask(PublicApis.CanDataMask dataMask) { LShift = (Int32)(8 * (7 - dataMask.BytePos) + dataMask.BitPos); RefVar = dataMask.RefVar; Mask = (((UInt64)1 << (Int32)dataMask.BitLen) - 1) << LShift; if (((dataMask.BitLen + LShift) > 64) || (dataMask.BitPos >= 8)) { throw new Exception("DataMask設定エラー。"); } }
public CanDiagSendCommand( UInt32 inSendCanId, IReadOnlyList <Byte> inSendDataList, PublicApis.CanDataMask inDataMask, IReadOnlyList <PublicApis.CanDataMask> inDataMaskList, UInt32 inSendNta, UInt32 inResponseCanId, UInt32 inResponseNta, double inRepeatTime, string inStop ) { _NextState = null; _StopState = inStop; if (inSendDataList.Count > 4095) { throw new Exception("CanDiagSendの送信最大サイズは4095[B]です。"); } _SendDataList = inSendDataList; _DataMaskList = new List <DataMask>(); if (inDataMask != null) { _DataMaskList.Add(new DataMask(inDataMask)); } if (inDataMaskList != null) { foreach (var dataMask in inDataMaskList) { _DataMaskList.Add(new DataMask(dataMask)); } } foreach (var msk in _DataMaskList) { if ((msk.StartIdx + msk.MaskList.Count) > _SendDataList.Count) { throw new Exception("DataMask設定エラー。"); } } _SendCanId = inSendCanId; _SendNta = inSendNta; _ResponseCanId = inResponseCanId; _ResponseNta = inResponseNta; _ResponseDataArrayName = null; _RepeatTimeMs = (UInt32)(inRepeatTime * 1000); if (_RepeatTimeMs < (2 * PublicConfig.SamplingTimeMSec)) { throw new Exception("時間は" + (2 * PublicConfig.SamplingTimeMSec) + "[ms]以上に設定すること。"); } }
public CanDiagSendCommand( string inNext, UInt32 inSendCanId, IReadOnlyList <Byte> inSendDataList, PublicApis.CanDataMask inDataMask, IReadOnlyList <PublicApis.CanDataMask> inDataMaskList, UInt32 inSendNta, UInt32 inResponseCanId, UInt32 inResponseNta, string inResponseDataArrayName ) { _NextState = inNext; _StopState = null; if (inSendDataList.Count > 4095) { throw new Exception("CanDiagSendの送信最大サイズは4095[B]です。"); } _SendDataList = inSendDataList; _DataMaskList = new List <DataMask>(); if (inDataMask != null) { _DataMaskList.Add(new DataMask(inDataMask)); } if (inDataMaskList != null) { foreach (var dataMask in inDataMaskList) { _DataMaskList.Add(new DataMask(dataMask)); } } foreach (var msk in _DataMaskList) { if ((msk.StartIdx + msk.MaskList.Count) > _SendDataList.Count) { throw new Exception("DataMask設定エラー。"); } } _SendCanId = inSendCanId; _SendNta = inSendNta; _ResponseCanId = inResponseCanId; _ResponseNta = inResponseNta; _ResponseDataArrayName = inResponseDataArrayName; _RepeatTimeMs = 0; }
public CanSendCommand( UInt32 inSendCanId, IReadOnlyList <Byte> inSendDataList, PublicApis.CanDataMask inDataMask, List <PublicApis.CanDataMask> inDataMaskList, UInt32 inResponseCanId, double inRepeatTime, string inStop ) { _NextState = null; _StopState = inStop; _SendCanId = inSendCanId; _SendData = ConvertToUInt64(inSendDataList); _SendDataLen = inSendDataList.Count; _DataMaskList = new List <DataMask>(); if (inDataMask != null) { _DataMaskList.Add(new DataMask(inDataMask)); } if (inDataMaskList != null) { foreach (var dataMask in inDataMaskList) { _DataMaskList.Add(new DataMask(dataMask)); } } foreach (var msk in _DataMaskList) { if ((msk.LShift + (_SendDataLen * 8)) < 64) { throw new Exception("DataMask設定エラー。"); } } _ResponseCanId = inResponseCanId; _RepeatTimeMs = (UInt32)(inRepeatTime * 1000); if (_RepeatTimeMs < (2 * PublicConfig.SamplingTimeMSec)) { throw new Exception("時間は" + (2 * PublicConfig.SamplingTimeMSec) + "[ms]以上に設定すること。"); } CheckParam(); }
public CanSendCommand( UInt32 inSendCanId, IReadOnlyList <Byte> inSendDataList, PublicApis.CanDataMask inDataMask, IReadOnlyList <PublicApis.CanDataMask> inDataMaskList, UInt32 inResponseCanId, string inNext ) { _NextState = inNext; _StopState = null; _SendCanId = inSendCanId; _SendData = ConvertToUInt64(inSendDataList); _SendDataLen = inSendDataList.Count; _DataMaskList = new List <DataMask>(); if (inDataMask != null) { _DataMaskList.Add(new DataMask(inDataMask)); } if (inDataMaskList != null) { foreach (var dataMask in inDataMaskList) { _DataMaskList.Add(new DataMask(dataMask)); } } foreach (var msk in _DataMaskList) { if ((msk.LShift + (_SendDataLen * 8)) < 64) { throw new Exception("DataMask設定エラー。"); } } _ResponseCanId = inResponseCanId; _RepeatTimeMs = 0; CheckParam(); }