void ReceiverOmap_MsgReceived(DspMessage msg) { switch (msg.Type) { case MsgType.MsgType_Data_VectorData: var vector = msg.GetDataAsStruct <DSPMsg_VectorData>(); if ((DataSaveType)vector.SaveType != DataSaveType.TimeSave) { var vectors = new VectorData[8]; foreach (var vec in VectorsQueue) { vectors[vec.ChannelId - 4] = vec; } DatasReceived(vectors); VectorsQueue.Clear(); } break; case MsgType.MsgType_Data_WaveData: WavesQueue.Enqueue(DSPMsg_WaveData.ParseWave(msg)); if (WavesQueue.Count >= ChannelCount) { var waves = new WaveData[8]; foreach (var wave in WavesQueue) { waves[wave.ChannelId - 4] = wave; } DatasReceived(waves); WavesQueue.Clear(); } break; } }
internal static int ReadHeader(ref DSPMsg_WaveData data, int i, byte[] buff) { data.Idx = (uint)ByteUtil.ReadInt32(buff, i); i += 4; data.ChannelId = ByteUtil.ReadInt32(buff, i); i += 4; data.SaveType = ByteUtil.ReadInt32(buff, i); i += 4; data.DateTime.UtcSeconds = ByteUtil.ReadInt32(buff, i); i += 4; data.DateTime.Miliseconds = ByteUtil.ReadInt32(buff, i); i += 4; data.Rpm = ByteUtil.ReadFloat(buff, i); i += 4; data.SyncDataCount = ByteUtil.ReadInt32(buff, i); i += 4; data.AsyncDataCount = ByteUtil.ReadInt32(buff, i); i += 4; //아래는 C구조체의 주소 저장부분 i += 4; i += 4; return(i); }
public static DSPMsg_WaveData ParseHeader(DspMessage msg) { var data = new DSPMsg_WaveData(); int i = 0; var buff = msg.Data; ReadHeader(ref data, i, buff); return(data); }
internal static int ReadBody(ref DSPMsg_WaveData data, int i, byte[] buff) { data.SyncData = new float[data.SyncDataCount]; int syncDataSize = sizeof(float) * data.SyncDataCount; Buffer.BlockCopy(buff, i, data.SyncData, 0, syncDataSize); i += syncDataSize; data.AsyncData = new float[data.AsyncDataCount]; int asyncDataSize = sizeof(float) * data.AsyncDataCount; var overSize = (asyncDataSize + i) - buff.Length; if (overSize > 0) { asyncDataSize -= overSize; } Buffer.BlockCopy(buff, i, data.AsyncData, 0, asyncDataSize); i += asyncDataSize; return(i); }