コード例 #1
0
            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;
            }
コード例 #2
0
 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設定エラー。");
     }
 }
コード例 #3
0
        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]以上に設定すること。");
            }
        }
コード例 #4
0
        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;
        }
コード例 #5
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();
 }
コード例 #6
0
 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();
 }