unsafe private CAN_FRAME[] GetCANFrames() { CAN_SEND_MODE mSendMode = (CAN_SEND_MODE)CAN.CAN_SEND_MODE_LIST[this.cbxSendMode.SelectedItem.ToString()]; CAN_FRAME_TYPE mFrameType = (CAN_FRAME_TYPE)CAN.CAN_FRAME_TYPE_LIST[this.cbxFrameType.SelectedItem]; CAN_FRAME_FORMAT mFrameFormat = (CAN_FRAME_FORMAT)CAN.CAN_FRAME_FORMAT_LIST[this.cbxFrameFormat.SelectedItem]; uint id = Convert.ToUInt32(tbxFrameID.Text, 16); uint mSendNum = Convert.ToUInt32(this.tbxSendNum.Text, 10); double mSendInterval = Convert.ToDouble(this.tbxSendInterval.Text); string[] sDataArr = new Regex("[\\s]+").Replace(this.tbxFrameData.Text.Trim(), " ").Split(' '); byte mDataLen = (byte)sDataArr.Length; StringBuilder sbBuilder = new StringBuilder("0x"); for (int index = mDataLen - 1; index >= 0; index--) { sbBuilder.Append(sDataArr[index].PadLeft(2, '0')); } ulong data = Convert.ToUInt64(sbBuilder.ToString(), 16); bool incID = chbxIncID.Checked; bool incData = chbxIncData.Checked; CAN_FRAME[] pCANFrames = new CAN_FRAME[mSendNum]; for (uint index = 0; index < mSendNum; index++) { CAN_OBJ pCANObj = new CAN_OBJ(); if (!incID) { pCANObj.ID = id; } else { pCANObj.ID = id + index; if (mFrameFormat == CAN_FRAME_FORMAT.STANDARD_FRAME && pCANObj.ID > CAN.STANDARD_FRAME_ID_MAXIMUM) { pCANObj.ID = CAN.STANDARD_FRAME_ID_MAXIMUM; } else if (mFrameFormat == CAN_FRAME_FORMAT.EXTENDED_FRAME && pCANObj.ID > CAN.EXTENDED_FRAME_ID_MAXIMUM) { pCANObj.ID = CAN.EXTENDED_FRAME_ID_MAXIMUM; } } //pCANObj.ID = incID ? id + index : id; pCANObj.DataLen = mDataLen; ulong ulData = incData ? data + index : data; Marshal.Copy(BitConverter.GetBytes(ulData), 0, (IntPtr)pCANObj.Data, (int)CAN.FRAME_DATA_LENGTH_MAXIMUM); pCANObj.SendType = (byte)mSendMode; pCANObj.RemoteFlag = (byte)mFrameType; pCANObj.ExternFlag = (byte)mFrameFormat; pCANObj.TimeFlag = (byte)CAN_FRAME_TIME_FLAG.INVALID; pCANObj.TimeStamp = 0; pCANFrames[index] = new CAN_FRAME(pCANObj, DateTime.Now, CAN_FRAME_DIRECTION.SEND, CAN_FRAME_STATUS.UNKNOWN); } return(pCANFrames); }
/************************************************************************************/ public CAN_DATA(long mQueueIndex, CAN_FRAME pCANFrame, DataGridViewRow row) { this.QueueIndex = mQueueIndex; this.CANFrame = pCANFrame; this.Row = row; this.Init(); }