Example #1
0
        public static DataGroupBlock Read(Mdf mdf, Stream stream, uint position)
        {
            stream.Position = position;

            var block = new DataGroupBlock(mdf);

            block.Read(stream);
            block.stream = stream;

            var data = new byte[block.Size - 4];
            var read = stream.Read(data, 0, data.Length);

            if (read != data.Length)
            {
                throw new FormatException();
            }

            block.nextBlock = null;
            block.Trigger   = null;
            block.Reserved  = 0;

            block.ptrNextDataGroup          = BitConverter.ToUInt32(data, 0);
            block.ptrFirstChannelGroupBlock = BitConverter.ToUInt32(data, 4);
            block.ptrTriggerBlock           = BitConverter.ToUInt32(data, 8);
            block.ptrDataBlock     = BitConverter.ToUInt32(data, 12);
            block.NumChannelGroups = BitConverter.ToUInt16(data, 16);
            block.NumRecordIds     = BitConverter.ToUInt16(data, 18);

            if (data.Length >= 24)
            {
                block.Reserved = BitConverter.ToUInt32(data, 20);
            }

            if (block.ptrFirstChannelGroupBlock != 0)
            {
                block.ChannelGroups.Read(ChannelGroupBlock.Read(mdf, stream, block.ptrFirstChannelGroupBlock));
            }

            /// TODO: Call Trigger Blocks
            //if (m_ptrTriggerBlock != 0)
            //{
            //    Mdf.Data.Position = m_ptrTriggerBlock;
            //    Trigger = new TriggerBlock(mdf);
            //}

            /// TODO: Call ProgramsBlock ?
            //if (ptrProgramBlock != 0)
            //{
            //    Mdf.Data.Position = ptrProgramBlock;
            //    ProgramBlock = new ProgramBlock(mdf);
            //}

            return(block);
        }
Example #2
0
 public DataRecord(ChannelGroupBlock channelGroup, byte[] data)
 {
     ChannelGroup = channelGroup;
     Data         = data;
 }